@acorex-platform/module-dashboard-management-client 0.0.59 → 0.0.60

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.
Files changed (28) hide show
  1. package/fesm2022/{acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-C5DXldyF.mjs → acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs} +55 -26
  2. package/fesm2022/acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-dashboard-management-client-bar-chart-widget.component-PcG74lR6.mjs → acorex-platform-module-dashboard-management-client-bar-chart-widget.component-CQ2GcT4k.mjs} +3 -3
  4. package/fesm2022/{acorex-platform-module-dashboard-management-client-bar-chart-widget.component-PcG74lR6.mjs.map → acorex-platform-module-dashboard-management-client-bar-chart-widget.component-CQ2GcT4k.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-card-widget.component-CNwlxjog.mjs → acorex-platform-module-dashboard-management-client-chart-card-widget.component-DxBEEgpN.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-card-widget.component-CNwlxjog.mjs.map → acorex-platform-module-dashboard-management-client-chart-card-widget.component-DxBEEgpN.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-BSs8ZurE.mjs → acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-OFusxkHL.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-BSs8ZurE.mjs.map → acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-OFusxkHL.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-widget-data.util-C3x9eufS.mjs → acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-widget-data.util-C3x9eufS.mjs.map → acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs.map} +1 -1
  11. package/fesm2022/acorex-platform-module-dashboard-management-client-contracts.mjs +2 -0
  12. package/fesm2022/acorex-platform-module-dashboard-management-client-contracts.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-module-dashboard-management-client-donut-chart-widget.component-B5Jmshla.mjs → acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BqKMqF3n.mjs} +3 -3
  14. package/fesm2022/{acorex-platform-module-dashboard-management-client-donut-chart-widget.component-B5Jmshla.mjs.map → acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BqKMqF3n.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-DvpbXFmP.mjs → acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BaJJhgw5.mjs} +3 -3
  16. package/fesm2022/{acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-DvpbXFmP.mjs.map → acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BaJJhgw5.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-B2Q7Etok.mjs → acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-DtXh5YgQ.mjs} +3 -3
  18. package/fesm2022/{acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-B2Q7Etok.mjs.map → acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-DtXh5YgQ.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-DZoHJMQE.mjs → acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BAMa-FUe.mjs} +3 -3
  20. package/fesm2022/{acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-DZoHJMQE.mjs.map → acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BAMa-FUe.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-dashboard-management-client-index-lPxGa-2n.mjs → acorex-platform-module-dashboard-management-client-index-Co5ImjCW.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-dashboard-management-client-index-lPxGa-2n.mjs.map → acorex-platform-module-dashboard-management-client-index-Co5ImjCW.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-module-dashboard-management-client-line-chart-widget.component-DQfL71SA.mjs → acorex-platform-module-dashboard-management-client-line-chart-widget.component-LJj5397n.mjs} +3 -3
  24. package/fesm2022/{acorex-platform-module-dashboard-management-client-line-chart-widget.component-DQfL71SA.mjs.map → acorex-platform-module-dashboard-management-client-line-chart-widget.component-LJj5397n.mjs.map} +1 -1
  25. package/fesm2022/acorex-platform-module-dashboard-management-client.mjs +1 -1
  26. package/package.json +1 -1
  27. package/types/acorex-platform-module-dashboard-management-client-contracts.d.ts +2 -1
  28. package/fesm2022/acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-C5DXldyF.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-dashboard-management-client-chart-widget-data.util-C3x9eufS.mjs","sources":["../../../../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"],"sourcesContent":["/**\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 { applyChartColorRulesFromOptions } from './chart-color-rules.util';\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 applyChartColorRulesFromOptions(payload?.series ?? [], opts, 'lineColor');\n }\n\n const inline = normalizeLineSeriesFromOptions(opts);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(inline, opts, 'lineColor');\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return applyChartColorRulesFromOptions(\n normalizeLineSeriesFromOptions({ ...opts, dataSource: items }),\n opts,\n 'lineColor',\n );\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 applyChartColorRulesFromOptions(payload?.items ?? [], opts);\n }\n\n const inline = normalizeLabelValueItems(opts, ['label', 'name', 'brand', 'brandLabel', 'brandTitle', 'category']);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(\n inline.map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n })),\n opts,\n );\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return applyChartColorRulesFromOptions(\n 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 opts,\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 applyChartColorRulesFromOptions(payload?.items ?? [], opts);\n }\n\n const inline = normalizeLabelValueItems(opts, ['label', 'name', 'brandLabel', 'brandTitle', 'brand', 'category']);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(\n inline.map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n })),\n opts,\n );\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return applyChartColorRulesFromOptions(\n 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 opts,\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 applyChartColorRulesFromOptions(payload?.items ?? [], opts);\n }\n\n const inline = normalizeLabelValueItems(opts, ['name', 'label', 'brandLabel', 'brandTitle', 'brand', 'category']);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(\n inline.map((item) => ({\n id: item.id ?? item.label,\n name: item.label,\n value: item.value,\n color: item.color,\n })),\n opts,\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"],"names":["asRecord","toNumber"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs","sources":["../../../../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"],"sourcesContent":["/**\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 { applyChartColorRulesFromOptions } from './chart-color-rules.util';\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 applyChartColorRulesFromOptions(payload?.series ?? [], opts, 'lineColor');\n }\n\n const inline = normalizeLineSeriesFromOptions(opts);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(inline, opts, 'lineColor');\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return applyChartColorRulesFromOptions(\n normalizeLineSeriesFromOptions({ ...opts, dataSource: items }),\n opts,\n 'lineColor',\n );\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 applyChartColorRulesFromOptions(payload?.items ?? [], opts);\n }\n\n const inline = normalizeLabelValueItems(opts, ['label', 'name', 'brand', 'brandLabel', 'brandTitle', 'category']);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(\n inline.map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n })),\n opts,\n );\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return applyChartColorRulesFromOptions(\n 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 opts,\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 applyChartColorRulesFromOptions(payload?.items ?? [], opts);\n }\n\n const inline = normalizeLabelValueItems(opts, ['label', 'name', 'brandLabel', 'brandTitle', 'brand', 'category']);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(\n inline.map((item) => ({\n id: item.id ?? item.label,\n label: item.label,\n value: item.value,\n color: item.color,\n })),\n opts,\n );\n }\n\n const dataSource = opts['dataSource'];\n if (isString(dataSource) && dataSource.trim()) {\n const items = await loadQueryDataSourceItems(deps.queryExecutor, dataSource);\n return applyChartColorRulesFromOptions(\n 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 opts,\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 applyChartColorRulesFromOptions(payload?.items ?? [], opts);\n }\n\n const inline = normalizeLabelValueItems(opts, ['name', 'label', 'brandLabel', 'brandTitle', 'brand', 'category']);\n if (inline.length > 0) {\n return applyChartColorRulesFromOptions(\n inline.map((item) => ({\n id: item.id ?? item.label,\n name: item.label,\n value: item.value,\n color: item.color,\n })),\n opts,\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"],"names":["asRecord","toNumber"],"mappings":"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"}
@@ -225,6 +225,8 @@ function normalizeDashboardScopeRef(scope, scopeRef, fallback) {
225
225
  case 'U':
226
226
  return buildUserScopeRef(readScopeUserId(scopeRef) ?? fallback?.userId ?? '');
227
227
  case 'T':
228
+ case 'A':
229
+ // Application boards reuse tenantId + roleIds; app boundary is scopeInfo.applicationId.
228
230
  return buildTenantScopeRef(readScopeTenantId(scopeRef) ?? fallback?.tenantId ?? '', readScopeRoleIds(scopeRef).length > 0
229
231
  ? readScopeRoleIds(scopeRef)
230
232
  : castArray(fallback?.roleIds ?? []));
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-dashboard-management-client-contracts.mjs","sources":["../../../../libs/modules/dashboard-management/contracts/src/features.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/menu.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/permission.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/settings.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/dashboard-management/contracts/src/root-config.ts","../../../../libs/modules/dashboard-management/contracts/src/manifest.ts","../../../../libs/modules/dashboard-management/contracts/src/dashboard-scope.types.ts","../../../../libs/modules/dashboard-management/contracts/src/dashboard.types.ts","../../../../libs/modules/dashboard-management/contracts/src/chart-query.types.ts","../../../../libs/modules/dashboard-management/contracts/src/chart-card.types.ts","../../../../libs/modules/dashboard-management/contracts/src/entities/dashboard/dashboard-scope.util.ts","../../../../libs/modules/dashboard-management/contracts/src/index.ts","../../../../libs/modules/dashboard-management/contracts/src/acorex-platform-module-dashboard-management-client-contracts.ts"],"sourcesContent":["// Management feature removed - module name is used directly as feature key\nexport const AXPDashboardManagementFeatureKeys = {} as const;\n\n","export const AXPDashboardManagementMenuKeys = {\n Root: 'DashboardManagement:Menu',\n Dashboards: 'DashboardManagement:Menu:Dashboards',\n} as const;\n\n","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n DashboardManagement: {\n Management: AXPAdministrationPermissionKeys.MaintainDashboards,\n Dashboard: {\n Management: AXPAdministrationPermissionKeys.MaintainDashboards,\n View: AXPAdministrationPermissionKeys.MaintainDashboards,\n Edit: AXPAdministrationPermissionKeys.MaintainDashboards,\n Delete: AXPAdministrationPermissionKeys.MaintainDashboards,\n Create: AXPAdministrationPermissionKeys.MaintainDashboards,\n },\n },\n} as const;\n","export enum AXPHomeDashboardSetting {\n CurrentDashboard = 'DashboardManagement:Setting:Home.CurrentDashboard',\n}\n","/** Component key for the dashboard Layout page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY = 'dashboard-layout-page';\n","const config = {\n i18n: 'dashboard-management',\n module: 'DashboardManagement',\n} as const;\n\n/** Builds shared dashboard widget type ids: `{module}:Widget:Dashboard:{Segment}`. */\nconst dashboardWidgetId = (segment: string): string =>\n `${config.module}:Widget:Dashboard:${segment}`;\n\nexport const RootConfig = {\n config,\n module: {\n module: config.module,\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-regular fa-tachometer-alt',\n },\n entities: {\n dashboard: {\n name: 'Dashboard',\n title: '@dashboard-management:dashboards.terms.dashboard',\n titlePlural: '@dashboard-management:dashboards.terms.dashboards',\n icon: 'fa-regular fa-tachometer-alt',\n },\n },\n /** Dashboard widget type ids owned by dashboard-management. */\n widgets: {\n barChart: dashboardWidgetId('BarChart'),\n donutChart: dashboardWidgetId('DonutChart'),\n lineChart: dashboardWidgetId('LineChart'),\n gaugeChart: dashboardWidgetId('GaugeChart'),\n funnelChart: dashboardWidgetId('FunnelChart'),\n heatmapChart: dashboardWidgetId('HeatmapChart'),\n chartCard: dashboardWidgetId('ChartCard'),\n stickyNote: dashboardWidgetId('StickyNote'),\n clockCalendar: dashboardWidgetId('ClockCalendar'),\n weather: dashboardWidgetId('Weather'),\n shortcut: dashboardWidgetId('Shortcut'),\n kpiProgress: dashboardWidgetId('KpiProgress'),\n kpiSegmented: dashboardWidgetId('KpiSegmented'),\n kpiDetails: dashboardWidgetId('KpiDetails'),\n kpiStatCard: dashboardWidgetId('KpiStatCard'),\n },\n /**\n * @deprecated Dashboard queries moved to owning modules (`{Module}:Dashboard:*`).\n * Update seeds/widgets to module keys; these aliases remain for transitional references only.\n */\n queries: {\n tenantAdmin: {\n activeUsersKpi: `${config.module}:Dashboard:TenantAdmin:ActiveUsersKpi`,\n employeesKpi: `${config.module}:Dashboard:TenantAdmin:EmployeesKpi`,\n openTasksKpi: `${config.module}:Dashboard:TenantAdmin:OpenTasksKpi`,\n activeProjectsKpi: `${config.module}:Dashboard:TenantAdmin:ActiveProjectsKpi`,\n openHazardsKpi: `${config.module}:Dashboard:TenantAdmin:OpenHazardsKpi`,\n documentsKpi: `${config.module}:Dashboard:TenantAdmin:DocumentsKpi`,\n workflowDefinitionsKpi: `${config.module}:Dashboard:TenantAdmin:WorkflowDefinitionsKpi`,\n subscriptionKpi: `${config.module}:Dashboard:TenantAdmin:SubscriptionKpi`,\n usersByRoleDonut: `${config.module}:Dashboard:TenantAdmin:UsersByRoleDonut`,\n taskStatusDonut: `${config.module}:Dashboard:TenantAdmin:TaskStatusDonut`,\n deliveryStatusDonut: `${config.module}:Dashboard:TenantAdmin:DeliveryStatusDonut`,\n integrationsDonut: `${config.module}:Dashboard:TenantAdmin:IntegrationsDonut`,\n jobsByStatusBar: `${config.module}:Dashboard:TenantAdmin:JobsByStatusBar`,\n jobSchedulesByStatusBar: `${config.module}:Dashboard:TenantAdmin:JobSchedulesByStatusBar`,\n workflowsByStatusBar: `${config.module}:Dashboard:TenantAdmin:WorkflowsByStatusBar`,\n teamsBar: `${config.module}:Dashboard:TenantAdmin:TeamsBar`,\n projectsByStatusBar: `${config.module}:Dashboard:TenantAdmin:ProjectsByStatusBar`,\n trainingComplianceGauge: `${config.module}:Dashboard:TenantAdmin:TrainingComplianceGauge`,\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from './root-config';\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","//#region ---- Dashboard Scope Types ----\n\n/**\n * Dashboard visibility scope.\n * - `T`: Tenant shared dashboard\n * - `U`: User personal dashboard\n * - `E`: Entity-scoped dashboard\n */\nexport type AXMDashboardScope = 'U' | 'T' | 'E';\n\n/** Scope reference for personal dashboards. */\nexport interface AXMDashboardUserScopeRef {\n userId: string;\n}\n\n/** Scope reference for tenant dashboards. */\nexport interface AXMDashboardTenantScopeRef {\n tenantId: string;\n roleIds: string[];\n}\n\n/** Scope reference for entity-type dashboards (one layout shared by all records of the type). */\nexport interface AXMDashboardEntityScopeRef {\n entityType: string;\n}\n\n/**\n * Scope-specific reference payload.\n * Shape depends on {@link AXMDashboardScope}.\n */\nexport type AXMDashboardScopeRef =\n | AXMDashboardUserScopeRef\n | AXMDashboardTenantScopeRef\n | AXMDashboardEntityScopeRef;\n\n//#endregion\n","import type { AXMDashboardScope, AXMDashboardScopeRef } from './dashboard-scope.types';\n\nexport type { AXMDashboardScope, AXMDashboardScopeRef } from './dashboard-scope.types';\n\n//#region ---- Widget Layout Contract Types ----\n\n/** Grid size preset as `[width, height]` in column/row units. */\nexport type AXGridLayoutSize = readonly [width: number, height: number];\n\nexport interface AXGridLayoutNode {\n id?: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n /** When set, resize snaps to one of these `[width, height]` presets. */\n allowedSizes?: readonly AXGridLayoutSize[];\n}\n\nexport type AXMDashboardBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n\nexport interface AXMDashboardWidgetLayoutMap {\n id: string;\n title?: AXPMultiLanguageString;\n lg: AXGridLayoutNode;\n md: AXGridLayoutNode;\n sm: AXGridLayoutNode;\n xl?: AXGridLayoutNode;\n '2xl'?: AXGridLayoutNode;\n '3xl'?: AXGridLayoutNode;\n '4xl'?: AXGridLayoutNode;\n}\n\nexport interface AXMDashboardWidgetData {\n config: AXMDashboardWidgetLayoutMap;\n node?: unknown;\n}\n\n//#endregion\n\n//#region ---- Dashboard Entity Contract Types ----\n\nexport type AXPMultiLanguageString = string | Record<string, string>;\n\nexport interface AXPEntityModel<Id> {\n id: Id;\n auditInfo?: {\n created?: { at?: string | Date; by?: { id: string; type?: string } };\n updated?: { at?: string | Date; by?: { id: string; type?: string } };\n };\n stateInfo?: Record<string, unknown>;\n scopeInfo?: { tenantId?: string; userId?: string; applicationId?: string };\n}\n\nexport interface AXMCommonDashboardEntityModel extends AXPEntityModel<string> {\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n widgets: AXMDashboardWidgetData[];\n isArchived?: boolean;\n archivedAt?: string | Date;\n locked?: boolean;\n scope: AXMDashboardScope;\n scopeRef: AXMDashboardScopeRef;\n categoryIds?: string[];\n}\n\n//#endregion\n","/**\n * Strict DTOs for dashboard chart / KPI queries.\n * Chart widgets fetch an AXPQuery whose result matches one of these shapes.\n */\n\nimport type { AXPFilterClause } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Result type keys (query metadata `resultType`) ----\n\n/** Stable result-type ids stored on query definitions for designer filtering. */\nexport const AXP_CHART_QUERY_RESULT_TYPE = {\n barSeries: 'AXPBarChartQueryResult',\n lineSeries: 'AXPLineChartQueryResult',\n donutSeries: 'AXPDonutChartQueryResult',\n gaugeValue: 'AXPGaugeChartQueryResult',\n funnelSeries: 'AXPFunnelChartQueryResult',\n heatmapSeries: 'AXPHeatmapChartQueryResult',\n kpiStatCard: 'AXPKpiStatCardQueryResult',\n kpiSegmented: 'AXPKpiSegmentedQueryResult',\n kpiProgress: 'AXPKpiProgressQueryResult',\n kpiDetails: 'AXPKpiDetailsQueryResult',\n} as const;\n\nexport type AXPChartQueryResultType =\n (typeof AXP_CHART_QUERY_RESULT_TYPE)[keyof typeof AXP_CHART_QUERY_RESULT_TYPE];\n\n//#endregion\n\n//#region ---- Series item shapes ----\n\nexport interface AXPBarChartQueryItem {\n id: string;\n label: string;\n value: number;\n color?: string;\n tooltipLabel?: string;\n}\n\nexport interface AXPLineChartQueryPoint {\n x: number | string;\n y: number;\n tooltipLabel?: string;\n}\n\nexport interface AXPLineChartQuerySeries {\n id?: string;\n label?: string;\n lineColor?: string;\n fillColor?: string;\n data: AXPLineChartQueryPoint[];\n}\n\nexport interface AXPDonutChartQueryItem {\n id: string;\n label: string;\n value: number;\n color?: string;\n tooltipLabel?: string;\n}\n\nexport interface AXPFunnelChartQueryItem {\n id?: string;\n name: string;\n value: number;\n color?: string;\n}\n\nexport interface AXPHeatmapChartQueryItem {\n x: number | string;\n y: number | string;\n value: number;\n label?: string;\n}\n\n//#endregion\n\n//#region ---- Query result envelopes ----\n\nexport interface AXPBarChartQueryResult {\n items: AXPBarChartQueryItem[];\n}\n\nexport interface AXPLineChartQueryResult {\n series: AXPLineChartQuerySeries[];\n}\n\nexport interface AXPDonutChartQueryResult {\n items: AXPDonutChartQueryItem[];\n}\n\nexport interface AXPGaugeChartQueryResult {\n value: number;\n}\n\nexport interface AXPFunnelChartQueryResult {\n items: AXPFunnelChartQueryItem[];\n}\n\nexport interface AXPHeatmapChartQueryResult {\n items: AXPHeatmapChartQueryItem[];\n}\n\nexport interface AXPKpiStatCardQueryResult {\n title?: string;\n titleBadgeText?: string;\n titleBadgeTone?: string;\n value?: number | string;\n valuePrefix?: string;\n valueSuffix?: string;\n format?: {\n style?: 'decimal' | 'currency' | 'percent';\n currency?: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n };\n icon?: string;\n iconTone?: string;\n trendValue?: string;\n trendLabel?: string;\n trendStatus?: 'success' | 'danger' | 'neutral';\n}\n\nexport interface AXPKpiSegmentedQueryResult {\n title?: string;\n icon?: string;\n segments: Array<{ label: string; value: number; color?: string }>;\n}\n\nexport interface AXPKpiProgressQueryResult {\n title?: string;\n icon?: string;\n value?: number | string;\n valuePrefix?: string;\n valueSuffix?: string;\n subtitle?: string;\n targetValue?: number | string;\n progressValue?: number;\n progressPercent?: number;\n}\n\nexport interface AXPKpiDetailsQueryResult {\n title?: string;\n value?: number | string;\n valuePrefix?: string;\n valueSuffix?: string;\n subtitle?: string;\n details: Array<{ label: string; value: string | number; color?: string }>;\n}\n\n//#endregion\n\n//#region ---- Widget options ----\n\n/** One designer rule: when the result row matches `when`, overlay `color`. First match wins. */\nexport interface AXPChartColorRule {\n when?: AXPFilterClause;\n color?: string;\n}\n\n/** Chart/KPI widget options for data binding (dashboard query and/or AI inline data). */\nexport interface AXPChartQueryWidgetOptions {\n /** Runtime AXPQuery key (e.g. `PlatformManagement:Dashboard:TenantsByStatusBar`). */\n query?: string;\n /** Optional input payload passed to `queryExecutor.fetch(query, queryInput)`. */\n queryInput?: Record<string, unknown>;\n /** Inline chart rows/series for AI chat (see chart-widget-data.util.ts). */\n dataSource?: unknown;\n /** Condition-based colour overlay applied after the query (or inline data) loads. */\n colorRules?: AXPChartColorRule[];\n}\n\n//#endregion\n","/**\n * Chart card options: one dashboard tile hosting mixed-type chart tabs.\n * Each tab is an {@link AXPWidgetNode} of a typed chart widget (donut, bar, line, gauge).\n */\n\nimport type { AXPMultiLanguageString, AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\n//#region ----- Types -----\n\n/** Editor widget name used as the repeater row in chart-card properties. */\nexport const AXP_CHART_CONFIGURATOR_WIDGET_NAME = 'chart-configurator';\n\nexport interface AXPChartCardWidgetOptions {\n /** Card heading (domain name). */\n title?: AXPMultiLanguageString;\n /** One typed chart widget node per tab. */\n tabs?: AXPWidgetNode[];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { castArray, get, isArray, isString } from 'lodash';\n\nimport type {\n AXMDashboardEntityScopeRef,\n AXMDashboardScope,\n AXMDashboardScopeRef,\n AXMDashboardTenantScopeRef,\n AXMDashboardUserScopeRef,\n} from '../../dashboard-scope.types';\n\n//#endregion\n\n//#region ---- Builders ----\n\nexport function buildUserScopeRef(userId: string): AXMDashboardUserScopeRef {\n return { userId: userId.trim() };\n}\n\nexport function buildTenantScopeRef(tenantId: string, roleIds: readonly string[]): AXMDashboardTenantScopeRef {\n return {\n tenantId: tenantId.trim(),\n roleIds: [...new Set(roleIds.map((id) => id.trim()).filter(Boolean))],\n };\n}\n\nexport function buildEntityScopeRef(entityType: string): AXMDashboardEntityScopeRef {\n return { entityType: entityType.trim() };\n}\n\n//#endregion\n\n//#region ---- Readers ----\n\nexport function readScopeUserId(scopeRef: AXMDashboardScopeRef | undefined): string | undefined {\n const userId = get(scopeRef, 'userId');\n return isString(userId) && userId.trim() ? userId.trim() : undefined;\n}\n\nexport function readScopeTenantId(scopeRef: AXMDashboardScopeRef | undefined): string | undefined {\n const tenantId = get(scopeRef, 'tenantId');\n return isString(tenantId) && tenantId.trim() ? tenantId.trim() : undefined;\n}\n\nexport function readScopeRoleIds(scopeRef: AXMDashboardScopeRef | undefined): string[] {\n const roleIds = get(scopeRef, 'roleIds');\n if (!isArray(roleIds)) {\n return [];\n }\n return roleIds.filter((id): id is string => isString(id) && id.trim().length > 0);\n}\n\nexport function readScopeEntityType(scopeRef: AXMDashboardScopeRef | undefined): string | undefined {\n const entityType = get(scopeRef, 'entityType');\n return isString(entityType) && entityType.trim() ? entityType.trim() : undefined;\n}\n\n//#endregion\n\n//#region ---- Normalization ----\n\n/**\n * Ensures {@link scopeRef} matches {@link scope} and strips incompatible keys.\n */\nexport function normalizeDashboardScopeRef(\n scope: AXMDashboardScope,\n scopeRef: unknown,\n fallback?: Partial<{\n userId: string;\n tenantId: string;\n roleIds: readonly string[];\n entityType: string;\n }>,\n): AXMDashboardScopeRef {\n switch (scope) {\n case 'U':\n return buildUserScopeRef(readScopeUserId(scopeRef as AXMDashboardScopeRef) ?? fallback?.userId ?? '');\n case 'T':\n return buildTenantScopeRef(\n readScopeTenantId(scopeRef as AXMDashboardScopeRef) ?? fallback?.tenantId ?? '',\n readScopeRoleIds(scopeRef as AXMDashboardScopeRef).length > 0\n ? readScopeRoleIds(scopeRef as AXMDashboardScopeRef)\n : castArray(fallback?.roleIds ?? []),\n );\n case 'E':\n return buildEntityScopeRef(\n readScopeEntityType(scopeRef as AXMDashboardScopeRef) ?? fallback?.entityType ?? '',\n );\n default:\n return buildUserScopeRef(fallback?.userId ?? '');\n }\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './settings.keys';\n\nexport * from './DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY';\n\nexport * from './root-config';\nexport * from './manifest';\n\nexport * from './dashboard-scope.types';\nexport * from './dashboard.types';\nexport * from './chart-query.types';\nexport * from './chart-card.types';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-contracts.mjs","sources":["../../../../libs/modules/dashboard-management/contracts/src/features.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/menu.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/permission.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/settings.keys.ts","../../../../libs/modules/dashboard-management/contracts/src/DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/dashboard-management/contracts/src/root-config.ts","../../../../libs/modules/dashboard-management/contracts/src/manifest.ts","../../../../libs/modules/dashboard-management/contracts/src/dashboard-scope.types.ts","../../../../libs/modules/dashboard-management/contracts/src/dashboard.types.ts","../../../../libs/modules/dashboard-management/contracts/src/chart-query.types.ts","../../../../libs/modules/dashboard-management/contracts/src/chart-card.types.ts","../../../../libs/modules/dashboard-management/contracts/src/entities/dashboard/dashboard-scope.util.ts","../../../../libs/modules/dashboard-management/contracts/src/index.ts","../../../../libs/modules/dashboard-management/contracts/src/acorex-platform-module-dashboard-management-client-contracts.ts"],"sourcesContent":["// Management feature removed - module name is used directly as feature key\nexport const AXPDashboardManagementFeatureKeys = {} as const;\n\n","export const AXPDashboardManagementMenuKeys = {\n Root: 'DashboardManagement:Menu',\n Dashboards: 'DashboardManagement:Menu:Dashboards',\n} as const;\n\n","/**\n * Administration capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n DashboardManagement: {\n Management: AXPAdministrationPermissionKeys.MaintainDashboards,\n Dashboard: {\n Management: AXPAdministrationPermissionKeys.MaintainDashboards,\n View: AXPAdministrationPermissionKeys.MaintainDashboards,\n Edit: AXPAdministrationPermissionKeys.MaintainDashboards,\n Delete: AXPAdministrationPermissionKeys.MaintainDashboards,\n Create: AXPAdministrationPermissionKeys.MaintainDashboards,\n },\n },\n} as const;\n","export enum AXPHomeDashboardSetting {\n CurrentDashboard = 'DashboardManagement:Setting:Home.CurrentDashboard',\n}\n","/** Component key for the dashboard Layout page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY = 'dashboard-layout-page';\n","const config = {\n i18n: 'dashboard-management',\n module: 'DashboardManagement',\n} as const;\n\n/** Builds shared dashboard widget type ids: `{module}:Widget:Dashboard:{Segment}`. */\nconst dashboardWidgetId = (segment: string): string =>\n `${config.module}:Widget:Dashboard:${segment}`;\n\nexport const RootConfig = {\n config,\n module: {\n module: config.module,\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-regular fa-tachometer-alt',\n },\n entities: {\n dashboard: {\n name: 'Dashboard',\n title: '@dashboard-management:dashboards.terms.dashboard',\n titlePlural: '@dashboard-management:dashboards.terms.dashboards',\n icon: 'fa-regular fa-tachometer-alt',\n },\n },\n /** Dashboard widget type ids owned by dashboard-management. */\n widgets: {\n barChart: dashboardWidgetId('BarChart'),\n donutChart: dashboardWidgetId('DonutChart'),\n lineChart: dashboardWidgetId('LineChart'),\n gaugeChart: dashboardWidgetId('GaugeChart'),\n funnelChart: dashboardWidgetId('FunnelChart'),\n heatmapChart: dashboardWidgetId('HeatmapChart'),\n chartCard: dashboardWidgetId('ChartCard'),\n stickyNote: dashboardWidgetId('StickyNote'),\n clockCalendar: dashboardWidgetId('ClockCalendar'),\n weather: dashboardWidgetId('Weather'),\n shortcut: dashboardWidgetId('Shortcut'),\n kpiProgress: dashboardWidgetId('KpiProgress'),\n kpiSegmented: dashboardWidgetId('KpiSegmented'),\n kpiDetails: dashboardWidgetId('KpiDetails'),\n kpiStatCard: dashboardWidgetId('KpiStatCard'),\n },\n /**\n * @deprecated Dashboard queries moved to owning modules (`{Module}:Dashboard:*`).\n * Update seeds/widgets to module keys; these aliases remain for transitional references only.\n */\n queries: {\n tenantAdmin: {\n activeUsersKpi: `${config.module}:Dashboard:TenantAdmin:ActiveUsersKpi`,\n employeesKpi: `${config.module}:Dashboard:TenantAdmin:EmployeesKpi`,\n openTasksKpi: `${config.module}:Dashboard:TenantAdmin:OpenTasksKpi`,\n activeProjectsKpi: `${config.module}:Dashboard:TenantAdmin:ActiveProjectsKpi`,\n openHazardsKpi: `${config.module}:Dashboard:TenantAdmin:OpenHazardsKpi`,\n documentsKpi: `${config.module}:Dashboard:TenantAdmin:DocumentsKpi`,\n workflowDefinitionsKpi: `${config.module}:Dashboard:TenantAdmin:WorkflowDefinitionsKpi`,\n subscriptionKpi: `${config.module}:Dashboard:TenantAdmin:SubscriptionKpi`,\n usersByRoleDonut: `${config.module}:Dashboard:TenantAdmin:UsersByRoleDonut`,\n taskStatusDonut: `${config.module}:Dashboard:TenantAdmin:TaskStatusDonut`,\n deliveryStatusDonut: `${config.module}:Dashboard:TenantAdmin:DeliveryStatusDonut`,\n integrationsDonut: `${config.module}:Dashboard:TenantAdmin:IntegrationsDonut`,\n jobsByStatusBar: `${config.module}:Dashboard:TenantAdmin:JobsByStatusBar`,\n jobSchedulesByStatusBar: `${config.module}:Dashboard:TenantAdmin:JobSchedulesByStatusBar`,\n workflowsByStatusBar: `${config.module}:Dashboard:TenantAdmin:WorkflowsByStatusBar`,\n teamsBar: `${config.module}:Dashboard:TenantAdmin:TeamsBar`,\n projectsByStatusBar: `${config.module}:Dashboard:TenantAdmin:ProjectsByStatusBar`,\n trainingComplianceGauge: `${config.module}:Dashboard:TenantAdmin:TrainingComplianceGauge`,\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from './root-config';\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","//#region ---- Dashboard Scope Types ----\n\n/**\n * Dashboard visibility scope.\n * - `T`: Tenant shared dashboard\n * - `U`: User personal dashboard\n * - `E`: Entity-scoped dashboard\n * - `A`: Application-scoped dashboard (role-gated; app boundary via scopeInfo)\n */\nexport type AXMDashboardScope = 'U' | 'T' | 'E' | 'A';\n\n/** Scope reference for personal dashboards. */\nexport interface AXMDashboardUserScopeRef {\n userId: string;\n}\n\n/** Scope reference for tenant dashboards. */\nexport interface AXMDashboardTenantScopeRef {\n tenantId: string;\n roleIds: string[];\n}\n\n/** Scope reference for entity-type dashboards (one layout shared by all records of the type). */\nexport interface AXMDashboardEntityScopeRef {\n entityType: string;\n}\n\n/**\n * Scope-specific reference payload.\n * Shape depends on {@link AXMDashboardScope}.\n */\nexport type AXMDashboardScopeRef =\n | AXMDashboardUserScopeRef\n | AXMDashboardTenantScopeRef\n | AXMDashboardEntityScopeRef;\n\n//#endregion\n","import type { AXMDashboardScope, AXMDashboardScopeRef } from './dashboard-scope.types';\n\nexport type { AXMDashboardScope, AXMDashboardScopeRef } from './dashboard-scope.types';\n\n//#region ---- Widget Layout Contract Types ----\n\n/** Grid size preset as `[width, height]` in column/row units. */\nexport type AXGridLayoutSize = readonly [width: number, height: number];\n\nexport interface AXGridLayoutNode {\n id?: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n /** When set, resize snaps to one of these `[width, height]` presets. */\n allowedSizes?: readonly AXGridLayoutSize[];\n}\n\nexport type AXMDashboardBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n\nexport interface AXMDashboardWidgetLayoutMap {\n id: string;\n title?: AXPMultiLanguageString;\n lg: AXGridLayoutNode;\n md: AXGridLayoutNode;\n sm: AXGridLayoutNode;\n xl?: AXGridLayoutNode;\n '2xl'?: AXGridLayoutNode;\n '3xl'?: AXGridLayoutNode;\n '4xl'?: AXGridLayoutNode;\n}\n\nexport interface AXMDashboardWidgetData {\n config: AXMDashboardWidgetLayoutMap;\n node?: unknown;\n}\n\n//#endregion\n\n//#region ---- Dashboard Entity Contract Types ----\n\nexport type AXPMultiLanguageString = string | Record<string, string>;\n\nexport interface AXPEntityModel<Id> {\n id: Id;\n auditInfo?: {\n created?: { at?: string | Date; by?: { id: string; type?: string } };\n updated?: { at?: string | Date; by?: { id: string; type?: string } };\n };\n stateInfo?: Record<string, unknown>;\n scopeInfo?: { tenantId?: string; userId?: string; applicationId?: string };\n}\n\nexport interface AXMCommonDashboardEntityModel extends AXPEntityModel<string> {\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n widgets: AXMDashboardWidgetData[];\n isArchived?: boolean;\n archivedAt?: string | Date;\n locked?: boolean;\n scope: AXMDashboardScope;\n scopeRef: AXMDashboardScopeRef;\n categoryIds?: string[];\n}\n\n//#endregion\n","/**\n * Strict DTOs for dashboard chart / KPI queries.\n * Chart widgets fetch an AXPQuery whose result matches one of these shapes.\n */\n\nimport type { AXPFilterClause } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Result type keys (query metadata `resultType`) ----\n\n/** Stable result-type ids stored on query definitions for designer filtering. */\nexport const AXP_CHART_QUERY_RESULT_TYPE = {\n barSeries: 'AXPBarChartQueryResult',\n lineSeries: 'AXPLineChartQueryResult',\n donutSeries: 'AXPDonutChartQueryResult',\n gaugeValue: 'AXPGaugeChartQueryResult',\n funnelSeries: 'AXPFunnelChartQueryResult',\n heatmapSeries: 'AXPHeatmapChartQueryResult',\n kpiStatCard: 'AXPKpiStatCardQueryResult',\n kpiSegmented: 'AXPKpiSegmentedQueryResult',\n kpiProgress: 'AXPKpiProgressQueryResult',\n kpiDetails: 'AXPKpiDetailsQueryResult',\n} as const;\n\nexport type AXPChartQueryResultType =\n (typeof AXP_CHART_QUERY_RESULT_TYPE)[keyof typeof AXP_CHART_QUERY_RESULT_TYPE];\n\n//#endregion\n\n//#region ---- Series item shapes ----\n\nexport interface AXPBarChartQueryItem {\n id: string;\n label: string;\n value: number;\n color?: string;\n tooltipLabel?: string;\n}\n\nexport interface AXPLineChartQueryPoint {\n x: number | string;\n y: number;\n tooltipLabel?: string;\n}\n\nexport interface AXPLineChartQuerySeries {\n id?: string;\n label?: string;\n lineColor?: string;\n fillColor?: string;\n data: AXPLineChartQueryPoint[];\n}\n\nexport interface AXPDonutChartQueryItem {\n id: string;\n label: string;\n value: number;\n color?: string;\n tooltipLabel?: string;\n}\n\nexport interface AXPFunnelChartQueryItem {\n id?: string;\n name: string;\n value: number;\n color?: string;\n}\n\nexport interface AXPHeatmapChartQueryItem {\n x: number | string;\n y: number | string;\n value: number;\n label?: string;\n}\n\n//#endregion\n\n//#region ---- Query result envelopes ----\n\nexport interface AXPBarChartQueryResult {\n items: AXPBarChartQueryItem[];\n}\n\nexport interface AXPLineChartQueryResult {\n series: AXPLineChartQuerySeries[];\n}\n\nexport interface AXPDonutChartQueryResult {\n items: AXPDonutChartQueryItem[];\n}\n\nexport interface AXPGaugeChartQueryResult {\n value: number;\n}\n\nexport interface AXPFunnelChartQueryResult {\n items: AXPFunnelChartQueryItem[];\n}\n\nexport interface AXPHeatmapChartQueryResult {\n items: AXPHeatmapChartQueryItem[];\n}\n\nexport interface AXPKpiStatCardQueryResult {\n title?: string;\n titleBadgeText?: string;\n titleBadgeTone?: string;\n value?: number | string;\n valuePrefix?: string;\n valueSuffix?: string;\n format?: {\n style?: 'decimal' | 'currency' | 'percent';\n currency?: string;\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n };\n icon?: string;\n iconTone?: string;\n trendValue?: string;\n trendLabel?: string;\n trendStatus?: 'success' | 'danger' | 'neutral';\n}\n\nexport interface AXPKpiSegmentedQueryResult {\n title?: string;\n icon?: string;\n segments: Array<{ label: string; value: number; color?: string }>;\n}\n\nexport interface AXPKpiProgressQueryResult {\n title?: string;\n icon?: string;\n value?: number | string;\n valuePrefix?: string;\n valueSuffix?: string;\n subtitle?: string;\n targetValue?: number | string;\n progressValue?: number;\n progressPercent?: number;\n}\n\nexport interface AXPKpiDetailsQueryResult {\n title?: string;\n value?: number | string;\n valuePrefix?: string;\n valueSuffix?: string;\n subtitle?: string;\n details: Array<{ label: string; value: string | number; color?: string }>;\n}\n\n//#endregion\n\n//#region ---- Widget options ----\n\n/** One designer rule: when the result row matches `when`, overlay `color`. First match wins. */\nexport interface AXPChartColorRule {\n when?: AXPFilterClause;\n color?: string;\n}\n\n/** Chart/KPI widget options for data binding (dashboard query and/or AI inline data). */\nexport interface AXPChartQueryWidgetOptions {\n /** Runtime AXPQuery key (e.g. `PlatformManagement:Dashboard:TenantsByStatusBar`). */\n query?: string;\n /** Optional input payload passed to `queryExecutor.fetch(query, queryInput)`. */\n queryInput?: Record<string, unknown>;\n /** Inline chart rows/series for AI chat (see chart-widget-data.util.ts). */\n dataSource?: unknown;\n /** Condition-based colour overlay applied after the query (or inline data) loads. */\n colorRules?: AXPChartColorRule[];\n}\n\n//#endregion\n","/**\n * Chart card options: one dashboard tile hosting mixed-type chart tabs.\n * Each tab is an {@link AXPWidgetNode} of a typed chart widget (donut, bar, line, gauge).\n */\n\nimport type { AXPMultiLanguageString, AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\n//#region ----- Types -----\n\n/** Editor widget name used as the repeater row in chart-card properties. */\nexport const AXP_CHART_CONFIGURATOR_WIDGET_NAME = 'chart-configurator';\n\nexport interface AXPChartCardWidgetOptions {\n /** Card heading (domain name). */\n title?: AXPMultiLanguageString;\n /** One typed chart widget node per tab. */\n tabs?: AXPWidgetNode[];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { castArray, get, isArray, isString } from 'lodash';\n\nimport type {\n AXMDashboardEntityScopeRef,\n AXMDashboardScope,\n AXMDashboardScopeRef,\n AXMDashboardTenantScopeRef,\n AXMDashboardUserScopeRef,\n} from '../../dashboard-scope.types';\n\n//#endregion\n\n//#region ---- Builders ----\n\nexport function buildUserScopeRef(userId: string): AXMDashboardUserScopeRef {\n return { userId: userId.trim() };\n}\n\nexport function buildTenantScopeRef(tenantId: string, roleIds: readonly string[]): AXMDashboardTenantScopeRef {\n return {\n tenantId: tenantId.trim(),\n roleIds: [...new Set(roleIds.map((id) => id.trim()).filter(Boolean))],\n };\n}\n\nexport function buildEntityScopeRef(entityType: string): AXMDashboardEntityScopeRef {\n return { entityType: entityType.trim() };\n}\n\n//#endregion\n\n//#region ---- Readers ----\n\nexport function readScopeUserId(scopeRef: AXMDashboardScopeRef | undefined): string | undefined {\n const userId = get(scopeRef, 'userId');\n return isString(userId) && userId.trim() ? userId.trim() : undefined;\n}\n\nexport function readScopeTenantId(scopeRef: AXMDashboardScopeRef | undefined): string | undefined {\n const tenantId = get(scopeRef, 'tenantId');\n return isString(tenantId) && tenantId.trim() ? tenantId.trim() : undefined;\n}\n\nexport function readScopeRoleIds(scopeRef: AXMDashboardScopeRef | undefined): string[] {\n const roleIds = get(scopeRef, 'roleIds');\n if (!isArray(roleIds)) {\n return [];\n }\n return roleIds.filter((id): id is string => isString(id) && id.trim().length > 0);\n}\n\nexport function readScopeEntityType(scopeRef: AXMDashboardScopeRef | undefined): string | undefined {\n const entityType = get(scopeRef, 'entityType');\n return isString(entityType) && entityType.trim() ? entityType.trim() : undefined;\n}\n\n//#endregion\n\n//#region ---- Normalization ----\n\n/**\n * Ensures {@link scopeRef} matches {@link scope} and strips incompatible keys.\n */\nexport function normalizeDashboardScopeRef(\n scope: AXMDashboardScope,\n scopeRef: unknown,\n fallback?: Partial<{\n userId: string;\n tenantId: string;\n roleIds: readonly string[];\n entityType: string;\n }>,\n): AXMDashboardScopeRef {\n switch (scope) {\n case 'U':\n return buildUserScopeRef(readScopeUserId(scopeRef as AXMDashboardScopeRef) ?? fallback?.userId ?? '');\n case 'T':\n case 'A':\n // Application boards reuse tenantId + roleIds; app boundary is scopeInfo.applicationId.\n return buildTenantScopeRef(\n readScopeTenantId(scopeRef as AXMDashboardScopeRef) ?? fallback?.tenantId ?? '',\n readScopeRoleIds(scopeRef as AXMDashboardScopeRef).length > 0\n ? readScopeRoleIds(scopeRef as AXMDashboardScopeRef)\n : castArray(fallback?.roleIds ?? []),\n );\n case 'E':\n return buildEntityScopeRef(\n readScopeEntityType(scopeRef as AXMDashboardScopeRef) ?? fallback?.entityType ?? '',\n );\n default:\n return buildUserScopeRef(fallback?.userId ?? '');\n }\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './settings.keys';\n\nexport * from './DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY';\n\nexport * from './root-config';\nexport * from './manifest';\n\nexport * from './dashboard-scope.types';\nexport * from './dashboard.types';\nexport * from './chart-query.types';\nexport * from './chart-card.types';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ import { AXTranslationService } from '@acorex/core/translation';
4
4
  import { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';
5
5
  import * as i0 from '@angular/core';
6
6
  import { inject, signal, effect, computed, ChangeDetectionStrategy, Component } from '@angular/core';
7
- import { e as AXPDashboardWidgetComponent, f as resolveChartQueryTabs, g as AXPChartQueryTabsComponent } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-C5DXldyF.mjs';
8
- import { a as loadDonutChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-C3x9eufS.mjs';
7
+ import { e as AXPDashboardWidgetComponent, f as resolveChartQueryTabs, g as AXPChartQueryTabsComponent } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs';
8
+ import { a as loadDonutChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs';
9
9
  import { a as AXP_CHART_LEGEND_OPTIONS_DONUT, o as omitChartFixedSize } from './acorex-platform-module-dashboard-management-client-chart-legend.util-C1zqTQEf.mjs';
10
10
 
11
11
  /**
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
142
142
  }], ctorParameters: () => [] });
143
143
 
144
144
  export { AXPDonutChartWidgetViewComponent };
145
- //# sourceMappingURL=acorex-platform-module-dashboard-management-client-donut-chart-widget.component-B5Jmshla.mjs.map
145
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BqKMqF3n.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-dashboard-management-client-donut-chart-widget.component-B5Jmshla.mjs","sources":["../../../../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"],"sourcesContent":["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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BqKMqF3n.mjs","sources":["../../../../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"],"sourcesContent":["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"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import { AXTranslationService } from '@acorex/core/translation';
3
3
  import { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, signal, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
6
- import { e as AXPDashboardWidgetComponent, f as resolveChartQueryTabs, g as AXPChartQueryTabsComponent } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-C5DXldyF.mjs';
7
- import { b as loadFunnelChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-C3x9eufS.mjs';
6
+ import { e as AXPDashboardWidgetComponent, f as resolveChartQueryTabs, g as AXPChartQueryTabsComponent } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs';
7
+ import { b as loadFunnelChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs';
8
8
 
9
9
  /**
10
10
  * Funnel Chart Widget Component
@@ -132,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
132
132
  }], ctorParameters: () => [] });
133
133
 
134
134
  export { AXPFunnelChartWidgetViewComponent };
135
- //# sourceMappingURL=acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-DvpbXFmP.mjs.map
135
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BaJJhgw5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-DvpbXFmP.mjs","sources":["../../../../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"],"sourcesContent":["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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BaJJhgw5.mjs","sources":["../../../../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"],"sourcesContent":["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"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import { AXTranslationService } from '@acorex/core/translation';
3
3
  import { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, signal, effect, computed, ChangeDetectionStrategy, Component } from '@angular/core';
6
- import { e as AXPDashboardWidgetComponent, f as resolveChartQueryTabs, g as AXPChartQueryTabsComponent } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-C5DXldyF.mjs';
7
- import { c as loadGaugeChartValue } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-C3x9eufS.mjs';
6
+ import { e as AXPDashboardWidgetComponent, f as resolveChartQueryTabs, g as AXPChartQueryTabsComponent } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs';
7
+ import { c as loadGaugeChartValue } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs';
8
8
  import { o as omitChartFixedSize } from './acorex-platform-module-dashboard-management-client-chart-legend.util-C1zqTQEf.mjs';
9
9
 
10
10
  /**
@@ -135,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
135
135
  }], ctorParameters: () => [] });
136
136
 
137
137
  export { AXPGaugeChartWidgetViewComponent };
138
- //# sourceMappingURL=acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-B2Q7Etok.mjs.map
138
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-DtXh5YgQ.mjs.map