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,178 @@
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.DonutChart = DonutChart;
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
+ * DonutChart - Visualize proportions as slices of a ring.
52
+ *
53
+ * A simplified wrapper around OrdinalFrame with radial projection and
54
+ * an inner radius to create a donut shape.
55
+ *
56
+ * @example
57
+ * ```tsx
58
+ * <DonutChart
59
+ * data={[
60
+ * {category: 'A', value: 30},
61
+ * {category: 'B', value: 50},
62
+ * {category: 'C', value: 20}
63
+ * ]}
64
+ * innerRadius={80}
65
+ * centerContent={<span>Total: 100</span>}
66
+ * />
67
+ * ```
68
+ */
69
+ function DonutChart(props) {
70
+ const { data, width = 400, height = 400, margin: userMargin, className, title, categoryAccessor = "category", valueAccessor = "value", innerRadius = 60, centerContent, colorBy, colorScheme = "category10", startAngle = 0, slicePadding = 2, enableHover = true, showLegend = true, tooltip, frameProps = {} } = props;
71
+ const safeData = data || [];
72
+ // Default colorBy to categoryAccessor for donut charts
73
+ const actualColorBy = colorBy || categoryAccessor;
74
+ // Create color scale
75
+ const colorScale = (0, hooks_1.useColorScale)(safeData, actualColorBy, colorScheme);
76
+ // Piece style function
77
+ const pieceStyle = (0, react_1.useMemo)(() => {
78
+ return (d) => {
79
+ const baseStyle = {};
80
+ if (actualColorBy) {
81
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, actualColorBy, colorScale);
82
+ }
83
+ else {
84
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
85
+ }
86
+ return baseStyle;
87
+ };
88
+ }, [actualColorBy, colorScale]);
89
+ // Build legend if needed
90
+ const legend = (0, react_1.useMemo)(() => {
91
+ if (!showLegend)
92
+ return undefined;
93
+ return (0, legendUtils_1.createLegend)({
94
+ data: safeData,
95
+ colorBy: actualColorBy,
96
+ colorScale,
97
+ getColor: colorUtils_1.getColor
98
+ });
99
+ }, [showLegend, safeData, actualColorBy, colorScale]);
100
+ // Adjust margin for legend if present
101
+ const margin = (0, react_1.useMemo)(() => {
102
+ const defaultMargin = { top: 20, bottom: 20, left: 20, right: 20 };
103
+ const finalMargin = { ...defaultMargin, ...userMargin };
104
+ if (legend && finalMargin.right < 120) {
105
+ finalMargin.right = 120;
106
+ }
107
+ return finalMargin;
108
+ }, [userMargin, legend]);
109
+ // Build type config with innerRadius
110
+ const typeConfig = (0, react_1.useMemo)(() => {
111
+ const config = {
112
+ type: "bar",
113
+ innerRadius
114
+ };
115
+ if (startAngle) {
116
+ config.offsetAngle = startAngle;
117
+ }
118
+ return config;
119
+ }, [innerRadius, startAngle]);
120
+ // Center content rendered via foregroundGraphics
121
+ const foregroundGraphics = (0, react_1.useMemo)(() => {
122
+ if (!centerContent)
123
+ return undefined;
124
+ const cx = width / 2;
125
+ const cy = height / 2;
126
+ return (React.createElement("foreignObject", { x: cx - innerRadius, y: cy - innerRadius, width: innerRadius * 2, height: innerRadius * 2 },
127
+ React.createElement("div", { style: {
128
+ width: "100%",
129
+ height: "100%",
130
+ display: "flex",
131
+ alignItems: "center",
132
+ justifyContent: "center",
133
+ textAlign: "center"
134
+ } }, centerContent)));
135
+ }, [centerContent, width, height, innerRadius]);
136
+ // Default tooltip
137
+ const defaultTooltipContent = (0, react_1.useMemo)(() => {
138
+ return (d) => {
139
+ const cat = typeof categoryAccessor === "function" ? categoryAccessor(d) : d[categoryAccessor];
140
+ const val = typeof valueAccessor === "function" ? valueAccessor(d) : d[valueAccessor];
141
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
142
+ React.createElement("div", { style: { fontWeight: "bold" } }, String(cat)),
143
+ React.createElement("div", { style: { marginTop: "4px" } }, typeof val === "number" ? val.toLocaleString() : String(val))));
144
+ };
145
+ }, [categoryAccessor, valueAccessor]);
146
+ // Validate data (after all hooks)
147
+ const error = (0, validateChartData_1.validateArrayData)({
148
+ componentName: "DonutChart",
149
+ data: safeData,
150
+ accessors: {
151
+ categoryAccessor,
152
+ valueAccessor,
153
+ },
154
+ });
155
+ if (error)
156
+ return React.createElement(ChartError_1.default, { componentName: "DonutChart", message: error, width: width, height: height });
157
+ // Build OrdinalFrame props
158
+ const ordinalFrameProps = {
159
+ size: [width, height],
160
+ data: safeData,
161
+ oAccessor: categoryAccessor,
162
+ rAccessor: valueAccessor,
163
+ type: typeConfig,
164
+ projection: "radial",
165
+ style: pieceStyle,
166
+ hoverAnnotation: enableHover,
167
+ margin,
168
+ oPadding: slicePadding,
169
+ ...(legend && { legend }),
170
+ ...(foregroundGraphics && { foregroundGraphics }),
171
+ ...(className && { className }),
172
+ ...(title && { title }),
173
+ tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
174
+ transition: true,
175
+ ...frameProps
176
+ };
177
+ return React.createElement(OrdinalFrame_1.default, { ...ordinalFrameProps });
178
+ }
@@ -0,0 +1,194 @@
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.DotPlot = DotPlot;
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
+ * DotPlot - Visualize categorical data with Cleveland dot plots.
52
+ *
53
+ * A simplified wrapper around OrdinalFrame for creating dot plots.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <DotPlot
58
+ * data={[
59
+ * {category: 'Item A', value: 25},
60
+ * {category: 'Item B', value: 40},
61
+ * {category: 'Item C', value: 15}
62
+ * ]}
63
+ * categoryLabel="Items"
64
+ * valueLabel="Value"
65
+ * />
66
+ * ```
67
+ */
68
+ function DotPlot(props) {
69
+ const { data, width = 600, height = 400, margin: userMargin, className, title, categoryAccessor = "category", valueAccessor = "value", orientation = "horizontal", categoryLabel, valueLabel, valueFormat, colorBy, colorScheme = "category10", sort = true, dotRadius = 5, categoryPadding = 10, enableHover = true, showGrid = true, 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
+ r: dotRadius,
80
+ fillOpacity: 0.8
81
+ };
82
+ // Apply color
83
+ if (colorBy) {
84
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, colorBy, colorScale);
85
+ }
86
+ else {
87
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
88
+ }
89
+ return baseStyle;
90
+ };
91
+ }, [colorBy, colorScale, dotRadius]);
92
+ // Build axes configuration
93
+ const axes = (0, react_1.useMemo)(() => {
94
+ const axesConfig = [];
95
+ if (orientation === "horizontal") {
96
+ // Horizontal: category on left, value on bottom
97
+ if (categoryLabel) {
98
+ axesConfig.push({
99
+ orient: "left",
100
+ label: categoryLabel
101
+ });
102
+ }
103
+ axesConfig.push({
104
+ orient: "bottom",
105
+ label: valueLabel,
106
+ tickFormat: valueFormat,
107
+ ...(showGrid && { tickLineGenerator: () => null })
108
+ });
109
+ }
110
+ else {
111
+ // Vertical: category on bottom, value on left
112
+ axesConfig.push({
113
+ orient: "left",
114
+ label: valueLabel,
115
+ tickFormat: valueFormat,
116
+ ...(showGrid && { tickLineGenerator: () => null })
117
+ });
118
+ if (categoryLabel) {
119
+ axesConfig.push({
120
+ orient: "bottom",
121
+ label: categoryLabel
122
+ });
123
+ }
124
+ }
125
+ return axesConfig;
126
+ }, [orientation, categoryLabel, valueLabel, valueFormat, showGrid]);
127
+ // Determine if we should show legend
128
+ const shouldShowLegend = showLegend !== undefined ? showLegend : !!colorBy;
129
+ // Build legend if needed
130
+ const legend = (0, react_1.useMemo)(() => {
131
+ if (!shouldShowLegend || !colorBy)
132
+ return undefined;
133
+ return (0, legendUtils_1.createLegend)({
134
+ data: sortedData,
135
+ colorBy,
136
+ colorScale,
137
+ getColor: colorUtils_1.getColor
138
+ });
139
+ }, [shouldShowLegend, colorBy, sortedData, colorScale]);
140
+ // Adjust margin for legend if present
141
+ const margin = (0, react_1.useMemo)(() => {
142
+ const defaultMargin = { top: 50, bottom: 60, left: 120, right: 40 };
143
+ const finalMargin = { ...defaultMargin, ...userMargin };
144
+ // If legend is present and right margin is too small, increase it
145
+ if (legend && finalMargin.right < 120) {
146
+ finalMargin.right = 120;
147
+ }
148
+ return finalMargin;
149
+ }, [userMargin, legend]);
150
+ // Default tooltip function for piece hover
151
+ const defaultTooltipContent = (0, react_1.useMemo)(() => {
152
+ return (d) => {
153
+ const cat = typeof categoryAccessor === "function" ? categoryAccessor(d) : d[categoryAccessor];
154
+ const val = typeof valueAccessor === "function" ? valueAccessor(d) : d[valueAccessor];
155
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
156
+ React.createElement("div", { style: { fontWeight: "bold" } }, String(cat)),
157
+ React.createElement("div", { style: { marginTop: "4px" } }, typeof val === "number" ? val.toLocaleString() : String(val))));
158
+ };
159
+ }, [categoryAccessor, valueAccessor]);
160
+ // Validate data (after all hooks)
161
+ const error = (0, validateChartData_1.validateArrayData)({
162
+ componentName: "DotPlot",
163
+ data: safeData,
164
+ accessors: {
165
+ categoryAccessor,
166
+ valueAccessor,
167
+ },
168
+ });
169
+ if (error)
170
+ return React.createElement(ChartError_1.default, { componentName: "DotPlot", message: error, width: width, height: height });
171
+ // Build OrdinalFrame props
172
+ const ordinalFrameProps = {
173
+ size: [width, height],
174
+ data: sortedData,
175
+ oAccessor: categoryAccessor,
176
+ rAccessor: valueAccessor,
177
+ type: "point",
178
+ projection: orientation === "horizontal" ? "horizontal" : "vertical",
179
+ style: pieceStyle,
180
+ axes: axes,
181
+ pieceHoverAnnotation: enableHover,
182
+ margin,
183
+ oPadding: categoryPadding,
184
+ ...(legend && { legend }),
185
+ ...(className && { className }),
186
+ ...(title && { title }),
187
+ // Add tooltip support
188
+ tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
189
+ // Allow frameProps to override defaults
190
+ transition: true,
191
+ ...frameProps
192
+ };
193
+ return React.createElement(OrdinalFrame_1.default, { ...ordinalFrameProps });
194
+ }
@@ -0,0 +1,194 @@
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.GroupedBarChart = GroupedBarChart;
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
+ * GroupedBarChart - Visualize comparisons across categories with side-by-side bars.
52
+ *
53
+ * A simplified wrapper around OrdinalFrame using clusterbar type.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <GroupedBarChart
58
+ * data={[
59
+ * {category: 'Q1', product: 'A', value: 100},
60
+ * {category: 'Q1', product: 'B', value: 150},
61
+ * {category: 'Q2', product: 'A', value: 120},
62
+ * {category: 'Q2', product: 'B', value: 180}
63
+ * ]}
64
+ * groupBy="product"
65
+ * categoryLabel="Quarter"
66
+ * valueLabel="Sales"
67
+ * />
68
+ * ```
69
+ */
70
+ function GroupedBarChart(props) {
71
+ const { data, width = 600, height = 400, margin: userMargin, className, title, categoryAccessor = "category", groupBy, valueAccessor = "value", orientation = "vertical", categoryLabel, valueLabel, valueFormat, colorBy, colorScheme = "category10", barPadding = 5, enableHover = true, showGrid = false, showLegend = true, tooltip, frameProps = {} } = props;
72
+ const safeData = data || [];
73
+ // Default colorBy to groupBy for grouped bar charts
74
+ const actualColorBy = colorBy || groupBy;
75
+ // Create color scale
76
+ const colorScale = (0, hooks_1.useColorScale)(safeData, actualColorBy, colorScheme);
77
+ // Piece style function
78
+ const pieceStyle = (0, react_1.useMemo)(() => {
79
+ return (d) => {
80
+ const baseStyle = {};
81
+ if (actualColorBy) {
82
+ baseStyle.fill = (0, colorUtils_1.getColor)(d, actualColorBy, colorScale);
83
+ }
84
+ else {
85
+ baseStyle.fill = hooks_1.DEFAULT_COLOR;
86
+ }
87
+ return baseStyle;
88
+ };
89
+ }, [actualColorBy, colorScale]);
90
+ // Build axes configuration
91
+ const axes = (0, react_1.useMemo)(() => {
92
+ const axesConfig = [];
93
+ if (orientation === "vertical") {
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
+ if (categoryLabel) {
109
+ axesConfig.push({
110
+ orient: "left",
111
+ label: categoryLabel
112
+ });
113
+ }
114
+ axesConfig.push({
115
+ orient: "bottom",
116
+ label: valueLabel,
117
+ tickFormat: valueFormat,
118
+ ...(showGrid && { tickLineGenerator: () => null })
119
+ });
120
+ }
121
+ return axesConfig;
122
+ }, [orientation, categoryLabel, valueLabel, valueFormat, showGrid]);
123
+ // Build legend if needed
124
+ const legend = (0, react_1.useMemo)(() => {
125
+ if (!showLegend)
126
+ return undefined;
127
+ return (0, legendUtils_1.createLegend)({
128
+ data: safeData,
129
+ colorBy: actualColorBy,
130
+ colorScale,
131
+ getColor: colorUtils_1.getColor
132
+ });
133
+ }, [showLegend, safeData, actualColorBy, colorScale]);
134
+ // Adjust margin for legend if present
135
+ const margin = (0, react_1.useMemo)(() => {
136
+ const defaultMargin = { top: 50, bottom: 60, left: 70, right: 40 };
137
+ const finalMargin = { ...defaultMargin, ...userMargin };
138
+ if (legend && finalMargin.right < 120) {
139
+ finalMargin.right = 120;
140
+ }
141
+ return finalMargin;
142
+ }, [userMargin, legend]);
143
+ // Default tooltip
144
+ const defaultTooltipContent = (0, react_1.useMemo)(() => {
145
+ const getGroup = (0, hooks_1.resolveAccessor)(groupBy);
146
+ const getCat = (0, hooks_1.resolveAccessor)(categoryAccessor);
147
+ const getVal = (0, hooks_1.resolveAccessor)(valueAccessor);
148
+ return (d) => {
149
+ const groupValue = String(getGroup(d));
150
+ const cat = String(getCat(d));
151
+ const val = Number(getVal(d));
152
+ return (React.createElement("div", { className: "semiotic-tooltip", style: Tooltip_1.defaultTooltipStyle },
153
+ React.createElement("div", { style: { fontWeight: "bold" } }, groupValue),
154
+ React.createElement("div", { style: { marginTop: "4px" } },
155
+ cat,
156
+ " \u00B7 ",
157
+ val.toLocaleString())));
158
+ };
159
+ }, [groupBy, categoryAccessor, valueAccessor]);
160
+ // Validate data (after all hooks)
161
+ const error = (0, validateChartData_1.validateArrayData)({
162
+ componentName: "GroupedBarChart",
163
+ data: safeData,
164
+ accessors: {
165
+ categoryAccessor,
166
+ valueAccessor,
167
+ },
168
+ requiredProps: { groupBy },
169
+ });
170
+ if (error)
171
+ return React.createElement(ChartError_1.default, { componentName: "GroupedBarChart", message: error, width: width, height: height });
172
+ // Build OrdinalFrame props
173
+ const ordinalFrameProps = {
174
+ size: [width, height],
175
+ data: safeData,
176
+ oAccessor: categoryAccessor,
177
+ rAccessor: valueAccessor,
178
+ type: "clusterbar",
179
+ projection: orientation === "horizontal" ? "horizontal" : "vertical",
180
+ style: pieceStyle,
181
+ axes: axes,
182
+ hoverAnnotation: enableHover,
183
+ margin,
184
+ oPadding: barPadding,
185
+ pieceIDAccessor: groupBy,
186
+ ...(legend && { legend }),
187
+ ...(className && { className }),
188
+ ...(title && { title }),
189
+ tooltipContent: (tooltip ? (0, Tooltip_1.normalizeTooltip)(tooltip) : defaultTooltipContent),
190
+ transition: true,
191
+ ...frameProps
192
+ };
193
+ return React.createElement(OrdinalFrame_1.default, { ...ordinalFrameProps });
194
+ }