@databricks/appkit-ui 0.0.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.
- package/CLAUDE.md +3 -0
- package/DCO +25 -0
- package/LICENSE +203 -0
- package/NOTICE.md +73 -0
- package/README.md +35 -0
- package/bin/setup-claude.js +190 -0
- package/dist/js/arrow/arrow-client.d.ts +64 -0
- package/dist/js/arrow/arrow-client.d.ts.map +1 -0
- package/dist/js/arrow/arrow-client.js +181 -0
- package/dist/js/arrow/arrow-client.js.map +1 -0
- package/dist/js/arrow/index.js +3 -0
- package/dist/js/arrow/lazy-arrow.d.ts +23 -0
- package/dist/js/arrow/lazy-arrow.d.ts.map +1 -0
- package/dist/js/arrow/lazy-arrow.js +86 -0
- package/dist/js/arrow/lazy-arrow.js.map +1 -0
- package/dist/js/constants.d.ts +10 -0
- package/dist/js/constants.d.ts.map +1 -0
- package/dist/js/constants.js +30 -0
- package/dist/js/constants.js.map +1 -0
- package/dist/js/index.d.ts +8 -0
- package/dist/js/index.js +8 -0
- package/dist/js/sse/connect-sse.d.ts +14 -0
- package/dist/js/sse/connect-sse.d.ts.map +1 -0
- package/dist/js/sse/connect-sse.js +128 -0
- package/dist/js/sse/connect-sse.js.map +1 -0
- package/dist/js/sse/types.d.ts +34 -0
- package/dist/js/sse/types.d.ts.map +1 -0
- package/dist/react/charts/area/index.d.ts +33 -0
- package/dist/react/charts/area/index.d.ts.map +1 -0
- package/dist/react/charts/area/index.js +29 -0
- package/dist/react/charts/area/index.js.map +1 -0
- package/dist/react/charts/bar/index.d.ts +43 -0
- package/dist/react/charts/bar/index.d.ts.map +1 -0
- package/dist/react/charts/bar/index.js +39 -0
- package/dist/react/charts/bar/index.js.map +1 -0
- package/dist/react/charts/base.d.ts +89 -0
- package/dist/react/charts/base.d.ts.map +1 -0
- package/dist/react/charts/base.js +123 -0
- package/dist/react/charts/base.js.map +1 -0
- package/dist/react/charts/chart-error-boundary.js +37 -0
- package/dist/react/charts/chart-error-boundary.js.map +1 -0
- package/dist/react/charts/constants.d.ts +22 -0
- package/dist/react/charts/constants.d.ts.map +1 -0
- package/dist/react/charts/constants.js +86 -0
- package/dist/react/charts/constants.js.map +1 -0
- package/dist/react/charts/create-chart.d.ts +26 -0
- package/dist/react/charts/create-chart.d.ts.map +1 -0
- package/dist/react/charts/create-chart.js +55 -0
- package/dist/react/charts/create-chart.js.map +1 -0
- package/dist/react/charts/empty.js +16 -0
- package/dist/react/charts/empty.js.map +1 -0
- package/dist/react/charts/error.js +16 -0
- package/dist/react/charts/error.js.map +1 -0
- package/dist/react/charts/heatmap/index.d.ts +42 -0
- package/dist/react/charts/heatmap/index.d.ts.map +1 -0
- package/dist/react/charts/heatmap/index.js +38 -0
- package/dist/react/charts/heatmap/index.js.map +1 -0
- package/dist/react/charts/index.js +18 -0
- package/dist/react/charts/line/index.d.ts +34 -0
- package/dist/react/charts/line/index.d.ts.map +1 -0
- package/dist/react/charts/line/index.js +30 -0
- package/dist/react/charts/line/index.js.map +1 -0
- package/dist/react/charts/loading.js +13 -0
- package/dist/react/charts/loading.js.map +1 -0
- package/dist/react/charts/normalize.d.ts +37 -0
- package/dist/react/charts/normalize.d.ts.map +1 -0
- package/dist/react/charts/normalize.js +256 -0
- package/dist/react/charts/normalize.js.map +1 -0
- package/dist/react/charts/options.d.ts +39 -0
- package/dist/react/charts/options.d.ts.map +1 -0
- package/dist/react/charts/options.js +212 -0
- package/dist/react/charts/options.js.map +1 -0
- package/dist/react/charts/pie/index.d.ts +57 -0
- package/dist/react/charts/pie/index.d.ts.map +1 -0
- package/dist/react/charts/pie/index.js +50 -0
- package/dist/react/charts/pie/index.js.map +1 -0
- package/dist/react/charts/radar/index.d.ts +32 -0
- package/dist/react/charts/radar/index.d.ts.map +1 -0
- package/dist/react/charts/radar/index.js +28 -0
- package/dist/react/charts/radar/index.js.map +1 -0
- package/dist/react/charts/scatter/index.d.ts +32 -0
- package/dist/react/charts/scatter/index.d.ts.map +1 -0
- package/dist/react/charts/scatter/index.js +28 -0
- package/dist/react/charts/scatter/index.js.map +1 -0
- package/dist/react/charts/theme.d.ts +23 -0
- package/dist/react/charts/theme.d.ts.map +1 -0
- package/dist/react/charts/theme.js +96 -0
- package/dist/react/charts/theme.js.map +1 -0
- package/dist/react/charts/types.d.ts +160 -0
- package/dist/react/charts/types.d.ts.map +1 -0
- package/dist/react/charts/types.js +17 -0
- package/dist/react/charts/types.js.map +1 -0
- package/dist/react/charts/utils.d.ts +36 -0
- package/dist/react/charts/utils.d.ts.map +1 -0
- package/dist/react/charts/utils.js +77 -0
- package/dist/react/charts/utils.js.map +1 -0
- package/dist/react/charts/wrapper.d.ts +65 -0
- package/dist/react/charts/wrapper.d.ts.map +1 -0
- package/dist/react/charts/wrapper.js +94 -0
- package/dist/react/charts/wrapper.js.map +1 -0
- package/dist/react/hooks/index.js +2 -0
- package/dist/react/hooks/types.d.ts +101 -0
- package/dist/react/hooks/types.d.ts.map +1 -0
- package/dist/react/hooks/use-analytics-query.d.ts +33 -0
- package/dist/react/hooks/use-analytics-query.d.ts.map +1 -0
- package/dist/react/hooks/use-analytics-query.js +146 -0
- package/dist/react/hooks/use-analytics-query.js.map +1 -0
- package/dist/react/hooks/use-chart-data.d.ts +54 -0
- package/dist/react/hooks/use-chart-data.d.ts.map +1 -0
- package/dist/react/hooks/use-chart-data.js +80 -0
- package/dist/react/hooks/use-chart-data.js.map +1 -0
- package/dist/react/hooks/use-mobile.js +21 -0
- package/dist/react/hooks/use-mobile.js.map +1 -0
- package/dist/react/hooks/use-query-hmr.js +19 -0
- package/dist/react/hooks/use-query-hmr.js.map +1 -0
- package/dist/react/index.d.ts +75 -0
- package/dist/react/index.js +79 -0
- package/dist/react/lib/format.js +42 -0
- package/dist/react/lib/format.js.map +1 -0
- package/dist/react/lib/utils.js +11 -0
- package/dist/react/lib/utils.js.map +1 -0
- package/dist/react/table/data-table.d.ts +47 -0
- package/dist/react/table/data-table.d.ts.map +1 -0
- package/dist/react/table/data-table.js +205 -0
- package/dist/react/table/data-table.js.map +1 -0
- package/dist/react/table/empty.js +16 -0
- package/dist/react/table/empty.js.map +1 -0
- package/dist/react/table/error.js +16 -0
- package/dist/react/table/error.js.map +1 -0
- package/dist/react/table/index.js +1 -0
- package/dist/react/table/loading.js +50 -0
- package/dist/react/table/loading.js.map +1 -0
- package/dist/react/table/table-wrapper.js +143 -0
- package/dist/react/table/table-wrapper.js.map +1 -0
- package/dist/react/table/types.d.ts +55 -0
- package/dist/react/table/types.d.ts.map +1 -0
- package/dist/react/ui/accordion.d.ts +25 -0
- package/dist/react/ui/accordion.d.ts.map +1 -0
- package/dist/react/ui/accordion.js +45 -0
- package/dist/react/ui/accordion.js.map +1 -0
- package/dist/react/ui/alert-dialog.d.ts +49 -0
- package/dist/react/ui/alert-dialog.d.ts.map +1 -0
- package/dist/react/ui/alert-dialog.js +82 -0
- package/dist/react/ui/alert-dialog.js.map +1 -0
- package/dist/react/ui/alert.d.ts +25 -0
- package/dist/react/ui/alert.d.ts.map +1 -0
- package/dist/react/ui/alert.js +38 -0
- package/dist/react/ui/alert.js.map +1 -0
- package/dist/react/ui/aspect-ratio.d.ts +10 -0
- package/dist/react/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/react/ui/aspect-ratio.js +16 -0
- package/dist/react/ui/aspect-ratio.js.map +1 -0
- package/dist/react/ui/avatar.d.ts +20 -0
- package/dist/react/ui/avatar.d.ts.map +1 -0
- package/dist/react/ui/avatar.js +30 -0
- package/dist/react/ui/avatar.js.map +1 -0
- package/dist/react/ui/badge.d.ts +20 -0
- package/dist/react/ui/badge.d.ts.map +1 -0
- package/dist/react/ui/badge.js +26 -0
- package/dist/react/ui/badge.js.map +1 -0
- package/dist/react/ui/breadcrumb.d.ts +38 -0
- package/dist/react/ui/breadcrumb.d.ts.map +1 -0
- package/dist/react/ui/breadcrumb.js +71 -0
- package/dist/react/ui/breadcrumb.js.map +1 -0
- package/dist/react/ui/button-group.d.ts +29 -0
- package/dist/react/ui/button-group.d.ts.map +1 -0
- package/dist/react/ui/button-group.js +41 -0
- package/dist/react/ui/button-group.js.map +1 -0
- package/dist/react/ui/button.d.ts +22 -0
- package/dist/react/ui/button.d.ts.map +1 -0
- package/dist/react/ui/button.js +45 -0
- package/dist/react/ui/button.js.map +1 -0
- package/dist/react/ui/calendar.d.ts +27 -0
- package/dist/react/ui/calendar.d.ts.map +1 -0
- package/dist/react/ui/calendar.js +109 -0
- package/dist/react/ui/calendar.js.map +1 -0
- package/dist/react/ui/card.d.ts +35 -0
- package/dist/react/ui/card.d.ts.map +1 -0
- package/dist/react/ui/card.js +57 -0
- package/dist/react/ui/card.js.map +1 -0
- package/dist/react/ui/carousel.d.ts +48 -0
- package/dist/react/ui/carousel.d.ts.map +1 -0
- package/dist/react/ui/carousel.js +134 -0
- package/dist/react/ui/carousel.js.map +1 -0
- package/dist/react/ui/chart.d.ts +80 -0
- package/dist/react/ui/chart.d.ts.map +1 -0
- package/dist/react/ui/chart.js +143 -0
- package/dist/react/ui/chart.js.map +1 -0
- package/dist/react/ui/checkbox.d.ts +12 -0
- package/dist/react/ui/checkbox.d.ts.map +1 -0
- package/dist/react/ui/checkbox.js +24 -0
- package/dist/react/ui/checkbox.js.map +1 -0
- package/dist/react/ui/collapsible.d.ts +16 -0
- package/dist/react/ui/collapsible.d.ts.map +1 -0
- package/dist/react/ui/collapsible.js +26 -0
- package/dist/react/ui/collapsible.js.map +1 -0
- package/dist/react/ui/command.d.ts +53 -0
- package/dist/react/ui/command.d.ts.map +1 -0
- package/dist/react/ui/command.js +87 -0
- package/dist/react/ui/command.js.map +1 -0
- package/dist/react/ui/context-menu.d.ts +77 -0
- package/dist/react/ui/context-menu.d.ts.map +1 -0
- package/dist/react/ui/context-menu.js +125 -0
- package/dist/react/ui/context-menu.js.map +1 -0
- package/dist/react/ui/dialog.d.ts +48 -0
- package/dist/react/ui/dialog.d.ts.map +1 -0
- package/dist/react/ui/dialog.js +87 -0
- package/dist/react/ui/dialog.js.map +1 -0
- package/dist/react/ui/drawer.d.ts +45 -0
- package/dist/react/ui/drawer.d.ts.map +1 -0
- package/dist/react/ui/drawer.js +81 -0
- package/dist/react/ui/drawer.js.map +1 -0
- package/dist/react/ui/dropdown-menu.d.ts +78 -0
- package/dist/react/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/react/ui/dropdown-menu.js +124 -0
- package/dist/react/ui/dropdown-menu.js.map +1 -0
- package/dist/react/ui/empty.d.ts +36 -0
- package/dist/react/ui/empty.d.ts.map +1 -0
- package/dist/react/ui/empty.js +62 -0
- package/dist/react/ui/empty.js.map +1 -0
- package/dist/react/ui/field.d.ts +65 -0
- package/dist/react/ui/field.d.ts.map +1 -0
- package/dist/react/ui/field.js +120 -0
- package/dist/react/ui/field.js.map +1 -0
- package/dist/react/ui/form.d.ts +46 -0
- package/dist/react/ui/form.d.ts.map +1 -0
- package/dist/react/ui/form.js +92 -0
- package/dist/react/ui/form.js.map +1 -0
- package/dist/react/ui/hover-card.d.ts +20 -0
- package/dist/react/ui/hover-card.d.ts.map +1 -0
- package/dist/react/ui/hover-card.js +35 -0
- package/dist/react/ui/hover-card.js.map +1 -0
- package/dist/react/ui/index.js +53 -0
- package/dist/react/ui/input-group.d.ts +44 -0
- package/dist/react/ui/input-group.d.ts.map +1 -0
- package/dist/react/ui/input-group.js +82 -0
- package/dist/react/ui/input-group.js.map +1 -0
- package/dist/react/ui/input-otp.d.ts +29 -0
- package/dist/react/ui/input-otp.d.ts.map +1 -0
- package/dist/react/ui/input-otp.js +47 -0
- package/dist/react/ui/input-otp.js.map +1 -0
- package/dist/react/ui/input.d.ts +12 -0
- package/dist/react/ui/input.d.ts.map +1 -0
- package/dist/react/ui/input.js +16 -0
- package/dist/react/ui/input.js.map +1 -0
- package/dist/react/ui/item.d.ts +63 -0
- package/dist/react/ui/item.d.ts.map +1 -0
- package/dist/react/ui/item.js +118 -0
- package/dist/react/ui/item.js.map +1 -0
- package/dist/react/ui/kbd.d.ts +14 -0
- package/dist/react/ui/kbd.d.ts.map +1 -0
- package/dist/react/ui/kbd.js +22 -0
- package/dist/react/ui/kbd.js.map +1 -0
- package/dist/react/ui/label.d.ts +12 -0
- package/dist/react/ui/label.d.ts.map +1 -0
- package/dist/react/ui/label.js +18 -0
- package/dist/react/ui/label.js.map +1 -0
- package/dist/react/ui/menubar.d.ts +85 -0
- package/dist/react/ui/menubar.d.ts.map +1 -0
- package/dist/react/ui/menubar.js +134 -0
- package/dist/react/ui/menubar.js.map +1 -0
- package/dist/react/ui/navigation-menu.d.ts +47 -0
- package/dist/react/ui/navigation-menu.d.ts.map +1 -0
- package/dist/react/ui/navigation-menu.js +82 -0
- package/dist/react/ui/navigation-menu.js.map +1 -0
- package/dist/react/ui/pagination.d.ts +40 -0
- package/dist/react/ui/pagination.d.ts.map +1 -0
- package/dist/react/ui/pagination.js +80 -0
- package/dist/react/ui/pagination.js.map +1 -0
- package/dist/react/ui/popover.d.ts +23 -0
- package/dist/react/ui/popover.d.ts.map +1 -0
- package/dist/react/ui/popover.js +38 -0
- package/dist/react/ui/popover.js.map +1 -0
- package/dist/react/ui/progress.d.ts +13 -0
- package/dist/react/ui/progress.d.ts.map +1 -0
- package/dist/react/ui/progress.js +21 -0
- package/dist/react/ui/progress.js.map +1 -0
- package/dist/react/ui/radio-group.d.ts +16 -0
- package/dist/react/ui/radio-group.d.ts.map +1 -0
- package/dist/react/ui/radio-group.js +31 -0
- package/dist/react/ui/radio-group.js.map +1 -0
- package/dist/react/ui/resizable.d.ts +22 -0
- package/dist/react/ui/resizable.d.ts.map +1 -0
- package/dist/react/ui/resizable.js +34 -0
- package/dist/react/ui/resizable.js.map +1 -0
- package/dist/react/ui/scroll-area.d.ts +18 -0
- package/dist/react/ui/scroll-area.d.ts.map +1 -0
- package/dist/react/ui/scroll-area.js +39 -0
- package/dist/react/ui/scroll-area.js.map +1 -0
- package/dist/react/ui/select.d.ts +53 -0
- package/dist/react/ui/select.d.ts.map +1 -0
- package/dist/react/ui/select.js +98 -0
- package/dist/react/ui/select.js.map +1 -0
- package/dist/react/ui/separator.d.ts +14 -0
- package/dist/react/ui/separator.d.ts.map +1 -0
- package/dist/react/ui/separator.js +20 -0
- package/dist/react/ui/separator.js.map +1 -0
- package/dist/react/ui/sheet.d.ts +41 -0
- package/dist/react/ui/sheet.d.ts.map +1 -0
- package/dist/react/ui/sheet.js +83 -0
- package/dist/react/ui/sheet.js.map +1 -0
- package/dist/react/ui/sidebar.d.ts +167 -0
- package/dist/react/ui/sidebar.d.ts.map +1 -0
- package/dist/react/ui/sidebar.js +379 -0
- package/dist/react/ui/sidebar.js.map +1 -0
- package/dist/react/ui/skeleton.d.ts +10 -0
- package/dist/react/ui/skeleton.d.ts.map +1 -0
- package/dist/react/ui/skeleton.js +15 -0
- package/dist/react/ui/skeleton.js.map +1 -0
- package/dist/react/ui/slider.d.ts +16 -0
- package/dist/react/ui/slider.d.ts.map +1 -0
- package/dist/react/ui/slider.js +40 -0
- package/dist/react/ui/slider.js.map +1 -0
- package/dist/react/ui/sonner.d.ts +10 -0
- package/dist/react/ui/sonner.d.ts.map +1 -0
- package/dist/react/ui/sonner.js +31 -0
- package/dist/react/ui/sonner.js.map +1 -0
- package/dist/react/ui/spinner.d.ts +10 -0
- package/dist/react/ui/spinner.d.ts.map +1 -0
- package/dist/react/ui/spinner.js +17 -0
- package/dist/react/ui/spinner.js.map +1 -0
- package/dist/react/ui/switch.d.ts +12 -0
- package/dist/react/ui/switch.d.ts.map +1 -0
- package/dist/react/ui/switch.js +22 -0
- package/dist/react/ui/switch.js.map +1 -0
- package/dist/react/ui/table.d.ts +39 -0
- package/dist/react/ui/table.d.ts.map +1 -0
- package/dist/react/ui/table.js +68 -0
- package/dist/react/ui/table.js.map +1 -0
- package/dist/react/ui/tabs.d.ts +24 -0
- package/dist/react/ui/tabs.d.ts.map +1 -0
- package/dist/react/ui/tabs.js +39 -0
- package/dist/react/ui/tabs.js.map +1 -0
- package/dist/react/ui/textarea.d.ts +11 -0
- package/dist/react/ui/textarea.d.ts.map +1 -0
- package/dist/react/ui/textarea.js +15 -0
- package/dist/react/ui/textarea.js.map +1 -0
- package/dist/react/ui/toggle-group.d.ts +27 -0
- package/dist/react/ui/toggle-group.d.ts.map +1 -0
- package/dist/react/ui/toggle-group.js +50 -0
- package/dist/react/ui/toggle-group.js.map +1 -0
- package/dist/react/ui/toggle.d.ts +20 -0
- package/dist/react/ui/toggle.d.ts.map +1 -0
- package/dist/react/ui/toggle.js +38 -0
- package/dist/react/ui/toggle.js.map +1 -0
- package/dist/react/ui/tooltip.d.ts +24 -0
- package/dist/react/ui/tooltip.d.ts.map +1 -0
- package/dist/react/ui/tooltip.js +39 -0
- package/dist/react/ui/tooltip.js.map +1 -0
- package/dist/shared/src/sql/helpers.d.ts +160 -0
- package/dist/shared/src/sql/helpers.d.ts.map +1 -0
- package/dist/shared/src/sql/helpers.js +103 -0
- package/dist/shared/src/sql/helpers.js.map +1 -0
- package/dist/shared/src/sql/types.d.ts +34 -0
- package/dist/shared/src/sql/types.d.ts.map +1 -0
- package/dist/styles.css +425 -0
- package/llms.txt +193 -0
- package/package.json +98 -0
- package/scripts/postinstall.js +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-chart.js","names":[],"sources":["../../../src/react/charts/create-chart.tsx"],"sourcesContent":["import { BaseChart } from \"./base\";\nimport type { ChartType, UnifiedChartProps } from \"./types\";\nimport { ChartWrapper } from \"./wrapper\";\n\n/**\n * Factory function to create chart components.\n * Eliminates boilerplate by generating components with the same pattern.\n *\n * @param chartType - The ECharts chart type\n * @param displayName - Component display name for React DevTools\n * @returns A typed chart component\n *\n * @example\n * ```tsx\n * export const BarChart = createChart<BarChartProps>(\"bar\", \"BarChart\");\n * export const LineChart = createChart<LineChartProps>(\"line\", \"LineChart\");\n * ```\n */\nexport function createChart<TProps extends UnifiedChartProps>(\n chartType: ChartType,\n displayName: string,\n) {\n const Component = (props: TProps) => {\n const {\n // Query props\n queryKey,\n parameters,\n format,\n transformer,\n // Data props\n data,\n // Common props\n height = 300,\n className,\n ariaLabel,\n testId,\n // All remaining props pass through to BaseChart\n ...chartProps\n } = props as TProps & {\n queryKey?: string;\n parameters?: Record<string, unknown>;\n format?: string;\n transformer?: unknown;\n data?: unknown;\n height?: number;\n className?: string;\n ariaLabel?: string;\n testId?: string;\n };\n\n const wrapperProps =\n data !== undefined\n ? { data, height, className, ariaLabel, testId }\n : {\n queryKey: queryKey as string,\n parameters,\n format,\n transformer,\n height,\n className,\n ariaLabel,\n testId: testId ?? `${chartType}-chart-${queryKey}`,\n };\n\n return (\n <ChartWrapper {...wrapperProps}>\n {(chartData) => (\n <BaseChart\n data={chartData}\n chartType={chartType}\n height={height}\n className={className}\n {...chartProps}\n />\n )}\n </ChartWrapper>\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,SAAgB,YACd,WACA,aACA;CACA,MAAM,aAAa,UAAkB;EACnC,MAAM,EAEJ,UACA,YACA,QACA,aAEA,MAEA,SAAS,KACT,WACA,WACA,QAEA,GAAG,eACD;AA0BJ,SACE,oBAAC;GAAa,GAdd,SAAS,SACL;IAAE;IAAM;IAAQ;IAAW;IAAW;IAAQ,GAC9C;IACY;IACV;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,GAAG,UAAU,SAAS;IACzC;cAID,cACA,oBAAC;IACC,MAAM;IACK;IACH;IACG;IACX,GAAI;KACJ;IAES;;AAInB,WAAU,cAAc;AACxB,QAAO"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/empty.tsx
|
|
4
|
+
function EmptyState() {
|
|
5
|
+
return /* @__PURE__ */ jsx("div", {
|
|
6
|
+
className: "w-full p-8 text-center",
|
|
7
|
+
children: /* @__PURE__ */ jsx("p", {
|
|
8
|
+
className: "text-sm text-muted-foreground",
|
|
9
|
+
children: "No data available"
|
|
10
|
+
})
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { EmptyState };
|
|
16
|
+
//# sourceMappingURL=empty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty.js","names":[],"sources":["../../../src/react/charts/empty.tsx"],"sourcesContent":["export function EmptyState() {\n return (\n <div className=\"w-full p-8 text-center\">\n <p className=\"text-sm text-muted-foreground\">No data available</p>\n </div>\n );\n}\n"],"mappings":";;;AAAA,SAAgB,aAAa;AAC3B,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GAAE,WAAU;aAAgC;IAAqB;GAC9D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/error.tsx
|
|
4
|
+
function ErrorState({ error }) {
|
|
5
|
+
return /* @__PURE__ */ jsx("div", {
|
|
6
|
+
className: "w-full p-8 text-center",
|
|
7
|
+
children: /* @__PURE__ */ jsxs("p", {
|
|
8
|
+
className: "text-sm text-destructive",
|
|
9
|
+
children: ["Error loading chart: ", error]
|
|
10
|
+
})
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { ErrorState };
|
|
16
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","names":[],"sources":["../../../src/react/charts/error.tsx"],"sourcesContent":["export function ErrorState({ error }: { error: string }) {\n return (\n <div className=\"w-full p-8 text-center\">\n <p className=\"text-sm text-destructive\">Error loading chart: {error}</p>\n </div>\n );\n}\n"],"mappings":";;;AAAA,SAAgB,WAAW,EAAE,SAA4B;AACvD,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAE,WAAU;cAA2B,yBAAsB;IAAU;GACpE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { HeatmapChartProps } from "../types.js";
|
|
2
|
+
import * as react_jsx_runtime276 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/react/charts/heatmap/index.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Heatmap Chart component.
|
|
8
|
+
* Supports both JSON and Arrow data formats with automatic format selection.
|
|
9
|
+
*
|
|
10
|
+
* Data should be in "long format" with three fields:
|
|
11
|
+
* - xKey: X-axis category (columns)
|
|
12
|
+
* - yAxisKey: Y-axis category (rows)
|
|
13
|
+
* - yKey: The numeric value for each cell
|
|
14
|
+
*
|
|
15
|
+
* @example Simple usage
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <HeatmapChart
|
|
18
|
+
* queryKey="activity_matrix"
|
|
19
|
+
* xKey="day"
|
|
20
|
+
* yAxisKey="hour"
|
|
21
|
+
* yKey="count"
|
|
22
|
+
* />
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example With custom color scale
|
|
26
|
+
* ```tsx
|
|
27
|
+
* <HeatmapChart
|
|
28
|
+
* queryKey="correlation_matrix"
|
|
29
|
+
* min={-1}
|
|
30
|
+
* max={1}
|
|
31
|
+
* showLabels={true}
|
|
32
|
+
* colorPalette="diverging"
|
|
33
|
+
* />
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
declare const HeatmapChart: {
|
|
37
|
+
(props: HeatmapChartProps): react_jsx_runtime276.JSX.Element;
|
|
38
|
+
displayName: string;
|
|
39
|
+
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { HeatmapChart };
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/heatmap/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAiCA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createChart } from "../create-chart.js";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/heatmap/index.tsx
|
|
4
|
+
/**
|
|
5
|
+
* Heatmap Chart component.
|
|
6
|
+
* Supports both JSON and Arrow data formats with automatic format selection.
|
|
7
|
+
*
|
|
8
|
+
* Data should be in "long format" with three fields:
|
|
9
|
+
* - xKey: X-axis category (columns)
|
|
10
|
+
* - yAxisKey: Y-axis category (rows)
|
|
11
|
+
* - yKey: The numeric value for each cell
|
|
12
|
+
*
|
|
13
|
+
* @example Simple usage
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <HeatmapChart
|
|
16
|
+
* queryKey="activity_matrix"
|
|
17
|
+
* xKey="day"
|
|
18
|
+
* yAxisKey="hour"
|
|
19
|
+
* yKey="count"
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @example With custom color scale
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <HeatmapChart
|
|
26
|
+
* queryKey="correlation_matrix"
|
|
27
|
+
* min={-1}
|
|
28
|
+
* max={1}
|
|
29
|
+
* showLabels={true}
|
|
30
|
+
* colorPalette="diverging"
|
|
31
|
+
* />
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
const HeatmapChart = createChart("heatmap", "HeatmapChart");
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { HeatmapChart };
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/heatmap/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { HeatmapChartProps } from \"../types\";\n\n/**\n * Heatmap Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * Data should be in \"long format\" with three fields:\n * - xKey: X-axis category (columns)\n * - yAxisKey: Y-axis category (rows)\n * - yKey: The numeric value for each cell\n *\n * @example Simple usage\n * ```tsx\n * <HeatmapChart\n * queryKey=\"activity_matrix\"\n * xKey=\"day\"\n * yAxisKey=\"hour\"\n * yKey=\"count\"\n * />\n * ```\n *\n * @example With custom color scale\n * ```tsx\n * <HeatmapChart\n * queryKey=\"correlation_matrix\"\n * min={-1}\n * max={1}\n * showLabels={true}\n * colorPalette=\"diverging\"\n * />\n * ```\n */\nexport const HeatmapChart = createChart<HeatmapChartProps>(\n \"heatmap\",\n \"HeatmapChart\",\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAa,eAAe,YAC1B,WACA,eACD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DATE_FIELD_PATTERNS, METADATA_DATE_PATTERNS, NAME_FIELD_PATTERNS } from "../../js/constants.js";
|
|
2
|
+
import { CHART_COLOR_VARS, CHART_COLOR_VARS_CATEGORICAL, CHART_COLOR_VARS_DIVERGING, CHART_COLOR_VARS_SEQUENTIAL, FALLBACK_COLORS, FALLBACK_COLORS_CATEGORICAL, FALLBACK_COLORS_DIVERGING, FALLBACK_COLORS_SEQUENTIAL } from "./constants.js";
|
|
3
|
+
import { isArrowTable, isDataProps, isQueryProps } from "./types.js";
|
|
4
|
+
import { createTimeSeriesData, formatLabel, sortTimeSeriesAscending, toChartArray, toChartValue, truncateLabel } from "./utils.js";
|
|
5
|
+
import { normalizeChartData, normalizeHeatmapData } from "./normalize.js";
|
|
6
|
+
import { buildCartesianOption, buildHeatmapOption, buildHorizontalBarOption, buildPieOption, buildRadarOption } from "./options.js";
|
|
7
|
+
import { useAllThemeColors, useThemeColors } from "./theme.js";
|
|
8
|
+
import { BaseChart } from "./base.js";
|
|
9
|
+
import { useChartData } from "../hooks/use-chart-data.js";
|
|
10
|
+
import { ChartWrapper } from "./wrapper.js";
|
|
11
|
+
import { createChart } from "./create-chart.js";
|
|
12
|
+
import { AreaChart } from "./area/index.js";
|
|
13
|
+
import { BarChart } from "./bar/index.js";
|
|
14
|
+
import { HeatmapChart } from "./heatmap/index.js";
|
|
15
|
+
import { LineChart } from "./line/index.js";
|
|
16
|
+
import { DonutChart, PieChart } from "./pie/index.js";
|
|
17
|
+
import { RadarChart } from "./radar/index.js";
|
|
18
|
+
import { ScatterChart } from "./scatter/index.js";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LineChartProps } from "../types.js";
|
|
2
|
+
import * as react_jsx_runtime277 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/react/charts/line/index.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Line Chart component.
|
|
8
|
+
* Supports both JSON and Arrow data formats with automatic format selection.
|
|
9
|
+
*
|
|
10
|
+
* @example Simple usage
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <LineChart
|
|
13
|
+
* queryKey="revenue_over_time"
|
|
14
|
+
* parameters={{ period: "monthly" }}
|
|
15
|
+
* />
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @example With custom styling
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <LineChart
|
|
21
|
+
* queryKey="trends"
|
|
22
|
+
* parameters={{ metric: "users" }}
|
|
23
|
+
* smooth={false}
|
|
24
|
+
* showSymbol={true}
|
|
25
|
+
* />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
declare const LineChart: {
|
|
29
|
+
(props: LineChartProps): react_jsx_runtime277.JSX.Element;
|
|
30
|
+
displayName: string;
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { LineChart };
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/react/charts/line/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAyBA;;;;;;;;;;;;;;;;;;;cAAa"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createChart } from "../create-chart.js";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/line/index.tsx
|
|
4
|
+
/**
|
|
5
|
+
* Line Chart component.
|
|
6
|
+
* Supports both JSON and Arrow data formats with automatic format selection.
|
|
7
|
+
*
|
|
8
|
+
* @example Simple usage
|
|
9
|
+
* ```tsx
|
|
10
|
+
* <LineChart
|
|
11
|
+
* queryKey="revenue_over_time"
|
|
12
|
+
* parameters={{ period: "monthly" }}
|
|
13
|
+
* />
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @example With custom styling
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <LineChart
|
|
19
|
+
* queryKey="trends"
|
|
20
|
+
* parameters={{ metric: "users" }}
|
|
21
|
+
* smooth={false}
|
|
22
|
+
* showSymbol={true}
|
|
23
|
+
* />
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
const LineChart = createChart("line", "LineChart");
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { LineChart };
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/react/charts/line/index.tsx"],"sourcesContent":["import { createChart } from \"../create-chart\";\nimport type { LineChartProps } from \"../types\";\n\n/**\n * Line Chart component.\n * Supports both JSON and Arrow data formats with automatic format selection.\n *\n * @example Simple usage\n * ```tsx\n * <LineChart\n * queryKey=\"revenue_over_time\"\n * parameters={{ period: \"monthly\" }}\n * />\n * ```\n *\n * @example With custom styling\n * ```tsx\n * <LineChart\n * queryKey=\"trends\"\n * parameters={{ metric: \"users\" }}\n * smooth={false}\n * showSymbol={true}\n * />\n * ```\n */\nexport const LineChart = createChart<LineChartProps>(\"line\", \"LineChart\");\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAa,YAAY,YAA4B,QAAQ,YAAY"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/loading.tsx
|
|
4
|
+
function LoadingSkeleton({ height = 300 }) {
|
|
5
|
+
return /* @__PURE__ */ jsx("div", {
|
|
6
|
+
className: "w-full animate-pulse bg-muted rounded",
|
|
7
|
+
style: { height }
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { LoadingSkeleton };
|
|
13
|
+
//# sourceMappingURL=loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.js","names":[],"sources":["../../../src/react/charts/loading.tsx"],"sourcesContent":["export function LoadingSkeleton({\n height = 300,\n}: {\n height?: number | string;\n}) {\n return (\n <div className=\"w-full animate-pulse bg-muted rounded\" style={{ height }} />\n );\n}\n"],"mappings":";;;AAAA,SAAgB,gBAAgB,EAC9B,SAAS,OAGR;AACD,QACE,oBAAC;EAAI,WAAU;EAAwC,OAAO,EAAE,QAAQ;GAAI"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChartData, NormalizedChartData, NormalizedChartDataBase, Orientation } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/normalize.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Normalizes chart data from either Arrow or JSON format.
|
|
7
|
+
* Converts BigInt and Date values to chart-compatible types.
|
|
8
|
+
*/
|
|
9
|
+
declare function normalizeChartData(data: ChartData, xKey?: string, yKey?: string | string[], orientation?: Orientation): NormalizedChartData;
|
|
10
|
+
/**
|
|
11
|
+
* Normalized data for heatmap charts.
|
|
12
|
+
* Extends base (not NormalizedChartData) because heatmaps don't use yDataMap.
|
|
13
|
+
* Instead, they use heatmapData which contains [xIndex, yIndex, value] tuples.
|
|
14
|
+
*/
|
|
15
|
+
interface NormalizedHeatmapData extends NormalizedChartDataBase {
|
|
16
|
+
/** Y-axis categories (rows) */
|
|
17
|
+
yAxisData: (string | number)[];
|
|
18
|
+
/** Heatmap data as [xIndex, yIndex, value] tuples */
|
|
19
|
+
heatmapData: [number, number, number][];
|
|
20
|
+
/** Min value in the data */
|
|
21
|
+
min: number;
|
|
22
|
+
/** Max value in the data */
|
|
23
|
+
max: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Normalizes data specifically for heatmap charts.
|
|
27
|
+
* Expects data in format: { xKey: string, yAxisKey: string, valueKey: number }
|
|
28
|
+
*
|
|
29
|
+
* @param data - Raw data (Arrow Table or JSON array)
|
|
30
|
+
* @param xKey - Field key for X-axis (columns)
|
|
31
|
+
* @param yAxisKey - Field key for Y-axis (rows)
|
|
32
|
+
* @param valueKey - Field key for the cell values
|
|
33
|
+
*/
|
|
34
|
+
declare function normalizeHeatmapData(data: ChartData, xKey?: string, yAxisKey?: string, valueKey?: string | string[]): NormalizedHeatmapData;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { NormalizedHeatmapData, normalizeChartData, normalizeHeatmapData };
|
|
37
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","names":[],"sources":["../../../src/react/charts/normalize.ts"],"sourcesContent":[],"mappings":";;;;;;AAuNA;;AACQ,iBADQ,kBAAA,CACR,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,EAAA,MAAA,EAAA,IAAA,CAAA,EAAA,MAAA,GAAA,MAAA,EAAA,EAAA,WAAA,CAAA,EAGQ,WAHR,CAAA,EAIL,mBAJK;;;;AAyFR;AAoBA;AAAoC,UApBnB,qBAAA,SAA8B,uBAoBX,CAAA;;WAKjC,EAAA,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;EAAqB;;;;;;;;;;;;;;;;iBALR,oBAAA,OACR,4EAIL"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { DATE_FIELD_PATTERNS, NAME_FIELD_PATTERNS } from "../../js/constants.js";
|
|
2
|
+
import { ArrowClient } from "../../js/arrow/arrow-client.js";
|
|
3
|
+
import "../../js/index.js";
|
|
4
|
+
import { isArrowTable } from "./types.js";
|
|
5
|
+
import { sortTimeSeriesAscending, toChartArray } from "./utils.js";
|
|
6
|
+
|
|
7
|
+
//#region src/react/charts/normalize.ts
|
|
8
|
+
/**
|
|
9
|
+
* Checks if a value looks like an ISO date string
|
|
10
|
+
*/
|
|
11
|
+
function isDateString(value) {
|
|
12
|
+
if (typeof value !== "string") return false;
|
|
13
|
+
return /^\d{4}-\d{2}-\d{2}(T|$)/.test(value);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Checks if a value is numeric (number or numeric string)
|
|
17
|
+
*/
|
|
18
|
+
function isNumericValue(value) {
|
|
19
|
+
if (typeof value === "number") return true;
|
|
20
|
+
if (typeof value === "bigint") return true;
|
|
21
|
+
if (typeof value === "string") {
|
|
22
|
+
const trimmed = value.trim();
|
|
23
|
+
if (trimmed === "" || isDateString(trimmed)) return false;
|
|
24
|
+
const parsed = Number(trimmed);
|
|
25
|
+
return !Number.isNaN(parsed) && Number.isFinite(parsed);
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Checks if a value looks like a category/label (non-numeric string)
|
|
31
|
+
*/
|
|
32
|
+
function isCategoryValue(value) {
|
|
33
|
+
if (typeof value !== "string") return false;
|
|
34
|
+
const trimmed = value.trim();
|
|
35
|
+
if (trimmed === "") return false;
|
|
36
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(trimmed)) return false;
|
|
37
|
+
const parsed = Number(trimmed);
|
|
38
|
+
return Number.isNaN(parsed) || !Number.isFinite(parsed);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Detects fields from JSON data for charting
|
|
42
|
+
*/
|
|
43
|
+
function detectFieldsFromJson(data, orientation) {
|
|
44
|
+
if (!data || data.length === 0) return {
|
|
45
|
+
xField: "x",
|
|
46
|
+
yFields: ["y"],
|
|
47
|
+
chartType: "categorical"
|
|
48
|
+
};
|
|
49
|
+
const firstRow = data[0];
|
|
50
|
+
const keys = Object.keys(firstRow);
|
|
51
|
+
const dateFields = keys.filter((key) => {
|
|
52
|
+
const value = firstRow[key];
|
|
53
|
+
const keyMatchesDatePattern = DATE_FIELD_PATTERNS.some((p) => key.toLowerCase().includes(p));
|
|
54
|
+
const valueIsDateString = isDateString(value);
|
|
55
|
+
return keyMatchesDatePattern || valueIsDateString;
|
|
56
|
+
});
|
|
57
|
+
let nameFields = keys.filter((key) => {
|
|
58
|
+
const value = firstRow[key];
|
|
59
|
+
return isCategoryValue(value) && !isDateString(value) && NAME_FIELD_PATTERNS.some((p) => key.toLowerCase().includes(p));
|
|
60
|
+
});
|
|
61
|
+
if (nameFields.length === 0) nameFields = keys.filter((key) => {
|
|
62
|
+
const value = firstRow[key];
|
|
63
|
+
return isCategoryValue(value) && !isDateString(value) && !dateFields.includes(key) && !key.toLowerCase().endsWith("_id");
|
|
64
|
+
});
|
|
65
|
+
const numericFields = keys.filter((key) => {
|
|
66
|
+
const value = firstRow[key];
|
|
67
|
+
return isNumericValue(value) && !dateFields.includes(key);
|
|
68
|
+
});
|
|
69
|
+
if (orientation === "horizontal" || nameFields.length > 0 && dateFields.length === 0) {
|
|
70
|
+
const xField$1 = nameFields[0] || dateFields[0] || keys[0];
|
|
71
|
+
return {
|
|
72
|
+
xField: xField$1,
|
|
73
|
+
yFields: numericFields.length > 0 ? numericFields : keys.filter((k) => k !== xField$1),
|
|
74
|
+
chartType: "categorical"
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const xField = dateFields[0] || nameFields[0] || keys[0];
|
|
78
|
+
return {
|
|
79
|
+
xField,
|
|
80
|
+
yFields: numericFields.length > 0 ? numericFields : keys.filter((k) => k !== xField),
|
|
81
|
+
chartType: dateFields.length > 0 ? "timeseries" : "categorical"
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Converts a JSON value to a chart-compatible value.
|
|
86
|
+
*/
|
|
87
|
+
function jsonValueToChartValue(value, isYValue, isDateField) {
|
|
88
|
+
if (value === null || value === void 0) return isYValue ? 0 : "";
|
|
89
|
+
if (typeof value === "number") return value;
|
|
90
|
+
if (typeof value === "bigint") return Number(value);
|
|
91
|
+
if (typeof value === "string") {
|
|
92
|
+
if (isDateField && isDateString(value)) {
|
|
93
|
+
const timestamp = new Date(value).getTime();
|
|
94
|
+
if (!Number.isNaN(timestamp)) return timestamp;
|
|
95
|
+
}
|
|
96
|
+
if (isYValue) {
|
|
97
|
+
const trimmed = value.trim();
|
|
98
|
+
const parsed = Number(trimmed);
|
|
99
|
+
if (!Number.isNaN(parsed) && Number.isFinite(parsed)) return parsed;
|
|
100
|
+
}
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
return String(value);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Extracts chart data from JSON array
|
|
107
|
+
*/
|
|
108
|
+
function extractFromJson(data, xField, yFields) {
|
|
109
|
+
const xData = [];
|
|
110
|
+
const yDataMap = {};
|
|
111
|
+
for (const field of yFields) yDataMap[field] = [];
|
|
112
|
+
const xIsDateField = data.length > 0 && isDateString(data[0][xField]);
|
|
113
|
+
for (const row of data) {
|
|
114
|
+
xData.push(jsonValueToChartValue(row[xField], false, xIsDateField));
|
|
115
|
+
for (const field of yFields) yDataMap[field].push(jsonValueToChartValue(row[field], true, false));
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
xData,
|
|
119
|
+
yDataMap
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Normalizes chart data from either Arrow or JSON format.
|
|
124
|
+
* Converts BigInt and Date values to chart-compatible types.
|
|
125
|
+
*/
|
|
126
|
+
function normalizeChartData(data, xKey, yKey, orientation) {
|
|
127
|
+
if (isArrowTable(data)) {
|
|
128
|
+
const table = data;
|
|
129
|
+
const detected$1 = ArrowClient.detectFieldsFromArrow(table, orientation);
|
|
130
|
+
const resolvedXKey$1 = xKey ?? detected$1.xField;
|
|
131
|
+
const resolvedYKeys$1 = yKey ? Array.isArray(yKey) ? yKey : [yKey] : detected$1.yFields;
|
|
132
|
+
const { xData: rawXData$1, yDataMap: rawYDataMap$1 } = ArrowClient.extractChartData(table, resolvedXKey$1, resolvedYKeys$1);
|
|
133
|
+
let xData$1 = toChartArray(rawXData$1);
|
|
134
|
+
let yDataMap$1 = {};
|
|
135
|
+
for (const key of resolvedYKeys$1) yDataMap$1[key] = toChartArray(rawYDataMap$1[key] ?? []);
|
|
136
|
+
if (detected$1.chartType === "timeseries") ({xData: xData$1, yDataMap: yDataMap$1} = sortTimeSeriesAscending(xData$1, yDataMap$1, resolvedYKeys$1));
|
|
137
|
+
return {
|
|
138
|
+
xData: xData$1,
|
|
139
|
+
yDataMap: yDataMap$1,
|
|
140
|
+
xField: resolvedXKey$1,
|
|
141
|
+
yFields: resolvedYKeys$1,
|
|
142
|
+
chartType: detected$1.chartType
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const jsonData = data;
|
|
146
|
+
const detected = detectFieldsFromJson(jsonData, orientation);
|
|
147
|
+
const resolvedXKey = xKey ?? detected.xField;
|
|
148
|
+
const resolvedYKeys = yKey ? Array.isArray(yKey) ? yKey : [yKey] : detected.yFields;
|
|
149
|
+
const { xData: rawXData, yDataMap: rawYDataMap } = extractFromJson(jsonData, resolvedXKey, resolvedYKeys);
|
|
150
|
+
let xData = toChartArray(rawXData);
|
|
151
|
+
let yDataMap = {};
|
|
152
|
+
for (const key of resolvedYKeys) yDataMap[key] = toChartArray(rawYDataMap[key] ?? []);
|
|
153
|
+
if (detected.chartType === "timeseries") ({xData, yDataMap} = sortTimeSeriesAscending(xData, yDataMap, resolvedYKeys));
|
|
154
|
+
return {
|
|
155
|
+
xData,
|
|
156
|
+
yDataMap,
|
|
157
|
+
xField: resolvedXKey,
|
|
158
|
+
yFields: resolvedYKeys,
|
|
159
|
+
chartType: detected.chartType
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Normalizes data specifically for heatmap charts.
|
|
164
|
+
* Expects data in format: { xKey: string, yAxisKey: string, valueKey: number }
|
|
165
|
+
*
|
|
166
|
+
* @param data - Raw data (Arrow Table or JSON array)
|
|
167
|
+
* @param xKey - Field key for X-axis (columns)
|
|
168
|
+
* @param yAxisKey - Field key for Y-axis (rows)
|
|
169
|
+
* @param valueKey - Field key for the cell values
|
|
170
|
+
*/
|
|
171
|
+
function normalizeHeatmapData(data, xKey, yAxisKey, valueKey) {
|
|
172
|
+
const jsonData = isArrowTable(data) ? extractJsonFromArrow(data) : data;
|
|
173
|
+
if (jsonData.length === 0) return {
|
|
174
|
+
xData: [],
|
|
175
|
+
xField: xKey ?? "x",
|
|
176
|
+
yFields: [],
|
|
177
|
+
chartType: "categorical",
|
|
178
|
+
yAxisData: [],
|
|
179
|
+
heatmapData: [],
|
|
180
|
+
min: 0,
|
|
181
|
+
max: 0
|
|
182
|
+
};
|
|
183
|
+
const keys = Object.keys(jsonData[0]);
|
|
184
|
+
const resolvedXKey = xKey ?? keys[0];
|
|
185
|
+
const resolvedYAxisKey = yAxisKey ?? keys[1];
|
|
186
|
+
const resolvedValueKey = valueKey ? Array.isArray(valueKey) ? valueKey[0] : valueKey : keys[2];
|
|
187
|
+
const xSet = /* @__PURE__ */ new Set();
|
|
188
|
+
const ySet = /* @__PURE__ */ new Set();
|
|
189
|
+
for (const row of jsonData) {
|
|
190
|
+
const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);
|
|
191
|
+
const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);
|
|
192
|
+
xSet.add(xVal);
|
|
193
|
+
ySet.add(yVal);
|
|
194
|
+
}
|
|
195
|
+
const xData = Array.from(xSet);
|
|
196
|
+
const yAxisData = Array.from(ySet);
|
|
197
|
+
const xIndexMap = /* @__PURE__ */ new Map();
|
|
198
|
+
const yIndexMap = /* @__PURE__ */ new Map();
|
|
199
|
+
xData.forEach((v, i) => {
|
|
200
|
+
xIndexMap.set(v, i);
|
|
201
|
+
});
|
|
202
|
+
yAxisData.forEach((v, i) => {
|
|
203
|
+
yIndexMap.set(v, i);
|
|
204
|
+
});
|
|
205
|
+
const heatmapData = [];
|
|
206
|
+
let min = Number.POSITIVE_INFINITY;
|
|
207
|
+
let max = Number.NEGATIVE_INFINITY;
|
|
208
|
+
for (const row of jsonData) {
|
|
209
|
+
const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);
|
|
210
|
+
const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);
|
|
211
|
+
const value = jsonValueToChartValue(row[resolvedValueKey], true, false);
|
|
212
|
+
const xIdx = xIndexMap.get(xVal);
|
|
213
|
+
const yIdx = yIndexMap.get(yVal);
|
|
214
|
+
const numValue = typeof value === "number" ? value : 0;
|
|
215
|
+
if (xIdx !== void 0 && yIdx !== void 0) {
|
|
216
|
+
heatmapData.push([
|
|
217
|
+
xIdx,
|
|
218
|
+
yIdx,
|
|
219
|
+
numValue
|
|
220
|
+
]);
|
|
221
|
+
min = Math.min(min, numValue);
|
|
222
|
+
max = Math.max(max, numValue);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (heatmapData.length === 0) {
|
|
226
|
+
min = 0;
|
|
227
|
+
max = 0;
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
xData,
|
|
231
|
+
xField: resolvedXKey,
|
|
232
|
+
yFields: [resolvedValueKey],
|
|
233
|
+
chartType: "categorical",
|
|
234
|
+
yAxisData,
|
|
235
|
+
heatmapData,
|
|
236
|
+
min,
|
|
237
|
+
max
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Helper to extract JSON array from Arrow table for heatmap processing.
|
|
242
|
+
*/
|
|
243
|
+
function extractJsonFromArrow(table) {
|
|
244
|
+
const result = [];
|
|
245
|
+
const fields = table.schema.fields.map((f) => f.name);
|
|
246
|
+
for (let i = 0; i < table.numRows; i++) {
|
|
247
|
+
const row = {};
|
|
248
|
+
for (const field of fields) row[field] = table.getChild(field)?.get(i);
|
|
249
|
+
result.push(row);
|
|
250
|
+
}
|
|
251
|
+
return result;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
//#endregion
|
|
255
|
+
export { normalizeChartData, normalizeHeatmapData };
|
|
256
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","names":["xField","xData: (string | number)[]","yDataMap: Record<string, (string | number)[]>","detected","resolvedXKey","resolvedYKeys","rawXData","rawYDataMap","xData","yDataMap","heatmapData: [number, number, number][]","result: Record<string, unknown>[]","row: Record<string, unknown>"],"sources":["../../../src/react/charts/normalize.ts"],"sourcesContent":["import { ArrowClient } from \"@/js\";\nimport type { Table } from \"apache-arrow\";\nimport { DATE_FIELD_PATTERNS, NAME_FIELD_PATTERNS } from \"./constants\";\nimport type {\n ChartData,\n NormalizedChartData,\n NormalizedChartDataBase,\n Orientation,\n} from \"./types\";\nimport { isArrowTable } from \"./types\";\nimport { sortTimeSeriesAscending, toChartArray } from \"./utils\";\n\n// ============================================================================\n// Type Detection Helpers\n// ============================================================================\n\n/**\n * Checks if a value looks like an ISO date string\n */\nfunction isDateString(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n return /^\\d{4}-\\d{2}-\\d{2}(T|$)/.test(value);\n}\n\n/**\n * Checks if a value is numeric (number or numeric string)\n */\nfunction isNumericValue(value: unknown): boolean {\n if (typeof value === \"number\") return true;\n if (typeof value === \"bigint\") return true;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (trimmed === \"\" || isDateString(trimmed)) return false;\n const parsed = Number(trimmed);\n return !Number.isNaN(parsed) && Number.isFinite(parsed);\n }\n return false;\n}\n\n/**\n * Checks if a value looks like a category/label (non-numeric string)\n */\nfunction isCategoryValue(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n if (trimmed === \"\") return false;\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(trimmed)) return false;\n const parsed = Number(trimmed);\n return Number.isNaN(parsed) || !Number.isFinite(parsed);\n}\n\n// ============================================================================\n// Field Detection\n// ============================================================================\n\n/**\n * Detects fields from JSON data for charting\n */\nfunction detectFieldsFromJson(\n data: Record<string, unknown>[],\n orientation?: Orientation,\n): {\n xField: string;\n yFields: string[];\n chartType: \"timeseries\" | \"categorical\";\n} {\n if (!data || data.length === 0) {\n return { xField: \"x\", yFields: [\"y\"], chartType: \"categorical\" };\n }\n\n const firstRow = data[0];\n const keys = Object.keys(firstRow);\n\n // Detect date fields by key name OR by value being a date string\n const dateFields = keys.filter((key) => {\n const value = firstRow[key];\n const keyMatchesDatePattern = DATE_FIELD_PATTERNS.some((p) =>\n key.toLowerCase().includes(p),\n );\n const valueIsDateString = isDateString(value);\n return keyMatchesDatePattern || valueIsDateString;\n });\n\n // Detect name/category fields by pattern AND value type\n let nameFields = keys.filter((key) => {\n const value = firstRow[key];\n return (\n isCategoryValue(value) &&\n !isDateString(value) &&\n NAME_FIELD_PATTERNS.some((p) => key.toLowerCase().includes(p))\n );\n });\n\n // Fallback: any string field that isn't a date or ID\n if (nameFields.length === 0) {\n nameFields = keys.filter((key) => {\n const value = firstRow[key];\n return (\n isCategoryValue(value) &&\n !isDateString(value) &&\n !dateFields.includes(key) &&\n !key.toLowerCase().endsWith(\"_id\")\n );\n });\n }\n\n // Detect numeric fields\n const numericFields = keys.filter((key) => {\n const value = firstRow[key];\n return isNumericValue(value) && !dateFields.includes(key);\n });\n\n const isHorizontal = orientation === \"horizontal\";\n\n if (isHorizontal || (nameFields.length > 0 && dateFields.length === 0)) {\n const xField = nameFields[0] || dateFields[0] || keys[0];\n const yFields =\n numericFields.length > 0\n ? numericFields\n : keys.filter((k) => k !== xField);\n return { xField, yFields, chartType: \"categorical\" };\n }\n\n const xField = dateFields[0] || nameFields[0] || keys[0];\n const yFields =\n numericFields.length > 0 ? numericFields : keys.filter((k) => k !== xField);\n return {\n xField,\n yFields,\n chartType: dateFields.length > 0 ? \"timeseries\" : \"categorical\",\n };\n}\n\n// ============================================================================\n// Value Conversion\n// ============================================================================\n\n/**\n * Converts a JSON value to a chart-compatible value.\n */\nfunction jsonValueToChartValue(\n value: unknown,\n isYValue: boolean,\n isDateField: boolean,\n): string | number {\n if (value === null || value === undefined) {\n return isYValue ? 0 : \"\";\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"bigint\") {\n return Number(value);\n }\n if (typeof value === \"string\") {\n if (isDateField && isDateString(value)) {\n const timestamp = new Date(value).getTime();\n if (!Number.isNaN(timestamp)) {\n return timestamp;\n }\n }\n if (isYValue) {\n const trimmed = value.trim();\n const parsed = Number(trimmed);\n if (!Number.isNaN(parsed) && Number.isFinite(parsed)) {\n return parsed;\n }\n }\n return value;\n }\n return String(value);\n}\n\n// ============================================================================\n// Data Extraction\n// ============================================================================\n\n/**\n * Extracts chart data from JSON array\n */\nfunction extractFromJson(\n data: Record<string, unknown>[],\n xField: string,\n yFields: string[],\n): {\n xData: (string | number)[];\n yDataMap: Record<string, (string | number)[]>;\n} {\n const xData: (string | number)[] = [];\n const yDataMap: Record<string, (string | number)[]> = {};\n\n for (const field of yFields) {\n yDataMap[field] = [];\n }\n\n const xIsDateField = data.length > 0 && isDateString(data[0][xField]);\n\n for (const row of data) {\n xData.push(jsonValueToChartValue(row[xField], false, xIsDateField));\n for (const field of yFields) {\n yDataMap[field].push(jsonValueToChartValue(row[field], true, false));\n }\n }\n\n return { xData, yDataMap };\n}\n\n// ============================================================================\n// Main Normalization Function\n// ============================================================================\n\n/**\n * Normalizes chart data from either Arrow or JSON format.\n * Converts BigInt and Date values to chart-compatible types.\n */\nexport function normalizeChartData(\n data: ChartData,\n xKey?: string,\n yKey?: string | string[],\n orientation?: Orientation,\n): NormalizedChartData {\n if (isArrowTable(data)) {\n const table = data as Table;\n const detected = ArrowClient.detectFieldsFromArrow(table, orientation);\n const resolvedXKey = xKey ?? detected.xField;\n const resolvedYKeys = yKey\n ? Array.isArray(yKey)\n ? yKey\n : [yKey]\n : detected.yFields;\n\n const { xData: rawXData, yDataMap: rawYDataMap } =\n ArrowClient.extractChartData(table, resolvedXKey, resolvedYKeys);\n\n let xData = toChartArray(rawXData);\n let yDataMap: Record<string, (string | number)[]> = {};\n for (const key of resolvedYKeys) {\n yDataMap[key] = toChartArray(rawYDataMap[key] ?? []);\n }\n\n if (detected.chartType === \"timeseries\") {\n ({ xData, yDataMap } = sortTimeSeriesAscending(\n xData,\n yDataMap,\n resolvedYKeys,\n ));\n }\n\n return {\n xData,\n yDataMap,\n xField: resolvedXKey,\n yFields: resolvedYKeys,\n chartType: detected.chartType,\n };\n }\n\n // JSON Array\n const jsonData = data as Record<string, unknown>[];\n const detected = detectFieldsFromJson(jsonData, orientation);\n const resolvedXKey = xKey ?? detected.xField;\n const resolvedYKeys = yKey\n ? Array.isArray(yKey)\n ? yKey\n : [yKey]\n : detected.yFields;\n\n const { xData: rawXData, yDataMap: rawYDataMap } = extractFromJson(\n jsonData,\n resolvedXKey,\n resolvedYKeys,\n );\n\n let xData = toChartArray(rawXData);\n let yDataMap: Record<string, (string | number)[]> = {};\n for (const key of resolvedYKeys) {\n yDataMap[key] = toChartArray(rawYDataMap[key] ?? []);\n }\n\n if (detected.chartType === \"timeseries\") {\n ({ xData, yDataMap } = sortTimeSeriesAscending(\n xData,\n yDataMap,\n resolvedYKeys,\n ));\n }\n\n return {\n xData,\n yDataMap,\n xField: resolvedXKey,\n yFields: resolvedYKeys,\n chartType: detected.chartType,\n };\n}\n\n// ============================================================================\n// Heatmap Data Normalization\n// ============================================================================\n\n/**\n * Normalized data for heatmap charts.\n * Extends base (not NormalizedChartData) because heatmaps don't use yDataMap.\n * Instead, they use heatmapData which contains [xIndex, yIndex, value] tuples.\n */\nexport interface NormalizedHeatmapData extends NormalizedChartDataBase {\n /** Y-axis categories (rows) */\n yAxisData: (string | number)[];\n /** Heatmap data as [xIndex, yIndex, value] tuples */\n heatmapData: [number, number, number][];\n /** Min value in the data */\n min: number;\n /** Max value in the data */\n max: number;\n}\n\n/**\n * Normalizes data specifically for heatmap charts.\n * Expects data in format: { xKey: string, yAxisKey: string, valueKey: number }\n *\n * @param data - Raw data (Arrow Table or JSON array)\n * @param xKey - Field key for X-axis (columns)\n * @param yAxisKey - Field key for Y-axis (rows)\n * @param valueKey - Field key for the cell values\n */\nexport function normalizeHeatmapData(\n data: ChartData,\n xKey?: string,\n yAxisKey?: string,\n valueKey?: string | string[],\n): NormalizedHeatmapData {\n // First, get the standard normalization\n const jsonData = isArrowTable(data)\n ? extractJsonFromArrow(data)\n : (data as Record<string, unknown>[]);\n\n if (jsonData.length === 0) {\n return {\n xData: [],\n xField: xKey ?? \"x\",\n yFields: [],\n chartType: \"categorical\",\n yAxisData: [],\n heatmapData: [],\n min: 0,\n max: 0,\n };\n }\n\n // Detect fields if not provided\n const keys = Object.keys(jsonData[0]);\n const resolvedXKey = xKey ?? keys[0];\n const resolvedYAxisKey = yAxisKey ?? keys[1];\n const resolvedValueKey = valueKey\n ? Array.isArray(valueKey)\n ? valueKey[0]\n : valueKey\n : keys[2];\n\n // Extract unique X and Y categories\n const xSet = new Set<string | number>();\n const ySet = new Set<string | number>();\n\n for (const row of jsonData) {\n const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);\n const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);\n xSet.add(xVal);\n ySet.add(yVal);\n }\n\n const xData = Array.from(xSet);\n const yAxisData = Array.from(ySet);\n\n // Create index maps for fast lookup\n const xIndexMap = new Map<string | number, number>();\n const yIndexMap = new Map<string | number, number>();\n xData.forEach((v, i) => {\n xIndexMap.set(v, i);\n });\n yAxisData.forEach((v, i) => {\n yIndexMap.set(v, i);\n });\n\n // Build heatmap data and track min/max\n const heatmapData: [number, number, number][] = [];\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n for (const row of jsonData) {\n const xVal = jsonValueToChartValue(row[resolvedXKey], false, false);\n const yVal = jsonValueToChartValue(row[resolvedYAxisKey], false, false);\n const value = jsonValueToChartValue(row[resolvedValueKey], true, false);\n\n const xIdx = xIndexMap.get(xVal);\n const yIdx = yIndexMap.get(yVal);\n const numValue = typeof value === \"number\" ? value : 0;\n\n if (xIdx !== undefined && yIdx !== undefined) {\n heatmapData.push([xIdx, yIdx, numValue]);\n min = Math.min(min, numValue);\n max = Math.max(max, numValue);\n }\n }\n\n // Handle edge case where no valid data was found\n if (heatmapData.length === 0) {\n min = 0;\n max = 0;\n }\n\n return {\n xData,\n xField: resolvedXKey,\n yFields: [resolvedValueKey],\n chartType: \"categorical\",\n yAxisData,\n heatmapData,\n min,\n max,\n };\n}\n\n/**\n * Helper to extract JSON array from Arrow table for heatmap processing.\n */\nfunction extractJsonFromArrow(table: Table): Record<string, unknown>[] {\n const result: Record<string, unknown>[] = [];\n const fields = table.schema.fields.map((f) => f.name);\n\n for (let i = 0; i < table.numRows; i++) {\n const row: Record<string, unknown> = {};\n for (const field of fields) {\n const col = table.getChild(field);\n row[field] = col?.get(i);\n }\n result.push(row);\n }\n\n return result;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ChartType } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/react/charts/options.d.ts
|
|
4
|
+
interface OptionBuilderContext {
|
|
5
|
+
xData: (string | number)[];
|
|
6
|
+
yDataMap: Record<string, (string | number)[]>;
|
|
7
|
+
yFields: string[];
|
|
8
|
+
colors: string[];
|
|
9
|
+
title?: string;
|
|
10
|
+
showLegend: boolean;
|
|
11
|
+
}
|
|
12
|
+
interface CartesianContext extends OptionBuilderContext {
|
|
13
|
+
chartType: ChartType;
|
|
14
|
+
isTimeSeries: boolean;
|
|
15
|
+
stacked: boolean;
|
|
16
|
+
smooth: boolean;
|
|
17
|
+
showSymbol: boolean;
|
|
18
|
+
symbolSize: number;
|
|
19
|
+
}
|
|
20
|
+
declare function buildRadarOption(ctx: OptionBuilderContext, showArea?: boolean): Record<string, unknown>;
|
|
21
|
+
declare function buildPieOption(ctx: OptionBuilderContext, chartType: "pie" | "donut", innerRadius: number, showLabels: boolean, labelPosition: string): Record<string, unknown>;
|
|
22
|
+
declare function buildHorizontalBarOption(ctx: OptionBuilderContext, stacked: boolean): Record<string, unknown>;
|
|
23
|
+
interface HeatmapContext extends OptionBuilderContext {
|
|
24
|
+
/** Y-axis categories (rows) */
|
|
25
|
+
yAxisData: (string | number)[];
|
|
26
|
+
/** Heatmap data as [xIndex, yIndex, value] tuples */
|
|
27
|
+
heatmapData: [number, number, number][];
|
|
28
|
+
/** Min value for color scale */
|
|
29
|
+
min: number;
|
|
30
|
+
/** Max value for color scale */
|
|
31
|
+
max: number;
|
|
32
|
+
/** Show value labels on cells */
|
|
33
|
+
showLabels: boolean;
|
|
34
|
+
}
|
|
35
|
+
declare function buildHeatmapOption(ctx: HeatmapContext): Record<string, unknown>;
|
|
36
|
+
declare function buildCartesianOption(ctx: CartesianContext): Record<string, unknown>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { CartesianContext, HeatmapContext, OptionBuilderContext, buildCartesianOption, buildHeatmapOption, buildHorizontalBarOption, buildPieOption, buildRadarOption };
|
|
39
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","names":[],"sources":["../../../src/react/charts/options.ts"],"sourcesContent":[],"mappings":";;;UAOiB,oBAAA;;EAAA,QAAA,EAEL,MAFK,CAAA,MAAoB,EAAA,CAAA,MAAA,GAEzB,MAAA,CAAM,EAAA,CAAA;EAOD,OAAA,EAAA,MAAA,EAAA;EAAiB,MAAA,EAAA,MAAA,EAAA;OACrB,CAAA,EAAA,MAAA;YAD6B,EAAA,OAAA;;AAwB1B,UAxBC,gBAAA,SAAyB,oBAwBV,CAAA;EAAA,SAAA,EAvBnB,SAuBmB;cACzB,EAAA,OAAA;SAEJ,EAAA,OAAA;EAAM,MAAA,EAAA,OAAA;EAmCO,UAAA,EAAA,OAAc;EAAA,UAAA,EAAA,MAAA;;AAM3B,iBA5Ca,gBAAA,CA4Cb,GAAA,EA3CI,oBA2CJ,EAAA,QAAA,CAAA,EAAA,OAAA,CAAA,EAzCA,MAyCA,CAAA,MAAA,EAAA,OAAA,CAAA;AAAM,iBANO,cAAA,CAMP,GAAA,EALF,oBAKE,EAAA,SAAA,EAAA,KAAA,GAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAN,MAAM,CAAA,MAAA,EAAA,OAAA,CAAA;AAyCO,iBAAA,wBAAA,CAAwB,GAAA,EACjC,oBADiC,EAAA,OAAA,EAAA,OAAA,CAAA,EAGrC,MAHqC,CAAA,MAAA,EAAA,OAAA,CAAA;AAAA,UAyCvB,cAAA,SAAuB,oBAzCA,CAAA;;WAGrC,EAAA,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;EAAM;EAsCQ,WAAA,EAAA,CAAA,MAAe,EAAA,MAAA,EAAQ,MAAA,CAAA,EAAA;EAaxB;EAAkB,GAAA,EAAA,MAAA;;KAE/B,EAAA,MAAA;EAAM;EAsEO,UAAA,EAAA,OAAA;;AACT,iBAzES,kBAAA,CAyET,GAAA,EAxEA,cAwEA,CAAA,EAvEJ,MAuEI,CAAA,MAAA,EAAA,OAAA,CAAA;AACJ,iBAFa,oBAAA,CAEb,GAAA,EADI,gBACJ,CAAA,EAAA,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA"}
|