@fluentui/react-charts 9.3.12 → 9.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -2
- package/dist/index.d.ts +859 -0
- package/lib/VegaDeclarativeChart.js +1 -0
- package/lib/VegaDeclarativeChart.js.map +1 -0
- package/lib/components/LineChart/LineChart.js +47 -7
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +12 -12
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/VegaDeclarativeChart/VegaDeclarativeChart.js +405 -0
- package/lib/components/VegaDeclarativeChart/VegaDeclarativeChart.js.map +1 -0
- package/lib/components/VegaDeclarativeChart/VegaDeclarativeChartHooks.js +20 -0
- package/lib/components/VegaDeclarativeChart/VegaDeclarativeChartHooks.js.map +1 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteColorAdapter.js +415 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteColorAdapter.js.map +1 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.js +537 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.js.map +1 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js +3279 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js.map +1 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteTypes.js +28 -0
- package/lib/components/VegaDeclarativeChart/VegaLiteTypes.js.map +1 -0
- package/lib/components/VegaDeclarativeChart/index.js +1 -0
- package/lib/components/VegaDeclarativeChart/index.js.map +1 -0
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +5 -2
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/utilities/utilities.js +41 -0
- package/lib/utilities/utilities.js.map +1 -1
- package/lib-commonjs/VegaDeclarativeChart.js +6 -0
- package/lib-commonjs/VegaDeclarativeChart.js.map +1 -0
- package/lib-commonjs/components/LineChart/LineChart.js +46 -6
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +11 -11
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaDeclarativeChart.js +274 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaDeclarativeChart.js.map +1 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaDeclarativeChartHooks.js +35 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaDeclarativeChartHooks.js.map +1 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteColorAdapter.js +412 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteColorAdapter.js.map +1 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.js +533 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.js.map +1 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js +3214 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js.map +1 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteTypes.js +31 -0
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteTypes.js.map +1 -0
- package/lib-commonjs/components/VegaDeclarativeChart/index.js +6 -0
- package/lib-commonjs/components/VegaDeclarativeChart/index.js.map +1 -0
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +4 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/index.js +1 -0
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/utilities/utilities.js +33 -0
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.ts"],"sourcesContent":["// Using custom VegaLiteTypes for internal adapter logic\n// For public API, VegaDeclarativeChart accepts vega-lite's TopLevelSpec\nimport type {\n VegaLiteSpec,\n VegaLiteUnitSpec,\n VegaLiteMarkDef,\n VegaLiteData,\n VegaLiteInterpolate,\n VegaLiteType,\n VegaLiteEncoding,\n VegaLiteSort,\n VegaLiteTitleParams,\n} from './VegaLiteTypes';\nimport type { LineChartProps } from '../LineChart/index';\nimport type { VerticalBarChartProps } from '../VerticalBarChart/index';\nimport type { VerticalStackedBarChartProps } from '../VerticalStackedBarChart/index';\nimport type { GroupedVerticalBarChartProps } from '../GroupedVerticalBarChart/index';\nimport type { HorizontalBarChartWithAxisProps } from '../HorizontalBarChartWithAxis/index';\nimport type { AreaChartProps } from '../AreaChart/index';\nimport type { DonutChartProps } from '../DonutChart/index';\nimport type { ScatterChartProps } from '../ScatterChart/index';\nimport type { HeatMapChartProps } from '../HeatMapChart/index';\nimport type { PolarChartProps, PolarAxisProps } from '../PolarChart/index';\nimport type {\n ChartProps,\n LineChartPoints,\n LineChartDataPoint,\n VerticalBarChartDataPoint,\n VerticalStackedChartProps,\n HorizontalBarChartWithAxisDataPoint,\n ChartDataPoint,\n ScatterChartDataPoint,\n HeatMapChartData,\n HeatMapChartDataPoint,\n ChartAnnotation,\n LineDataInVerticalStackedBarChart,\n AxisCategoryOrder,\n PolarDataPoint,\n LinePolarSeries,\n AreaPolarSeries,\n ScatterPolarSeries,\n LineChartLineOptions,\n} from '../../types/index';\nimport type { ColorFillBarsProps } from '../LineChart/index';\nimport type { Legend, LegendsProps } from '../Legends/index';\nimport type { TitleStyles } from '../../utilities/Common.styles';\nimport { getVegaColorFromMap, getVegaColor, getSequentialSchemeColors } from './VegaLiteColorAdapter';\nimport { safeEvaluateExpression } from './VegaLiteExpressionEvaluator';\nimport type { ColorMapRef } from './VegaLiteColorAdapter';\nimport { bin as d3Bin, extent as d3Extent, sum as d3Sum, min as d3Min, max as d3Max, mean as d3Mean } from 'd3-array';\nimport type { Bin } from 'd3-array';\nimport { format as d3Format } from 'd3-format';\nimport { isInvalidValue } from '@fluentui/chart-utilities';\n\n/**\n * Vega-Lite to Fluent Charts adapter for line/point charts.\n *\n * Transforms Vega-Lite JSON specifications into Fluent LineChart props.\n * Supports basic line charts with temporal/quantitative axes and color-encoded series.\n *\n * TODO: Future enhancements\n * - Multi-view layouts (facet, concat, repeat)\n * - Selection interactions\n * - Remote data loading (url)\n * - Transform pipeline (filter, aggregate, calculate)\n * - Conditional encodings\n * - Additional mark types (area, bar, etc.)\n * - Tooltip customization\n */\n\n/**\n * Default configuration values for VegaLite charts\n */\nconst DEFAULT_CHART_HEIGHT = 350;\nconst DEFAULT_MAX_BAR_WIDTH = 50;\nconst DEFAULT_TRUNCATE_CHARS = 20;\n\n/**\n * Determines if a spec is a layered specification\n */\nfunction isLayerSpec(spec: VegaLiteSpec): spec is VegaLiteSpec & { layer: VegaLiteUnitSpec[] } {\n return Array.isArray(spec.layer) && spec.layer.length > 0;\n}\n\n/**\n * Determines if a spec is a single unit specification\n */\nfunction isUnitSpec(spec: VegaLiteSpec): boolean {\n return spec.mark !== undefined && spec.encoding !== undefined;\n}\n\n/**\n * Extracts the mark type string from a VegaLiteMarkDef (string or object with type property)\n */\nexport function getMarkType(mark: VegaLiteMarkDef | string | undefined): string | undefined {\n if (!mark) {\n return undefined;\n }\n return typeof mark === 'string' ? mark : (mark as { type?: string }).type;\n}\n\n/**\n * Resolves the color for a legend label using the priority chain:\n * 1. Explicit color value from encoding\n * 2. Mark-level color\n * 3. Cached color from the shared color map\n * 4. New color via local index for deterministic per-chart assignment\n */\nfunction resolveColor(\n legend: string,\n index: number,\n colorValue: string | undefined,\n markColor: string | undefined,\n colorMap: ColorMapRef,\n colorScheme: string | undefined,\n colorRange: string[] | undefined,\n isDarkTheme?: boolean,\n): string {\n if (colorValue) {\n return colorValue;\n }\n if (markColor) {\n return markColor;\n }\n // Check colorMap cache first for cross-chart consistency\n if (colorMap.current?.has(legend)) {\n return colorMap.current.get(legend)!;\n }\n // Use local index (not colorMap.size) for deterministic per-chart color assignment\n const color = getVegaColor(index, colorScheme, colorRange, isDarkTheme);\n colorMap.current?.set(legend, color);\n return color;\n}\n\n/**\n * Extracts inline data values from a Vega-Lite data specification\n * TODO: Add support for URL-based data loading\n * TODO: Add support for named dataset resolution\n * TODO: Add support for data format parsing (csv, tsv)\n */\nfunction extractDataValues(data: VegaLiteData | undefined): Array<Record<string, unknown>> {\n if (!data) {\n return [];\n }\n\n if (data.values && Array.isArray(data.values)) {\n return data.values;\n }\n\n // TODO: Handle data.url - load remote data\n if (data.url) {\n // Remote data URLs are not yet supported\n return [];\n }\n\n // TODO: Handle data.name - resolve named datasets\n if (data.name) {\n // Named datasets are not yet supported\n return [];\n }\n\n return [];\n}\n\n/**\n * Applies a fold transform to convert wide-format data to long-format\n * The fold transform unpivots specified fields into key-value pairs\n *\n * @param data - Array of data records in wide format\n * @param foldFields - Array of field names to fold\n * @param asFields - [keyName, valueName] for the new columns (defaults to ['key', 'value'])\n * @returns Array of data records in long format\n */\nfunction applyFoldTransform(\n data: Array<Record<string, unknown>>,\n foldFields: string[],\n asFields: [string, string] = ['key', 'value'],\n): Array<Record<string, unknown>> {\n const [keyField, valueField] = asFields;\n const result: Array<Record<string, unknown>> = [];\n\n for (const row of data) {\n // Create a base row without the fields being folded\n const baseRow: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row)) {\n if (!foldFields.includes(key)) {\n baseRow[key] = value;\n }\n }\n\n // Create a new row for each folded field\n for (const field of foldFields) {\n if (field in row) {\n result.push({\n ...baseRow,\n [keyField]: field,\n [valueField]: row[field],\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Applies transforms from a Vega-Lite spec to data\n * Currently supports: fold transform\n *\n * @param data - Array of data records\n * @param transforms - Array of Vega-Lite transform specifications\n * @returns Transformed data array\n */\nfunction applyTransforms(\n data: Array<Record<string, unknown>>,\n transforms: Array<Record<string, unknown>> | undefined,\n): Array<Record<string, unknown>> {\n if (!transforms || transforms.length === 0) {\n return data;\n }\n\n let result = data;\n\n for (const transform of transforms) {\n // Handle fold transform\n if ('fold' in transform && Array.isArray(transform.fold)) {\n const foldFields = transform.fold as string[];\n const asFields = (transform.as as [string, string]) || ['key', 'value'];\n result = applyFoldTransform(result, foldFields, asFields);\n }\n\n // Handle filter transform\n if ('filter' in transform) {\n const filterExpr = transform.filter;\n if (typeof filterExpr === 'string') {\n result = result.filter(row => {\n try {\n return safeEvaluateExpression(filterExpr, row);\n } catch {\n return true;\n }\n });\n }\n }\n\n // Handle calculate transform\n if ('calculate' in transform && 'as' in transform) {\n const expr = transform.calculate as string;\n const asField = transform.as as string;\n result = result.map(row => {\n try {\n const value = safeEvaluateExpression(expr, row);\n return { ...row, [asField]: value };\n } catch {\n return row;\n }\n });\n }\n\n // Handle aggregate transform\n if ('aggregate' in transform && Array.isArray(transform.aggregate)) {\n const aggSpecs = transform.aggregate as Array<{ op: string; field?: string; as: string }>;\n const groupby = (transform.groupby as string[]) || [];\n const groups = new Map<string, Array<Record<string, unknown>>>();\n\n result.forEach(row => {\n const key = groupby.map(g => String(row[g])).join('|');\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(row);\n });\n\n result = Array.from(groups.entries()).map(([key, rows]) => {\n const baseRow: Record<string, unknown> = {};\n groupby.forEach((g, i) => {\n baseRow[g] = rows[0][g];\n });\n\n aggSpecs.forEach(spec => {\n const values = spec.field ? rows.map(r => Number(r[spec.field!])).filter(v => !isNaN(v)) : [];\n switch (spec.op) {\n case 'count':\n baseRow[spec.as] = rows.length;\n break;\n case 'sum':\n baseRow[spec.as] = d3Sum(values);\n break;\n case 'mean':\n case 'average':\n baseRow[spec.as] = d3Mean(values) ?? 0;\n break;\n case 'min':\n baseRow[spec.as] = d3Min(values) ?? 0;\n break;\n case 'max':\n baseRow[spec.as] = d3Max(values) ?? 0;\n break;\n default:\n baseRow[spec.as] = rows.length;\n }\n });\n return baseRow;\n });\n }\n\n // Handle window transform\n if ('window' in transform && Array.isArray(transform.window)) {\n const windowOps = transform.window as Array<{ op: string; field?: string; as: string }>;\n const sortFields = (transform.sort as Array<{ field: string; order?: string }>) || [];\n const groupby = (transform.groupby as string[]) || [];\n\n // Group data\n const groups = new Map<string, Array<Record<string, unknown>>>();\n result.forEach(row => {\n const key = groupby.length > 0 ? groupby.map(g => String(row[g])).join('|') : '__all__';\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(row);\n });\n\n const newResult: Array<Record<string, unknown>> = [];\n groups.forEach(rows => {\n // Sort within group\n if (sortFields.length > 0) {\n rows.sort((a, b) => {\n for (const sf of sortFields) {\n const va = Number(a[sf.field]) || 0;\n const vb = Number(b[sf.field]) || 0;\n const cmp = sf.order === 'descending' ? vb - va : va - vb;\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n });\n }\n\n let runningSum = 0;\n rows.forEach((row, idx) => {\n const newRow = { ...row };\n windowOps.forEach(op => {\n switch (op.op) {\n case 'sum':\n runningSum += Number(row[op.field!]) || 0;\n newRow[op.as] = runningSum;\n break;\n case 'rank':\n newRow[op.as] = idx + 1;\n break;\n case 'row_number':\n newRow[op.as] = idx + 1;\n break;\n case 'count':\n newRow[op.as] = idx + 1;\n break;\n default:\n newRow[op.as] = idx + 1;\n }\n });\n newResult.push(newRow);\n });\n });\n result = newResult;\n }\n\n // Handle joinaggregate transform\n if ('joinaggregate' in transform && Array.isArray(transform.joinaggregate)) {\n const aggSpecs = transform.joinaggregate as Array<{ op: string; field?: string; as: string }>;\n const groupby = (transform.groupby as string[]) || [];\n\n // Compute aggregates\n const groups = new Map<string, Array<Record<string, unknown>>>();\n result.forEach(row => {\n const key = groupby.length > 0 ? groupby.map(g => String(row[g])).join('|') : '__all__';\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(row);\n });\n\n const aggResults = new Map<string, Record<string, number>>();\n groups.forEach((rows, key) => {\n const aggs: Record<string, number> = {};\n aggSpecs.forEach(spec => {\n const values = spec.field ? rows.map(r => Number(r[spec.field!])).filter(v => !isNaN(v)) : [];\n switch (spec.op) {\n case 'mean':\n case 'average':\n aggs[spec.as] = d3Mean(values) ?? 0;\n break;\n case 'sum':\n aggs[spec.as] = d3Sum(values);\n break;\n case 'count':\n aggs[spec.as] = rows.length;\n break;\n case 'min':\n aggs[spec.as] = d3Min(values) ?? 0;\n break;\n case 'max':\n aggs[spec.as] = d3Max(values) ?? 0;\n break;\n default:\n aggs[spec.as] = rows.length;\n }\n });\n aggResults.set(key, aggs);\n });\n\n // Join back: add aggregate values to each row\n result = result.map(row => {\n const key = groupby.length > 0 ? groupby.map(g => String(row[g])).join('|') : '__all__';\n return { ...row, ...(aggResults.get(key) || {}) };\n });\n }\n\n // Handle regression transform (simple linear regression)\n if ('regression' in transform && 'on' in transform) {\n const yField = transform.regression as string;\n const xField = transform.on as string;\n const points = result\n .map(r => ({ x: Number(r[xField]), y: Number(r[yField]) }))\n .filter(p => !isNaN(p.x) && !isNaN(p.y));\n if (points.length >= 2) {\n const n = points.length;\n const sumX = d3Sum(points.map(p => p.x));\n const sumY = d3Sum(points.map(p => p.y));\n const sumXY = d3Sum(points.map(p => p.x * p.y));\n const sumX2 = d3Sum(points.map(p => p.x * p.x));\n const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n const intercept = (sumY - slope * sumX) / n;\n const xMin = d3Min(points.map(p => p.x)) ?? 0;\n const xMax = d3Max(points.map(p => p.x)) ?? 0;\n result = [\n { [xField]: xMin, [yField]: slope * xMin + intercept },\n { [xField]: xMax, [yField]: slope * xMax + intercept },\n ];\n }\n }\n\n // Handle loess transform (simplified: moving average approximation)\n if ('loess' in transform && 'on' in transform) {\n const yField = transform.loess as string;\n const xField = transform.on as string;\n const sorted = [...result]\n .filter(r => !isNaN(Number(r[xField])) && !isNaN(Number(r[yField])))\n .sort((a, b) => Number(a[xField]) - Number(b[xField]));\n const windowSize = Math.max(3, Math.floor(sorted.length / 4));\n result = sorted.map((row, i) => {\n const start = Math.max(0, i - Math.floor(windowSize / 2));\n const end = Math.min(sorted.length, start + windowSize);\n const windowSlice = sorted.slice(start, end);\n const avgY = d3Mean(windowSlice.map(r => Number(r[yField]))) ?? Number(row[yField]);\n return { [xField]: row[xField], [yField]: avgY };\n });\n }\n\n // Handle density transform (simplified: histogram-based density estimation)\n if ('density' in transform) {\n const field = transform.density as string;\n const groupby = (transform.groupby as string[]) || [];\n const groups = new Map<string, number[]>();\n\n result.forEach(row => {\n const key = groupby.length > 0 ? groupby.map(g => String(row[g])).join('|') : '__all__';\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(Number(row[field]));\n });\n\n const densityResult: Array<Record<string, unknown>> = [];\n groups.forEach((values, key) => {\n const min = d3Min(values) ?? 0;\n const max = d3Max(values) ?? 0;\n const range = max - min || 1;\n const bins = 20;\n const bandwidth = range / bins;\n const groupFields: Record<string, unknown> = {};\n if (groupby.length > 0) {\n const sampleRow = result.find(r => groupby.map(g => String(r[g])).join('|') === key);\n groupby.forEach(g => {\n groupFields[g] = sampleRow?.[g];\n });\n }\n for (let i = 0; i <= bins; i++) {\n const x = min + (i / bins) * range;\n const count = values.filter(v => Math.abs(v - x) < bandwidth).length;\n const density = count / (values.length * bandwidth);\n densityResult.push({ value: x, density, ...groupFields });\n }\n });\n result = densityResult;\n }\n\n // Handle quantile transform\n if ('quantile' in transform) {\n const field = transform.quantile as string;\n const probs = (transform.probs as number[]) || [0.25, 0.5, 0.75];\n const values = result\n .map(r => Number(r[field]))\n .filter(v => !isNaN(v))\n .sort((a, b) => a - b);\n if (values.length > 0) {\n result = probs.map(p => {\n const idx = Math.min(Math.floor(p * values.length), values.length - 1);\n return { prob: String(p), value: values[idx] };\n });\n }\n }\n\n // Handle impute transform (fill missing values)\n if ('impute' in transform && 'key' in transform) {\n const field = transform.impute as string;\n const keyField = transform.key as string;\n const method = (transform.method as string) || 'value';\n const fillValue = transform.value ?? 0;\n\n const existingKeys = new Set(result.map(r => r[keyField]));\n const allKeyValues = result.map(r => Number(r[keyField])).filter(v => !isNaN(v));\n if (allKeyValues.length > 0) {\n const minKey = d3Min(allKeyValues) ?? 0;\n const maxKey = d3Max(allKeyValues) ?? 0;\n for (let k = minKey; k <= maxKey; k++) {\n if (!existingKeys.has(k)) {\n const imputed: Record<string, unknown> = { [keyField]: k };\n imputed[field] = method === 'value' ? fillValue : 0;\n result.push(imputed);\n }\n }\n result.sort((a, b) => Number(a[keyField]) - Number(b[keyField]));\n }\n }\n\n // Handle lookup transform (join with secondary dataset)\n if ('lookup' in transform && 'from' in transform) {\n const lookupField = transform.lookup as string;\n const fromSpec = transform.from as {\n data?: { values?: Array<Record<string, unknown>> };\n key?: string;\n fields?: string[];\n };\n if (fromSpec.data?.values && fromSpec.key && fromSpec.fields) {\n const lookupMap = new Map<string, Record<string, unknown>>();\n fromSpec.data.values.forEach(row => {\n lookupMap.set(String(row[fromSpec.key!]), row);\n });\n result = result.map(row => {\n const lookupRow = lookupMap.get(String(row[lookupField]));\n if (lookupRow) {\n const extra: Record<string, unknown> = {};\n fromSpec.fields!.forEach(f => {\n extra[f] = lookupRow[f];\n });\n return { ...row, ...extra };\n }\n return row;\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Normalizes a Vega-Lite spec into an array of unit specs with resolved data and encoding\n * Handles both single-view and layered specifications\n */\nfunction normalizeSpec(spec: VegaLiteSpec): VegaLiteUnitSpec[] {\n if (isLayerSpec(spec)) {\n // Layered spec: merge shared data and encoding with each layer\n const sharedData = spec.data;\n const sharedEncoding = spec.encoding;\n\n return spec.layer.map(layer => ({\n ...layer,\n data: layer.data || sharedData,\n encoding: {\n ...sharedEncoding,\n ...layer.encoding,\n },\n }));\n }\n\n if (isUnitSpec(spec)) {\n // Single unit spec\n return [\n {\n mark: spec.mark!,\n encoding: spec.encoding,\n data: spec.data,\n },\n ];\n }\n\n // Unsupported spec structure\n return [];\n}\n\n/**\n * Parses a value to a Date if it's temporal, otherwise returns as number or string\n */\nfunction parseValue(value: unknown, isTemporalType: boolean): Date | number | string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (isTemporalType) {\n // Try parsing as date\n const dateValue = new Date(value as string | number);\n if (!isNaN(dateValue.getTime())) {\n return dateValue;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n return String(value);\n}\n\n/**\n * Maps Vega-Lite interpolate to Fluent curve options\n * Note: Only maps to curve types supported by LineChartLineOptions\n */\nfunction mapInterpolateToCurve(\n interpolate: VegaLiteInterpolate | undefined,\n): 'linear' | 'natural' | 'step' | 'stepAfter' | 'stepBefore' | undefined {\n if (!interpolate) {\n return undefined;\n }\n\n switch (interpolate) {\n case 'linear':\n case 'linear-closed':\n return 'linear';\n case 'step':\n return 'step';\n case 'step-before':\n return 'stepBefore';\n case 'step-after':\n return 'stepAfter';\n case 'natural':\n return 'natural';\n case 'monotone':\n return 'linear';\n // Note: basis, cardinal, catmull-rom are not supported by LineChartLineOptions\n default:\n return 'linear';\n }\n}\n\n/**\n * Extracts mark properties from VegaLiteMarkDef\n */\nfunction getMarkProperties(mark: VegaLiteMarkDef): {\n color?: string;\n interpolate?: VegaLiteInterpolate;\n strokeWidth?: number;\n strokeDash?: number[];\n point?: boolean | { filled?: boolean; size?: number };\n} {\n if (typeof mark === 'string') {\n return {};\n }\n return {\n color: mark.color,\n interpolate: mark.interpolate,\n strokeWidth: mark.strokeWidth,\n strokeDash: mark.strokeDash,\n point: mark.point,\n };\n}\n\n/**\n * Extracts annotations from Vega-Lite layers with text or rule marks\n * Text marks become text annotations, rule marks become reference lines\n */\nfunction extractAnnotations(spec: VegaLiteSpec): ChartAnnotation[] {\n const annotations: ChartAnnotation[] = [];\n\n if (!spec.layer || !Array.isArray(spec.layer)) {\n return annotations;\n }\n\n spec.layer.forEach((layer, index) => {\n const mark = getMarkType(layer.mark);\n const encoding = layer.encoding || {};\n\n // Text marks become annotations\n if (mark === 'text' && encoding.x && encoding.y) {\n const textValue = encoding.text?.datum || encoding.text?.value || encoding.text?.field || '';\n const xValue = encoding.x.datum || encoding.x.value || encoding.x.field;\n const yValue = encoding.y.datum || encoding.y.value || encoding.y.field;\n\n if (\n textValue &&\n (xValue !== undefined || encoding.x.datum !== undefined) &&\n (yValue !== undefined || encoding.y.datum !== undefined)\n ) {\n annotations.push({\n id: `text-annotation-${index}`,\n text: String(textValue),\n coordinates: {\n type: 'data',\n x: encoding.x.datum || xValue || 0,\n y: encoding.y.datum || yValue || 0,\n },\n style: {\n textColor: typeof layer.mark === 'object' ? layer.mark.color : undefined,\n },\n });\n }\n }\n\n // Rule marks can become reference lines (horizontal or vertical)\n if (mark === 'rule') {\n const markColor = typeof layer.mark === 'object' ? layer.mark.color : '#000';\n const markStrokeWidth = typeof layer.mark === 'object' ? layer.mark.strokeWidth || 1 : 1;\n const markStrokeDash =\n typeof layer.mark === 'object' ? (layer.mark as Record<string, unknown>).strokeDash : undefined;\n\n // Horizontal rule (y value constant)\n if (encoding.y && (encoding.y.value !== undefined || encoding.y.datum !== undefined)) {\n const yValue = encoding.y.value ?? encoding.y.datum;\n // Look for a companion text annotation at the same y-value\n const companionText = spec.layer?.find((l, i) => {\n if (i === index) {\n return false;\n }\n const m = getMarkType(l.mark);\n return m === 'text' && l.encoding?.y && (l.encoding.y.datum ?? l.encoding.y.value) === yValue;\n });\n const ruleText = companionText\n ? String(companionText.encoding?.text?.datum || companionText.encoding?.text?.value || yValue)\n : String(yValue);\n\n annotations.push({\n id: `rule-h-${index}`,\n text: ruleText,\n coordinates: {\n type: 'data',\n x: 0,\n y: yValue as number,\n },\n style: {\n textColor: markColor,\n borderColor: markColor,\n borderWidth: markStrokeWidth,\n ...(markStrokeDash && Array.isArray(markStrokeDash)\n ? { borderRadius: 0 } // Indicate dashed style\n : {}),\n },\n });\n }\n // Vertical rule (x value constant)\n else if (encoding.x && (encoding.x.value !== undefined || encoding.x.datum !== undefined)) {\n const xValue = encoding.x.value ?? encoding.x.datum;\n annotations.push({\n id: `rule-v-${index}`,\n text: String(xValue),\n coordinates: {\n type: 'data',\n x: xValue as number | string | Date,\n y: 0,\n },\n style: {\n textColor: markColor,\n borderColor: markColor,\n borderWidth: markStrokeWidth,\n },\n });\n }\n }\n });\n\n return annotations;\n}\n\n/**\n * Extracts color fill bars (background regions) from rect marks with x/x2 or y/y2 encodings\n */\nfunction extractColorFillBars(spec: VegaLiteSpec, colorMap: ColorMapRef, isDarkTheme?: boolean): ColorFillBarsProps[] {\n const colorFillBars: ColorFillBarsProps[] = [];\n\n if (!spec.layer || !Array.isArray(spec.layer)) {\n return colorFillBars;\n }\n\n // Detect if x-axis is temporal by checking the primary data layer (non-rect layer)\n const isXTemporal = spec.layer.some(layer => {\n const layerMark = getMarkType(layer.mark);\n // Skip rect layers, look at line/point/area layers\n if (layerMark === 'rect') {\n return false;\n }\n return layer.encoding?.x?.type === 'temporal';\n });\n\n spec.layer.forEach((layer, index) => {\n const mark = getMarkType(layer.mark);\n const encoding = layer.encoding || {};\n\n // Rect marks with x and x2 become color fill bars (vertical regions)\n if (mark === 'rect' && encoding.x && encoding.x2) {\n const legend = `region-${index}`;\n const color =\n typeof layer.mark === 'object' && layer.mark.color\n ? layer.mark.color\n : getVegaColorFromMap(legend, colorMap, undefined, undefined, isDarkTheme);\n\n // Extract start and end x values\n const rawStartX = encoding.x.datum || encoding.x.value;\n const rawEndX = encoding.x2.datum || encoding.x2.value;\n\n if (rawStartX !== undefined && rawEndX !== undefined) {\n // Convert to Date if x-axis is temporal and values are date-like strings\n let startX: number | Date = rawStartX as number | Date;\n let endX: number | Date = rawEndX as number | Date;\n\n if (isXTemporal) {\n const parsedStart = new Date(rawStartX as string | number);\n const parsedEnd = new Date(rawEndX as string | number);\n if (!isNaN(parsedStart.getTime())) {\n startX = parsedStart;\n }\n if (!isNaN(parsedEnd.getTime())) {\n endX = parsedEnd;\n }\n }\n\n colorFillBars.push({\n legend,\n color,\n data: [{ startX, endX }],\n applyPattern: false,\n });\n }\n }\n });\n\n return colorFillBars;\n}\n\n/**\n * Extracts tick configuration from axis properties\n */\nfunction extractTickConfig(spec: VegaLiteSpec): {\n tickValues?: (number | Date | string)[];\n xAxisTickCount?: number;\n yAxisTickCount?: number;\n} {\n const config: {\n tickValues?: (number | Date | string)[];\n xAxisTickCount?: number;\n yAxisTickCount?: number;\n } = {};\n\n const encoding = spec.encoding || {};\n\n if (encoding.x?.axis) {\n if (encoding.x.axis.values) {\n config.tickValues = encoding.x.axis.values as (number | string)[];\n }\n if (encoding.x.axis.tickCount) {\n config.xAxisTickCount = encoding.x.axis.tickCount;\n }\n }\n\n if (encoding.y?.axis) {\n if (encoding.y.axis.tickCount) {\n config.yAxisTickCount = encoding.y.axis.tickCount;\n }\n }\n\n return config;\n}\n\n/**\n * Validates that data array is not empty and contains valid values for the specified field\n * @param data - Array of data objects\n * @param field - Field name to validate\n * @param chartType - Chart type for error message context\n * @throws Error if data is empty or field has no valid values\n */\nfunction validateDataArray(data: Array<Record<string, unknown>>, field: string, chartType: string): void {\n if (!data || data.length === 0) {\n throw new Error(`VegaLiteSchemaAdapter: Empty data array for ${chartType}`);\n }\n\n const hasValidValues = data.some(row => row[field] !== undefined && row[field] !== null);\n if (!hasValidValues) {\n throw new Error(`VegaLiteSchemaAdapter: No valid values found for field '${field}' in ${chartType}`);\n }\n}\n\n/**\n * Validates that nested arrays are not present in the data field (unsupported)\n * @param data - Array of data objects\n * @param field - Field name to validate\n * @throws Error if nested arrays are detected\n */\nfunction validateNoNestedArrays(data: Array<Record<string, unknown>>, field: string): void {\n const hasNestedArrays = data.some(row => Array.isArray(row[field]));\n if (hasNestedArrays) {\n throw new Error(\n `VegaLiteSchemaAdapter: Nested arrays not supported for field '${field}'. ` + `Use flat data structures only.`,\n );\n }\n}\n\n/**\n * Validates data type compatibility with encoding type\n * @param data - Array of data objects\n * @param field - Field name to validate\n * @param expectedType - Expected Vega-Lite type (quantitative, temporal, nominal, ordinal)\n * @throws Error if data type doesn't match encoding type\n */\n/**\n * Validates and potentially auto-corrects encoding types based on actual data\n * Returns the corrected type if auto-correction was applied\n *\n * @param data - Array of data values\n * @param field - Field name to validate\n * @param expectedType - Expected Vega-Lite type from schema\n * @param encoding - Encoding object to potentially modify\n * @param channelName - Name of encoding channel (x, y, etc.) for auto-correction\n * @returns Corrected type if auto-correction was applied, otherwise undefined\n */\nfunction validateEncodingType(\n data: Array<Record<string, unknown>>,\n field: string,\n expectedType: VegaLiteType | undefined,\n encoding?: VegaLiteEncoding,\n channelName?: 'x' | 'y',\n): VegaLiteType | undefined {\n if (!expectedType || expectedType === 'nominal' || expectedType === 'ordinal' || expectedType === 'geojson') {\n return; // Nominal, ordinal, and geojson accept any type\n }\n\n // Find first non-null value to check type\n const sampleValue = data.map(row => row[field]).find(v => v !== null && v !== undefined);\n\n if (!sampleValue) {\n return; // No values to validate\n }\n\n if (expectedType === 'quantitative') {\n if (typeof sampleValue !== 'number' && !isFinite(Number(sampleValue))) {\n // Type mismatch: quantitative declared but data is not numeric\n const actualType = typeof sampleValue;\n\n if (actualType === 'string') {\n // Auto-correct: treat as nominal for categorical string data\n // This matches Plotly behavior - render as categorical chart\n\n // Modify encoding to use nominal type\n if (encoding && channelName && encoding[channelName]) {\n encoding[channelName]!.type = 'nominal';\n }\n\n return 'nominal';\n }\n\n // For non-string types, still throw error (truly invalid)\n throw new Error(\n `VegaLiteSchemaAdapter: Field '${field}' marked as quantitative but contains non-numeric values (${actualType}).`,\n );\n }\n } else if (expectedType === 'temporal') {\n const isValidDate =\n sampleValue instanceof Date || (typeof sampleValue === 'string' && !isNaN(Date.parse(sampleValue)));\n if (!isValidDate) {\n let suggestion = '';\n if (typeof sampleValue === 'number') {\n suggestion = ' The data contains numbers. Change the type to \"quantitative\" instead.';\n } else if (typeof sampleValue === 'string') {\n suggestion = ` The data contains strings that are not valid dates (e.g., \"${sampleValue}\"). Ensure dates are in ISO format (YYYY-MM-DD) or valid date strings.`;\n }\n\n throw new Error(\n `VegaLiteSchemaAdapter: Field '${field}' marked as temporal but contains invalid date values.${suggestion}`,\n );\n }\n }\n\n return undefined;\n}\n\n/**\n * Validates X and Y encodings for charts requiring both axes\n * Performs comprehensive validation including data array, nested arrays, and encoding types\n * Can auto-correct type mismatches (e.g., quantitative with string data → nominal)\n *\n * @param data - Array of data objects\n * @param xField - X field name\n * @param yField - Y field name\n * @param xType - Expected X encoding type\n * @param yType - Expected Y encoding type\n * @param chartType - Chart type for error message context\n * @param encoding - Encoding object (optional, for auto-correction)\n * @throws Error if validation fails\n */\nfunction validateXYEncodings(\n data: Array<Record<string, unknown>>,\n xField: string,\n yField: string,\n xType: VegaLiteType | undefined,\n yType: VegaLiteType | undefined,\n chartType: string,\n encoding?: VegaLiteEncoding,\n): void {\n validateDataArray(data, xField, chartType);\n validateDataArray(data, yField, chartType);\n validateNoNestedArrays(data, xField);\n validateNoNestedArrays(data, yField);\n\n // Validate types with auto-correction support\n validateEncodingType(data, xField, xType, encoding, 'x');\n validateEncodingType(data, yField, yType, encoding, 'y');\n}\n\n/**\n * Extracts Y-axis scale type from encoding\n * Returns 'log' if logarithmic scale is specified, undefined otherwise\n */\nfunction extractYAxisType(encoding: VegaLiteEncoding): 'log' | undefined {\n const yScale = encoding?.y?.scale;\n return yScale?.type === 'log' ? 'log' : undefined;\n}\n\n/**\n * Extracts y-axis min/max considering both scale.domain and scale.zero.\n * When scale.zero is false and no explicit domain, yMinValue is computed from data.\n */\nfunction extractYMinMax(\n encoding: VegaLiteEncoding,\n dataValues: Array<Record<string, unknown>>,\n): { yMinValue?: number; yMaxValue?: number } {\n const yScale = encoding?.y?.scale;\n const domain = yScale?.domain;\n\n // Explicit domain takes priority\n if (Array.isArray(domain)) {\n return {\n yMinValue: domain[0] as number,\n yMaxValue: domain[1] as number,\n };\n }\n\n // When zero is explicitly false, compute min from data so y-axis doesn't start at 0\n if (yScale?.zero === false) {\n const yField = encoding?.y?.field;\n if (yField) {\n const yValues = dataValues.map(row => Number(row[yField])).filter(v => !isNaN(v));\n if (yValues.length > 0) {\n const dataMin = d3Min(yValues) ?? 0;\n const dataMax = d3Max(yValues) ?? 0;\n const padding = (dataMax - dataMin) * 0.05;\n return { yMinValue: dataMin - padding };\n }\n }\n }\n\n return {};\n}\n\n/**\n * Creates a value formatter from a d3-format specifier string.\n * Returns undefined if no format is specified or if the format is invalid.\n */\nfunction createValueFormatter(formatSpec: string | undefined): ((value: number) => string) | undefined {\n if (!formatSpec) {\n return undefined;\n }\n try {\n const formatter = d3Format(formatSpec);\n return formatter;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Converts Vega-Lite sort specification to Fluent Charts AxisCategoryOrder\n * Supports: 'ascending', 'descending', null, array, or object with op/order\n * @param sort - Vega-Lite sort specification\n * @returns AxisCategoryOrder compatible value\n */\nfunction convertVegaSortToAxisCategoryOrder(sort: VegaLiteSort): AxisCategoryOrder | undefined {\n if (!sort) {\n return undefined;\n }\n\n // Handle string sorts: 'ascending' | 'descending'\n if (typeof sort === 'string') {\n if (sort === 'ascending') {\n return 'category ascending';\n }\n if (sort === 'descending') {\n return 'category descending';\n }\n return undefined;\n }\n\n // Handle array sort (explicit ordering)\n if (Array.isArray(sort)) {\n return sort as string[];\n }\n\n // Handle object sort with op and order\n if (typeof sort === 'object' && sort.op && sort.order) {\n const op = sort.op === 'average' ? 'mean' : sort.op; // Map 'average' to 'mean'\n const order = sort.order === 'ascending' ? 'ascending' : 'descending';\n return `${op} ${order}` as AxisCategoryOrder;\n }\n\n return undefined;\n}\n\n/**\n * Extracts axis category ordering from Vega-Lite encoding\n * Returns props for xAxisCategoryOrder and yAxisCategoryOrder\n */\nfunction extractAxisCategoryOrderProps(encoding: VegaLiteEncoding): {\n xAxisCategoryOrder?: AxisCategoryOrder;\n yAxisCategoryOrder?: AxisCategoryOrder;\n} {\n const result: {\n xAxisCategoryOrder?: AxisCategoryOrder;\n yAxisCategoryOrder?: AxisCategoryOrder;\n } = {};\n\n if (encoding?.x?.sort) {\n const xOrder = convertVegaSortToAxisCategoryOrder(encoding.x.sort);\n if (xOrder) {\n result.xAxisCategoryOrder = xOrder;\n }\n }\n\n if (encoding?.y?.sort) {\n const yOrder = convertVegaSortToAxisCategoryOrder(encoding.y.sort);\n if (yOrder) {\n result.yAxisCategoryOrder = yOrder;\n }\n }\n\n return result;\n}\n\n/**\n * Initializes the transformation context by normalizing spec and extracting common data\n * This reduces boilerplate across all transformer functions\n *\n * @param spec - Vega-Lite specification\n * @returns Normalized context with unit specs, data values, encoding, and mark properties\n */\nfunction initializeTransformContext(spec: VegaLiteSpec) {\n const unitSpecs = normalizeSpec(spec);\n\n if (unitSpecs.length === 0) {\n throw new Error('VegaLiteSchemaAdapter: No valid unit specs found in specification');\n }\n\n const primarySpec = unitSpecs[0];\n const rawDataValues = extractDataValues(primarySpec.data);\n // Apply any transforms from both top-level spec and primary unit spec\n let dataValues = applyTransforms(rawDataValues, spec.transform);\n dataValues = applyTransforms(dataValues, primarySpec.transform);\n const encoding = primarySpec.encoding || {};\n\n // Handle conditional color encoding — evaluate test expressions and materialize color values\n const colorEnc = encoding.color as Record<string, unknown> | undefined;\n if (colorEnc?.condition && typeof (colorEnc.condition as Record<string, unknown>)?.test === 'string') {\n const condition = colorEnc.condition as { test: string; value: string };\n const elseValue = (colorEnc.value as string) || '#999';\n const colorField = '__conditional_color__';\n\n dataValues.forEach(row => {\n try {\n const testResult = safeEvaluateExpression(condition.test, row);\n row[colorField] = testResult ? condition.value : elseValue;\n } catch {\n row[colorField] = elseValue;\n }\n });\n\n // Replace conditional color with a field-based color encoding using the materialized values\n (encoding as Record<string, unknown>).color = {\n field: colorField,\n type: 'nominal',\n scale: { domain: [condition.value, elseValue], range: [condition.value, elseValue] },\n legend: null,\n };\n }\n\n // Handle timeUnit on x/y encodings — aggregate data by time unit\n if (encoding.x?.timeUnit && encoding.x?.field) {\n const field = encoding.x.field;\n const unit = encoding.x.timeUnit as string;\n const yField = encoding.y?.field;\n const yAgg = encoding.y?.aggregate || (yField ? 'mean' : 'count');\n\n const groups = new Map<string, Array<Record<string, unknown>>>();\n dataValues.forEach(row => {\n const dateVal = new Date(row[field] as string | number);\n if (isNaN(dateVal.getTime())) {\n return;\n }\n let key: string;\n switch (unit) {\n case 'year':\n key = String(dateVal.getFullYear());\n break;\n case 'quarter':\n key = `Q${Math.floor(dateVal.getMonth() / 3) + 1}`;\n break;\n case 'month':\n key = dateVal.toLocaleString('en', { month: 'short' });\n break;\n case 'day':\n key = String(dateVal.getDate());\n break;\n case 'hours':\n key = String(dateVal.getHours());\n break;\n default:\n key = String(dateVal);\n }\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(row);\n });\n\n dataValues = Array.from(groups.entries()).map(([key, rows]) => {\n const result: Record<string, unknown> = { [field]: key };\n if (yField && yAgg !== 'count') {\n const vals = rows.map(r => Number(r[yField])).filter(v => !isNaN(v));\n result[yField] = yAgg === 'sum' ? d3Sum(vals) : d3Mean(vals) ?? 0;\n } else {\n result[yField || '__count'] = rows.length;\n }\n return result;\n });\n\n // Switch x from temporal to ordinal since we've aggregated\n encoding.x.type = 'ordinal';\n delete encoding.x.timeUnit;\n if (encoding.y?.aggregate) {\n delete encoding.y.aggregate;\n }\n }\n\n const markProps = getMarkProperties(primarySpec.mark);\n\n return {\n unitSpecs,\n primarySpec,\n dataValues,\n encoding,\n markProps,\n };\n}\n\n/**\n * Extracts common encoding fields and aggregates from Vega-Lite encoding\n *\n * @param encoding - Vega-Lite encoding specification\n * @returns Object containing extracted field names and aggregates\n */\nfunction extractEncodingFields(encoding: VegaLiteEncoding) {\n return {\n xField: encoding.x?.field,\n yField: encoding.y?.field,\n x2Field: encoding.x2?.field,\n colorField: encoding.color?.field,\n sizeField: encoding.size?.field,\n thetaField: encoding.theta?.field,\n radiusField: encoding.radius?.field,\n xAggregate: encoding.x?.aggregate,\n yAggregate: encoding.y?.aggregate,\n };\n}\n\n/**\n * Computes aggregate values for bar charts\n * Supports count, sum, mean, min, max aggregations\n *\n * @param data - Array of data values\n * @param groupField - Field to group by (x-axis field)\n * @param valueField - Field to aggregate (y-axis field, optional for count)\n * @param aggregate - Aggregate function (count, sum, mean, min, max)\n * @returns Array of {category, value} objects\n */\nfunction computeAggregateData(\n data: Array<Record<string, unknown>>,\n groupField: string,\n valueField: string | undefined,\n aggregate: string,\n): Array<{ category: string; value: number }> {\n // Group data by category\n const groups = new Map<string, number[]>();\n\n data.forEach(row => {\n const category = String(row[groupField]);\n\n if (aggregate === 'count') {\n // For count, just track the count\n if (!groups.has(category)) {\n groups.set(category, []);\n }\n groups.get(category)!.push(1);\n } else if (valueField && row[valueField] !== undefined && row[valueField] !== null) {\n // For other aggregates, collect values\n const value = Number(row[valueField]);\n if (!isNaN(value)) {\n if (!groups.has(category)) {\n groups.set(category, []);\n }\n groups.get(category)!.push(value);\n }\n }\n });\n\n // Compute aggregate for each group\n const result: Array<{ category: string; value: number }> = [];\n\n groups.forEach((values, category) => {\n let aggregatedValue: number;\n\n switch (aggregate) {\n case 'count':\n aggregatedValue = values.length;\n break;\n case 'sum':\n aggregatedValue = values.reduce((a, b) => a + b, 0);\n break;\n case 'mean':\n case 'average':\n aggregatedValue = values.reduce((a, b) => a + b, 0) / values.length;\n break;\n case 'min':\n aggregatedValue = d3Min(values) ?? 0;\n break;\n case 'max':\n aggregatedValue = d3Max(values) ?? 0;\n break;\n default:\n aggregatedValue = values.length; // Default to count\n }\n\n result.push({ category, value: aggregatedValue });\n });\n\n return result;\n}\n\n/**\n * Counts rows per x-category, optionally grouped by a secondary (color) field.\n * Returns a Map<xKey, Map<legend, count>>.\n */\nfunction countByCategory(\n dataValues: Array<Record<string, unknown>>,\n xField: string,\n colorField: string | undefined,\n defaultLegend: string,\n): Map<string, Map<string, number>> {\n const countMap = new Map<string, Map<string, number>>();\n dataValues.forEach(row => {\n const xValue = row[xField];\n if (xValue === undefined) {\n return;\n }\n const xKey = String(xValue);\n const legend = colorField && row[colorField] !== undefined ? String(row[colorField]) : defaultLegend;\n if (!countMap.has(xKey)) {\n countMap.set(xKey, new Map());\n }\n const legendMap = countMap.get(xKey)!;\n legendMap.set(legend, (legendMap.get(legend) || 0) + 1);\n });\n return countMap;\n}\n\n/**\n * Extracts color configuration from Vega-Lite encoding\n *\n * @param encoding - Vega-Lite encoding specification\n * @returns Color scheme and range configuration\n */\nfunction extractColorConfig(encoding: VegaLiteEncoding) {\n return {\n colorScheme: encoding.color?.scale?.scheme,\n colorRange: encoding.color?.scale?.range as string[] | undefined,\n };\n}\n\n/**\n * Groups data rows into series based on color encoding field\n * Returns a map of series name to data points and ordinal mapping for categorical x-axis\n */\nfunction groupDataBySeries(\n dataValues: Array<Record<string, unknown>>,\n xField: string | undefined,\n yField: string | undefined,\n colorField: string | undefined,\n isXTemporal: boolean,\n isYTemporal: boolean,\n xType?: VegaLiteType,\n sizeField?: string | undefined,\n yType?: VegaLiteType,\n): {\n seriesMap: Map<string, LineChartDataPoint[]>;\n ordinalMapping?: Map<string, number>;\n ordinalLabels?: string[];\n yOrdinalLabels?: string[];\n} {\n const seriesMap = new Map<string, LineChartDataPoint[]>();\n\n if (!xField || !yField) {\n return { seriesMap };\n }\n\n // Check if x-axis is ordinal/nominal (categorical)\n const isXOrdinal = xType === 'ordinal' || xType === 'nominal';\n const ordinalMapping = isXOrdinal ? new Map<string, number>() : undefined;\n const ordinalLabels: string[] = [];\n\n // Check if y-axis is ordinal/nominal (categorical)\n const isYOrdinal = yType === 'ordinal' || yType === 'nominal';\n const yOrdinalMapping = isYOrdinal ? new Map<string, number>() : undefined;\n const yOrdinalLabels: string[] = [];\n\n dataValues.forEach(row => {\n const xValue = parseValue(row[xField], isXTemporal);\n const yValue = parseValue(row[yField], isYTemporal);\n\n // Skip invalid values using chart-utilities validation\n if (isInvalidValue(xValue) || isInvalidValue(yValue)) {\n return;\n }\n\n // Skip if x or y is empty string (from null/undefined) or y is not a valid number/string\n if (xValue === '' || yValue === '' || (typeof yValue !== 'number' && typeof yValue !== 'string')) {\n return;\n }\n\n const seriesName = colorField && row[colorField] !== undefined ? String(row[colorField]) : 'default';\n\n if (!seriesMap.has(seriesName)) {\n seriesMap.set(seriesName, []);\n }\n\n // Handle x-value based on type\n let numericX: number | Date;\n if (isXOrdinal && typeof xValue === 'string') {\n // For ordinal data, map each unique string to a sequential index\n if (!ordinalMapping!.has(xValue)) {\n ordinalMapping!.set(xValue, ordinalMapping!.size);\n ordinalLabels.push(xValue);\n }\n numericX = ordinalMapping!.get(xValue)!;\n } else if (typeof xValue === 'string') {\n // For non-ordinal strings, try to parse as float (fallback to 0)\n const parsed = parseFloat(xValue);\n if (isNaN(parsed)) {\n return;\n }\n numericX = parsed;\n } else {\n numericX = xValue;\n }\n\n const markerSize = sizeField && row[sizeField] !== undefined ? Number(row[sizeField]) : undefined;\n\n // Handle y-value: numeric or ordinal mapping\n let numericY: number;\n if (isYOrdinal && typeof yValue === 'string') {\n if (!yOrdinalMapping!.has(yValue)) {\n yOrdinalMapping!.set(yValue, yOrdinalMapping!.size);\n yOrdinalLabels.push(yValue);\n }\n numericY = yOrdinalMapping!.get(yValue)!;\n } else {\n numericY = typeof yValue === 'number' ? yValue : 0;\n }\n\n seriesMap.get(seriesName)!.push({\n x: numericX,\n y: numericY,\n ...(markerSize !== undefined && !isNaN(markerSize) && { markerSize }),\n });\n });\n\n return {\n seriesMap,\n ordinalMapping,\n ordinalLabels: ordinalLabels.length > 0 ? ordinalLabels : undefined,\n yOrdinalLabels: yOrdinalLabels.length > 0 ? yOrdinalLabels : undefined,\n };\n}\n\n/**\n * Finds the primary data layer from unit specs for line/area charts\n * Skips rect layers (used for color fill bars) and finds the actual line/point/area layer\n *\n * @param unitSpecs - Array of normalized unit specs\n * @returns The primary spec containing the actual chart data, or undefined if not found\n */\nfunction findPrimaryLineSpec(unitSpecs: VegaLiteUnitSpec[]): VegaLiteUnitSpec | undefined {\n // First, try to find a line, point, or area layer\n const lineSpec = unitSpecs.find(spec => {\n const markType = getMarkType(spec.mark);\n return markType === 'line' || markType === 'point' || markType === 'area';\n });\n\n if (lineSpec) {\n return lineSpec;\n }\n\n // If no line/point/area layer, find first layer with actual field encodings (not just datum)\n const dataSpec = unitSpecs.find(spec => {\n const encoding = spec.encoding || {};\n return encoding.x?.field || encoding.y?.field;\n });\n\n return dataSpec || unitSpecs[0];\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent LineChart props\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns LineChartProps for rendering with Fluent LineChart component\n */\n\n/**\n * Auto-corrects encoding types in a Vega-Lite spec based on actual data values.\n * Call this before chart type detection so routing decisions use corrected types.\n *\n * Corrections applied:\n * - quantitative + string data → nominal (render as categorical)\n *\n * This mutates the spec encoding in place.\n */\nexport function autoCorrectEncodingTypes(spec: VegaLiteSpec): void {\n const unitSpec = spec.layer ? spec.layer[0] : spec;\n if (!unitSpec) {\n return;\n }\n\n const encoding = unitSpec.encoding;\n const data = extractDataValues(unitSpec.data ?? spec.data);\n\n if (!encoding || data.length === 0) {\n return;\n }\n\n // Check x encoding\n if (encoding.x?.field) {\n const sample = data.map(row => row[encoding.x!.field!]).find(v => v !== null && v !== undefined);\n if (sample !== undefined) {\n if (encoding.x.type === 'quantitative') {\n if (typeof sample === 'string' && !isFinite(Number(sample))) {\n encoding.x.type = 'nominal';\n } else if (typeof sample === 'object') {\n encoding.x.type = 'nominal';\n }\n } else if (encoding.x.type === 'temporal') {\n const isValidDate = sample instanceof Date || (typeof sample === 'string' && !isNaN(Date.parse(sample)));\n if (!isValidDate) {\n encoding.x.type = typeof sample === 'number' ? 'quantitative' : 'nominal';\n }\n }\n }\n }\n\n // Check y encoding\n if (encoding.y?.field) {\n const sample = data.map(row => row[encoding.y!.field!]).find(v => v !== null && v !== undefined);\n if (sample !== undefined) {\n if (encoding.y.type === 'quantitative') {\n if (typeof sample === 'string' && !isFinite(Number(sample))) {\n encoding.y.type = 'nominal';\n } else if (\n typeof sample === 'object' &&\n sample !== null &&\n !Array.isArray(sample) &&\n !(sample instanceof Date)\n ) {\n // Try to extract a numeric value from the object\n const numericKeys = Object.keys(sample as Record<string, unknown>).filter(\n k => typeof (sample as Record<string, unknown>)[k] === 'number',\n );\n if (numericKeys.length === 1) {\n // Object has exactly one numeric property - use it as the value\n const numericKey = numericKeys[0];\n const yField = encoding.y.field!;\n data.forEach(row => {\n const obj = row[yField];\n if (typeof obj === 'object' && obj !== null) {\n row[yField] = (obj as Record<string, unknown>)[numericKey];\n }\n });\n // Keep type as quantitative since we extracted numeric values\n } else {\n encoding.y.type = 'nominal';\n }\n } else if (typeof sample === 'object') {\n encoding.y.type = 'nominal';\n }\n } else if (encoding.y.type === 'temporal') {\n const isValidDate = sample instanceof Date || (typeof sample === 'string' && !isNaN(Date.parse(sample)));\n if (!isValidDate) {\n encoding.y.type = typeof sample === 'number' ? 'quantitative' : 'nominal';\n }\n }\n }\n }\n}\n\nexport type ChartTypeResult = {\n type:\n | 'line'\n | 'bar'\n | 'stacked-bar'\n | 'grouped-bar'\n | 'horizontal-bar'\n | 'area'\n | 'scatter'\n | 'donut'\n | 'heatmap'\n | 'histogram'\n | 'polar';\n mark: string;\n};\n\n/**\n * Determines the chart type based on Vega-Lite spec\n */\nexport function getChartType(spec: VegaLiteSpec): ChartTypeResult {\n // Auto-correct encoding types based on actual data BEFORE chart type detection\n autoCorrectEncodingTypes(spec);\n\n // Handle layered specs - check if it's a bar+line combo for stacked bar with lines\n if (spec.layer && spec.layer.length > 1) {\n const marks = spec.layer.map((layer: VegaLiteUnitSpec) => getMarkType(layer.mark));\n const hasBar = marks.includes('bar');\n const hasLine = marks.includes('line') || marks.includes('point');\n\n // Bar + line combo should use stacked bar chart (which supports line overlays)\n if (hasBar && hasLine) {\n const barLayer = spec.layer.find((layer: VegaLiteUnitSpec) => getMarkType(layer.mark) === 'bar');\n\n if (barLayer?.encoding?.color?.field) {\n return { type: 'stacked-bar', mark: 'bar' };\n }\n return { type: 'stacked-bar', mark: 'bar' };\n }\n }\n\n // Handle layered specs - use first layer's mark for other cases\n const mark = spec.layer ? spec.layer[0]?.mark : spec.mark;\n const markType = getMarkType(mark);\n\n const encoding = spec.layer ? spec.layer[0]?.encoding : spec.encoding;\n const hasColorEncoding = !!encoding?.color?.field;\n\n // Polar charts with arc marks: theta AND radius encodings\n if (markType === 'arc' && encoding?.theta && encoding?.radius) {\n return { type: 'polar', mark: markType };\n }\n\n // Arc marks for pie/donut charts (theta only, no radius)\n if (markType === 'arc' && encoding?.theta) {\n return { type: 'donut', mark: markType };\n }\n\n // Polar charts: non-arc marks with theta and radius encodings\n if (encoding?.theta && encoding?.radius) {\n return { type: 'polar', mark: markType! };\n }\n\n // Rect marks for heatmaps (quantitative or nominal color)\n if (markType === 'rect' && encoding?.x?.field && encoding?.y?.field && encoding?.color?.field) {\n return { type: 'heatmap', mark: markType };\n }\n\n // Bar charts\n if (markType === 'bar') {\n if (encoding?.x?.bin) {\n return { type: 'histogram', mark: markType };\n }\n\n const isXNominal = encoding?.x?.type === 'nominal' || encoding?.x?.type === 'ordinal';\n const isYNominal = encoding?.y?.type === 'nominal' || encoding?.y?.type === 'ordinal';\n\n if (isYNominal && !isXNominal) {\n return { type: 'horizontal-bar', mark: markType };\n }\n\n if (hasColorEncoding) {\n const hasXOffset = !!encoding?.xOffset;\n if (hasXOffset) {\n return { type: 'grouped-bar', mark: markType };\n }\n return { type: 'stacked-bar', mark: markType };\n }\n\n const xField = encoding?.x?.field;\n const dataValues = spec.data?.values;\n if (xField && Array.isArray(dataValues) && dataValues.length > 0) {\n const xValues = dataValues.map((row: Record<string, unknown>) => row[xField]);\n const uniqueXValues = new Set(xValues);\n if (uniqueXValues.size < xValues.length) {\n return { type: 'stacked-bar', mark: markType };\n }\n }\n\n return { type: 'bar', mark: markType };\n }\n\n if (markType === 'area') {\n return { type: 'area', mark: markType };\n }\n\n if (markType === 'point' || markType === 'circle' || markType === 'square' || markType === 'tick') {\n return { type: 'scatter', mark: markType };\n }\n\n // Trail marks rendered as line charts (size encoding as markerSize)\n if (markType === 'trail') {\n return { type: 'line', mark: 'line' };\n }\n\n // Error bar/band marks rendered as line charts\n if (markType === 'errorbar' || markType === 'errorband') {\n return { type: 'line', mark: 'line' };\n }\n\n return { type: 'line', mark: markType || 'line' };\n}\n\nexport function transformVegaLiteToLineChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): LineChartProps {\n // Initialize transformation context, but find the primary line/point layer for layered specs\n const unitSpecs = normalizeSpec(spec);\n\n if (unitSpecs.length === 0) {\n throw new Error('VegaLiteSchemaAdapter: No valid unit specs found in specification');\n }\n\n // For layered specs, find the actual line/point layer (not rect layers for color fill bars)\n const primarySpec = findPrimaryLineSpec(unitSpecs);\n if (!primarySpec) {\n throw new Error('VegaLiteSchemaAdapter: No valid line/point layer found in specification');\n }\n\n // Check if there's a point layer in addition to line layer (for line+point combo charts)\n const hasPointLayer = unitSpecs.some(unitSpec => getMarkType(unitSpec.mark) === 'point');\n const hasLineLayer = unitSpecs.some(unitSpec => getMarkType(unitSpec.mark) === 'line');\n const shouldShowPoints = hasPointLayer && hasLineLayer;\n\n const rawDataValues = extractDataValues(primarySpec.data);\n // Apply any transforms (fold, etc.) from the spec\n const dataValues = applyTransforms(rawDataValues, spec.transform);\n const encoding = primarySpec.encoding || {};\n const markProps = getMarkProperties(primarySpec.mark);\n\n // Extract field names\n const { xField, yField, colorField } = extractEncodingFields(encoding);\n\n // Check for size encoding from any layer (e.g., point layer with size in line+point combo)\n let sizeField: string | undefined;\n if (unitSpecs.length > 1) {\n for (const unitSpec of unitSpecs) {\n const unitEncoding = unitSpec.encoding || {};\n if (unitEncoding.size?.field) {\n sizeField = unitEncoding.size.field;\n break;\n }\n }\n } else {\n sizeField = encoding.size?.field;\n }\n\n // Validate data and encodings\n if (!xField || !yField) {\n throw new Error('VegaLiteSchemaAdapter: Line chart requires both x and y encodings with field names');\n }\n\n validateXYEncodings(dataValues, xField, yField, encoding.x?.type, encoding.y?.type, 'LineChart', encoding);\n\n const isXTemporal = encoding.x?.type === 'temporal';\n const isYTemporal = encoding.y?.type === 'temporal';\n\n // Group data into series\n const { seriesMap, ordinalLabels, yOrdinalLabels } = groupDataBySeries(\n dataValues,\n xField,\n yField,\n colorField,\n isXTemporal,\n isYTemporal,\n encoding.x?.type,\n sizeField,\n encoding.y?.type,\n );\n\n // Extract color configuration\n const { colorScheme, colorRange } = extractColorConfig(encoding);\n\n // Convert series map to LineChartPoints array\n const lineChartData: LineChartPoints[] = [];\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n seriesMap.forEach((dataPoints, seriesName) => {\n if (!colorIndex.has(seriesName)) {\n colorIndex.set(seriesName, currentColorIndex++);\n }\n const color = resolveColor(\n seriesName,\n colorIndex.get(seriesName)!,\n undefined,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n\n const curveOption = mapInterpolateToCurve(markProps.interpolate);\n\n // Build line options with curve, strokeDash, and strokeWidth\n const lineOptions: Partial<LineChartLineOptions> = {};\n if (curveOption) {\n lineOptions.curve = curveOption;\n }\n if (markProps.strokeDash) {\n lineOptions.strokeDasharray = markProps.strokeDash.join(' ');\n }\n if (markProps.strokeWidth) {\n lineOptions.strokeWidth = markProps.strokeWidth;\n }\n\n lineChartData.push({\n legend: seriesName,\n data: dataPoints,\n color,\n hideNonActiveDots: !shouldShowPoints,\n ...(Object.keys(lineOptions).length > 0 && { lineOptions }),\n });\n });\n\n // Extract chart title\n const chartTitle = typeof spec.title === 'string' ? spec.title : spec.title?.text;\n\n // Extract axis titles and formats\n const xAxisTitle = encoding.x?.axis?.title ?? undefined;\n const yAxisTitle = encoding.y?.axis?.title ?? undefined;\n const tickFormat = encoding.x?.axis?.format;\n const yAxisTickFormat = encoding.y?.axis?.format;\n\n // Extract tick values and counts\n // Use ordinalLabels for ordinal x-axis, otherwise use explicit values from spec\n const tickValues = ordinalLabels || encoding.x?.axis?.values;\n const yAxisTickCount = encoding.y?.axis?.tickCount;\n\n // Extract domain/range for min/max values\n const { yMinValue, yMaxValue } = extractYMinMax(encoding, dataValues);\n\n // Extract annotations and color fill bars from layers\n const annotations = extractAnnotations(spec);\n const colorFillBars = extractColorFillBars(spec, colorMap, isDarkTheme);\n\n // Convert rule marks in layered specs to reference line series\n // Each horizontal rule becomes a 2-point line at constant y spanning the data x-range\n if (spec.layer && Array.isArray(spec.layer) && lineChartData.length > 0) {\n const allXValues = lineChartData.flatMap(series => series.data.map(p => p.x));\n const xMin = allXValues.length > 0 ? allXValues.reduce((a, b) => (a < b ? a : b)) : 0;\n const xMax = allXValues.length > 0 ? allXValues.reduce((a, b) => (a > b ? a : b)) : 0;\n\n spec.layer.forEach((layer, layerIndex) => {\n const layerMark = getMarkType(layer.mark);\n if (layerMark !== 'rule') {\n return;\n }\n\n const ruleEncoding = layer.encoding || {};\n const yDatum = ruleEncoding.y?.datum ?? ruleEncoding.y?.value;\n if (yDatum === undefined) {\n return;\n }\n\n const ruleMarkProps = getMarkProperties(layer.mark);\n const ruleColor = ruleMarkProps.color || '#d62728';\n\n // Find companion text annotation for legend name\n const textLayer = spec.layer!.find(l => {\n const m = getMarkType(l.mark);\n return m === 'text' && l.encoding?.y && (l.encoding.y.datum ?? l.encoding.y.value) === yDatum;\n });\n const ruleLegend = textLayer\n ? String(textLayer.encoding?.text?.datum || textLayer.encoding?.text?.value || `y=${yDatum}`)\n : `y=${yDatum}`;\n\n const ruleLineOptions: Partial<LineChartLineOptions> = {};\n if (ruleMarkProps.strokeDash) {\n ruleLineOptions.strokeDasharray = ruleMarkProps.strokeDash.join(' ');\n }\n if (ruleMarkProps.strokeWidth) {\n ruleLineOptions.strokeWidth = ruleMarkProps.strokeWidth;\n }\n\n lineChartData.push({\n legend: ruleLegend,\n data: [\n { x: xMin as number | Date, y: yDatum as number },\n { x: xMax as number | Date, y: yDatum as number },\n ],\n color: ruleColor,\n hideNonActiveDots: true,\n ...(Object.keys(ruleLineOptions).length > 0 && { lineOptions: ruleLineOptions }),\n });\n });\n }\n\n // Check for log scale on Y-axis\n const yAxisType = extractYAxisType(encoding);\n\n // Extract axis category ordering\n const categoryOrderProps = extractAxisCategoryOrderProps(encoding);\n\n // Build LineChartProps\n const chartProps: ChartProps = {\n lineChartData,\n ...(chartTitle && { chartTitle }),\n };\n\n return {\n data: chartProps,\n width: typeof spec.width === 'number' ? spec.width : undefined,\n height: typeof spec.height === 'number' ? spec.height : undefined,\n ...(xAxisTitle && { chartTitle: xAxisTitle }),\n ...(yAxisTitle && { yAxisTitle }),\n ...(tickFormat && { tickFormat }),\n ...(yAxisTickFormat && { yAxisTickFormat }),\n ...(tickValues && { tickValues }),\n ...(yAxisTickCount && { yAxisTickCount }),\n ...(yMinValue !== undefined && { yMinValue }),\n ...(yMaxValue !== undefined && { yMaxValue }),\n ...(annotations.length > 0 && { annotations }),\n ...(colorFillBars.length > 0 && { colorFillBars }),\n ...(yAxisType && { yScaleType: yAxisType }),\n // For nominal y-axis, provide tick values and labels\n ...(yOrdinalLabels &&\n yOrdinalLabels.length > 0 && {\n yAxisTickValues: Array.from({ length: yOrdinalLabels.length }, (_, i) => i),\n yAxisTickFormat: (val: number) => yOrdinalLabels[val] ?? String(val),\n yMinValue: -0.5,\n yMaxValue: yOrdinalLabels.length - 0.5,\n }),\n ...categoryOrderProps,\n hideLegend: encoding.color?.legend?.disable ?? false,\n };\n}\n\n/**\n * Generates legend props from Vega-Lite specification\n * Used for multi-plot scenarios where legends are rendered separately\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns LegendsProps for rendering legends\n */\nexport function getVegaLiteLegendsProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): LegendsProps {\n const unitSpecs = normalizeSpec(spec);\n const legends: Legend[] = [];\n\n if (unitSpecs.length === 0) {\n return {\n legends,\n centerLegends: true,\n enabledWrapLines: true,\n canSelectMultipleLegends: true,\n };\n }\n\n const primarySpec = unitSpecs[0];\n const dataValues = extractDataValues(primarySpec.data);\n const encoding = primarySpec.encoding || {};\n const colorField = encoding.color?.field;\n\n if (!colorField) {\n return {\n legends,\n centerLegends: true,\n enabledWrapLines: true,\n canSelectMultipleLegends: true,\n };\n }\n\n // Extract unique series names\n const seriesNames = new Set<string>();\n dataValues.forEach(row => {\n if (row[colorField] !== undefined) {\n seriesNames.add(String(row[colorField]));\n }\n });\n\n // Generate legends\n seriesNames.forEach(seriesName => {\n const color = getVegaColorFromMap(seriesName, colorMap, undefined, undefined, isDarkTheme);\n legends.push({\n title: seriesName,\n color,\n });\n });\n\n return {\n legends,\n centerLegends: true,\n enabledWrapLines: true,\n canSelectMultipleLegends: true,\n };\n}\n\n/**\n * Extracts chart titles and title styles from Vega-Lite specification\n */\nexport function getVegaLiteTitles(spec: VegaLiteSpec): {\n chartTitle?: string;\n xAxisTitle?: string;\n yAxisTitle?: string;\n titleStyles?: TitleStyles;\n} {\n const unitSpecs = normalizeSpec(spec);\n\n if (unitSpecs.length === 0) {\n return {};\n }\n\n const primarySpec = unitSpecs[0];\n const encoding = primarySpec.encoding || {};\n\n // Extract chart title\n const chartTitle = typeof spec.title === 'string' ? spec.title : spec.title?.text;\n\n // Extract title styles if title is an object\n let titleStyles: TitleStyles | undefined;\n if (typeof spec.title === 'object' && spec.title !== null) {\n const titleObj = spec.title as VegaLiteTitleParams;\n\n // Build titleFont object if any font properties are present\n const titleFont: TitleStyles['titleFont'] = {};\n if (titleObj.font) {\n titleFont.family = titleObj.font;\n }\n if (titleObj.fontSize) {\n titleFont.size = titleObj.fontSize;\n }\n if (titleObj.fontWeight) {\n // Convert string weights to numbers (Font interface expects number)\n const weight = titleObj.fontWeight;\n if (typeof weight === 'string') {\n const weightMap: Record<string, number> = {\n normal: 400,\n bold: 700,\n lighter: 300,\n bolder: 600,\n };\n titleFont.weight = weightMap[weight.toLowerCase()] || 400;\n } else {\n titleFont.weight = weight;\n }\n }\n if (titleObj.color) {\n titleFont.color = titleObj.color;\n }\n\n // Map Vega-Lite anchor values to TitleStyles anchor values\n const anchorMap: Record<string, TitleStyles['titleXAnchor']> = {\n start: 'left',\n middle: 'center',\n end: 'right',\n };\n\n titleStyles = {\n ...(Object.keys(titleFont).length > 0 ? { titleFont } : {}),\n ...(titleObj.anchor && anchorMap[titleObj.anchor] ? { titleXAnchor: anchorMap[titleObj.anchor] } : {}),\n ...(titleObj.offset !== undefined || titleObj.subtitlePadding !== undefined\n ? {\n titlePad: {\n t: titleObj.offset,\n b: titleObj.subtitlePadding,\n },\n }\n : {}),\n };\n\n // Only include titleStyles if it has properties\n if (Object.keys(titleStyles).length === 0) {\n titleStyles = undefined;\n }\n }\n\n return {\n chartTitle,\n xAxisTitle: encoding.x?.title ?? encoding.x?.axis?.title ?? undefined,\n yAxisTitle: encoding.y?.title ?? encoding.y?.axis?.title ?? undefined,\n ...(titleStyles ? { titleStyles } : {}),\n };\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent VerticalBarChart props\n *\n * Supports bar mark with quantitative y-axis and nominal/ordinal x-axis\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns VerticalBarChartProps for rendering\n */\nexport function transformVegaLiteToVerticalBarChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): VerticalBarChartProps {\n // Initialize transformation context\n const { dataValues, encoding, markProps } = initializeTransformContext(spec);\n\n // Extract field names and aggregates\n const { xField, yField, colorField, yAggregate } = extractEncodingFields(encoding);\n\n // Check if this is an aggregate bar chart\n // Aggregate can be: count (no field needed) or sum/mean/etc (with field)\n const isAggregate = !!yAggregate;\n\n if (!xField && !isAggregate) {\n throw new Error('VegaLiteSchemaAdapter: x encoding is required for bar charts');\n }\n\n // For aggregate charts, compute aggregated data\n let aggregatedData: Array<{ category: string; value: number }> | undefined;\n if (isAggregate && xField) {\n aggregatedData = computeAggregateData(dataValues, xField, yField, yAggregate as string);\n }\n\n // Validate data and encodings (skip for aggregate charts)\n if (!isAggregate && xField && yField) {\n validateXYEncodings(dataValues, xField, yField, encoding.x?.type, encoding.y?.type, 'VerticalBarChart', encoding);\n }\n\n // Extract color configuration\n const { colorScheme, colorRange } = extractColorConfig(encoding);\n const colorValue = encoding.color?.value as string | undefined;\n\n const barData: VerticalBarChartDataPoint[] = [];\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n // When there's no color field, all bars share a single legend\n const useSingleLegendForAggregate = !colorField;\n\n if (aggregatedData) {\n // Use aggregated data\n aggregatedData.forEach(({ category, value }) => {\n const legend = useSingleLegendForAggregate ? 'Bar' : String(category);\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n\n barData.push({\n x: category,\n y: value,\n legend,\n color,\n });\n });\n } else if (xField && yField) {\n // Check if y values are numeric; if not, fall back to count aggregation\n const firstYValue = dataValues.find(r => r[yField] !== undefined)?.[yField];\n const yIsNumeric = typeof firstYValue === 'number';\n\n if (!yIsNumeric) {\n // y values are non-numeric: compute count per x category\n const counts = countByCategory(dataValues, xField, undefined, '');\n counts.forEach((legendMap, xKey) => {\n // No color grouping - each xKey gets one bar; use xKey as legend\n const totalCount = Array.from(legendMap.values()).reduce((a, b) => a + b, 0);\n const legend = xKey;\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n barData.push({ x: xKey, y: totalCount, legend, color });\n });\n } else {\n // When there's no color field encoding, use a single legend name for all bars\n // This ensures: uniform bar color, single legend entry, no tooltip duplication\n const useSingleLegend = !colorField;\n\n // Create value formatter for bar data labels\n const yFormatter = createValueFormatter(encoding.y?.axis?.format);\n\n // Use raw data (normal numeric y values)\n dataValues.forEach(row => {\n const xValue = row[xField];\n const yValue = row[yField];\n\n // Use chart-utilities validation\n if (isInvalidValue(xValue) || isInvalidValue(yValue) || typeof yValue !== 'number') {\n return;\n }\n\n const legend =\n colorField && row[colorField] !== undefined\n ? String(row[colorField])\n : useSingleLegend\n ? 'Bar'\n : String(xValue);\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n\n // For bar charts, x-axis values are treated as categories (even if numeric)\n // Convert to string to ensure consistent categorical positioning\n const xCategory = typeof xValue === 'number' ? String(xValue) : (xValue as string);\n\n barData.push({\n x: xCategory,\n y: yValue,\n legend,\n color,\n ...(yFormatter && { yAxisCalloutData: yFormatter(yValue), barLabel: yFormatter(yValue) }),\n });\n });\n }\n }\n\n const titles = getVegaLiteTitles(spec);\n\n // Extract axis category ordering\n const categoryOrderProps = extractAxisCategoryOrderProps(encoding);\n\n // Extract tick configuration\n const tickConfig = extractTickConfig(spec);\n\n // Extract y-axis formatting and scale props\n const yAxisTickFormat = encoding.y?.axis?.format;\n const { yMinValue, yMaxValue } = extractYMinMax(encoding, dataValues);\n const yAxisType = extractYAxisType(encoding);\n\n // Compute truncation based on number of unique x-axis categories\n const uniqueXCount = new Set(barData.map(d => String(d.x))).size;\n const barTruncateChars = uniqueXCount > 20 ? 6 : uniqueXCount > 10 ? 10 : DEFAULT_TRUNCATE_CHARS;\n\n const result: VerticalBarChartProps = {\n data: barData,\n chartTitle: titles.chartTitle,\n xAxisTitle: titles.xAxisTitle,\n yAxisTitle: titles.yAxisTitle,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n roundCorners: true,\n wrapXAxisLables: typeof barData[0]?.x === 'string',\n hideTickOverlap: true,\n noOfCharsToTruncate: barTruncateChars,\n xAxis: { tickLayout: 'auto' },\n ...(yAxisTickFormat && { yAxisTickFormat }),\n ...(yMinValue !== undefined && { yMinValue }),\n ...(yMaxValue !== undefined && { yMaxValue }),\n ...(yAxisType && { yScaleType: yAxisType }),\n ...categoryOrderProps,\n // Hide legend for single-series bar charts (no color encoding) to avoid showing \"Bar\" legend\n hideLegend: !colorField ? true : encoding.color?.legend?.disable ?? false,\n };\n\n if (tickConfig.tickValues) {\n result.tickValues = tickConfig.tickValues as number[] | Date[];\n }\n\n if (tickConfig.xAxisTickCount) {\n result.xAxisTickCount = tickConfig.xAxisTickCount;\n }\n\n return result;\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent VerticalStackedBarChart props\n *\n * Supports stacked bar charts with color encoding for stacking\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns VerticalStackedBarChartProps for rendering\n */\nexport function transformVegaLiteToVerticalStackedBarChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): VerticalStackedBarChartProps {\n // Initialize transformation context (skip warnings as we handle layered spec differently)\n const { unitSpecs } = initializeTransformContext(spec);\n\n // Separate bar, line, and rule specs from layered specifications\n const barSpecs = unitSpecs.filter(s => getMarkType(s.mark) === 'bar');\n\n const lineSpecs = unitSpecs.filter(s => {\n const mark = getMarkType(s.mark);\n return mark === 'line' || mark === 'point';\n });\n\n const ruleSpecs = unitSpecs.filter(s => getMarkType(s.mark) === 'rule');\n\n // Use bar specs if available, otherwise fall back to first unit spec\n const primarySpec = barSpecs.length > 0 ? barSpecs[0] : unitSpecs[0];\n const rawDataValues = extractDataValues(primarySpec.data);\n // Apply transforms from both top-level spec and primary spec\n let dataValues = applyTransforms(rawDataValues, spec.transform);\n dataValues = applyTransforms(dataValues, primarySpec.transform);\n const encoding = primarySpec.encoding || {};\n const markProps = getMarkProperties(primarySpec.mark);\n\n // Extract field names and aggregates\n const { xField, yField, colorField, yAggregate } = extractEncodingFields(encoding);\n const colorValue = encoding.color?.value; // Static color value\n\n // Support aggregate encodings (e.g., count, sum)\n const isAggregate = !!yAggregate;\n\n if (!xField) {\n throw new Error('VegaLiteSchemaAdapter: x encoding is required for stacked bar charts');\n }\n\n // For aggregate charts, compute aggregated data\n let aggregatedData: Array<{ category: string; value: number }> | undefined;\n if (isAggregate) {\n aggregatedData = computeAggregateData(dataValues, xField, yField, yAggregate as string);\n } else if (!yField) {\n throw new Error('VegaLiteSchemaAdapter: y encoding is required for stacked bar charts');\n }\n\n // Extract color configuration\n const { colorScheme, colorRange } = extractColorConfig(encoding);\n\n // Group data by x value, then by color (stack)\n const mapXToDataPoints: { [key: string]: VerticalStackedChartProps } = {};\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n if (aggregatedData) {\n // Use aggregated data\n aggregatedData.forEach(({ category, value }) => {\n const xKey = String(category);\n const legend = 'Bar';\n\n if (!mapXToDataPoints[xKey]) {\n mapXToDataPoints[xKey] = {\n xAxisPoint: category,\n chartData: [],\n lineData: [],\n };\n }\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue as string | undefined,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n\n mapXToDataPoints[xKey].chartData.push({\n legend,\n data: value,\n color,\n });\n });\n } else {\n // Check if y values are actually numeric; if not, fall back to count aggregation\n const firstYValue = dataValues.find(r => r[yField!] !== undefined)?.[yField!];\n const yIsNumeric = typeof firstYValue === 'number';\n\n if (!yIsNumeric && yField) {\n // y values are non-numeric (e.g., strings after auto-correction from quantitative to nominal)\n // Fall back to count aggregation: count rows per x category and color\n const counts = countByCategory(dataValues, xField, colorField, 'Bar');\n counts.forEach((legendMap, xKey) => {\n mapXToDataPoints[xKey] = {\n xAxisPoint: xKey,\n chartData: [],\n lineData: [],\n };\n legendMap.forEach((count, legend) => {\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue as string | undefined,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n mapXToDataPoints[xKey].chartData.push({\n legend,\n data: count,\n color,\n });\n });\n });\n } else {\n // Process bar data (normal numeric y values)\n dataValues.forEach(row => {\n const xValue = row[xField];\n const yValue = row[yField!];\n const stackValue = colorField ? row[colorField] : 'Bar'; // Default legend if no color field\n\n if (isInvalidValue(xValue) || isInvalidValue(yValue) || typeof yValue !== 'number') {\n return;\n }\n\n const xKey = String(xValue);\n const legend = stackValue !== undefined ? String(stackValue) : 'Bar';\n\n if (!mapXToDataPoints[xKey]) {\n // For bar charts, x-axis values are treated as categories (even if numeric)\n const xCategory = typeof xValue === 'number' ? String(xValue) : (xValue as string);\n mapXToDataPoints[xKey] = {\n xAxisPoint: xCategory,\n chartData: [],\n lineData: [],\n };\n }\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n // Use static color if provided, otherwise use color scheme/scale\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue as string | undefined,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n\n const stackYFormatter = createValueFormatter(encoding.y?.axis?.format);\n mapXToDataPoints[xKey].chartData.push({\n legend,\n data: yValue,\n color,\n ...(stackYFormatter && { yAxisCalloutData: stackYFormatter(yValue), barLabel: stackYFormatter(yValue) }),\n });\n });\n }\n } // end else (non-aggregate)\n\n // Process line data from additional layers (if any)\n lineSpecs.forEach((lineSpec, lineIndex) => {\n let lineDataValues = extractDataValues(lineSpec.data);\n // Apply transforms from both top-level spec and line spec\n lineDataValues = applyTransforms(lineDataValues, spec.transform);\n lineDataValues = applyTransforms(lineDataValues, lineSpec.transform);\n const lineEncoding = lineSpec.encoding || {};\n const lineMarkProps = getMarkProperties(lineSpec.mark);\n\n const lineXField = lineEncoding.x?.field;\n const lineYField = lineEncoding.y?.field;\n const lineColorField = lineEncoding.color?.field;\n\n if (!lineXField || !lineYField) {\n return; // Skip if required fields are missing\n }\n\n const lineLegendBase = lineColorField ? 'Line' : `Line ${lineIndex + 1}`;\n\n lineDataValues.forEach(row => {\n const xValue = row[lineXField];\n const yValue = row[lineYField];\n\n if (isInvalidValue(xValue) || isInvalidValue(yValue)) {\n return;\n }\n\n const xKey = String(xValue);\n const lineLegend =\n lineColorField && row[lineColorField] !== undefined ? String(row[lineColorField]) : lineLegendBase;\n\n // Ensure x-axis point exists\n if (!mapXToDataPoints[xKey]) {\n mapXToDataPoints[xKey] = {\n xAxisPoint: xValue as number | string,\n chartData: [],\n lineData: [],\n };\n }\n\n // Determine line color\n if (!colorIndex.has(lineLegend)) {\n colorIndex.set(lineLegend, currentColorIndex++);\n }\n let lineColor: string;\n if (lineMarkProps.color) {\n lineColor = lineMarkProps.color;\n } else {\n // Use lineLegend for consistent color assignment\n lineColor = resolveColor(\n lineLegend,\n colorIndex.get(lineLegend)!,\n undefined,\n undefined,\n colorMap,\n undefined,\n undefined,\n isDarkTheme,\n );\n }\n\n // Determine if this line should use secondary Y-axis\n // Check if spec has independent Y scales AND line uses different Y field than bars\n const hasIndependentYScales = spec.resolve?.scale?.y === 'independent';\n const useSecondaryYScale = hasIndependentYScales && lineYField !== yField;\n\n const lineData: LineDataInVerticalStackedBarChart = {\n y: yValue as number,\n color: lineColor,\n legend: lineLegend,\n legendShape: 'triangle',\n data: typeof yValue === 'number' ? yValue : undefined,\n useSecondaryYScale,\n };\n\n // Add line options if available\n if (lineMarkProps.strokeWidth || lineMarkProps.strokeDash) {\n lineData.lineOptions = {\n ...(lineMarkProps.strokeWidth && { strokeWidth: lineMarkProps.strokeWidth }),\n ...(lineMarkProps.strokeDash && { strokeDasharray: lineMarkProps.strokeDash.join(' ') }),\n };\n }\n\n mapXToDataPoints[xKey].lineData!.push(lineData);\n });\n });\n\n // Process rule specs as horizontal reference lines\n // Each rule with a constant y-value becomes a flat line across all x-axis points\n ruleSpecs.forEach((ruleSpec, ruleIndex) => {\n const ruleEncoding = ruleSpec.encoding || {};\n const ruleMarkProps = getMarkProperties(ruleSpec.mark);\n const yDatum = ruleEncoding.y?.datum ?? ruleEncoding.y?.value;\n\n if (yDatum !== undefined) {\n const ruleLegend = `Reference_${ruleIndex}`;\n const ruleColor = ruleMarkProps.color || '#d62728';\n\n if (!colorIndex.has(ruleLegend)) {\n colorIndex.set(ruleLegend, currentColorIndex++);\n }\n\n const lineOptions: Partial<LineChartLineOptions> = {};\n if (ruleMarkProps.strokeDash) {\n lineOptions.strokeDasharray = ruleMarkProps.strokeDash.join(' ');\n }\n if (ruleMarkProps.strokeWidth) {\n lineOptions.strokeWidth = ruleMarkProps.strokeWidth;\n }\n\n // Look for companion text annotation at the same y-value\n const textSpec = unitSpecs.find((s, i) => {\n return getMarkType(s.mark) === 'text' && s.encoding?.y && (s.encoding.y.datum ?? s.encoding.y.value) === yDatum;\n });\n const ruleText = textSpec\n ? String(textSpec.encoding?.text?.datum || textSpec.encoding?.text?.value || yDatum)\n : String(yDatum);\n\n // Add the constant y-value line to every x-axis point\n Object.keys(mapXToDataPoints).forEach(xKey => {\n mapXToDataPoints[xKey].lineData!.push({\n y: yDatum as number,\n legend: ruleText,\n color: ruleColor,\n ...(Object.keys(lineOptions).length > 0 && { lineOptions }),\n useSecondaryYScale: false,\n });\n });\n }\n });\n\n const chartData = Object.values(mapXToDataPoints);\n const titles = getVegaLiteTitles(spec);\n\n // Check if we have secondary Y-axis data\n const hasSecondaryYAxis = chartData.some(point => point.lineData?.some(line => line.useSecondaryYScale));\n\n // Extract secondary Y-axis properties from line layers\n let secondaryYAxisProps: Record<string, unknown> = {};\n if (hasSecondaryYAxis && lineSpecs.length > 0) {\n const lineSpec = lineSpecs[0];\n const lineEncoding = lineSpec.encoding || {};\n const lineYAxis = lineEncoding.y?.axis;\n\n if (lineYAxis?.title) {\n secondaryYAxisProps.secondaryYAxistitle = lineYAxis.title;\n }\n\n // Compute secondary Y scale domain from line data values\n const allLineYValues: number[] = [];\n chartData.forEach(point => {\n point.lineData?.forEach(line => {\n if (line.useSecondaryYScale && typeof line.y === 'number') {\n allLineYValues.push(line.y);\n }\n });\n });\n\n if (allLineYValues.length > 0) {\n // Use explicit domain from line encoding if available, otherwise compute from data\n const lineDomain = lineEncoding.y?.scale?.domain;\n const secYMin = Array.isArray(lineDomain) ? (lineDomain[0] as number) : d3Min(allLineYValues) ?? 0;\n const secYMax = Array.isArray(lineDomain) ? (lineDomain[1] as number) : d3Max(allLineYValues) ?? 0;\n secondaryYAxisProps.secondaryYScaleOptions = {\n yMinValue: secYMin,\n yMaxValue: secYMax,\n };\n }\n }\n\n // Check for log scale on primary Y-axis\n const yAxisType = extractYAxisType(encoding);\n\n // Extract y-axis formatting and domain props\n const yAxisTickFormat = encoding.y?.axis?.format;\n const { yMinValue, yMaxValue } = extractYMinMax(encoding, dataValues);\n\n // Extract axis category ordering\n const categoryOrderProps = extractAxisCategoryOrderProps(encoding);\n\n return {\n data: chartData,\n chartTitle: titles.chartTitle,\n xAxisTitle: titles.xAxisTitle,\n yAxisTitle: titles.yAxisTitle,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n width: spec.width as number | undefined,\n height: (spec.height as number | undefined) ?? DEFAULT_CHART_HEIGHT,\n hideLegend: encoding.color?.legend?.disable ?? false,\n showYAxisLables: true,\n roundCorners: true,\n hideTickOverlap: true,\n barGapMax: 2,\n noOfCharsToTruncate: DEFAULT_TRUNCATE_CHARS,\n showYAxisLablesTooltip: true,\n wrapXAxisLables: typeof chartData[0]?.xAxisPoint === 'string',\n xAxis: { tickLayout: 'auto' },\n ...(yAxisTickFormat && { yAxisTickFormat }),\n ...(yMinValue !== undefined && { yMinValue }),\n ...(yMaxValue !== undefined && { yMaxValue }),\n ...(yAxisType && { yScaleType: yAxisType }),\n ...secondaryYAxisProps,\n ...categoryOrderProps,\n };\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent GroupedVerticalBarChart props\n *\n * Supports grouped bar charts with color encoding for grouping\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns GroupedVerticalBarChartProps for rendering\n */\nexport function transformVegaLiteToGroupedVerticalBarChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): GroupedVerticalBarChartProps {\n // Initialize transformation context\n const { dataValues, encoding } = initializeTransformContext(spec);\n\n // Extract field names\n const { xField, yField, colorField } = extractEncodingFields(encoding);\n\n if (!xField || !yField || !colorField) {\n throw new Error('VegaLiteSchemaAdapter: x, y, and color encodings are required for grouped bar charts');\n }\n\n // Extract color configuration\n const { colorScheme, colorRange } = extractColorConfig(encoding);\n\n // Group data by x value (name), then by color (series)\n const groupedData: { [key: string]: { [legend: string]: number } } = {};\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n dataValues.forEach(row => {\n const xValue = row[xField];\n const yValue = row[yField];\n const groupValue = row[colorField];\n\n if (isInvalidValue(xValue) || isInvalidValue(yValue) || typeof yValue !== 'number' || isInvalidValue(groupValue)) {\n return;\n }\n\n const xKey = String(xValue);\n const legend = String(groupValue);\n\n if (!groupedData[xKey]) {\n groupedData[xKey] = {};\n }\n\n groupedData[xKey][legend] = yValue;\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n });\n\n // Convert to GroupedVerticalBarChartData format\n const chartData = Object.keys(groupedData).map(name => {\n const series = Object.keys(groupedData[name]).map(legend => ({\n key: legend,\n data: groupedData[name][legend],\n legend,\n color: resolveColor(\n legend,\n colorIndex.get(legend)!,\n undefined,\n undefined,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n ),\n }));\n\n return {\n name,\n series,\n };\n });\n\n const titles = getVegaLiteTitles(spec);\n\n // Extract y-axis formatting and scale props\n const yAxisTickFormat = encoding.y?.axis?.format;\n const { yMinValue, yMaxValue } = extractYMinMax(encoding, dataValues);\n const yAxisType = extractYAxisType(encoding);\n\n return {\n data: chartData,\n chartTitle: titles.chartTitle,\n xAxisTitle: titles.xAxisTitle,\n yAxisTitle: titles.yAxisTitle,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n ...(yAxisTickFormat && { yAxisTickFormat }),\n ...(yMinValue !== undefined && { yMinValue }),\n ...(yMaxValue !== undefined && { yMaxValue }),\n ...(yAxisType && { yScaleType: yAxisType }),\n };\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent HorizontalBarChartWithAxis props\n *\n * Supports horizontal bar charts with quantitative x-axis and nominal/ordinal y-axis\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns HorizontalBarChartWithAxisProps for rendering\n */\nexport function transformVegaLiteToHorizontalBarChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): HorizontalBarChartWithAxisProps {\n // Initialize transformation context\n const { dataValues, encoding, markProps } = initializeTransformContext(spec);\n\n // Extract field names and aggregates\n const { xField, yField, colorField, xAggregate, x2Field } = extractEncodingFields(encoding);\n\n // Check if this is an aggregate bar chart\n // Aggregate can be: count (no field needed) or sum/mean/etc (with field)\n const isAggregate = !!xAggregate;\n\n if (!yField && !isAggregate) {\n throw new Error('VegaLiteSchemaAdapter: y encoding is required for horizontal bar charts');\n }\n\n // For aggregate charts, compute aggregated data\n let aggregatedData: Array<{ category: string; value: number }> | undefined;\n if (isAggregate && yField) {\n aggregatedData = computeAggregateData(dataValues, yField, xField, xAggregate as string);\n }\n\n const colorValue = encoding.color?.value as string | undefined;\n const barData: HorizontalBarChartWithAxisDataPoint[] = [];\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n if (aggregatedData) {\n // Use aggregated data\n aggregatedData.forEach(({ category, value }) => {\n const legend = String(category);\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue,\n markProps.color,\n colorMap,\n undefined,\n undefined,\n isDarkTheme,\n );\n\n barData.push({\n x: value,\n y: category,\n legend,\n color,\n });\n });\n } else if (x2Field && xField && yField) {\n // Gantt chart: bar mark with x/x2 temporal range encoding\n const isXTemporal = encoding.x?.type === 'temporal';\n dataValues.forEach(row => {\n const startVal = row[xField];\n const endVal = row[x2Field];\n const yValue = row[yField];\n if (startVal === undefined || endVal === undefined || yValue === undefined) {\n return;\n }\n\n let xNumeric: number;\n if (isXTemporal) {\n const startDate = new Date(startVal as string | number);\n const endDate = new Date(endVal as string | number);\n if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {\n return;\n }\n xNumeric = Math.round((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));\n } else {\n xNumeric = Number(endVal) - Number(startVal);\n if (isNaN(xNumeric)) {\n return;\n }\n }\n\n const legend = colorField && row[colorField] !== undefined ? String(row[colorField]) : String(yValue);\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue,\n markProps.color,\n colorMap,\n undefined,\n undefined,\n isDarkTheme,\n );\n barData.push({ x: xNumeric, y: yValue as number | string, legend, color });\n });\n } else if (xField && yField) {\n // Use raw data\n dataValues.forEach(row => {\n const xValue = row[xField];\n const yValue = row[yField];\n\n if (isInvalidValue(xValue) || isInvalidValue(yValue) || typeof xValue !== 'number') {\n return;\n }\n\n // When no color field, use single legend to avoid tooltip duplication with y-axis labels\n const legend =\n colorField && row[colorField] !== undefined ? String(row[colorField]) : !colorField ? 'Bar' : String(yValue);\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n const color = resolveColor(\n legend,\n colorIndex.get(legend)!,\n colorValue,\n markProps.color,\n colorMap,\n undefined,\n undefined,\n isDarkTheme,\n );\n\n barData.push({\n x: xValue,\n y: yValue as number | string,\n legend,\n color,\n });\n });\n }\n\n const titles = getVegaLiteTitles(spec);\n const annotations = extractAnnotations(spec);\n const tickConfig = extractTickConfig(spec);\n\n const result: HorizontalBarChartWithAxisProps = {\n data: barData,\n chartTitle: titles.chartTitle,\n xAxisTitle: titles.xAxisTitle,\n yAxisTitle: titles.yAxisTitle,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n // Hide legend for single-series horizontal bars (no color encoding)\n hideLegend: !colorField ? true : encoding.color?.legend?.disable ?? false,\n };\n\n if (annotations.length > 0) {\n result.annotations = annotations;\n }\n\n if (tickConfig.tickValues) {\n result.tickValues = tickConfig.tickValues as number[] | string[] | Date[];\n }\n\n if (tickConfig.xAxisTickCount) {\n result.xAxisTickCount = tickConfig.xAxisTickCount;\n }\n\n if (tickConfig.yAxisTickCount) {\n result.yAxisTickCount = tickConfig.yAxisTickCount;\n }\n\n return result;\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent AreaChart props\n *\n * Area charts use the same data structure as line charts but with filled areas.\n * Supports temporal/quantitative x-axis and quantitative y-axis with color-encoded series\n *\n * Vega-Lite Stacking Behavior:\n * - If y.stack is null or undefined with no color encoding: mode = 'tozeroy' (fill to zero baseline)\n * - If y.stack is 'zero' or color encoding exists: mode = 'tonexty' (stacked areas)\n * - Multiple series with color encoding automatically stack\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns AreaChartProps for rendering\n */\nexport function transformVegaLiteToAreaChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): AreaChartProps {\n // Area charts use the same structure as line charts in Fluent Charts\n // The only difference is the component renders with filled areas\n const lineChartProps = transformVegaLiteToLineChartProps(spec, colorMap, isDarkTheme);\n\n // Determine stacking mode based on Vega-Lite spec\n const unitSpecs = normalizeSpec(spec);\n // Use findPrimaryLineSpec to skip auxiliary layers (like rect for color fill bars)\n const primarySpec = findPrimaryLineSpec(unitSpecs);\n const encoding = primarySpec?.encoding || {};\n\n // Check if stacking is enabled\n // In Vega-Lite, area charts stack by default when color encoding is present\n // stack can be explicitly set to null to disable stacking\n const hasColorEncoding = !!encoding.color?.field;\n const stackConfig = encoding.y?.stack;\n const isStacked = stackConfig !== null && (stackConfig === 'zero' || hasColorEncoding);\n\n // Set mode: 'tozeroy' for single series, 'tonexty' for stacked\n const mode: 'tozeroy' | 'tonexty' = isStacked ? 'tonexty' : 'tozeroy';\n\n return {\n ...lineChartProps,\n mode,\n // Cast needed: AreaChartProps and LineChartProps share the same base but have\n // incompatible style types. The spread is safe because styles are not set here.\n } as AreaChartProps;\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent ScatterChart props\n *\n * Supports scatter plots with quantitative x and y axes and color-encoded series\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns ScatterChartProps for rendering\n */\nexport function transformVegaLiteToScatterChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): ScatterChartProps {\n // Initialize transformation context\n const { dataValues, encoding, markProps } = initializeTransformContext(spec);\n\n // Extract field names\n const { xField, yField, colorField, sizeField } = extractEncodingFields(encoding);\n\n if (!xField || !yField) {\n throw new Error('VegaLiteSchemaAdapter: Both x and y encodings are required for scatter charts');\n }\n\n const isXTemporal = encoding.x?.type === 'temporal';\n const isYTemporal = encoding.y?.type === 'temporal';\n\n // Check if y-values are strings (nominal/ordinal) and build ordinal mapping\n const yIsNominal = encoding.y?.type === 'nominal' || encoding.y?.type === 'ordinal';\n const yOrdinalMap = new Map<string, number>();\n const yOrdinalLabels: string[] = [];\n\n if (yIsNominal) {\n // Collect unique y-values in order\n dataValues.forEach(row => {\n const yVal = row[yField];\n if (yVal !== undefined) {\n const key = String(yVal);\n if (!yOrdinalMap.has(key)) {\n yOrdinalMap.set(key, yOrdinalMap.size);\n yOrdinalLabels.push(key);\n }\n }\n });\n }\n\n // Group data by series (color encoding)\n const groupedData: Record<string, Array<Record<string, unknown>>> = {};\n\n dataValues.forEach(row => {\n const seriesName = colorField && row[colorField] !== undefined ? String(row[colorField]) : 'default';\n\n if (!groupedData[seriesName]) {\n groupedData[seriesName] = [];\n }\n\n groupedData[seriesName].push(row);\n });\n\n const seriesNames = Object.keys(groupedData);\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n const chartData: LineChartPoints[] = seriesNames.map((seriesName, index) => {\n if (!colorIndex.has(seriesName)) {\n colorIndex.set(seriesName, currentColorIndex++);\n }\n const seriesData = groupedData[seriesName];\n\n const points: ScatterChartDataPoint[] = seriesData.map(row => {\n const xValue = parseValue(row[xField], isXTemporal);\n const yValue = parseValue(row[yField], isYTemporal);\n const markerSize = sizeField && row[sizeField] !== undefined ? Number(row[sizeField]) : undefined;\n\n // Map nominal y-values to numeric indices\n let numericY: number;\n if (yIsNominal && typeof yValue === 'string') {\n numericY = yOrdinalMap.get(yValue) ?? 0;\n } else {\n numericY = typeof yValue === 'number' ? yValue : 0;\n }\n\n return {\n x: typeof xValue === 'number' || xValue instanceof Date ? xValue : String(xValue),\n y: numericY,\n ...(markerSize !== undefined && { markerSize }),\n };\n });\n\n // Get color for this series\n const colorValue =\n colorField && encoding.color?.scale?.range && Array.isArray(encoding.color.scale.range)\n ? encoding.color.scale.range[index]\n : markProps.color;\n const color =\n typeof colorValue === 'string'\n ? colorValue\n : resolveColor(\n seriesName,\n colorIndex.get(seriesName)!,\n undefined,\n undefined,\n colorMap,\n undefined,\n undefined,\n isDarkTheme,\n );\n\n return {\n legend: seriesName,\n data: points,\n color,\n legendShape: 'circle' as const,\n };\n });\n\n const titles = getVegaLiteTitles(spec);\n const annotations = extractAnnotations(spec);\n const tickConfig = extractTickConfig(spec);\n\n // Check for log scale on Y-axis\n const yAxisType = extractYAxisType(encoding);\n\n // Extract y-axis formatting and domain props\n const yAxisTickFormat = encoding.y?.axis?.format;\n const { yMinValue, yMaxValue } = extractYMinMax(encoding, dataValues);\n\n // Extract axis category ordering\n const categoryOrderProps = extractAxisCategoryOrderProps(encoding);\n\n const result: ScatterChartProps = {\n data: {\n chartTitle: titles.chartTitle,\n scatterChartData: chartData,\n },\n xAxisTitle: titles.xAxisTitle,\n yAxisTitle: titles.yAxisTitle,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n ...(yAxisTickFormat && { yAxisTickFormat }),\n ...(yMinValue !== undefined && { yMinValue }),\n ...(yMaxValue !== undefined && { yMaxValue }),\n ...(yAxisType && { yScaleType: yAxisType }),\n // For nominal y-axis, provide tick values and labels\n ...(yIsNominal &&\n yOrdinalLabels.length > 0 && {\n yAxisTickValues: Array.from({ length: yOrdinalLabels.length }, (_, i) => i),\n yAxisTickFormat: (val: number) => yOrdinalLabels[val] ?? String(val),\n yMinValue: -0.5,\n yMaxValue: yOrdinalLabels.length - 0.5,\n }),\n ...categoryOrderProps,\n hideLegend: encoding.color?.legend?.disable ?? false,\n };\n\n if (annotations.length > 0) {\n result.annotations = annotations;\n }\n\n if (tickConfig.tickValues) {\n result.tickValues = tickConfig.tickValues as number[] | string[] | Date[];\n }\n\n if (tickConfig.xAxisTickCount) {\n result.xAxisTickCount = tickConfig.xAxisTickCount;\n }\n\n if (tickConfig.yAxisTickCount) {\n result.yAxisTickCount = tickConfig.yAxisTickCount;\n }\n\n return result;\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent DonutChart props\n *\n * Supports pie/donut charts with arc marks and theta encoding\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns DonutChartProps for rendering\n */\nexport function transformVegaLiteToDonutChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): DonutChartProps {\n // Initialize transformation context\n const { dataValues, encoding, primarySpec } = initializeTransformContext(spec);\n\n // Extract field names\n const { thetaField, colorField } = extractEncodingFields(encoding);\n\n if (!thetaField) {\n throw new Error('VegaLiteSchemaAdapter: Theta encoding is required for donut charts');\n }\n\n // Extract color configuration\n const { colorScheme, colorRange } = extractColorConfig(encoding);\n\n // Extract innerRadius from mark properties if available\n const mark = primarySpec.mark;\n const innerRadius = typeof mark === 'object' && mark?.innerRadius !== undefined ? mark.innerRadius : 0;\n\n const chartData: ChartDataPoint[] = [];\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n dataValues.forEach(row => {\n const value = row[thetaField];\n const legend = colorField && row[colorField] !== undefined ? String(row[colorField]) : String(value);\n\n if (value === undefined || typeof value !== 'number') {\n return;\n }\n\n if (!colorIndex.has(legend)) {\n colorIndex.set(legend, currentColorIndex++);\n }\n\n chartData.push({\n legend,\n data: value,\n color: resolveColor(\n legend,\n colorIndex.get(legend)!,\n undefined,\n undefined,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n ),\n });\n });\n\n const titles = getVegaLiteTitles(spec);\n\n return {\n data: {\n chartTitle: titles.chartTitle,\n chartData,\n },\n innerRadius,\n width: typeof spec.width === 'number' ? spec.width : undefined,\n height: typeof spec.height === 'number' ? spec.height : undefined,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n };\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent HeatMapChart props\n *\n * Supports heatmaps with rect marks and x/y/color encodings\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns HeatMapChartProps for rendering\n */\nexport function transformVegaLiteToHeatMapChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): HeatMapChartProps {\n // Initialize transformation context\n const { dataValues, encoding } = initializeTransformContext(spec);\n\n // Extract field names\n const { xField, yField, colorField } = extractEncodingFields(encoding);\n\n if (!xField || !yField || !colorField) {\n throw new Error('VegaLiteSchemaAdapter: x, y, and color encodings are required for heatmap charts');\n }\n\n const heatmapDataPoints: HeatMapChartDataPoint[] = [];\n let minValue = Number.POSITIVE_INFINITY;\n let maxValue = Number.NEGATIVE_INFINITY;\n\n // Check if color values are nominal (strings) rather than quantitative (numbers)\n const isNominalColor =\n encoding.color?.type === 'nominal' ||\n encoding.color?.type === 'ordinal' ||\n dataValues.some(row => row[colorField] !== undefined && typeof row[colorField] !== 'number');\n const nominalColorMap = new Map<string, number>();\n\n dataValues.forEach(row => {\n const xValue = row[xField];\n const yValue = row[yField];\n const colorValue = row[colorField];\n\n if (isInvalidValue(xValue) || isInvalidValue(yValue) || isInvalidValue(colorValue)) {\n return;\n }\n\n let value: number;\n if (isNominalColor) {\n // Map nominal color values to sequential numeric indices\n const key = String(colorValue);\n if (!nominalColorMap.has(key)) {\n nominalColorMap.set(key, nominalColorMap.size);\n }\n value = nominalColorMap.get(key)!;\n } else {\n value = typeof colorValue === 'number' ? colorValue : 0;\n }\n\n minValue = Math.min(minValue, value);\n maxValue = Math.max(maxValue, value);\n\n heatmapDataPoints.push({\n x: xValue as string | Date | number,\n y: yValue as string | Date | number,\n value,\n rectText: isNominalColor ? String(colorValue) : value,\n });\n });\n\n // Validate that we have complete grid data\n if (heatmapDataPoints.length === 0) {\n throw new Error('VegaLiteSchemaAdapter: Heatmap requires data points with x, y, and color values');\n }\n\n // Extract unique x and y values and create complete grid\n const uniqueXValues = new Set(heatmapDataPoints.map(p => String(p.x)));\n const uniqueYValues = new Set(heatmapDataPoints.map(p => String(p.y)));\n\n // Build a map of existing data points for quick lookup\n const dataPointMap = new Map<string, number>();\n const rectTextMap = new Map<string, number | string>();\n heatmapDataPoints.forEach(point => {\n const key = `${String(point.x)}|${String(point.y)}`;\n dataPointMap.set(key, point.value);\n rectTextMap.set(key, point.rectText ?? point.value);\n });\n\n // Generate complete grid - fill missing cells with 0\n const completeGridDataPoints: HeatMapChartDataPoint[] = [];\n let xValuesArray = Array.from(uniqueXValues);\n const yValuesArray = Array.from(uniqueYValues);\n\n // Sort x-values chronologically if they appear to be dates\n const isXTemporal = encoding.x?.type === 'temporal' || encoding.x?.type === 'ordinal';\n if (isXTemporal) {\n const firstX = xValuesArray[0];\n const parsedDate = new Date(firstX);\n if (!isNaN(parsedDate.getTime())) {\n // Values are parseable as dates — sort chronologically\n xValuesArray = xValuesArray.sort((a, b) => new Date(a).getTime() - new Date(b).getTime());\n }\n }\n\n yValuesArray.forEach(yVal => {\n xValuesArray.forEach(xVal => {\n const key = `${xVal}|${yVal}`;\n const value = dataPointMap.get(key) ?? 0; // Use 0 for missing cells\n\n // Update min/max to include filled values\n if (value !== 0 || dataPointMap.has(key)) {\n minValue = Math.min(minValue, value);\n maxValue = Math.max(maxValue, value);\n }\n\n completeGridDataPoints.push({\n x: xVal,\n y: yVal,\n value,\n rectText: rectTextMap.get(key) ?? value,\n });\n });\n });\n\n const heatmapData: HeatMapChartData = {\n legend: '',\n data: completeGridDataPoints,\n value: 0,\n };\n\n const titles = getVegaLiteTitles(spec);\n\n // Create color scale domain and range\n let domainValues: number[] = [];\n let rangeValues: string[] = [];\n\n // Check for named color scheme or custom range from encoding\n const colorScheme = encoding.color?.scale?.scheme as string | undefined;\n const customRange = encoding.color?.scale?.range as string[] | undefined;\n\n if (isNominalColor && nominalColorMap.size > 0) {\n // For nominal colors, use categorical color scale\n const numCategories = nominalColorMap.size;\n domainValues = Array.from({ length: numCategories }, (_, i) => i);\n\n if (customRange && customRange.length >= numCategories) {\n rangeValues = customRange.slice(0, numCategories);\n } else {\n // Use distinct categorical colors for each category\n for (let i = 0; i < numCategories; i++) {\n rangeValues.push(getVegaColor(i, colorScheme, customRange, isDarkTheme ?? false));\n }\n }\n } else {\n // Quantitative color scale\n const steps = 5;\n for (let i = 0; i < steps; i++) {\n const t = i / (steps - 1);\n domainValues.push(minValue + (maxValue - minValue) * t);\n }\n\n if (customRange && customRange.length > 0) {\n rangeValues = customRange.length >= steps ? customRange.slice(0, steps) : customRange;\n } else if (colorScheme) {\n const schemeColors = getSequentialSchemeColors(colorScheme, steps);\n if (schemeColors) {\n const isReversed =\n (encoding.color as Record<string, unknown>)?.sort === 'descending' || encoding.color?.scale?.reverse === true;\n rangeValues = isReversed ? schemeColors.reverse() : schemeColors;\n }\n }\n\n // Fall back to default blue-to-red gradient if no scheme matched\n if (rangeValues.length === 0) {\n for (let i = 0; i < steps; i++) {\n const t = i / (steps - 1);\n if (isDarkTheme) {\n const r = Math.round(0 + 255 * t);\n const g = Math.round(100 + (165 - 100) * t);\n const b = Math.round(255 - 255 * t);\n rangeValues.push(`rgb(${r}, ${g}, ${b})`);\n } else {\n const r = Math.round(0 + 255 * t);\n const g = Math.round(150 - 150 * t);\n const b = Math.round(255 - 255 * t);\n rangeValues.push(`rgb(${r}, ${g}, ${b})`);\n }\n }\n }\n }\n\n return {\n chartTitle: titles.chartTitle,\n data: [heatmapData],\n domainValuesForColorScale: domainValues,\n rangeValuesForColorScale: rangeValues,\n xAxisTitle: titles.xAxisTitle,\n yAxisTitle: titles.yAxisTitle,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n width: spec.width as number | undefined,\n height: (spec.height as number | undefined) ?? DEFAULT_CHART_HEIGHT,\n hideLegend: true,\n showYAxisLables: true,\n sortOrder: 'none',\n hideTickOverlap: true,\n noOfCharsToTruncate: xValuesArray.length > 20 ? 6 : xValuesArray.length > 10 ? 10 : DEFAULT_TRUNCATE_CHARS,\n showYAxisLablesTooltip: true,\n wrapXAxisLables: true,\n };\n}\n\n/**\n * Helper function to get bin center for display\n */\nfunction getBinCenter(bin: Bin<number, number>): number {\n return (bin.x0! + bin.x1!) / 2;\n}\n\n/**\n * Helper function to calculate histogram aggregation function\n *\n * @param aggregate - Aggregation type (count, sum, mean, min, max)\n * @param bin - Binned data values\n * @returns Aggregated value\n */\nfunction calculateHistogramAggregate(\n aggregate: 'count' | 'sum' | 'mean' | 'average' | 'median' | 'min' | 'max' | undefined,\n bin: number[],\n): number {\n switch (aggregate) {\n case 'sum':\n return d3Sum(bin);\n case 'mean':\n case 'average':\n return bin.length === 0 ? 0 : d3Mean(bin) ?? 0;\n case 'min':\n return d3Min(bin) ?? 0;\n case 'max':\n return d3Max(bin) ?? 0;\n case 'count':\n default:\n return bin.length;\n }\n}\n\n/**\n * Transforms Vega-Lite specification to Fluent VerticalBarChart props for histogram rendering\n *\n * Supports histograms with binned x-axis and aggregated y-axis\n * Vega-Lite syntax: `{ \"mark\": \"bar\", \"encoding\": { \"x\": { \"field\": \"value\", \"bin\": true }, \"y\": { \"aggregate\": \"count\" } } }`\n *\n * @param spec - Vega-Lite specification\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns VerticalBarChartProps for rendering histogram\n */\nexport function transformVegaLiteToHistogramProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): VerticalBarChartProps {\n // Initialize transformation context\n const { dataValues, encoding } = initializeTransformContext(spec);\n\n // Extract field names\n const { xField } = extractEncodingFields(encoding);\n const yAggregate = encoding.y?.aggregate || 'count';\n const binConfig = encoding.x?.bin;\n\n if (!xField || !binConfig) {\n throw new Error('VegaLiteSchemaAdapter: Histogram requires x encoding with bin property');\n }\n\n // Validate data\n validateDataArray(dataValues, xField, 'Histogram');\n validateNoNestedArrays(dataValues, xField);\n\n // Extract numeric values from the field\n const allValues = dataValues.map(row => row[xField]).filter(val => !isInvalidValue(val));\n const values = allValues.filter(val => typeof val === 'number') as number[];\n\n if (values.length === 0) {\n // Provide helpful error message based on actual data type\n const sampleValue = allValues[0];\n const actualType = typeof sampleValue;\n let suggestion = '';\n\n if (actualType === 'string') {\n // Check if strings contain numbers\n const hasEmbeddedNumbers = allValues.some(val => typeof val === 'string' && /\\d/.test(val));\n if (hasEmbeddedNumbers) {\n suggestion =\n ' The data contains strings with embedded numbers (e.g., \"40 salads\"). ' +\n 'Consider extracting the numeric values first, or change the encoding type to \"nominal\" or \"ordinal\" for a categorical bar chart.';\n } else {\n suggestion =\n ` The data contains categorical strings (e.g., \"${sampleValue}\"). ` +\n 'Change the x encoding type to \"nominal\" or \"ordinal\" for a categorical bar chart, ' +\n 'or remove bin: true to create a simple bar chart.';\n }\n } else if (actualType === 'undefined') {\n suggestion = ' The field may not exist in the data.';\n }\n\n throw new Error(\n `VegaLiteSchemaAdapter: No numeric values found for histogram binning on field \"${xField}\". ` +\n `Found ${actualType} values instead.${suggestion}`,\n );\n }\n\n // Create bins using d3\n const [minVal, maxVal] = d3Extent(values) as [number, number];\n const binGenerator = d3Bin().domain([minVal, maxVal]);\n\n // Apply bin configuration\n if (typeof binConfig === 'object') {\n if (binConfig.maxbins) {\n binGenerator.thresholds(binConfig.maxbins);\n }\n if (binConfig.extent) {\n binGenerator.domain(binConfig.extent);\n }\n }\n\n const bins = binGenerator(values);\n\n // Calculate histogram data points\n const legend = encoding.color?.field ? String(dataValues[0]?.[encoding.color.field]) : 'Frequency';\n const color = resolveColor(legend, 0, undefined, undefined, colorMap, undefined, undefined, isDarkTheme);\n const yField = encoding.y?.field;\n\n const histogramData: VerticalBarChartDataPoint[] = bins.map(bin => {\n const x = getBinCenter(bin);\n let y: number;\n\n if (yAggregate !== 'count' && yField) {\n // For non-count aggregates, collect y-field values for rows whose x-value falls in this bin\n const yValues = dataValues\n .filter(row => {\n const xVal = Number(row[xField]);\n return !isNaN(xVal) && xVal >= bin.x0! && xVal < bin.x1!;\n })\n .map(row => Number(row[yField]))\n .filter(v => !isNaN(v));\n // Include the last bin's upper bound (x1 is inclusive for the last bin)\n if (bin === bins[bins.length - 1]) {\n const extraRows = dataValues\n .filter(row => Number(row[xField]) === bin.x1!)\n .map(row => Number(row[yField]))\n .filter(v => !isNaN(v));\n yValues.push(...extraRows);\n }\n y = calculateHistogramAggregate(yAggregate, yValues);\n } else {\n y = calculateHistogramAggregate(yAggregate, bin);\n }\n\n const xAxisCalloutData = `[${bin.x0} - ${bin.x1})`;\n\n return {\n x,\n y,\n legend,\n color,\n xAxisCalloutData,\n };\n });\n\n const titles = getVegaLiteTitles(spec);\n const annotations = extractAnnotations(spec);\n const yAxisTickFormat = encoding.y?.axis?.format;\n\n return {\n data: histogramData,\n chartTitle: titles.chartTitle,\n xAxisTitle: titles.xAxisTitle || xField,\n yAxisTitle: titles.yAxisTitle || yAggregate,\n ...(titles.titleStyles ? titles.titleStyles : {}),\n roundCorners: true,\n hideTickOverlap: true,\n maxBarWidth: DEFAULT_MAX_BAR_WIDTH,\n ...(annotations.length > 0 && { annotations }),\n ...(yAxisTickFormat && { yAxisTickFormat }),\n mode: 'histogram',\n };\n}\n\n/**\n * Transforms Vega-Lite specification with theta/radius encodings to Fluent PolarChart props\n * Supports line, point, and area marks with polar coordinates\n *\n * @param spec - Vega-Lite specification with theta and radius encodings\n * @param colorMap - Color mapping ref for consistent coloring\n * @param isDarkTheme - Whether dark theme is active\n * @returns PolarChartProps for rendering with Fluent PolarChart component\n */\nexport function transformVegaLiteToPolarChartProps(\n spec: VegaLiteSpec,\n colorMap: ColorMapRef,\n isDarkTheme?: boolean,\n): PolarChartProps {\n // Initialize transformation context\n const { dataValues, encoding, markProps, primarySpec } = initializeTransformContext(spec);\n\n // Extract field names\n const { thetaField, radiusField, colorField } = extractEncodingFields(encoding);\n\n // Validate polar encodings\n if (!thetaField || !radiusField) {\n throw new Error('VegaLiteSchemaAdapter: Both theta and radius encodings are required for polar charts');\n }\n\n validateDataArray(dataValues, thetaField, 'PolarChart');\n validateDataArray(dataValues, radiusField, 'PolarChart');\n\n // Determine mark type for polar chart series type\n const mark = primarySpec.mark;\n const markType = typeof mark === 'string' ? mark : mark?.type;\n // Arc marks with theta+radius should be treated as area polar (radial/rose charts)\n const isAreaMark = markType === 'area' || (markType as string) === 'arc';\n const isLineMark = markType === 'line';\n\n // Extract color configuration\n const { colorScheme, colorRange } = extractColorConfig(encoding);\n\n // Group data by series (color field)\n const seriesMap = new Map<string, PolarDataPoint[]>();\n const colorIndex = new Map<string, number>();\n let currentColorIndex = 0;\n\n dataValues.forEach(row => {\n const thetaValue = row[thetaField];\n const radiusValue = row[radiusField];\n\n // Skip invalid values\n if (isInvalidValue(thetaValue) || isInvalidValue(radiusValue)) {\n return;\n }\n\n const seriesName = colorField && row[colorField] !== undefined ? String(row[colorField]) : 'default';\n\n if (!colorIndex.has(seriesName)) {\n colorIndex.set(seriesName, currentColorIndex++);\n }\n\n if (!seriesMap.has(seriesName)) {\n seriesMap.set(seriesName, []);\n }\n\n // Convert theta value - handle different types\n let theta: string | number;\n if (typeof thetaValue === 'number') {\n // Numeric theta - assume degrees\n theta = thetaValue;\n } else {\n // Categorical theta\n theta = String(thetaValue);\n }\n\n // Convert radius value\n const r = typeof radiusValue === 'number' ? radiusValue : Number(radiusValue);\n\n seriesMap.get(seriesName)!.push({\n theta,\n r,\n });\n });\n\n // Convert series map to polar chart data array\n const polarData: (AreaPolarSeries | LinePolarSeries | ScatterPolarSeries)[] = [];\n\n seriesMap.forEach((dataPoints, seriesName) => {\n const color = resolveColor(\n seriesName,\n colorIndex.get(seriesName)!,\n undefined,\n markProps.color,\n colorMap,\n colorScheme,\n colorRange,\n isDarkTheme,\n );\n const curveOption = mapInterpolateToCurve(markProps.interpolate);\n\n // Build line options with curve, strokeDash, and strokeWidth\n const lineOptions: Partial<LineChartLineOptions> = {};\n if (curveOption) {\n lineOptions.curve = curveOption;\n }\n if (markProps.strokeDash) {\n lineOptions.strokeDasharray = markProps.strokeDash.join(' ');\n }\n if (markProps.strokeWidth) {\n lineOptions.strokeWidth = markProps.strokeWidth;\n }\n\n if (isAreaMark) {\n const series: AreaPolarSeries = {\n type: 'areapolar',\n legend: seriesName,\n color,\n data: dataPoints,\n ...(Object.keys(lineOptions).length > 0 && { lineOptions }),\n };\n polarData.push(series);\n } else if (isLineMark) {\n const series: LinePolarSeries = {\n type: 'linepolar',\n legend: seriesName,\n color,\n data: dataPoints,\n ...(Object.keys(lineOptions).length > 0 && { lineOptions }),\n };\n polarData.push(series);\n } else {\n // Default to scatter polar for point marks\n const series: ScatterPolarSeries = {\n type: 'scatterpolar',\n legend: seriesName,\n color,\n data: dataPoints,\n };\n polarData.push(series);\n }\n });\n\n // Extract chart titles\n const titles = getVegaLiteTitles(spec);\n\n // Build axis props from encoding\n const radialAxis: PolarAxisProps = {};\n const angularAxis: PolarAxisProps & { unit?: 'radians' | 'degrees' } = {};\n\n // Determine angular axis category order if theta is categorical\n const thetaType = encoding.theta?.type;\n if (thetaType === 'nominal' || thetaType === 'ordinal') {\n // Get unique theta values in order for category order\n const thetaValues = Array.from(new Set(dataValues.map(row => String(row[thetaField]))));\n angularAxis.categoryOrder = thetaValues as unknown as AxisCategoryOrder;\n }\n\n return {\n data: polarData,\n ...(titles.chartTitle && { chartTitle: titles.chartTitle }),\n ...(titles.titleStyles ? titles.titleStyles : {}),\n width: typeof spec.width === 'number' ? spec.width : undefined,\n height: typeof spec.height === 'number' ? spec.height : 400,\n hideLegend: encoding.color?.legend?.disable ?? false,\n radialAxis,\n angularAxis,\n };\n}\n"],"names":["getVegaColorFromMap","getVegaColor","getSequentialSchemeColors","safeEvaluateExpression","bin","d3Bin","extent","d3Extent","sum","d3Sum","min","d3Min","max","d3Max","mean","d3Mean","format","d3Format","isInvalidValue","DEFAULT_CHART_HEIGHT","DEFAULT_MAX_BAR_WIDTH","DEFAULT_TRUNCATE_CHARS","isLayerSpec","spec","Array","isArray","layer","length","isUnitSpec","mark","undefined","encoding","getMarkType","type","resolveColor","legend","index","colorValue","markColor","colorMap","colorScheme","colorRange","isDarkTheme","current","has","get","color","set","extractDataValues","data","values","url","name","applyFoldTransform","foldFields","asFields","keyField","valueField","result","row","baseRow","key","value","Object","entries","includes","field","push","applyTransforms","transforms","transform","fold","as","filterExpr","filter","expr","calculate","asField","map","aggregate","aggSpecs","groupby","groups","Map","forEach","g","String","join","from","rows","i","r","Number","v","isNaN","op","window","windowOps","sortFields","sort","newResult","a","b","sf","va","vb","cmp","order","runningSum","idx","newRow","joinaggregate","aggResults","aggs","yField","regression","xField","on","points","x","y","p","n","sumX","sumY","sumXY","sumX2","slope","intercept","xMin","xMax","loess","sorted","windowSize","Math","floor","start","end","windowSlice","slice","avgY","density","densityResult","range","bins","bandwidth","groupFields","sampleRow","find","count","abs","quantile","probs","prob","impute","method","fillValue","existingKeys","Set","allKeyValues","minKey","maxKey","k","imputed","fromSpec","lookupField","lookup","fields","lookupMap","lookupRow","extra","f","normalizeSpec","sharedData","sharedEncoding","parseValue","isTemporalType","dateValue","Date","getTime","mapInterpolateToCurve","interpolate","getMarkProperties","strokeWidth","strokeDash","point","extractAnnotations","annotations","textValue","text","datum","xValue","yValue","id","coordinates","style","textColor","markStrokeWidth","markStrokeDash","companionText","l","m","ruleText","borderColor","borderWidth","borderRadius","extractColorFillBars","colorFillBars","isXTemporal","some","layerMark","x2","rawStartX","rawEndX","startX","endX","parsedStart","parsedEnd","applyPattern","extractTickConfig","config","axis","tickValues","tickCount","xAxisTickCount","yAxisTickCount","validateDataArray","chartType","Error","hasValidValues","validateNoNestedArrays","hasNestedArrays","validateEncodingType","expectedType","channelName","sampleValue","isFinite","actualType","isValidDate","parse","suggestion","validateXYEncodings","xType","yType","extractYAxisType","yScale","scale","extractYMinMax","dataValues","domain","yMinValue","yMaxValue","zero","yValues","dataMin","dataMax","padding","createValueFormatter","formatSpec","formatter","convertVegaSortToAxisCategoryOrder","extractAxisCategoryOrderProps","xOrder","xAxisCategoryOrder","yOrder","yAxisCategoryOrder","initializeTransformContext","colorEnc","unitSpecs","primarySpec","rawDataValues","condition","test","elseValue","colorField","testResult","timeUnit","unit","yAgg","dateVal","getFullYear","getMonth","toLocaleString","month","getDate","getHours","vals","markProps","extractEncodingFields","x2Field","sizeField","size","thetaField","theta","radiusField","radius","xAggregate","yAggregate","computeAggregateData","groupField","category","aggregatedValue","reduce","countByCategory","defaultLegend","countMap","xKey","legendMap","extractColorConfig","scheme","groupDataBySeries","isYTemporal","seriesMap","isXOrdinal","ordinalMapping","ordinalLabels","isYOrdinal","yOrdinalMapping","yOrdinalLabels","seriesName","numericX","parsed","parseFloat","markerSize","numericY","findPrimaryLineSpec","lineSpec","markType","dataSpec","autoCorrectEncodingTypes","unitSpec","sample","numericKeys","keys","numericKey","obj","getChartType","marks","hasBar","hasLine","barLayer","hasColorEncoding","isXNominal","isYNominal","hasXOffset","xOffset","xValues","uniqueXValues","transformVegaLiteToLineChartProps","hasPointLayer","hasLineLayer","shouldShowPoints","unitEncoding","lineChartData","colorIndex","currentColorIndex","dataPoints","curveOption","lineOptions","curve","strokeDasharray","hideNonActiveDots","chartTitle","title","xAxisTitle","yAxisTitle","tickFormat","yAxisTickFormat","allXValues","flatMap","series","layerIndex","ruleEncoding","textLayer","yDatum","ruleMarkProps","ruleColor","ruleLegend","ruleLineOptions","yAxisType","categoryOrderProps","chartProps","width","height","yScaleType","yAxisTickValues","_","val","hideLegend","disable","getVegaLiteLegendsProps","legends","centerLegends","enabledWrapLines","canSelectMultipleLegends","seriesNames","add","getVegaLiteTitles","titleStyles","titleObj","titleFont","font","family","fontSize","fontWeight","weight","weightMap","normal","bold","lighter","bolder","toLowerCase","anchorMap","middle","anchor","titleXAnchor","offset","subtitlePadding","titlePad","t","transformVegaLiteToVerticalBarChartProps","barData","isAggregate","aggregatedData","useSingleLegendForAggregate","firstYValue","yIsNumeric","counts","totalCount","useSingleLegend","yFormatter","xCategory","yAxisCalloutData","barLabel","titles","tickConfig","uniqueXCount","d","barTruncateChars","roundCorners","wrapXAxisLables","hideTickOverlap","noOfCharsToTruncate","xAxis","tickLayout","transformVegaLiteToVerticalStackedBarChartProps","chartData","barSpecs","s","lineSpecs","ruleSpecs","mapXToDataPoints","xAxisPoint","lineData","stackValue","stackYFormatter","lineIndex","lineEncoding","lineDataValues","lineMarkProps","lineXField","lineYField","lineColorField","lineLegendBase","lineLegend","lineColor","hasIndependentYScales","resolve","useSecondaryYScale","legendShape","ruleSpec","ruleIndex","textSpec","hasSecondaryYAxis","line","secondaryYAxisProps","lineYAxis","secondaryYAxistitle","allLineYValues","lineDomain","secYMin","secYMax","secondaryYScaleOptions","showYAxisLables","barGapMax","showYAxisLablesTooltip","transformVegaLiteToGroupedVerticalBarChartProps","groupedData","groupValue","transformVegaLiteToHorizontalBarChartProps","startVal","endVal","xNumeric","startDate","endDate","round","transformVegaLiteToAreaChartProps","lineChartProps","stackConfig","stack","isStacked","mode","transformVegaLiteToScatterChartProps","yIsNominal","yOrdinalMap","yVal","seriesData","scatterChartData","transformVegaLiteToDonutChartProps","innerRadius","transformVegaLiteToHeatMapChartProps","heatmapDataPoints","minValue","POSITIVE_INFINITY","maxValue","NEGATIVE_INFINITY","isNominalColor","nominalColorMap","rectText","uniqueYValues","dataPointMap","rectTextMap","completeGridDataPoints","xValuesArray","yValuesArray","firstX","parsedDate","xVal","heatmapData","domainValues","rangeValues","customRange","numCategories","steps","schemeColors","isReversed","reverse","domainValuesForColorScale","rangeValuesForColorScale","sortOrder","getBinCenter","x0","x1","calculateHistogramAggregate","transformVegaLiteToHistogramProps","binConfig","allValues","hasEmbeddedNumbers","minVal","maxVal","binGenerator","maxbins","thresholds","histogramData","extraRows","xAxisCalloutData","maxBarWidth","transformVegaLiteToPolarChartProps","isAreaMark","isLineMark","thetaValue","radiusValue","polarData","radialAxis","angularAxis","thetaType","thetaValues","categoryOrder"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vega-Lite TypeScript interfaces for declarative chart specifications.
|
|
3
|
+
* This is a minimal subset focused on line/point charts with basic encodings.
|
|
4
|
+
*
|
|
5
|
+
* RECOMMENDED: For full type coverage, install the official vega-lite package:
|
|
6
|
+
* ```
|
|
7
|
+
* npm install vega-lite
|
|
8
|
+
* ```
|
|
9
|
+
* Then import `TopLevelSpec` from 'vega-lite' for complete schema support.
|
|
10
|
+
*
|
|
11
|
+
* The types provided here are a lightweight alternative that covers common use cases
|
|
12
|
+
* without requiring the full vega-lite dependency (~5.8MB unpacked).
|
|
13
|
+
*
|
|
14
|
+
* Full Vega-Lite spec: https://vega.github.io/vega-lite/docs/
|
|
15
|
+
*
|
|
16
|
+
* TODO: Add support for:
|
|
17
|
+
* - Transform operations (filter, aggregate, calculate, etc.)
|
|
18
|
+
* - Remote data sources (url, named datasets)
|
|
19
|
+
* - Facet and concatenation for multi-view layouts
|
|
20
|
+
* - Selection interactions
|
|
21
|
+
* - Additional mark types (bar, area, etc.)
|
|
22
|
+
* - Conditional encodings
|
|
23
|
+
* - Tooltip customization
|
|
24
|
+
*/ /**
|
|
25
|
+
* Vega-Lite data type for field encodings
|
|
26
|
+
*/ /**
|
|
27
|
+
* Top-level Vega-Lite specification
|
|
28
|
+
*/ export { };
|