semiotic 2.0.2 → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/CLAUDE.md +530 -0
  2. package/README.md +190 -37
  3. package/ai/cli.js +48 -0
  4. package/ai/dist/ai/componentRegistry.js +45 -0
  5. package/ai/dist/ai/mcp-server.js +99 -0
  6. package/ai/dist/ai/renderHOCToSVG.js +77 -0
  7. package/ai/dist/src/components/Annotation.js +358 -0
  8. package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +369 -0
  9. package/ai/dist/src/components/Axis/Axis.js +373 -0
  10. package/ai/dist/src/components/Axis/axisTitle.js +14 -0
  11. package/ai/dist/src/components/Axis/index.js +7 -0
  12. package/ai/dist/src/components/Axis/summaryGraphic.js +37 -0
  13. package/ai/dist/src/components/Brush.js +84 -0
  14. package/ai/dist/src/components/DividedLine.js +65 -0
  15. package/ai/dist/src/components/FacetController.js +259 -0
  16. package/ai/dist/src/components/Frame.js +139 -0
  17. package/ai/dist/src/components/InteractionLayer.js +328 -0
  18. package/ai/dist/src/components/Legend.js +140 -0
  19. package/ai/dist/src/components/MiniMap.js +75 -0
  20. package/ai/dist/src/components/MinimapXYFrame.js +99 -0
  21. package/ai/dist/src/components/NetworkFrame.js +335 -0
  22. package/ai/dist/src/components/OrdinalFrame.js +437 -0
  23. package/ai/dist/src/components/ResponsiveFrame.js +68 -0
  24. package/ai/dist/src/components/ResponsiveMinimapXYFrame.js +11 -0
  25. package/ai/dist/src/components/ResponsiveNetworkFrame.js +11 -0
  26. package/ai/dist/src/components/ResponsiveOrdinalFrame.js +11 -0
  27. package/ai/dist/src/components/ResponsiveXYFrame.js +10 -0
  28. package/ai/dist/src/components/SparkFrame.js +113 -0
  29. package/ai/dist/src/components/SparkNetworkFrame.js +11 -0
  30. package/ai/dist/src/components/SparkOrdinalFrame.js +11 -0
  31. package/ai/dist/src/components/SparkXYFrame.js +11 -0
  32. package/ai/dist/src/components/Tooltip/Tooltip.js +304 -0
  33. package/ai/dist/src/components/TooltipPositioner/index.js +132 -0
  34. package/ai/dist/src/components/VisualizationLayer.js +395 -0
  35. package/ai/dist/src/components/XYFrame.js +524 -0
  36. package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +73 -0
  37. package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +254 -0
  38. package/ai/dist/src/components/annotationRules/baseRules.js +150 -0
  39. package/ai/dist/src/components/annotationRules/networkframeRules.js +198 -0
  40. package/ai/dist/src/components/annotationRules/orframeRules.js +695 -0
  41. package/ai/dist/src/components/annotationRules/xyframeRules.js +299 -0
  42. package/ai/dist/src/components/batchWork.js +35 -0
  43. package/ai/dist/src/components/charts/index.js +96 -0
  44. package/ai/dist/src/components/charts/network/ChordDiagram.js +245 -0
  45. package/ai/dist/src/components/charts/network/CirclePack.js +177 -0
  46. package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +248 -0
  47. package/ai/dist/src/components/charts/network/SankeyDiagram.js +305 -0
  48. package/ai/dist/src/components/charts/network/TreeDiagram.js +268 -0
  49. package/ai/dist/src/components/charts/network/Treemap.js +177 -0
  50. package/ai/dist/src/components/charts/ordinal/BarChart.js +191 -0
  51. package/ai/dist/src/components/charts/ordinal/BoxPlot.js +235 -0
  52. package/ai/dist/src/components/charts/ordinal/DonutChart.js +178 -0
  53. package/ai/dist/src/components/charts/ordinal/DotPlot.js +194 -0
  54. package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +194 -0
  55. package/ai/dist/src/components/charts/ordinal/PieChart.js +155 -0
  56. package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +213 -0
  57. package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +219 -0
  58. package/ai/dist/src/components/charts/realtime/RealtimeBarChart.js +91 -0
  59. package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +73 -0
  60. package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +85 -0
  61. package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +86 -0
  62. package/ai/dist/src/components/charts/shared/ChartError.js +72 -0
  63. package/ai/dist/src/components/charts/shared/colorUtils.js +138 -0
  64. package/ai/dist/src/components/charts/shared/formatUtils.js +176 -0
  65. package/ai/dist/src/components/charts/shared/hooks.js +49 -0
  66. package/ai/dist/src/components/charts/shared/legendUtils.js +57 -0
  67. package/ai/dist/src/components/charts/shared/types.js +2 -0
  68. package/ai/dist/src/components/charts/shared/validateChartData.js +82 -0
  69. package/ai/dist/src/components/charts/shared/validateProps.js +640 -0
  70. package/ai/dist/src/components/charts/xy/AreaChart.js +220 -0
  71. package/ai/dist/src/components/charts/xy/BubbleChart.js +222 -0
  72. package/ai/dist/src/components/charts/xy/Heatmap.js +230 -0
  73. package/ai/dist/src/components/charts/xy/LineChart.js +302 -0
  74. package/ai/dist/src/components/charts/xy/Scatterplot.js +136 -0
  75. package/ai/dist/src/components/charts/xy/StackedAreaChart.js +220 -0
  76. package/ai/dist/src/components/constants/coordinateNames.js +11 -0
  77. package/ai/dist/src/components/constants/frame_props.js +251 -0
  78. package/ai/dist/src/components/constants/jsx.js +71 -0
  79. package/ai/dist/src/components/data/dataFunctions.js +473 -0
  80. package/ai/dist/src/components/data/multiAccessorUtils.js +14 -0
  81. package/ai/dist/src/components/data/networkPipelineCache.js +43 -0
  82. package/ai/dist/src/components/data/ordinalPipelineCache.js +53 -0
  83. package/ai/dist/src/components/data/unflowedFunctions.js +5 -0
  84. package/ai/dist/src/components/data/xyPipelineCache.js +49 -0
  85. package/ai/dist/src/components/generic_utilities/functions.js +5 -0
  86. package/ai/dist/src/components/index.js +145 -0
  87. package/ai/dist/src/components/interactionLayerBehavior/InteractionCanvas.js +128 -0
  88. package/ai/dist/src/components/processing/InteractionItems.js +223 -0
  89. package/ai/dist/src/components/processing/hierarchyUtils.js +104 -0
  90. package/ai/dist/src/components/processing/layouts/chordLayout.js +58 -0
  91. package/ai/dist/src/components/processing/layouts/forceLayout.js +142 -0
  92. package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +31 -0
  93. package/ai/dist/src/components/processing/layouts/index.js +32 -0
  94. package/ai/dist/src/components/processing/layouts/sankeyLayout.js +96 -0
  95. package/ai/dist/src/components/processing/layouts/simpleLayouts.js +34 -0
  96. package/ai/dist/src/components/processing/layouts/types.js +2 -0
  97. package/ai/dist/src/components/processing/network.js +771 -0
  98. package/ai/dist/src/components/processing/networkDefaults.js +39 -0
  99. package/ai/dist/src/components/processing/networkLayoutHelpers.js +98 -0
  100. package/ai/dist/src/components/processing/ordinal.js +889 -0
  101. package/ai/dist/src/components/processing/ordinalConstants.js +23 -0
  102. package/ai/dist/src/components/processing/ordinalOverlays.js +88 -0
  103. package/ai/dist/src/components/processing/ordinalRenderPipeline.js +196 -0
  104. package/ai/dist/src/components/processing/xyDrawing.js +484 -0
  105. package/ai/dist/src/components/realtime/BinAccumulator.js +36 -0
  106. package/ai/dist/src/components/realtime/IncrementalExtent.js +55 -0
  107. package/ai/dist/src/components/realtime/RealtimeFrame.js +710 -0
  108. package/ai/dist/src/components/realtime/RingBuffer.js +104 -0
  109. package/ai/dist/src/components/realtime/renderers/barRenderer.js +133 -0
  110. package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +7 -0
  111. package/ai/dist/src/components/realtime/renderers/lineRenderer.js +164 -0
  112. package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +91 -0
  113. package/ai/dist/src/components/realtime/renderers/types.js +2 -0
  114. package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +163 -0
  115. package/ai/dist/src/components/realtime/types.js +2 -0
  116. package/ai/dist/src/components/semiotic-ai.js +66 -0
  117. package/ai/dist/src/components/semiotic-network.js +30 -0
  118. package/ai/dist/src/components/semiotic-ordinal.js +28 -0
  119. package/ai/dist/src/components/semiotic-realtime.js +37 -0
  120. package/ai/dist/src/components/semiotic-server.js +8 -0
  121. package/ai/dist/src/components/semiotic-xy.js +41 -0
  122. package/ai/dist/src/components/semiotic.js +101 -0
  123. package/ai/dist/src/components/server/renderToStaticSVG.js +392 -0
  124. package/ai/dist/src/components/store/TooltipStore.js +13 -0
  125. package/ai/dist/src/components/store/createStore.js +77 -0
  126. package/ai/dist/src/components/svg/SvgHelper.js +308 -0
  127. package/ai/dist/src/components/svg/areaDrawing.js +312 -0
  128. package/ai/dist/src/components/svg/boxplotRenderer.js +441 -0
  129. package/ai/dist/src/components/svg/bucketizedRenderer.js +677 -0
  130. package/ai/dist/src/components/svg/ckbinsRenderer.js +92 -0
  131. package/ai/dist/src/components/svg/ckmeans.js +238 -0
  132. package/ai/dist/src/components/svg/contourLayout.js +73 -0
  133. package/ai/dist/src/components/svg/contourRenderer.js +53 -0
  134. package/ai/dist/src/components/svg/edgeGenerators.js +181 -0
  135. package/ai/dist/src/components/svg/frameFunctions.js +579 -0
  136. package/ai/dist/src/components/svg/graphAlgorithms.js +138 -0
  137. package/ai/dist/src/components/svg/hexbinLayout.js +163 -0
  138. package/ai/dist/src/components/svg/lineDrawing.js +427 -0
  139. package/ai/dist/src/components/svg/networkDrawing.js +207 -0
  140. package/ai/dist/src/components/svg/nodeGenerators.js +131 -0
  141. package/ai/dist/src/components/svg/pieceDrawing.js +110 -0
  142. package/ai/dist/src/components/svg/pieceLayouts.js +588 -0
  143. package/ai/dist/src/components/svg/sankeyLinks.js +143 -0
  144. package/ai/dist/src/components/svg/summaryAxis.js +48 -0
  145. package/ai/dist/src/components/svg/summaryLayouts.js +202 -0
  146. package/ai/dist/src/components/svg/swarmLayout.js +128 -0
  147. package/ai/dist/src/components/types/annotationTypes.js +2 -0
  148. package/ai/dist/src/components/types/canvasTypes.js +2 -0
  149. package/ai/dist/src/components/types/generalTypes.js +2 -0
  150. package/ai/dist/src/components/types/interactionTypes.js +2 -0
  151. package/ai/dist/src/components/types/legendTypes.js +2 -0
  152. package/ai/dist/src/components/types/networkTypes.js +2 -0
  153. package/ai/dist/src/components/types/ordinalTypes.js +2 -0
  154. package/ai/dist/src/components/types/xyTypes.js +2 -0
  155. package/ai/dist/src/components/useBoundingRect.js +24 -0
  156. package/ai/dist/src/components/useDerivedStateFromProps.js +25 -0
  157. package/ai/dist/src/components/useLegacyUnmountCallback.js +21 -0
  158. package/ai/dist/src/components/visualizationLayerBehavior/axis.js +249 -0
  159. package/ai/dist/src/components/visualizationLayerBehavior/general.js +435 -0
  160. package/ai/dist/src/setupTests.js +4 -0
  161. package/ai/examples.md +394 -0
  162. package/ai/schema.json +1178 -0
  163. package/ai/system-prompt.md +38 -0
  164. package/dist/Annotation.d.ts +3 -0
  165. package/dist/AnnotationLayer/AnnotationLayer.d.ts +25 -0
  166. package/dist/Axis/Axis.d.ts +7 -0
  167. package/dist/Axis/axisTitle.d.ts +10 -0
  168. package/dist/Axis/index.d.ts +2 -0
  169. package/dist/Axis/summaryGraphic.d.ts +17 -0
  170. package/dist/Brush.d.ts +12 -0
  171. package/dist/DividedLine.d.ts +16 -0
  172. package/dist/FacetController.d.ts +12 -0
  173. package/dist/Frame.d.ts +2 -0
  174. package/dist/InteractionLayer.d.ts +3 -0
  175. package/dist/Legend.d.ts +3 -0
  176. package/dist/MiniMap.d.ts +14 -0
  177. package/dist/MinimapXYFrame.d.ts +10 -0
  178. package/dist/NetworkFrame.d.ts +8 -0
  179. package/dist/OrdinalFrame.d.ts +8 -0
  180. package/dist/ResponsiveFrame.d.ts +22 -0
  181. package/dist/ResponsiveMinimapXYFrame.d.ts +3 -0
  182. package/dist/ResponsiveNetworkFrame.d.ts +3 -0
  183. package/dist/ResponsiveOrdinalFrame.d.ts +3 -0
  184. package/dist/ResponsiveXYFrame.d.ts +3 -0
  185. package/dist/SparkFrame.d.ts +14 -0
  186. package/dist/SparkNetworkFrame.d.ts +5 -0
  187. package/dist/SparkOrdinalFrame.d.ts +5 -0
  188. package/dist/SparkXYFrame.d.ts +5 -0
  189. package/dist/Tooltip/Tooltip.d.ts +141 -0
  190. package/dist/TooltipPositioner/index.d.ts +7 -0
  191. package/dist/VisualizationLayer.d.ts +33 -0
  192. package/dist/XYFrame.d.ts +8 -0
  193. package/dist/annotationLayerBehavior/annotationHandling.d.ts +19 -0
  194. package/dist/annotationLayerBehavior/d3labeler.d.ts +9 -0
  195. package/dist/annotationRules/baseRules.d.ts +25 -0
  196. package/dist/annotationRules/networkframeRules.d.ts +48 -0
  197. package/dist/annotationRules/orframeRules.d.ts +103 -0
  198. package/dist/annotationRules/xyframeRules.d.ts +117 -0
  199. package/dist/batchWork.d.ts +6 -0
  200. package/dist/charts/index.d.ts +62 -0
  201. package/dist/charts/network/ChordDiagram.d.ts +181 -0
  202. package/dist/charts/network/CirclePack.d.ts +103 -0
  203. package/dist/charts/network/ForceDirectedGraph.d.ts +192 -0
  204. package/dist/charts/network/SankeyDiagram.d.ts +195 -0
  205. package/dist/charts/network/TreeDiagram.d.ts +200 -0
  206. package/dist/charts/network/Treemap.d.ts +98 -0
  207. package/dist/charts/ordinal/BarChart.d.ts +119 -0
  208. package/dist/charts/ordinal/BoxPlot.d.ts +125 -0
  209. package/dist/charts/ordinal/DonutChart.d.ts +95 -0
  210. package/dist/charts/ordinal/DotPlot.d.ts +128 -0
  211. package/dist/charts/ordinal/GroupedBarChart.d.ts +113 -0
  212. package/dist/charts/ordinal/PieChart.d.ts +83 -0
  213. package/dist/charts/ordinal/StackedBarChart.d.ts +119 -0
  214. package/dist/charts/ordinal/SwarmPlot.d.ts +137 -0
  215. package/dist/charts/realtime/RealtimeBarChart.d.ts +102 -0
  216. package/dist/charts/realtime/RealtimeLineChart.d.ts +78 -0
  217. package/dist/charts/realtime/RealtimeSwarmChart.d.ts +88 -0
  218. package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +85 -0
  219. package/dist/charts/shared/ChartError.d.ts +19 -0
  220. package/dist/charts/shared/colorUtils.d.ts +62 -0
  221. package/dist/charts/shared/formatUtils.d.ts +82 -0
  222. package/dist/charts/shared/hooks.d.ts +20 -0
  223. package/dist/charts/shared/legendUtils.d.ts +32 -0
  224. package/dist/charts/shared/types.d.ts +58 -0
  225. package/dist/charts/shared/validateChartData.d.ts +41 -0
  226. package/dist/charts/shared/validateProps.d.ts +18 -0
  227. package/dist/charts/xy/AreaChart.d.ts +127 -0
  228. package/dist/charts/xy/BubbleChart.d.ts +157 -0
  229. package/dist/charts/xy/Heatmap.d.ts +153 -0
  230. package/dist/charts/xy/LineChart.d.ts +193 -0
  231. package/dist/charts/xy/Scatterplot.d.ts +50 -0
  232. package/dist/charts/xy/StackedAreaChart.d.ts +131 -0
  233. package/dist/constants/coordinateNames.d.ts +8 -0
  234. package/dist/constants/frame_props.d.ts +13 -0
  235. package/dist/constants/jsx.d.ts +19 -0
  236. package/dist/data/dataFunctions.d.ts +45 -0
  237. package/dist/data/multiAccessorUtils.d.ts +1 -0
  238. package/dist/data/networkPipelineCache.d.ts +27 -0
  239. package/dist/data/ordinalPipelineCache.d.ts +33 -0
  240. package/dist/data/unflowedFunctions.d.ts +1 -0
  241. package/dist/data/xyPipelineCache.d.ts +35 -0
  242. package/dist/generic_utilities/functions.d.ts +1 -0
  243. package/dist/index.d.ts +133 -0
  244. package/dist/interactionLayerBehavior/InteractionCanvas.d.ts +20 -0
  245. package/dist/network.js +8520 -0
  246. package/dist/network.js.map +1 -0
  247. package/dist/network.min.js +1 -0
  248. package/dist/network.module.js +8484 -0
  249. package/dist/network.module.js.map +1 -0
  250. package/dist/network.module.min.js +1 -0
  251. package/dist/ordinal.js +9276 -0
  252. package/dist/ordinal.js.map +1 -0
  253. package/dist/ordinal.min.js +1 -0
  254. package/dist/ordinal.module.js +9242 -0
  255. package/dist/ordinal.module.js.map +1 -0
  256. package/dist/ordinal.module.min.js +1 -0
  257. package/dist/processing/InteractionItems.d.ts +13 -0
  258. package/dist/processing/hierarchyUtils.d.ts +16 -0
  259. package/dist/processing/layouts/chordLayout.d.ts +2 -0
  260. package/dist/processing/layouts/forceLayout.d.ts +3 -0
  261. package/dist/processing/layouts/hierarchyLayout.d.ts +10 -0
  262. package/dist/processing/layouts/index.d.ts +8 -0
  263. package/dist/processing/layouts/sankeyLayout.d.ts +8 -0
  264. package/dist/processing/layouts/simpleLayouts.d.ts +7 -0
  265. package/dist/processing/layouts/types.d.ts +17 -0
  266. package/dist/processing/network.d.ts +111 -0
  267. package/dist/processing/networkDefaults.d.ts +36 -0
  268. package/dist/processing/networkLayoutHelpers.d.ts +54 -0
  269. package/dist/processing/ordinal.d.ts +102 -0
  270. package/dist/processing/ordinalConstants.d.ts +33 -0
  271. package/dist/processing/ordinalOverlays.d.ts +33 -0
  272. package/dist/processing/ordinalRenderPipeline.d.ts +148 -0
  273. package/dist/processing/xyDrawing.d.ts +140 -0
  274. package/dist/realtime/BinAccumulator.d.ts +8 -0
  275. package/dist/realtime/IncrementalExtent.d.ts +13 -0
  276. package/dist/realtime/RealtimeFrame.d.ts +4 -0
  277. package/dist/realtime/RingBuffer.d.ts +19 -0
  278. package/dist/realtime/renderers/barRenderer.d.ts +2 -0
  279. package/dist/realtime/renderers/candlestickRenderer.d.ts +2 -0
  280. package/dist/realtime/renderers/lineRenderer.d.ts +2 -0
  281. package/dist/realtime/renderers/swarmRenderer.d.ts +2 -0
  282. package/dist/realtime/renderers/types.d.ts +9 -0
  283. package/dist/realtime/renderers/waterfallRenderer.d.ts +3 -0
  284. package/dist/realtime/types.d.ts +113 -0
  285. package/dist/realtime.js +1598 -0
  286. package/dist/realtime.js.map +1 -0
  287. package/dist/realtime.min.js +1 -0
  288. package/dist/realtime.module.js +1566 -0
  289. package/dist/realtime.module.js.map +1 -0
  290. package/dist/realtime.module.min.js +1 -0
  291. package/dist/semiotic-ai.d.ts +28 -0
  292. package/dist/semiotic-ai.js +18722 -0
  293. package/dist/semiotic-ai.js.map +1 -0
  294. package/dist/semiotic-ai.min.js +1 -0
  295. package/dist/semiotic-ai.module.js +18668 -0
  296. package/dist/semiotic-ai.module.js.map +1 -0
  297. package/dist/semiotic-ai.module.min.js +1 -0
  298. package/dist/semiotic-network.d.ts +19 -0
  299. package/dist/semiotic-ordinal.d.ts +18 -0
  300. package/dist/semiotic-realtime.d.ts +23 -0
  301. package/dist/semiotic-server.d.ts +1 -0
  302. package/dist/semiotic-xy.d.ts +24 -0
  303. package/dist/semiotic.d.ts +51 -0
  304. package/dist/semiotic.js +18723 -12996
  305. package/dist/semiotic.js.map +1 -0
  306. package/dist/semiotic.min.js +1 -0
  307. package/dist/semiotic.module.js +18666 -12965
  308. package/dist/semiotic.module.js.map +1 -0
  309. package/dist/semiotic.module.min.js +1 -0
  310. package/dist/server/renderToStaticSVG.d.ts +9 -0
  311. package/dist/server.js +8360 -0
  312. package/dist/server.js.map +1 -0
  313. package/dist/server.min.js +1 -0
  314. package/dist/server.module.js +8331 -0
  315. package/dist/server.module.js.map +1 -0
  316. package/dist/server.module.min.js +1 -0
  317. package/dist/store/TooltipStore.d.ts +2 -0
  318. package/dist/store/createStore.d.ts +1 -0
  319. package/dist/svg/SvgHelper.d.ts +33 -0
  320. package/dist/svg/areaDrawing.d.ts +21 -0
  321. package/dist/svg/boxplotRenderer.d.ts +15 -0
  322. package/dist/svg/bucketizedRenderer.d.ts +16 -0
  323. package/dist/svg/ckbinsRenderer.d.ts +20 -0
  324. package/dist/svg/ckmeans.d.ts +69 -0
  325. package/dist/svg/contourLayout.d.ts +6 -0
  326. package/dist/svg/contourRenderer.d.ts +12 -0
  327. package/dist/svg/edgeGenerators.d.ts +51 -0
  328. package/dist/svg/frameFunctions.d.ts +108 -0
  329. package/dist/svg/graphAlgorithms.d.ts +14 -0
  330. package/dist/svg/hexbinLayout.d.ts +7 -0
  331. package/dist/svg/lineDrawing.d.ts +99 -0
  332. package/dist/svg/networkDrawing.d.ts +16 -0
  333. package/dist/svg/nodeGenerators.d.ts +58 -0
  334. package/dist/svg/pieceDrawing.d.ts +12 -0
  335. package/dist/svg/pieceLayouts.d.ts +53 -0
  336. package/dist/svg/sankeyLinks.d.ts +3 -0
  337. package/dist/svg/summaryAxis.d.ts +6 -0
  338. package/dist/svg/summaryLayouts.d.ts +53 -0
  339. package/dist/svg/swarmLayout.d.ts +13 -0
  340. package/dist/types/annotationTypes.d.ts +135 -0
  341. package/dist/types/canvasTypes.d.ts +9 -0
  342. package/dist/types/generalTypes.d.ts +238 -0
  343. package/dist/types/interactionTypes.d.ts +72 -0
  344. package/dist/types/legendTypes.d.ts +20 -0
  345. package/dist/types/networkTypes.d.ts +175 -0
  346. package/dist/types/ordinalTypes.d.ts +112 -0
  347. package/dist/types/xyTypes.d.ts +115 -0
  348. package/dist/useBoundingRect.d.ts +2 -0
  349. package/dist/useDerivedStateFromProps.d.ts +1 -0
  350. package/dist/useLegacyUnmountCallback.d.ts +2 -0
  351. package/dist/visualizationLayerBehavior/axis.d.ts +36 -0
  352. package/dist/visualizationLayerBehavior/general.d.ts +80 -0
  353. package/dist/xy.js +7944 -0
  354. package/dist/xy.js.map +1 -0
  355. package/dist/xy.min.js +1 -0
  356. package/dist/xy.module.js +7903 -0
  357. package/dist/xy.module.js.map +1 -0
  358. package/dist/xy.module.min.js +1 -0
  359. package/package.json +116 -65
