@particle-academy/fancy-echarts 2.0.3 → 3.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/README.md +36 -0
- package/dist/diagram.serializers-DSYRR3LI.js +277 -0
- package/dist/diagram.serializers-DSYRR3LI.js.map +1 -0
- package/dist/index.cjs +2339 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +247 -2
- package/dist/index.d.ts +247 -2
- package/dist/index.js +2042 -3
- package/dist/index.js.map +1 -1
- package/docs/Diagram.md +220 -0
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-resize-observer.ts","../src/hooks/use-echarts.ts","../src/components/EChart.tsx","../src/components/EChart3D.tsx","../src/components/EChartGraphic.tsx","../src/utils/register.ts","../src/utils/themes.ts"],"names":["useRef","useEffect","useSyncExternalStore","useState","getInstanceByDom","init","forwardRef","jsx","useMemo","DEFAULT_STYLE","Fragment","LineChart","BarChart","PieChart","ScatterChart","RadarChart","HeatmapChart","GaugeChart","FunnelChart","TreemapChart","SunburstChart","SankeyChart","GraphChart","CandlestickChart","BoxplotChart","ParallelChart","ThemeRiverChart","MapChart","CustomChart","EffectScatterChart","PictorialBarChart","GridComponent","TooltipComponent","TitleComponent","LegendComponent","DataZoomComponent","ToolboxComponent","VisualMapComponent","GeoComponent","ParallelComponent","CalendarComponent","GraphicComponent","PolarComponent","RadarComp","DatasetComponent","MarkLineComponent","MarkPointComponent","MarkAreaComponent","TimelineComponent","BrushComponent","SingleAxisComponent","CanvasRenderer","SVGRenderer","use","echartsRegisterTheme"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef, type RefObject } from \"react\";\n\nexport function useResizeObserver(\n ref: RefObject<HTMLElement | null>,\n callback: () => void\n): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new ResizeObserver(() => {\n callbackRef.current();\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [ref]);\n}\n","import { useEffect, useRef, useState, useSyncExternalStore, type RefObject } from \"react\";\nimport { init, getInstanceByDom, type EChartsType } from \"echarts/core\";\nimport type { EChartsOption } from \"echarts\";\n\ntype ECharts = EChartsType;\nimport { useResizeObserver } from \"./use-resize-observer\";\n\nexport interface UseEChartsOptions {\n option: EChartsOption;\n theme?: string | object;\n renderer?: \"canvas\" | \"svg\";\n notMerge?: boolean;\n lazyUpdate?: boolean;\n showLoading?: boolean;\n loadingOption?: object;\n onEvents?: Record<string, (params: any) => void>;\n autoResize?: boolean;\n}\n\nexport interface UseEChartsReturn {\n chartRef: RefObject<HTMLDivElement | null>;\n instance: ECharts | null;\n}\n\n/** Detect system dark mode preference reactively. */\nfunction useDarkMode(): boolean {\n return useSyncExternalStore(\n (callback) => {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n mq.addEventListener(\"change\", callback);\n return () => mq.removeEventListener(\"change\", callback);\n },\n () => window.matchMedia(\"(prefers-color-scheme: dark)\").matches,\n () => false,\n );\n}\n\nexport function useECharts(options: UseEChartsOptions): UseEChartsReturn {\n const {\n option,\n theme,\n renderer = \"canvas\",\n notMerge = false,\n lazyUpdate = false,\n showLoading = false,\n loadingOption,\n onEvents,\n autoResize = true,\n } = options;\n\n const isDark = useDarkMode();\n // Auto-detect theme: use explicit theme if provided, otherwise \"dark\" or undefined\n const autoDark = theme === undefined && isDark;\n const resolvedTheme = theme !== undefined ? theme : isDark ? \"dark\" : undefined;\n\n const chartRef = useRef<HTMLDivElement | null>(null);\n const instanceRef = useRef<ECharts | null>(null);\n const [instance, setInstance] = useState<ECharts | null>(null);\n\n // Init/dispose — re-init when theme changes (including dark mode toggle)\n useEffect(() => {\n if (!chartRef.current) return;\n\n // Dispose any existing instance (handles StrictMode double-mount)\n const existing = getInstanceByDom(chartRef.current);\n if (existing) {\n existing.dispose();\n }\n\n const chart = init(chartRef.current, resolvedTheme, { renderer });\n instanceRef.current = chart;\n setInstance(chart);\n\n return () => {\n chart.dispose();\n instanceRef.current = null;\n setInstance(null);\n };\n }, [resolvedTheme, renderer]);\n\n // Set option\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart || !option) return;\n // When using auto-detected dark theme, force transparent background\n // so charts blend with the page's own dark background\n const finalOption = autoDark\n ? { backgroundColor: \"transparent\", ...option }\n : option;\n chart.setOption(finalOption, { notMerge, lazyUpdate });\n }, [option, notMerge, lazyUpdate, autoDark]);\n\n // Loading state\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart) return;\n if (showLoading) {\n chart.showLoading(\"default\", loadingOption);\n } else {\n chart.hideLoading();\n }\n }, [showLoading, loadingOption]);\n\n // Event binding\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart || !onEvents) return;\n\n const entries = Object.entries(onEvents);\n for (const [event, handler] of entries) {\n chart.on(event, handler);\n }\n\n return () => {\n for (const [event, handler] of entries) {\n chart.off(event, handler);\n }\n };\n }, [onEvents]);\n\n // Auto-resize\n useResizeObserver(chartRef, () => {\n if (autoResize && instanceRef.current) {\n instanceRef.current.resize();\n }\n });\n\n return { chartRef, instance };\n}\n","import React, { forwardRef, useMemo } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type {\n EChartComponentProps,\n SeriesComponentProps,\n ChartDivProps,\n} from \"../types\";\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\n\n/** Base EChart component — accepts any ECharts option. */\nconst EChartBase = forwardRef<HTMLDivElement, EChartComponentProps>(\n (\n {\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChartBase.displayName = \"EChart\";\n\n// --- Helper to create typed series sub-components ---\n\nfunction createSeriesComponent(\n seriesType: string,\n displayName: string\n): React.FC<SeriesComponentProps & ChartDivProps> {\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\n data,\n title,\n xAxis,\n yAxis,\n tooltip = true,\n legend = false,\n grid,\n seriesOptions = {},\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: EChartsOption = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n if (tooltip === true) {\n base.tooltip = { trigger: \"axis\" };\n } else if (tooltip && typeof tooltip === \"object\") {\n base.tooltip = tooltip;\n }\n\n if (legend === true) {\n base.legend = {};\n } else if (legend && typeof legend === \"object\") {\n base.legend = legend;\n }\n\n if (grid) {\n base.grid = grid;\n }\n\n // Handle axis-based charts\n const axisCharts = [\n \"line\",\n \"bar\",\n \"scatter\",\n \"candlestick\",\n \"boxplot\",\n \"heatmap\",\n \"effectScatter\",\n \"pictorialBar\",\n ];\n if (axisCharts.includes(seriesType)) {\n base.xAxis = xAxis ?? { type: \"category\" };\n base.yAxis = yAxis ?? { type: \"value\" };\n }\n\n // Handle data format\n if (Array.isArray(data)) {\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\n } else if (data && typeof data === \"object\" && \"series\" in data) {\n // Multi-series: { categories: [...], series: [{ name, data }, ...] }\n const multiData = data as {\n categories?: string[];\n series: Array<{ name?: string; data: any[]; [k: string]: any }>;\n };\n if (multiData.categories && axisCharts.includes(seriesType)) {\n base.xAxis = xAxis ?? {\n type: \"category\",\n data: multiData.categories,\n };\n }\n base.series = multiData.series.map((s) => ({\n type: seriesType,\n ...seriesOptions,\n ...s,\n })) as any;\n } else {\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\n }\n\n return { ...base, ...extraOption };\n }, [\n data,\n title,\n xAxis,\n yAxis,\n tooltip,\n legend,\n grid,\n seriesOptions,\n extraOption,\n ]);\n\n return (\n <EChartBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n\n// --- Compound component with all chart type sub-components ---\n\nexport const EChart = Object.assign(EChartBase, {\n Line: createSeriesComponent(\"line\", \"EChart.Line\"),\n Bar: createSeriesComponent(\"bar\", \"EChart.Bar\"),\n Pie: createSeriesComponent(\"pie\", \"EChart.Pie\"),\n Scatter: createSeriesComponent(\"scatter\", \"EChart.Scatter\"),\n Radar: createSeriesComponent(\"radar\", \"EChart.Radar\"),\n Heatmap: createSeriesComponent(\"heatmap\", \"EChart.Heatmap\"),\n Gauge: createSeriesComponent(\"gauge\", \"EChart.Gauge\"),\n Funnel: createSeriesComponent(\"funnel\", \"EChart.Funnel\"),\n Treemap: createSeriesComponent(\"treemap\", \"EChart.Treemap\"),\n Sunburst: createSeriesComponent(\"sunburst\", \"EChart.Sunburst\"),\n Sankey: createSeriesComponent(\"sankey\", \"EChart.Sankey\"),\n Graph: createSeriesComponent(\"graph\", \"EChart.Graph\"),\n Candlestick: createSeriesComponent(\"candlestick\", \"EChart.Candlestick\"),\n Boxplot: createSeriesComponent(\"boxplot\", \"EChart.Boxplot\"),\n Parallel: createSeriesComponent(\"parallel\", \"EChart.Parallel\"),\n ThemeRiver: createSeriesComponent(\"themeRiver\", \"EChart.ThemeRiver\"),\n Map: createSeriesComponent(\"map\", \"EChart.Map\"),\n Custom: createSeriesComponent(\"custom\", \"EChart.Custom\"),\n EffectScatter: createSeriesComponent(\n \"effectScatter\",\n \"EChart.EffectScatter\"\n ),\n PictorialBar: createSeriesComponent(\"pictorialBar\", \"EChart.PictorialBar\"),\n});\n","import React, { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type {\n EChartComponentProps,\n SeriesComponentProps,\n ChartDivProps,\n} from \"../types\";\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 500 };\n\nlet glLoaded = false;\nlet glPromise: Promise<void> | null = null;\n\nfunction loadEChartsGL(): Promise<void> {\n if (glLoaded) return Promise.resolve();\n if (!glPromise) {\n glPromise = import(\"echarts-gl\")\n .then(() => {\n glLoaded = true;\n })\n .catch((err: unknown) => {\n console.warn(\"Failed to load echarts-gl for 3D charts:\", err);\n });\n }\n return glPromise;\n}\n\n/** Wrapper that delays mount until echarts-gl is loaded */\nfunction WithGL({ children, style, className }: { children: React.ReactNode; style?: React.CSSProperties; className?: string }) {\n const [ready, setReady] = useState(glLoaded);\n\n useEffect(() => {\n if (glLoaded) {\n setReady(true);\n return;\n }\n loadEChartsGL().then(() => setReady(true));\n }, []);\n\n if (!ready) {\n return (\n <div style={{ ...DEFAULT_STYLE, ...style, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }} className={className}>\n <span style={{ color: \"#9ca3af\", fontSize: 14 }}>Loading 3D engine...</span>\n </div>\n );\n }\n\n return <>{children}</>;\n}\n\n/**\n * EChart3D — 3D chart component that lazy-loads the bundled echarts-gl\n * engine on first mount (split into its own chunk to keep the main bundle small).\n */\nconst EChart3DInner = forwardRef<HTMLDivElement, EChartComponentProps>(\n (\n {\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChart3DInner.displayName = \"EChart3DInner\";\n\nconst EChart3DBase = forwardRef<HTMLDivElement, EChartComponentProps>(\n (props, ref) => {\n const { style, className, ...rest } = props;\n return (\n <WithGL style={style} className={className}>\n <EChart3DInner ref={ref} style={style} className={className} {...rest} />\n </WithGL>\n );\n }\n);\n\nEChart3DBase.displayName = \"EChart3D\";\n\nfunction create3DSeriesComponent(\n seriesType: string,\n displayName: string\n): React.FC<SeriesComponentProps & ChartDivProps> {\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\n data,\n title,\n tooltip = true,\n seriesOptions = {},\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: any = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n if (tooltip === true) {\n base.tooltip = {};\n } else if (tooltip && typeof tooltip === \"object\") {\n base.tooltip = tooltip;\n }\n\n if ([\"bar3D\", \"scatter3D\", \"line3D\", \"surface\"].includes(seriesType)) {\n base.xAxis3D = { type: \"value\" };\n base.yAxis3D = { type: \"value\" };\n base.zAxis3D = { type: \"value\" };\n base.grid3D = {};\n }\n\n base.series = [{ type: seriesType, data, ...seriesOptions }];\n\n return { ...base, ...extraOption } as EChartsOption;\n }, [data, title, tooltip, seriesOptions, extraOption]);\n\n return (\n <EChart3DBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n\nfunction createGlobeComponent(): React.FC<\n Omit<SeriesComponentProps, \"data\"> &\n ChartDivProps & { globe?: any; series?: any[] }\n> {\n const Component: React.FC<\n Omit<SeriesComponentProps, \"data\"> &\n ChartDivProps & { globe?: any; series?: any[] }\n > = ({\n title,\n globe,\n series = [],\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: any = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n base.globe = globe ?? {\n baseTexture: \"\",\n shading: \"lambert\",\n atmosphere: { show: true },\n };\n\n if (series.length > 0) {\n base.series = series;\n }\n\n return { ...base, ...extraOption } as EChartsOption;\n }, [title, globe, series, extraOption]);\n\n return (\n <EChart3DBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = \"EChart3D.Globe\";\n return Component;\n}\n\nexport const EChart3D = Object.assign(EChart3DBase, {\n Bar: create3DSeriesComponent(\"bar3D\", \"EChart3D.Bar\"),\n Scatter: create3DSeriesComponent(\"scatter3D\", \"EChart3D.Scatter\"),\n Line: create3DSeriesComponent(\"line3D\", \"EChart3D.Line\"),\n Surface: create3DSeriesComponent(\"surface\", \"EChart3D.Surface\"),\n Globe: createGlobeComponent(),\n});\n","import React, { forwardRef, useMemo } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type { EChartBaseProps, ChartDivProps } from \"../types\";\n\nexport interface GraphicElement {\n type:\n | \"rect\"\n | \"circle\"\n | \"ring\"\n | \"arc\"\n | \"polygon\"\n | \"polyline\"\n | \"path\"\n | \"image\"\n | \"text\"\n | \"group\";\n left?: number | string;\n top?: number | string;\n right?: number | string;\n bottom?: number | string;\n shape?: Record<string, any>;\n style?: Record<string, any>;\n children?: GraphicElement[];\n onclick?: (e: any) => void;\n onmouseover?: (e: any) => void;\n onmouseout?: (e: any) => void;\n [key: string]: any;\n}\n\nexport interface EChartGraphicProps\n extends Omit<EChartBaseProps, \"option\">,\n ChartDivProps,\n React.HTMLAttributes<HTMLDivElement> {\n elements: GraphicElement[];\n option?: Partial<EChartsOption>;\n}\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\n\n/**\n * EChartGraphic — for custom drawing via ECharts graphic layer.\n * Supports rect, circle, ring, arc, polygon, polyline, path, image, text, group elements.\n */\nexport const EChartGraphic = forwardRef<HTMLDivElement, EChartGraphicProps>(\n (\n {\n elements,\n option: extraOption = {},\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const option = useMemo((): EChartsOption => {\n return {\n graphic: {\n elements,\n },\n ...extraOption,\n } as EChartsOption;\n }, [elements, extraOption]);\n\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChartGraphic.displayName = \"EChartGraphic\";\n","import { use } from \"echarts/core\";\nimport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n} from \"echarts/charts\";\nimport {\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n RadarComponent as RadarComp,\n DatasetComponent,\n MarkLineComponent,\n MarkPointComponent,\n MarkAreaComponent,\n TimelineComponent,\n BrushComponent,\n SingleAxisComponent,\n} from \"echarts/components\";\nimport { CanvasRenderer, SVGRenderer } from \"echarts/renderers\";\n\nconst allCharts = [\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n] as const;\n\nconst allComponents = [\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n RadarComp,\n DatasetComponent,\n MarkLineComponent,\n MarkPointComponent,\n MarkAreaComponent,\n TimelineComponent,\n BrushComponent,\n SingleAxisComponent,\n] as const;\n\nconst allRenderers = [CanvasRenderer, SVGRenderer] as const;\n\nlet registered = false;\n\n/** Register all ECharts chart types, components, and renderers. Convenient for demos/quick starts. */\nexport function registerAll(): void {\n if (registered) return;\n use([...allCharts, ...allComponents, ...allRenderers] as any);\n registered = true;\n}\n\n/** Register specific chart types by name for tree-shaking optimization. */\nexport function registerCharts(\n ...chartTypes: Array<(typeof allCharts)[number]>\n): void {\n use(chartTypes as any);\n}\n\n/** Register specific components by reference. */\nexport function registerComponents(\n ...components: Array<(typeof allComponents)[number]>\n): void {\n use(components as any);\n}\n\n// Re-export individual charts and components for manual registration\nexport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n DatasetComponent,\n SingleAxisComponent,\n CanvasRenderer,\n SVGRenderer,\n};\n","import { registerTheme as echartsRegisterTheme } from \"echarts/core\";\n\n/** Dark theme preset */\nexport const darkTheme = {\n backgroundColor: \"#1a1a2e\",\n textStyle: { color: \"#e0e0e0\" },\n title: { textStyle: { color: \"#ffffff\" } },\n legend: { textStyle: { color: \"#cccccc\" } },\n categoryAxis: {\n axisLine: { lineStyle: { color: \"#444\" } },\n splitLine: { lineStyle: { color: \"#333\" } },\n axisLabel: { color: \"#aaa\" },\n },\n valueAxis: {\n axisLine: { lineStyle: { color: \"#444\" } },\n splitLine: { lineStyle: { color: \"#333\" } },\n axisLabel: { color: \"#aaa\" },\n },\n color: [\n \"#5470c6\",\n \"#91cc75\",\n \"#fac858\",\n \"#ee6666\",\n \"#73c0de\",\n \"#3ba272\",\n \"#fc8452\",\n \"#9a60b4\",\n \"#ea7ccc\",\n ],\n};\n\n/** Vintage theme preset */\nexport const vintageTheme = {\n color: [\n \"#d87c7c\",\n \"#919e8b\",\n \"#d7ab82\",\n \"#6e7074\",\n \"#61a0a8\",\n \"#efa18d\",\n \"#787464\",\n \"#cc7e63\",\n \"#724e58\",\n \"#4b565b\",\n ],\n backgroundColor: \"#fef8ef\",\n textStyle: {},\n title: { textStyle: { color: \"#333333\" } },\n categoryAxis: {\n axisLine: { lineStyle: { color: \"#ccc\" } },\n splitLine: { lineStyle: { color: \"#eee\" } },\n },\n valueAxis: {\n axisLine: { lineStyle: { color: \"#ccc\" } },\n splitLine: { lineStyle: { color: \"#eee\" } },\n },\n};\n\n/** Pastel theme preset */\nexport const pastelTheme = {\n color: [\n \"#c4b5fd\",\n \"#a5f3fc\",\n \"#fca5a5\",\n \"#fde68a\",\n \"#a7f3d0\",\n \"#fbcfe8\",\n \"#c7d2fe\",\n \"#fed7aa\",\n ],\n backgroundColor: \"#fafafa\",\n textStyle: { color: \"#555\" },\n title: { textStyle: { color: \"#333\" } },\n};\n\n/** Register a named theme with ECharts */\nexport function registerTheme(name: string, theme: object): void {\n echartsRegisterTheme(name, theme);\n}\n\n/** Register all built-in theme presets */\nexport function registerBuiltinThemes(): void {\n registerTheme(\"dark-preset\", darkTheme);\n registerTheme(\"vintage\", vintageTheme);\n registerTheme(\"pastel\", pastelTheme);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Diagram/diagram.serializers.ts","../src/hooks/use-resize-observer.ts","../src/hooks/use-echarts.ts","../src/components/EChart.tsx","../src/components/EChart3D.tsx","../src/components/EChartGraphic.tsx","../src/utils/register.ts","../src/utils/themes.ts","../src/utils/cn.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-pan-zoom.ts","../src/hooks/use-node-registry.ts","../src/components/Diagram/_canvas/Canvas.context.ts","../src/components/Diagram/_canvas/CanvasNode.tsx","../src/components/Diagram/_canvas/canvas.utils.ts","../src/components/Diagram/_canvas/CanvasEdge.tsx","../src/components/Diagram/_canvas/CanvasMinimap.tsx","../src/components/Diagram/_canvas/CanvasControls.tsx","../src/components/Diagram/_canvas/Canvas.tsx","../src/components/Diagram/Diagram.context.ts","../src/components/Diagram/DiagramField.tsx","../src/components/Diagram/DiagramEntity.tsx","../src/components/Diagram/diagram.markers.ts","../src/components/Diagram/diagram.routing.ts","../src/components/Diagram/DiagramRelation.tsx","../src/components/Diagram/DiagramToolbar.tsx","../src/components/Diagram/diagram.layout.ts","../src/components/Diagram/Diagram.tsx","../src/components/Diagrams/DataDiagram.tsx","../src/components/Diagrams/Flowchart.tsx","../src/components/Diagrams/mindmap.layout.ts","../src/components/Diagrams/Mindmap.tsx","../src/components/Diagrams/orgchart.layout.ts","../src/components/Diagrams/OrgChart.tsx"],"names":["useRef","useEffect","useSyncExternalStore","useState","getInstanceByDom","init","forwardRef","jsx","useMemo","DEFAULT_STYLE","Fragment","LineChart","BarChart","PieChart","ScatterChart","RadarChart","HeatmapChart","GaugeChart","FunnelChart","TreemapChart","SunburstChart","SankeyChart","GraphChart","CandlestickChart","BoxplotChart","ParallelChart","ThemeRiverChart","MapChart","CustomChart","EffectScatterChart","PictorialBarChart","GridComponent","TooltipComponent","TitleComponent","LegendComponent","DataZoomComponent","ToolboxComponent","VisualMapComponent","GeoComponent","ParallelComponent","CalendarComponent","GraphicComponent","PolarComponent","RadarComp","DatasetComponent","MarkLineComponent","MarkPointComponent","MarkAreaComponent","TimelineComponent","BrushComponent","SingleAxisComponent","CanvasRenderer","SVGRenderer","use","echartsRegisterTheme","useCallback","createContext","useContext","offset","jsxs","Children","distance","bezierPath","serializeToERD","serializeToUML","serializeToDFD","deserializeSchema","HEADER_HEIGHT","FIELD_HEIGHT","PADDING","startSlot","flatten"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n DiagramSchema,\n DiagramEntityData,\n DiagramRelationData,\n DiagramFieldData,\n ExportFormat,\n RelationType,\n} from \"./Diagram.types\";\n\n/**\n * Serialize a diagram schema to PlantUML-style ERD text.\n *\n * Example output:\n * ```\n * [Users]\n * id int PK\n * email varchar\n *\n * [Posts]\n * id int PK\n * user_id int FK\n *\n * Users 1--* Posts\n * ```\n */\nexport function serializeToERD(schema: DiagramSchema): string {\n const lines: string[] = [];\n\n for (const entity of schema.entities) {\n lines.push(`[${entity.name}]`);\n if (entity.fields) {\n for (const field of entity.fields) {\n const parts = [` ${field.name}`];\n if (field.type) parts.push(field.type);\n if (field.primary) parts.push(\"PK\");\n if (field.foreign) parts.push(\"FK\");\n if (field.nullable) parts.push(\"?\");\n lines.push(parts.join(\" \"));\n }\n }\n lines.push(\"\");\n }\n\n for (const rel of schema.relations) {\n const fromEntity = schema.entities.find((e) => e.id === rel.from);\n const toEntity = schema.entities.find((e) => e.id === rel.to);\n if (!fromEntity || !toEntity) continue;\n\n const marker = getERDMarker(rel.type);\n const parts = [fromEntity.name, marker, toEntity.name];\n if (rel.label) parts.push(`: ${rel.label}`);\n lines.push(parts.join(\" \"));\n }\n\n return lines.join(\"\\n\").trim();\n}\n\nfunction getERDMarker(type: RelationType): string {\n switch (type) {\n case \"one-to-one\":\n return \"1--1\";\n case \"one-to-many\":\n return \"1--*\";\n case \"many-to-many\":\n return \"*--*\";\n default:\n return \"--\";\n }\n}\n\n/**\n * Serialize a diagram schema to PlantUML class diagram text.\n */\nexport function serializeToUML(schema: DiagramSchema): string {\n const lines: string[] = [\"@startuml\"];\n\n for (const entity of schema.entities) {\n lines.push(`class ${entity.name} {`);\n if (entity.fields) {\n for (const field of entity.fields) {\n const typeStr = field.type ?? \"any\";\n const nullable = field.nullable ? \"?\" : \"\";\n const stereotype = field.primary\n ? \" <<PK>>\"\n : field.foreign\n ? \" <<FK>>\"\n : \"\";\n lines.push(` ${field.name} : ${typeStr}${nullable}${stereotype}`);\n }\n }\n lines.push(\"}\");\n lines.push(\"\");\n }\n\n for (const rel of schema.relations) {\n const fromEntity = schema.entities.find((e) => e.id === rel.from);\n const toEntity = schema.entities.find((e) => e.id === rel.to);\n if (!fromEntity || !toEntity) continue;\n\n const arrow = getUMLArrow(rel.type);\n const label = rel.label ? ` : ${rel.label}` : \"\";\n lines.push(`${fromEntity.name} ${arrow} ${toEntity.name}${label}`);\n }\n\n lines.push(\"@enduml\");\n return lines.join(\"\\n\");\n}\n\nfunction getUMLArrow(type: RelationType): string {\n switch (type) {\n case \"one-to-one\":\n return '\"1\" -- \"1\"';\n case \"one-to-many\":\n return '\"1\" -- \"*\"';\n case \"many-to-many\":\n return '\"*\" -- \"*\"';\n default:\n return \"--\";\n }\n}\n\n/**\n * Serialize a diagram schema to a simple DFD text format.\n */\nexport function serializeToDFD(schema: DiagramSchema): string {\n const lines: string[] = [];\n\n for (const entity of schema.entities) {\n lines.push(`entity ${entity.name}`);\n }\n\n lines.push(\"\");\n\n for (const rel of schema.relations) {\n const fromEntity = schema.entities.find((e) => e.id === rel.from);\n const toEntity = schema.entities.find((e) => e.id === rel.to);\n if (!fromEntity || !toEntity) continue;\n\n const label = rel.label ? ` \"${rel.label}\"` : \"\";\n lines.push(`${fromEntity.name} -> ${toEntity.name}${label}`);\n }\n\n return lines.join(\"\\n\").trim();\n}\n\n/**\n * Parse a serialized schema string back into a DiagramSchema.\n */\nexport function deserializeSchema(\n input: string,\n format: ExportFormat,\n): DiagramSchema {\n switch (format) {\n case \"erd\":\n return deserializeERD(input);\n case \"uml\":\n return deserializeUML(input);\n case \"dfd\":\n return deserializeDFD(input);\n }\n}\n\nfunction deserializeERD(input: string): DiagramSchema {\n const entities: DiagramEntityData[] = [];\n const relations: DiagramRelationData[] = [];\n const lines = input.split(\"\\n\");\n\n let currentEntity: DiagramEntityData | null = null;\n\n for (const rawLine of lines) {\n const line = rawLine.trim();\n\n // Entity header: [EntityName]\n const entityMatch = line.match(/^\\[(.+)\\]$/);\n if (entityMatch) {\n currentEntity = {\n id: entityMatch[1].toLowerCase().replace(/\\s+/g, \"_\"),\n name: entityMatch[1],\n fields: [],\n };\n entities.push(currentEntity);\n continue;\n }\n\n // Field line (indented): name type PK FK ?\n if (currentEntity && rawLine.startsWith(\" \") && line.length > 0) {\n const parts = line.split(/\\s+/);\n const field: DiagramFieldData = { name: parts[0] };\n if (parts.length > 1 && ![\"PK\", \"FK\", \"?\"].includes(parts[1])) {\n field.type = parts[1];\n }\n if (parts.includes(\"PK\")) field.primary = true;\n if (parts.includes(\"FK\")) field.foreign = true;\n if (parts.includes(\"?\")) field.nullable = true;\n currentEntity.fields!.push(field);\n continue;\n }\n\n // Relation: EntityA 1--* EntityB : label\n const relMatch = line.match(\n /^(\\S+)\\s+(1--1|1--\\*|\\*--\\*)\\s+(\\S+)(?:\\s*:\\s*(.+))?$/,\n );\n if (relMatch) {\n currentEntity = null;\n const fromName = relMatch[1];\n const marker = relMatch[2];\n const toName = relMatch[3];\n const label = relMatch[4];\n\n const fromEntity = entities.find((e) => e.name === fromName);\n const toEntity = entities.find((e) => e.name === toName);\n if (fromEntity && toEntity) {\n relations.push({\n id: `${fromEntity.id ?? fromEntity.name}_${toEntity.id ?? toEntity.name}`,\n from: fromEntity.id ?? fromEntity.name,\n to: toEntity.id ?? toEntity.name,\n type: parseERDMarker(marker),\n label,\n });\n }\n continue;\n }\n\n // Empty line resets current entity context\n if (line === \"\") {\n currentEntity = null;\n }\n }\n\n return { entities, relations };\n}\n\nfunction parseERDMarker(marker: string): RelationType {\n switch (marker) {\n case \"1--1\":\n return \"one-to-one\";\n case \"1--*\":\n return \"one-to-many\";\n case \"*--*\":\n return \"many-to-many\";\n default:\n return \"one-to-many\";\n }\n}\n\nfunction deserializeUML(input: string): DiagramSchema {\n const entities: DiagramEntityData[] = [];\n const relations: DiagramRelationData[] = [];\n const lines = input.split(\"\\n\");\n\n let currentEntity: DiagramEntityData | null = null;\n\n for (const rawLine of lines) {\n const line = rawLine.trim();\n\n if (line === \"@startuml\" || line === \"@enduml\" || line === \"\") continue;\n\n // Class header: class EntityName {\n const classMatch = line.match(/^class\\s+(\\S+)\\s*\\{$/);\n if (classMatch) {\n currentEntity = {\n id: classMatch[1].toLowerCase().replace(/\\s+/g, \"_\"),\n name: classMatch[1],\n fields: [],\n };\n entities.push(currentEntity);\n continue;\n }\n\n // Closing brace\n if (line === \"}\") {\n currentEntity = null;\n continue;\n }\n\n // Field: name : type<<stereotype>>\n if (currentEntity) {\n const fieldMatch = line.match(\n /^(\\S+)\\s*:\\s*(\\S+?)(\\?)?(?:\\s*<<(PK|FK)>>)?$/,\n );\n if (fieldMatch) {\n const field: DiagramFieldData = {\n name: fieldMatch[1],\n type: fieldMatch[2],\n };\n if (fieldMatch[3]) field.nullable = true;\n if (fieldMatch[4] === \"PK\") field.primary = true;\n if (fieldMatch[4] === \"FK\") field.foreign = true;\n currentEntity.fields!.push(field);\n }\n continue;\n }\n\n // Relation: EntityA \"1\" -- \"*\" EntityB : label\n const relMatch = line.match(\n /^(\\S+)\\s+\"([1*])\"\\s+--\\s+\"([1*])\"\\s+(\\S+)(?:\\s*:\\s*(.+))?$/,\n );\n if (relMatch) {\n const fromName = relMatch[1];\n const fromCard = relMatch[2];\n const toCard = relMatch[3];\n const toName = relMatch[4];\n const label = relMatch[5];\n\n const fromEntity = entities.find((e) => e.name === fromName);\n const toEntity = entities.find((e) => e.name === toName);\n if (fromEntity && toEntity) {\n const type: RelationType =\n fromCard === \"1\" && toCard === \"1\"\n ? \"one-to-one\"\n : fromCard === \"1\" && toCard === \"*\"\n ? \"one-to-many\"\n : \"many-to-many\";\n relations.push({\n id: `${fromEntity.id ?? fromEntity.name}_${toEntity.id ?? toEntity.name}`,\n from: fromEntity.id ?? fromEntity.name,\n to: toEntity.id ?? toEntity.name,\n type,\n label,\n });\n }\n }\n }\n\n return { entities, relations };\n}\n\nfunction deserializeDFD(input: string): DiagramSchema {\n const entities: DiagramEntityData[] = [];\n const relations: DiagramRelationData[] = [];\n const lines = input.split(\"\\n\");\n\n for (const rawLine of lines) {\n const line = rawLine.trim();\n if (line === \"\") continue;\n\n // Entity: entity EntityName\n const entityMatch = line.match(/^entity\\s+(\\S+)$/);\n if (entityMatch) {\n entities.push({\n id: entityMatch[1].toLowerCase().replace(/\\s+/g, \"_\"),\n name: entityMatch[1],\n fields: [],\n });\n continue;\n }\n\n // Flow: EntityA -> EntityB \"label\"\n const flowMatch = line.match(\n /^(\\S+)\\s+->\\s+(\\S+)(?:\\s+\"(.+)\")?$/,\n );\n if (flowMatch) {\n const fromName = flowMatch[1];\n const toName = flowMatch[2];\n const label = flowMatch[3];\n\n const fromEntity = entities.find((e) => e.name === fromName);\n const toEntity = entities.find((e) => e.name === toName);\n if (fromEntity && toEntity) {\n relations.push({\n id: `${fromEntity.id ?? fromEntity.name}_${toEntity.id ?? toEntity.name}`,\n from: fromEntity.id ?? fromEntity.name,\n to: toEntity.id ?? toEntity.name,\n type: \"one-to-many\",\n label,\n });\n }\n }\n }\n\n return { entities, relations };\n}\n","import { useEffect, useRef, type RefObject } from \"react\";\n\nexport function useResizeObserver(\n ref: RefObject<HTMLElement | null>,\n callback: () => void\n): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new ResizeObserver(() => {\n callbackRef.current();\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [ref]);\n}\n","import { useEffect, useRef, useState, useSyncExternalStore, type RefObject } from \"react\";\nimport { init, getInstanceByDom, type EChartsType } from \"echarts/core\";\nimport type { EChartsOption } from \"echarts\";\n\ntype ECharts = EChartsType;\nimport { useResizeObserver } from \"./use-resize-observer\";\n\nexport interface UseEChartsOptions {\n option: EChartsOption;\n theme?: string | object;\n renderer?: \"canvas\" | \"svg\";\n notMerge?: boolean;\n lazyUpdate?: boolean;\n showLoading?: boolean;\n loadingOption?: object;\n onEvents?: Record<string, (params: any) => void>;\n autoResize?: boolean;\n}\n\nexport interface UseEChartsReturn {\n chartRef: RefObject<HTMLDivElement | null>;\n instance: ECharts | null;\n}\n\n/** Detect system dark mode preference reactively. */\nfunction useDarkMode(): boolean {\n return useSyncExternalStore(\n (callback) => {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n mq.addEventListener(\"change\", callback);\n return () => mq.removeEventListener(\"change\", callback);\n },\n () => window.matchMedia(\"(prefers-color-scheme: dark)\").matches,\n () => false,\n );\n}\n\nexport function useECharts(options: UseEChartsOptions): UseEChartsReturn {\n const {\n option,\n theme,\n renderer = \"canvas\",\n notMerge = false,\n lazyUpdate = false,\n showLoading = false,\n loadingOption,\n onEvents,\n autoResize = true,\n } = options;\n\n const isDark = useDarkMode();\n // Auto-detect theme: use explicit theme if provided, otherwise \"dark\" or undefined\n const autoDark = theme === undefined && isDark;\n const resolvedTheme = theme !== undefined ? theme : isDark ? \"dark\" : undefined;\n\n const chartRef = useRef<HTMLDivElement | null>(null);\n const instanceRef = useRef<ECharts | null>(null);\n const [instance, setInstance] = useState<ECharts | null>(null);\n\n // Init/dispose — re-init when theme changes (including dark mode toggle)\n useEffect(() => {\n if (!chartRef.current) return;\n\n // Dispose any existing instance (handles StrictMode double-mount)\n const existing = getInstanceByDom(chartRef.current);\n if (existing) {\n existing.dispose();\n }\n\n const chart = init(chartRef.current, resolvedTheme, { renderer });\n instanceRef.current = chart;\n setInstance(chart);\n\n return () => {\n chart.dispose();\n instanceRef.current = null;\n setInstance(null);\n };\n }, [resolvedTheme, renderer]);\n\n // Set option\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart || !option) return;\n // When using auto-detected dark theme, force transparent background\n // so charts blend with the page's own dark background\n const finalOption = autoDark\n ? { backgroundColor: \"transparent\", ...option }\n : option;\n chart.setOption(finalOption, { notMerge, lazyUpdate });\n }, [option, notMerge, lazyUpdate, autoDark]);\n\n // Loading state\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart) return;\n if (showLoading) {\n chart.showLoading(\"default\", loadingOption);\n } else {\n chart.hideLoading();\n }\n }, [showLoading, loadingOption]);\n\n // Event binding\n useEffect(() => {\n const chart = instanceRef.current;\n if (!chart || !onEvents) return;\n\n const entries = Object.entries(onEvents);\n for (const [event, handler] of entries) {\n chart.on(event, handler);\n }\n\n return () => {\n for (const [event, handler] of entries) {\n chart.off(event, handler);\n }\n };\n }, [onEvents]);\n\n // Auto-resize\n useResizeObserver(chartRef, () => {\n if (autoResize && instanceRef.current) {\n instanceRef.current.resize();\n }\n });\n\n return { chartRef, instance };\n}\n","import React, { forwardRef, useMemo } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type {\n EChartComponentProps,\n SeriesComponentProps,\n ChartDivProps,\n} from \"../types\";\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\n\n/** Base EChart component — accepts any ECharts option. */\nconst EChartBase = forwardRef<HTMLDivElement, EChartComponentProps>(\n (\n {\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChartBase.displayName = \"EChart\";\n\n// --- Helper to create typed series sub-components ---\n\nfunction createSeriesComponent(\n seriesType: string,\n displayName: string\n): React.FC<SeriesComponentProps & ChartDivProps> {\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\n data,\n title,\n xAxis,\n yAxis,\n tooltip = true,\n legend = false,\n grid,\n seriesOptions = {},\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: EChartsOption = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n if (tooltip === true) {\n base.tooltip = { trigger: \"axis\" };\n } else if (tooltip && typeof tooltip === \"object\") {\n base.tooltip = tooltip;\n }\n\n if (legend === true) {\n base.legend = {};\n } else if (legend && typeof legend === \"object\") {\n base.legend = legend;\n }\n\n if (grid) {\n base.grid = grid;\n }\n\n // Handle axis-based charts\n const axisCharts = [\n \"line\",\n \"bar\",\n \"scatter\",\n \"candlestick\",\n \"boxplot\",\n \"heatmap\",\n \"effectScatter\",\n \"pictorialBar\",\n ];\n if (axisCharts.includes(seriesType)) {\n base.xAxis = xAxis ?? { type: \"category\" };\n base.yAxis = yAxis ?? { type: \"value\" };\n }\n\n // Handle data format\n if (Array.isArray(data)) {\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\n } else if (data && typeof data === \"object\" && \"series\" in data) {\n // Multi-series: { categories: [...], series: [{ name, data }, ...] }\n const multiData = data as {\n categories?: string[];\n series: Array<{ name?: string; data: any[]; [k: string]: any }>;\n };\n if (multiData.categories && axisCharts.includes(seriesType)) {\n base.xAxis = xAxis ?? {\n type: \"category\",\n data: multiData.categories,\n };\n }\n base.series = multiData.series.map((s) => ({\n type: seriesType,\n ...seriesOptions,\n ...s,\n })) as any;\n } else {\n base.series = [{ type: seriesType, data, ...seriesOptions }] as any;\n }\n\n return { ...base, ...extraOption };\n }, [\n data,\n title,\n xAxis,\n yAxis,\n tooltip,\n legend,\n grid,\n seriesOptions,\n extraOption,\n ]);\n\n return (\n <EChartBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n\n// --- Compound component with all chart type sub-components ---\n\nexport const EChart = Object.assign(EChartBase, {\n Line: createSeriesComponent(\"line\", \"EChart.Line\"),\n Bar: createSeriesComponent(\"bar\", \"EChart.Bar\"),\n Pie: createSeriesComponent(\"pie\", \"EChart.Pie\"),\n Scatter: createSeriesComponent(\"scatter\", \"EChart.Scatter\"),\n Radar: createSeriesComponent(\"radar\", \"EChart.Radar\"),\n Heatmap: createSeriesComponent(\"heatmap\", \"EChart.Heatmap\"),\n Gauge: createSeriesComponent(\"gauge\", \"EChart.Gauge\"),\n Funnel: createSeriesComponent(\"funnel\", \"EChart.Funnel\"),\n Treemap: createSeriesComponent(\"treemap\", \"EChart.Treemap\"),\n Sunburst: createSeriesComponent(\"sunburst\", \"EChart.Sunburst\"),\n Sankey: createSeriesComponent(\"sankey\", \"EChart.Sankey\"),\n Graph: createSeriesComponent(\"graph\", \"EChart.Graph\"),\n Candlestick: createSeriesComponent(\"candlestick\", \"EChart.Candlestick\"),\n Boxplot: createSeriesComponent(\"boxplot\", \"EChart.Boxplot\"),\n Parallel: createSeriesComponent(\"parallel\", \"EChart.Parallel\"),\n ThemeRiver: createSeriesComponent(\"themeRiver\", \"EChart.ThemeRiver\"),\n Map: createSeriesComponent(\"map\", \"EChart.Map\"),\n Custom: createSeriesComponent(\"custom\", \"EChart.Custom\"),\n EffectScatter: createSeriesComponent(\n \"effectScatter\",\n \"EChart.EffectScatter\"\n ),\n PictorialBar: createSeriesComponent(\"pictorialBar\", \"EChart.PictorialBar\"),\n});\n","import React, { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type {\n EChartComponentProps,\n SeriesComponentProps,\n ChartDivProps,\n} from \"../types\";\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 500 };\n\nlet glLoaded = false;\nlet glPromise: Promise<void> | null = null;\n\nfunction loadEChartsGL(): Promise<void> {\n if (glLoaded) return Promise.resolve();\n if (!glPromise) {\n glPromise = import(\"echarts-gl\")\n .then(() => {\n glLoaded = true;\n })\n .catch((err: unknown) => {\n console.warn(\"Failed to load echarts-gl for 3D charts:\", err);\n });\n }\n return glPromise;\n}\n\n/** Wrapper that delays mount until echarts-gl is loaded */\nfunction WithGL({ children, style, className }: { children: React.ReactNode; style?: React.CSSProperties; className?: string }) {\n const [ready, setReady] = useState(glLoaded);\n\n useEffect(() => {\n if (glLoaded) {\n setReady(true);\n return;\n }\n loadEChartsGL().then(() => setReady(true));\n }, []);\n\n if (!ready) {\n return (\n <div style={{ ...DEFAULT_STYLE, ...style, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }} className={className}>\n <span style={{ color: \"#9ca3af\", fontSize: 14 }}>Loading 3D engine...</span>\n </div>\n );\n }\n\n return <>{children}</>;\n}\n\n/**\n * EChart3D — 3D chart component that lazy-loads the bundled echarts-gl\n * engine on first mount (split into its own chunk to keep the main bundle small).\n */\nconst EChart3DInner = forwardRef<HTMLDivElement, EChartComponentProps>(\n (\n {\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChart3DInner.displayName = \"EChart3DInner\";\n\nconst EChart3DBase = forwardRef<HTMLDivElement, EChartComponentProps>(\n (props, ref) => {\n const { style, className, ...rest } = props;\n return (\n <WithGL style={style} className={className}>\n <EChart3DInner ref={ref} style={style} className={className} {...rest} />\n </WithGL>\n );\n }\n);\n\nEChart3DBase.displayName = \"EChart3D\";\n\nfunction create3DSeriesComponent(\n seriesType: string,\n displayName: string\n): React.FC<SeriesComponentProps & ChartDivProps> {\n const Component: React.FC<SeriesComponentProps & ChartDivProps> = ({\n data,\n title,\n tooltip = true,\n seriesOptions = {},\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: any = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n if (tooltip === true) {\n base.tooltip = {};\n } else if (tooltip && typeof tooltip === \"object\") {\n base.tooltip = tooltip;\n }\n\n if ([\"bar3D\", \"scatter3D\", \"line3D\", \"surface\"].includes(seriesType)) {\n base.xAxis3D = { type: \"value\" };\n base.yAxis3D = { type: \"value\" };\n base.zAxis3D = { type: \"value\" };\n base.grid3D = {};\n }\n\n base.series = [{ type: seriesType, data, ...seriesOptions }];\n\n return { ...base, ...extraOption } as EChartsOption;\n }, [data, title, tooltip, seriesOptions, extraOption]);\n\n return (\n <EChart3DBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = displayName;\n return Component;\n}\n\nfunction createGlobeComponent(): React.FC<\n Omit<SeriesComponentProps, \"data\"> &\n ChartDivProps & { globe?: any; series?: any[] }\n> {\n const Component: React.FC<\n Omit<SeriesComponentProps, \"data\"> &\n ChartDivProps & { globe?: any; series?: any[] }\n > = ({\n title,\n globe,\n series = [],\n option: extraOption = {},\n style,\n className,\n ...rest\n }) => {\n const option = useMemo((): EChartsOption => {\n const base: any = {};\n\n if (title) {\n base.title = { text: title };\n }\n\n base.globe = globe ?? {\n baseTexture: \"\",\n shading: \"lambert\",\n atmosphere: { show: true },\n };\n\n if (series.length > 0) {\n base.series = series;\n }\n\n return { ...base, ...extraOption } as EChartsOption;\n }, [title, globe, series, extraOption]);\n\n return (\n <EChart3DBase\n option={option}\n style={style}\n className={className}\n {...rest}\n />\n );\n };\n\n Component.displayName = \"EChart3D.Globe\";\n return Component;\n}\n\nexport const EChart3D = Object.assign(EChart3DBase, {\n Bar: create3DSeriesComponent(\"bar3D\", \"EChart3D.Bar\"),\n Scatter: create3DSeriesComponent(\"scatter3D\", \"EChart3D.Scatter\"),\n Line: create3DSeriesComponent(\"line3D\", \"EChart3D.Line\"),\n Surface: create3DSeriesComponent(\"surface\", \"EChart3D.Surface\"),\n Globe: createGlobeComponent(),\n});\n","import React, { forwardRef, useMemo } from \"react\";\nimport type { EChartsOption } from \"echarts\";\nimport { useECharts } from \"../hooks/use-echarts\";\nimport type { EChartBaseProps, ChartDivProps } from \"../types\";\n\nexport interface GraphicElement {\n type:\n | \"rect\"\n | \"circle\"\n | \"ring\"\n | \"arc\"\n | \"polygon\"\n | \"polyline\"\n | \"path\"\n | \"image\"\n | \"text\"\n | \"group\";\n left?: number | string;\n top?: number | string;\n right?: number | string;\n bottom?: number | string;\n shape?: Record<string, any>;\n style?: Record<string, any>;\n children?: GraphicElement[];\n onclick?: (e: any) => void;\n onmouseover?: (e: any) => void;\n onmouseout?: (e: any) => void;\n [key: string]: any;\n}\n\nexport interface EChartGraphicProps\n extends Omit<EChartBaseProps, \"option\">,\n ChartDivProps,\n React.HTMLAttributes<HTMLDivElement> {\n elements: GraphicElement[];\n option?: Partial<EChartsOption>;\n}\n\nconst DEFAULT_STYLE: React.CSSProperties = { width: \"100%\", height: 400 };\n\n/**\n * EChartGraphic — for custom drawing via ECharts graphic layer.\n * Supports rect, circle, ring, arc, polygon, polyline, path, image, text, group elements.\n */\nexport const EChartGraphic = forwardRef<HTMLDivElement, EChartGraphicProps>(\n (\n {\n elements,\n option: extraOption = {},\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize = true,\n style,\n className,\n ...rest\n },\n _ref\n ) => {\n const option = useMemo((): EChartsOption => {\n return {\n graphic: {\n elements,\n },\n ...extraOption,\n } as EChartsOption;\n }, [elements, extraOption]);\n\n const { chartRef } = useECharts({\n option,\n theme,\n renderer,\n notMerge,\n lazyUpdate,\n showLoading,\n loadingOption,\n onEvents,\n autoResize,\n });\n\n return (\n <div\n ref={chartRef}\n style={{ ...DEFAULT_STYLE, ...style }}\n className={className}\n {...rest}\n />\n );\n }\n);\n\nEChartGraphic.displayName = \"EChartGraphic\";\n","import { use } from \"echarts/core\";\nimport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n} from \"echarts/charts\";\nimport {\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n RadarComponent as RadarComp,\n DatasetComponent,\n MarkLineComponent,\n MarkPointComponent,\n MarkAreaComponent,\n TimelineComponent,\n BrushComponent,\n SingleAxisComponent,\n} from \"echarts/components\";\nimport { CanvasRenderer, SVGRenderer } from \"echarts/renderers\";\n\nconst allCharts = [\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n] as const;\n\nconst allComponents = [\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n RadarComp,\n DatasetComponent,\n MarkLineComponent,\n MarkPointComponent,\n MarkAreaComponent,\n TimelineComponent,\n BrushComponent,\n SingleAxisComponent,\n] as const;\n\nconst allRenderers = [CanvasRenderer, SVGRenderer] as const;\n\nlet registered = false;\n\n/** Register all ECharts chart types, components, and renderers. Convenient for demos/quick starts. */\nexport function registerAll(): void {\n if (registered) return;\n use([...allCharts, ...allComponents, ...allRenderers] as any);\n registered = true;\n}\n\n/** Register specific chart types by name for tree-shaking optimization. */\nexport function registerCharts(\n ...chartTypes: Array<(typeof allCharts)[number]>\n): void {\n use(chartTypes as any);\n}\n\n/** Register specific components by reference. */\nexport function registerComponents(\n ...components: Array<(typeof allComponents)[number]>\n): void {\n use(components as any);\n}\n\n// Re-export individual charts and components for manual registration\nexport {\n LineChart,\n BarChart,\n PieChart,\n ScatterChart,\n RadarChart,\n HeatmapChart,\n GaugeChart,\n FunnelChart,\n TreemapChart,\n SunburstChart,\n SankeyChart,\n GraphChart,\n CandlestickChart,\n BoxplotChart,\n ParallelChart,\n ThemeRiverChart,\n MapChart,\n CustomChart,\n EffectScatterChart,\n PictorialBarChart,\n GridComponent,\n TooltipComponent,\n TitleComponent,\n LegendComponent,\n DataZoomComponent,\n ToolboxComponent,\n VisualMapComponent,\n GeoComponent,\n CalendarComponent,\n GraphicComponent,\n PolarComponent,\n DatasetComponent,\n SingleAxisComponent,\n CanvasRenderer,\n SVGRenderer,\n};\n","import { registerTheme as echartsRegisterTheme } from \"echarts/core\";\n\n/** Dark theme preset */\nexport const darkTheme = {\n backgroundColor: \"#1a1a2e\",\n textStyle: { color: \"#e0e0e0\" },\n title: { textStyle: { color: \"#ffffff\" } },\n legend: { textStyle: { color: \"#cccccc\" } },\n categoryAxis: {\n axisLine: { lineStyle: { color: \"#444\" } },\n splitLine: { lineStyle: { color: \"#333\" } },\n axisLabel: { color: \"#aaa\" },\n },\n valueAxis: {\n axisLine: { lineStyle: { color: \"#444\" } },\n splitLine: { lineStyle: { color: \"#333\" } },\n axisLabel: { color: \"#aaa\" },\n },\n color: [\n \"#5470c6\",\n \"#91cc75\",\n \"#fac858\",\n \"#ee6666\",\n \"#73c0de\",\n \"#3ba272\",\n \"#fc8452\",\n \"#9a60b4\",\n \"#ea7ccc\",\n ],\n};\n\n/** Vintage theme preset */\nexport const vintageTheme = {\n color: [\n \"#d87c7c\",\n \"#919e8b\",\n \"#d7ab82\",\n \"#6e7074\",\n \"#61a0a8\",\n \"#efa18d\",\n \"#787464\",\n \"#cc7e63\",\n \"#724e58\",\n \"#4b565b\",\n ],\n backgroundColor: \"#fef8ef\",\n textStyle: {},\n title: { textStyle: { color: \"#333333\" } },\n categoryAxis: {\n axisLine: { lineStyle: { color: \"#ccc\" } },\n splitLine: { lineStyle: { color: \"#eee\" } },\n },\n valueAxis: {\n axisLine: { lineStyle: { color: \"#ccc\" } },\n splitLine: { lineStyle: { color: \"#eee\" } },\n },\n};\n\n/** Pastel theme preset */\nexport const pastelTheme = {\n color: [\n \"#c4b5fd\",\n \"#a5f3fc\",\n \"#fca5a5\",\n \"#fde68a\",\n \"#a7f3d0\",\n \"#fbcfe8\",\n \"#c7d2fe\",\n \"#fed7aa\",\n ],\n backgroundColor: \"#fafafa\",\n textStyle: { color: \"#555\" },\n title: { textStyle: { color: \"#333\" } },\n};\n\n/** Register a named theme with ECharts */\nexport function registerTheme(name: string, theme: object): void {\n echartsRegisterTheme(name, theme);\n}\n\n/** Register all built-in theme presets */\nexport function registerBuiltinThemes(): void {\n registerTheme(\"dark-preset\", darkTheme);\n registerTheme(\"vintage\", vintageTheme);\n registerTheme(\"pastel\", pastelTheme);\n}\n","type ClassValue = string | number | boolean | undefined | null | ClassValue[] | { [key: string]: unknown };\n\nfunction flatten(value: ClassValue): string {\n if (!value) return \"\";\n if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n if (Array.isArray(value)) return value.map(flatten).filter(Boolean).join(\" \");\n if (typeof value === \"object\") {\n return Object.entries(value)\n .filter(([, v]) => Boolean(v))\n .map(([k]) => k)\n .join(\" \");\n }\n return \"\";\n}\n\nexport function cn(...inputs: ClassValue[]): string {\n return inputs.map(flatten).filter(Boolean).join(\" \");\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport function useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n): [T, (value: T | ((prev: T) => T)) => void] {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const setValue = useCallback(\n (next: T | ((prev: T) => T)) => {\n const nextValue =\n typeof next === \"function\" ? (next as (prev: T) => T)(value) : next;\n\n if (!isControlled) {\n setUncontrolledValue(nextValue);\n }\n\n onChangeRef.current?.(nextValue);\n },\n [isControlled, value],\n );\n\n return [value, setValue];\n}\n","import { useCallback, useEffect, useRef } from \"react\";\n\nexport interface ViewportState {\n panX: number;\n panY: number;\n zoom: number;\n}\n\ninterface UsePanZoomOptions {\n viewport: ViewportState;\n setViewport: (vp: ViewportState | ((prev: ViewportState) => ViewportState)) => void;\n minZoom: number;\n maxZoom: number;\n pannable: boolean;\n zoomable: boolean;\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\ninterface UsePanZoomReturn {\n containerProps: {\n onPointerDown: (e: React.PointerEvent) => void;\n onPointerMove: (e: React.PointerEvent) => void;\n onPointerUp: (e: React.PointerEvent) => void;\n };\n isPanning: boolean;\n}\n\nexport function usePanZoom({\n viewport,\n setViewport,\n minZoom,\n maxZoom,\n pannable,\n zoomable,\n containerRef,\n}: UsePanZoomOptions): UsePanZoomReturn {\n const isPanningRef = useRef(false);\n const startRef = useRef({ x: 0, y: 0, panX: 0, panY: 0 });\n\n // Store latest values in refs so the native wheel listener always sees current state\n const viewportRef = useRef(viewport);\n viewportRef.current = viewport;\n const setViewportRef = useRef(setViewport);\n setViewportRef.current = setViewport;\n const zoomableRef = useRef(zoomable);\n zoomableRef.current = zoomable;\n const minZoomRef = useRef(minZoom);\n minZoomRef.current = minZoom;\n const maxZoomRef = useRef(maxZoom);\n maxZoomRef.current = maxZoom;\n\n // Attach a non-passive wheel listener so preventDefault() actually stops page scroll\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n function handleWheel(e: WheelEvent) {\n if (!zoomableRef.current) return;\n // Require Ctrl+wheel (or pinch gesture) to zoom — don't hijack normal page scroll\n if (!e.ctrlKey && !e.metaKey) return;\n e.preventDefault();\n\n const rect = container!.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const mouseY = e.clientY - rect.top;\n\n setViewportRef.current((prev) => {\n const factor = 1 - e.deltaY * 0.001;\n const newZoom = Math.min(maxZoomRef.current, Math.max(minZoomRef.current, prev.zoom * factor));\n const ratio = newZoom / prev.zoom;\n\n return {\n zoom: newZoom,\n panX: mouseX - (mouseX - prev.panX) * ratio,\n panY: mouseY - (mouseY - prev.panY) * ratio,\n };\n });\n }\n\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => {\n container.removeEventListener(\"wheel\", handleWheel);\n };\n }, [containerRef]);\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (!pannable) return;\n // Only pan on primary button and when clicking the background\n if (e.button !== 0) return;\n const target = e.target as HTMLElement;\n if (target !== containerRef.current && !target.hasAttribute(\"data-canvas-bg\")) return;\n\n isPanningRef.current = true;\n startRef.current = { x: e.clientX, y: e.clientY, panX: viewport.panX, panY: viewport.panY };\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n e.preventDefault();\n },\n [pannable, viewport.panX, viewport.panY, containerRef],\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!isPanningRef.current) return;\n const dx = e.clientX - startRef.current.x;\n const dy = e.clientY - startRef.current.y;\n setViewport((prev) => ({\n ...prev,\n panX: startRef.current.panX + dx,\n panY: startRef.current.panY + dy,\n }));\n },\n [setViewport],\n );\n\n const onPointerUp = useCallback(() => {\n isPanningRef.current = false;\n }, []);\n\n return {\n containerProps: { onPointerDown, onPointerMove, onPointerUp },\n isPanning: isPanningRef.current,\n };\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nexport interface NodeRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface UseNodeRegistryReturn {\n registerNode: (id: string, rect: NodeRect) => void;\n unregisterNode: (id: string) => void;\n nodeRects: Map<string, NodeRect>;\n version: number;\n}\n\nexport function useNodeRegistry(): UseNodeRegistryReturn {\n const rectsRef = useRef(new Map<string, NodeRect>());\n const [version, setVersion] = useState(0);\n\n const registerNode = useCallback((id: string, rect: NodeRect) => {\n rectsRef.current.set(id, rect);\n setVersion((v) => v + 1);\n }, []);\n\n const unregisterNode = useCallback((id: string) => {\n rectsRef.current.delete(id);\n setVersion((v) => v + 1);\n }, []);\n\n return { registerNode, unregisterNode, nodeRects: rectsRef.current, version };\n}\n","import { createContext, useContext } from \"react\";\nimport type { CanvasContextValue } from \"./Canvas.types\";\n\nexport const CanvasContext = createContext<CanvasContextValue | null>(null);\n\nexport function useCanvas(): CanvasContextValue {\n const ctx = useContext(CanvasContext);\n if (!ctx) throw new Error(\"useCanvas must be used within a Canvas component\");\n return ctx;\n}\n","import { useEffect, useRef, useCallback } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useCanvas } from \"./Canvas.context\";\nimport type { CanvasNodeProps } from \"./Canvas.types\";\n\nexport function CanvasNode({ children, id, x, y, draggable, onPositionChange, className, style }: CanvasNodeProps) {\n const { registerNode, unregisterNode, viewport, gridSize, snapToGrid } = useCanvas();\n const nodeRef = useRef<HTMLDivElement>(null);\n const isDragging = useRef(false);\n const dragStart = useRef({ mouseX: 0, mouseY: 0, nodeX: 0, nodeY: 0 });\n\n useEffect(() => {\n const el = nodeRef.current;\n if (!el) return;\n\n const updateRect = () => {\n registerNode(id, { x, y, width: el.offsetWidth, height: el.offsetHeight });\n };\n\n updateRect();\n\n const observer = new ResizeObserver(updateRect);\n observer.observe(el);\n\n return () => {\n observer.disconnect();\n unregisterNode(id);\n };\n }, [id, x, y, registerNode, unregisterNode]);\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (!draggable || e.button !== 0) return;\n e.stopPropagation();\n isDragging.current = true;\n dragStart.current = { mouseX: e.clientX, mouseY: e.clientY, nodeX: x, nodeY: y };\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n },\n [draggable, x, y],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!isDragging.current) return;\n const dx = (e.clientX - dragStart.current.mouseX) / viewport.zoom;\n const dy = (e.clientY - dragStart.current.mouseY) / viewport.zoom;\n let nx = dragStart.current.nodeX + dx;\n let ny = dragStart.current.nodeY + dy;\n if (snapToGrid && gridSize > 0) {\n nx = Math.round(nx / gridSize) * gridSize;\n ny = Math.round(ny / gridSize) * gridSize;\n }\n onPositionChange?.(nx, ny);\n },\n [viewport.zoom, onPositionChange, snapToGrid, gridSize],\n );\n\n const handlePointerUp = useCallback(() => {\n isDragging.current = false;\n }, []);\n\n return (\n <div\n ref={nodeRef}\n data-react-fancy-canvas-node=\"\"\n data-node-id={id}\n className={cn(\"absolute\", draggable && \"cursor-grab active:cursor-grabbing\", className)}\n style={{ left: x, top: y, ...style }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n >\n {children}\n </div>\n );\n}\n\nCanvasNode.displayName = \"CanvasNode\";\n","import type { NodeRect } from \"../../../hooks/use-node-registry\";\nimport type { EdgeAnchor } from \"./Canvas.types\";\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport function getAnchorPoint(rect: NodeRect, anchor: EdgeAnchor, otherRect?: NodeRect): Point {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n\n if (anchor === \"auto\" && otherRect) {\n const ocx = otherRect.x + otherRect.width / 2;\n const ocy = otherRect.y + otherRect.height / 2;\n const dx = ocx - cx;\n const dy = ocy - cy;\n\n if (Math.abs(dx) > Math.abs(dy)) {\n return dx > 0\n ? { x: rect.x + rect.width, y: cy }\n : { x: rect.x, y: cy };\n }\n return dy > 0\n ? { x: cx, y: rect.y + rect.height }\n : { x: cx, y: rect.y };\n }\n\n switch (anchor) {\n case \"top\": return { x: cx, y: rect.y };\n case \"bottom\": return { x: cx, y: rect.y + rect.height };\n case \"left\": return { x: rect.x, y: cy };\n case \"right\": return { x: rect.x + rect.width, y: cy };\n case \"center\": return { x: cx, y: cy };\n default: return { x: cx, y: cy };\n }\n}\n\nexport function bezierPath(from: Point, to: Point): string {\n const dx = Math.abs(to.x - from.x);\n const dy = Math.abs(to.y - from.y);\n\n // Determine if the connection is more horizontal or vertical\n if (dx > dy) {\n // Horizontal: control points extend horizontally\n const offset = dx * 0.5;\n const cp1x = from.x + (to.x > from.x ? offset : -offset);\n const cp2x = to.x + (to.x > from.x ? -offset : offset);\n return `M${from.x},${from.y} C${cp1x},${from.y} ${cp2x},${to.y} ${to.x},${to.y}`;\n }\n // Vertical: control points extend vertically\n const offset = Math.max(dy * 0.5, 30);\n const cp1y = from.y + (to.y > from.y ? offset : -offset);\n const cp2y = to.y + (to.y > from.y ? -offset : offset);\n return `M${from.x},${from.y} C${from.x},${cp1y} ${to.x},${cp2y} ${to.x},${to.y}`;\n}\n\nexport function stepPath(from: Point, to: Point): string {\n const midX = (from.x + to.x) / 2;\n return `M${from.x},${from.y} H${midX} V${to.y} H${to.x}`;\n}\n\nexport function straightPath(from: Point, to: Point): string {\n return `M${from.x},${from.y} L${to.x},${to.y}`;\n}\n\nexport function getEdgePath(\n from: Point,\n to: Point,\n curve: \"bezier\" | \"step\" | \"straight\" = \"bezier\",\n): string {\n switch (curve) {\n case \"bezier\": return bezierPath(from, to);\n case \"step\": return stepPath(from, to);\n case \"straight\": return straightPath(from, to);\n }\n}\n","import { useMemo } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useCanvas } from \"./Canvas.context\";\nimport { getAnchorPoint, getEdgePath } from \"./canvas.utils\";\nimport type { CanvasEdgeProps } from \"./Canvas.types\";\n\nexport function CanvasEdge({\n from,\n to,\n fromAnchor = \"auto\",\n toAnchor = \"auto\",\n curve = \"bezier\",\n color = \"currentColor\",\n strokeWidth = 2,\n dashed = false,\n animated = false,\n label,\n className,\n markerStart,\n markerEnd,\n}: CanvasEdgeProps) {\n const { nodeRects, registryVersion } = useCanvas();\n\n const path = useMemo(() => {\n const fromRect = nodeRects.get(from);\n const toRect = nodeRects.get(to);\n if (!fromRect || !toRect) return null;\n\n const fromPt = getAnchorPoint(fromRect, fromAnchor, toRect);\n const toPt = getAnchorPoint(toRect, toAnchor, fromRect);\n return {\n d: getEdgePath(fromPt, toPt, curve),\n midX: (fromPt.x + toPt.x) / 2,\n midY: (fromPt.y + toPt.y) / 2,\n };\n }, [from, to, fromAnchor, toAnchor, curve, nodeRects, registryVersion]);\n\n if (!path) return null;\n\n return (\n <g data-react-fancy-canvas-edge=\"\" className={cn(\"text-zinc-300 dark:text-zinc-600\", className)}>\n <path\n d={path.d}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeDasharray={dashed ? \"6 4\" : undefined}\n markerStart={markerStart ? `url(#${markerStart})` : undefined}\n markerEnd={markerEnd ? `url(#${markerEnd})` : undefined}\n className={animated ? \"animate-[dash_1s_linear_infinite]\" : \"\"}\n style={animated ? { strokeDasharray: \"8 4\" } : undefined}\n />\n {label && (\n <foreignObject x={path.midX - 40} y={path.midY - 12} width={80} height={24}>\n <div className=\"flex items-center justify-center text-xs text-zinc-500\">{label}</div>\n </foreignObject>\n )}\n </g>\n );\n}\n\nCanvasEdge.displayName = \"CanvasEdge\";\n","import { useMemo } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useCanvas } from \"./Canvas.context\";\nimport type { CanvasMinimapProps } from \"./Canvas.types\";\n\nexport function CanvasMinimap({ width = 150, height = 100, className }: CanvasMinimapProps) {\n const { nodeRects, registryVersion, viewport } = useCanvas();\n\n const bounds = useMemo(() => {\n if (nodeRects.size === 0) return { minX: 0, minY: 0, maxX: 500, maxY: 300 };\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n nodeRects.forEach((r) => {\n minX = Math.min(minX, r.x);\n minY = Math.min(minY, r.y);\n maxX = Math.max(maxX, r.x + r.width);\n maxY = Math.max(maxY, r.y + r.height);\n });\n const padding = 50;\n return { minX: minX - padding, minY: minY - padding, maxX: maxX + padding, maxY: maxY + padding };\n }, [nodeRects, registryVersion]);\n\n const scaleX = width / (bounds.maxX - bounds.minX || 1);\n const scaleY = height / (bounds.maxY - bounds.minY || 1);\n const scale = Math.min(scaleX, scaleY);\n\n return (\n <div\n data-react-fancy-canvas-minimap=\"\"\n className={cn(\n \"absolute right-3 bottom-3 overflow-hidden rounded-lg border border-zinc-200 bg-white/90 dark:border-zinc-700 dark:bg-zinc-900/90\",\n className,\n )}\n style={{ width, height }}\n >\n <svg width={width} height={height}>\n {Array.from(nodeRects.entries()).map(([id, rect]) => (\n <rect\n key={id}\n x={(rect.x - bounds.minX) * scale}\n y={(rect.y - bounds.minY) * scale}\n width={Math.max(rect.width * scale, 4)}\n height={Math.max(rect.height * scale, 3)}\n rx={1}\n className=\"fill-blue-400/60\"\n />\n ))}\n {/* Viewport indicator */}\n <rect\n x={(-viewport.panX / viewport.zoom - bounds.minX) * scale}\n y={(-viewport.panY / viewport.zoom - bounds.minY) * scale}\n width={(width / viewport.zoom / scale > 0 ? width / viewport.zoom : width) * scale / (bounds.maxX - bounds.minX || 1) * (bounds.maxX - bounds.minX)}\n height={(height / viewport.zoom / scale > 0 ? height / viewport.zoom : height) * scale / (bounds.maxY - bounds.minY || 1) * (bounds.maxY - bounds.minY)}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1}\n className=\"text-blue-500\"\n />\n </svg>\n </div>\n );\n}\n\nCanvasMinimap.displayName = \"CanvasMinimap\";\n","import { cn } from \"../../../utils/cn\";\nimport { useCanvas } from \"./Canvas.context\";\nimport type { CanvasControlsProps } from \"./Canvas.types\";\n\n// Inline SVGs (avoid third-party icon dep — fancy-echarts is self-contained).\nconst iconProps = { width: 16, height: 16, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 2, strokeLinecap: \"round\" as const, strokeLinejoin: \"round\" as const };\nconst ZoomIn = () => (<svg {...iconProps}><circle cx=\"11\" cy=\"11\" r=\"8\" /><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" /><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\" /><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" /></svg>);\nconst ZoomOut = () => (<svg {...iconProps}><circle cx=\"11\" cy=\"11\" r=\"8\" /><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" /><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" /></svg>);\nconst Maximize = () => (<svg {...iconProps}><path d=\"M3 7V5a2 2 0 0 1 2-2h2\" /><path d=\"M17 3h2a2 2 0 0 1 2 2v2\" /><path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" /><path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" /></svg>);\nconst RotateCcw = () => (<svg {...iconProps}><path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" /><path d=\"M3 3v5h5\" /></svg>);\n\nexport function CanvasControls({\n className,\n showZoomIn = true,\n showZoomOut = true,\n showReset = true,\n showFitAll = true,\n}: CanvasControlsProps) {\n const { setViewport, nodeRects, containerRef } = useCanvas();\n\n const zoomIn = () => setViewport((v) => ({ ...v, zoom: Math.min(3, v.zoom * 1.25) }));\n const zoomOut = () => setViewport((v) => ({ ...v, zoom: Math.max(0.1, v.zoom / 1.25) }));\n const reset = () => setViewport({ panX: 0, panY: 0, zoom: 1 });\n\n const fitAll = () => {\n const container = containerRef.current;\n if (!container || nodeRects.size === 0) return reset();\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n nodeRects.forEach((r) => {\n minX = Math.min(minX, r.x);\n minY = Math.min(minY, r.y);\n maxX = Math.max(maxX, r.x + r.width);\n maxY = Math.max(maxY, r.y + r.height);\n });\n\n const padding = 40;\n const contentW = maxX - minX + padding * 2;\n const contentH = maxY - minY + padding * 2;\n const cw = container.clientWidth;\n const ch = container.clientHeight;\n const zoom = Math.min(cw / contentW, ch / contentH, 1.5);\n const panX = (cw - contentW * zoom) / 2 - minX * zoom + padding * zoom;\n const panY = (ch - contentH * zoom) / 2 - minY * zoom + padding * zoom;\n\n setViewport({ panX, panY, zoom });\n };\n\n const btnClass =\n \"flex h-8 w-8 items-center justify-center rounded-md text-zinc-500 hover:bg-zinc-100 hover:text-zinc-700 dark:hover:bg-zinc-800 dark:hover:text-zinc-300 transition-colors\";\n\n return (\n <div\n data-react-fancy-canvas-controls=\"\"\n className={cn(\n \"absolute bottom-3 left-3 flex gap-1 rounded-lg border border-zinc-200 bg-white/90 p-1 shadow-sm dark:border-zinc-700 dark:bg-zinc-900/90\",\n className,\n )}\n >\n {showZoomIn && (\n <button type=\"button\" onClick={zoomIn} className={btnClass} aria-label=\"Zoom in\">\n <ZoomIn />\n </button>\n )}\n {showZoomOut && (\n <button type=\"button\" onClick={zoomOut} className={btnClass} aria-label=\"Zoom out\">\n <ZoomOut />\n </button>\n )}\n {showReset && (\n <button type=\"button\" onClick={reset} className={btnClass} aria-label=\"Reset view\">\n <RotateCcw />\n </button>\n )}\n {showFitAll && (\n <button type=\"button\" onClick={fitAll} className={btnClass} aria-label=\"Fit all\">\n <Maximize />\n </button>\n )}\n </div>\n );\n}\n\nCanvasControls.displayName = \"CanvasControls\";\n","import { useMemo, useRef, useEffect, Children, type ReactElement } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state\";\nimport { usePanZoom, type ViewportState } from \"../../../hooks/use-pan-zoom\";\nimport { useNodeRegistry } from \"../../../hooks/use-node-registry\";\nimport { CanvasContext } from \"./Canvas.context\";\nimport { CanvasNode } from \"./CanvasNode\";\nimport { CanvasEdge } from \"./CanvasEdge\";\nimport { CanvasMinimap } from \"./CanvasMinimap\";\nimport { CanvasControls } from \"./CanvasControls\";\nimport type { CanvasProps } from \"./Canvas.types\";\n\nconst DEFAULT_VIEWPORT: ViewportState = { panX: 0, panY: 0, zoom: 1 };\n\nfunction CanvasRoot({\n children,\n viewport: controlledViewport,\n defaultViewport = DEFAULT_VIEWPORT,\n onViewportChange,\n minZoom = 0.1,\n maxZoom = 3,\n pannable = true,\n zoomable = true,\n showGrid = false,\n gridStyle = \"dots\",\n gridSize = 20,\n gridColor = \"rgb(161 161 170 / 0.3)\",\n snapToGrid = false,\n fitOnMount = false,\n className,\n style,\n}: CanvasProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [viewport, setViewport] = useControllableState(controlledViewport, defaultViewport, onViewportChange);\n const { registerNode, unregisterNode, nodeRects, version: registryVersion } = useNodeRegistry();\n\n const { containerProps } = usePanZoom({\n viewport,\n setViewport,\n minZoom,\n maxZoom,\n pannable,\n zoomable,\n containerRef,\n });\n\n const ctx = useMemo(\n () => ({ viewport, setViewport, registerNode, unregisterNode, nodeRects, registryVersion, containerRef, gridSize, snapToGrid }),\n [viewport, setViewport, registerNode, unregisterNode, nodeRects, registryVersion, gridSize, snapToGrid],\n );\n\n // Auto-fit all nodes into view on mount once nodes are registered\n const hasFitted = useRef(false);\n useEffect(() => {\n if (!fitOnMount || hasFitted.current || nodeRects.size === 0) return;\n const container = containerRef.current;\n if (!container || container.clientWidth === 0) return;\n\n hasFitted.current = true;\n\n // Use rAF to ensure layout is settled before measuring\n requestAnimationFrame(() => {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n nodeRects.forEach((r) => {\n minX = Math.min(minX, r.x);\n minY = Math.min(minY, r.y);\n maxX = Math.max(maxX, r.x + r.width);\n maxY = Math.max(maxY, r.y + r.height);\n });\n\n const padding = 40;\n const contentW = maxX - minX + padding * 2;\n const contentH = maxY - minY + padding * 2;\n const cw = container.clientWidth;\n const ch = container.clientHeight;\n const zoom = Math.min(cw / contentW, ch / contentH, 1.5);\n const panX = (cw - contentW * zoom) / 2 - minX * zoom + padding * zoom;\n const panY = (ch - contentH * zoom) / 2 - minY * zoom + padding * zoom;\n\n setViewport({ panX, panY, zoom });\n });\n }, [fitOnMount, nodeRects, registryVersion, setViewport]);\n\n // Separate edge children from node/other children\n const edges: ReactElement[] = [];\n const others: ReactElement[] = [];\n const overlays: ReactElement[] = []; // minimap, controls\n\n Children.forEach(children, (child) => {\n const el = child as ReactElement;\n if (!el || !el.type) return;\n const elType = el.type as any;\n if (elType === CanvasEdge || elType?._isCanvasEdge) {\n edges.push(el);\n } else if (elType === CanvasMinimap || elType === CanvasControls) {\n overlays.push(el);\n } else {\n others.push(el);\n }\n });\n\n return (\n <CanvasContext.Provider value={ctx}>\n <div\n ref={containerRef}\n data-react-fancy-canvas=\"\"\n className={cn(\"relative overflow-hidden\", className)}\n style={{ touchAction: \"none\", ...style }}\n {...containerProps}\n >\n {/* Background */}\n <div\n data-canvas-bg=\"\"\n className=\"absolute inset-0\"\n style={\n showGrid && gridStyle !== \"none\"\n ? gridStyle === \"lines\"\n ? {\n backgroundImage: `linear-gradient(to right, ${gridColor} 1px, transparent 1px), linear-gradient(to bottom, ${gridColor} 1px, transparent 1px)`,\n backgroundSize: `${gridSize * viewport.zoom}px ${gridSize * viewport.zoom}px`,\n backgroundPosition: `${viewport.panX}px ${viewport.panY}px`,\n }\n : {\n backgroundImage: `radial-gradient(circle, ${gridColor} 1px, transparent 1px)`,\n backgroundSize: `${gridSize * viewport.zoom}px ${gridSize * viewport.zoom}px`,\n backgroundPosition: `${viewport.panX}px ${viewport.panY}px`,\n }\n : undefined\n }\n />\n\n {/* Transformed layer for nodes */}\n <div\n className=\"absolute origin-top-left\"\n style={{\n transform: `translate(${viewport.panX}px, ${viewport.panY}px) scale(${viewport.zoom})`,\n }}\n >\n {others}\n </div>\n\n {/* SVG layer for edges */}\n <svg\n className=\"pointer-events-none absolute inset-0 h-full w-full\"\n style={{\n transform: `translate(${viewport.panX}px, ${viewport.panY}px) scale(${viewport.zoom})`,\n transformOrigin: \"0 0\",\n }}\n >\n <defs>\n {/* Generic markers */}\n <marker id=\"canvas-arrow\" viewBox=\"0 0 10 10\" refX=\"10\" refY=\"5\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\">\n <path d=\"M0,0 L10,5 L0,10 Z\" fill=\"#71717a\" />\n </marker>\n <marker id=\"canvas-circle\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\">\n <circle cx=\"5\" cy=\"5\" r=\"3.5\" fill=\"#71717a\" />\n </marker>\n <marker id=\"canvas-diamond\" viewBox=\"0 0 12 12\" refX=\"6\" refY=\"6\" markerWidth=\"10\" markerHeight=\"10\" orient=\"auto\">\n <polygon points=\"6,0 12,6 6,12 0,6\" fill=\"none\" stroke=\"#71717a\" strokeWidth=\"1.5\" />\n </marker>\n\n {/* ERD: \"one\" perpendicular bar at path endpoint */}\n <marker id=\"canvas-one\" viewBox=\"0 0 2 16\" refX=\"1\" refY=\"8\" markerWidth=\"2\" markerHeight=\"14\" orient=\"auto\">\n <line x1=\"1\" y1=\"0\" x2=\"1\" y2=\"16\" stroke=\"#71717a\" strokeWidth=\"2\" />\n </marker>\n\n {/* ERD: crow's foot at path endpoint — fork fans backward along the line */}\n {/* orient=\"auto\" aligns x-axis with path direction at the endpoint.\n At markerEnd the path goes left→right into the entity.\n refX=16 places the rightmost edge at the endpoint (entity side).\n Fan lines go from right (x=16, entity) back-left into the line. */}\n <marker id=\"canvas-crow-foot\" viewBox=\"0 0 16 16\" refX=\"16\" refY=\"8\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\">\n <line x1=\"16\" y1=\"8\" x2=\"0\" y2=\"0\" stroke=\"#71717a\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <line x1=\"16\" y1=\"8\" x2=\"0\" y2=\"8\" stroke=\"#71717a\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <line x1=\"16\" y1=\"8\" x2=\"0\" y2=\"16\" stroke=\"#71717a\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"16\" stroke=\"#71717a\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </marker>\n </defs>\n {edges}\n </svg>\n\n {/* Overlays (minimap, controls) sit outside the transform */}\n {overlays}\n </div>\n </CanvasContext.Provider>\n );\n}\n\nexport const Canvas = Object.assign(CanvasRoot, {\n Node: CanvasNode,\n Edge: CanvasEdge,\n Minimap: CanvasMinimap,\n Controls: CanvasControls,\n});\n","import { createContext, useContext } from \"react\";\nimport type { DiagramContextValue } from \"./Diagram.types\";\n\nexport const DiagramContext = createContext<DiagramContextValue | null>(null);\n\nexport function useDiagram(): DiagramContextValue {\n const ctx = useContext(DiagramContext);\n if (!ctx) {\n throw new Error(\"useDiagram must be used within a <Diagram> component\");\n }\n return ctx;\n}\n","import { cn } from \"../../utils/cn\";\nimport type { DiagramFieldProps } from \"./Diagram.types\";\n\nexport function DiagramField({\n name,\n type,\n primary = false,\n foreign = false,\n nullable = false,\n className,\n}: DiagramFieldProps) {\n return (\n <div\n data-react-fancy-diagram-field=\"\"\n className={cn(\n \"flex items-center justify-between gap-2 border-t border-zinc-200 px-3 py-1 text-sm dark:border-zinc-700\",\n className,\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n {primary && (\n <span className=\"inline-flex items-center rounded bg-blue-100 px-1 py-0.5 text-[10px] font-semibold leading-none text-blue-700 dark:bg-blue-900/50 dark:text-blue-300\">\n PK\n </span>\n )}\n {foreign && (\n <span className=\"inline-flex items-center rounded bg-amber-100 px-1 py-0.5 text-[10px] font-semibold leading-none text-amber-700 dark:bg-amber-900/50 dark:text-amber-300\">\n FK\n </span>\n )}\n <span className=\"text-zinc-800 dark:text-zinc-200\">{name}</span>\n </div>\n {type && (\n <span className=\"shrink-0 text-xs text-zinc-400 dark:text-zinc-500\">\n {type}\n {nullable && \"?\"}\n </span>\n )}\n </div>\n );\n}\n\nDiagramField.displayName = \"DiagramField\";\n","import { cn } from \"../../utils/cn\";\nimport { Canvas } from \"./_canvas/Canvas\";\nimport { DiagramField } from \"./DiagramField\";\nimport type { DiagramEntityProps, DiagramFieldProps } from \"./Diagram.types\";\nimport { Children, type ReactElement } from \"react\";\n\nexport function DiagramEntity({\n children,\n id: idProp,\n name,\n x = 0,\n y = 0,\n color = \"bg-blue-600 dark:bg-blue-500\",\n draggable,\n onPositionChange,\n className,\n}: DiagramEntityProps) {\n const id = idProp ?? name;\n\n // Extract DiagramField children for rendering\n const fields: ReactElement<DiagramFieldProps>[] = [];\n const other: ReactElement[] = [];\n\n Children.forEach(children, (child) => {\n const el = child as ReactElement;\n if (!el || !el.type) return;\n if (el.type === DiagramField) {\n fields.push(el as ReactElement<DiagramFieldProps>);\n } else {\n other.push(el);\n }\n });\n\n return (\n <Canvas.Node id={id} x={x} y={y} draggable={draggable} onPositionChange={onPositionChange}>\n <div\n data-react-fancy-diagram-entity=\"\"\n data-entity-id={id}\n className={cn(\n \"w-[220px] overflow-hidden rounded-lg border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-800\",\n className,\n )}\n >\n <div\n className={cn(\n \"px-3 py-2 text-sm font-semibold text-white\",\n color,\n )}\n >\n {name}\n </div>\n {fields.length > 0 && <div>{fields}</div>}\n {other}\n </div>\n </Canvas.Node>\n );\n}\n\nDiagramEntity.displayName = \"DiagramEntity\";\n","/**\n * Endpoint marker rendering for DiagramRelation.\n *\n * Each marker is rendered as one or more SVG `<path>` strings (and optionally\n * a `<text>` for emoji markers) anchored to the endpoint of the line. We\n * avoid SVG `<defs><marker>` elements because relations are scattered into a\n * shared Canvas SVG layer and per-relation defs would either collide or\n * require a singleton parent.\n */\nimport type { LineStyle, MarkerType, RelationType } from \"./Diagram.types\";\n\nexport type Direction = \"left\" | \"right\" | \"up\" | \"down\";\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface MarkerRenderable {\n /** SVG `<path>` `d` attributes that draw the marker. */\n paths: { d: string; fill?: \"stroke\" | \"none\" | \"background\" }[];\n /** Optional emoji/text to draw at the endpoint. */\n text?: string;\n}\n\n/** Default marker presets per RelationType. Consumer-supplied\n * `fromMarker` / `toMarker` always win. */\nexport function defaultMarkersForType(type: RelationType | undefined): {\n fromMarker: MarkerType;\n toMarker: MarkerType;\n lineStyle: LineStyle;\n} {\n switch (type) {\n case \"one-to-one\":\n return { fromMarker: \"one\", toMarker: \"one\", lineStyle: \"solid\" };\n case \"one-to-many\":\n return { fromMarker: \"one\", toMarker: \"many\", lineStyle: \"solid\" };\n case \"many-to-one\":\n return { fromMarker: \"many\", toMarker: \"one\", lineStyle: \"solid\" };\n case \"many-to-many\":\n return { fromMarker: \"many\", toMarker: \"many\", lineStyle: \"solid\" };\n case \"association\":\n return { fromMarker: \"none\", toMarker: \"arrow\", lineStyle: \"solid\" };\n case \"aggregation\":\n return { fromMarker: \"diamond-open\", toMarker: \"none\", lineStyle: \"solid\" };\n case \"composition\":\n return { fromMarker: \"diamond\", toMarker: \"none\", lineStyle: \"solid\" };\n case \"inheritance\":\n return { fromMarker: \"none\", toMarker: \"triangle-open\", lineStyle: \"solid\" };\n case \"implementation\":\n return { fromMarker: \"none\", toMarker: \"triangle-open\", lineStyle: \"dashed\" };\n case \"dependency\":\n return { fromMarker: \"none\", toMarker: \"arrow\", lineStyle: \"dashed\" };\n default:\n return { fromMarker: \"none\", toMarker: \"none\", lineStyle: \"solid\" };\n }\n}\n\nconst SIZE = 12; // base marker extent\n\n/**\n * Render a marker. The point passed in is the visible LINE endpoint; the\n * marker is drawn extending from there along `direction`. The line should\n * stop at the same point so the marker sits flush.\n */\nexport function renderMarker(\n marker: MarkerType,\n pt: Point,\n direction: Direction\n): MarkerRenderable | null {\n // Emoji passthrough — `emoji:🎯` or any single emoji string\n if (typeof marker === \"string\" && marker.startsWith(\"emoji:\")) {\n return { paths: [], text: marker.slice(6) };\n }\n\n switch (marker) {\n case \"none\":\n return null;\n\n case \"arrow\":\n return { paths: [{ d: arrowPath(pt, direction, true), fill: \"stroke\" }] };\n case \"arrow-open\":\n return { paths: [{ d: arrowPath(pt, direction, false), fill: \"none\" }] };\n\n case \"circle\":\n return { paths: [{ d: circlePath(pt, true), fill: \"stroke\" }] };\n case \"circle-open\":\n return { paths: [{ d: circlePath(pt, false), fill: \"background\" }] };\n\n case \"square\":\n return { paths: [{ d: squarePath(pt, direction, true), fill: \"stroke\" }] };\n case \"square-open\":\n return { paths: [{ d: squarePath(pt, direction, false), fill: \"background\" }] };\n\n case \"diamond\":\n return { paths: [{ d: diamondPath(pt, direction, true), fill: \"stroke\" }] };\n case \"diamond-open\":\n return { paths: [{ d: diamondPath(pt, direction, false), fill: \"background\" }] };\n\n case \"triangle\":\n return { paths: [{ d: trianglePath(pt, direction, true), fill: \"stroke\" }] };\n case \"triangle-open\":\n return { paths: [{ d: trianglePath(pt, direction, false), fill: \"background\" }] };\n\n case \"cross\":\n return { paths: [{ d: crossPath(pt, direction), fill: \"none\" }] };\n\n case \"one\":\n return { paths: [{ d: oneSymbol(pt, direction), fill: \"none\" }] };\n case \"many\":\n return { paths: [{ d: crowFootSymbol(pt, direction), fill: \"none\" }] };\n case \"optional-one\":\n return {\n paths: [\n { d: circleOuter(pt, direction), fill: \"background\" },\n { d: oneSymbolOffset(pt, direction), fill: \"none\" },\n ],\n };\n case \"optional-many\":\n return {\n paths: [\n { d: circleOuter(pt, direction), fill: \"background\" },\n { d: crowFootSymbolOffset(pt, direction), fill: \"none\" },\n ],\n };\n\n default:\n // Unknown string with no `emoji:` prefix — treat as raw text/emoji\n if (typeof marker === \"string\" && marker !== \"\") {\n return { paths: [], text: marker };\n }\n return null;\n }\n}\n\n/** How far a marker extends from the line endpoint along the direction.\n * Used to inset the line endpoint so the marker sits flush. */\nexport function markerInset(marker: MarkerType): number {\n if (marker === \"none\" || marker === undefined) return 0;\n if (typeof marker === \"string\" && (marker.startsWith(\"emoji:\") || !KNOWN_MARKERS.has(marker))) {\n return SIZE; // emoji: leave space\n }\n switch (marker) {\n case \"circle\":\n case \"circle-open\":\n return SIZE * 0.6;\n case \"one\":\n return 0; // bar sits AT endpoint\n case \"many\":\n return SIZE;\n case \"optional-one\":\n return SIZE * 1.2;\n case \"optional-many\":\n return SIZE * 1.8;\n default:\n return SIZE;\n }\n}\n\nconst KNOWN_MARKERS = new Set([\n \"none\", \"arrow\", \"arrow-open\", \"circle\", \"circle-open\",\n \"square\", \"square-open\", \"diamond\", \"diamond-open\",\n \"triangle\", \"triangle-open\", \"one\", \"many\",\n \"optional-one\", \"optional-many\", \"cross\",\n]);\n\n/* ------------------------------------------------------------------ */\n/* Shape path generators */\n/* ------------------------------------------------------------------ */\n\nfunction dirVec(direction: Direction): [number, number] {\n switch (direction) {\n case \"left\": return [-1, 0];\n case \"right\": return [1, 0];\n case \"up\": return [0, -1];\n case \"down\": return [0, 1];\n }\n}\n\nfunction perpVec(direction: Direction): [number, number] {\n switch (direction) {\n case \"left\":\n case \"right\": return [0, 1];\n case \"up\":\n case \"down\": return [1, 0];\n }\n}\n\nfunction arrowPath(pt: Point, direction: Direction, _filled: boolean): string {\n // Triangle with apex at pt + direction*size, base at pt\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n const tipX = pt.x + dx * SIZE;\n const tipY = pt.y + dy * SIZE;\n const baseAX = pt.x + px * (SIZE * 0.55);\n const baseAY = pt.y + py * (SIZE * 0.55);\n const baseBX = pt.x - px * (SIZE * 0.55);\n const baseBY = pt.y - py * (SIZE * 0.55);\n return `M${baseAX},${baseAY} L${tipX},${tipY} L${baseBX},${baseBY} Z`;\n}\n\nfunction circlePath(pt: Point, _filled: boolean): string {\n // Small circle centered at the endpoint\n const r = SIZE * 0.45;\n return `M${pt.x - r},${pt.y} a${r},${r} 0 1 0 ${r * 2},0 a${r},${r} 0 1 0 ${-r * 2},0 Z`;\n}\n\nfunction squarePath(pt: Point, direction: Direction, _filled: boolean): string {\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n const half = SIZE * 0.5;\n // square centered along the direction starting at pt\n const cx = pt.x + dx * half;\n const cy = pt.y + dy * half;\n const tlX = cx - px * half - dx * half;\n const tlY = cy - py * half - dy * half;\n const trX = cx + px * half - dx * half;\n const trY = cy + py * half - dy * half;\n const brX = cx + px * half + dx * half;\n const brY = cy + py * half + dy * half;\n const blX = cx - px * half + dx * half;\n const blY = cy - py * half + dy * half;\n return `M${tlX},${tlY} L${trX},${trY} L${brX},${brY} L${blX},${blY} Z`;\n}\n\nfunction diamondPath(pt: Point, direction: Direction, _filled: boolean): string {\n // Diamond: 4 points along ±direction and ±perp from a center between pt and tip\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n const len = SIZE * 1.2;\n const cx = pt.x + dx * (len / 2);\n const cy = pt.y + dy * (len / 2);\n const aX = pt.x;\n const aY = pt.y;\n const bX = cx + px * (SIZE * 0.45);\n const bY = cy + py * (SIZE * 0.45);\n const tX = pt.x + dx * len;\n const tY = pt.y + dy * len;\n const dX = cx - px * (SIZE * 0.45);\n const dY = cy - py * (SIZE * 0.45);\n return `M${aX},${aY} L${bX},${bY} L${tX},${tY} L${dX},${dY} Z`;\n}\n\nfunction trianglePath(pt: Point, direction: Direction, _filled: boolean): string {\n // Triangle with base at pt + dir*size and apex at pt — typical UML inheritance\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n const len = SIZE * 1.1;\n const baseCX = pt.x + dx * len;\n const baseCY = pt.y + dy * len;\n const baseAX = baseCX + px * (SIZE * 0.6);\n const baseAY = baseCY + py * (SIZE * 0.6);\n const baseBX = baseCX - px * (SIZE * 0.6);\n const baseBY = baseCY - py * (SIZE * 0.6);\n return `M${pt.x},${pt.y} L${baseAX},${baseAY} L${baseBX},${baseBY} Z`;\n}\n\nfunction crossPath(pt: Point, direction: Direction): string {\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n const s = SIZE * 0.5;\n // Center of the X is one half-size out from the endpoint along direction\n const cx = pt.x + dx * (SIZE * 0.5);\n const cy = pt.y + dy * (SIZE * 0.5);\n return [\n `M${cx - s * (px + dx)},${cy - s * (py + dy)} L${cx + s * (px + dx)},${cy + s * (py + dy)}`,\n `M${cx - s * (px - dx)},${cy - s * (py - dy)} L${cx + s * (px - dx)},${cy + s * (py - dy)}`,\n ].join(\" \");\n}\n\nfunction oneSymbol(pt: Point, direction: Direction): string {\n const [, py] = perpVec(direction);\n const [px] = perpVec(direction);\n const half = SIZE * 0.6;\n return `M${pt.x - px * half},${pt.y - py * half} L${pt.x + px * half},${pt.y + py * half}`;\n}\n\nfunction crowFootSymbol(pt: Point, direction: Direction): string {\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n // Tip is OUTWARD from the endpoint (away from entity)\n const tipX = pt.x + dx * SIZE;\n const tipY = pt.y + dy * SIZE;\n const spread = SIZE * 0.8;\n const aX = pt.x + px * spread, aY = pt.y + py * spread;\n const cX = pt.x - px * spread, cY = pt.y - py * spread;\n return [\n `M${aX},${aY} L${tipX},${tipY}`,\n `M${pt.x},${pt.y} L${tipX},${tipY}`,\n `M${cX},${cY} L${tipX},${tipY}`,\n `M${aX},${aY} L${cX},${cY}`,\n ].join(\" \");\n}\n\nfunction circleOuter(pt: Point, direction: Direction): string {\n // Small circle sitting OUTSIDE the entity — used for \"optional\" indicators\n const [dx, dy] = dirVec(direction);\n const r = SIZE * 0.4;\n const cx = pt.x + dx * (SIZE * 0.4 + r);\n const cy = pt.y + dy * (SIZE * 0.4 + r);\n return `M${cx - r},${cy} a${r},${r} 0 1 0 ${r * 2},0 a${r},${r} 0 1 0 ${-r * 2},0 Z`;\n}\n\nfunction oneSymbolOffset(pt: Point, direction: Direction): string {\n // Bar sits between the entity edge and the optional circle\n const [px, py] = perpVec(direction);\n const half = SIZE * 0.6;\n return `M${pt.x - px * half},${pt.y - py * half} L${pt.x + px * half},${pt.y + py * half}`;\n}\n\nfunction crowFootSymbolOffset(pt: Point, direction: Direction): string {\n // Crow's foot extending past the optional circle\n const [dx, dy] = dirVec(direction);\n const [px, py] = perpVec(direction);\n const inset = SIZE * 0.8;\n const startX = pt.x + dx * inset;\n const startY = pt.y + dy * inset;\n const tipX = pt.x + dx * (inset + SIZE);\n const tipY = pt.y + dy * (inset + SIZE);\n const spread = SIZE * 0.8;\n const aX = startX + px * spread, aY = startY + py * spread;\n const cX = startX - px * spread, cY = startY - py * spread;\n return [\n `M${aX},${aY} L${tipX},${tipY}`,\n `M${startX},${startY} L${tipX},${tipY}`,\n `M${cX},${cY} L${tipX},${tipY}`,\n ].join(\" \");\n}\n","/**\n * Orthogonal (Manhattan) routing for DiagramRelation.\n *\n * Given a source rect, target rect, and a list of obstacle rects, produces\n * a polyline of right-angle segments that connects the rects without\n * crossing through any obstacle (where possible).\n *\n * Strategy:\n * 1. Pick the side of each rect that faces the other (\"side-snap\").\n * 2. Stub out perpendicularly from each side by a fixed amount.\n * 3. Connect the two stubs with one or two right-angle elbows.\n * 4. Walk each segment and detour around any obstacle box it intersects.\n *\n * Good enough for most ERD/UML diagrams. For dense graphs where elbows\n * still cross, a full A* grid router is the next step (planned).\n */\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport type Side = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface Anchor {\n side: Side;\n x: number;\n y: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nconst STUB = 24; // how far the line stubs out perpendicular to a node side\nconst DODGE_PADDING = 16; // safety margin when routing around an obstacle\nconst MAX_DODGE_ITERATIONS = 6;\n\n/* ------------------------------------------------------------------ */\n/* Anchor selection */\n/* ------------------------------------------------------------------ */\n\n/**\n * Pick the best (side, point) anchors on `from` and `to` so the straight\n * line between them is approximately the shortest. If `fromY`/`toY` are\n * supplied, they're used as the y-offset for left/right anchors (e.g.\n * field-level row Y for ERD). They're ignored for top/bottom anchors.\n */\nexport function pickAnchors(from: Rect, to: Rect, fromY?: number, toY?: number): {\n from: Anchor;\n to: Anchor;\n} {\n const fcx = from.x + from.width / 2;\n const fcy = from.y + from.height / 2;\n const tcx = to.x + to.width / 2;\n const tcy = to.y + to.height / 2;\n const dx = tcx - fcx;\n const dy = tcy - fcy;\n\n let fromSide: Side, toSide: Side;\n if (Math.abs(dx) >= Math.abs(dy)) {\n fromSide = dx >= 0 ? \"right\" : \"left\";\n toSide = dx >= 0 ? \"left\" : \"right\";\n } else {\n fromSide = dy >= 0 ? \"bottom\" : \"top\";\n toSide = dy >= 0 ? \"top\" : \"bottom\";\n }\n\n return {\n from: anchorOnSide(from, fromSide, fromY),\n to: anchorOnSide(to, toSide, toY),\n };\n}\n\nfunction anchorOnSide(box: Rect, side: Side, fieldY?: number): Anchor {\n switch (side) {\n case \"right\":\n return { side, x: box.x + box.width, y: box.y + (fieldY ?? box.height / 2) };\n case \"left\":\n return { side, x: box.x, y: box.y + (fieldY ?? box.height / 2) };\n case \"top\":\n return { side, x: box.x + box.width / 2, y: box.y };\n case \"bottom\":\n return { side, x: box.x + box.width / 2, y: box.y + box.height };\n }\n}\n\n/** Move a point STUB units perpendicularly outward from a side. */\nfunction stubOut(a: Anchor, distance = STUB): Point {\n switch (a.side) {\n case \"right\": return { x: a.x + distance, y: a.y };\n case \"left\": return { x: a.x - distance, y: a.y };\n case \"top\": return { x: a.x, y: a.y - distance };\n case \"bottom\": return { x: a.x, y: a.y + distance };\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Path generation */\n/* ------------------------------------------------------------------ */\n\n/**\n * Build a Manhattan polyline between two anchors. When `obstacles` is\n * supplied, the elbow midpoint is shifted so it doesn't fall inside any\n * obstacle that lies along the path's Y/X span.\n *\n * Returns ≥3 points (start, ≥1 elbow, end). All segments are horizontal\n * or vertical.\n */\nexport function manhattanPath(from: Anchor, to: Anchor, obstacles: Rect[] = []): Point[] {\n const f = { x: from.x, y: from.y };\n const t = { x: to.x, y: to.y };\n const fs = stubOut(from);\n const ts = stubOut(to);\n\n const fHoriz = from.side === \"left\" || from.side === \"right\";\n const tHoriz = to.side === \"left\" || to.side === \"right\";\n\n // Both anchors are on horizontal sides — go via a vertical mid-line.\n if (fHoriz && tHoriz) {\n const midX = pickClearMidX((fs.x + ts.x) / 2, fs.y, ts.y, obstacles);\n return uniqPath([\n f,\n fs,\n { x: midX, y: fs.y },\n { x: midX, y: ts.y },\n ts,\n t,\n ]);\n }\n // Both vertical — horizontal mid-line.\n if (!fHoriz && !tHoriz) {\n const midY = pickClearMidY((fs.y + ts.y) / 2, fs.x, ts.x, obstacles);\n return uniqPath([\n f,\n fs,\n { x: fs.x, y: midY },\n { x: ts.x, y: midY },\n ts,\n t,\n ]);\n }\n // Mixed — single L-shape elbow.\n if (fHoriz) {\n return uniqPath([\n f,\n fs,\n { x: ts.x, y: fs.y },\n ts,\n t,\n ]);\n }\n return uniqPath([\n f,\n fs,\n { x: fs.x, y: ts.y },\n ts,\n t,\n ]);\n}\n\n/**\n * Pick a vertical mid-line X that doesn't fall inside any obstacle whose\n * Y range overlaps the path's Y span. If the ideal midX is clear, return\n * it; otherwise shift to either side of the offending obstacle, whichever\n * is closer to the ideal.\n */\nfunction pickClearMidX(idealX: number, y1: number, y2: number, obstacles: Rect[]): number {\n if (obstacles.length === 0) return idealX;\n const yMin = Math.min(y1, y2);\n const yMax = Math.max(y1, y2);\n let midX = idealX;\n for (let i = 0; i < 4; i++) { // a few passes in case shifting puts us in another obstacle\n let shifted = false;\n for (const ob of obstacles) {\n // Skip obstacles outside the path's Y span\n if (ob.y + ob.height + DODGE_PADDING < yMin) continue;\n if (ob.y - DODGE_PADDING > yMax) continue;\n const left = ob.x - DODGE_PADDING;\n const right = ob.x + ob.width + DODGE_PADDING;\n if (midX > left && midX < right) {\n midX = Math.abs(midX - left) <= Math.abs(midX - right) ? left - 1 : right + 1;\n shifted = true;\n }\n }\n if (!shifted) break;\n }\n return midX;\n}\n\nfunction pickClearMidY(idealY: number, x1: number, x2: number, obstacles: Rect[]): number {\n if (obstacles.length === 0) return idealY;\n const xMin = Math.min(x1, x2);\n const xMax = Math.max(x1, x2);\n let midY = idealY;\n for (let i = 0; i < 4; i++) {\n let shifted = false;\n for (const ob of obstacles) {\n if (ob.x + ob.width + DODGE_PADDING < xMin) continue;\n if (ob.x - DODGE_PADDING > xMax) continue;\n const top = ob.y - DODGE_PADDING;\n const bot = ob.y + ob.height + DODGE_PADDING;\n if (midY > top && midY < bot) {\n midY = Math.abs(midY - top) <= Math.abs(midY - bot) ? top - 1 : bot + 1;\n shifted = true;\n }\n }\n if (!shifted) break;\n }\n return midY;\n}\n\nfunction uniqPath(points: Point[]): Point[] {\n const out: Point[] = [];\n for (const p of points) {\n const last = out[out.length - 1];\n if (!last || Math.abs(last.x - p.x) > 0.5 || Math.abs(last.y - p.y) > 0.5) {\n out.push(p);\n }\n }\n return out;\n}\n\n/* ------------------------------------------------------------------ */\n/* Obstacle dodge */\n/* ------------------------------------------------------------------ */\n\n/**\n * Walk each segment in `path`. When a segment crosses any rect in\n * `obstacles` (with `padding`), insert a detour around the rect.\n *\n * Iteratively re-checks until no segment crosses any obstacle, or a\n * cap is hit (rare cases where iteration would oscillate).\n */\nexport function dodgeObstacles(\n path: Point[],\n obstacles: Rect[],\n padding = DODGE_PADDING\n): Point[] {\n if (obstacles.length === 0 || path.length < 2) return path;\n\n let working = path.slice();\n for (let iter = 0; iter < MAX_DODGE_ITERATIONS; iter++) {\n let dodged = false;\n const result: Point[] = [working[0]];\n for (let i = 1; i < working.length; i++) {\n const a = result[result.length - 1];\n const b = working[i];\n const detour = detourAround(a, b, obstacles, padding);\n if (detour.length === 0) {\n result.push(b);\n } else {\n for (const p of detour) result.push(p);\n result.push(b);\n dodged = true;\n }\n }\n working = uniqPath(result);\n if (!dodged) break;\n }\n return working;\n}\n\n/**\n * If segment a→b (axis-aligned) crosses any obstacle, return ≥1 detour\n * waypoints to route AROUND the closest crossing one. Detour preserves\n * the Manhattan property by inserting two right-angle waypoints.\n *\n * Returns an empty array if the segment is clean.\n */\nfunction detourAround(a: Point, b: Point, obstacles: Rect[], padding: number): Point[] {\n const isHorizontal = Math.abs(a.y - b.y) < 0.5;\n const isVertical = Math.abs(a.x - b.x) < 0.5;\n if (!isHorizontal && !isVertical) return [];\n\n // Find the obstacle that's closest to `a` along the segment direction.\n let best: { rect: Rect; entry: number; exit: number } | null = null;\n for (const r of obstacles) {\n const expanded = expandRect(r, padding);\n if (!segmentCrossesRect(a, b, expanded)) continue;\n\n let entry: number, exit: number;\n if (isHorizontal) {\n entry = b.x > a.x ? expanded.x : expanded.x + expanded.width;\n exit = b.x > a.x ? expanded.x + expanded.width : expanded.x;\n } else {\n entry = b.y > a.y ? expanded.y : expanded.y + expanded.height;\n exit = b.y > a.y ? expanded.y + expanded.height : expanded.y;\n }\n const dist = isHorizontal ? Math.abs(entry - a.x) : Math.abs(entry - a.y);\n if (!best || dist < (isHorizontal ? Math.abs(best.entry - a.x) : Math.abs(best.entry - a.y))) {\n best = { rect: expanded, entry, exit };\n }\n }\n if (!best) return [];\n\n // Detour around — pick the side of the obstacle nearest to the segment.\n if (isHorizontal) {\n // Segment runs along Y = a.y. Detour above (smaller Y) or below (larger Y)?\n const aboveY = best.rect.y - 1;\n const belowY = best.rect.y + best.rect.height + 1;\n const detourY = Math.abs(a.y - aboveY) <= Math.abs(a.y - belowY) ? aboveY : belowY;\n return [\n { x: best.entry, y: a.y },\n { x: best.entry, y: detourY },\n { x: best.exit, y: detourY },\n { x: best.exit, y: a.y },\n ];\n } else {\n const leftX = best.rect.x - 1;\n const rightX = best.rect.x + best.rect.width + 1;\n const detourX = Math.abs(a.x - leftX) <= Math.abs(a.x - rightX) ? leftX : rightX;\n return [\n { x: a.x, y: best.entry },\n { x: detourX, y: best.entry },\n { x: detourX, y: best.exit },\n { x: a.x, y: best.exit },\n ];\n }\n}\n\nfunction expandRect(r: Rect, padding: number): Rect {\n return {\n x: r.x - padding,\n y: r.y - padding,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n}\n\n/** True if the axis-aligned segment a→b passes through `rect`. */\nfunction segmentCrossesRect(a: Point, b: Point, rect: Rect): boolean {\n const xMin = Math.min(a.x, b.x);\n const xMax = Math.max(a.x, b.x);\n const yMin = Math.min(a.y, b.y);\n const yMax = Math.max(a.y, b.y);\n if (xMax < rect.x) return false;\n if (xMin > rect.x + rect.width) return false;\n if (yMax < rect.y) return false;\n if (yMin > rect.y + rect.height) return false;\n // Segment endpoints WITHIN rect are not \"crossing\" — a line ending on a\n // node's side anchor lands on the boundary which is ok.\n if (a.x >= rect.x + 1 && a.x <= rect.x + rect.width - 1 && a.y >= rect.y + 1 && a.y <= rect.y + rect.height - 1) return false;\n if (b.x >= rect.x + 1 && b.x <= rect.x + rect.width - 1 && b.y >= rect.y + 1 && b.y <= rect.y + rect.height - 1) return false;\n return true;\n}\n\n/* ------------------------------------------------------------------ */\n/* SVG `d` builders */\n/* ------------------------------------------------------------------ */\n\n/** Convert a polyline to an SVG path with optionally rounded corners. */\nexport function pathFromPoints(points: Point[], cornerRadius = 8): string {\n if (points.length === 0) return \"\";\n if (points.length === 1) return `M${points[0].x},${points[0].y}`;\n if (points.length === 2 || cornerRadius <= 0) {\n return points.map((p, i) => `${i === 0 ? \"M\" : \"L\"}${p.x},${p.y}`).join(\" \");\n }\n let d = `M${points[0].x},${points[0].y}`;\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n const r = Math.min(\n cornerRadius,\n distance(prev, curr) / 2,\n distance(curr, next) / 2,\n );\n if (r < 1) {\n d += ` L${curr.x},${curr.y}`;\n continue;\n }\n const beforeX = curr.x + Math.sign(prev.x - curr.x) * r;\n const beforeY = curr.y + Math.sign(prev.y - curr.y) * r;\n const afterX = curr.x + Math.sign(next.x - curr.x) * r;\n const afterY = curr.y + Math.sign(next.y - curr.y) * r;\n d += ` L${beforeX},${beforeY} Q${curr.x},${curr.y} ${afterX},${afterY}`;\n }\n const last = points[points.length - 1];\n d += ` L${last.x},${last.y}`;\n return d;\n}\n\nfunction distance(a: Point, b: Point): number {\n return Math.hypot(b.x - a.x, b.y - a.y);\n}\n\n/** A simple bezier between two anchors that stubs perpendicular to each\n * side. Useful when consumers ask for `routing=\"bezier\"`. */\nexport function bezierPath(from: Anchor, to: Anchor): string {\n const fs = stubOut(from, Math.max(40, distance(from, to) * 0.3));\n const ts = stubOut(to, Math.max(40, distance(from, to) * 0.3));\n return `M${from.x},${from.y} C${fs.x},${fs.y} ${ts.x},${ts.y} ${to.x},${to.y}`;\n}\n\n/** A point along the polyline at fractional position 0..1 (for label placement). */\nexport function midPoint(points: Point[]): Point {\n if (points.length === 0) return { x: 0, y: 0 };\n if (points.length === 1) return points[0];\n // Total length\n let total = 0;\n const segLens: number[] = [];\n for (let i = 1; i < points.length; i++) {\n const len = distance(points[i - 1], points[i]);\n segLens.push(len);\n total += len;\n }\n let target = total / 2;\n for (let i = 0; i < segLens.length; i++) {\n if (target <= segLens[i]) {\n const t = segLens[i] === 0 ? 0 : target / segLens[i];\n const a = points[i];\n const b = points[i + 1];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n }\n target -= segLens[i];\n }\n return points[points.length - 1];\n}\n\n/** Inset a path's first/last segment by `inset` units so a marker can sit\n * at the original endpoint without overlapping the line. */\nexport function insetEndpoints(points: Point[], inset: { from: number; to: number }): Point[] {\n if (points.length < 2) return points;\n const result = points.slice();\n // Front\n if (inset.from > 0) {\n const a = result[0];\n const b = result[1];\n const len = distance(a, b);\n if (len > inset.from) {\n const t = inset.from / len;\n result[0] = { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n }\n }\n // Back\n if (inset.to > 0) {\n const lastIdx = result.length - 1;\n const a = result[lastIdx];\n const b = result[lastIdx - 1];\n const len = distance(a, b);\n if (len > inset.to) {\n const t = inset.to / len;\n result[lastIdx] = { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n }\n }\n return result;\n}\n","import { useMemo } from \"react\";\nimport { useCanvas } from \"./_canvas/Canvas.context\";\nimport type { DiagramRelationProps } from \"./Diagram.types\";\nimport { useDiagram } from \"./Diagram.context\";\nimport {\n defaultMarkersForType,\n markerInset,\n renderMarker,\n type Direction,\n type Point,\n} from \"./diagram.markers\";\nimport {\n bezierPath,\n dodgeObstacles,\n insetEndpoints,\n manhattanPath,\n midPoint,\n pathFromPoints,\n pickAnchors,\n type Anchor,\n type Rect,\n} from \"./diagram.routing\";\n\nconst HEADER_HEIGHT = 36;\nconst FIELD_HEIGHT = 29; // 28px content (py-1 + text-sm) + 1px border-t\nconst DEFAULT_COLOR = \"#71717a\";\n\n/** Direction the marker shape \"points into the entity body\" from the anchor.\n * Marker helpers use this to position arrow tips inside the entity, ERD bars\n * at the entity edge, and crow's-foot fingers fanning outward into the line. */\nfunction markerDirection(side: Anchor[\"side\"]): Direction {\n switch (side) {\n case \"left\": return \"right\"; // entity body is to the right of a left-side anchor\n case \"right\": return \"left\";\n case \"top\": return \"down\";\n case \"bottom\": return \"up\";\n }\n}\n\nfunction strokeDashArray(style: DiagramRelationProps[\"lineStyle\"]): string | undefined {\n switch (style) {\n case \"dashed\": return \"8 4\";\n case \"dotted\": return \"2 4\";\n default: return undefined;\n }\n}\n\nexport function DiagramRelation({\n from,\n to,\n fromField: fromFieldProp,\n toField: toFieldProp,\n type,\n fromMarker: fromMarkerProp,\n toMarker: toMarkerProp,\n lineStyle: lineStyleProp,\n routing = \"manhattan\",\n color = DEFAULT_COLOR,\n strokeWidth = 2,\n label,\n}: DiagramRelationProps) {\n const { nodeRects, registryVersion } = useCanvas();\n const { schema } = useDiagram();\n\n const result = useMemo(() => {\n const fromRect = nodeRects.get(from);\n const toRect = nodeRects.get(to);\n if (!fromRect || !toRect) return null;\n\n const defaults = defaultMarkersForType(type);\n const fromMarker = fromMarkerProp ?? defaults.fromMarker;\n const toMarker = toMarkerProp ?? defaults.toMarker;\n const lineStyle = lineStyleProp ?? defaults.lineStyle;\n\n // Resolve field row Y for ERD-style \"left/right\" anchors.\n const fromEntity = schema.entities.find((e) => (e.id ?? e.name) === from);\n const toEntity = schema.entities.find((e) => (e.id ?? e.name) === to);\n const fromFieldY = resolveFieldY(fromRect, fromEntity?.fields, fromFieldProp, true);\n const toFieldY = resolveFieldY(toRect, toEntity?.fields, toFieldProp, false, fromEntity?.name ?? from);\n\n // Pick best (side, point) for each end.\n const anchors = pickAnchors(fromRect, toRect, fromFieldY, toFieldY);\n\n // For top/bottom anchors, ignore the field-Y heuristic — anchor at side midpoint.\n if (anchors.from.side === \"top\" || anchors.from.side === \"bottom\") {\n anchors.from.x = fromRect.x + fromRect.width / 2;\n }\n if (anchors.to.side === \"top\" || anchors.to.side === \"bottom\") {\n anchors.to.x = toRect.x + toRect.width / 2;\n }\n\n // Build the polyline.\n let points: Point[];\n if (routing === \"straight\") {\n points = [\n { x: anchors.from.x, y: anchors.from.y },\n { x: anchors.to.x, y: anchors.to.y },\n ];\n } else if (routing === \"bezier\") {\n // Bezier path is rendered separately as an SVG `d` string — handled below.\n points = [];\n } else {\n // Manhattan + obstacle-aware mid-line + post-pass dodge.\n const obstacles: Rect[] = [];\n nodeRects.forEach((rect, id) => {\n if (id === from || id === to) return;\n obstacles.push(rect);\n });\n const initial = manhattanPath(anchors.from, anchors.to, obstacles);\n points = dodgeObstacles(initial, obstacles);\n }\n\n // Inset endpoints so markers sit flush.\n const insetAmount = { from: markerInset(fromMarker), to: markerInset(toMarker) };\n if (routing !== \"bezier\") {\n points = insetEndpoints(points, insetAmount);\n }\n\n const linePath = routing === \"bezier\" ? bezierPath(anchors.from, anchors.to) : pathFromPoints(points);\n\n // Marker shapes.\n const fromMarkerRenderable = renderMarker(\n fromMarker,\n { x: anchors.from.x, y: anchors.from.y },\n markerDirection(anchors.from.side)\n );\n const toMarkerRenderable = renderMarker(\n toMarker,\n { x: anchors.to.x, y: anchors.to.y },\n markerDirection(anchors.to.side)\n );\n\n const mid = routing === \"bezier\"\n ? { x: (anchors.from.x + anchors.to.x) / 2, y: (anchors.from.y + anchors.to.y) / 2 }\n : midPoint(points);\n\n return {\n linePath,\n fromMarker: fromMarkerRenderable,\n toMarker: toMarkerRenderable,\n fromAnchor: anchors.from,\n toAnchor: anchors.to,\n mid,\n lineStyle,\n };\n }, [\n from,\n to,\n fromFieldProp,\n toFieldProp,\n type,\n fromMarkerProp,\n toMarkerProp,\n lineStyleProp,\n routing,\n schema,\n nodeRects,\n registryVersion,\n ]);\n\n if (!result) return null;\n\n const dashArray = strokeDashArray(result.lineStyle);\n\n return (\n <g data-react-fancy-diagram-relation=\"\">\n <path\n d={result.linePath}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeDasharray={dashArray}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {result.fromMarker?.paths.map((shape, i) => (\n <path\n key={`fm-${i}`}\n d={shape.d}\n fill={shape.fill === \"stroke\" ? color : shape.fill === \"background\" ? \"#ffffff\" : \"none\"}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ))}\n {result.fromMarker?.text && (\n <text\n x={result.fromAnchor.x}\n y={result.fromAnchor.y}\n fontSize={16}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ userSelect: \"none\" }}\n >\n {result.fromMarker.text}\n </text>\n )}\n {result.toMarker?.text && (\n <text\n x={result.toAnchor.x}\n y={result.toAnchor.y}\n fontSize={16}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ userSelect: \"none\" }}\n >\n {result.toMarker.text}\n </text>\n )}\n {result.toMarker?.paths.map((shape, i) => (\n <path\n key={`tm-${i}`}\n d={shape.d}\n fill={shape.fill === \"stroke\" ? color : shape.fill === \"background\" ? \"#ffffff\" : \"none\"}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ))}\n {label && (\n <foreignObject x={result.mid.x - 50} y={result.mid.y - 12} width={100} height={24}>\n <div className=\"flex items-center justify-center text-xs text-zinc-500\">\n <span className=\"rounded bg-white/90 px-1.5 py-0.5 dark:bg-zinc-900/90\">{label}</span>\n </div>\n </foreignObject>\n )}\n </g>\n );\n}\n\nfunction resolveFieldY(\n rect: { width: number; height: number },\n fields: { name: string; primary?: boolean; foreign?: boolean }[] | undefined,\n fieldProp: string | undefined,\n isFrom: boolean,\n fromName?: string,\n): number | undefined {\n if (!fields || fields.length === 0) return undefined;\n let idx = -1;\n if (fieldProp) {\n idx = fields.findIndex((f) => f.name === fieldProp);\n } else if (isFrom) {\n idx = fields.findIndex((f) => f.primary);\n } else {\n const lower = (fromName ?? \"\").toLowerCase();\n idx = fields.findIndex(\n (f) => f.foreign && (f.name === `${lower}_id` || f.name === `${lower}Id`)\n );\n if (idx === -1) idx = fields.findIndex((f) => f.foreign);\n }\n if (idx < 0) return undefined;\n return HEADER_HEIGHT + idx * FIELD_HEIGHT + FIELD_HEIGHT / 2;\n}\n\n// Mark as edge type so Canvas sorts it into the SVG layer\nDiagramRelation._isCanvasEdge = true;\nDiagramRelation.displayName = \"DiagramRelation\";\n","import { useRef, useCallback, type ChangeEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useDiagram } from \"./Diagram.context\";\nimport type { DiagramToolbarProps, ExportFormat } from \"./Diagram.types\";\n\nconst FORMAT_LABELS: Record<ExportFormat, string> = {\n erd: \"ERD\",\n uml: \"UML\",\n dfd: \"DFD\",\n};\n\nconst FORMAT_EXTENSIONS: Record<ExportFormat, string> = {\n erd: \"erd\",\n uml: \"puml\",\n dfd: \"dfd\",\n};\n\nexport function DiagramToolbar({ className }: DiagramToolbarProps) {\n const { schema, downloadableRef, importableRef, exportFormats, onImport } =\n useDiagram();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // Freeze capabilities on mount — read refs once\n const canDownload = downloadableRef.current;\n const canImport = importableRef.current;\n\n const handleDownload = useCallback(\n async (format: ExportFormat) => {\n // Dynamic import to avoid loading serializers unless needed\n const { serializeToERD, serializeToUML, serializeToDFD } = await import(\n \"./diagram.serializers\"\n );\n\n let content: string;\n switch (format) {\n case \"erd\":\n content = serializeToERD(schema);\n break;\n case \"uml\":\n content = serializeToUML(schema);\n break;\n case \"dfd\":\n content = serializeToDFD(schema);\n break;\n }\n\n const blob = new Blob([content], { type: \"text/plain;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `diagram.${FORMAT_EXTENSIONS[format]}`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n },\n [schema],\n );\n\n const handleFileChange = useCallback(\n async (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file || !onImport) return;\n\n const text = await file.text();\n const ext = file.name.split(\".\").pop()?.toLowerCase();\n\n // Dynamic import serializers\n const { deserializeSchema } = await import(\"./diagram.serializers\");\n\n let format: ExportFormat = \"erd\";\n if (ext === \"puml\" || ext === \"uml\") format = \"uml\";\n else if (ext === \"dfd\") format = \"dfd\";\n\n const parsed = deserializeSchema(text, format);\n onImport(parsed);\n\n // Reset file input so the same file can be re-imported\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [onImport],\n );\n\n if (!canDownload && !canImport) return null;\n\n return (\n <div\n data-react-fancy-diagram-toolbar=\"\"\n className={cn(\n \"absolute right-3 top-3 z-10 flex items-center gap-1 rounded-lg border border-zinc-200 bg-white/90 p-1 shadow-sm backdrop-blur-sm dark:border-zinc-700 dark:bg-zinc-800/90\",\n className,\n )}\n >\n {canDownload &&\n exportFormats.map((format) => (\n <button\n key={format}\n type=\"button\"\n onClick={() => handleDownload(format)}\n className=\"rounded px-2 py-1 text-xs font-medium text-zinc-600 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-700 dark:hover:text-zinc-200\"\n >\n {FORMAT_LABELS[format]}\n </button>\n ))}\n\n {canImport && (\n <>\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"rounded px-2 py-1 text-xs font-medium text-zinc-600 transition-colors hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-700 dark:hover:text-zinc-200\"\n >\n Import\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".erd,.puml,.uml,.dfd,.txt\"\n className=\"hidden\"\n onChange={handleFileChange}\n />\n </>\n )}\n </div>\n );\n}\n\nDiagramToolbar.displayName = \"DiagramToolbar\";\n","import type { DiagramSchema } from \"./Diagram.types\";\n\nconst ENTITY_WIDTH = 220;\nconst HEADER_HEIGHT = 40;\nconst FIELD_HEIGHT = 28;\nconst HORIZONTAL_GAP = 80;\nconst VERTICAL_GAP = 60;\n\nfunction getEntityHeight(fieldCount: number): number {\n return HEADER_HEIGHT + Math.max(fieldCount, 1) * FIELD_HEIGHT;\n}\n\n/**\n * Compute grid-based auto-layout positions for diagram entities.\n *\n * Arranges entities in rows based on relation depth using BFS:\n * - Row 0: entities with no incoming relations (roots)\n * - Row 1: entities that only have relations from row 0, etc.\n */\n/**\n * Resolve the stable id for an entity. Per the type contract, `id` defaults\n * to `name` when omitted. Normalizing once at the top keeps `string | undefined`\n * propagation out of every downstream Map/Set.\n */\nfunction resolveEntityId(entity: { id?: string; name: string }): string {\n return entity.id ?? entity.name;\n}\n\nexport function computeDiagramLayout(\n schema: DiagramSchema,\n): Map<string, { x: number; y: number }> {\n const positions = new Map<string, { x: number; y: number }>();\n const entityIds = new Set(schema.entities.map(resolveEntityId));\n\n // Build adjacency: incoming edges per entity\n const incoming = new Map<string, Set<string>>();\n for (const id of entityIds) {\n incoming.set(id, new Set());\n }\n for (const rel of schema.relations) {\n if (entityIds.has(rel.from) && entityIds.has(rel.to)) {\n incoming.get(rel.to)!.add(rel.from);\n }\n }\n\n // BFS to assign rows\n const rowAssignment = new Map<string, number>();\n const assigned = new Set<string>();\n\n // Row 0: entities with no incoming relations\n const queue: string[] = [];\n for (const id of entityIds) {\n if (incoming.get(id)!.size === 0) {\n rowAssignment.set(id, 0);\n assigned.add(id);\n queue.push(id);\n }\n }\n\n // If all entities have incoming relations (cycle), start with the first entity\n if (queue.length === 0 && entityIds.size > 0) {\n const firstId = resolveEntityId(schema.entities[0]);\n rowAssignment.set(firstId, 0);\n assigned.add(firstId);\n queue.push(firstId);\n }\n\n // Build outgoing edges for BFS traversal\n const outgoing = new Map<string, string[]>();\n for (const id of entityIds) {\n outgoing.set(id, []);\n }\n for (const rel of schema.relations) {\n if (entityIds.has(rel.from) && entityIds.has(rel.to)) {\n outgoing.get(rel.from)!.push(rel.to);\n }\n }\n\n // BFS\n let head = 0;\n while (head < queue.length) {\n const current = queue[head++];\n const currentRow = rowAssignment.get(current)!;\n for (const neighbor of outgoing.get(current) ?? []) {\n if (!assigned.has(neighbor)) {\n rowAssignment.set(neighbor, currentRow + 1);\n assigned.add(neighbor);\n queue.push(neighbor);\n }\n }\n }\n\n // Assign any remaining unvisited entities (disconnected components)\n for (const id of entityIds) {\n if (!assigned.has(id)) {\n rowAssignment.set(id, 0);\n }\n }\n\n // Group entities by row\n const rows = new Map<number, string[]>();\n for (const [id, row] of rowAssignment) {\n if (!rows.has(row)) {\n rows.set(row, []);\n }\n rows.get(row)!.push(id);\n }\n\n // Build a lookup for field counts\n const fieldCounts = new Map<string, number>();\n for (const entity of schema.entities) {\n fieldCounts.set(resolveEntityId(entity), entity.fields?.length ?? 0);\n }\n\n // Compute positions row by row\n const sortedRows = Array.from(rows.keys()).sort((a, b) => a - b);\n let currentY = 0;\n\n for (const rowIndex of sortedRows) {\n const rowEntities = rows.get(rowIndex)!;\n const totalWidth =\n rowEntities.length * ENTITY_WIDTH +\n (rowEntities.length - 1) * HORIZONTAL_GAP;\n const startX = -totalWidth / 2 + ENTITY_WIDTH / 2;\n\n let maxHeight = 0;\n for (let i = 0; i < rowEntities.length; i++) {\n const entityId = rowEntities[i];\n const x = startX + i * (ENTITY_WIDTH + HORIZONTAL_GAP) - ENTITY_WIDTH / 2;\n positions.set(entityId, { x, y: currentY });\n const height = getEntityHeight(fieldCounts.get(entityId) ?? 0);\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n\n currentY += maxHeight + VERTICAL_GAP;\n }\n\n return positions;\n}\n","import { useMemo, useRef, useState, useCallback } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Canvas } from \"./_canvas/Canvas\";\nimport { DiagramContext } from \"./Diagram.context\";\nimport { DiagramEntity } from \"./DiagramEntity\";\nimport { DiagramField } from \"./DiagramField\";\nimport { DiagramRelation } from \"./DiagramRelation\";\nimport { DiagramToolbar } from \"./DiagramToolbar\";\nimport { computeDiagramLayout } from \"./diagram.layout\";\nimport type { DiagramProps, DiagramContextValue } from \"./Diagram.types\";\n\nfunction DiagramRoot({\n children,\n schema,\n type = \"general\",\n viewport,\n defaultViewport,\n onViewportChange,\n downloadable = false,\n importable = false,\n exportFormats = [\"erd\"],\n onImport,\n minimap = false,\n className,\n}: DiagramProps) {\n // SECURITY: freeze downloadable/importable on mount, never update\n const downloadableRef = useRef(downloadable);\n const importableRef = useRef(importable);\n\n // Normalize schema: default id to name, add id to relations\n const normalizedSchema = useMemo(() => {\n if (!schema) return { entities: [], relations: [] };\n const entities = schema.entities.map((e) => ({\n ...e,\n id: e.id ?? e.name,\n }));\n const relations = schema.relations.map((r, i) => ({\n ...r,\n id: r.id ?? `rel-${i}`,\n }));\n return { entities, relations };\n }, [schema]);\n\n // Compute auto-layout positions for schema entities\n const initialPositions = useMemo(() => {\n if (normalizedSchema.entities.length === 0) return new Map<string, { x: number; y: number }>();\n\n const layout = computeDiagramLayout(normalizedSchema);\n const positions = new Map<string, { x: number; y: number }>();\n\n for (const entity of normalizedSchema.entities) {\n if (entity.x !== undefined && entity.y !== undefined) {\n positions.set(entity.id, { x: entity.x, y: entity.y });\n } else {\n const pos = layout.get(entity.id);\n positions.set(entity.id, pos ?? { x: 0, y: 0 });\n }\n }\n\n return positions;\n }, [normalizedSchema]);\n\n // Compute a default viewport that centers all entities\n // This avoids relying on fitOnMount which needs DOM measurements\n const computedDefaultViewport = useMemo(() => {\n if (defaultViewport) return defaultViewport;\n if (initialPositions.size === 0) return { panX: 0, panY: 0, zoom: 1 };\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n initialPositions.forEach((pos) => {\n minX = Math.min(minX, pos.x);\n minY = Math.min(minY, pos.y);\n // Estimate entity size: 220px wide, ~200px tall\n maxX = Math.max(maxX, pos.x + 220);\n maxY = Math.max(maxY, pos.y + 200);\n });\n\n const padding = 40;\n // Offset pan so the content is roughly centered\n // Since we don't know container size yet, just shift to make minX/minY visible\n const panX = -minX + padding;\n const panY = -minY + padding;\n\n return { panX, panY, zoom: 1 };\n }, [defaultViewport, initialPositions]);\n\n // Mutable position state for dragging\n const [entityPositions, setEntityPositions] = useState(initialPositions);\n\n const handleEntityMove = useCallback((entityId: string, x: number, y: number) => {\n setEntityPositions((prev) => {\n const next = new Map(prev);\n next.set(entityId, { x, y });\n return next;\n });\n }, []);\n\n const ctx = useMemo<DiagramContextValue>(\n () => ({\n diagramType: type,\n schema: normalizedSchema,\n downloadableRef,\n importableRef,\n exportFormats,\n onImport,\n }),\n [type, normalizedSchema, exportFormats, onImport],\n );\n\n return (\n <DiagramContext.Provider value={ctx}>\n <div data-react-fancy-diagram=\"\" className=\"relative h-full w-full\">\n <Canvas\n viewport={viewport}\n defaultViewport={computedDefaultViewport}\n onViewportChange={onViewportChange}\n showGrid\n fitOnMount\n className={cn(\"h-full w-full\", className)}\n >\n {/* Schema-driven entities */}\n {normalizedSchema.entities.map((entity) => {\n const pos = entityPositions.get(entity.id) ?? { x: 0, y: 0 };\n return (\n <DiagramEntity\n key={entity.id}\n id={entity.id}\n name={entity.name}\n x={pos.x}\n y={pos.y}\n draggable\n onPositionChange={(nx, ny) => handleEntityMove(entity.id, nx, ny)}\n >\n {entity.fields?.map((field) => (\n <DiagramField\n key={field.name}\n name={field.name}\n type={field.type}\n primary={field.primary}\n foreign={field.foreign}\n nullable={field.nullable}\n />\n ))}\n </DiagramEntity>\n );\n })}\n\n {/* Schema-driven relations */}\n {normalizedSchema.relations.map((rel) => (\n <DiagramRelation\n key={rel.id}\n from={rel.from}\n to={rel.to}\n fromField={rel.fromField}\n toField={rel.toField}\n type={rel.type}\n label={rel.label}\n />\n ))}\n\n {/* Declarative children */}\n {children}\n\n <Canvas.Controls />\n {minimap && <Canvas.Minimap />}\n </Canvas>\n </div>\n </DiagramContext.Provider>\n );\n}\n\nexport const Diagram = Object.assign(DiagramRoot, {\n Entity: DiagramEntity,\n Field: DiagramField,\n Relation: DiagramRelation,\n Toolbar: DiagramToolbar,\n});\n","import type { DiagramProps } from \"../Diagram/Diagram.types\";\nimport { Diagram } from \"../Diagram/Diagram\";\n\n/**\n * ERD/UML preset of {@link Diagram}. Pre-applies the most common defaults for\n * data-modeling diagrams: type=\"erd\", downloadable, ERD + UML export formats,\n * minimap on. Pass any DiagramProps to override.\n */\nexport function DataDiagram(props: DiagramProps) {\n return (\n <Diagram\n type=\"erd\"\n downloadable\n exportFormats={[\"erd\", \"uml\"]}\n minimap\n {...props}\n />\n );\n}\n\nDataDiagram.Entity = Diagram.Entity;\nDataDiagram.Field = Diagram.Field;\nDataDiagram.Relation = Diagram.Relation;\nDataDiagram.Toolbar = Diagram.Toolbar;\nDataDiagram.displayName = \"DataDiagram\";\n","import { useMemo } from \"react\";\nimport { Diagram } from \"../Diagram/Diagram\";\nimport type {\n DiagramSchema,\n RelationType,\n RoutingMode,\n} from \"../Diagram/Diagram.types\";\n\nexport interface FlowchartNode {\n id: string;\n label: string;\n x?: number;\n y?: number;\n color?: string;\n}\n\nexport interface FlowchartEdge {\n from: string;\n to: string;\n /** Defaults to \"association\" (line with arrow on `to` end). */\n type?: RelationType;\n label?: string;\n}\n\nexport interface FlowchartProps {\n nodes: FlowchartNode[];\n edges: FlowchartEdge[];\n /** Defaults to \"manhattan\". */\n routing?: RoutingMode;\n downloadable?: boolean;\n minimap?: boolean;\n className?: string;\n}\n\nconst NODE_W = 160;\nconst NODE_H = 80;\nconst COL_GAP = 220;\nconst ROW_GAP = 140;\n\n/** Auto-layout: lay missing-position nodes on a wrap-around grid. */\nfunction autoLayout(nodes: FlowchartNode[]): FlowchartNode[] {\n let col = 0;\n let row = 0;\n const cols = Math.max(2, Math.ceil(Math.sqrt(nodes.length)));\n return nodes.map((n) => {\n if (n.x !== undefined && n.y !== undefined) return n;\n const placed = { ...n, x: col * COL_GAP + 40, y: row * ROW_GAP + 40 };\n col += 1;\n if (col >= cols) {\n col = 0;\n row += 1;\n }\n return placed;\n });\n}\n\n/**\n * Boxes-and-arrows flowchart. Thin schema adapter over {@link Diagram} —\n * each node becomes a label-only entity, each edge becomes a relation.\n */\nexport function Flowchart({\n nodes,\n edges,\n routing = \"manhattan\",\n downloadable = false,\n minimap = false,\n className,\n}: FlowchartProps) {\n const schema: DiagramSchema = useMemo(() => {\n const placed = autoLayout(nodes);\n return {\n entities: placed.map((n) => ({\n id: n.id,\n name: n.label,\n x: n.x,\n y: n.y,\n })),\n relations: edges.map((e) => ({\n from: e.from,\n to: e.to,\n type: e.type ?? \"association\",\n routing,\n label: e.label,\n })),\n };\n }, [nodes, edges, routing]);\n\n return (\n <Diagram\n type=\"flowchart\"\n schema={schema}\n downloadable={downloadable}\n minimap={minimap}\n className={className}\n />\n );\n}\n\nFlowchart.displayName = \"Flowchart\";\n\nexport { NODE_W as FLOWCHART_NODE_WIDTH, NODE_H as FLOWCHART_NODE_HEIGHT };\n","export interface MindmapNode {\n id: string;\n label: string;\n color?: string;\n children?: MindmapNode[];\n}\n\nexport interface MindmapPosition {\n id: string;\n label: string;\n color?: string;\n x: number;\n y: number;\n}\n\nexport interface MindmapEdge {\n from: string;\n to: string;\n}\n\nexport interface MindmapLayoutResult {\n nodes: MindmapPosition[];\n edges: MindmapEdge[];\n /** Bounding box of placed nodes for viewport/centering decisions. */\n width: number;\n height: number;\n}\n\nconst DEFAULT_RADII = [0, 220, 380, 520, 640, 740];\n\nfunction leafCount(node: MindmapNode): number {\n if (!node.children || node.children.length === 0) return 1;\n return node.children.reduce((sum, child) => sum + leafCount(child), 0);\n}\n\nfunction radiusForDepth(depth: number, radii: number[]): number {\n if (depth < radii.length) return radii[depth];\n // After preset rings, keep stepping outward at a fixed cadence.\n return radii[radii.length - 1] + (depth - radii.length + 1) * 110;\n}\n\n/**\n * Polar layout: root at center, each subsequent level on a concentric ring.\n * Each child subtree gets an angular slice proportional to its leaf count\n * so dense branches don't get crammed into the same wedge as sparse ones.\n */\nexport function layoutMindmap(\n root: MindmapNode,\n radii: number[] = DEFAULT_RADII,\n): MindmapLayoutResult {\n const positions: MindmapPosition[] = [];\n const edges: MindmapEdge[] = [];\n\n // Use a virtual center origin; convert to non-negative pixels at the end.\n const placed = new Map<string, { x: number; y: number }>();\n\n function place(\n node: MindmapNode,\n depth: number,\n angleStart: number,\n angleEnd: number,\n ): void {\n const r = radiusForDepth(depth, radii);\n const angleMid = (angleStart + angleEnd) / 2;\n const x = depth === 0 ? 0 : r * Math.cos(angleMid);\n const y = depth === 0 ? 0 : r * Math.sin(angleMid);\n placed.set(node.id, { x, y });\n positions.push({ id: node.id, label: node.label, color: node.color, x, y });\n\n if (!node.children || node.children.length === 0) return;\n const total = leafCount(node);\n let cursor = angleStart;\n for (const child of node.children) {\n const span = (leafCount(child) / total) * (angleEnd - angleStart);\n place(child, depth + 1, cursor, cursor + span);\n edges.push({ from: node.id, to: child.id });\n cursor += span;\n }\n }\n\n place(root, 0, 0, Math.PI * 2);\n\n // Shift to non-negative + add padding for entity boxes.\n const PADDING = 100;\n const xs = positions.map((p) => p.x);\n const ys = positions.map((p) => p.y);\n const minX = Math.min(...xs);\n const minY = Math.min(...ys);\n const maxX = Math.max(...xs);\n const maxY = Math.max(...ys);\n\n const shifted = positions.map((p) => ({\n ...p,\n x: p.x - minX + PADDING,\n y: p.y - minY + PADDING,\n }));\n\n return {\n nodes: shifted,\n edges,\n width: maxX - minX + PADDING * 2,\n height: maxY - minY + PADDING * 2,\n };\n}\n","import { useMemo } from \"react\";\nimport { Diagram } from \"../Diagram/Diagram\";\nimport type { DiagramSchema } from \"../Diagram/Diagram.types\";\nimport { layoutMindmap, type MindmapNode } from \"./mindmap.layout\";\n\nexport type { MindmapNode };\n\nexport interface MindmapProps {\n root: MindmapNode;\n /** Override the default ring radii (level 0 is always center). */\n radii?: number[];\n downloadable?: boolean;\n minimap?: boolean;\n className?: string;\n}\n\n/**\n * Radial mindmap. Root at center; children fan outward on concentric rings\n * using bezier-routed connectors. Angular wedges are sized by subtree leaf\n * count so dense branches get more room than sparse ones.\n */\nexport function Mindmap({\n root,\n radii,\n downloadable = false,\n minimap = false,\n className,\n}: MindmapProps) {\n const schema: DiagramSchema = useMemo(() => {\n const layout = layoutMindmap(root, radii);\n return {\n entities: layout.nodes.map((n) => ({\n id: n.id,\n name: n.label,\n x: n.x,\n y: n.y,\n })),\n relations: layout.edges.map((e) => ({\n from: e.from,\n to: e.to,\n type: \"association\" as const,\n routing: \"bezier\" as const,\n toMarker: \"none\",\n fromMarker: \"none\",\n })),\n };\n }, [root, radii]);\n\n return (\n <Diagram\n type=\"general\"\n schema={schema}\n downloadable={downloadable}\n minimap={minimap}\n className={className}\n />\n );\n}\n\nMindmap.displayName = \"Mindmap\";\n","export interface OrgChartNode {\n id: string;\n label: string;\n color?: string;\n children?: OrgChartNode[];\n}\n\nexport interface OrgChartPosition {\n id: string;\n label: string;\n color?: string;\n x: number;\n y: number;\n}\n\nexport interface OrgChartEdge {\n from: string;\n to: string;\n}\n\nexport interface OrgChartLayoutResult {\n nodes: OrgChartPosition[];\n edges: OrgChartEdge[];\n width: number;\n height: number;\n}\n\nconst COL_WIDTH = 200;\nconst ROW_HEIGHT = 140;\nconst PADDING = 60;\n\ninterface Sized {\n node: OrgChartNode;\n depth: number;\n /** First slot index occupied by this subtree (inclusive). */\n startSlot: number;\n /** Number of leaf slots this subtree occupies. */\n span: number;\n /** Pre-computed center slot in the X axis. */\n centerSlot: number;\n children: Sized[];\n}\n\nlet slotCursor = 0;\n\nfunction size(node: OrgChartNode, depth: number): Sized {\n if (!node.children || node.children.length === 0) {\n const startSlot = slotCursor++;\n return { node, depth, startSlot, span: 1, centerSlot: startSlot, children: [] };\n }\n const startSlot = slotCursor;\n const sized = node.children.map((c) => size(c, depth + 1));\n const span = sized.reduce((sum, s) => sum + s.span, 0);\n // Center over middle of children's combined span.\n const centerSlot = (sized[0].centerSlot + sized[sized.length - 1].centerSlot) / 2;\n return { node, depth, startSlot, span, centerSlot, children: sized };\n}\n\nfunction flatten(s: Sized, out: OrgChartPosition[], edges: OrgChartEdge[]) {\n out.push({\n id: s.node.id,\n label: s.node.label,\n color: s.node.color,\n x: s.centerSlot * COL_WIDTH + PADDING,\n y: s.depth * ROW_HEIGHT + PADDING,\n });\n for (const child of s.children) {\n edges.push({ from: s.node.id, to: child.node.id });\n flatten(child, out, edges);\n }\n}\n\n/**\n * Tidy-tree layout (simplified Reingold-Tilford):\n * leaves occupy unit slots in a row; every internal node is centered over\n * the span of its descendants. Manhattan-routed edges look natural top-down.\n */\nexport function layoutOrgChart(root: OrgChartNode): OrgChartLayoutResult {\n slotCursor = 0;\n const sized = size(root, 0);\n const nodes: OrgChartPosition[] = [];\n const edges: OrgChartEdge[] = [];\n flatten(sized, nodes, edges);\n\n const xs = nodes.map((n) => n.x);\n const ys = nodes.map((n) => n.y);\n return {\n nodes,\n edges,\n width: Math.max(...xs) + PADDING + COL_WIDTH,\n height: Math.max(...ys) + PADDING + ROW_HEIGHT,\n };\n}\n","import { useMemo } from \"react\";\nimport { Diagram } from \"../Diagram/Diagram\";\nimport type { DiagramSchema } from \"../Diagram/Diagram.types\";\nimport { layoutOrgChart, type OrgChartNode } from \"./orgchart.layout\";\n\nexport type { OrgChartNode };\n\nexport interface OrgChartProps {\n root: OrgChartNode;\n downloadable?: boolean;\n minimap?: boolean;\n className?: string;\n}\n\n/**\n * Top-down hierarchy diagram. Each parent sits centered over the span of its\n * descendants; manhattan-routed connectors with an open triangle on the\n * child end give it a UML-inheritance feel.\n */\nexport function OrgChart({\n root,\n downloadable = false,\n minimap = false,\n className,\n}: OrgChartProps) {\n const schema: DiagramSchema = useMemo(() => {\n const layout = layoutOrgChart(root);\n return {\n entities: layout.nodes.map((n) => ({\n id: n.id,\n name: n.label,\n x: n.x,\n y: n.y,\n })),\n relations: layout.edges.map((e) => ({\n from: e.from,\n to: e.to,\n type: \"association\" as const,\n routing: \"manhattan\" as const,\n fromMarker: \"none\",\n toMarker: \"triangle-open\",\n })),\n };\n }, [root]);\n\n return (\n <Diagram\n type=\"general\"\n schema={schema}\n downloadable={downloadable}\n minimap={minimap}\n className={className}\n />\n );\n}\n\nOrgChart.displayName = \"OrgChart\";\n"]}
|