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,177 @@
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.Treemap = Treemap;
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
+ * Treemap - Visualize hierarchical data as nested rectangles.
52
+ *
53
+ * A simplified wrapper around NetworkFrame with treemap layout.
54
+ * Each rectangle's area is proportional to its value.
55
+ *
56
+ * @example
57
+ * ```tsx
58
+ * <Treemap
59
+ * data={{
60
+ * name: 'root',
61
+ * children: [
62
+ * {name: 'A', value: 100},
63
+ * {name: 'B', value: 200},
64
+ * {name: 'C', value: 150}
65
+ * ]
66
+ * }}
67
+ * colorBy="name"
68
+ * />
69
+ * ```
70
+ */
71
+ function Treemap(props) {
72
+ const { data, width = 600, height = 600, margin = { top: 10, bottom: 10, left: 10, right: 10 }, className, title, childrenAccessor = "children", valueAccessor = "value", nodeIdAccessor = "name", colorBy, colorScheme = "category10", colorByDepth = false, showLabels = true, nodeLabel, enableHover = true, tooltip, frameProps = {} } = props;
73
+ // Flatten hierarchy to get all nodes for color scale
74
+ const allNodes = (0, react_1.useMemo)(() => {
75
+ if (!data)
76
+ return [];
77
+ const nodes = [];
78
+ const traverse = (node) => {
79
+ nodes.push(node);
80
+ const children = typeof childrenAccessor === "function"
81
+ ? childrenAccessor(node)
82
+ : node[childrenAccessor];
83
+ if (children && Array.isArray(children)) {
84
+ children.forEach(traverse);
85
+ }
86
+ };
87
+ traverse(data);
88
+ return nodes;
89
+ }, [data, childrenAccessor]);
90
+ // Create color scale
91
+ const colorScale = (0, react_1.useMemo)(() => {
92
+ if (colorByDepth) {
93
+ return (0, colorUtils_1.createColorScale)(allNodes.map((_, idx) => ({ depth: idx % 5 })), "depth", colorScheme);
94
+ }
95
+ if (!colorBy || typeof colorBy === "function") {
96
+ return undefined;
97
+ }
98
+ return (0, colorUtils_1.createColorScale)(allNodes, colorBy, colorScheme);
99
+ }, [allNodes, colorBy, colorByDepth, colorScheme]);
100
+ // Node style function
101
+ const nodeStyleFn = (0, react_1.useMemo)(() => {
102
+ return (d) => {
103
+ const baseStyle = {
104
+ stroke: "currentColor",
105
+ strokeWidth: 1,
106
+ strokeOpacity: 0.3
107
+ };
108
+ if (colorByDepth) {
109
+ baseStyle.fill = (0, colorUtils_1.getColor)({ depth: d.depth || 0 }, "depth", colorScale);
110
+ }
111
+ else if (colorBy) {
112
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
113
+ }
114
+ else {
115
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
116
+ }
117
+ return baseStyle;
118
+ };
119
+ }, [colorBy, colorByDepth, colorScale]);
120
+ // Hierarchy configuration
121
+ const hierarchyChildren = (0, react_1.useMemo)(() => {
122
+ if (typeof childrenAccessor === "function") {
123
+ return childrenAccessor;
124
+ }
125
+ return (d) => d[childrenAccessor];
126
+ }, [childrenAccessor]);
127
+ const hierarchySum = (0, react_1.useMemo)(() => {
128
+ if (typeof valueAccessor === "function") {
129
+ return valueAccessor;
130
+ }
131
+ return (d) => d[valueAccessor] || 1;
132
+ }, [valueAccessor]);
133
+ // Node label function
134
+ const nodeLabelFn = (0, react_1.useMemo)(() => {
135
+ if (!showLabels)
136
+ return undefined;
137
+ if (nodeLabel) {
138
+ if (typeof nodeLabel === "function")
139
+ return nodeLabel;
140
+ return (d) => d[nodeLabel];
141
+ }
142
+ // Default: use nodeIdAccessor
143
+ if (typeof nodeIdAccessor === "function")
144
+ return nodeIdAccessor;
145
+ return (d) => d[nodeIdAccessor];
146
+ }, [showLabels, nodeLabel, nodeIdAccessor]);
147
+ // Validate data (after all hooks)
148
+ const error = (0, validateChartData_1.validateObjectData)({
149
+ componentName: "Treemap",
150
+ data,
151
+ });
152
+ if (error)
153
+ return React.createElement(ChartError_1.default, { componentName: "Treemap", message: error, width: width, height: height });
154
+ // Build NetworkFrame props
155
+ const networkFrameProps = {
156
+ size: [width, height],
157
+ edges: data,
158
+ nodeStyle: nodeStyleFn,
159
+ edgeStyle: () => ({ fill: "none", stroke: "none" }),
160
+ nodeIDAccessor: nodeIdAccessor,
161
+ networkType: { type: "treemap" },
162
+ hoverAnnotation: enableHover,
163
+ margin,
164
+ ...(hierarchyChildren && {
165
+ hierarchyChildren: hierarchyChildren
166
+ }),
167
+ ...(hierarchySum && { hierarchySum: hierarchySum }),
168
+ ...(nodeLabelFn && { nodeLabels: nodeLabelFn }),
169
+ ...(className && { className }),
170
+ ...(title && { title }),
171
+ ...(tooltip && { tooltipContent: (0, Tooltip_1.normalizeTooltip)(tooltip) }),
172
+ transition: true,
173
+ ...frameProps,
174
+ _layoutMap: { treemap: hierarchyLayout_1.hierarchyLayouts.treemap }
175
+ };
176
+ return React.createElement(NetworkFrame_1.default, { ...networkFrameProps });
177
+ }
@@ -0,0 +1,191 @@
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.BarChart = BarChart;
41
+ const React = __importStar(require("react"));
42
+ const react_1 = require("react");
43
+ const OrdinalFrame_1 = __importDefault(require("../../OrdinalFrame"));
44
+ const colorUtils_1 = require("../shared/colorUtils");
45
+ const hooks_1 = require("../shared/hooks");
46
+ const legendUtils_1 = require("../shared/legendUtils");
47
+ const Tooltip_1 = require("../../Tooltip/Tooltip");
48
+ const ChartError_1 = __importDefault(require("../shared/ChartError"));
49
+ const validateChartData_1 = require("../shared/validateChartData");
50
+ /**
51
+ * BarChart - Visualize categorical data with bars.
52
+ *
53
+ * A simplified wrapper around OrdinalFrame for creating bar charts.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <BarChart
58
+ * data={[
59
+ * {category: 'A', value: 10},
60
+ * {category: 'B', value: 20},
61
+ * {category: 'C', value: 15}
62
+ * ]}
63
+ * categoryLabel="Category"
64
+ * valueLabel="Value"
65
+ * />
66
+ * ```
67
+ */
68
+ function BarChart(props) {
69
+ const { data, width = 600, height = 400, margin: userMargin, className, title, categoryAccessor = "category", valueAccessor = "value", orientation = "vertical", categoryLabel, valueLabel, valueFormat, colorBy, colorScheme = "category10", sort = false, barPadding = 5, enableHover = true, showGrid = false, showLegend, tooltip, frameProps = {} } = props;
70
+ const safeData = data || [];
71
+ // Sort data if requested
72
+ const sortedData = (0, hooks_1.useSortedData)(safeData, sort, valueAccessor);
73
+ // Create color scale if colorBy is specified
74
+ const colorScale = (0, hooks_1.useColorScale)(safeData, colorBy, colorScheme);
75
+ // Piece style function
76
+ const pieceStyle = (0, react_1.useMemo)(() => {
77
+ return (d) => {
78
+ const baseStyle = {};
79
+ // Apply color
80
+ if (colorBy) {
81
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
82
+ }
83
+ else {
84
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
85
+ }
86
+ return baseStyle;
87
+ };
88
+ }, [colorBy, colorScale]);
89
+ // Build axes configuration
90
+ const axes = (0, react_1.useMemo)(() => {
91
+ const axesConfig = [];
92
+ if (orientation === "vertical") {
93
+ // Vertical bars: category on bottom, value on left
94
+ axesConfig.push({
95
+ orient: "left",
96
+ label: valueLabel,
97
+ tickFormat: valueFormat,
98
+ ...(showGrid && { tickLineGenerator: () => null })
99
+ });
100
+ if (categoryLabel) {
101
+ axesConfig.push({
102
+ orient: "bottom",
103
+ label: categoryLabel
104
+ });
105
+ }
106
+ }
107
+ else {
108
+ // Horizontal bars: category on left, value on bottom
109
+ if (categoryLabel) {
110
+ axesConfig.push({
111
+ orient: "left",
112
+ label: categoryLabel
113
+ });
114
+ }
115
+ axesConfig.push({
116
+ orient: "bottom",
117
+ label: valueLabel,
118
+ tickFormat: valueFormat,
119
+ ...(showGrid && { tickLineGenerator: () => null })
120
+ });
121
+ }
122
+ return axesConfig;
123
+ }, [orientation, categoryLabel, valueLabel, valueFormat, showGrid]);
124
+ // Determine if we should show legend
125
+ const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy;
126
+ // Build legend if needed
127
+ const legend = (0, react_1.useMemo)(() => {
128
+ if (!shouldShowLegend || !colorBy)
129
+ return undefined;
130
+ return (0, legendUtils_1.createLegend)({
131
+ data: sortedData,
132
+ colorBy,
133
+ colorScale,
134
+ getColor: colorUtils_1.getColor
135
+ });
136
+ }, [shouldShowLegend, colorBy, sortedData, colorScale]);
137
+ // Adjust margin for legend if present
138
+ const margin = (0, react_1.useMemo)(() => {
139
+ const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 };
140
+ const finalMargin = { ...defaultMargin, ...userMargin };
141
+ // If legend is present and right margin is too small, increase it
142
+ if (legend && finalMargin.right < 120) {
143
+ finalMargin.right = 120;
144
+ }
145
+ return finalMargin;
146
+ }, [userMargin, legend]);
147
+ // Default tooltip function for piece hover
148
+ const defaultTooltipContent = (0, react_1.useMemo)(() => {
149
+ return (d) => {
150
+ const cat = typeof categoryAccessor === "function" ? categoryAccessor(d) : d[categoryAccessor];
151
+ const val = typeof valueAccessor === "function" ? valueAccessor(d) : d[valueAccessor];
152
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
153
+ React.createElement("div", { style: { fontWeight: "bold" } }, String(cat)),
154
+ React.createElement("div", { style: { marginTop: "4px" } }, typeof val === "number" ? val.toLocaleString() : String(val))));
155
+ };
156
+ }, [categoryAccessor, valueAccessor]);
157
+ // Validate data (after all hooks)
158
+ const error = (0, validateChartData_1.validateArrayData)({
159
+ componentName: "BarChart",
160
+ data: safeData,
161
+ accessors: {
162
+ categoryAccessor,
163
+ valueAccessor,
164
+ },
165
+ });
166
+ if (error)
167
+ return React.createElement(ChartError_1.default, { componentName: "BarChart", message: error, width: width, height: height });
168
+ // Build OrdinalFrame props
169
+ const ordinalFrameProps = {
170
+ size: [width, height],
171
+ data: sortedData,
172
+ oAccessor: categoryAccessor,
173
+ rAccessor: valueAccessor,
174
+ type: "bar",
175
+ projection: orientation === "horizontal" ? "horizontal" : "vertical",
176
+ style: pieceStyle,
177
+ axes: axes,
178
+ hoverAnnotation: enableHover,
179
+ margin,
180
+ oPadding: barPadding,
181
+ ...(legend && { legend }),
182
+ ...(className && { className }),
183
+ ...(title && { title }),
184
+ // Add tooltip support
185
+ tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
186
+ // Allow frameProps to override defaults
187
+ transition: true,
188
+ ...frameProps
189
+ };
190
+ return React.createElement(OrdinalFrame_1.default, { ...ordinalFrameProps });
191
+ }
@@ -0,0 +1,235 @@
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.BoxPlot = BoxPlot;
41
+ const React = __importStar(require("react"));
42
+ const react_1 = require("react");
43
+ const OrdinalFrame_1 = __importDefault(require("../../OrdinalFrame"));
44
+ const colorUtils_1 = require("../shared/colorUtils");
45
+ const hooks_1 = require("../shared/hooks");
46
+ const legendUtils_1 = require("../shared/legendUtils");
47
+ const Tooltip_1 = require("../../Tooltip/Tooltip");
48
+ const ChartError_1 = __importDefault(require("../shared/ChartError"));
49
+ const validateChartData_1 = require("../shared/validateChartData");
50
+ /**
51
+ * BoxPlot - Visualize statistical distributions with box-and-whisker plots.
52
+ *
53
+ * A simplified wrapper around OrdinalFrame for creating box plots.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <BoxPlot
58
+ * data={[
59
+ * {category: 'Group A', value: 10},
60
+ * {category: 'Group A', value: 12},
61
+ * {category: 'Group A', value: 15},
62
+ * {category: 'Group A', value: 18},
63
+ * {category: 'Group B', value: 20},
64
+ * {category: 'Group B', value: 22}
65
+ * ]}
66
+ * categoryLabel="Group"
67
+ * valueLabel="Value"
68
+ * />
69
+ * ```
70
+ */
71
+ function BoxPlot(props) {
72
+ const { data, width = 600, height = 400, margin: userMargin, className, title, categoryAccessor = "category", valueAccessor = "value", orientation = "vertical", categoryLabel, valueLabel, valueFormat, colorBy, colorScheme = "category10", showOutliers = true, outlierRadius = 3, categoryPadding = 20, enableHover = true, showGrid = false, showLegend, tooltip, frameProps = {} } = props;
73
+ const safeData = data || [];
74
+ // Create color scale if colorBy is specified
75
+ const colorScale = (0, hooks_1.useColorScale)(safeData, colorBy, colorScheme);
76
+ // Summary style function for boxes
77
+ const summaryStyle = (0, react_1.useMemo)(() => {
78
+ return (d) => {
79
+ const color = colorBy ? (0, colorUtils_1.getColor)(d, colorBy, colorScale) : hooks_1.DEFAULT_COLOR;
80
+ return {
81
+ fill: color,
82
+ stroke: color,
83
+ fillOpacity: 0.8
84
+ };
85
+ };
86
+ }, [colorBy, colorScale]);
87
+ // Point style function for outliers
88
+ const pointStyle = (0, react_1.useMemo)(() => {
89
+ if (!showOutliers)
90
+ return undefined;
91
+ return (d) => {
92
+ const baseStyle = {
93
+ r: outlierRadius,
94
+ fillOpacity: 0.6
95
+ };
96
+ // Apply color (try to match box color)
97
+ if (colorBy) {
98
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
99
+ }
100
+ else {
101
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
102
+ }
103
+ return baseStyle;
104
+ };
105
+ }, [showOutliers, outlierRadius, colorBy, colorScale]);
106
+ // Build axes configuration
107
+ const axes = (0, react_1.useMemo)(() => {
108
+ const axesConfig = [];
109
+ if (orientation === "vertical") {
110
+ // Vertical: category on bottom, value on left
111
+ axesConfig.push({
112
+ orient: "left",
113
+ label: valueLabel,
114
+ tickFormat: valueFormat,
115
+ ...(showGrid && { tickLineGenerator: () => null })
116
+ });
117
+ if (categoryLabel) {
118
+ axesConfig.push({
119
+ orient: "bottom",
120
+ label: categoryLabel
121
+ });
122
+ }
123
+ }
124
+ else {
125
+ // Horizontal: category on left, value on bottom
126
+ if (categoryLabel) {
127
+ axesConfig.push({
128
+ orient: "left",
129
+ label: categoryLabel
130
+ });
131
+ }
132
+ axesConfig.push({
133
+ orient: "bottom",
134
+ label: valueLabel,
135
+ tickFormat: valueFormat,
136
+ ...(showGrid && { tickLineGenerator: () => null })
137
+ });
138
+ }
139
+ return axesConfig;
140
+ }, [orientation, categoryLabel, valueLabel, valueFormat, showGrid]);
141
+ // Determine if we should show legend
142
+ const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy;
143
+ // Build legend if needed
144
+ const legend = (0, react_1.useMemo)(() => {
145
+ if (!shouldShowLegend || !colorBy)
146
+ return undefined;
147
+ return (0, legendUtils_1.createLegend)({
148
+ data: safeData,
149
+ colorBy,
150
+ colorScale,
151
+ getColor: colorUtils_1.getColor
152
+ });
153
+ }, [shouldShowLegend, colorBy, safeData, colorScale]);
154
+ // Adjust margin for legend if present
155
+ const margin = (0, react_1.useMemo)(() => {
156
+ const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 };
157
+ const finalMargin = { ...defaultMargin, ...userMargin };
158
+ // If legend is present and right margin is too small, increase it
159
+ if (legend && finalMargin.right < 120) {
160
+ finalMargin.right = 120;
161
+ }
162
+ return finalMargin;
163
+ }, [userMargin, legend]);
164
+ // Default tooltip for summary hover (boxplot quartile points)
165
+ const defaultTooltipContent = (0, react_1.useMemo)(() => {
166
+ const getVal = (0, hooks_1.resolveAccessor)(valueAccessor);
167
+ return (d) => {
168
+ // d has: label, key, summaryPieceName, value, column, pieces
169
+ const pieces = d.pieces || [];
170
+ const values = pieces.map((p) => Number(getVal(p))).filter((v) => !isNaN(v)).sort((a, b) => a - b);
171
+ const n = values.length;
172
+ const fmt = (v) => typeof v === "number" ? v.toLocaleString() : String(v ?? "");
173
+ // Compute quartiles from the raw data
174
+ let stats = [];
175
+ if (n >= 2) {
176
+ const q = (p) => {
177
+ const i = p * (n - 1);
178
+ const lo = Math.floor(i);
179
+ const hi = Math.ceil(i);
180
+ return values[lo] + (values[hi] - values[lo]) * (i - lo);
181
+ };
182
+ stats = [
183
+ { label: "Max", value: fmt(values[n - 1]), active: d.summaryPieceName === "max" },
184
+ { label: "Third Quartile", value: fmt(q(0.75)), active: d.summaryPieceName === "q3area" },
185
+ { label: "Median", value: fmt(q(0.5)), active: d.summaryPieceName === "median" },
186
+ { label: "First Quartile", value: fmt(q(0.25)), active: d.summaryPieceName === "q1area" },
187
+ { label: "Min", value: fmt(values[0]), active: d.summaryPieceName === "min" },
188
+ ];
189
+ }
190
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
191
+ React.createElement("div", { style: { fontWeight: "bold", marginBottom: "4px" } }, String(d.key)),
192
+ stats.map(s => (React.createElement("div", { key: s.label, style: { display: "flex", justifyContent: "space-between", gap: "12px", fontWeight: s.active ? "bold" : "normal" } },
193
+ React.createElement("span", null, s.label),
194
+ React.createElement("span", null, s.value)))),
195
+ n > 0 && (React.createElement("div", { style: { marginTop: "4px", opacity: 0.6, fontSize: "0.9em" } },
196
+ "n=",
197
+ n))));
198
+ };
199
+ }, [valueAccessor]);
200
+ // Validate data (after all hooks)
201
+ const error = (0, validateChartData_1.validateArrayData)({
202
+ componentName: "BoxPlot",
203
+ data: safeData,
204
+ accessors: {
205
+ categoryAccessor,
206
+ valueAccessor,
207
+ },
208
+ });
209
+ if (error)
210
+ return React.createElement(ChartError_1.default, { componentName: "BoxPlot", message: error, width: width, height: height });
211
+ // Build OrdinalFrame props
212
+ const ordinalFrameProps = {
213
+ size: [width, height],
214
+ data: safeData,
215
+ oAccessor: categoryAccessor,
216
+ rAccessor: valueAccessor,
217
+ summaryType: { type: "boxplot", outliers: showOutliers },
218
+ summaryStyle,
219
+ projection: orientation === "horizontal" ? "horizontal" : "vertical",
220
+ axes: axes,
221
+ summaryHoverAnnotation: enableHover,
222
+ margin,
223
+ oPadding: categoryPadding,
224
+ ...(pointStyle && { pointStyle }),
225
+ ...(legend && { legend }),
226
+ ...(className && { className }),
227
+ ...(title && { title }),
228
+ // Add tooltip support
229
+ tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
230
+ // Allow frameProps to override defaults
231
+ transition: true,
232
+ ...frameProps
233
+ };
234
+ return React.createElement(OrdinalFrame_1.default, { ...ordinalFrameProps });
235
+ }