@@ -0,0 +1,305 @@
1
+ "use client";
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SankeyDiagram = SankeyDiagram;
41
+ const React = __importStar(require("react"));
42
+ const react_1 = require("react");
43
+ const NetworkFrame_1 = __importDefault(require("../../NetworkFrame"));
44
+ const colorUtils_1 = require("../shared/colorUtils");
45
+ const Tooltip_1 = require("../../Tooltip/Tooltip");
46
+ const hooks_1 = require("../shared/hooks");
47
+ const ChartError_1 = __importDefault(require("../shared/ChartError"));
48
+ const validateChartData_1 = require("../shared/validateChartData");
49
+ const sankeyLayout_1 = require("../../processing/layouts/sankeyLayout");
50
+ /**
51
+ * SankeyDiagram - Visualize flow and magnitude of movement between nodes
52
+ *
53
+ * A simplified wrapper around NetworkFrame for creating Sankey diagrams.
54
+ * Perfect for showing material, energy, cost, or any other quantity
55
+ * flowing through a system.
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * // Simple Sankey diagram
60
+ * <SankeyDiagram
61
+ * edges={[
62
+ * {source: 'A', target: 'B', value: 100},
63
+ * {source: 'A', target: 'C', value: 50},
64
+ * {source: 'B', target: 'D', value: 80}
65
+ * ]}
66
+ * />
67
+ * ```
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * // With custom styling and orientation
72
+ * <SankeyDiagram
73
+ * edges={edges}
74
+ * nodes={nodes}
75
+ * colorBy="category"
76
+ * edgeColorBy="gradient"
77
+ * orientation="vertical"
78
+ * nodeAlign="center"
79
+ * />
80
+ * ```
81
+ *
82
+ * @example
83
+ * ```tsx
84
+ * // With sorting and padding
85
+ * <SankeyDiagram
86
+ * edges={edges}
87
+ * nodeWidth={20}
88
+ * nodePaddingRatio={0.1}
89
+ * edgeSort={(a, b) => b.value - a.value}
90
+ * />
91
+ * ```
92
+ *
93
+ * @remarks
94
+ * This component wraps {@link NetworkFrame} with sensible defaults for Sankey diagrams.
95
+ * Sankey diagrams are used for directed acyclic graphs (DAGs).
96
+ *
97
+ * **Data Requirements:**
98
+ * - Edges must have source, target, and value properties
99
+ * - Graph should be acyclic (no cycles)
100
+ * - If cycles are detected, consider using a force-directed layout instead
101
+ *
102
+ * **Breadcrumb to advanced usage:**
103
+ * - Use the `frameProps` prop to pass any NetworkFrame prop
104
+ * - See NetworkFrame documentation: https://semiotic.nteract.io/guides/network-frame
105
+ * - All NetworkFrame props are available via `frameProps`
106
+ * - For circular Sankey diagrams, use the `customSankey` prop via frameProps
107
+ *
108
+ * @param props - SankeyDiagram configuration
109
+ * @returns Rendered Sankey diagram
110
+ */
111
+ function SankeyDiagram(props) {
112
+ const { nodes, edges, width = 800, height = 600, margin = { top: 50, bottom: 50, left: 50, right: 50 }, className, title, sourceAccessor = "source", targetAccessor = "target", valueAccessor = "value", nodeIdAccessor = "id", colorBy, colorScheme = "category10", edgeColorBy = "source", orientation = "horizontal", nodeAlign = "justify", nodePaddingRatio = 0.05, nodeWidth = 15, nodeLabel, showLabels = true, enableHover = true, edgeOpacity = 0.5, edgeSort, tooltip, frameProps = {} } = props;
113
+ // Safe data defaults (hooks must always run)
114
+ const safeEdges = edges || [];
115
+ // Infer nodes from edges if not provided
116
+ const inferredNodes = (0, react_1.useMemo)(() => {
117
+ if (nodes && nodes.length > 0)
118
+ return nodes;
119
+ const nodeSet = new Set();
120
+ safeEdges.forEach((edge) => {
121
+ const sourceId = typeof sourceAccessor === "function"
122
+ ? sourceAccessor(edge)
123
+ : edge[sourceAccessor];
124
+ const targetId = typeof targetAccessor === "function"
125
+ ? targetAccessor(edge)
126
+ : edge[targetAccessor];
127
+ nodeSet.add(sourceId);
128
+ nodeSet.add(targetId);
129
+ });
130
+ return Array.from(nodeSet).map((id) => ({ id }));
131
+ }, [nodes, safeEdges, sourceAccessor, targetAccessor]);
132
+ // Create color scale if colorBy is specified
133
+ const colorScale = (0, hooks_1.useColorScale)(inferredNodes, colorBy, colorScheme);
134
+ // Node style function
135
+ const nodeStyle = (0, react_1.useMemo)(() => {
136
+ return (d) => {
137
+ const baseStyle = {
138
+ stroke: "black",
139
+ strokeWidth: 1
140
+ };
141
+ // Apply color
142
+ if (colorBy) {
143
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
144
+ }
145
+ else {
146
+ // Default color
147
+ baseStyle.fill = "#4d430c";
148
+ }
149
+ return baseStyle;
150
+ };
151
+ }, [colorBy, colorScale]);
152
+ // Edge style function
153
+ const edgeStyle = (0, react_1.useMemo)(() => {
154
+ return (d) => {
155
+ const baseStyle = {
156
+ stroke: "black",
157
+ strokeWidth: 0.5,
158
+ fillOpacity: edgeOpacity,
159
+ strokeOpacity: 0.3
160
+ };
161
+ // Apply color based on edge coloring strategy
162
+ if (typeof edgeColorBy === "function") {
163
+ baseStyle.fill = edgeColorBy(d);
164
+ }
165
+ else if (edgeColorBy === "source") {
166
+ if (colorBy && d.source) {
167
+ baseStyle.fill = (0, colorUtils_1.getColor)(d.source, colorBy, colorScale);
168
+ }
169
+ else if (d.source) {
170
+ baseStyle.fill = nodeStyle(d.source).fill;
171
+ }
172
+ }
173
+ else if (edgeColorBy === "target") {
174
+ if (colorBy && d.target) {
175
+ baseStyle.fill = (0, colorUtils_1.getColor)(d.target, colorBy, colorScale);
176
+ }
177
+ else if (d.target) {
178
+ baseStyle.fill = nodeStyle(d.target).fill;
179
+ }
180
+ }
181
+ else if (edgeColorBy === "gradient") {
182
+ // For gradient, use a semi-transparent gray
183
+ // (actual gradients would require SVG gradient definitions)
184
+ baseStyle.fill = "#999";
185
+ baseStyle.fillOpacity = edgeOpacity * 0.7;
186
+ }
187
+ return baseStyle;
188
+ };
189
+ }, [edgeColorBy, colorBy, colorScale, nodeStyle, edgeOpacity]);
190
+ // Node label function
191
+ const nodeLabelFn = (0, react_1.useMemo)(() => {
192
+ if (!showLabels)
193
+ return undefined;
194
+ const accessor = nodeLabel || nodeIdAccessor;
195
+ return (d) => {
196
+ if (typeof accessor === "function")
197
+ return accessor(d);
198
+ return d[accessor];
199
+ };
200
+ }, [showLabels, nodeLabel, nodeIdAccessor]);
201
+ // Build network type configuration
202
+ const networkType = (0, react_1.useMemo)(() => {
203
+ const config = {
204
+ type: "sankey",
205
+ orient: nodeAlign,
206
+ direction: orientation === "horizontal" ? undefined : "down",
207
+ nodePaddingRatio,
208
+ nodeWidth
209
+ };
210
+ if (edgeSort) {
211
+ config.edgeSort = edgeSort;
212
+ }
213
+ return config;
214
+ }, [nodeAlign, orientation, nodePaddingRatio, nodeWidth, edgeSort]);
215
+ // Tooltip content renderer for Sankey nodes and edges
216
+ const renderTooltip = (0, react_1.useMemo)(() => {
217
+ return (d) => {
218
+ const isEdge = !!d.edge || (d.source && d.target && !d.degree && d.degree !== 0);
219
+ if (isEdge) {
220
+ const sourceId = d.source?.id ?? d.edge?.source?.id ?? "?";
221
+ const targetId = d.target?.id ?? d.edge?.target?.id ?? "?";
222
+ const val = d.value ?? d.weight;
223
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
224
+ React.createElement("div", { style: { fontWeight: "bold" } },
225
+ sourceId,
226
+ " \u2192 ",
227
+ targetId),
228
+ val != null && (React.createElement("div", { style: { marginTop: 4 } },
229
+ "Value: ",
230
+ typeof val === "number" ? val.toLocaleString() : String(val)))));
231
+ }
232
+ // Node tooltip
233
+ const accessor = nodeIdAccessor;
234
+ const nodeId = typeof accessor === "function"
235
+ ? accessor(d)
236
+ : d[accessor] ?? d.id;
237
+ const val = d.value;
238
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
239
+ React.createElement("div", { style: { fontWeight: "bold" } }, String(nodeId)),
240
+ val != null && (React.createElement("div", { style: { marginTop: 4 } },
241
+ "Total: ",
242
+ typeof val === "number" ? val.toLocaleString() : String(val))),
243
+ d.degree != null && (React.createElement("div", { style: { marginTop: 2 } },
244
+ "Degree: ",
245
+ d.degree,
246
+ d.inDegree != null ? ` (${d.inDegree} in, ${d.outDegree} out)` : ""))));
247
+ };
248
+ }, [nodeIdAccessor]);
249
+ // Use htmlAnnotationRules to handle frame-hover annotations directly.
250
+ // This is checked before tooltipContent in the annotation pipeline,
251
+ // ensuring the custom Sankey tooltip always renders.
252
+ const tooltipFn = typeof tooltip === "function" ? tooltip : renderTooltip;
253
+ const htmlAnnotationRules = (0, react_1.useMemo)(() => {
254
+ return ({ d, i, adjustedSize }) => {
255
+ if (d.type !== "frame-hover")
256
+ return null;
257
+ const flipped = adjustedSize && d.x > adjustedSize[0] / 2;
258
+ const tooltipStyle = {
259
+ position: "absolute",
260
+ top: `${d.y}px`
261
+ };
262
+ if (flipped) {
263
+ tooltipStyle.right = `${adjustedSize[0] - d.x}px`;
264
+ }
265
+ else {
266
+ tooltipStyle.left = `${d.x}px`;
267
+ }
268
+ return (React.createElement("div", { key: `network-annotation-label-${i}`, className: `annotation annotation-network-label ${d.className || ""}`, style: tooltipStyle }, tooltipFn(d)));
269
+ };
270
+ }, [tooltipFn]);
271
+ // Validate data (after all hooks)
272
+ const error = (0, validateChartData_1.validateNetworkData)({
273
+ componentName: "SankeyDiagram",
274
+ edges,
275
+ edgesRequired: true,
276
+ });
277
+ if (error)
278
+ return React.createElement(ChartError_1.default, { componentName: "SankeyDiagram", message: error, width: width, height: height });
279
+ // Build NetworkFrame props
280
+ const networkFrameProps = {
281
+ size: [width, height],
282
+ nodes: inferredNodes,
283
+ edges: safeEdges,
284
+ nodeStyle,
285
+ edgeStyle,
286
+ nodeIDAccessor: nodeIdAccessor,
287
+ sourceAccessor,
288
+ targetAccessor,
289
+ edgeWidthAccessor: valueAccessor,
290
+ networkType,
291
+ hoverAnnotation: enableHover,
292
+ margin,
293
+ nodeSizeAccessor: () => 5, // Small size for hover target
294
+ ...(nodeLabelFn && { nodeLabels: nodeLabelFn }),
295
+ ...(className && { className }),
296
+ ...(title && { title }),
297
+ // Use htmlAnnotationRules for direct tooltip rendering (checked before tooltipContent)
298
+ htmlAnnotationRules,
299
+ // Allow frameProps to override defaults
300
+ transition: true,
301
+ ...frameProps,
302
+ _layoutMap: { sankey: sankeyLayout_1.sankeyLayout, flowchart: sankeyLayout_1.sankeyLayout }
303
+ };
304
+ return React.createElement(NetworkFrame_1.default, { ...networkFrameProps });
305
+ }
@@ -0,0 +1,268 @@
1
+ "use client";
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.TreeDiagram = TreeDiagram;
41
+ const React = __importStar(require("react"));
42
+ const react_1 = require("react");
43
+ const NetworkFrame_1 = __importDefault(require("../../NetworkFrame"));
44
+ const colorUtils_1 = require("../shared/colorUtils");
45
+ const Tooltip_1 = require("../../Tooltip/Tooltip");
46
+ const hooks_1 = require("../shared/hooks");
47
+ const ChartError_1 = __importDefault(require("../shared/ChartError"));
48
+ const validateChartData_1 = require("../shared/validateChartData");
49
+ const hierarchyLayout_1 = require("../../processing/layouts/hierarchyLayout");
50
+ /**
51
+ * TreeDiagram - Visualize hierarchical data structures
52
+ *
53
+ * A simplified wrapper around NetworkFrame for creating tree diagrams.
54
+ * Perfect for organizational charts, file systems, taxonomies, and
55
+ * any hierarchical data.
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * // Simple tree
60
+ * <TreeDiagram
61
+ * data={{
62
+ * name: 'Root',
63
+ * children: [
64
+ * {name: 'A', children: [{name: 'A1'}, {name: 'A2'}]},
65
+ * {name: 'B'}
66
+ * ]
67
+ * }}
68
+ * />
69
+ * ```
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * // Horizontal cluster (dendrogram)
74
+ * <TreeDiagram
75
+ * data={hierarchicalData}
76
+ * layout="cluster"
77
+ * orientation="horizontal"
78
+ * colorByDepth={true}
79
+ * />
80
+ * ```
81
+ *
82
+ * @example
83
+ * ```tsx
84
+ * // Radial tree
85
+ * <TreeDiagram
86
+ * data={hierarchicalData}
87
+ * layout="tree"
88
+ * orientation="radial"
89
+ * colorBy="category"
90
+ * nodeSize={8}
91
+ * />
92
+ * ```
93
+ *
94
+ * @example
95
+ * ```tsx
96
+ * // Treemap with sizing
97
+ * <TreeDiagram
98
+ * data={hierarchicalData}
99
+ * layout="treemap"
100
+ * valueAccessor="size"
101
+ * colorBy="type"
102
+ * />
103
+ * ```
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * // Circle pack
108
+ * <TreeDiagram
109
+ * data={hierarchicalData}
110
+ * layout="circlepack"
111
+ * valueAccessor="value"
112
+ * colorByDepth={true}
113
+ * />
114
+ * ```
115
+ *
116
+ * @remarks
117
+ * This component wraps {@link NetworkFrame} with sensible defaults for tree diagrams.
118
+ * Different layouts are suited for different use cases:
119
+ * - **tree/cluster**: Good for organizational structures, phylogenetic trees
120
+ * - **treemap**: Good for showing proportional sizes (disk usage, budget allocation)
121
+ * - **partition**: Good for hierarchical proportions (icicle or sunburst charts)
122
+ * - **circlepack**: Good for nested hierarchies with size encoding
123
+ *
124
+ * **Data Requirements:**
125
+ * - Data must be hierarchical JSON with a children property (or custom accessor)
126
+ * - For treemap/circlepack, nodes should have a value property for sizing
127
+ *
128
+ * **Breadcrumb to advanced usage:**
129
+ * - Use the `frameProps` prop to pass any NetworkFrame prop
130
+ * - See NetworkFrame documentation: https://semiotic.nteract.io/guides/network-frame
131
+ * - All NetworkFrame props are available via `frameProps`
132
+ *
133
+ * @param props - TreeDiagram configuration
134
+ * @returns Rendered tree diagram
135
+ */
136
+ function TreeDiagram(props) {
137
+ const { data, width = 600, height = 600, margin = { top: 50, bottom: 50, left: 50, right: 50 }, className, title, layout = "tree", orientation = "vertical", childrenAccessor = "children", valueAccessor = "value", nodeIdAccessor = "name", colorBy, colorScheme = "category10", colorByDepth = false, edgeStyle = "curve", nodeLabel, showLabels = true, nodeSize = 5, enableHover = true, tooltip, frameProps = {} } = props;
138
+ // Flatten hierarchy to get all nodes for color scale
139
+ const allNodes = (0, react_1.useMemo)(() => {
140
+ if (!data)
141
+ return [];
142
+ const nodes = [];
143
+ const traverse = (node) => {
144
+ nodes.push(node);
145
+ const children = typeof childrenAccessor === "function"
146
+ ? childrenAccessor(node)
147
+ : node[childrenAccessor];
148
+ if (children && Array.isArray(children)) {
149
+ children.forEach(traverse);
150
+ }
151
+ };
152
+ traverse(data);
153
+ return nodes;
154
+ }, [data, childrenAccessor]);
155
+ // Create color scale if colorBy is specified
156
+ const colorScale = (0, react_1.useMemo)(() => {
157
+ if (colorByDepth) {
158
+ // Color by depth level
159
+ return (0, colorUtils_1.createColorScale)(allNodes.map((_, idx) => ({ depth: idx % 5 })), "depth", colorScheme);
160
+ }
161
+ if (!colorBy || typeof colorBy === "function") {
162
+ return undefined;
163
+ }
164
+ const scheme = Array.isArray(colorScheme) ? colorScheme : colorScheme;
165
+ return (0, colorUtils_1.createColorScale)(allNodes, colorBy, scheme);
166
+ }, [allNodes, colorBy, colorByDepth, colorScheme]);
167
+ // Node style function
168
+ const nodeStyleFn = (0, react_1.useMemo)(() => {
169
+ return (d) => {
170
+ const baseStyle = {
171
+ stroke: "black",
172
+ strokeWidth: 1
173
+ };
174
+ // Apply color
175
+ if (colorByDepth) {
176
+ baseStyle.fill = (0, colorUtils_1.getColor)({ depth: d.depth || 0 }, "depth", colorScale);
177
+ }
178
+ else if (colorBy) {
179
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
180
+ }
181
+ else {
182
+ // Default color
183
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
184
+ }
185
+ return baseStyle;
186
+ };
187
+ }, [colorBy, colorByDepth, colorScale]);
188
+ // Edge style function
189
+ const edgeStyleFn = (0, react_1.useMemo)(() => {
190
+ return () => ({
191
+ stroke: "#999",
192
+ strokeWidth: 1,
193
+ fill: "none"
194
+ });
195
+ }, []);
196
+ // Build network type configuration
197
+ const networkType = (0, react_1.useMemo)(() => {
198
+ const config = {
199
+ type: layout
200
+ };
201
+ // Set projection for tree/cluster layouts
202
+ if (layout === "tree" || layout === "cluster") {
203
+ config.projection = orientation;
204
+ }
205
+ // For partition layout, radial creates sunburst
206
+ if (layout === "partition" && orientation === "radial") {
207
+ config.projection = "radial";
208
+ }
209
+ return config;
210
+ }, [layout, orientation]);
211
+ // Hierarchy configuration
212
+ const hierarchyChildren = (0, react_1.useMemo)(() => {
213
+ if (typeof childrenAccessor === "function") {
214
+ return childrenAccessor;
215
+ }
216
+ return (d) => d[childrenAccessor];
217
+ }, [childrenAccessor]);
218
+ const hierarchySum = (0, react_1.useMemo)(() => {
219
+ // For layouts that need sizing (treemap, circlepack, partition)
220
+ if (layout === "treemap" ||
221
+ layout === "circlepack" ||
222
+ layout === "partition") {
223
+ if (typeof valueAccessor === "function") {
224
+ return valueAccessor;
225
+ }
226
+ return (d) => d[valueAccessor] || 1;
227
+ }
228
+ return undefined;
229
+ }, [layout, valueAccessor]);
230
+ // Validate data (after all hooks)
231
+ const error = (0, validateChartData_1.validateObjectData)({
232
+ componentName: "TreeDiagram",
233
+ data,
234
+ });
235
+ if (error)
236
+ return React.createElement(ChartError_1.default, { componentName: "TreeDiagram", message: error, width: width, height: height });
237
+ if (layout === "treemap") {
238
+ console.info("TreeDiagram: Consider using the standalone <Treemap> component for treemap visualizations.");
239
+ }
240
+ else if (layout === "circlepack") {
241
+ console.info("TreeDiagram: Consider using the standalone <CirclePack> component for circle packing visualizations.");
242
+ }
243
+ // Build NetworkFrame props
244
+ const networkFrameProps = {
245
+ size: [width, height],
246
+ edges: data, // For hierarchical data, pass to edges
247
+ nodeStyle: nodeStyleFn,
248
+ edgeStyle: edgeStyleFn,
249
+ nodeIDAccessor: nodeIdAccessor,
250
+ networkType,
251
+ hoverAnnotation: enableHover,
252
+ margin,
253
+ nodeSizeAccessor: () => nodeSize,
254
+ ...(hierarchyChildren && {
255
+ hierarchyChildren: hierarchyChildren
256
+ }),
257
+ ...(hierarchySum && { hierarchySum: hierarchySum }),
258
+ ...(className && { className }),
259
+ ...(title && { title }),
260
+ // Add tooltip support
261
+ ...(tooltip && { tooltipContent: (0, Tooltip_1.normalizeTooltip)(tooltip) }),
262
+ // Allow frameProps to override defaults
263
+ transition: true,
264
+ ...frameProps,
265
+ _layoutMap: hierarchyLayout_1.hierarchyLayouts
266
+ };
267
+ return React.createElement(NetworkFrame_1.default, { ...networkFrameProps });
268
+ }