drizzle-cube 0.4.16 → 0.4.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/adapters/express/index.cjs +1 -1
  2. package/dist/adapters/express/index.js +1 -1
  3. package/dist/adapters/fastify/index.cjs +1 -1
  4. package/dist/adapters/fastify/index.js +1 -1
  5. package/dist/adapters/{handler-BmTtVoRu.js → handler-DefTXJpi.js} +442 -309
  6. package/dist/adapters/handler-hwoGzGex.cjs +33 -0
  7. package/dist/adapters/hono/index.cjs +1 -1
  8. package/dist/adapters/hono/index.js +1 -1
  9. package/dist/adapters/nextjs/index.cjs +1 -1
  10. package/dist/adapters/nextjs/index.js +1 -1
  11. package/dist/client/charts.js +2 -2
  12. package/dist/client/chunks/{analysis-builder-C5e52Z3p.js → analysis-builder-3z9fHE2F.js} +5 -5
  13. package/dist/client/chunks/{analysis-builder-C5e52Z3p.js.map → analysis-builder-3z9fHE2F.js.map} +1 -1
  14. package/dist/client/chunks/{analysis-builder-shared-EnM-8plh.js → analysis-builder-shared-Da-vlQa_.js} +2 -2
  15. package/dist/client/chunks/{analysis-builder-shared-EnM-8plh.js.map → analysis-builder-shared-Da-vlQa_.js.map} +1 -1
  16. package/dist/client/chunks/{chart-data-table-D5G8nMnb.js → chart-data-table-BsAjHe7o.js} +2 -2
  17. package/dist/client/chunks/{chart-data-table-D5G8nMnb.js.map → chart-data-table-BsAjHe7o.js.map} +1 -1
  18. package/dist/client/chunks/{chart-kpi-delta-Dgg2eYRl.js → chart-kpi-delta-DUD3f8vL.js} +3 -3
  19. package/dist/client/chunks/{chart-kpi-delta-Dgg2eYRl.js.map → chart-kpi-delta-DUD3f8vL.js.map} +1 -1
  20. package/dist/client/chunks/{chart-kpi-number-DkoO99c1.js → chart-kpi-number-iJh-PzsM.js} +2 -2
  21. package/dist/client/chunks/{chart-kpi-number-DkoO99c1.js.map → chart-kpi-number-iJh-PzsM.js.map} +1 -1
  22. package/dist/client/chunks/{chart-kpi-text-1O6_lmz7.js → chart-kpi-text-x6pV9v9Q.js} +2 -2
  23. package/dist/client/chunks/{chart-kpi-text-1O6_lmz7.js.map → chart-kpi-text-x6pV9v9Q.js.map} +1 -1
  24. package/dist/client/chunks/{charts-loader-AW3T1nv5.js → charts-loader-B3tt5oKG.js} +5 -5
  25. package/dist/client/chunks/{charts-loader-AW3T1nv5.js.map → charts-loader-B3tt5oKG.js.map} +1 -1
  26. package/dist/client/chunks/{components-BkeSy9xv.js → components-CMGGxqOB.js} +4 -4
  27. package/dist/client/chunks/{components-BkeSy9xv.js.map → components-CMGGxqOB.js.map} +1 -1
  28. package/dist/client/chunks/{icons-DAeqv1iX.js → icons-M7shurcH.js} +172 -160
  29. package/dist/client/chunks/icons-M7shurcH.js.map +1 -0
  30. package/dist/client/components/AgenticNotebook/AgentChatPanel.d.ts +6 -0
  31. package/dist/client/components/AgenticNotebook/index.d.ts +6 -0
  32. package/dist/client/components.js +1 -1
  33. package/dist/client/hooks/useAgentChat.d.ts +2 -2
  34. package/dist/client/icons/types.d.ts +2 -0
  35. package/dist/client/icons.js +1 -1
  36. package/dist/client/index.js +707 -675
  37. package/dist/client/index.js.map +1 -1
  38. package/dist/client/utils.js +3 -3
  39. package/dist/client-bundle-stats.html +1 -1
  40. package/dist/server/index.cjs +49 -41
  41. package/dist/server/index.d.ts +45 -0
  42. package/dist/server/index.js +2795 -2662
  43. package/package.json +1 -1
  44. package/dist/adapters/handler-B6yAJw_O.cjs +0 -25
  45. package/dist/client/chunks/icons-DAeqv1iX.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chart-kpi-text-1O6_lmz7.js","sources":["../../../src/client/components/charts/KpiText.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport DataHistogram from '../DataHistogram'\nimport type { ChartProps } from '../../types'\n\nconst KpiText = React.memo(function KpiText({ \n data, \n chartConfig, \n displayConfig = {},\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [fontSize, setFontSize] = useState(28)\n const [textWidth, setTextWidth] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const textRef = useRef<HTMLDivElement>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n\n // Calculate font size and text width based on container dimensions\n useEffect(() => {\n const updateDimensions = () => {\n if (containerRef.current) {\n const container = containerRef.current\n const rect = container.getBoundingClientRect()\n const containerWidth = rect.width\n const containerHeight = rect.height\n \n if (containerWidth > 0 && containerHeight > 0) {\n // Calculate font size based on container dimensions\n // For KPI Text displays, text might be longer so use more conservative sizing\n // Also reserve space for potential statistics display\n const widthBasedSize = containerWidth / 8\n const heightBasedSize = containerHeight / 5\n const baseFontSize = Math.min(widthBasedSize, heightBasedSize)\n const clampedFontSize = Math.max(18, Math.min(baseFontSize, 80))\n setFontSize(clampedFontSize)\n }\n }\n \n // Measure the text width after font size is set\n if (textRef.current) {\n const textRect = textRef.current.getBoundingClientRect()\n setTextWidth(textRect.width)\n }\n }\n\n // Initial calculation after a short delay to ensure the container is fully rendered\n const timer = setTimeout(updateDimensions, 100)\n \n const resizeObserver = new ResizeObserver(() => {\n // Debounce the resize updates\n clearTimeout(timer)\n setTimeout(updateDimensions, 50)\n })\n \n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n return () => {\n clearTimeout(timer)\n resizeObserver.disconnect()\n }\n }, [data, chartConfig])\n\n if (!data || data.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined\n }}\n >\n <div className=\"dc:text-center text-dc-text-muted\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display</div>\n </div>\n </div>\n )\n }\n\n // Extract value field from chart config - handle both string and array formats\n let valueFields: string[] = []\n if (chartConfig?.yAxis) {\n // Handle both string and array formats\n if (typeof chartConfig.yAxis === 'string') {\n valueFields = [chartConfig.yAxis]\n } else if (Array.isArray(chartConfig.yAxis)) {\n valueFields = chartConfig.yAxis\n }\n }\n \n \n if (valueFields.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined,\n backgroundColor: 'var(--dc-danger-bg)',\n color: 'var(--dc-danger)',\n borderColor: 'var(--dc-danger-border)'\n }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">No measure fields configured</div>\n </div>\n </div>\n )\n }\n\n const valueField = valueFields[0] // Use first measure field\n \n // Debug logging (remove in production)\n \n // Extract values for the selected field\n const values = data\n .map(row => {\n // Try direct field access first\n if (row[valueField] !== undefined) {\n return row[valueField]\n }\n \n // If not found, try finding the first available field as fallback\n const availableFields = Object.keys(row)\n if (availableFields.length > 0) {\n // Field not found, using fallback\n return row[availableFields[0]]\n }\n \n return undefined\n })\n .filter(val => val !== null && val !== undefined)\n \n\n if (values.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined,\n backgroundColor: 'var(--dc-warning-bg)',\n color: 'var(--dc-warning)',\n borderColor: 'var(--dc-warning-border)'\n }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc:text-xs\">All values are null or invalid</div>\n </div>\n </div>\n )\n }\n\n // Calculate statistics for numeric values\n const numericValues = values\n .map(val => Number(val))\n .filter(val => !isNaN(val))\n\n let mainValue: any\n let min: number | null = null\n let max: number | null = null\n let showStats = false\n\n if (numericValues.length > 0) {\n if (values.length === 1) {\n mainValue = values[0]\n } else {\n // Calculate average for multiple numeric values\n const sum = numericValues.reduce((acc, val) => acc + val, 0)\n const avg = sum / numericValues.length\n mainValue = avg\n min = Math.min(...numericValues)\n max = Math.max(...numericValues)\n showStats = true\n }\n } else {\n // Non-numeric values - just use the first one or concatenate if multiple\n mainValue = values.length === 1 ? values[0] : values.join(', ')\n }\n\n // Format number with appropriate units and decimals\n const formatNumber = (value: number | null | undefined): string => {\n // If custom formatValue is provided, use it exclusively\n if (displayConfig.formatValue) {\n return displayConfig.formatValue(value)\n }\n\n // Null handling: Show placeholder for missing data\n if (value === null || value === undefined) {\n return '—'\n }\n\n const decimals = displayConfig.decimals ?? 2\n\n if (Math.abs(value) >= 1e9) {\n return (value / 1e9).toFixed(decimals) + 'B'\n } else if (Math.abs(value) >= 1e6) {\n return (value / 1e6).toFixed(decimals) + 'M'\n } else if (Math.abs(value) >= 1e3) {\n return (value / 1e3).toFixed(decimals) + 'K'\n } else {\n return value.toFixed(decimals)\n }\n }\n\n // Process template string\n const processTemplate = (template: string, value: any): string => {\n try {\n // Create template variables\n const templateVars = {\n value: typeof value === 'number' ? formatNumber(value) : String(value),\n rawValue: value,\n field: valueField,\n fieldLabel: getFieldLabel(valueField),\n min: min !== null ? formatNumber(min) : '',\n max: max !== null ? formatNumber(max) : '',\n count: values.length\n }\n\n // Simple template replacement using ${variable} syntax\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, varName) => {\n if (varName in templateVars) {\n return String(templateVars[varName as keyof typeof templateVars])\n }\n return match\n })\n } catch {\n // Error processing template\n return String(value)\n }\n }\n\n const template = displayConfig.template || '${fieldLabel}: ${value}'\n const displayText = processTemplate(template, mainValue)\n\n // Get color from palette by index, default to first color in palette\n const getValueColor = (): string => {\n if (displayConfig.valueColorIndex !== undefined && colorPalette?.colors) {\n const colorIndex = displayConfig.valueColorIndex\n if (colorIndex >= 0 && colorIndex < colorPalette.colors.length) {\n return colorPalette.colors[colorIndex]\n }\n }\n // Default to first color in palette if available, otherwise fallback to dark gray\n return colorPalette?.colors?.[0] || '#1f2937'\n }\n\n const valueColor = getValueColor()\n\n return (\n <div \n ref={containerRef}\n className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full dc:h-full dc:p-4\"\n style={{ \n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined\n }}\n >\n {/* Main KPI Text */}\n <div \n ref={textRef}\n className=\"dc:font-bold dc:leading-tight dc:text-center\"\n style={{ \n fontSize: `${fontSize}px`,\n color: valueColor \n }}\n >\n {displayText}\n </div>\n\n {/* Data Histogram for multiple values */}\n {showStats && min !== null && max !== null && (\n <div className=\"dc:mt-4\">\n <DataHistogram\n values={values}\n min={min}\n max={max}\n color={valueColor}\n formatValue={formatNumber}\n height={24}\n width={textWidth || 200}\n />\n </div>\n )}\n </div>\n )\n})\n\nexport default KpiText"],"names":["KpiText","React","data","chartConfig","displayConfig","height","colorPalette","fontSize","setFontSize","useState","textWidth","setTextWidth","containerRef","useRef","textRef","getFieldLabel","useCubeFieldLabel","useEffect","updateDimensions","rect","containerWidth","containerHeight","widthBasedSize","heightBasedSize","baseFontSize","clampedFontSize","textRect","timer","resizeObserver","jsx","jsxs","valueFields","valueField","values","row","availableFields","val","numericValues","mainValue","min","max","showStats","acc","formatNumber","value","decimals","processTemplate","template","templateVars","match","varName","displayText","valueColor","colorIndex","DataHistogram"],"mappings":"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"}
1
+ {"version":3,"file":"chart-kpi-text-x6pV9v9Q.js","sources":["../../../src/client/components/charts/KpiText.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport DataHistogram from '../DataHistogram'\nimport type { ChartProps } from '../../types'\n\nconst KpiText = React.memo(function KpiText({ \n data, \n chartConfig, \n displayConfig = {},\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [fontSize, setFontSize] = useState(28)\n const [textWidth, setTextWidth] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const textRef = useRef<HTMLDivElement>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n\n // Calculate font size and text width based on container dimensions\n useEffect(() => {\n const updateDimensions = () => {\n if (containerRef.current) {\n const container = containerRef.current\n const rect = container.getBoundingClientRect()\n const containerWidth = rect.width\n const containerHeight = rect.height\n \n if (containerWidth > 0 && containerHeight > 0) {\n // Calculate font size based on container dimensions\n // For KPI Text displays, text might be longer so use more conservative sizing\n // Also reserve space for potential statistics display\n const widthBasedSize = containerWidth / 8\n const heightBasedSize = containerHeight / 5\n const baseFontSize = Math.min(widthBasedSize, heightBasedSize)\n const clampedFontSize = Math.max(18, Math.min(baseFontSize, 80))\n setFontSize(clampedFontSize)\n }\n }\n \n // Measure the text width after font size is set\n if (textRef.current) {\n const textRect = textRef.current.getBoundingClientRect()\n setTextWidth(textRect.width)\n }\n }\n\n // Initial calculation after a short delay to ensure the container is fully rendered\n const timer = setTimeout(updateDimensions, 100)\n \n const resizeObserver = new ResizeObserver(() => {\n // Debounce the resize updates\n clearTimeout(timer)\n setTimeout(updateDimensions, 50)\n })\n \n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n return () => {\n clearTimeout(timer)\n resizeObserver.disconnect()\n }\n }, [data, chartConfig])\n\n if (!data || data.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined\n }}\n >\n <div className=\"dc:text-center text-dc-text-muted\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display</div>\n </div>\n </div>\n )\n }\n\n // Extract value field from chart config - handle both string and array formats\n let valueFields: string[] = []\n if (chartConfig?.yAxis) {\n // Handle both string and array formats\n if (typeof chartConfig.yAxis === 'string') {\n valueFields = [chartConfig.yAxis]\n } else if (Array.isArray(chartConfig.yAxis)) {\n valueFields = chartConfig.yAxis\n }\n }\n \n \n if (valueFields.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined,\n backgroundColor: 'var(--dc-danger-bg)',\n color: 'var(--dc-danger)',\n borderColor: 'var(--dc-danger-border)'\n }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">No measure fields configured</div>\n </div>\n </div>\n )\n }\n\n const valueField = valueFields[0] // Use first measure field\n \n // Debug logging (remove in production)\n \n // Extract values for the selected field\n const values = data\n .map(row => {\n // Try direct field access first\n if (row[valueField] !== undefined) {\n return row[valueField]\n }\n \n // If not found, try finding the first available field as fallback\n const availableFields = Object.keys(row)\n if (availableFields.length > 0) {\n // Field not found, using fallback\n return row[availableFields[0]]\n }\n \n return undefined\n })\n .filter(val => val !== null && val !== undefined)\n \n\n if (values.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined,\n backgroundColor: 'var(--dc-warning-bg)',\n color: 'var(--dc-warning)',\n borderColor: 'var(--dc-warning-border)'\n }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc:text-xs\">All values are null or invalid</div>\n </div>\n </div>\n )\n }\n\n // Calculate statistics for numeric values\n const numericValues = values\n .map(val => Number(val))\n .filter(val => !isNaN(val))\n\n let mainValue: any\n let min: number | null = null\n let max: number | null = null\n let showStats = false\n\n if (numericValues.length > 0) {\n if (values.length === 1) {\n mainValue = values[0]\n } else {\n // Calculate average for multiple numeric values\n const sum = numericValues.reduce((acc, val) => acc + val, 0)\n const avg = sum / numericValues.length\n mainValue = avg\n min = Math.min(...numericValues)\n max = Math.max(...numericValues)\n showStats = true\n }\n } else {\n // Non-numeric values - just use the first one or concatenate if multiple\n mainValue = values.length === 1 ? values[0] : values.join(', ')\n }\n\n // Format number with appropriate units and decimals\n const formatNumber = (value: number | null | undefined): string => {\n // If custom formatValue is provided, use it exclusively\n if (displayConfig.formatValue) {\n return displayConfig.formatValue(value)\n }\n\n // Null handling: Show placeholder for missing data\n if (value === null || value === undefined) {\n return '—'\n }\n\n const decimals = displayConfig.decimals ?? 2\n\n if (Math.abs(value) >= 1e9) {\n return (value / 1e9).toFixed(decimals) + 'B'\n } else if (Math.abs(value) >= 1e6) {\n return (value / 1e6).toFixed(decimals) + 'M'\n } else if (Math.abs(value) >= 1e3) {\n return (value / 1e3).toFixed(decimals) + 'K'\n } else {\n return value.toFixed(decimals)\n }\n }\n\n // Process template string\n const processTemplate = (template: string, value: any): string => {\n try {\n // Create template variables\n const templateVars = {\n value: typeof value === 'number' ? formatNumber(value) : String(value),\n rawValue: value,\n field: valueField,\n fieldLabel: getFieldLabel(valueField),\n min: min !== null ? formatNumber(min) : '',\n max: max !== null ? formatNumber(max) : '',\n count: values.length\n }\n\n // Simple template replacement using ${variable} syntax\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, varName) => {\n if (varName in templateVars) {\n return String(templateVars[varName as keyof typeof templateVars])\n }\n return match\n })\n } catch {\n // Error processing template\n return String(value)\n }\n }\n\n const template = displayConfig.template || '${fieldLabel}: ${value}'\n const displayText = processTemplate(template, mainValue)\n\n // Get color from palette by index, default to first color in palette\n const getValueColor = (): string => {\n if (displayConfig.valueColorIndex !== undefined && colorPalette?.colors) {\n const colorIndex = displayConfig.valueColorIndex\n if (colorIndex >= 0 && colorIndex < colorPalette.colors.length) {\n return colorPalette.colors[colorIndex]\n }\n }\n // Default to first color in palette if available, otherwise fallback to dark gray\n return colorPalette?.colors?.[0] || '#1f2937'\n }\n\n const valueColor = getValueColor()\n\n return (\n <div \n ref={containerRef}\n className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full dc:h-full dc:p-4\"\n style={{ \n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined\n }}\n >\n {/* Main KPI Text */}\n <div \n ref={textRef}\n className=\"dc:font-bold dc:leading-tight dc:text-center\"\n style={{ \n fontSize: `${fontSize}px`,\n color: valueColor \n }}\n >\n {displayText}\n </div>\n\n {/* Data Histogram for multiple values */}\n {showStats && min !== null && max !== null && (\n <div className=\"dc:mt-4\">\n <DataHistogram\n values={values}\n min={min}\n max={max}\n color={valueColor}\n formatValue={formatNumber}\n height={24}\n width={textWidth || 200}\n />\n </div>\n )}\n </div>\n )\n})\n\nexport default KpiText"],"names":["KpiText","React","data","chartConfig","displayConfig","height","colorPalette","fontSize","setFontSize","useState","textWidth","setTextWidth","containerRef","useRef","textRef","getFieldLabel","useCubeFieldLabel","useEffect","updateDimensions","rect","containerWidth","containerHeight","widthBasedSize","heightBasedSize","baseFontSize","clampedFontSize","textRect","timer","resizeObserver","jsx","jsxs","valueFields","valueField","values","row","availableFields","val","numericValues","mainValue","min","max","showStats","acc","formatNumber","value","decimals","processTemplate","template","templateVars","match","varName","displayText","valueColor","colorIndex","DataHistogram"],"mappings":"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"}
@@ -156,11 +156,11 @@ const l = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), f = {
156
156
  radialBar: () => import("./chart-radial-bar-DpptEL3s.js"),
157
157
  treemap: () => import("./chart-tree-map-CBbiaBXV.js"),
158
158
  bubble: () => import("./chart-bubble-CemotLx-.js").then((a) => a.B),
159
- table: () => import("./chart-data-table-D5G8nMnb.js").then((a) => a.b),
159
+ table: () => import("./chart-data-table-BsAjHe7o.js").then((a) => a.b),
160
160
  activityGrid: () => import("./chart-activity-grid-CPGcTSuh.js"),
161
- kpiNumber: () => import("./chart-kpi-number-DkoO99c1.js").then((a) => a.K),
162
- kpiDelta: () => import("./chart-kpi-delta-Dgg2eYRl.js"),
163
- kpiText: () => import("./chart-kpi-text-1O6_lmz7.js"),
161
+ kpiNumber: () => import("./chart-kpi-number-iJh-PzsM.js").then((a) => a.K),
162
+ kpiDelta: () => import("./chart-kpi-delta-DUD3f8vL.js"),
163
+ kpiText: () => import("./chart-kpi-text-x6pV9v9Q.js"),
164
164
  markdown: () => import("./chart-markdown-Du4Z2iqK.js").then((a) => a.a),
165
165
  funnel: () => import("./chart-funnel-dofnhD24.js"),
166
166
  sankey: () => import("./chart-sankey-CG-3hHmX.js"),
@@ -255,4 +255,4 @@ export {
255
255
  v as i,
256
256
  k as p
257
257
  };
258
- //# sourceMappingURL=charts-loader-AW3T1nv5.js.map
258
+ //# sourceMappingURL=charts-loader-B3tt5oKG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts-loader-AW3T1nv5.js","sources":["../../../src/client/components/charts/MissingDependencyFallback.tsx","../../../src/client/charts/ChartLoader.tsx"],"sourcesContent":["interface MissingDependencyFallbackProps {\n chartType: string\n packageName: string\n installCommand: string\n height?: string | number\n}\n\n/**\n * Fallback component shown when a chart's optional dependency is not installed.\n * Provides clear instructions on how to install the missing package.\n */\nexport function MissingDependencyFallback({\n chartType,\n packageName,\n installCommand,\n height = 200\n}: MissingDependencyFallbackProps) {\n return (\n <div\n className=\"dc-missing-dependency-fallback\"\n style={{\n height: typeof height === 'number' ? `${height}px` : height,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n padding: '1.5rem',\n textAlign: 'center',\n border: '1px dashed var(--dc-border, #e5e7eb)',\n borderRadius: '0.5rem',\n backgroundColor: 'var(--dc-surface, #f9fafb)'\n }}\n >\n <div style={{ fontSize: '2.5rem', marginBottom: '1rem' }}>📦</div>\n <h3 style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n marginBottom: '0.5rem',\n color: 'var(--dc-text, #111827)'\n }}>\n Missing Dependency\n </h3>\n <p style={{\n fontSize: '0.875rem',\n color: 'var(--dc-text-secondary, #6b7280)',\n marginBottom: '1rem',\n maxWidth: '28rem'\n }}>\n The <code style={{\n padding: '0.125rem 0.375rem',\n backgroundColor: 'var(--dc-surface-secondary, #f3f4f6)',\n borderRadius: '0.25rem',\n fontFamily: 'monospace',\n fontSize: '0.75rem'\n }}>{chartType}</code> chart requires the <code style={{\n padding: '0.125rem 0.375rem',\n backgroundColor: 'var(--dc-surface-secondary, #f3f4f6)',\n borderRadius: '0.25rem',\n fontFamily: 'monospace',\n fontSize: '0.75rem'\n }}>{packageName}</code> package.\n </p>\n <div style={{\n backgroundColor: 'var(--dc-surface-secondary, #f3f4f6)',\n borderRadius: '0.5rem',\n padding: '0.75rem 1rem',\n fontFamily: 'monospace',\n fontSize: '0.875rem',\n color: 'var(--dc-text, #111827)'\n }}>\n <span style={{\n color: 'var(--dc-text-muted, #9ca3af)',\n userSelect: 'none'\n }}>$ </span>\n {installCommand}\n </div>\n <p style={{\n fontSize: '0.75rem',\n color: 'var(--dc-text-muted, #9ca3af)',\n marginTop: '0.75rem'\n }}>\n After installing, restart your development server.\n </p>\n </div>\n )\n}\n","/**\n * Lazy Chart Loader\n *\n * Provides React.lazy-based dynamic loading for chart components.\n * This enables code splitting - each chart type loads only when needed.\n *\n * Handles missing optional dependencies gracefully by showing a fallback\n * component instead of crashing the application.\n */\n\nimport { lazy, Suspense, ComponentType, ReactNode, LazyExoticComponent } from 'react'\nimport type { ChartType, ChartProps } from '../types'\nimport { MissingDependencyFallback } from '../components/charts/MissingDependencyFallback'\n\n// Type for lazy-loaded chart components\ntype LazyChartComponent = ComponentType<ChartProps>\n\n// Chart loader cache to prevent re-creating lazy components\nconst chartLoaderCache = new Map<ChartType, LazyExoticComponent<LazyChartComponent>>()\n\n// Track which chart types have failed to load due to missing dependencies\nconst failedChartTypes = new Set<ChartType>()\n\n/**\n * Maps chart types to their optional peer dependencies.\n * Charts not listed here have no external dependencies (table, KPIs, markdown).\n */\nconst chartDependencyMap: Partial<Record<ChartType, { packageName: string; installCommand: string }>> = {\n // Recharts-based charts\n bar: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n line: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n area: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n pie: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n scatter: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n radar: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n radialBar: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n treemap: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n bubble: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n funnel: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n sankey: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n sunburst: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n // Nivo-based charts\n heatmap: {\n packageName: '@nivo/heatmap',\n installCommand: 'npm install @nivo/heatmap'\n },\n waterfall: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n measureProfile: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n gauge: {\n packageName: 'd3-shape',\n installCommand: 'npm install d3-shape'\n },\n // Charts with no external deps: table, activityGrid, kpiNumber, kpiDelta, kpiText, markdown, retentionHeatmap, boxPlot, candlestick\n}\n\n// Dynamic import functions for each chart type\nconst chartImportMap: Record<ChartType, () => Promise<{ default: LazyChartComponent }>> = {\n bar: () => import('../components/charts/BarChart'),\n line: () => import('../components/charts/LineChart'),\n area: () => import('../components/charts/AreaChart'),\n pie: () => import('../components/charts/PieChart'),\n scatter: () => import('../components/charts/ScatterChart'),\n radar: () => import('../components/charts/RadarChart'),\n radialBar: () => import('../components/charts/RadialBarChart'),\n treemap: () => import('../components/charts/TreeMapChart'),\n bubble: () => import('../components/charts/BubbleChart'),\n table: () => import('../components/charts/DataTable'),\n activityGrid: () => import('../components/charts/ActivityGridChart'),\n kpiNumber: () => import('../components/charts/KpiNumber'),\n kpiDelta: () => import('../components/charts/KpiDelta'),\n kpiText: () => import('../components/charts/KpiText'),\n markdown: () => import('../components/charts/MarkdownChart'),\n funnel: () => import('../components/charts/FunnelChart'),\n sankey: () => import('../components/charts/SankeyChart'),\n sunburst: () => import('../components/charts/SunburstChart'),\n heatmap: () => import('../components/charts/HeatMapChart'),\n retentionHeatmap: () => import('../components/charts/RetentionHeatmap'),\n retentionCombined: () => import('../components/charts/RetentionCombinedChart'),\n boxPlot: () => import('../components/charts/BoxPlotChart'),\n waterfall: () => import('../components/charts/WaterfallChart'),\n candlestick: () => import('../components/charts/CandlestickChart'),\n measureProfile: () => import('../components/charts/MeasureProfileChart'),\n gauge: () => import('../components/charts/GaugeChart'),\n}\n\n/**\n * Creates a fallback component for a chart type with missing dependencies.\n */\nfunction createFallbackComponent(chartType: ChartType): LazyChartComponent {\n const depInfo = chartDependencyMap[chartType]\n\n const FallbackComponent: LazyChartComponent = ({ height }) => (\n <MissingDependencyFallback\n chartType={chartType}\n packageName={depInfo?.packageName || 'unknown'}\n installCommand={depInfo?.installCommand || `npm install [package-name]`}\n height={height}\n />\n )\n\n FallbackComponent.displayName = `${chartType}Fallback`\n return FallbackComponent\n}\n\n/**\n * Wraps a chart import function with error handling.\n * If the import fails (e.g., missing dependency), returns a fallback component.\n */\nfunction createSafeImport(\n chartType: ChartType,\n importFn: () => Promise<{ default: LazyChartComponent }>\n): () => Promise<{ default: LazyChartComponent }> {\n return async () => {\n try {\n return await importFn()\n } catch (error) {\n // Log the error for debugging\n console.warn(\n `[drizzle-cube] Failed to load ${chartType} chart:`,\n error instanceof Error ? error.message : error\n )\n\n // Track that this chart type failed\n failedChartTypes.add(chartType)\n\n // Return the fallback component wrapped in the expected format\n return { default: createFallbackComponent(chartType) }\n }\n }\n}\n\n/**\n * Get or create a lazy component for a chart type.\n * Handles import failures gracefully by returning a fallback component.\n */\nfunction getLazyChart(chartType: ChartType): LazyExoticComponent<LazyChartComponent> {\n if (!chartLoaderCache.has(chartType)) {\n const importFn = chartImportMap[chartType]\n if (!importFn) {\n throw new Error(`Unknown chart type: ${chartType}`)\n }\n // Wrap the import with error handling for graceful degradation\n const safeImport = createSafeImport(chartType, importFn)\n chartLoaderCache.set(chartType, lazy(safeImport))\n }\n return chartLoaderCache.get(chartType)!\n}\n\n/**\n * Check if a chart type is supported\n */\nexport function isValidChartType(chartType: string): chartType is ChartType {\n return chartType in chartImportMap\n}\n\n// Props for the LazyChart wrapper\nexport interface LazyChartProps extends ChartProps {\n chartType: ChartType\n fallback?: ReactNode\n}\n\n/**\n * Default loading placeholder for charts\n */\nfunction DefaultChartFallback({ height }: { height?: string | number }) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full\"\n style={{ height: typeof height === 'number' ? `${height}px` : height || '200px' }}\n >\n <div className=\"dc:animate-pulse bg-dc-surface-secondary dc:rounded dc:w-full dc:h-full dc:min-h-[100px]\" />\n </div>\n )\n}\n\n/**\n * Lazy Chart Component\n *\n * Renders a chart component with React.lazy dynamic loading.\n * The chart type determines which chart component is loaded.\n *\n * @example\n * ```tsx\n * <LazyChart\n * chartType=\"bar\"\n * data={chartData}\n * chartConfig={{ yAxis: ['value'] }}\n * height={300}\n * />\n * ```\n */\nexport function LazyChart({\n chartType,\n fallback,\n height,\n ...chartProps\n}: LazyChartProps) {\n const ChartComponent = getLazyChart(chartType)\n\n return (\n <Suspense fallback={fallback ?? <DefaultChartFallback height={height} />}>\n <ChartComponent height={height} {...chartProps} />\n </Suspense>\n )\n}\n\n/**\n * Preload a chart type\n *\n * Triggers the dynamic import without rendering.\n * Useful for prefetching charts that will likely be needed.\n *\n * @example\n * ```tsx\n * // Preload bar chart on hover\n * onMouseEnter={() => preloadChart('bar')}\n * ```\n */\nexport function preloadChart(chartType: ChartType): void {\n const importFn = chartImportMap[chartType]\n if (importFn) {\n importFn()\n }\n}\n\n/**\n * Preload multiple chart types\n *\n * @example\n * ```tsx\n * // Preload common charts on app init\n * useEffect(() => {\n * preloadCharts(['bar', 'line', 'pie'])\n * }, [])\n * ```\n */\nexport function preloadCharts(chartTypes: ChartType[]): void {\n chartTypes.forEach(preloadChart)\n}\n\n/**\n * Get all available chart types\n */\nexport function getAvailableChartTypes(): ChartType[] {\n return Object.keys(chartImportMap) as ChartType[]\n}\n\n/**\n * Check if a chart type has loaded successfully.\n * Returns false if the chart failed to load due to missing dependencies.\n *\n * Note: This only returns accurate results after the chart has been attempted to load.\n * Use this for conditional UI logic (e.g., hiding unavailable chart types).\n */\nexport function isChartTypeAvailable(chartType: ChartType): boolean {\n return !failedChartTypes.has(chartType)\n}\n\n/**\n * Get list of chart types that failed to load due to missing dependencies.\n */\nexport function getUnavailableChartTypes(): ChartType[] {\n return Array.from(failedChartTypes)\n}\n"],"names":["MissingDependencyFallback","chartType","packageName","installCommand","height","jsxs","jsx","chartLoaderCache","failedChartTypes","chartDependencyMap","chartImportMap","n","createFallbackComponent","depInfo","FallbackComponent","createSafeImport","importFn","error","getLazyChart","safeImport","lazy","isValidChartType","DefaultChartFallback","LazyChart","fallback","chartProps","ChartComponent","Suspense","preloadChart","preloadCharts","chartTypes","getAvailableChartTypes","isChartTypeAvailable","getUnavailableChartTypes"],"mappings":"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"}
1
+ {"version":3,"file":"charts-loader-B3tt5oKG.js","sources":["../../../src/client/components/charts/MissingDependencyFallback.tsx","../../../src/client/charts/ChartLoader.tsx"],"sourcesContent":["interface MissingDependencyFallbackProps {\n chartType: string\n packageName: string\n installCommand: string\n height?: string | number\n}\n\n/**\n * Fallback component shown when a chart's optional dependency is not installed.\n * Provides clear instructions on how to install the missing package.\n */\nexport function MissingDependencyFallback({\n chartType,\n packageName,\n installCommand,\n height = 200\n}: MissingDependencyFallbackProps) {\n return (\n <div\n className=\"dc-missing-dependency-fallback\"\n style={{\n height: typeof height === 'number' ? `${height}px` : height,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n padding: '1.5rem',\n textAlign: 'center',\n border: '1px dashed var(--dc-border, #e5e7eb)',\n borderRadius: '0.5rem',\n backgroundColor: 'var(--dc-surface, #f9fafb)'\n }}\n >\n <div style={{ fontSize: '2.5rem', marginBottom: '1rem' }}>📦</div>\n <h3 style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n marginBottom: '0.5rem',\n color: 'var(--dc-text, #111827)'\n }}>\n Missing Dependency\n </h3>\n <p style={{\n fontSize: '0.875rem',\n color: 'var(--dc-text-secondary, #6b7280)',\n marginBottom: '1rem',\n maxWidth: '28rem'\n }}>\n The <code style={{\n padding: '0.125rem 0.375rem',\n backgroundColor: 'var(--dc-surface-secondary, #f3f4f6)',\n borderRadius: '0.25rem',\n fontFamily: 'monospace',\n fontSize: '0.75rem'\n }}>{chartType}</code> chart requires the <code style={{\n padding: '0.125rem 0.375rem',\n backgroundColor: 'var(--dc-surface-secondary, #f3f4f6)',\n borderRadius: '0.25rem',\n fontFamily: 'monospace',\n fontSize: '0.75rem'\n }}>{packageName}</code> package.\n </p>\n <div style={{\n backgroundColor: 'var(--dc-surface-secondary, #f3f4f6)',\n borderRadius: '0.5rem',\n padding: '0.75rem 1rem',\n fontFamily: 'monospace',\n fontSize: '0.875rem',\n color: 'var(--dc-text, #111827)'\n }}>\n <span style={{\n color: 'var(--dc-text-muted, #9ca3af)',\n userSelect: 'none'\n }}>$ </span>\n {installCommand}\n </div>\n <p style={{\n fontSize: '0.75rem',\n color: 'var(--dc-text-muted, #9ca3af)',\n marginTop: '0.75rem'\n }}>\n After installing, restart your development server.\n </p>\n </div>\n )\n}\n","/**\n * Lazy Chart Loader\n *\n * Provides React.lazy-based dynamic loading for chart components.\n * This enables code splitting - each chart type loads only when needed.\n *\n * Handles missing optional dependencies gracefully by showing a fallback\n * component instead of crashing the application.\n */\n\nimport { lazy, Suspense, ComponentType, ReactNode, LazyExoticComponent } from 'react'\nimport type { ChartType, ChartProps } from '../types'\nimport { MissingDependencyFallback } from '../components/charts/MissingDependencyFallback'\n\n// Type for lazy-loaded chart components\ntype LazyChartComponent = ComponentType<ChartProps>\n\n// Chart loader cache to prevent re-creating lazy components\nconst chartLoaderCache = new Map<ChartType, LazyExoticComponent<LazyChartComponent>>()\n\n// Track which chart types have failed to load due to missing dependencies\nconst failedChartTypes = new Set<ChartType>()\n\n/**\n * Maps chart types to their optional peer dependencies.\n * Charts not listed here have no external dependencies (table, KPIs, markdown).\n */\nconst chartDependencyMap: Partial<Record<ChartType, { packageName: string; installCommand: string }>> = {\n // Recharts-based charts\n bar: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n line: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n area: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n pie: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n scatter: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n radar: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n radialBar: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n treemap: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n bubble: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n funnel: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n sankey: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n sunburst: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n // Nivo-based charts\n heatmap: {\n packageName: '@nivo/heatmap',\n installCommand: 'npm install @nivo/heatmap'\n },\n waterfall: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n measureProfile: {\n packageName: 'recharts',\n installCommand: 'npm install recharts'\n },\n gauge: {\n packageName: 'd3-shape',\n installCommand: 'npm install d3-shape'\n },\n // Charts with no external deps: table, activityGrid, kpiNumber, kpiDelta, kpiText, markdown, retentionHeatmap, boxPlot, candlestick\n}\n\n// Dynamic import functions for each chart type\nconst chartImportMap: Record<ChartType, () => Promise<{ default: LazyChartComponent }>> = {\n bar: () => import('../components/charts/BarChart'),\n line: () => import('../components/charts/LineChart'),\n area: () => import('../components/charts/AreaChart'),\n pie: () => import('../components/charts/PieChart'),\n scatter: () => import('../components/charts/ScatterChart'),\n radar: () => import('../components/charts/RadarChart'),\n radialBar: () => import('../components/charts/RadialBarChart'),\n treemap: () => import('../components/charts/TreeMapChart'),\n bubble: () => import('../components/charts/BubbleChart'),\n table: () => import('../components/charts/DataTable'),\n activityGrid: () => import('../components/charts/ActivityGridChart'),\n kpiNumber: () => import('../components/charts/KpiNumber'),\n kpiDelta: () => import('../components/charts/KpiDelta'),\n kpiText: () => import('../components/charts/KpiText'),\n markdown: () => import('../components/charts/MarkdownChart'),\n funnel: () => import('../components/charts/FunnelChart'),\n sankey: () => import('../components/charts/SankeyChart'),\n sunburst: () => import('../components/charts/SunburstChart'),\n heatmap: () => import('../components/charts/HeatMapChart'),\n retentionHeatmap: () => import('../components/charts/RetentionHeatmap'),\n retentionCombined: () => import('../components/charts/RetentionCombinedChart'),\n boxPlot: () => import('../components/charts/BoxPlotChart'),\n waterfall: () => import('../components/charts/WaterfallChart'),\n candlestick: () => import('../components/charts/CandlestickChart'),\n measureProfile: () => import('../components/charts/MeasureProfileChart'),\n gauge: () => import('../components/charts/GaugeChart'),\n}\n\n/**\n * Creates a fallback component for a chart type with missing dependencies.\n */\nfunction createFallbackComponent(chartType: ChartType): LazyChartComponent {\n const depInfo = chartDependencyMap[chartType]\n\n const FallbackComponent: LazyChartComponent = ({ height }) => (\n <MissingDependencyFallback\n chartType={chartType}\n packageName={depInfo?.packageName || 'unknown'}\n installCommand={depInfo?.installCommand || `npm install [package-name]`}\n height={height}\n />\n )\n\n FallbackComponent.displayName = `${chartType}Fallback`\n return FallbackComponent\n}\n\n/**\n * Wraps a chart import function with error handling.\n * If the import fails (e.g., missing dependency), returns a fallback component.\n */\nfunction createSafeImport(\n chartType: ChartType,\n importFn: () => Promise<{ default: LazyChartComponent }>\n): () => Promise<{ default: LazyChartComponent }> {\n return async () => {\n try {\n return await importFn()\n } catch (error) {\n // Log the error for debugging\n console.warn(\n `[drizzle-cube] Failed to load ${chartType} chart:`,\n error instanceof Error ? error.message : error\n )\n\n // Track that this chart type failed\n failedChartTypes.add(chartType)\n\n // Return the fallback component wrapped in the expected format\n return { default: createFallbackComponent(chartType) }\n }\n }\n}\n\n/**\n * Get or create a lazy component for a chart type.\n * Handles import failures gracefully by returning a fallback component.\n */\nfunction getLazyChart(chartType: ChartType): LazyExoticComponent<LazyChartComponent> {\n if (!chartLoaderCache.has(chartType)) {\n const importFn = chartImportMap[chartType]\n if (!importFn) {\n throw new Error(`Unknown chart type: ${chartType}`)\n }\n // Wrap the import with error handling for graceful degradation\n const safeImport = createSafeImport(chartType, importFn)\n chartLoaderCache.set(chartType, lazy(safeImport))\n }\n return chartLoaderCache.get(chartType)!\n}\n\n/**\n * Check if a chart type is supported\n */\nexport function isValidChartType(chartType: string): chartType is ChartType {\n return chartType in chartImportMap\n}\n\n// Props for the LazyChart wrapper\nexport interface LazyChartProps extends ChartProps {\n chartType: ChartType\n fallback?: ReactNode\n}\n\n/**\n * Default loading placeholder for charts\n */\nfunction DefaultChartFallback({ height }: { height?: string | number }) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full\"\n style={{ height: typeof height === 'number' ? `${height}px` : height || '200px' }}\n >\n <div className=\"dc:animate-pulse bg-dc-surface-secondary dc:rounded dc:w-full dc:h-full dc:min-h-[100px]\" />\n </div>\n )\n}\n\n/**\n * Lazy Chart Component\n *\n * Renders a chart component with React.lazy dynamic loading.\n * The chart type determines which chart component is loaded.\n *\n * @example\n * ```tsx\n * <LazyChart\n * chartType=\"bar\"\n * data={chartData}\n * chartConfig={{ yAxis: ['value'] }}\n * height={300}\n * />\n * ```\n */\nexport function LazyChart({\n chartType,\n fallback,\n height,\n ...chartProps\n}: LazyChartProps) {\n const ChartComponent = getLazyChart(chartType)\n\n return (\n <Suspense fallback={fallback ?? <DefaultChartFallback height={height} />}>\n <ChartComponent height={height} {...chartProps} />\n </Suspense>\n )\n}\n\n/**\n * Preload a chart type\n *\n * Triggers the dynamic import without rendering.\n * Useful for prefetching charts that will likely be needed.\n *\n * @example\n * ```tsx\n * // Preload bar chart on hover\n * onMouseEnter={() => preloadChart('bar')}\n * ```\n */\nexport function preloadChart(chartType: ChartType): void {\n const importFn = chartImportMap[chartType]\n if (importFn) {\n importFn()\n }\n}\n\n/**\n * Preload multiple chart types\n *\n * @example\n * ```tsx\n * // Preload common charts on app init\n * useEffect(() => {\n * preloadCharts(['bar', 'line', 'pie'])\n * }, [])\n * ```\n */\nexport function preloadCharts(chartTypes: ChartType[]): void {\n chartTypes.forEach(preloadChart)\n}\n\n/**\n * Get all available chart types\n */\nexport function getAvailableChartTypes(): ChartType[] {\n return Object.keys(chartImportMap) as ChartType[]\n}\n\n/**\n * Check if a chart type has loaded successfully.\n * Returns false if the chart failed to load due to missing dependencies.\n *\n * Note: This only returns accurate results after the chart has been attempted to load.\n * Use this for conditional UI logic (e.g., hiding unavailable chart types).\n */\nexport function isChartTypeAvailable(chartType: ChartType): boolean {\n return !failedChartTypes.has(chartType)\n}\n\n/**\n * Get list of chart types that failed to load due to missing dependencies.\n */\nexport function getUnavailableChartTypes(): ChartType[] {\n return Array.from(failedChartTypes)\n}\n"],"names":["MissingDependencyFallback","chartType","packageName","installCommand","height","jsxs","jsx","chartLoaderCache","failedChartTypes","chartDependencyMap","chartImportMap","n","createFallbackComponent","depInfo","FallbackComponent","createSafeImport","importFn","error","getLazyChart","safeImport","lazy","isValidChartType","DefaultChartFallback","LazyChart","fallback","chartProps","ChartComponent","Suspense","preloadChart","preloadCharts","chartTypes","getAvailableChartTypes","isChartTypeAvailable","getUnavailableChartTypes"],"mappings":"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"}
@@ -2,10 +2,10 @@ import { jsxs as u, jsx as r, Fragment as be } from "react/jsx-runtime";
2
2
  import ct, { Component as sn, useRef as Z, useState as j, useEffect as ce, useMemo as J, useCallback as w, forwardRef as Nr, useImperativeHandle as on, createContext as an, useContext as qt, Suspense as ln, lazy as un, memo as Dr, startTransition as St } from "react";
3
3
  import { j as mn, u as fn, c as kr, d as hn, e as pn, s as gn, f as Ut } from "./vendor-AVsJ2ni0.js";
4
4
  import { c as yn, u as Tr, g as vt, k as bn, l as xn, S as Sr, e as vn } from "./providers-CgxXm6Ll.js";
5
- import { a as G, g as Mr, i as gt } from "./icons-DAeqv1iX.js";
5
+ import { a as G, g as Mr, i as gt } from "./icons-M7shurcH.js";
6
6
  import { L as Fr, S as wn, A as Cn } from "./charts-core-CU9u_HtL.js";
7
7
  import { createPortal as Pr } from "react-dom";
8
- import { i as Nn, L as Dn } from "./charts-loader-AW3T1nv5.js";
8
+ import { i as Nn, L as Dn } from "./charts-loader-B3tt5oKG.js";
9
9
  import { useChartConfig as Ir } from "../charts.js";
10
10
  import { a as kn } from "./flow-utils-CjQZG5qq.js";
11
11
  import { h as Er, g as Lr, d as Tn, D as $r } from "./retention-CzCo8262.js";
@@ -3950,7 +3950,7 @@ const Bt = ({
3950
3950
  )
3951
3951
  }
3952
3952
  ) : null;
3953
- }, zc = un(() => import("./analysis-builder-C5e52Z3p.js")), Gr = Nr((e, t) => /* @__PURE__ */ r(
3953
+ }, zc = un(() => import("./analysis-builder-3z9fHE2F.js")), Gr = Nr((e, t) => /* @__PURE__ */ r(
3954
3954
  ln,
3955
3955
  {
3956
3956
  fallback: /* @__PURE__ */ r("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full dc:py-6", children: /* @__PURE__ */ r(Fr, {}) }),
@@ -10063,4 +10063,4 @@ export {
10063
10063
  ro as y,
10064
10064
  no as z
10065
10065
  };
10066
- //# sourceMappingURL=components-BkeSy9xv.js.map
10066
+ //# sourceMappingURL=components-CMGGxqOB.js.map