drizzle-cube 0.11.1 → 0.11.2

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 (27) hide show
  1. package/dist/adapters/{mcp-app-html-CNp0VqS_.cjs → mcp-app-html-BCkzy3a2.cjs} +1 -1
  2. package/dist/adapters/{mcp-app-html-CvWoYMO3.js → mcp-app-html-WiSFu1oD.js} +1 -1
  3. package/dist/adapters/mcp-app-html.cjs +1 -1
  4. package/dist/adapters/mcp-app-html.js +1 -1
  5. package/dist/adapters/mcp-tools.cjs +1 -1
  6. package/dist/adapters/mcp-tools.js +1 -1
  7. package/dist/cjs/client/components/charts/MarkdownChart.helpers.d.ts +5 -0
  8. package/dist/cjs/client/components/markdownOverrides.d.ts +2 -0
  9. package/dist/client/charts.js +1 -1
  10. package/dist/client/chunks/{DashboardEditModal-DifODH4h.js → DashboardEditModal-BrZuaG5z.js} +4 -4
  11. package/dist/client/chunks/{DashboardEditModal-DifODH4h.js.map → DashboardEditModal-BrZuaG5z.js.map} +1 -1
  12. package/dist/client/chunks/{analysis-builder-D78aDJoL.js → analysis-builder-CwKFNoe7.js} +4 -4
  13. package/dist/client/chunks/{analysis-builder-D78aDJoL.js.map → analysis-builder-CwKFNoe7.js.map} +1 -1
  14. package/dist/client/chunks/{analysis-builder-shared-CsIs4-Xf.js → analysis-builder-shared-D1SsD4qC.js} +2 -2
  15. package/dist/client/chunks/{analysis-builder-shared-CsIs4-Xf.js.map → analysis-builder-shared-D1SsD4qC.js.map} +1 -1
  16. package/dist/client/chunks/{chart-markdown-DtgpU3xd.js → chart-markdown-XWU1MyCy.js} +2 -1
  17. package/dist/client/chunks/{chart-markdown-DtgpU3xd.js.map → chart-markdown-XWU1MyCy.js.map} +1 -1
  18. package/dist/client/chunks/{charts-loader-DoLQqFXg.js → charts-loader-DMdE-Azc.js} +2 -2
  19. package/dist/client/chunks/{charts-loader-DoLQqFXg.js.map → charts-loader-DMdE-Azc.js.map} +1 -1
  20. package/dist/client/components/charts/MarkdownChart.helpers.d.ts +5 -0
  21. package/dist/client/components/markdownOverrides.d.ts +2 -0
  22. package/dist/client/components.js +1 -1
  23. package/dist/client/index.js +35 -29
  24. package/dist/client/index.js.map +1 -1
  25. package/dist/client-bundle-stats.html +1 -1
  26. package/dist/mcp-app/mcp-app.html +1 -1
  27. package/package.json +1 -1
