drizzle-cube 0.1.56 → 0.1.59
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/dist/client/charts.js +1 -1
- package/dist/client/chunks/{charts-0DGM88kv.js → charts-P7xq59Tl.js} +865 -813
- package/dist/client/chunks/charts-P7xq59Tl.js.map +1 -0
- package/dist/client/chunks/{components-B3Y4OD_S.js → components-Bil9MEYA.js} +6469 -6157
- package/dist/client/chunks/components-Bil9MEYA.js.map +1 -0
- package/dist/client/chunks/{icons-PjtqDRUK.js → icons-a6fQwcor.js} +64 -59
- package/dist/client/chunks/icons-a6fQwcor.js.map +1 -0
- package/dist/client/chunks/{providers-aaWIe5KD.js → providers-DONuYrGH.js} +65 -61
- package/dist/client/chunks/providers-DONuYrGH.js.map +1 -0
- package/dist/client/client/BatchCoordinator.d.ts +7 -4
- package/dist/client/components/charts/KpiDelta.d.ts +1 -1
- package/dist/client/components/charts/KpiNumber.d.ts +1 -1
- package/dist/client/components.js +2 -2
- package/dist/client/hooks.js +2 -2
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +27 -25
- package/dist/client/providers/CubeProvider.d.ts +2 -0
- package/dist/client/providers/ScrollContainerContext.d.ts +19 -0
- package/dist/client/providers.js +1 -1
- package/dist/client/styles.css +1 -1
- package/dist/client/types.d.ts +2 -0
- package/dist/client/utils/index.d.ts +1 -0
- package/dist/client/utils/periodUtils.d.ts +40 -0
- package/dist/client-bundle-stats.html +1 -1
- package/package.json +6 -5
- package/dist/client/chunks/charts-0DGM88kv.js.map +0 -1
- package/dist/client/chunks/components-B3Y4OD_S.js.map +0 -1
- package/dist/client/chunks/icons-PjtqDRUK.js.map +0 -1
- package/dist/client/chunks/providers-aaWIe5KD.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts-P7xq59Tl.js","sources":["../../../src/client/components/charts/ChartContainer.tsx","../../../src/client/utils/chartUtils.ts","../../../src/client/components/charts/ChartTooltip.tsx","../../../src/client/utils/chartConstants.ts","../../../src/client/utils/targetUtils.ts","../../../src/client/components/charts/BarChart.tsx","../../../src/client/components/charts/LineChart.tsx","../../../src/client/components/charts/AreaChart.tsx","../../../src/client/components/charts/PieChart.tsx","../../../src/client/components/charts/ScatterChart.tsx","../../../src/client/components/charts/RadarChart.tsx","../../../src/client/components/charts/RadialBarChart.tsx","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/descending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/internmap/src/index.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/quantize.js","../../../src/client/components/charts/TreeMapChart.tsx","../../../src/client/components/charts/DataTable.tsx","../../../src/client/utils/index.ts"],"sourcesContent":["import { ReactElement, useState, useRef, useLayoutEffect } from 'react'\nimport { ResponsiveContainer } from 'recharts'\n\ninterface ChartContainerProps {\n children: ReactElement\n height?: string | number\n}\n\nexport default function ChartContainer({ children, height = \"100%\" }: ChartContainerProps) {\n // Track if container is ready to render ResponsiveContainer\n // We need to wait for the container to be in the DOM with valid dimensions\n const containerRef = useRef<HTMLDivElement>(null)\n const [isReady, setIsReady] = useState(false)\n const [containerSize, setContainerSize] = useState({ width: 0, height: 0 })\n\n // Use useLayoutEffect to measure before paint\n useLayoutEffect(() => {\n let mounted = true\n let resizeObserver: ResizeObserver | null = null\n\n const measureAndSetReady = () => {\n if (!mounted || !containerRef.current) return\n\n const rect = containerRef.current.getBoundingClientRect()\n // Check both clientWidth/Height AND getBoundingClientRect for robustness\n const width = Math.max(containerRef.current.clientWidth, rect.width)\n const height = Math.max(containerRef.current.clientHeight, rect.height)\n\n if (width > 0 && height > 0) {\n setContainerSize({ width, height })\n setIsReady(true)\n }\n }\n\n // Set up ResizeObserver to detect when container gets valid dimensions\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n if (width > 0 && height > 0) {\n setContainerSize({ width, height })\n if (!isReady) {\n setIsReady(true)\n }\n }\n }\n })\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n // Also try immediate measurement\n measureAndSetReady()\n }\n\n return () => {\n mounted = false\n resizeObserver?.disconnect()\n }\n }, [isReady])\n\n try {\n if (height === \"100%\") {\n // For 100% height, make the container fill the available flex space with proper sizing\n return (\n <div\n ref={containerRef}\n className=\"w-full h-full flex-1 flex flex-col relative\"\n style={{ minHeight: '250px', minWidth: '100px', overflow: 'hidden' }}\n >\n {isReady && containerSize.width > 0 && containerSize.height > 0 ? (\n <ResponsiveContainer\n width={containerSize.width}\n height={containerSize.height - 16}\n debounce={100}\n style={{ marginTop: '16px' }}\n >\n {children}\n </ResponsiveContainer>\n ) : (\n <div className=\"flex items-center justify-center w-full h-full\">\n <div className=\"animate-spin rounded-full h-6 w-6 border-b-2 border-blue-500\"></div>\n </div>\n )}\n </div>\n )\n }\n\n // For specific heights, use them directly\n const containerStyle = {\n height: typeof height === 'number' ? `${height}px` : height,\n width: '100%',\n minHeight: '200px',\n minWidth: '100px'\n }\n\n return (\n <div\n ref={containerRef}\n className=\"w-full flex flex-col relative\"\n style={{ ...containerStyle, overflow: 'hidden' }}\n >\n {isReady && containerSize.width > 0 && containerSize.height > 0 ? (\n <ResponsiveContainer\n width={containerSize.width}\n height={containerSize.height - 16}\n debounce={100}\n style={{ marginTop: '16px' }}\n >\n {children}\n </ResponsiveContainer>\n ) : (\n <div className=\"flex items-center justify-center w-full h-full\">\n <div className=\"animate-spin rounded-full h-6 w-6 border-b-2 border-blue-500\"></div>\n </div>\n )}\n </div>\n )\n } catch (error) {\n // ChartContainer ResponsiveContainer error\n\n return (\n <div\n className=\"flex flex-col items-center justify-center w-full h-full p-4 text-center border border-dashed rounded-lg\"\n style={{ height, borderColor: 'var(--dc-border)', backgroundColor: 'var(--dc-surface)' }}\n >\n <div className=\"text-sm font-semibold mb-1 text-dc-text-muted\">Unable to display chart</div>\n <div className=\"text-xs text-dc-text-secondary\">\n {error instanceof Error ? error.message : 'Failed to create responsive container'}\n </div>\n </div>\n )\n }\n}","import type { FieldLabelMap } from '../hooks/useCubeMeta'\n\n// Utility function to check if a value is a valid numeric value (not null, undefined, or NaN)\n// This is used to preserve null values instead of converting them to 0\nexport function isValidNumericValue(value: any): boolean {\n return value !== null && value !== undefined && !isNaN(Number(value))\n}\n\n// Utility function to parse numeric value from data, preserving nulls\n// Returns null for null/undefined/NaN values, otherwise returns the numeric value\nexport function parseNumericValue(value: any): number | null {\n if (value === null || value === undefined) return null\n const num = typeof value === 'string' ? parseFloat(value) : Number(value)\n return isNaN(num) ? null : num\n}\n\n// Utility function to format numeric values for display in charts\n// Rounds to at most 2 decimal places, preserves integers\nexport function formatNumericValue(value: any): string {\n if (value === null || value === undefined) return 'No data'\n const num = typeof value === 'number' ? value : parseFloat(value)\n if (isNaN(num)) return String(value)\n if (Number.isInteger(num)) return num.toLocaleString()\n // Round to at most 2 decimal places, remove trailing zeros\n return parseFloat(num.toFixed(2)).toLocaleString()\n}\n\n// Utility function to get field label from field name\nexport function getFieldLabel(fieldName: string, labelMap: FieldLabelMap): string {\n return labelMap[fieldName] || fieldName\n}\n\n// Utility function to transform series keys to use labels\nexport function transformSeriesKeysWithLabels(seriesKeys: string[], labelMap: FieldLabelMap): string[] {\n return seriesKeys.map(key => getFieldLabel(key, labelMap))\n}\n\n// Utility function to format time values for better display using known granularity\nexport function formatTimeValue(value: any, granularity?: string): string {\n if (!value) return String(value || 'Unknown')\n \n const str = String(value)\n \n // Check if it's a timestamp (ISO format or PostgreSQL format)\n // Handles formats like: \"2025-04-01T00:00:00.000\" or \"2023-02-01 00:00:00+00\"\n if (str.match(/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}/)) {\n // Convert PostgreSQL format to ISO format if needed\n let isoStr = str\n if (str.includes(' ')) {\n // Convert \"2023-02-01 00:00:00+00\" to \"2023-02-01T00:00:00Z\"\n isoStr = str.replace(' ', 'T').replace('+00', 'Z').replace(/\\+\\d{2}:\\d{2}$/, 'Z')\n }\n // Ensure the timestamp ends with 'Z' if not present\n if (!isoStr.endsWith('Z') && !isoStr.includes('+')) {\n isoStr = isoStr + 'Z'\n }\n const date = new Date(isoStr)\n \n // Ensure we're working with valid date\n if (isNaN(date.getTime())) {\n return str\n }\n \n // Use UTC methods on the properly UTC-parsed date\n const year = date.getUTCFullYear()\n const month = String(date.getUTCMonth() + 1).padStart(2, '0')\n const day = String(date.getUTCDate()).padStart(2, '0')\n const hours = date.getUTCHours()\n const minutes = date.getUTCMinutes()\n \n // Format based on known granularity if provided\n if (granularity) {\n switch (granularity.toLowerCase()) {\n case 'year':\n return `${year}`\n case 'quarter':\n const quarter = Math.floor(date.getUTCMonth() / 3) + 1\n return `${year}-Q${quarter}`\n case 'month':\n return `${year}-${month}`\n case 'week':\n // For week, we could calculate week number, but let's use date for simplicity\n return `${year}-${month}-${day}`\n case 'day':\n return `${year}-${month}-${day}`\n case 'hour':\n return `${year}-${month}-${day} ${String(hours).padStart(2, '0')}:00`\n case 'minute':\n return `${year}-${month}-${day} ${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`\n default:\n // Unknown granularity, fall back to heuristic\n break\n }\n }\n \n // Fallback heuristic if granularity not provided or unknown\n const seconds = date.getUTCSeconds()\n const milliseconds = date.getUTCMilliseconds()\n \n // If it's the first day of the month at exactly midnight UTC, it's likely a month granularity\n if (day === '01' && hours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) {\n // Check if it's also first month of a quarter (quarter granularity)\n if (month === '01' || month === '04' || month === '07' || month === '10') {\n const quarter = Math.floor(date.getUTCMonth() / 3) + 1\n return `${year}-Q${quarter}`\n }\n // Month granularity\n return `${year}-${month}`\n }\n \n // If it's exactly midnight UTC, it's likely a day granularity\n if (hours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) {\n return `${year}-${month}-${day}`\n }\n \n // If it has time components, include them (hour/minute granularity)\n if (minutes === 0 && seconds === 0 && milliseconds === 0) {\n // Hour granularity\n return `${year}-${month}-${day} ${String(hours).padStart(2, '0')}:00`\n }\n \n // Full timestamp\n return `${year}-${month}-${day} ${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`\n }\n \n // Return as-is if not a timestamp\n return str\n}\n\n// Helper function to get granularity for a field from the query timeDimensions\nexport function getFieldGranularity(queryObject: any, fieldName: string): string | undefined {\n try {\n if (queryObject?.timeDimensions) {\n // Find the timeDimension that matches this field\n const timeDim = queryObject.timeDimensions.find((td: any) => {\n // Check if field name matches the dimension or dimension with granularity suffix\n return fieldName === td.dimension || \n fieldName.startsWith(td.dimension.replace('.', '_')) ||\n fieldName === `${td.dimension}_${td.granularity}`\n })\n \n if (timeDim?.granularity) {\n return timeDim.granularity\n }\n }\n \n // Fallback: extract granularity from field name suffix if present\n const granularityMatch = fieldName.match(/_([a-z]+)$/)\n if (granularityMatch) {\n const suffix = granularityMatch[1]\n // Only return if it's a valid granularity\n if (['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'].includes(suffix)) {\n return suffix\n }\n }\n \n return undefined\n } catch (e) {\n return undefined\n }\n}\n\n// Transform data for charts with proper type handling\n// NOTE: Preserves null values to allow charts to handle gaps/missing data appropriately\nexport function transformChartData(data: any[], xAxisField: string, yAxisFields: string[], queryObject: any, labelMap: FieldLabelMap = {}) {\n if (!data || data.length === 0) return []\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n\n return data.map((row: any) => {\n const transformed: any = {\n name: formatTimeValue(row[xAxisField], granularity) || row[xAxisField] || 'Unknown',\n }\n\n yAxisFields.forEach(field => {\n const displayName = getFieldLabel(field, labelMap)\n // Preserve null values instead of converting to 0\n transformed[displayName] = parseNumericValue(row[field])\n })\n\n return transformed\n })\n}\n\nexport interface ChartSeriesResult {\n data: any[]\n seriesKeys: string[]\n hasDimensions: boolean\n}\n\n// Advanced data transformation that handles both measures and dimensions on Y-axis\n// NOTE: Preserves null values to allow charts to handle gaps/missing data appropriately\nexport function transformChartDataWithSeries(\n data: any[],\n xAxisField: string,\n yAxisFields: string[],\n queryObject: any,\n seriesFields?: string[], // New optional parameter for explicit series fields\n labelMap: FieldLabelMap = {} // Optional label map for field names\n): ChartSeriesResult {\n if (!data || data.length === 0) {\n return { data: [], seriesKeys: [], hasDimensions: false }\n }\n\n const originalQuery = queryObject || {}\n const queryDimensions = [\n ...(originalQuery.dimensions || []),\n ...(originalQuery.timeDimensions?.map((td: any) => td.dimension) || [])\n ]\n const queryMeasures = originalQuery.measures || []\n\n // Use explicit series fields if provided, otherwise no dimension-based series\n const yAxisMeasures = yAxisFields.filter(field => queryMeasures.includes(field))\n const yAxisDimensions = (seriesFields || []).filter(field => queryDimensions.includes(field))\n\n // Handle complex case with dimensions on Y-axis\n if (yAxisDimensions.length > 0) {\n // Group data by X-axis field and create separate series for dimension values\n const groupedData: { [key: string]: any } = {}\n\n data.forEach((row: any) => {\n const granularity = getFieldGranularity(queryObject, xAxisField)\n const xValue = formatTimeValue(row[xAxisField], granularity) || row[xAxisField] || 'Unknown'\n if (!groupedData[xValue]) {\n groupedData[xValue] = { name: String(xValue) }\n }\n\n // Add measures - preserve nulls for individual measures\n yAxisMeasures.forEach(measure => {\n const displayName = getFieldLabel(measure, labelMap)\n const measureValue = parseNumericValue(row[measure])\n\n // For aggregation: sum non-null values, preserve null if all are null\n if (measureValue !== null) {\n const currentValue = groupedData[xValue][displayName]\n groupedData[xValue][displayName] = (currentValue === null || currentValue === undefined)\n ? measureValue\n : currentValue + measureValue\n } else if (!(displayName in groupedData[xValue])) {\n // Only set to null if no value exists yet\n groupedData[xValue][displayName] = null\n }\n })\n\n // Add dimensions as separate series (aggregate measure values by dimension)\n yAxisDimensions.forEach(dimension => {\n const dimValue = row[dimension]\n if (dimValue !== undefined && dimValue !== null) {\n const seriesName = String(dimValue)\n // Aggregate the first measure for this dimension value, or use totalCost if available\n const measureToAggregate = yAxisMeasures[0] || queryMeasures.find((m: string) =>\n m.includes('totalCost') || m.includes('count') || m.includes('sum')\n ) || queryMeasures[0]\n\n if (measureToAggregate) {\n const measureValue = parseNumericValue(row[measureToAggregate])\n\n // For dimension series: sum non-null values, preserve null if all are null\n if (measureValue !== null) {\n const currentValue = groupedData[xValue][seriesName]\n groupedData[xValue][seriesName] = (currentValue === null || currentValue === undefined)\n ? measureValue\n : currentValue + measureValue\n } else if (!(seriesName in groupedData[xValue])) {\n // Only set to null if no value exists yet\n groupedData[xValue][seriesName] = null\n }\n }\n }\n })\n })\n \n const chartData = Object.values(groupedData)\n \n // Get all series keys for rendering\n // When dimensions are on Y-axis, only show dimension series, not measures\n // The measures are the values being aggregated for each dimension series\n const dimensionSeries = Array.from(new Set(\n data.flatMap((row: any) => \n yAxisDimensions.map(dimension => {\n const value = row[dimension]\n return value !== undefined && value !== null \n ? String(value)\n : null\n }).filter((value): value is string => value !== null)\n )\n ))\n \n return {\n data: chartData,\n seriesKeys: dimensionSeries,\n hasDimensions: true\n }\n }\n \n // Standard measures-only path\n const chartData = transformChartData(data, xAxisField, yAxisFields, queryObject, labelMap)\n const seriesKeys = yAxisFields.map(field => getFieldLabel(field, labelMap))\n \n return {\n data: chartData,\n seriesKeys,\n hasDimensions: false\n }\n}","import React from 'react'\nimport { Tooltip } from 'recharts'\nimport { formatNumericValue } from '../../utils/chartUtils'\n\ninterface ChartTooltipProps {\n formatter?: (value: any, name: any, props: any) => [React.ReactText, React.ReactText]\n labelFormatter?: (label: any) => React.ReactText\n}\n\n// Default formatter that rounds numeric values to at most 2 decimal places\nconst defaultFormatter = (value: any, name: any): [React.ReactText, React.ReactText] => {\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n return [formatNumericValue(value), name]\n}\n\nexport default function ChartTooltip({ formatter, labelFormatter }: ChartTooltipProps) {\n return (\n <Tooltip\n formatter={formatter || defaultFormatter}\n labelFormatter={labelFormatter}\n contentStyle={{\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n color: '#1f2937',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n padding: '8px 12px'\n }}\n />\n )\n}","// Default color palette for charts - used as fallback when no dashboard palette is specified\n// These are now part of the 'default' palette in the unified color palette system\nexport const CHART_COLORS = [\n '#3b82f6', // blue\n '#10b981', // green\n '#f59e0b', // yellow\n '#ef4444', // red\n '#8b5cf6', // purple\n '#f97316', // orange\n '#06b6d4', // cyan\n '#84cc16', // lime\n]\n\n// Default gradient colors for continuous numeric scales - used as fallback\n// These are now part of the 'default' palette in the unified color palette system\nexport const CHART_COLORS_GRADIENT = [\n '#440154', // dark purple\n '#414487', // purple-blue\n '#2a788e', // teal\n '#22a884', // green-teal \n '#7ad151', // green\n '#fde725', // yellow\n]\n\n// Colors for positive/negative values\nexport const POSITIVE_COLOR = '#10b981' // green\nexport const NEGATIVE_COLOR = '#ef4444' // red\n\nexport const CHART_MARGINS = {\n top: 5,\n right: 30,\n left: 20,\n bottom: 5\n}\n\nexport const RESPONSIVE_CHART_MARGINS = {\n top: 5,\n right: 30,\n left: 20,\n bottom: 60 // Extra space for rotated labels\n}","/**\n * Utility functions for handling target values in charts\n */\n\n/**\n * Parse target values from string format\n * @param targetString - String containing target values (e.g., \"100\" or \"50,75,100\")\n * @returns Array of numeric target values\n */\nexport function parseTargetValues(targetString: string): number[] {\n if (!targetString || typeof targetString !== 'string') {\n return []\n }\n\n const trimmed = targetString.trim()\n if (!trimmed) {\n return []\n }\n\n try {\n // Split by comma and parse each value\n const values = trimmed\n .split(',')\n .map(val => val.trim())\n .filter(val => val !== '')\n .map(val => {\n const num = parseFloat(val)\n if (isNaN(num)) {\n throw new Error(`Invalid numeric value: ${val}`)\n }\n return num\n })\n\n return values.length > 0 ? values : []\n } catch (error) {\n console.warn('Failed to parse target values:', error)\n return []\n }\n}\n\n/**\n * Spread target values across data points\n * @param targets - Array of target values\n * @param dataLength - Number of data points to spread across\n * @returns Array of target values for each data point\n */\nexport function spreadTargetValues(targets: number[], dataLength: number): number[] {\n if (targets.length === 0 || dataLength <= 0) {\n return []\n }\n\n // If only one target value, repeat for all data points\n if (targets.length === 1) {\n return new Array(dataLength).fill(targets[0])\n }\n\n // If we have multiple targets, spread them evenly across data points\n const result: number[] = []\n const baseGroupSize = Math.floor(dataLength / targets.length)\n const remainder = dataLength % targets.length\n\n let currentIndex = 0\n \n for (let i = 0; i < targets.length; i++) {\n // Calculate group size for this target\n // First 'remainder' groups get an extra item\n const groupSize = baseGroupSize + (i < remainder ? 1 : 0)\n \n // Fill this group with the current target value\n for (let j = 0; j < groupSize; j++) {\n result[currentIndex++] = targets[i]\n }\n }\n\n return result\n}\n\n/**\n * Calculate variance between actual and target values\n * @param actual - Actual value\n * @param target - Target value\n * @returns Variance as percentage\n */\nexport function calculateVariance(actual: number, target: number): number {\n if (target === 0) {\n return actual === 0 ? 0 : (actual > 0 ? 100 : -100)\n }\n return ((actual - target) / target) * 100\n}\n\n/**\n * Format variance as percentage string with appropriate sign and color indication\n * @param variance - Variance percentage\n * @param decimals - Number of decimal places (default: 1)\n * @returns Formatted variance string (e.g., \"+12.5%\" or \"-8.3%\")\n */\nexport function formatVariance(variance: number, decimals: number = 1): string {\n const sign = variance >= 0 ? '+' : ''\n return `${sign}${variance.toFixed(decimals)}%`\n}\n\n/**\n * Get unique target values for reference lines\n * @param targets - Array of target values (may contain duplicates)\n * @returns Array of unique target values\n */\nexport function getUniqueTargets(targets: number[]): number[] {\n return [...new Set(targets)].sort((a, b) => a - b)\n}","import { useState, useMemo } from 'react'\nimport { ComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, POSITIVE_COLOR, NEGATIVE_COLOR, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, isValidNumericValue, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function BarChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel: contextGetFieldLabel } = useCubeContext()\n \n try {\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in bar chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: transformedData, seriesKeys } = transformChartDataWithSeries(\n data,\n xAxisField,\n yAxisFields,\n queryObject,\n seriesFields,\n labelMap\n )\n\n // Null handling: Filter out data points where ALL measure values are null\n // This prevents rendering empty bars and makes the chart clearer\n const { chartData, skippedCount } = useMemo(() => {\n const filtered = transformedData.filter(row => {\n // Keep the row if at least one series has a valid numeric value\n return seriesKeys.some(key => isValidNumericValue(row[key]))\n })\n const skipped = transformedData.length - filtered.length\n return { chartData: filtered, skippedCount: skipped }\n }, [transformedData, seriesKeys])\n\n // Determine stack offset for percentage stacking\n const stackOffset = isPercentStack ? 'expand' as const : undefined\n \n // Check if we should use positive/negative coloring\n // This is enabled when we have single series data with mixed positive/negative values\n const usePositiveNegativeColoring = seriesKeys.length === 1 && chartData.some(row => {\n const value = row[seriesKeys[0]]\n return typeof value === 'number' && value < 0\n })\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"relative w-full\" style={{ height }}>\n <ChartContainer height={skippedCount > 0 ? `calc(100% - 20px)` : \"100%\"}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={isPercentStack ? (v) => `${(v * 100).toFixed(0)}%` : undefined}\n domain={isPercentStack ? [0, 1] : undefined}\n label={isPercentStack ? undefined : { value: contextGetFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (isPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '25px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Bar\n key={seriesKey}\n dataKey={seriesKey}\n stackId={shouldStack ? \"stack\" : undefined}\n fill={usePositiveNegativeColoring ? POSITIVE_COLOR : ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length])}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n >\n {usePositiveNegativeColoring && chartData.map((entry, entryIndex) => {\n const value = entry[seriesKey]\n const fillColor = typeof value === 'number' && value < 0 ? NEGATIVE_COLOR : POSITIVE_COLOR\n return (\n <Cell \n key={`cell-${entryIndex}`} \n fill={fillColor}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n )\n })}\n </Bar>\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n {skippedCount > 0 && (\n <div className=\"text-xs text-dc-text-muted text-center mt-1\">\n {skippedCount} data point{skippedCount !== 1 ? 's' : ''} with no values hidden\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'BarChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Bar Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","import { useState } from 'react'\nimport { LineChart as RechartsLineChart, Line, XAxis, YAxis, CartesianGrid, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function LineChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel } = useCubeContext()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n connectNulls: displayConfig?.connectNulls ?? false\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in line chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields,\n labelMap\n )\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for line chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsLineChart data={enhancedChartData} margin={chartMargins}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis \n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis \n tick={{ fontSize: 12 }} \n label={{ value: getFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '25px' }}\n iconType=\"line\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Line\n key={seriesKey}\n type=\"monotone\"\n dataKey={seriesKey}\n stroke={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n strokeWidth={2}\n dot={{ r: 3 }}\n activeDot={{ r: 5 }}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n connectNulls={safeDisplayConfig.connectNulls}\n />\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </RechartsLineChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'LineChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Line Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","import { useState } from 'react'\nimport { ComposedChart, Area, Line, XAxis, YAxis, CartesianGrid, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function AreaChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel } = useCubeContext()\n \n try {\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n connectNulls: displayConfig?.connectNulls ?? false\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in area chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields,\n labelMap\n )\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for area chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Determine stack offset for percentage stacking\n const stackOffset = isPercentStack ? 'expand' as const : undefined\n\n return (\n <ChartContainer height={height}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={isPercentStack ? (v) => `${(v * 100).toFixed(0)}%` : undefined}\n domain={isPercentStack ? [0, 1] : undefined}\n label={isPercentStack ? undefined : { value: getFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (isPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Area\n key={seriesKey}\n type=\"monotone\"\n dataKey={seriesKey}\n stackId={shouldStack ? \"stack\" : undefined}\n stroke={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 0.6 : 0.1) : 0.3}\n strokeWidth={2}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n connectNulls={safeDisplayConfig.connectNulls}\n />\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'AreaChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Area Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","import { useState } from 'react'\nimport { PieChart as RechartsPieChart, Pie, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity } from '../../utils/chartUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function PieChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap } = useCubeContext()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in pie chart</div>\n </div>\n </div>\n )\n }\n\n let pieData: Array<{name: string, value: number}>\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n if (seriesFields.length > 0) {\n // Use series-based transformation for dimension-based pie slices\n const { data: chartData } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields,\n labelMap\n )\n \n // Convert series data to pie format\n pieData = []\n if (chartData.length > 0) {\n const firstRow = chartData[0]\n Object.keys(firstRow).forEach(key => {\n if (key !== 'name' && typeof firstRow[key] === 'number') {\n pieData.push({\n name: String(key),\n value: firstRow[key]\n })\n }\n })\n }\n } else {\n // Standard measure-based pie chart\n const granularity = getFieldGranularity(queryObject, xAxisField)\n pieData = data.map(item => {\n let name = formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown'\n // Handle boolean values with better labels\n if (typeof item[xAxisField] === 'boolean') {\n name = item[xAxisField] ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n }\n return {\n name,\n value: typeof item[yAxisFields[0]] === 'string' \n ? parseFloat(item[yAxisFields[0]]) \n : (item[yAxisFields[0]] || 0)\n }\n })\n }\n\n // Filter out invalid values (null, undefined, NaN, or zero)\n const originalLength = pieData.length\n pieData = pieData.filter(item => \n item.value != null && \n !isNaN(item.value) && \n item.value !== 0 && \n item.value > 0\n )\n \n if (pieData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">\n {originalLength > 0\n ? `Filtered out ${originalLength} data points (zero or invalid values)`\n : 'No data points to display in pie chart'\n }\n </div>\n </div>\n </div>\n )\n }\n \n return (\n <ChartContainer height={height}>\n <RechartsPieChart>\n <Pie\n data={pieData}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"70%\"\n dataKey=\"value\"\n label={!safeDisplayConfig.showLegend ? ({ name, percent }) => \n `${name} ${((percent || 0) * 100).toFixed(0)}%`\n : undefined}\n >\n {pieData.map((_entry, index) => (\n <Cell \n key={`cell-${index}`} \n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === pieData[index].name ? 1 : 0.3) : 1}\n />\n ))}\n </Pie>\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n </RechartsPieChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'PieChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Pie Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","import { useState } from 'react'\nimport { ScatterChart as RechartsScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Legend, Tooltip } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, parseNumericValue, isValidNumericValue, formatNumericValue } from '../../utils/chartUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function ScatterChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { getFieldLabel } = useCubeContext()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in scatter chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisField: string\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - handle both string and array values\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis\n // Normalize series to array\n const seriesConfig = chartConfig.series\n seriesFields = seriesConfig ? (Array.isArray(seriesConfig) ? seriesConfig : [seriesConfig]) : []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format (adapt for scatter chart)\n xAxisField = chartConfig.x\n yAxisField = Array.isArray(chartConfig.y) ? chartConfig.y[0] : chartConfig.y\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisField) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Extract time dimensions from query for tooltip display\n const timeDimensions = queryObject?.timeDimensions || []\n const timeDimensionFields = timeDimensions.map((td: any) => td.dimension)\n\n // Transform data for scatter plot\n // Null handling: Filter out data points where x or y coordinates are null\n let scatterData: any[]\n let seriesGroups: { [key: string]: any[] } = {}\n\n if (seriesFields.length > 0) {\n // Group data by series field\n const seriesField = seriesFields[0]\n data.forEach(item => {\n const seriesValue = String(item[seriesField] || 'Default')\n if (!seriesGroups[seriesValue]) {\n seriesGroups[seriesValue] = []\n }\n\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n const xValue = formatTimeValue(item[xAxisField], xGranularity) || item[xAxisField]\n const yValue = parseNumericValue(item[yAxisField])\n\n // Only add point if both x and y are valid numbers\n const xNum = typeof xValue === 'string' ? parseFloat(xValue) : xValue\n if (isValidNumericValue(xNum) && yValue !== null) {\n // Extract time dimension values for tooltip\n const timeValues: { [key: string]: string } = {}\n timeDimensionFields.forEach((field: string) => {\n if (item[field]) {\n const granularity = getFieldGranularity(queryObject, field)\n timeValues[field] = formatTimeValue(item[field], granularity)\n }\n })\n\n seriesGroups[seriesValue].push({\n x: xNum,\n y: yValue,\n name: seriesValue,\n timeValues,\n originalItem: item\n })\n }\n })\n\n // Collect all valid points from all series for validation\n // (The actual rendering uses seriesGroups with series separated)\n const seriesKeys = Object.keys(seriesGroups)\n scatterData = seriesKeys.flatMap(key => seriesGroups[key])\n } else {\n // Single series scatter plot\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n scatterData = data\n .map(item => {\n const xValue = formatTimeValue(item[xAxisField], xGranularity) || item[xAxisField]\n const yValue = parseNumericValue(item[yAxisField])\n const xNum = typeof xValue === 'string' ? parseFloat(xValue) : xValue\n\n // Extract time dimension values for tooltip\n const timeValues: { [key: string]: string } = {}\n timeDimensionFields.forEach((field: string) => {\n if (item[field]) {\n const granularity = getFieldGranularity(queryObject, field)\n timeValues[field] = formatTimeValue(item[field], granularity)\n }\n })\n\n return {\n x: xNum,\n y: yValue,\n name: `Point`,\n timeValues,\n originalItem: item,\n isValid: isValidNumericValue(xNum) && yValue !== null\n }\n })\n .filter(point => point.isValid)\n }\n \n // Validate transformed data\n if (!scatterData || scatterData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for scatter chart after transformation</div>\n </div>\n </div>\n )\n }\n\n const seriesKeys = Object.keys(seriesGroups)\n // Limit series to prevent performance issues with high-cardinality fields (e.g., dates)\n // If more than 20 unique series, fall back to single-series mode\n const MAX_SERIES = 20\n const hasSeries = seriesKeys.length > 1 && seriesKeys.length <= MAX_SERIES\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend && hasSeries\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsScatterChart margin={chartMargins}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis \n type=\"number\"\n dataKey=\"x\"\n name={getFieldLabel(xAxisField)}\n tick={{ fontSize: 12 }}\n />\n <YAxis \n type=\"number\"\n dataKey=\"y\"\n name={getFieldLabel(yAxisField)}\n tick={{ fontSize: 12 }}\n label={{ value: getFieldLabel(yAxisField), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <Tooltip\n cursor={{ strokeDasharray: '3 3' }}\n content={({ active, payload }) => {\n if (!active || !payload || payload.length === 0) return null\n // Only show the first (active) point\n const point = payload[0]?.payload\n if (!point) return null\n\n return (\n <div style={{\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n color: '#1f2937',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n padding: '8px 12px'\n }}>\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>{point.name}</div>\n {/* Show time dimension values if present */}\n {point.timeValues && Object.keys(point.timeValues).length > 0 && (\n <div style={{ marginBottom: '4px', color: '#6b7280' }}>\n {Object.entries(point.timeValues).map(([field, value]) => (\n <div key={field}>{getFieldLabel(field)}: {value as string}</div>\n ))}\n </div>\n )}\n <div>{getFieldLabel(xAxisField)}: {formatNumericValue(point.x)}</div>\n <div>{getFieldLabel(yAxisField)}: {formatNumericValue(point.y)}</div>\n </div>\n )\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {hasSeries ? (\n // Multiple series\n seriesKeys.map((seriesKey, index) => (\n <Scatter\n key={seriesKey}\n name={seriesKey}\n data={seriesGroups[seriesKey]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n ))\n ) : (\n // Single series\n <Scatter\n name=\"Data\"\n data={scatterData}\n fill={(colorPalette?.colors && colorPalette.colors[0]) || CHART_COLORS[0]}\n />\n )}\n </RechartsScatterChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'ScatterChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Scatter Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","import { useState } from 'react'\nimport { RadarChart as RechartsRadarChart, PolarGrid, PolarAngleAxis, PolarRadiusAxis, Radar, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nexport default function RadarChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n showGrid: displayConfig?.showGrid ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in radar chart</div>\n </div>\n </div>\n )\n }\n\n let radarData: any[]\n let seriesKeys: string[] = []\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Subject/category field\n const yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis] // Value fields\n const seriesFields = chartConfig.series || []\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys: transformedSeriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields\n )\n \n radarData = chartData\n seriesKeys = transformedSeriesKeys\n } else {\n // Legacy format or auto-detection - try to find suitable fields\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find subject/category field\n const subjectField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('subject') ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find numeric fields for values\n const valueFields = keys.filter(key => \n typeof firstRow[key] === 'number' && key !== subjectField\n )\n\n if (valueFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">No numeric fields found for radar chart values</div>\n </div>\n </div>\n )\n }\n\n // Transform data for radar chart\n if (subjectField) {\n // Use subject field for radar categories\n const granularity = getFieldGranularity(queryObject, subjectField)\n radarData = data.map(item => {\n const transformedItem: any = {\n name: formatTimeValue(item[subjectField], granularity) || String(item[subjectField]) || 'Unknown'\n }\n \n valueFields.forEach(field => {\n const displayName = field.split('.').pop() || field\n transformedItem[displayName] = typeof item[field] === 'string' \n ? parseFloat(item[field]) \n : (item[field] || 0)\n })\n \n return transformedItem\n })\n \n seriesKeys = valueFields.map(field => field.split('.').pop() || field)\n } else {\n // Fallback - use first value field only\n radarData = data.map(item => ({\n name: String(item[keys[0]] || 'Unknown'),\n value: typeof item[valueFields[0]] === 'string' \n ? parseFloat(item[valueFields[0]]) \n : (item[valueFields[0]] || 0)\n }))\n seriesKeys = ['value']\n }\n }\n \n // Validate transformed data\n if (!radarData || radarData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for radar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsRadarChart data={radarData} margin={{ top: 20, right: 80, bottom: 20, left: 80 }}>\n {safeDisplayConfig.showGrid && (\n <PolarGrid />\n )}\n <PolarAngleAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n className=\"text-dc-text-muted\"\n />\n <PolarRadiusAxis\n tick={{ fontSize: 10 }}\n className=\"text-dc-text-muted\"\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip />\n )}\n {(safeDisplayConfig.showLegend && seriesKeys.length > 1) && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Radar\n key={seriesKey}\n name={seriesKey}\n dataKey={seriesKey}\n stroke={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 0.6 : 0.1) : 0.3}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n strokeWidth={2}\n />\n ))}\n </RechartsRadarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadarChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Radar Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","import { useState } from 'react'\nimport { RadialBarChart as RechartsRadialBarChart, RadialBar, Legend, Cell } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nexport default function RadialBarChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in radial bar chart</div>\n </div>\n </div>\n )\n }\n\n let radialData: Array<{name: string, value: number, fill?: string}>\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Name/category field\n const yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis // Value field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n radialData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n value: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }))\n } else {\n // Legacy format or auto-detection\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find name/label field\n const nameField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('label') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find a numeric field for values\n const valueField = keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!valueField) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">No numeric field found for radial bar chart values</div>\n </div>\n </div>\n )\n }\n\n // Transform data for radial bar chart\n radialData = data.map((item, index) => {\n let name = item[nameField]\n // Handle boolean values with better labels\n if (typeof name === 'boolean') {\n name = name ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n } else {\n name = String(name)\n }\n return {\n name,\n value: typeof item[valueField] === 'string' \n ? parseFloat(item[valueField]) \n : (item[valueField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }\n })\n }\n\n // Filter out zero/null values\n radialData = radialData.filter(item => item.value != null && item.value !== 0)\n \n if (radialData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for radial bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsRadialBarChart \n data={radialData}\n innerRadius=\"10%\"\n outerRadius=\"80%\"\n margin={{ top: 20, right: 30, bottom: 20, left: 30 }}\n >\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n <RadialBar \n dataKey=\"value\" \n cornerRadius={4}\n label={{ position: 'insideStart', fill: '#fff', fontSize: 12 }}\n >\n {radialData.map((entry, index) => (\n <Cell \n key={`cell-${index}`} \n fill={entry.fill}\n fillOpacity={hoveredLegend ? (hoveredLegend === entry.name ? 1 : 0.3) : 1}\n />\n ))}\n </RadialBar>\n </RechartsRadialBarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadialBarChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Radial Bar Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import { useState } from 'react'\nimport { Treemap } from 'recharts'\nimport { scaleQuantize, scaleOrdinal } from 'd3'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_COLORS_GRADIENT } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity } from '../../utils/chartUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function TreeMapChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n const { getFieldLabel } = useCubeContext()\n \n try {\n const safeDisplayConfig = {\n showTooltip: displayConfig?.showTooltip ?? true,\n showLegend: displayConfig?.showLegend ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in treemap chart</div>\n </div>\n </div>\n )\n }\n\n let treemapData: Array<{name: string, size: number, fill?: string, series?: string}>\n let isNumericSeries = false\n let seriesField: string | undefined\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Name/category field\n const yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis // Size field\n seriesField = Array.isArray(chartConfig.series) ? chartConfig.series[0] : chartConfig.series // Color grouping field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n \n if (seriesField) {\n // Check if series field is numeric for color scaling\n const seriesValues = data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }).filter(val => !isNaN(val))\n \n isNumericSeries = seriesValues.length === data.length && seriesValues.every(val => typeof val === 'number')\n \n \n if (isNumericSeries) {\n // Use D3 quantize scale for better color distribution with small ranges\n const minValue = Math.min(...seriesValues)\n const maxValue = Math.max(...seriesValues)\n \n // Create D3 quantize color scale - maps continuous data to discrete color bands\n const colorScale = scaleQuantize<string>()\n .domain([minValue, maxValue])\n .range(CHART_COLORS_GRADIENT)\n \n treemapData = data.map((item) => {\n const seriesValue = typeof item[seriesField!] === 'string' \n ? parseFloat(item[seriesField!]) \n : item[seriesField!]\n \n const color = colorScale(seriesValue)\n \n return {\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: color,\n series: String(item[seriesField!])\n }\n })\n } else {\n // Use D3 ordinal color scale for categorical series\n const uniqueSeriesValues = [...new Set(data.map(item => String(item[seriesField!])))]\n const colorScale = scaleOrdinal<string>()\n .domain(uniqueSeriesValues)\n .range(colorPalette?.colors || CHART_COLORS)\n \n treemapData = data.map((item) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: colorScale(String(item[seriesField!])),\n series: String(item[seriesField!])\n }))\n }\n } else {\n // No series grouping - use index-based colors\n treemapData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }))\n }\n } else {\n // Legacy format or auto-detection\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find name/label field\n const nameField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('label') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find a numeric field for size - look for 'size' field first, then any numeric\n const sizeField = keys.find(key => key.toLowerCase().includes('size')) ||\n keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!sizeField) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">No numeric field found for treemap chart size</div>\n </div>\n </div>\n )\n }\n\n // Transform data for treemap chart\n treemapData = data.map((item, index) => {\n let name = item[nameField]\n // Handle boolean values with better labels\n if (typeof name === 'boolean') {\n name = name ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n } else {\n name = String(name)\n }\n return {\n name,\n size: typeof item[sizeField] === 'string' \n ? parseFloat(item[sizeField]) \n : (item[sizeField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }\n })\n }\n\n // Filter out zero/null values and ensure positive sizes\n treemapData = treemapData.filter(item => item.size != null && item.size > 0)\n \n if (treemapData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for treemap chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Custom content renderer for treemap cells with HTML overlays\n const CustomizedContent = (props: any) => {\n const { x, y, width, height, index, name, size } = props\n \n if (width < 20 || height < 20) return null // Don't render content for very small cells\n \n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n style={{\n fill: treemapData[index]?.fill || ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]),\n fillOpacity: hoveredIndex !== null ? (hoveredIndex === index ? 1 : 0.6) : 0.8,\n stroke: '#fff',\n strokeWidth: 2,\n cursor: 'pointer'\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n />\n <foreignObject \n x={x} \n y={y} \n width={width} \n height={height}\n style={{ pointerEvents: 'none', overflow: 'visible' }}\n >\n <div \n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n boxSizing: 'border-box',\n color: '#ffffff',\n textShadow: '0 1px 2px rgba(0,0,0,0.8)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'hidden'\n }}\n >\n {width > 40 && height > 30 && (\n <div \n style={{\n fontSize: `${Math.max(10, Math.min(width / 8, height / 8, 16))}px`,\n fontWeight: '600',\n textAlign: 'center',\n lineHeight: '1.2',\n marginBottom: width > 60 && height > 45 ? '4px' : '0',\n wordBreak: 'break-word',\n hyphens: 'auto'\n }}\n >\n {name}\n </div>\n )}\n {width > 60 && height > 45 && (\n <div \n style={{\n fontSize: `${Math.max(8, Math.min(width / 10, height / 10, 14))}px`,\n textAlign: 'center',\n opacity: 0.9\n }}\n >\n {typeof size === 'number' ? size.toLocaleString() : size}\n </div>\n )}\n </div>\n </foreignObject>\n </g>\n )\n }\n\n // Check if we have series data for legend\n const hasSeriesData = treemapData.some(item => 'series' in item)\n const uniqueSeries = hasSeriesData \n ? [...new Set(treemapData.map(item => item.series).filter(Boolean))]\n : []\n \n // For numeric series, create a legend showing the color scale\n let legendPayload: any[] = []\n if (safeDisplayConfig.showLegend && seriesField) {\n \n if (isNumericSeries) {\n // Create color scale legend for numeric values\n const minValue = Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n const maxValue = Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n \n \n // Create legend entries showing color scale\n legendPayload = CHART_COLORS_GRADIENT.map((color, index) => {\n const ratio = index / (CHART_COLORS_GRADIENT.length - 1)\n const value = minValue + (maxValue - minValue) * ratio\n return {\n value: value.toFixed(2),\n type: 'rect',\n color: color\n }\n })\n } else if (uniqueSeries.length > 1) {\n // Use categorical legend for non-numeric series\n legendPayload = uniqueSeries.map((series, index) => ({\n value: series,\n type: 'rect',\n color: CHART_COLORS[index % CHART_COLORS.length]\n }))\n }\n \n }\n\n // Calculate height adjustment for legend\n const hasLegend = safeDisplayConfig.showLegend && legendPayload.length > 0\n const adjustedHeight = hasLegend \n ? (typeof height === 'string' && height.includes('%') \n ? height \n : typeof height === 'number' \n ? height + 60 \n : `calc(${height} + 60px)`)\n : height\n\n return (\n <div className=\"w-full\" style={{ height: adjustedHeight }}>\n <ChartContainer height={hasLegend ? `calc(100% - 50px)` : \"100%\"}>\n <Treemap\n data={treemapData}\n dataKey=\"size\"\n aspectRatio={4/3}\n stroke=\"#fff\"\n content={<CustomizedContent />}\n >\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip />\n )}\n </Treemap>\n </ChartContainer>\n \n {/* Custom Legend outside ChartContainer */}\n {hasLegend && (\n <div className=\"flex justify-center items-center mt-4 pb-2\">\n {isNumericSeries ? (\n // Gradient legend for numeric series\n <div className=\"flex flex-col items-center\">\n <div className=\"text-xs font-semibold text-dc-text-primary mb-2\">\n {seriesField ? getFieldLabel(seriesField) : ''}\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-dc-text-muted\">\n {Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)}\n </span>\n <div\n className=\"h-4 rounded-sm\"\n style={{\n width: '200px',\n background: `linear-gradient(to right, ${CHART_COLORS_GRADIENT.join(', ')})`\n }}\n />\n <span className=\"text-xs text-dc-text-muted\">\n {Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)}\n </span>\n </div>\n </div>\n ) : (\n // Discrete legend for categorical series\n <div className=\"flex flex-wrap justify-center gap-4\">\n {legendPayload.map((item, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-xs\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"text-xs text-dc-text-muted\">\n {item.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'TreeMapChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">TreeMap Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}","/**\n * Simple Data Table component\n * Minimal styling with Tailwind\n */\n\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function DataTable({ \n data, \n chartConfig,\n height = 300 \n}: ChartProps) {\n const { getFieldLabel } = useCubeContext()\n \n if (!data || data.length === 0) {\n return (\n <div\n className=\"flex items-center justify-center w-full\"\n style={{ height }}\n >\n <div className=\"text-center text-dc-text-muted\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data to display in table</div>\n </div>\n </div>\n )\n }\n\n // Use chartConfig.xAxis to filter columns, or show all if not specified\n const allColumns = Object.keys(data[0] || {})\n const columns = chartConfig?.xAxis && chartConfig.xAxis.length > 0 \n ? chartConfig.xAxis.filter(col => allColumns.includes(col))\n : allColumns\n\n if (columns.length === 0) {\n return (\n <div\n className=\"flex items-center justify-center w-full\"\n style={{ height }}\n >\n <div className=\"text-center text-dc-text-muted\">\n <div className=\"text-sm font-semibold mb-1\">No columns available</div>\n <div className=\"text-xs text-dc-text-secondary\">Data structure is invalid</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"w-full overflow-auto\" style={{ height }}>\n <table className=\"min-w-full divide-y border-dc-border\">\n <thead className=\"bg-dc-surface-secondary sticky top-0\">\n <tr>\n {columns.map((column) => (\n <th\n key={column}\n className=\"px-3 py-2 text-left text-xs font-medium text-dc-text-muted uppercase tracking-wider\"\n >\n {getFieldLabel(column)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"bg-dc-surface divide-y border-dc-border\">\n {data.map((row, index) => (\n <tr key={index} className=\"hover:bg-dc-surface-secondary\">\n {columns.map((column) => (\n <td\n key={column}\n className=\"px-3 py-2 whitespace-nowrap text-sm text-dc-text\"\n >\n {formatCellValue(row[column])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction formatCellValue(value: any): string {\n if (value == null) return ''\n if (typeof value === 'number') {\n return value.toLocaleString()\n }\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No'\n }\n return String(value)\n}","/**\n * Utility functions for drizzle-cube client\n */\n\nimport type { PortletConfig, DashboardConfig } from '../types'\n\n// Re-export chart utilities\nexport * from './chartUtils'\nexport * from './chartConstants'\nexport * from './measureIcons'\nexport * from './periodUtils'\n\n/**\n * Create a dashboard layout from portlet configurations\n */\nexport function createDashboardLayout(portlets: PortletConfig[]): DashboardConfig {\n const layouts = generateResponsiveLayouts(portlets)\n \n return {\n portlets,\n layouts\n }\n}\n\n/**\n * Generate responsive layouts for different breakpoints\n */\nexport function generateResponsiveLayouts(portlets: PortletConfig[]) {\n const gridLayout = portlets.map(portlet => ({\n i: portlet.id,\n x: portlet.x,\n y: portlet.y,\n w: portlet.w,\n h: portlet.h,\n minW: 3,\n minH: 3\n }))\n\n return {\n lg: gridLayout,\n md: gridLayout.map(item => ({ ...item, w: Math.min(item.w, 8) })),\n sm: gridLayout.map(item => ({ ...item, w: Math.min(item.w, 6) })),\n xs: gridLayout.map(item => ({ ...item, w: Math.min(item.w, 4) })),\n xxs: gridLayout.map(item => ({ ...item, w: 2 }))\n }\n}\n\n/**\n * Format chart data for display\n */\nexport function formatChartData(data: any[], options: {\n formatNumbers?: boolean\n precision?: number\n} = {}): any[] {\n const { formatNumbers = true, precision = 2 } = options\n\n if (!formatNumbers) return data\n\n return data.map(row => {\n const formattedRow: any = {}\n \n for (const [key, value] of Object.entries(row)) {\n if (typeof value === 'number') {\n formattedRow[key] = Number(value.toFixed(precision))\n } else {\n formattedRow[key] = value\n }\n }\n \n return formattedRow\n })\n}\n\n/**\n * Generate a unique ID for new portlets\n */\nexport function generatePortletId(): string {\n return `portlet-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n}\n\n/**\n * Find the next available position in a grid\n */\nexport function findNextPosition(existingPortlets: PortletConfig[], _w: number = 6, _h: number = 4): { x: number; y: number } {\n if (existingPortlets.length === 0) {\n return { x: 0, y: 0 }\n }\n\n // Find the maximum Y position and height\n const maxY = Math.max(...existingPortlets.map(p => p.y + p.h))\n \n return { x: 0, y: maxY }\n}\n\n/**\n * Validate a cube query JSON string\n */\nexport function validateCubeQuery(queryString: string): { valid: boolean; error?: string; query?: any } {\n try {\n const query = JSON.parse(queryString)\n \n // Basic validation\n if (typeof query !== 'object' || query === null) {\n return { valid: false, error: 'Query must be a JSON object' }\n }\n\n // Check for required fields\n if (!query.measures && !query.dimensions) {\n return { valid: false, error: 'Query must have at least measures or dimensions' }\n }\n\n return { valid: true, query }\n } catch (error) {\n return { valid: false, error: 'Invalid JSON format' }\n }\n}\n\n/**\n * Create a sample portlet configuration\n */\nexport function createSamplePortlet(): Omit<PortletConfig, 'id'> {\n return {\n title: 'Sample Chart',\n query: JSON.stringify({\n measures: ['count'],\n dimensions: ['category']\n }, null, 2),\n chartType: 'bar',\n chartConfig: {\n x: 'category',\n y: ['count']\n },\n displayConfig: {\n showLegend: true,\n showGrid: true,\n showTooltip: true\n },\n w: 6,\n h: 4,\n x: 0,\n y: 0\n }\n}"],"names":["ChartContainer","children","height","containerRef","useRef","isReady","setIsReady","useState","containerSize","setContainerSize","useLayoutEffect","mounted","resizeObserver","measureAndSetReady","rect","width","entries","entry","jsx","ResponsiveContainer","containerStyle","error","jsxs","isValidNumericValue","value","parseNumericValue","num","formatNumericValue","getFieldLabel","fieldName","labelMap","formatTimeValue","granularity","str","isoStr","date","year","month","day","hours","minutes","quarter","seconds","milliseconds","getFieldGranularity","queryObject","timeDim","td","granularityMatch","suffix","transformChartData","data","xAxisField","yAxisFields","row","transformed","field","displayName","transformChartDataWithSeries","seriesFields","originalQuery","queryDimensions","queryMeasures","yAxisMeasures","yAxisDimensions","groupedData","xValue","measure","measureValue","currentValue","dimension","dimValue","seriesName","measureToAggregate","m","chartData","dimensionSeries","seriesKeys","defaultFormatter","name","ChartTooltip","formatter","labelFormatter","Tooltip","CHART_COLORS","CHART_COLORS_GRADIENT","POSITIVE_COLOR","NEGATIVE_COLOR","CHART_MARGINS","parseTargetValues","targetString","trimmed","values","val","spreadTargetValues","targets","dataLength","result","baseGroupSize","remainder","currentIndex","i","groupSize","j","calculateVariance","actual","target","formatVariance","variance","decimals","BarChart","chartConfig","displayConfig","colorPalette","hoveredLegend","setHoveredLegend","contextGetFieldLabel","useCubeContext","stackType","shouldStack","isPercentStack","safeDisplayConfig","transformedData","skippedCount","useMemo","filtered","key","skipped","stackOffset","usePositiveNegativeColoring","showLegend","chartMargins","targetValues","spreadTargets","enhancedChartData","dataPoint","index","ComposedChart","CartesianGrid","XAxis","YAxis","v","Legend","o","seriesKey","Bar","entryIndex","fillColor","Cell","Fragment","Line","LineChart","RechartsLineChart","AreaChart","Area","PieChart","pieData","firstRow","item","originalLength","RechartsPieChart","Pie","percent","_entry","ScatterChart","yAxisField","seriesConfig","timeDimensionFields","scatterData","seriesGroups","seriesField","seriesValue","xGranularity","yValue","xNum","timeValues","point","hasSeries","RechartsScatterChart","active","payload","Scatter","RadarChart","radarData","transformedSeriesKeys","keys","subjectField","valueFields","transformedItem","RechartsRadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","Radar","RadialBarChart","radialData","nameField","valueField","RechartsRadialBarChart","RadialBar","ascending","a","b","descending","bisector","f","compare1","compare2","delta","d","x","zero","left","lo","hi","mid","right","center","number","ascendingBisect","bisectRight","InternMap","keyof","intern_get","intern_set","intern_delete","_intern","_key","e10","e5","e2","tickSpec","start","stop","count","step","power","factor","i1","i2","inc","ticks","reverse","n","tickIncrement","tickStep","define","constructor","factory","prototype","extend","parent","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","rgb","opacity","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","min","max","hsl","m2","m1","hsl2rgb","clamph","clampt","constant","linear","t","exponential","y","gamma","nogamma","interpolateRgb","rgbGamma","end","colorRgb","numberArray","c","isNumberArray","genericArray","nb","na","interpolateNumber","object","reA","reB","one","interpolateString","bi","am","bm","bs","q","interpolate","string","interpolateRound","formatDecimal","formatDecimalParts","p","coefficient","exponent","formatGroup","grouping","thousands","length","formatNumerals","numerals","re","formatSpecifier","specifier","match","FormatSpecifier","formatTrim","out","i0","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$1","map","prefixes","formatLocale","locale","group","identity","currencyPrefix","currencySuffix","decimal","minus","nan","newFormat","fill","align","sign","symbol","comma","precision","trim","type","prefix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","e","defaultLocale","precisionFixed","precisionPrefix","precisionRound","initRange","domain","range","implicit","ordinal","unknown","scale","_","constants","unit","normalize","clamper","bimap","d0","d1","r0","r1","polymap","bisect","copy","source","transformer","interpolateValue","transform","untransform","clamp","piecewise","output","input","rescale","u","continuous","tickFormat","linearish","prestep","maxIter","quantize","x0","x1","TreeMapChart","hoveredIndex","setHoveredIndex","treemapData","isNumericSeries","seriesValues","minValue","maxValue","colorScale","scaleQuantize","uniqueSeriesValues","scaleOrdinal","sizeField","CustomizedContent","props","size","uniqueSeries","legendPayload","ratio","series","hasLegend","adjustedHeight","Treemap","DataTable","allColumns","columns","col","column","formatCellValue","createDashboardLayout","portlets","layouts","generateResponsiveLayouts","gridLayout","portlet","formatChartData","options","formatNumbers","formattedRow","generatePortletId","findNextPosition","existingPortlets","_w","_h","validateCubeQuery","queryString","query","createSamplePortlet"],"mappings":"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","x_google_ignoreList":[12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54]}
|