@acorex-platform/module-dashboard-management-client 0.0.62 → 0.0.63

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 (25) hide show
  1. package/fesm2022/{acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs → acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-tGkZisK5.mjs} +15 -21
  2. package/fesm2022/acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-tGkZisK5.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-dashboard-management-client-bar-chart-widget.component-CQ2GcT4k.mjs → acorex-platform-module-dashboard-management-client-bar-chart-widget.component-Bi729isK.mjs} +3 -3
  4. package/fesm2022/{acorex-platform-module-dashboard-management-client-bar-chart-widget.component-CQ2GcT4k.mjs.map → acorex-platform-module-dashboard-management-client-bar-chart-widget.component-Bi729isK.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-card-widget.component-DxBEEgpN.mjs → acorex-platform-module-dashboard-management-client-chart-card-widget.component-BKZBFU3N.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-card-widget.component-DxBEEgpN.mjs.map → acorex-platform-module-dashboard-management-client-chart-card-widget.component-BKZBFU3N.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-OFusxkHL.mjs → acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-D4xlaKwi.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-OFusxkHL.mjs.map → acorex-platform-module-dashboard-management-client-chart-configurator-widget-edit.component-D4xlaKwi.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs → acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.mjs.map → acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BqKMqF3n.mjs → acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BuvbJ1cB.mjs} +3 -3
  12. package/fesm2022/{acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BqKMqF3n.mjs.map → acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BuvbJ1cB.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BaJJhgw5.mjs → acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BPpcGkd_.mjs} +3 -3
  14. package/fesm2022/{acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BaJJhgw5.mjs.map → acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BPpcGkd_.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-DtXh5YgQ.mjs → acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-TgSwT7jR.mjs} +3 -3
  16. package/fesm2022/{acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-DtXh5YgQ.mjs.map → acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-TgSwT7jR.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BAMa-FUe.mjs → acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BYAOAXk7.mjs} +3 -3
  18. package/fesm2022/{acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BAMa-FUe.mjs.map → acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BYAOAXk7.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-dashboard-management-client-index-Co5ImjCW.mjs → acorex-platform-module-dashboard-management-client-index-BYifZvSh.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-dashboard-management-client-index-Co5ImjCW.mjs.map → acorex-platform-module-dashboard-management-client-index-BYifZvSh.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-dashboard-management-client-line-chart-widget.component-LJj5397n.mjs → acorex-platform-module-dashboard-management-client-line-chart-widget.component-SW6eTqmb.mjs} +3 -3
  22. package/fesm2022/{acorex-platform-module-dashboard-management-client-line-chart-widget.component-LJj5397n.mjs.map → acorex-platform-module-dashboard-management-client-line-chart-widget.component-SW6eTqmb.mjs.map} +1 -1
  23. package/fesm2022/acorex-platform-module-dashboard-management-client.mjs +1 -1
  24. package/package.json +1 -1
  25. package/fesm2022/acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs.map +0 -1
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.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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"}
@@ -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-8SFsCjtw.mjs';
8
- import { a as loadDonutChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.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-tGkZisK5.mjs';
8
+ import { a as loadDonutChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.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-BqKMqF3n.mjs.map
145
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BuvbJ1cB.mjs.map
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-donut-chart-widget.component-BuvbJ1cB.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-8SFsCjtw.mjs';
7
- import { b as loadFunnelChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.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-tGkZisK5.mjs';
7
+ import { b as loadFunnelChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.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-BaJJhgw5.mjs.map
135
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BPpcGkd_.mjs.map
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-funnel-chart-widget.component-BPpcGkd_.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-8SFsCjtw.mjs';
7
- import { c as loadGaugeChartValue } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.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-tGkZisK5.mjs';
7
+ import { c as loadGaugeChartValue } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.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-DtXh5YgQ.mjs.map
138
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-TgSwT7jR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-DtXh5YgQ.mjs","sources":["../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.html"],"sourcesContent":["import { AXGaugeChartComponent, AXGaugeChartOption } from '@acorex/charts/gauge-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadGaugeChartValue } from '../chart-widget-data.util';\nimport { omitChartFixedSize } from '../chart-legend.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Gauge Chart Widget Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n templateUrl: './gauge-chart-widget.component.html',\n styleUrls: ['./gauge-chart-widget.component.css'],\n imports: [AXGaugeChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPGaugeChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected value = signal<number>(0);\n\n /** Options with resolved title, label, and threshold labels for the chart SVG/layer. */\n protected gaugeChartOptions = signal<AXGaugeChartOption & { title?: string }>(\n {} as AXGaugeChartOption & { title?: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n private readonly resolveGaugeOptionsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n const thresholdSource = raw['thresholds'];\n void (async () => {\n const [title, label] = await Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(raw['label']),\n ]);\n let thresholds: AXGaugeChartOption['thresholds'];\n if (Array.isArray(thresholdSource)) {\n thresholds = await Promise.all(\n thresholdSource.map(async (t) => {\n const entry = t as Record<string, unknown>;\n const labelRaw = entry['label'];\n return {\n value: entry['value'] as number,\n color: String(entry['color'] ?? ''),\n ...(labelRaw != null && labelRaw !== '' ? { label: await this.resolveChartOptionLabel(labelRaw) } : {}),\n };\n }),\n );\n }\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = omitChartFixedSize(raw) as unknown as AXGaugeChartOption & { title?: string };\n this.gaugeChartOptions.set({\n ...base,\n title,\n label,\n showValue: base.showValue !== false,\n showDataLabels: base.showDataLabels !== false,\n ...(thresholds ? { thresholds } : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const value = await loadGaugeChartValue(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n this.value.set(value);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n minValue: 0,\n maxValue: 100,\n showTooltip: true,\n showValue: true,\n showDataLabels: true,\n gaugeWidth: 18,\n cornerRadius: 4,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...omitChartFixedSize(this.options() as Record<string, unknown>),\n });\n this.gaugeChartOptions.set(\n omitChartFixedSize(this.options() as Record<string, unknown>) as unknown as AXGaugeChartOption & {\n title?: string;\n },\n );\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--radial\">\n <ax-gauge-chart [value]=\"value()\" [options]=\"gaugeChartOptions()\"></ax-gauge-chart>\n </div>\n </div>\n</div>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-gauge-chart-widget.component-TgSwT7jR.mjs","sources":["../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/gauge-chart/gauge-chart-widget.component.html"],"sourcesContent":["import { AXGaugeChartComponent, AXGaugeChartOption } from '@acorex/charts/gauge-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadGaugeChartValue } from '../chart-widget-data.util';\nimport { omitChartFixedSize } from '../chart-legend.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Gauge Chart Widget Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n templateUrl: './gauge-chart-widget.component.html',\n styleUrls: ['./gauge-chart-widget.component.css'],\n imports: [AXGaugeChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPGaugeChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected value = signal<number>(0);\n\n /** Options with resolved title, label, and threshold labels for the chart SVG/layer. */\n protected gaugeChartOptions = signal<AXGaugeChartOption & { title?: string }>(\n {} as AXGaugeChartOption & { title?: string },\n );\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartOptionLabel(value: unknown): Promise<string> {\n if (value != null && typeof value === 'object' && !Array.isArray(value)) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n const s = String(value ?? '');\n if (s.startsWith('@')) {\n return this.translationService.translateAsync(s);\n }\n return s;\n }\n\n private readonly resolveGaugeOptionsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n const thresholdSource = raw['thresholds'];\n void (async () => {\n const [title, label] = await Promise.all([\n this.resolveChartOptionLabel(raw['title']),\n this.resolveChartOptionLabel(raw['label']),\n ]);\n let thresholds: AXGaugeChartOption['thresholds'];\n if (Array.isArray(thresholdSource)) {\n thresholds = await Promise.all(\n thresholdSource.map(async (t) => {\n const entry = t as Record<string, unknown>;\n const labelRaw = entry['label'];\n return {\n value: entry['value'] as number,\n color: String(entry['color'] ?? ''),\n ...(labelRaw != null && labelRaw !== '' ? { label: await this.resolveChartOptionLabel(labelRaw) } : {}),\n };\n }),\n );\n }\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n const base = omitChartFixedSize(raw) as unknown as AXGaugeChartOption & { title?: string };\n this.gaugeChartOptions.set({\n ...base,\n title,\n label,\n showValue: base.showValue !== false,\n showDataLabels: base.showDataLabels !== false,\n ...(thresholds ? { thresholds } : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const value = await loadGaugeChartValue(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n this.value.set(value);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n minValue: 0,\n maxValue: 100,\n showTooltip: true,\n showValue: true,\n showDataLabels: true,\n gaugeWidth: 18,\n cornerRadius: 4,\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...omitChartFixedSize(this.options() as Record<string, unknown>),\n });\n this.gaugeChartOptions.set(\n omitChartFixedSize(this.options() as Record<string, unknown>) as unknown as AXGaugeChartOption & {\n title?: string;\n },\n );\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--radial\">\n <ax-gauge-chart [value]=\"value()\" [options]=\"gaugeChartOptions()\"></ax-gauge-chart>\n </div>\n </div>\n</div>\n"],"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-8SFsCjtw.mjs';
7
- import { r as resolveChartAxisLabels, d as loadHeatmapChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-CiRHEqHj.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-tGkZisK5.mjs';
7
+ import { r as resolveChartAxisLabels, d as loadHeatmapChartItems } from './acorex-platform-module-dashboard-management-client-chart-widget-data.util-Bdi1tigx.mjs';
8
8
 
9
9
  /**
10
10
  * Heatmap Chart Widget Component
@@ -151,4 +151,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
151
151
  }], ctorParameters: () => [] });
152
152
 
153
153
  export { AXPHeatmapChartWidgetViewComponent };
154
- //# sourceMappingURL=acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BAMa-FUe.mjs.map
154
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BYAOAXk7.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BAMa-FUe.mjs","sources":["../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.component.html"],"sourcesContent":["import { AXHeatmapChartComponent, AXHeatmapChartOption, AXHeatmapData } from '@acorex/charts/heatmap-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadHeatmapChartItems, resolveChartAxisLabels } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Heatmap Chart Widget Component\n * Displays matrix-like data with color intensity based on value.\n */\n@Component({\n templateUrl: './heatmap-chart-widget.component.html',\n styleUrls: ['./heatmap-chart-widget.component.css'],\n imports: [AXHeatmapChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPHeatmapChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXHeatmapData[]>([]);\n\n /** Options passed to the chart with resolved string labels (multi-language and @i18n keys). */\n protected heatmapOptions = signal<AXHeatmapChartOption>({} as AXHeatmapChartOption);\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? this.translationService.translateAsync(value) : value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveOptionLabelsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n\n void (async () => {\n const axisLabels = resolveChartAxisLabels(raw);\n const [xAxisLabel, yAxisLabel] = await Promise.all([\n this.resolveChartText(axisLabels.xAxisLabel),\n this.resolveChartText(axisLabels.yAxisLabel),\n ]);\n\n const messagesRaw = raw['messages'];\n const messages =\n messagesRaw && typeof messagesRaw === 'object' && !Array.isArray(messagesRaw)\n ? (messagesRaw as Record<string, unknown>)\n : undefined;\n\n const [noData, noDataHelp] = await Promise.all([\n this.resolveChartText(messages?.['noData']),\n this.resolveChartText(messages?.['noDataHelp']),\n ]);\n\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n\n const base = raw as unknown as AXHeatmapChartOption;\n this.heatmapOptions.set({\n ...base,\n xAxisLabel,\n yAxisLabel,\n ...(messages\n ? {\n messages: {\n ...base.messages,\n ...(noData ? { noData } : {}),\n ...(noDataHelp ? { noDataHelp } : {}),\n ...(messages['noDataIcon'] ? { noDataIcon: String(messages['noDataIcon']) } : {}),\n },\n }\n : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const items = await loadHeatmapChartItems(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n items.map(async (item) => {\n const x = item.x;\n const y = item.y;\n const label = item.label;\n\n return {\n ...item,\n x: typeof x === 'number' ? x : await this.resolveChartText(x),\n y: typeof y === 'number' ? y : await this.resolveChartText(y),\n ...(label !== undefined ? { label: await this.resolveChartText(label) } : {}),\n };\n }),\n );\n\n this.data.set(resolved as AXHeatmapData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n cellPadding: 0.05,\n borderRadius: 2,\n color: 'rgb(var(--ax-sys-color-primary-500))',\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...this.options(),\n });\n\n this.heatmapOptions.set(this.options() as AXHeatmapChartOption);\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--heatmap\">\n <ax-heatmap-chart [data]=\"data()\" [options]=\"heatmapOptions()\"></ax-heatmap-chart>\n </div>\n </div>\n</div>\n"],"names":[],"mappings":";;;;;;;;AAUA;;;AAGG;AAOG,MAAO,kCAAmC,SAAQ,2BAA2B,CAAA;AAoCvE,IAAA,cAAc,CAAC,KAAa,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;;;IAMQ,MAAM,gBAAgB,CAAC,KAAc,EAAA;AAC3C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK;QACtF;QACA,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,KAAK,CAAC,EACzD;YACA,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAA+B,CAAC;QACzE;AACA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;;AAsFA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;AA/IQ,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;;;QAMxD,IAAA,CAAA,IAAI,GAAG,MAAM,CAAkB,EAAE;iFAAC;;QAGlC,IAAA,CAAA,cAAc,GAAG,MAAM,CAAuB,EAA0B;2FAAC;QAE3E,IAAA,CAAA,sBAAsB,GAAG,CAAC;;;AAMf,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MACtC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAA6B,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC;sFACjG;QAEkB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,CAAC;2FAAC;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,gBAAA,OAAO,SAAS;YAClB;YACA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3E,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;wFAAC;AA2Be,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,MAAK;AACvD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAA6B;AACrD,YAAA,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,sBAAsB;YAEhD,KAAK,CAAC,YAAW;AACf,gBAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC;gBAC9C,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACjD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC;AAC5C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC;AAC7C,iBAAA,CAAC;AAEF,gBAAA,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC;AACnC,gBAAA,MAAM,QAAQ,GACZ,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW;AAC1E,sBAAG;sBACD,SAAS;gBAEf,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC7C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;oBAC3C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC;AAChD,iBAAA,CAAC;AAEF,gBAAA,IAAI,UAAU,KAAK,IAAI,CAAC,sBAAsB,EAAE;oBAC9C;gBACF;gBAEA,MAAM,IAAI,GAAG,GAAsC;AACnD,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,oBAAA,GAAG,IAAI;oBACP,UAAU;oBACV,UAAU;AACV,oBAAA,IAAI;AACF,0BAAE;AACE,4BAAA,QAAQ,EAAE;gCACR,GAAG,IAAI,CAAC,QAAQ;AAChB,gCAAA,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7B,gCAAA,IAAI,UAAU,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;gCACrC,IAAI,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;AAClF,6BAAA;AACF;0BACD,EAAE,CAAC;AACR,iBAAA,CAAC;YACJ,CAAC,GAAG;QACN,CAAC;sGAAC;;;AAMe,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,MAAK;AACjD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;AACxC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B;QACF,CAAC;gGAAC;AAEe,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,YAAW;AAClD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAA6B;AACtD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE;gBAC9C,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,MAAM,EAAE,KAAK;gBACvB,UAAU,EAAE,MAAM,EAAE,UAAU;AAC/B,aAAA,CAAC;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAI;AACvB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;gBAExB,OAAO;AACL,oBAAA,GAAG,IAAI;AACP,oBAAA,CAAC,EAAE,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC7D,oBAAA,CAAC,EAAE,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAC7D,IAAI,KAAK,KAAK,SAAS,GAAG,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;iBAC9E;YACH,CAAC,CAAC,CACH;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAA2B,CAAC;QAC5C,CAAC;2FAAC;QAMA,IAAI,CAAC,UAAU,CAAC;AACd,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,KAAK,EAAE,sCAAsC;AAC7C,YAAA,eAAe,EAAE,WAAW;AAC5B,YAAA,iBAAiB,EAAE,GAAG;YACtB,GAAG,IAAI,CAAC,OAAO,EAAE;AAClB,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAA0B,CAAC;IACjE;8GAhKW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpB/C,mcAYA,EAAA,MAAA,EAAA,CAAA,+ySAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKY,uBAAuB,kHAAE,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGlD,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAN9C,SAAS;AAGC,YAAA,IAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,EAAA,eAAA,EAC7C,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mcAAA,EAAA,MAAA,EAAA,CAAA,+ySAAA,CAAA,EAAA;;;"}
1
+ {"version":3,"file":"acorex-platform-module-dashboard-management-client-heatmap-chart-widget.component-BYAOAXk7.mjs","sources":["../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.component.ts","../../../../libs/modules/dashboard-management/client/src/lib/features/shared/widgets/chart/heatmap-chart/heatmap-chart-widget.component.html"],"sourcesContent":["import { AXHeatmapChartComponent, AXHeatmapChartOption, AXHeatmapData } from '@acorex/charts/heatmap-chart';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPQueryExecutor } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPDashboardWidgetComponent } from '../../dashboard-widget-base';\nimport { resolveChartQueryTabs } from '../chart-query-load.util';\nimport { loadHeatmapChartItems, resolveChartAxisLabels } from '../chart-widget-data.util';\nimport { AXPChartQueryTabsComponent } from '../chart-query-tabs.component';\n\n/**\n * Heatmap Chart Widget Component\n * Displays matrix-like data with color intensity based on value.\n */\n@Component({\n templateUrl: './heatmap-chart-widget.component.html',\n styleUrls: ['./heatmap-chart-widget.component.css'],\n imports: [AXHeatmapChartComponent, AXPChartQueryTabsComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPHeatmapChartWidgetViewComponent extends AXPDashboardWidgetComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly queryExecutor = inject(AXPQueryExecutor);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Chart state -----\n\n protected data = signal<AXHeatmapData[]>([]);\n\n /** Options passed to the chart with resolved string labels (multi-language and @i18n keys). */\n protected heatmapOptions = signal<AXHeatmapChartOption>({} as AXHeatmapChartOption);\n\n private labelResolveGeneration = 0;\n\n //#endregion\n\n //#region ----- Query tabs -----\n\n protected readonly queryTabs = computed(() =>\n resolveChartQueryTabs(this.options() as Record<string, unknown>, this.entityContext()?.entityId),\n );\n\n protected readonly activeTabIndex = signal(0);\n\n private readonly activeQuery = computed(() => {\n const tabs = this.queryTabs();\n if (tabs.length === 0) {\n return undefined;\n }\n const index = Math.min(Math.max(this.activeTabIndex(), 0), tabs.length - 1);\n return tabs[index];\n });\n\n protected selectQueryTab(index: number): void {\n this.activeTabIndex.set(index);\n }\n\n //#endregion\n\n //#region ----- Localization -----\n\n private async resolveChartText(value: unknown): Promise<string> {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.startsWith('@') ? this.translationService.translateAsync(value) : value;\n }\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n this.translationService.isValidMultiLanguageObject(value)\n ) {\n return this.translationService.resolve(value as AXPMultiLanguageString);\n }\n return String(value);\n }\n\n private readonly resolveOptionLabelsEffect = effect(() => {\n const raw = this.options() as Record<string, unknown>;\n const generation = ++this.labelResolveGeneration;\n\n void (async () => {\n const axisLabels = resolveChartAxisLabels(raw);\n const [xAxisLabel, yAxisLabel] = await Promise.all([\n this.resolveChartText(axisLabels.xAxisLabel),\n this.resolveChartText(axisLabels.yAxisLabel),\n ]);\n\n const messagesRaw = raw['messages'];\n const messages =\n messagesRaw && typeof messagesRaw === 'object' && !Array.isArray(messagesRaw)\n ? (messagesRaw as Record<string, unknown>)\n : undefined;\n\n const [noData, noDataHelp] = await Promise.all([\n this.resolveChartText(messages?.['noData']),\n this.resolveChartText(messages?.['noDataHelp']),\n ]);\n\n if (generation !== this.labelResolveGeneration) {\n return;\n }\n\n const base = raw as unknown as AXHeatmapChartOption;\n this.heatmapOptions.set({\n ...base,\n xAxisLabel,\n yAxisLabel,\n ...(messages\n ? {\n messages: {\n ...base.messages,\n ...(noData ? { noData } : {}),\n ...(noDataHelp ? { noDataHelp } : {}),\n ...(messages['noDataIcon'] ? { noDataIcon: String(messages['noDataIcon']) } : {}),\n },\n }\n : {}),\n });\n })();\n });\n\n //#endregion\n\n //#region ----- Query loading -----\n\n private readonly clampTabIndexEffect = effect(() => {\n const tabs = this.queryTabs();\n if (this.activeTabIndex() >= tabs.length) {\n this.activeTabIndex.set(0);\n }\n });\n\n private readonly dataLoadEffect = effect(async () => {\n const opts = this.options() as Record<string, unknown>;\n const active = this.activeQuery();\n const items = await loadHeatmapChartItems(opts, {\n queryExecutor: this.queryExecutor,\n queryKey: active?.query,\n queryInput: active?.queryInput,\n });\n const resolved = await Promise.all(\n items.map(async (item) => {\n const x = item.x;\n const y = item.y;\n const label = item.label;\n\n return {\n ...item,\n x: typeof x === 'number' ? x : await this.resolveChartText(x),\n y: typeof y === 'number' ? y : await this.resolveChartText(y),\n ...(label !== undefined ? { label: await this.resolveChartText(label) } : {}),\n };\n }),\n );\n\n this.data.set(resolved as AXHeatmapData[]);\n });\n\n //#endregion\n\n constructor() {\n super();\n this.setOptions({\n showXAxis: true,\n showYAxis: true,\n showTooltip: true,\n cellPadding: 0.05,\n borderRadius: 2,\n color: 'rgb(var(--ax-sys-color-primary-500))',\n animationEasing: 'cubic-out',\n animationDuration: 800,\n ...this.options(),\n });\n\n this.heatmapOptions.set(this.options() as AXHeatmapChartOption);\n }\n}\n","<div class=\"axp-chart-widget-host\">\n <axp-chart-query-tabs\n [tabs]=\"queryTabs()\"\n [activeIndex]=\"activeTabIndex()\"\n (activeIndexChange)=\"selectQueryTab($event)\"\n />\n <div class=\"axp-chart-widget-host__body\">\n <div class=\"axp-chart-widget-host__chart axp-chart-widget-host__chart--heatmap\">\n <ax-heatmap-chart [data]=\"data()\" [options]=\"heatmapOptions()\"></ax-heatmap-chart>\n </div>\n </div>\n</div>\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as contracts from '@acorex-platform/module-dashboard-management-client/contracts';
2
2
  import { DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY } from '@acorex-platform/module-dashboard-management-client/contracts';
3
3
  export * from '@acorex-platform/module-dashboard-management-client/contracts';
4
- import { b as AXMDashboardStore, d as AXMDashboardGridLayoutSectionComponent, D as DASHBOARD_LAYOUT_ENTITY_MODE } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-8SFsCjtw.mjs';
4
+ import { b as AXMDashboardStore, d as AXMDashboardGridLayoutSectionComponent, D as DASHBOARD_LAYOUT_ENTITY_MODE } from './acorex-platform-module-dashboard-management-client-acorex-platform-module-dashboard-management-client-tGkZisK5.mjs';
5
5
  import * as i0 from '@angular/core';
6
6
  import { Injectable, inject, input, signal, effect, ChangeDetectionStrategy, Component } from '@angular/core';
7
7
  import { resolveMultiLanguageString } from '@acorex/core/translation';
@@ -130,4 +130,4 @@ var dashboardLayoutPage_component = /*#__PURE__*/Object.freeze({
130
130
  });
131
131
 
132
132
  export { AXMDashboardLayoutPageComponent, AXMDashboardLayoutPageComponentProvider, DASHBOARD_LAYOUT_ENTITY_MODE };
133
- //# sourceMappingURL=acorex-platform-module-dashboard-management-client-index-Co5ImjCW.mjs.map
133
+ //# sourceMappingURL=acorex-platform-module-dashboard-management-client-index-BYifZvSh.mjs.map