@@ -18,7 +18,7 @@ var c = {
18
18
  kpiNumber: () => import("./chart-kpi-number-DAbfoHMt.js").then((e) => e.t),
19
19
  kpiDelta: () => import("./chart-kpi-delta-DndbqdZT.js").then((e) => e.t),
20
20
  kpiText: () => import("./chart-kpi-text-D8oQgpxL.js").then((e) => e.t),
21
- markdown: () => import("./chart-markdown-DtgpU3xd.js").then((e) => e.n),
21
+ markdown: () => import("./chart-markdown-XWU1MyCy.js").then((e) => e.n),
22
22
  funnel: () => import("./chart-funnel-71Kn4eeF.js").then((e) => e.n),
23
23
  sankey: () => import("./chart-sankey-CFXPybny.js").then((e) => e.t),
24
24
  sunburst: () => import("./chart-sunburst-CTj95eEC.js").then((e) => e.t),
@@ -84,4 +84,4 @@ function _() {
84
84
  //#endregion
85
85
  export { u as a, g as i, h as n, p as o, _ as r, m as s, f as t };
86
86
 
87
- //# sourceMappingURL=charts-loader-DoLQqFXg.js.map
87
+ //# sourceMappingURL=charts-loader-DMdE-Azc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts-loader-DoLQqFXg.js","names":["chartLoaderCache","failedChartTypes","customChartMap","createUnknownChartFallback","createSafeImport","chartImportMap","n","getLazyChart","customChart","chartType","importFn","safeImport","lazy","isValidChartType","DefaultChartFallback","height","LazyChart","chartProps","ChartComponent","Suspense","fallback","preloadChart","preloadCharts","getAvailableChartTypes","builtIn","custom","isChartTypeAvailable","getUnavailableChartTypes"],"sources":["../../../src/client/charts/ChartLoader.tsx"],"sourcesContent":["/**\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, ReactNode, LazyExoticComponent } from 'react'\nimport type { BuiltInChartType, ChartType, ChartProps } from '../types.js'\nimport {\n type LazyChartComponent,\n chartLoaderCache,\n failedChartTypes,\n customChartMap,\n createSafeImport,\n createUnknownChartFallback\n} from './chartComponentRegistry.js'\n// Dynamic import functions for built-in chart **components** (the DOM-bearing,\n// client-only side of a chart). This stays separate from `chartRegistry` — which\n// is DOM-free and shared with the server — so importing the unified registry\n// never drags the chart component graph into server/agent code. Lazy loading is\n// a client-only optimisation.\n\n// The custom-chart registration API lives in chartComponentRegistry to avoid an\n// import cycle (chartPlugin → ChartLoader → DataTable → CubeProvider → chartPlugin).\n// Re-exported here so existing import paths keep working.\nexport { registerChartComponent, unregisterChartComponent } from './chartComponentRegistry.js'\n\n// Dynamic import functions for built-in chart **components** — the DOM-bearing,\n// client-only side of a chart. Kept separate from the unified `chartRegistry`\n// (which is DOM-free and shared with the server agent) so importing the registry\n// never drags the chart component graph into server/MCP/agent code. Lazy loading\n// is a client-only optimisation.\nconst chartImportMap: Record<BuiltInChartType, () => Promise<{ default: LazyChartComponent }>> = {\n bar: () => import('../components/charts/BarChart.js'),\n line: () => import('../components/charts/LineChart.js'),\n area: () => import('../components/charts/AreaChart.js'),\n pie: () => import('../components/charts/PieChart.js'),\n scatter: () => import('../components/charts/ScatterChart.js'),\n radar: () => import('../components/charts/RadarChart.js'),\n radialBar: () => import('../components/charts/RadialBarChart.js'),\n treemap: () => import('../components/charts/TreeMapChart.js'),\n bubble: () => import('../components/charts/BubbleChart.js'),\n table: () => import('../components/charts/DataTable.js'),\n recordsTable: () => import('../components/charts/RecordsTable.js'),\n activityGrid: () => import('../components/charts/ActivityGridChart.js'),\n kpiNumber: () => import('../components/charts/KpiNumber.js'),\n kpiDelta: () => import('../components/charts/KpiDelta.js'),\n kpiText: () => import('../components/charts/KpiText.js'),\n markdown: () => import('../components/charts/MarkdownChart.js'),\n funnel: () => import('../components/charts/FunnelChart.js'),\n sankey: () => import('../components/charts/SankeyChart.js'),\n sunburst: () => import('../components/charts/SunburstChart.js'),\n heatmap: () => import('../components/charts/HeatMapChart.js'),\n retentionHeatmap: () => import('../components/charts/RetentionHeatmap.js'),\n retentionCombined: () => import('../components/charts/RetentionCombinedChart.js'),\n boxPlot: () => import('../components/charts/BoxPlotChart.js'),\n dotStrip: () => import('../components/charts/DotStripChart.js'),\n waterfall: () => import('../components/charts/WaterfallChart.js'),\n candlestick: () => import('../components/charts/CandlestickChart.js'),\n measureProfile: () => import('../components/charts/MeasureProfileChart.js'),\n proportionBar: () => import('../components/charts/ProportionBarChart.js'),\n gauge: () => import('../components/charts/GaugeChart.js'),\n}\n\n/**\n * Get or create a lazy component for a chart type.\n * Checks custom (plugin) charts first, then built-in charts.\n * Returns an unknown chart fallback for unregistered types instead of throwing.\n */\nfunction getLazyChart(chartType: ChartType): LazyExoticComponent<LazyChartComponent> {\n // 1. Check custom charts first (allows overriding built-ins)\n const customChart = customChartMap.get(chartType)\n if (customChart) {\n return customChart\n }\n\n // 2. Check built-in cache\n if (chartLoaderCache.has(chartType)) {\n return chartLoaderCache.get(chartType)!\n }\n\n // 3. Check built-in import map (the client component registry)\n const importFn = chartImportMap[chartType as BuiltInChartType]\n if (importFn) {\n const safeImport = createSafeImport(chartType, importFn)\n chartLoaderCache.set(chartType, lazy(safeImport))\n return chartLoaderCache.get(chartType)!\n }\n\n // 4. Unknown chart type — return graceful fallback\n return lazy(() => Promise.resolve({ default: createUnknownChartFallback(chartType) }))\n}\n\n/**\n * Check if a chart type is supported (built-in or custom plugin)\n */\nexport function isValidChartType(chartType: string): chartType is ChartType {\n return chartType in chartImportMap || customChartMap.has(chartType)\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-sm 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 as BuiltInChartType]\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 (built-in + custom plugins)\n */\nexport function getAvailableChartTypes(): ChartType[] {\n const builtIn = Object.keys(chartImportMap) as ChartType[]\n const custom = Array.from(customChartMap.keys())\n // Deduplicate in case a custom chart overrides a built-in\n return [...new Set([...builtIn, ...custom])]\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"],"mappings":"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"}
1
+ {"version":3,"file":"charts-loader-DMdE-Azc.js","names":["chartLoaderCache","failedChartTypes","customChartMap","createUnknownChartFallback","createSafeImport","chartImportMap","n","getLazyChart","customChart","chartType","importFn","safeImport","lazy","isValidChartType","DefaultChartFallback","height","LazyChart","chartProps","ChartComponent","Suspense","fallback","preloadChart","preloadCharts","getAvailableChartTypes","builtIn","custom","isChartTypeAvailable","getUnavailableChartTypes"],"sources":["../../../src/client/charts/ChartLoader.tsx"],"sourcesContent":["/**\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, ReactNode, LazyExoticComponent } from 'react'\nimport type { BuiltInChartType, ChartType, ChartProps } from '../types.js'\nimport {\n type LazyChartComponent,\n chartLoaderCache,\n failedChartTypes,\n customChartMap,\n createSafeImport,\n createUnknownChartFallback\n} from './chartComponentRegistry.js'\n// Dynamic import functions for built-in chart **components** (the DOM-bearing,\n// client-only side of a chart). This stays separate from `chartRegistry` — which\n// is DOM-free and shared with the server — so importing the unified registry\n// never drags the chart component graph into server/agent code. Lazy loading is\n// a client-only optimisation.\n\n// The custom-chart registration API lives in chartComponentRegistry to avoid an\n// import cycle (chartPlugin → ChartLoader → DataTable → CubeProvider → chartPlugin).\n// Re-exported here so existing import paths keep working.\nexport { registerChartComponent, unregisterChartComponent } from './chartComponentRegistry.js'\n\n// Dynamic import functions for built-in chart **components** — the DOM-bearing,\n// client-only side of a chart. Kept separate from the unified `chartRegistry`\n// (which is DOM-free and shared with the server agent) so importing the registry\n// never drags the chart component graph into server/MCP/agent code. Lazy loading\n// is a client-only optimisation.\nconst chartImportMap: Record<BuiltInChartType, () => Promise<{ default: LazyChartComponent }>> = {\n bar: () => import('../components/charts/BarChart.js'),\n line: () => import('../components/charts/LineChart.js'),\n area: () => import('../components/charts/AreaChart.js'),\n pie: () => import('../components/charts/PieChart.js'),\n scatter: () => import('../components/charts/ScatterChart.js'),\n radar: () => import('../components/charts/RadarChart.js'),\n radialBar: () => import('../components/charts/RadialBarChart.js'),\n treemap: () => import('../components/charts/TreeMapChart.js'),\n bubble: () => import('../components/charts/BubbleChart.js'),\n table: () => import('../components/charts/DataTable.js'),\n recordsTable: () => import('../components/charts/RecordsTable.js'),\n activityGrid: () => import('../components/charts/ActivityGridChart.js'),\n kpiNumber: () => import('../components/charts/KpiNumber.js'),\n kpiDelta: () => import('../components/charts/KpiDelta.js'),\n kpiText: () => import('../components/charts/KpiText.js'),\n markdown: () => import('../components/charts/MarkdownChart.js'),\n funnel: () => import('../components/charts/FunnelChart.js'),\n sankey: () => import('../components/charts/SankeyChart.js'),\n sunburst: () => import('../components/charts/SunburstChart.js'),\n heatmap: () => import('../components/charts/HeatMapChart.js'),\n retentionHeatmap: () => import('../components/charts/RetentionHeatmap.js'),\n retentionCombined: () => import('../components/charts/RetentionCombinedChart.js'),\n boxPlot: () => import('../components/charts/BoxPlotChart.js'),\n dotStrip: () => import('../components/charts/DotStripChart.js'),\n waterfall: () => import('../components/charts/WaterfallChart.js'),\n candlestick: () => import('../components/charts/CandlestickChart.js'),\n measureProfile: () => import('../components/charts/MeasureProfileChart.js'),\n proportionBar: () => import('../components/charts/ProportionBarChart.js'),\n gauge: () => import('../components/charts/GaugeChart.js'),\n}\n\n/**\n * Get or create a lazy component for a chart type.\n * Checks custom (plugin) charts first, then built-in charts.\n * Returns an unknown chart fallback for unregistered types instead of throwing.\n */\nfunction getLazyChart(chartType: ChartType): LazyExoticComponent<LazyChartComponent> {\n // 1. Check custom charts first (allows overriding built-ins)\n const customChart = customChartMap.get(chartType)\n if (customChart) {\n return customChart\n }\n\n // 2. Check built-in cache\n if (chartLoaderCache.has(chartType)) {\n return chartLoaderCache.get(chartType)!\n }\n\n // 3. Check built-in import map (the client component registry)\n const importFn = chartImportMap[chartType as BuiltInChartType]\n if (importFn) {\n const safeImport = createSafeImport(chartType, importFn)\n chartLoaderCache.set(chartType, lazy(safeImport))\n return chartLoaderCache.get(chartType)!\n }\n\n // 4. Unknown chart type — return graceful fallback\n return lazy(() => Promise.resolve({ default: createUnknownChartFallback(chartType) }))\n}\n\n/**\n * Check if a chart type is supported (built-in or custom plugin)\n */\nexport function isValidChartType(chartType: string): chartType is ChartType {\n return chartType in chartImportMap || customChartMap.has(chartType)\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-sm 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 as BuiltInChartType]\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 (built-in + custom plugins)\n */\nexport function getAvailableChartTypes(): ChartType[] {\n const builtIn = Object.keys(chartImportMap) as ChartType[]\n const custom = Array.from(customChartMap.keys())\n // Deduplicate in case a custom chart overrides a built-in\n return [...new Set([...builtIn, ...custom])]\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"],"mappings":"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"}
@@ -11,8 +11,13 @@ export declare function alignmentClass(alignment: string): string;
11
11
  * The `sanitizer` is markdown-to-jsx's own, named rather than left implicit:
12
12
  * template output can carry warehouse values into link and image destinations,
13
13
  * so the protocol policy should be visible in our code.
14
+ *
15
+ * Raw HTML is never parsed: content can come from a shared dashboard, an
16
+ * imported file or (via templates) a warehouse value, and markdown-to-jsx's
17
+ * attribute stripping is not a complete XSS defence. HTML renders as text.
14
18
  */
15
19
  export declare function buildMarkdownOptions(accentColor: string, fontSize: string): {
20
+ disableParsingRawHTML: boolean;
16
21
  sanitizer: (value: string) => string | null;
17
22
  overrides: {
18
23
  h1: {
@@ -3,6 +3,7 @@ import { default as React } from 'react';
3
3
  export declare function ScrollableTable({ children, ...props }: React.HTMLAttributes<HTMLTableElement>): React.JSX.Element;
4
4
  /** Notebook canvas blocks — roomy, distinct heading sizes. */
5
5
  export declare const NOTEBOOK_MARKDOWN_OPTIONS: {
6
+ disableParsingRawHTML: boolean;
6
7
  overrides: {
7
8
  code: {
8
9
  props: {
@@ -104,6 +105,7 @@ export declare const NOTEBOOK_MARKDOWN_OPTIONS: {
104
105
  * weight, and every block margin is tighter to suit an ~85%-width bubble.
105
106
  */
106
107
  export declare const CHAT_MARKDOWN_OPTIONS: {
108
+ disableParsingRawHTML: boolean;
107
109
  overrides: {
108
110
  code: {
109
111
  props: {
@@ -1,3 +1,3 @@
1
- import { O as e, T as t, Z as n, a as r, g as i, h as a, i as o, k as s, m as c, n as l, r as u, s as d, t as f } from "./chunks/DashboardEditModal-DifODH4h.js";
1
+ import { O as e, T as t, Z as n, a as r, g as i, h as a, i as o, k as s, m as c, n as l, r as u, s as d, t as f } from "./chunks/DashboardEditModal-BrZuaG5z.js";
2
2
  import { a as p, n as m, o as h, r as g, s as _, t as v } from "./chunks/utils-CToHkuhU.js";
3
3
  export { d as AnalysisDisplayConfigPanel, u as AnalyticsDashboard, n as AnalyticsPortlet, f as DashboardEditModal, i as DashboardFilterBar, o as DashboardGrid, a as DashboardGridSurface, r as DashboardModals, e as DashboardProvider, t as DashboardToolbar, c as Modal, l as PortletContainer, v as createDashboardLayout, m as createSamplePortlet, g as findNextPosition, p as generatePortletId, h as generateResponsiveLayouts, s as useDashboardContext, _ as validateCubeQuery };
@@ -2,17 +2,17 @@ import { a as e, n as t, o as n, r, s as i } from "./chunks/vendor-BfBpNmMa.js";
2
2
  import { n as a, t as o } from "./chunks/providers-DwQCKdGW.js";
3
3
  import { A as s, B as c, C as l, D as u, E as d, H as f, L as p, M as m, N as h, P as g, R as _, S as v, T as y, U as b, V as x, _ as S, b as C, c as w, j as T, l as E, s as D, v as O, w as k, x as A, y as j, z as M } from "./chunks/chart-data-table-Cxd0cdAl.js";
4
4
  import { n as N, r as P } from "./chunks/chart-sankey-CFXPybny.js";
5
- import { $ as F, A as I, B as L, D as ee, F as te, G as R, H as ne, I as re, J as ie, K as ae, L as oe, N as se, O as ce, P as le, Q as ue, R as de, T as fe, U as pe, V as me, W as he, X as ge, Y as _e, Z as ve, a as ye, at as be, et as xe, g as Se, h as Ce, i as we, j as Te, k as Ee, l as De, m as Oe, n as ke, o as Ae, ot as je, p as Me, q as Ne, r as Pe, t as Fe, tt as Ie, y as Le, z as Re } from "./chunks/DashboardEditModal-DifODH4h.js";
6
- import { r as ze } from "./chunks/chart-markdown-DtgpU3xd.js";
5
+ import { $ as F, A as I, B as L, D as ee, F as te, G as R, H as ne, I as re, J as ie, K as ae, L as oe, N as se, O as ce, P as le, Q as ue, R as de, T as fe, U as pe, V as me, W as he, X as ge, Y as _e, Z as ve, a as ye, at as be, et as xe, g as Se, h as Ce, i as we, j as Te, k as Ee, l as De, m as Oe, n as ke, o as Ae, ot as je, p as Me, q as Ne, r as Pe, t as Fe, tt as Ie, y as Le, z as Re } from "./chunks/DashboardEditModal-BrZuaG5z.js";
6
+ import { r as ze } from "./chunks/chart-markdown-XWU1MyCy.js";
7
7
  import { C as Be, D as Ve, E as He, O as Ue, S as We, T as Ge, _ as Ke, a as qe, b as Je, g as Ye, h as Xe, i as Ze, k as Qe, m as $e, n as et, o as tt, p as nt, r as rt, s as it, t as at, u as ot, v as st, w as ct, x as lt, y as ut } from "./chunks/dashboardExport-Db3rmUP1.js";
8
8
  import { S as dt, _ as ft, b as pt, c as mt, d as ht, f as gt, g as _t, h as vt, l as yt, m as bt, o as xt, p as St, s as Ct, v as wt, y as Tt } from "./chunks/useDirtyStateTracking-DUyYwuN_.js";
9
9
  import { B as Et, F as z, S as Dt, _ as Ot, b as kt, g as At, h as jt, m as Mt, p as Nt, v as Pt, x as Ft, y as It } from "./chunks/chart-activity-grid-Ly_-2B-f.js";
10
10
  import { n as Lt, t as Rt } from "./chunks/gapFilling-DKBRHcQL.js";
11
11
  import { a as zt, i as Bt, n as Vt, o as Ht, r as Ut, t as Wt } from "./chunks/useExplainAI-BtoS3tb5.js";
12
12
  import { a as Gt, c as Kt, i as qt, l as Jt, o as Yt, r as Xt, s as Zt } from "./chunks/chart-funnel-71Kn4eeF.js";
13
- import { a as Qt, i as $t, n as en, o as tn, r as nn, s as rn, t as an } from "./chunks/charts-loader-DoLQqFXg.js";
13
+ import { a as Qt, i as $t, n as en, o as tn, r as nn, s as rn, t as an } from "./chunks/charts-loader-DMdE-Azc.js";
14
14
  import { H as B } from "./chunks/chart-area-D3l-71Wy.js";
15
- import { A as on, C as sn, D as cn, E as ln, F as un, N as dn, O as fn, P as pn, T as mn, _ as hn, a as gn, b as _n, c as vn, d as yn, f as bn, g as xn, h as Sn, i as Cn, j as wn, k as Tn, l as En, m as Dn, n as On, o as kn, r as An, s as jn, t as Mn, u as Nn, v as Pn, w as Fn, x as In, y as Ln } from "./chunks/analysis-builder-shared-CsIs4-Xf.js";
15
+ import { A as on, C as sn, D as cn, E as ln, F as un, N as dn, O as fn, P as pn, T as mn, _ as hn, a as gn, b as _n, c as vn, d as yn, f as bn, g as xn, h as Sn, i as Cn, j as wn, k as Tn, l as En, m as Dn, n as On, o as kn, r as An, s as jn, t as Mn, u as Nn, v as Pn, w as Fn, x as In, y as Ln } from "./chunks/analysis-builder-shared-D1SsD4qC.js";
16
16
  import { t as Rn } from "./chunks/useNotebookLayout-Ck3Z3uzg.js";
17
17
  import { n as zn } from "./chunks/chart-bubble-DFlfqCDG.js";
18
18
  import { i as Bn, t as Vn } from "./chunks/utils-CToHkuhU.js";
@@ -231,31 +231,37 @@ var lr = {
231
231
  th: { props: { className: "dc:px-3 dc:py-2 dc:text-left dc:font-semibold dc:text-xs text-dc-text-secondary dc:uppercase dc:tracking-wider border-dc-border dc:border-b" } },
232
232
  td: { props: { className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text border-dc-border dc:border-b" } },
233
233
  tr: { props: { className: "dc:hover:opacity-80" } }
234
- }, ur = { overrides: {
235
- h1: { props: { className: "dc:text-lg dc:font-bold text-dc-text dc:mb-2 dc:mt-3" } },
236
- h2: { props: { className: "dc:text-base dc:font-semibold text-dc-text dc:mb-2 dc:mt-3" } },
237
- h3: { props: { className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2 dc:mt-3" } },
238
- p: { props: { className: "dc:text-sm dc:leading-relaxed text-dc-text dc:mb-2" } },
239
- strong: { props: { className: "dc:font-semibold" } },
240
- ul: { props: { className: "dc:list-disc dc:ml-5 dc:mb-2 dc:text-sm text-dc-text dc:space-y-1" } },
241
- ol: { props: { className: "dc:list-decimal dc:ml-5 dc:mb-2 dc:text-sm text-dc-text dc:space-y-1" } },
242
- li: { props: { className: "dc:text-sm text-dc-text" } },
243
- hr: { props: { className: "dc:my-3 border-dc-border" } },
244
- blockquote: { props: { className: "dc:border-l-4 border-dc-accent dc:pl-3 dc:my-2 dc:italic text-dc-text-secondary dc:text-sm" } },
245
- ...lr
246
- } }, dr = { overrides: {
247
- h1: { props: { className: "dc:font-semibold text-dc-text dc:mt-2 dc:mb-1 dc:first:mt-0" } },
248
- h2: { props: { className: "dc:font-semibold text-dc-text dc:mt-2 dc:mb-1 dc:first:mt-0" } },
249
- h3: { props: { className: "dc:font-semibold text-dc-text dc:mt-2 dc:mb-1 dc:first:mt-0" } },
250
- p: { props: { className: "dc:leading-snug dc:mb-1.5 dc:last:mb-0" } },
251
- strong: { props: { className: "dc:font-semibold" } },
252
- ul: { props: { className: "dc:list-disc dc:ml-4 dc:mb-1.5 dc:last:mb-0 dc:space-y-0.5" } },
253
- ol: { props: { className: "dc:list-decimal dc:ml-4 dc:mb-1.5 dc:last:mb-0 dc:space-y-0.5" } },
254
- li: { props: { className: "dc:leading-snug" } },
255
- hr: { props: { className: "dc:my-2 border-dc-border" } },
256
- blockquote: { props: { className: "dc:border-l-2 border-dc-accent dc:pl-2 dc:my-1.5 dc:italic text-dc-text-secondary" } },
257
- ...lr
258
- } }, Q = {
234
+ }, ur = {
235
+ disableParsingRawHTML: !0,
236
+ overrides: {
237
+ h1: { props: { className: "dc:text-lg dc:font-bold text-dc-text dc:mb-2 dc:mt-3" } },
238
+ h2: { props: { className: "dc:text-base dc:font-semibold text-dc-text dc:mb-2 dc:mt-3" } },
239
+ h3: { props: { className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2 dc:mt-3" } },
240
+ p: { props: { className: "dc:text-sm dc:leading-relaxed text-dc-text dc:mb-2" } },
241
+ strong: { props: { className: "dc:font-semibold" } },
242
+ ul: { props: { className: "dc:list-disc dc:ml-5 dc:mb-2 dc:text-sm text-dc-text dc:space-y-1" } },
243
+ ol: { props: { className: "dc:list-decimal dc:ml-5 dc:mb-2 dc:text-sm text-dc-text dc:space-y-1" } },
244
+ li: { props: { className: "dc:text-sm text-dc-text" } },
245
+ hr: { props: { className: "dc:my-3 border-dc-border" } },
246
+ blockquote: { props: { className: "dc:border-l-4 border-dc-accent dc:pl-3 dc:my-2 dc:italic text-dc-text-secondary dc:text-sm" } },
247
+ ...lr
248
+ }
249
+ }, dr = {
250
+ disableParsingRawHTML: !0,
251
+ overrides: {
252
+ h1: { props: { className: "dc:font-semibold text-dc-text dc:mt-2 dc:mb-1 dc:first:mt-0" } },
253
+ h2: { props: { className: "dc:font-semibold text-dc-text dc:mt-2 dc:mb-1 dc:first:mt-0" } },
254
+ h3: { props: { className: "dc:font-semibold text-dc-text dc:mt-2 dc:mb-1 dc:first:mt-0" } },
255
+ p: { props: { className: "dc:leading-snug dc:mb-1.5 dc:last:mb-0" } },
256
+ strong: { props: { className: "dc:font-semibold" } },
257
+ ul: { props: { className: "dc:list-disc dc:ml-4 dc:mb-1.5 dc:last:mb-0 dc:space-y-0.5" } },
258
+ ol: { props: { className: "dc:list-decimal dc:ml-4 dc:mb-1.5 dc:last:mb-0 dc:space-y-0.5" } },
259
+ li: { props: { className: "dc:leading-snug" } },
260
+ hr: { props: { className: "dc:my-2 border-dc-border" } },
261
+ blockquote: { props: { className: "dc:border-l-2 border-dc-accent dc:pl-2 dc:my-1.5 dc:italic text-dc-text-secondary" } },
262
+ ...lr
263
+ }
264
+ }, Q = {
259
265
  width: "16px",
260
266
  height: "16px",
261
267
  color: "currentColor"