@tetrascience-npm/tetrascience-react-ui 0.7.0 → 1.0.0

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 (1241) hide show
  1. package/README.md +58 -4
  2. package/dist/ai/attachments.cjs +2 -0
  3. package/dist/ai/attachments.cjs.map +1 -0
  4. package/dist/ai/attachments.js +224 -0
  5. package/dist/ai/attachments.js.map +1 -0
  6. package/dist/ai/chain-of-thought.cjs +2 -0
  7. package/dist/ai/chain-of-thought.cjs.map +1 -0
  8. package/dist/ai/chain-of-thought.js +145 -0
  9. package/dist/ai/chain-of-thought.js.map +1 -0
  10. package/dist/ai/confirmation.cjs +2 -0
  11. package/dist/ai/confirmation.cjs.map +1 -0
  12. package/dist/ai/confirmation.js +109 -0
  13. package/dist/ai/confirmation.js.map +1 -0
  14. package/dist/ai/context.cjs +2 -0
  15. package/dist/ai/context.cjs.map +1 -0
  16. package/dist/ai/context.js +267 -0
  17. package/dist/ai/context.js.map +1 -0
  18. package/dist/ai/conversation.cjs +4 -0
  19. package/dist/ai/conversation.cjs.map +1 -0
  20. package/dist/ai/conversation.js +108 -0
  21. package/dist/ai/conversation.js.map +1 -0
  22. package/dist/ai/inline-citation.cjs +2 -0
  23. package/dist/ai/inline-citation.cjs.map +1 -0
  24. package/dist/ai/inline-citation.js +182 -0
  25. package/dist/ai/inline-citation.js.map +1 -0
  26. package/dist/ai/message.cjs +2 -0
  27. package/dist/ai/message.cjs.map +1 -0
  28. package/dist/ai/message.js +237 -0
  29. package/dist/ai/message.js.map +1 -0
  30. package/dist/ai/model-selector.cjs +2 -0
  31. package/dist/ai/model-selector.cjs.map +1 -0
  32. package/dist/ai/model-selector.js +77 -0
  33. package/dist/ai/model-selector.js.map +1 -0
  34. package/dist/ai/prompt-input.cjs +2 -0
  35. package/dist/ai/prompt-input.cjs.map +1 -0
  36. package/dist/ai/prompt-input.js +776 -0
  37. package/dist/ai/prompt-input.js.map +1 -0
  38. package/dist/ai/queue.cjs +2 -0
  39. package/dist/ai/queue.cjs.map +1 -0
  40. package/dist/ai/queue.js +209 -0
  41. package/dist/ai/queue.js.map +1 -0
  42. package/dist/ai/reasoning.cjs +2 -0
  43. package/dist/ai/reasoning.cjs.map +1 -0
  44. package/dist/ai/reasoning.js +129 -0
  45. package/dist/ai/reasoning.js.map +1 -0
  46. package/dist/ai/shimmer.cjs +2 -0
  47. package/dist/ai/shimmer.cjs.map +1 -0
  48. package/dist/ai/shimmer.js +49 -0
  49. package/dist/ai/shimmer.js.map +1 -0
  50. package/dist/ai/sources.cjs +2 -0
  51. package/dist/ai/sources.cjs.map +1 -0
  52. package/dist/ai/sources.js +54 -0
  53. package/dist/ai/sources.js.map +1 -0
  54. package/dist/ai/speech-input.cjs +2 -0
  55. package/dist/ai/speech-input.cjs.map +1 -0
  56. package/dist/ai/speech-input.js +123 -0
  57. package/dist/ai/speech-input.js.map +1 -0
  58. package/dist/ai/stream-status.cjs +2 -0
  59. package/dist/ai/stream-status.cjs.map +1 -0
  60. package/dist/ai/stream-status.js +108 -0
  61. package/dist/ai/stream-status.js.map +1 -0
  62. package/dist/ai/suggestion.cjs +2 -0
  63. package/dist/ai/suggestion.cjs.map +1 -0
  64. package/dist/ai/suggestion.js +38 -0
  65. package/dist/ai/suggestion.js.map +1 -0
  66. package/dist/ai/task.cjs +2 -0
  67. package/dist/ai/task.cjs.map +1 -0
  68. package/dist/ai/task.js +101 -0
  69. package/dist/ai/task.js.map +1 -0
  70. package/dist/ai/tool.cjs +2 -0
  71. package/dist/ai/tool.cjs.map +1 -0
  72. package/dist/ai/tool.js +139 -0
  73. package/dist/ai/tool.js.map +1 -0
  74. package/dist/charts/AreaPlot.cjs +2 -0
  75. package/dist/charts/AreaPlot.cjs.map +1 -0
  76. package/dist/charts/AreaPlot.js +5 -0
  77. package/dist/charts/AreaPlot.js.map +1 -0
  78. package/dist/charts/BarChart.cjs +2 -0
  79. package/dist/charts/BarChart.cjs.map +1 -0
  80. package/dist/charts/BarChart.js +5 -0
  81. package/dist/charts/BarChart.js.map +1 -0
  82. package/dist/charts/BoxPlot.cjs +2 -0
  83. package/dist/charts/BoxPlot.cjs.map +1 -0
  84. package/dist/charts/BoxPlot.js +5 -0
  85. package/dist/charts/BoxPlot.js.map +1 -0
  86. package/dist/charts/ChartTooltip.cjs +2 -0
  87. package/dist/charts/ChartTooltip.cjs.map +1 -0
  88. package/dist/charts/ChartTooltip.js +8 -0
  89. package/dist/charts/ChartTooltip.js.map +1 -0
  90. package/dist/charts/Chromatogram.cjs +2 -0
  91. package/dist/charts/Chromatogram.cjs.map +1 -0
  92. package/dist/charts/Chromatogram.js +5 -0
  93. package/dist/charts/Chromatogram.js.map +1 -0
  94. package/dist/charts/Electropherogram.cjs +2 -0
  95. package/dist/charts/Electropherogram.cjs.map +1 -0
  96. package/dist/charts/Electropherogram.js +5 -0
  97. package/dist/charts/Electropherogram.js.map +1 -0
  98. package/dist/charts/Histogram.cjs +2 -0
  99. package/dist/charts/Histogram.cjs.map +1 -0
  100. package/dist/charts/Histogram.js +5 -0
  101. package/dist/charts/Histogram.js.map +1 -0
  102. package/dist/charts/LinePlot.cjs +2 -0
  103. package/dist/charts/LinePlot.cjs.map +1 -0
  104. package/dist/charts/LinePlot.js +5 -0
  105. package/dist/charts/LinePlot.js.map +1 -0
  106. package/dist/charts/PieChart.cjs +2 -0
  107. package/dist/charts/PieChart.cjs.map +1 -0
  108. package/dist/charts/PieChart.js +5 -0
  109. package/dist/charts/PieChart.js.map +1 -0
  110. package/dist/charts/PlateMap.cjs +2 -0
  111. package/dist/charts/PlateMap.cjs.map +1 -0
  112. package/dist/charts/PlateMap.js +5 -0
  113. package/dist/charts/PlateMap.js.map +1 -0
  114. package/dist/charts/ScatterPlot.cjs +2 -0
  115. package/dist/charts/ScatterPlot.cjs.map +1 -0
  116. package/dist/charts/ScatterPlot.js +5 -0
  117. package/dist/charts/ScatterPlot.js.map +1 -0
  118. package/dist/charts/ScatterPlotInteractive.cjs +2 -0
  119. package/dist/charts/ScatterPlotInteractive.cjs.map +1 -0
  120. package/dist/charts/ScatterPlotInteractive.js +14 -0
  121. package/dist/charts/ScatterPlotInteractive.js.map +1 -0
  122. package/dist/charts/StackedChromatogram.cjs +2 -0
  123. package/dist/charts/StackedChromatogram.cjs.map +1 -0
  124. package/dist/charts/StackedChromatogram.js +7 -0
  125. package/dist/charts/StackedChromatogram.js.map +1 -0
  126. package/dist/components/ai/attachments.d.ts +54 -0
  127. package/dist/components/ai/chain-of-thought.d.ts +56 -0
  128. package/dist/components/ai/confirmation.d.ts +47 -0
  129. package/dist/components/ai/context.d.ts +40 -0
  130. package/dist/components/ai/conversation.d.ts +23 -0
  131. package/dist/components/ai/inline-citation.d.ts +38 -0
  132. package/dist/components/ai/message.d.ts +37 -0
  133. package/dist/components/ai/model-selector.d.ts +36 -0
  134. package/dist/components/ai/prompt-input.d.ts +158 -0
  135. package/dist/components/ai/queue.d.ts +72 -0
  136. package/dist/components/ai/reasoning.d.ts +26 -0
  137. package/dist/components/ai/shimmer.d.ts +17 -0
  138. package/dist/components/ai/sources.d.ts +12 -0
  139. package/dist/components/ai/speech-input.d.ts +54 -0
  140. package/dist/components/ai/stream-status.d.ts +66 -0
  141. package/dist/components/ai/streamdown-code-plugin.cjs +2 -0
  142. package/dist/components/ai/streamdown-code-plugin.cjs.map +1 -0
  143. package/dist/components/ai/streamdown-code-plugin.d.ts +2 -0
  144. package/dist/components/ai/streamdown-code-plugin.js +42 -0
  145. package/dist/components/ai/streamdown-code-plugin.js.map +1 -0
  146. package/dist/components/ai/streamdown-plugins.cjs +2 -0
  147. package/dist/components/ai/streamdown-plugins.cjs.map +1 -0
  148. package/dist/components/ai/streamdown-plugins.d.ts +2 -0
  149. package/dist/components/ai/streamdown-plugins.js +14 -0
  150. package/dist/components/ai/streamdown-plugins.js.map +1 -0
  151. package/dist/components/ai/suggestion.d.ts +9 -0
  152. package/dist/components/ai/task.d.ts +16 -0
  153. package/dist/components/ai/tool.d.ts +33 -0
  154. package/dist/components/ai/use-streamdown-plugins.cjs +2 -0
  155. package/dist/components/ai/use-streamdown-plugins.cjs.map +1 -0
  156. package/dist/components/ai/use-streamdown-plugins.d.ts +8 -0
  157. package/dist/components/ai/use-streamdown-plugins.js +25 -0
  158. package/dist/components/ai/use-streamdown-plugins.js.map +1 -0
  159. package/dist/components/charts/AreaPlot/AreaPlot.cjs +2 -0
  160. package/dist/components/charts/AreaPlot/AreaPlot.cjs.map +1 -0
  161. package/dist/components/charts/AreaPlot/AreaPlot.d.ts +39 -0
  162. package/dist/components/charts/AreaPlot/AreaPlot.js +270 -0
  163. package/dist/components/charts/AreaPlot/AreaPlot.js.map +1 -0
  164. package/dist/components/charts/AreaPlot/index.d.ts +2 -0
  165. package/dist/components/charts/BarChart/BarChart.cjs +2 -0
  166. package/dist/components/charts/BarChart/BarChart.cjs.map +1 -0
  167. package/dist/components/charts/BarChart/BarChart.d.ts +44 -0
  168. package/dist/components/charts/BarChart/BarChart.js +219 -0
  169. package/dist/components/charts/BarChart/BarChart.js.map +1 -0
  170. package/dist/components/charts/BarChart/index.d.ts +2 -0
  171. package/dist/components/charts/BoxPlot/BoxPlot.cjs +2 -0
  172. package/dist/components/charts/BoxPlot/BoxPlot.cjs.map +1 -0
  173. package/dist/components/charts/BoxPlot/BoxPlot.d.ts +33 -0
  174. package/dist/components/charts/BoxPlot/BoxPlot.js +208 -0
  175. package/dist/components/charts/BoxPlot/BoxPlot.js.map +1 -0
  176. package/dist/components/charts/BoxPlot/index.d.ts +2 -0
  177. package/dist/components/charts/ChartTooltip/ChartTooltip.cjs +1 -1
  178. package/dist/components/charts/ChartTooltip/ChartTooltip.cjs.map +1 -1
  179. package/dist/components/charts/ChartTooltip/ChartTooltip.d.ts +71 -0
  180. package/dist/components/charts/ChartTooltip/ChartTooltip.js +22 -22
  181. package/dist/components/charts/ChartTooltip/ChartTooltip.js.map +1 -1
  182. package/dist/components/charts/ChartTooltip/index.d.ts +2 -0
  183. package/dist/components/charts/ChartTooltip/lines.d.ts +54 -0
  184. package/dist/components/charts/Chromatogram/Chromatogram.cjs +1 -1
  185. package/dist/components/charts/Chromatogram/Chromatogram.cjs.map +1 -1
  186. package/dist/components/charts/Chromatogram/Chromatogram.d.ts +5 -0
  187. package/dist/components/charts/Chromatogram/Chromatogram.js +232 -170
  188. package/dist/components/charts/Chromatogram/Chromatogram.js.map +1 -1
  189. package/dist/components/charts/Chromatogram/annotations.cjs +2 -0
  190. package/dist/components/charts/Chromatogram/annotations.cjs.map +1 -0
  191. package/dist/components/charts/Chromatogram/annotations.d.ts +50 -0
  192. package/dist/components/charts/Chromatogram/annotations.js +137 -0
  193. package/dist/components/charts/Chromatogram/annotations.js.map +1 -0
  194. package/dist/components/charts/Chromatogram/boundaryMarkers.cjs +2 -0
  195. package/dist/components/charts/Chromatogram/boundaryMarkers.cjs.map +1 -0
  196. package/dist/components/charts/Chromatogram/boundaryMarkers.d.ts +14 -0
  197. package/dist/components/charts/Chromatogram/boundaryMarkers.js +34 -0
  198. package/dist/components/charts/Chromatogram/boundaryMarkers.js.map +1 -0
  199. package/dist/components/charts/Chromatogram/constants.cjs +2 -0
  200. package/dist/components/charts/Chromatogram/constants.cjs.map +1 -0
  201. package/dist/components/charts/Chromatogram/constants.d.ts +46 -0
  202. package/dist/components/charts/Chromatogram/constants.js +36 -0
  203. package/dist/components/charts/Chromatogram/constants.js.map +1 -0
  204. package/dist/components/charts/Chromatogram/dataProcessing.cjs +2 -0
  205. package/dist/components/charts/Chromatogram/dataProcessing.cjs.map +1 -0
  206. package/dist/components/charts/Chromatogram/dataProcessing.d.ts +49 -0
  207. package/dist/components/charts/Chromatogram/dataProcessing.js +90 -0
  208. package/dist/components/charts/Chromatogram/dataProcessing.js.map +1 -0
  209. package/dist/components/charts/Chromatogram/index.d.ts +2 -0
  210. package/dist/components/charts/Chromatogram/peakDetection.cjs.map +1 -0
  211. package/dist/components/charts/Chromatogram/peakDetection.d.ts +33 -0
  212. package/dist/components/charts/Chromatogram/peakDetection.js.map +1 -0
  213. package/dist/components/charts/Chromatogram/plotBuilder.cjs +2 -0
  214. package/dist/components/charts/Chromatogram/plotBuilder.cjs.map +1 -0
  215. package/dist/components/charts/Chromatogram/plotBuilder.d.ts +58 -0
  216. package/dist/components/charts/Chromatogram/plotBuilder.js +216 -0
  217. package/dist/components/charts/Chromatogram/plotBuilder.js.map +1 -0
  218. package/dist/components/charts/Chromatogram/regionOverlays.cjs +2 -0
  219. package/dist/components/charts/Chromatogram/regionOverlays.cjs.map +1 -0
  220. package/dist/components/charts/Chromatogram/regionOverlays.d.ts +9 -0
  221. package/dist/components/charts/Chromatogram/regionOverlays.js +26 -0
  222. package/dist/components/charts/Chromatogram/regionOverlays.js.map +1 -0
  223. package/dist/components/charts/Chromatogram/types.d.ts +258 -0
  224. package/dist/components/charts/Electropherogram/Electropherogram.cjs +2 -0
  225. package/dist/components/charts/Electropherogram/Electropherogram.cjs.map +1 -0
  226. package/dist/components/charts/Electropherogram/Electropherogram.d.ts +22 -0
  227. package/dist/components/charts/Electropherogram/Electropherogram.js +180 -0
  228. package/dist/components/charts/Electropherogram/Electropherogram.js.map +1 -0
  229. package/dist/components/charts/Electropherogram/index.d.ts +2 -0
  230. package/dist/components/charts/Histogram/Histogram.cjs +1 -1
  231. package/dist/components/charts/Histogram/Histogram.cjs.map +1 -1
  232. package/dist/components/charts/Histogram/Histogram.d.ts +36 -0
  233. package/dist/components/charts/Histogram/Histogram.js +107 -108
  234. package/dist/components/charts/Histogram/Histogram.js.map +1 -1
  235. package/dist/components/charts/Histogram/index.d.ts +2 -0
  236. package/dist/components/charts/LinePlot/LinePlot.cjs +2 -0
  237. package/dist/components/charts/LinePlot/LinePlot.cjs.map +1 -0
  238. package/dist/components/charts/LinePlot/LinePlot.d.ts +45 -0
  239. package/dist/components/charts/LinePlot/LinePlot.js +224 -0
  240. package/dist/components/charts/LinePlot/LinePlot.js.map +1 -0
  241. package/dist/components/charts/LinePlot/index.d.ts +2 -0
  242. package/dist/components/charts/PieChart/PieChart.cjs +1 -1
  243. package/dist/components/charts/PieChart/PieChart.cjs.map +1 -1
  244. package/dist/components/charts/PieChart/PieChart.d.ts +20 -0
  245. package/dist/components/charts/PieChart/PieChart.js +62 -61
  246. package/dist/components/charts/PieChart/PieChart.js.map +1 -1
  247. package/dist/components/charts/PieChart/index.d.ts +2 -0
  248. package/dist/components/charts/PlateMap/PlateMap.cjs +1 -1
  249. package/dist/components/charts/PlateMap/PlateMap.cjs.map +1 -1
  250. package/dist/components/charts/PlateMap/PlateMap.d.ts +29 -0
  251. package/dist/components/charts/PlateMap/PlateMap.js +246 -242
  252. package/dist/components/charts/PlateMap/PlateMap.js.map +1 -1
  253. package/dist/components/charts/PlateMap/constants.d.ts +75 -0
  254. package/dist/components/charts/PlateMap/index.d.ts +2 -0
  255. package/dist/components/charts/PlateMap/types.d.ts +322 -0
  256. package/dist/components/charts/PlateMap/utils.d.ts +133 -0
  257. package/dist/components/charts/ScatterPlot/ScatterPlot.cjs +2 -0
  258. package/dist/components/charts/ScatterPlot/ScatterPlot.cjs.map +1 -0
  259. package/dist/components/charts/ScatterPlot/ScatterPlot.d.ts +43 -0
  260. package/dist/components/charts/ScatterPlot/ScatterPlot.js +252 -0
  261. package/dist/components/charts/ScatterPlot/ScatterPlot.js.map +1 -0
  262. package/dist/components/charts/ScatterPlot/index.d.ts +2 -0
  263. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.cjs +2 -0
  264. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.cjs.map +1 -0
  265. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.d.ts +25 -0
  266. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.js +215 -0
  267. package/dist/components/charts/ScatterPlotInteractive/ScatterPlotInteractive.js.map +1 -0
  268. package/dist/components/charts/ScatterPlotInteractive/constants.cjs +2 -0
  269. package/dist/components/charts/ScatterPlotInteractive/constants.cjs.map +1 -0
  270. package/dist/components/charts/ScatterPlotInteractive/constants.d.ts +50 -0
  271. package/dist/components/charts/ScatterPlotInteractive/constants.js +38 -0
  272. package/dist/components/charts/ScatterPlotInteractive/constants.js.map +1 -0
  273. package/dist/components/charts/ScatterPlotInteractive/index.d.ts +3 -0
  274. package/dist/components/charts/ScatterPlotInteractive/types.d.ts +226 -0
  275. package/dist/components/charts/ScatterPlotInteractive/utils.cjs +2 -0
  276. package/dist/components/charts/ScatterPlotInteractive/utils.cjs.map +1 -0
  277. package/dist/components/charts/ScatterPlotInteractive/utils.d.ts +72 -0
  278. package/dist/components/charts/ScatterPlotInteractive/utils.js +261 -0
  279. package/dist/components/charts/ScatterPlotInteractive/utils.js.map +1 -0
  280. package/dist/components/charts/StackedChromatogram/StackedChromatogram.cjs +2 -0
  281. package/dist/components/charts/StackedChromatogram/StackedChromatogram.cjs.map +1 -0
  282. package/dist/components/charts/StackedChromatogram/StackedChromatogram.d.ts +3 -0
  283. package/dist/components/charts/StackedChromatogram/StackedChromatogram.js +40 -0
  284. package/dist/components/charts/StackedChromatogram/StackedChromatogram.js.map +1 -0
  285. package/dist/components/charts/StackedChromatogram/index.d.ts +3 -0
  286. package/dist/components/charts/StackedChromatogram/transforms.cjs +2 -0
  287. package/dist/components/charts/StackedChromatogram/transforms.cjs.map +1 -0
  288. package/dist/components/charts/StackedChromatogram/transforms.d.ts +9 -0
  289. package/dist/components/charts/StackedChromatogram/transforms.js +31 -0
  290. package/dist/components/charts/StackedChromatogram/transforms.js.map +1 -0
  291. package/dist/components/charts/StackedChromatogram/types.d.ts +26 -0
  292. package/dist/components/charts/plotly-loader.cjs +2 -0
  293. package/dist/components/charts/plotly-loader.cjs.map +1 -0
  294. package/dist/components/charts/plotly-loader.d.ts +29 -0
  295. package/dist/components/charts/plotly-loader.js +22 -0
  296. package/dist/components/charts/plotly-loader.js.map +1 -0
  297. package/dist/components/composed/AssistantLayout/AssistantLayout.cjs +2 -0
  298. package/dist/components/composed/AssistantLayout/AssistantLayout.cjs.map +1 -0
  299. package/dist/components/composed/AssistantLayout/AssistantLayout.d.ts +63 -0
  300. package/dist/components/composed/AssistantLayout/AssistantLayout.js +142 -0
  301. package/dist/components/composed/AssistantLayout/AssistantLayout.js.map +1 -0
  302. package/dist/components/composed/AssistantLayout/dockLayout.cjs +2 -0
  303. package/dist/components/composed/AssistantLayout/dockLayout.cjs.map +1 -0
  304. package/dist/components/composed/AssistantLayout/dockLayout.d.ts +15 -0
  305. package/dist/components/composed/AssistantLayout/dockLayout.js +10 -0
  306. package/dist/components/composed/AssistantLayout/dockLayout.js.map +1 -0
  307. package/dist/components/composed/AssistantLayout/index.d.ts +3 -0
  308. package/dist/components/composed/Chat/Chat.cjs +1 -1
  309. package/dist/components/composed/Chat/Chat.cjs.map +1 -1
  310. package/dist/components/composed/Chat/Chat.d.ts +35 -0
  311. package/dist/components/composed/Chat/Chat.js +28 -28
  312. package/dist/components/composed/Chat/Chat.js.map +1 -1
  313. package/dist/components/composed/Chat/index.d.ts +2 -0
  314. package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs +1 -1
  315. package/dist/components/composed/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  316. package/dist/components/composed/ConfirmDialog/ConfirmDialog.d.ts +23 -0
  317. package/dist/components/composed/ConfirmDialog/ConfirmDialog.js +33 -29
  318. package/dist/components/composed/ConfirmDialog/ConfirmDialog.js.map +1 -1
  319. package/dist/components/composed/ConfirmDialog/index.d.ts +1 -0
  320. package/dist/components/composed/DataAppShell/CollapseButton.cjs +2 -0
  321. package/dist/components/composed/DataAppShell/CollapseButton.cjs.map +1 -0
  322. package/dist/components/composed/DataAppShell/CollapseButton.d.ts +23 -0
  323. package/dist/components/composed/DataAppShell/CollapseButton.js +42 -0
  324. package/dist/components/composed/DataAppShell/CollapseButton.js.map +1 -0
  325. package/dist/components/composed/DataAppShell/DataAppShell.cjs +1 -1
  326. package/dist/components/composed/DataAppShell/DataAppShell.cjs.map +1 -1
  327. package/dist/components/composed/DataAppShell/DataAppShell.d.ts +88 -0
  328. package/dist/components/composed/DataAppShell/DataAppShell.js +350 -328
  329. package/dist/components/composed/DataAppShell/DataAppShell.js.map +1 -1
  330. package/dist/components/composed/DataAppShell/PrimaryNav.cjs +2 -0
  331. package/dist/components/composed/DataAppShell/PrimaryNav.cjs.map +1 -0
  332. package/dist/components/composed/DataAppShell/PrimaryNav.d.ts +64 -0
  333. package/dist/components/composed/DataAppShell/PrimaryNav.js +268 -0
  334. package/dist/components/composed/DataAppShell/PrimaryNav.js.map +1 -0
  335. package/dist/components/composed/DataAppShell/RightPanel.cjs +2 -0
  336. package/dist/components/composed/DataAppShell/RightPanel.cjs.map +1 -0
  337. package/dist/components/composed/DataAppShell/RightPanel.d.ts +95 -0
  338. package/dist/components/composed/DataAppShell/RightPanel.js +282 -0
  339. package/dist/components/composed/DataAppShell/RightPanel.js.map +1 -0
  340. package/dist/components/composed/DataAppShell/SecondaryNav.cjs +2 -0
  341. package/dist/components/composed/DataAppShell/SecondaryNav.cjs.map +1 -0
  342. package/dist/components/composed/DataAppShell/SecondaryNav.d.ts +63 -0
  343. package/dist/components/composed/DataAppShell/SecondaryNav.js +364 -0
  344. package/dist/components/composed/DataAppShell/SecondaryNav.js.map +1 -0
  345. package/dist/components/composed/DataAppShell/ShellContext.cjs +2 -0
  346. package/dist/components/composed/DataAppShell/ShellContext.cjs.map +1 -0
  347. package/dist/components/composed/DataAppShell/ShellContext.d.ts +20 -0
  348. package/dist/components/composed/DataAppShell/ShellContext.js +23 -0
  349. package/dist/components/composed/DataAppShell/ShellContext.js.map +1 -0
  350. package/dist/components/composed/DataAppShell/index.d.ts +12 -0
  351. package/dist/components/composed/EmptyState/EmptyState.d.ts +12 -0
  352. package/dist/components/composed/EmptyState/index.d.ts +2 -0
  353. package/dist/components/composed/FormPatterns/FormSection.cjs +1 -1
  354. package/dist/components/composed/FormPatterns/FormSection.cjs.map +1 -1
  355. package/dist/components/composed/FormPatterns/FormSection.d.ts +7 -0
  356. package/dist/components/composed/FormPatterns/FormSection.js +2 -2
  357. package/dist/components/composed/FormPatterns/index.d.ts +1 -0
  358. package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs +2 -0
  359. package/dist/components/composed/MoleculeStructure/MoleculeStructure.cjs.map +1 -0
  360. package/dist/components/composed/MoleculeStructure/MoleculeStructure.d.ts +43 -0
  361. package/dist/components/composed/MoleculeStructure/MoleculeStructure.js +87 -0
  362. package/dist/components/composed/MoleculeStructure/MoleculeStructure.js.map +1 -0
  363. package/dist/components/composed/MoleculeStructure/index.d.ts +3 -0
  364. package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs +2 -0
  365. package/dist/components/composed/MoleculeStructure/rdkit-loader.cjs.map +1 -0
  366. package/dist/components/composed/MoleculeStructure/rdkit-loader.d.ts +104 -0
  367. package/dist/components/composed/MoleculeStructure/rdkit-loader.js +89 -0
  368. package/dist/components/composed/MoleculeStructure/rdkit-loader.js.map +1 -0
  369. package/dist/components/composed/MoleculeStructure/use-rdkit.cjs +2 -0
  370. package/dist/components/composed/MoleculeStructure/use-rdkit.cjs.map +1 -0
  371. package/dist/components/composed/MoleculeStructure/use-rdkit.d.ts +29 -0
  372. package/dist/components/composed/MoleculeStructure/use-rdkit.js +19 -0
  373. package/dist/components/composed/MoleculeStructure/use-rdkit.js.map +1 -0
  374. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs +1 -1
  375. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.cjs.map +1 -1
  376. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.d.ts +12 -0
  377. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js +21 -21
  378. package/dist/components/composed/PlateMapEditor/ManifestFilterPopover.js.map +1 -1
  379. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs +1 -1
  380. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.cjs.map +1 -1
  381. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.d.ts +22 -0
  382. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js +34 -34
  383. package/dist/components/composed/PlateMapEditor/PlateMapActionsMenu.js.map +1 -1
  384. package/dist/components/composed/PlateMapEditor/PlateMapEditor.cjs +1 -1
  385. package/dist/components/composed/PlateMapEditor/PlateMapEditor.cjs.map +1 -1
  386. package/dist/components/composed/PlateMapEditor/PlateMapEditor.d.ts +106 -0
  387. package/dist/components/composed/PlateMapEditor/PlateMapEditor.js +2 -2
  388. package/dist/components/composed/PlateMapEditor/PlateMapForm.cjs +1 -1
  389. package/dist/components/composed/PlateMapEditor/PlateMapForm.cjs.map +1 -1
  390. package/dist/components/composed/PlateMapEditor/PlateMapForm.d.ts +30 -0
  391. package/dist/components/composed/PlateMapEditor/PlateMapForm.js +1 -1
  392. package/dist/components/composed/PlateMapEditor/PlateMapGrid.cjs +1 -1
  393. package/dist/components/composed/PlateMapEditor/PlateMapGrid.cjs.map +1 -1
  394. package/dist/components/composed/PlateMapEditor/PlateMapGrid.d.ts +64 -0
  395. package/dist/components/composed/PlateMapEditor/PlateMapGrid.js +1 -1
  396. package/dist/components/composed/PlateMapEditor/PlateMapManifest.d.ts +29 -0
  397. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs +1 -1
  398. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.cjs.map +1 -1
  399. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.d.ts +19 -0
  400. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js +11 -11
  401. package/dist/components/composed/PlateMapEditor/PlateMapPlateSelector.js.map +1 -1
  402. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.cjs +1 -1
  403. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.cjs.map +1 -1
  404. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.d.ts +73 -0
  405. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.js +1 -1
  406. package/dist/components/composed/PlateMapEditor/PlatePaintGrid.js.map +1 -1
  407. package/dist/components/composed/PlateMapEditor/PlateZoomControl.cjs +1 -1
  408. package/dist/components/composed/PlateMapEditor/PlateZoomControl.cjs.map +1 -1
  409. package/dist/components/composed/PlateMapEditor/PlateZoomControl.d.ts +12 -0
  410. package/dist/components/composed/PlateMapEditor/PlateZoomControl.js +2 -2
  411. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.cjs +1 -1
  412. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.cjs.map +1 -1
  413. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.d.ts +13 -0
  414. package/dist/components/composed/PlateMapEditor/TemplateIOPanel.js +4 -4
  415. package/dist/components/composed/PlateMapEditor/WellLegend.cjs +1 -1
  416. package/dist/components/composed/PlateMapEditor/WellLegend.cjs.map +1 -1
  417. package/dist/components/composed/PlateMapEditor/WellLegend.d.ts +21 -0
  418. package/dist/components/composed/PlateMapEditor/WellLegend.js +24 -12
  419. package/dist/components/composed/PlateMapEditor/WellLegend.js.map +1 -1
  420. package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs +1 -1
  421. package/dist/components/composed/PlateMapEditor/WellManifestTable.cjs.map +1 -1
  422. package/dist/components/composed/PlateMapEditor/WellManifestTable.d.ts +46 -0
  423. package/dist/components/composed/PlateMapEditor/WellManifestTable.js +10 -10
  424. package/dist/components/composed/PlateMapEditor/WellManifestTable.js.map +1 -1
  425. package/dist/components/composed/PlateMapEditor/WellMetadataForm.cjs +1 -1
  426. package/dist/components/composed/PlateMapEditor/WellMetadataForm.cjs.map +1 -1
  427. package/dist/components/composed/PlateMapEditor/WellMetadataForm.d.ts +17 -0
  428. package/dist/components/composed/PlateMapEditor/WellMetadataForm.js +7 -7
  429. package/dist/components/composed/PlateMapEditor/autoFill.d.ts +26 -0
  430. package/dist/components/composed/PlateMapEditor/csvPlateTriage.d.ts +4 -0
  431. package/dist/components/composed/PlateMapEditor/helpers.d.ts +2 -0
  432. package/dist/components/composed/PlateMapEditor/index.d.ts +31 -0
  433. package/dist/components/composed/PlateMapEditor/types.d.ts +137 -0
  434. package/dist/components/composed/PlateMapEditor/wellGrid.d.ts +12 -0
  435. package/dist/components/composed/ProcessFlow/ProcessFlow.d.ts +32 -0
  436. package/dist/components/composed/ProcessFlow/ProcessFlow.utils.d.ts +86 -0
  437. package/dist/components/composed/ProcessFlow/index.d.ts +1 -0
  438. package/dist/components/composed/RichListItem/RichListItem.cjs +1 -1
  439. package/dist/components/composed/RichListItem/RichListItem.cjs.map +1 -1
  440. package/dist/components/composed/RichListItem/RichListItem.d.ts +22 -0
  441. package/dist/components/composed/RichListItem/RichListItem.js +2 -2
  442. package/dist/components/composed/RichListItem/index.d.ts +2 -0
  443. package/dist/components/composed/StatCard/StatCard.cjs +1 -1
  444. package/dist/components/composed/StatCard/StatCard.cjs.map +1 -1
  445. package/dist/components/composed/StatCard/StatCard.d.ts +11 -0
  446. package/dist/components/composed/StatCard/StatCard.js +1 -1
  447. package/dist/components/composed/StatCard/index.d.ts +1 -0
  448. package/dist/components/composed/TdpSearch/TdpSearch.cjs +1 -1
  449. package/dist/components/composed/TdpSearch/TdpSearch.cjs.map +1 -1
  450. package/dist/components/composed/TdpSearch/TdpSearch.d.ts +21 -0
  451. package/dist/components/composed/TdpSearch/TdpSearch.js +14 -13
  452. package/dist/components/composed/TdpSearch/TdpSearch.mocks.d.ts +5 -0
  453. package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs +1 -1
  454. package/dist/components/composed/TdpSearch/components/DefaultFilters.cjs.map +1 -1
  455. package/dist/components/composed/TdpSearch/components/DefaultFilters.d.ts +3 -0
  456. package/dist/components/composed/TdpSearch/components/DefaultFilters.js +4 -4
  457. package/dist/components/composed/TdpSearch/components/DefaultFilters.js.map +1 -1
  458. package/dist/components/composed/TdpSearch/components/DefaultResults.cjs +1 -1
  459. package/dist/components/composed/TdpSearch/components/DefaultResults.cjs.map +1 -1
  460. package/dist/components/composed/TdpSearch/components/DefaultResults.d.ts +3 -0
  461. package/dist/components/composed/TdpSearch/components/DefaultResults.js +2 -2
  462. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.cjs +1 -1
  463. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.cjs.map +1 -1
  464. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.d.ts +3 -0
  465. package/dist/components/composed/TdpSearch/components/DefaultSearchBar.js +2 -2
  466. package/dist/components/composed/TdpSearch/constants.d.ts +3 -0
  467. package/dist/components/composed/TdpSearch/hooks/useSearch.d.ts +2 -0
  468. package/dist/components/composed/TdpSearch/hooks/useTdpCredentials.d.ts +14 -0
  469. package/dist/components/composed/TdpSearch/index.d.ts +3 -0
  470. package/dist/components/composed/TdpSearch/types.d.ts +128 -0
  471. package/dist/components/composed/TdpSearch/utils.d.ts +3 -0
  472. package/dist/components/composed/TopBar/TopBar.cjs +2 -0
  473. package/dist/components/composed/TopBar/TopBar.cjs.map +1 -0
  474. package/dist/components/composed/TopBar/TopBar.d.ts +25 -0
  475. package/dist/components/composed/TopBar/TopBar.js +56 -0
  476. package/dist/components/composed/TopBar/TopBar.js.map +1 -0
  477. package/dist/components/composed/TopBar/index.d.ts +2 -0
  478. package/dist/components/composed/UserMenu/UserMenu.cjs +2 -0
  479. package/dist/components/composed/UserMenu/UserMenu.cjs.map +1 -0
  480. package/dist/components/composed/UserMenu/UserMenu.d.ts +53 -0
  481. package/dist/components/composed/UserMenu/UserMenu.js +99 -0
  482. package/dist/components/composed/UserMenu/UserMenu.js.map +1 -0
  483. package/dist/components/composed/UserMenu/index.d.ts +2 -0
  484. package/dist/components/composed/tdp-link.d.ts +110 -0
  485. package/dist/components/composed/tdp-url.d.ts +68 -0
  486. package/dist/components/ui/accordion.d.ts +7 -0
  487. package/dist/components/ui/alert-dialog.d.ts +18 -0
  488. package/dist/components/ui/alert.d.ts +10 -0
  489. package/dist/components/ui/aspect-ratio.d.ts +3 -0
  490. package/dist/components/ui/avatar.d.ts +11 -0
  491. package/dist/components/ui/badge.d.ts +9 -0
  492. package/dist/components/ui/banner.d.ts +19 -0
  493. package/dist/components/ui/breadcrumb.d.ts +11 -0
  494. package/dist/components/ui/button-group.d.ts +11 -0
  495. package/dist/components/ui/button.d.ts +10 -0
  496. package/dist/components/ui/calendar.d.ts +10 -0
  497. package/dist/components/ui/card.d.ts +11 -0
  498. package/dist/components/ui/carousel.d.ts +28 -0
  499. package/dist/components/ui/checkbox.d.ts +4 -0
  500. package/dist/components/ui/code-block.d.ts +45 -0
  501. package/dist/components/ui/code-editor.d.ts +18 -0
  502. package/dist/components/ui/collapsible.d.ts +5 -0
  503. package/dist/components/ui/combobox.d.ts +24 -0
  504. package/dist/components/ui/command.d.ts +18 -0
  505. package/dist/components/ui/context-menu.d.ts +31 -0
  506. package/dist/components/ui/data-table/data-table-column-toggle.cjs +1 -1
  507. package/dist/components/ui/data-table/data-table-column-toggle.cjs.map +1 -1
  508. package/dist/components/ui/data-table/data-table-column-toggle.d.ts +6 -0
  509. package/dist/components/ui/data-table/data-table-column-toggle.js +71 -63
  510. package/dist/components/ui/data-table/data-table-column-toggle.js.map +1 -1
  511. package/dist/components/ui/data-table/data-table-filter.cjs +1 -1
  512. package/dist/components/ui/data-table/data-table-filter.cjs.map +1 -1
  513. package/dist/components/ui/data-table/data-table-filter.d.ts +9 -0
  514. package/dist/components/ui/data-table/data-table-filter.js +26 -25
  515. package/dist/components/ui/data-table/data-table-filter.js.map +1 -1
  516. package/dist/components/ui/data-table/data-table-group.cjs +1 -1
  517. package/dist/components/ui/data-table/data-table-group.cjs.map +1 -1
  518. package/dist/components/ui/data-table/data-table-group.d.ts +9 -0
  519. package/dist/components/ui/data-table/data-table-group.js +18 -17
  520. package/dist/components/ui/data-table/data-table-group.js.map +1 -1
  521. package/dist/components/ui/data-table/data-table-pagination.cjs +1 -1
  522. package/dist/components/ui/data-table/data-table-pagination.cjs.map +1 -1
  523. package/dist/components/ui/data-table/data-table-pagination.d.ts +7 -0
  524. package/dist/components/ui/data-table/data-table-pagination.js +16 -16
  525. package/dist/components/ui/data-table/data-table-pagination.js.map +1 -1
  526. package/dist/components/ui/data-table/data-table.cjs +1 -1
  527. package/dist/components/ui/data-table/data-table.cjs.map +1 -1
  528. package/dist/components/ui/data-table/data-table.d.ts +82 -0
  529. package/dist/components/ui/data-table/data-table.js +191 -190
  530. package/dist/components/ui/data-table/data-table.js.map +1 -1
  531. package/dist/components/ui/data-table/index.d.ts +5 -0
  532. package/dist/components/ui/dialog.d.ts +18 -0
  533. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  534. package/dist/components/ui/field.d.ts +24 -0
  535. package/dist/components/ui/hover-card.d.ts +6 -0
  536. package/dist/components/ui/input-group.d.ts +16 -0
  537. package/dist/components/ui/input.d.ts +3 -0
  538. package/dist/components/ui/item.d.ts +23 -0
  539. package/dist/components/ui/kbd.d.ts +3 -0
  540. package/dist/components/ui/label.d.ts +4 -0
  541. package/dist/components/ui/menubar.d.ts +30 -0
  542. package/dist/components/ui/navigation-menu.d.ts +14 -0
  543. package/dist/components/ui/popover.d.ts +7 -0
  544. package/dist/components/ui/progress.d.ts +4 -0
  545. package/dist/components/ui/radio-group.d.ts +5 -0
  546. package/dist/components/ui/resizable.d.ts +25 -0
  547. package/dist/components/ui/scroll-area.d.ts +5 -0
  548. package/dist/components/ui/select.d.ts +15 -0
  549. package/dist/components/ui/separator.d.ts +4 -0
  550. package/dist/components/ui/sheet.d.ts +14 -0
  551. package/dist/components/ui/sidebar.d.ts +69 -0
  552. package/dist/components/ui/skeleton.d.ts +2 -0
  553. package/dist/components/ui/slider.d.ts +4 -0
  554. package/dist/components/ui/snippet.d.ts +18 -0
  555. package/dist/components/ui/sonner.d.ts +3 -0
  556. package/dist/components/ui/spinner.d.ts +6 -0
  557. package/dist/components/ui/switch.d.ts +6 -0
  558. package/dist/components/ui/table.d.ts +22 -0
  559. package/dist/components/ui/tabs.d.ts +11 -0
  560. package/dist/components/ui/tetra-molecule-icon.d.ts +11 -0
  561. package/dist/components/ui/tetrascience-icon.d.ts +7 -0
  562. package/dist/components/ui/textarea.d.ts +3 -0
  563. package/dist/components/ui/toggle-group.d.ts +10 -0
  564. package/dist/components/ui/toggle.d.ts +9 -0
  565. package/dist/components/ui/tooltip.d.ts +7 -0
  566. package/dist/composed/AssistantLayout.cjs +2 -0
  567. package/dist/composed/AssistantLayout.cjs.map +1 -0
  568. package/dist/composed/AssistantLayout.js +10 -0
  569. package/dist/composed/AssistantLayout.js.map +1 -0
  570. package/dist/composed/Chat.cjs +2 -0
  571. package/dist/composed/Chat.cjs.map +1 -0
  572. package/dist/composed/Chat.js +5 -0
  573. package/dist/composed/Chat.js.map +1 -0
  574. package/dist/composed/ConfirmDialog.cjs +2 -0
  575. package/dist/composed/ConfirmDialog.cjs.map +1 -0
  576. package/dist/composed/ConfirmDialog.js +5 -0
  577. package/dist/composed/ConfirmDialog.js.map +1 -0
  578. package/dist/composed/DataAppShell.cjs +2 -0
  579. package/dist/composed/DataAppShell.cjs.map +1 -0
  580. package/dist/composed/DataAppShell.js +22 -0
  581. package/dist/composed/DataAppShell.js.map +1 -0
  582. package/dist/composed/EmptyState.cjs +2 -0
  583. package/dist/composed/EmptyState.cjs.map +1 -0
  584. package/dist/composed/EmptyState.js +5 -0
  585. package/dist/composed/EmptyState.js.map +1 -0
  586. package/dist/composed/FormPatterns.cjs +2 -0
  587. package/dist/composed/FormPatterns.cjs.map +1 -0
  588. package/dist/composed/FormPatterns.js +5 -0
  589. package/dist/composed/FormPatterns.js.map +1 -0
  590. package/dist/composed/MoleculeStructure.cjs +2 -0
  591. package/dist/composed/MoleculeStructure.cjs.map +1 -0
  592. package/dist/composed/MoleculeStructure.js +11 -0
  593. package/dist/composed/MoleculeStructure.js.map +1 -0
  594. package/dist/composed/PlateMapEditor.cjs +2 -0
  595. package/dist/composed/PlateMapEditor.cjs.map +1 -0
  596. package/dist/composed/PlateMapEditor.js +45 -0
  597. package/dist/composed/PlateMapEditor.js.map +1 -0
  598. package/dist/composed/ProcessFlow.cjs +2 -0
  599. package/dist/composed/ProcessFlow.cjs.map +1 -0
  600. package/dist/composed/ProcessFlow.js +7 -0
  601. package/dist/composed/ProcessFlow.js.map +1 -0
  602. package/dist/composed/RichListItem.cjs +2 -0
  603. package/dist/composed/RichListItem.cjs.map +1 -0
  604. package/dist/composed/RichListItem.js +6 -0
  605. package/dist/composed/RichListItem.js.map +1 -0
  606. package/dist/composed/StatCard.cjs +2 -0
  607. package/dist/composed/StatCard.cjs.map +1 -0
  608. package/dist/composed/StatCard.js +5 -0
  609. package/dist/composed/StatCard.js.map +1 -0
  610. package/dist/composed/TdpSearch.cjs +2 -0
  611. package/dist/composed/TdpSearch.cjs.map +1 -0
  612. package/dist/composed/TdpSearch.js +8 -0
  613. package/dist/composed/TdpSearch.js.map +1 -0
  614. package/dist/composed/TopBar.cjs +2 -0
  615. package/dist/composed/TopBar.cjs.map +1 -0
  616. package/dist/composed/TopBar.js +6 -0
  617. package/dist/composed/TopBar.js.map +1 -0
  618. package/dist/composed/UserMenu.cjs +2 -0
  619. package/dist/composed/UserMenu.cjs.map +1 -0
  620. package/dist/composed/UserMenu.js +7 -0
  621. package/dist/composed/UserMenu.js.map +1 -0
  622. package/dist/composed/tdp-link.cjs +2 -0
  623. package/dist/composed/tdp-link.cjs.map +1 -0
  624. package/dist/composed/tdp-link.js +84 -0
  625. package/dist/composed/tdp-link.js.map +1 -0
  626. package/dist/composed/tdp-url.cjs.map +1 -0
  627. package/dist/composed/tdp-url.js.map +1 -0
  628. package/dist/hooks/use-code-editor-theme.d.ts +34 -0
  629. package/dist/hooks/use-element-size.d.ts +25 -0
  630. package/dist/hooks/use-is-dark.d.ts +12 -0
  631. package/dist/hooks/use-mobile.d.ts +1 -0
  632. package/dist/hooks/use-plotly-theme.cjs +1 -1
  633. package/dist/hooks/use-plotly-theme.cjs.map +1 -1
  634. package/dist/hooks/use-plotly-theme.d.ts +49 -0
  635. package/dist/hooks/use-plotly-theme.js +4 -3
  636. package/dist/hooks/use-plotly-theme.js.map +1 -1
  637. package/dist/index.cjs +1 -1
  638. package/dist/index.css +1 -1
  639. package/dist/index.d.ts +102 -4404
  640. package/dist/index.js +698 -659
  641. package/dist/index.js.map +1 -1
  642. package/dist/index.tailwind.css +1 -1
  643. package/dist/jest-setup.cjs +4 -0
  644. package/dist/jest-setup.cjs.map +1 -0
  645. package/dist/jest-setup.d.ts +106 -0
  646. package/dist/jest-setup.js +218 -0
  647. package/dist/jest-setup.js.map +1 -0
  648. package/dist/lib/shiki.cjs +2 -0
  649. package/dist/lib/shiki.cjs.map +1 -0
  650. package/dist/lib/shiki.d.ts +32 -0
  651. package/dist/lib/shiki.js +72 -0
  652. package/dist/lib/shiki.js.map +1 -0
  653. package/dist/lib/utils.d.ts +2 -0
  654. package/dist/server/auth/JwtTokenManager.cjs +1 -1
  655. package/dist/server/auth/JwtTokenManager.cjs.map +1 -1
  656. package/dist/server/auth/JwtTokenManager.d.ts +113 -0
  657. package/dist/server/auth/JwtTokenManager.js +44 -21
  658. package/dist/server/auth/JwtTokenManager.js.map +1 -1
  659. package/dist/server/auth/index.d.ts +5 -0
  660. package/dist/server/index.d.ts +8 -0
  661. package/dist/server/providers/AthenaProvider.cjs +1 -1
  662. package/dist/server/providers/AthenaProvider.cjs.map +1 -1
  663. package/dist/server/providers/AthenaProvider.d.ts +75 -0
  664. package/dist/server/providers/DatabricksProvider.cjs +1 -1
  665. package/dist/server/providers/DatabricksProvider.cjs.map +1 -1
  666. package/dist/server/providers/DatabricksProvider.d.ts +38 -0
  667. package/dist/server/providers/SnowflakeProvider.cjs +1 -1
  668. package/dist/server/providers/SnowflakeProvider.cjs.map +1 -1
  669. package/dist/server/providers/SnowflakeProvider.d.ts +36 -0
  670. package/dist/server/providers/buildProvider.d.ts +39 -0
  671. package/dist/server/providers/entries/athena.d.ts +24 -0
  672. package/dist/server/providers/entries/databricks.d.ts +25 -0
  673. package/dist/server/providers/entries/snowflake.d.ts +25 -0
  674. package/dist/server/providers/exceptions.d.ts +36 -0
  675. package/dist/server/providers/getProviderConfigurations.d.ts +45 -0
  676. package/dist/server/providers/index.d.ts +31 -0
  677. package/dist/server/providers/providerDiscovery.d.ts +81 -0
  678. package/dist/server/providers/types.d.ts +145 -0
  679. package/dist/server/search/TdpSearchManager.d.ts +40 -0
  680. package/dist/server/search/index.d.ts +5 -0
  681. package/dist/server.d.ts +17 -540
  682. package/dist/ui/accordion.cjs +2 -0
  683. package/dist/ui/accordion.cjs.map +1 -0
  684. package/dist/ui/accordion.js +83 -0
  685. package/dist/ui/accordion.js.map +1 -0
  686. package/dist/ui/alert-dialog.cjs +2 -0
  687. package/dist/ui/alert-dialog.cjs.map +1 -0
  688. package/dist/ui/alert-dialog.js +181 -0
  689. package/dist/ui/alert-dialog.js.map +1 -0
  690. package/dist/ui/alert.cjs +2 -0
  691. package/dist/ui/alert.cjs.map +1 -0
  692. package/dist/ui/alert.js +81 -0
  693. package/dist/ui/alert.js.map +1 -0
  694. package/dist/ui/aspect-ratio.cjs.map +1 -0
  695. package/dist/ui/aspect-ratio.js.map +1 -0
  696. package/dist/ui/avatar.cjs +2 -0
  697. package/dist/ui/avatar.cjs.map +1 -0
  698. package/dist/ui/avatar.js +107 -0
  699. package/dist/ui/avatar.js.map +1 -0
  700. package/dist/ui/badge.cjs +2 -0
  701. package/dist/ui/badge.cjs.map +1 -0
  702. package/dist/ui/badge.js +47 -0
  703. package/dist/ui/badge.js.map +1 -0
  704. package/dist/ui/banner.cjs +2 -0
  705. package/dist/ui/banner.cjs.map +1 -0
  706. package/dist/ui/banner.js +80 -0
  707. package/dist/ui/banner.js.map +1 -0
  708. package/dist/ui/breadcrumb.cjs +2 -0
  709. package/dist/ui/breadcrumb.cjs.map +1 -0
  710. package/dist/ui/breadcrumb.js +118 -0
  711. package/dist/ui/breadcrumb.js.map +1 -0
  712. package/dist/ui/button-group.cjs +2 -0
  713. package/dist/ui/button-group.cjs.map +1 -0
  714. package/dist/ui/button-group.js +77 -0
  715. package/dist/ui/button-group.js.map +1 -0
  716. package/dist/ui/button.cjs +2 -0
  717. package/dist/ui/button.cjs.map +1 -0
  718. package/dist/ui/button.js +57 -0
  719. package/dist/ui/button.js.map +1 -0
  720. package/dist/ui/calendar.cjs +2 -0
  721. package/dist/ui/calendar.cjs.map +1 -0
  722. package/dist/ui/calendar.js +174 -0
  723. package/dist/ui/calendar.js.map +1 -0
  724. package/dist/ui/card.cjs +2 -0
  725. package/dist/ui/card.cjs.map +1 -0
  726. package/dist/ui/card.js +102 -0
  727. package/dist/ui/card.js.map +1 -0
  728. package/dist/ui/carousel.cjs +2 -0
  729. package/dist/ui/carousel.cjs.map +1 -0
  730. package/dist/ui/carousel.js +179 -0
  731. package/dist/ui/carousel.js.map +1 -0
  732. package/dist/ui/checkbox.cjs +2 -0
  733. package/dist/ui/checkbox.cjs.map +1 -0
  734. package/dist/ui/checkbox.js +35 -0
  735. package/dist/ui/checkbox.js.map +1 -0
  736. package/dist/ui/code-block.cjs +4 -0
  737. package/dist/ui/code-block.cjs.map +1 -0
  738. package/dist/ui/code-block.js +324 -0
  739. package/dist/ui/code-block.js.map +1 -0
  740. package/dist/ui/code-editor.cjs +2 -0
  741. package/dist/ui/code-editor.cjs.map +1 -0
  742. package/dist/ui/code-editor.js +106 -0
  743. package/dist/ui/code-editor.js.map +1 -0
  744. package/dist/ui/collapsible.cjs.map +1 -0
  745. package/dist/ui/collapsible.js.map +1 -0
  746. package/dist/ui/combobox.cjs +2 -0
  747. package/dist/ui/combobox.cjs.map +1 -0
  748. package/dist/ui/combobox.js +285 -0
  749. package/dist/ui/combobox.js.map +1 -0
  750. package/dist/ui/command.cjs +2 -0
  751. package/dist/ui/command.cjs.map +1 -0
  752. package/dist/ui/command.js +178 -0
  753. package/dist/ui/command.js.map +1 -0
  754. package/dist/ui/context-menu.cjs +2 -0
  755. package/dist/ui/context-menu.cjs.map +1 -0
  756. package/dist/ui/context-menu.js +236 -0
  757. package/dist/ui/context-menu.js.map +1 -0
  758. package/dist/ui/data-table.cjs +2 -0
  759. package/dist/ui/data-table.cjs.map +1 -0
  760. package/dist/ui/data-table.js +16 -0
  761. package/dist/ui/data-table.js.map +1 -0
  762. package/dist/ui/dialog.cjs +2 -0
  763. package/dist/ui/dialog.cjs.map +1 -0
  764. package/dist/ui/dialog.js +165 -0
  765. package/dist/ui/dialog.js.map +1 -0
  766. package/dist/ui/dropdown-menu.cjs +2 -0
  767. package/dist/ui/dropdown-menu.cjs.map +1 -0
  768. package/dist/ui/dropdown-menu.js +260 -0
  769. package/dist/ui/dropdown-menu.js.map +1 -0
  770. package/dist/ui/field.cjs +2 -0
  771. package/dist/ui/field.cjs.map +1 -0
  772. package/dist/ui/field.js +210 -0
  773. package/dist/ui/field.js.map +1 -0
  774. package/dist/ui/hover-card.cjs +2 -0
  775. package/dist/ui/hover-card.cjs.map +1 -0
  776. package/dist/ui/hover-card.js +39 -0
  777. package/dist/ui/hover-card.js.map +1 -0
  778. package/dist/ui/input-group.cjs +2 -0
  779. package/dist/ui/input-group.cjs.map +1 -0
  780. package/dist/ui/input-group.js +145 -0
  781. package/dist/ui/input-group.js.map +1 -0
  782. package/dist/ui/input.cjs +2 -0
  783. package/dist/ui/input.cjs.map +1 -0
  784. package/dist/ui/input.js +20 -0
  785. package/dist/ui/input.js.map +1 -0
  786. package/dist/ui/item.cjs +2 -0
  787. package/dist/ui/item.cjs.map +1 -0
  788. package/dist/ui/item.js +199 -0
  789. package/dist/ui/item.js.map +1 -0
  790. package/dist/ui/kbd.cjs +2 -0
  791. package/dist/ui/kbd.cjs.map +1 -0
  792. package/dist/ui/kbd.js +30 -0
  793. package/dist/ui/kbd.js.map +1 -0
  794. package/dist/ui/label.cjs +2 -0
  795. package/dist/ui/label.cjs.map +1 -0
  796. package/dist/ui/label.js +23 -0
  797. package/dist/ui/label.js.map +1 -0
  798. package/dist/ui/menubar.cjs +2 -0
  799. package/dist/ui/menubar.cjs.map +1 -0
  800. package/dist/ui/menubar.js +256 -0
  801. package/dist/ui/menubar.js.map +1 -0
  802. package/dist/ui/navigation-menu.cjs +2 -0
  803. package/dist/ui/navigation-menu.cjs.map +1 -0
  804. package/dist/ui/navigation-menu.js +164 -0
  805. package/dist/ui/navigation-menu.js.map +1 -0
  806. package/dist/ui/popover.cjs +2 -0
  807. package/dist/ui/popover.cjs.map +1 -0
  808. package/dist/ui/popover.js +45 -0
  809. package/dist/ui/popover.js.map +1 -0
  810. package/dist/ui/radio-group.cjs +2 -0
  811. package/dist/ui/radio-group.cjs.map +1 -0
  812. package/dist/ui/radio-group.js +45 -0
  813. package/dist/ui/radio-group.js.map +1 -0
  814. package/dist/ui/resizable.cjs +2 -0
  815. package/dist/ui/resizable.cjs.map +1 -0
  816. package/dist/ui/resizable.js +58 -0
  817. package/dist/ui/resizable.js.map +1 -0
  818. package/dist/ui/scroll-area.cjs +2 -0
  819. package/dist/ui/scroll-area.cjs.map +1 -0
  820. package/dist/ui/scroll-area.js +61 -0
  821. package/dist/ui/scroll-area.js.map +1 -0
  822. package/dist/ui/select.cjs +2 -0
  823. package/dist/ui/select.cjs.map +1 -0
  824. package/dist/ui/select.js +184 -0
  825. package/dist/ui/select.js.map +1 -0
  826. package/dist/ui/separator.cjs +2 -0
  827. package/dist/ui/separator.cjs.map +1 -0
  828. package/dist/ui/separator.js +27 -0
  829. package/dist/ui/separator.js.map +1 -0
  830. package/dist/ui/sheet.cjs +2 -0
  831. package/dist/ui/sheet.cjs.map +1 -0
  832. package/dist/ui/sheet.js +137 -0
  833. package/dist/ui/sheet.js.map +1 -0
  834. package/dist/ui/sidebar.cjs +2 -0
  835. package/dist/ui/sidebar.cjs.map +1 -0
  836. package/dist/ui/sidebar.js +579 -0
  837. package/dist/ui/sidebar.js.map +1 -0
  838. package/dist/ui/skeleton.cjs +2 -0
  839. package/dist/ui/skeleton.cjs.map +1 -0
  840. package/dist/ui/skeleton.js +24 -0
  841. package/dist/ui/skeleton.js.map +1 -0
  842. package/dist/ui/slider.cjs +2 -0
  843. package/dist/ui/slider.cjs.map +1 -0
  844. package/dist/ui/slider.js +61 -0
  845. package/dist/ui/slider.js.map +1 -0
  846. package/dist/ui/sonner.cjs +2 -0
  847. package/dist/ui/sonner.cjs.map +1 -0
  848. package/dist/ui/sonner.js +52 -0
  849. package/dist/ui/sonner.js.map +1 -0
  850. package/dist/ui/spinner.cjs +2 -0
  851. package/dist/ui/spinner.cjs.map +1 -0
  852. package/dist/ui/spinner.js +39 -0
  853. package/dist/ui/spinner.js.map +1 -0
  854. package/dist/ui/switch.cjs +2 -0
  855. package/dist/ui/switch.cjs.map +1 -0
  856. package/dist/ui/switch.js +32 -0
  857. package/dist/ui/switch.js.map +1 -0
  858. package/dist/ui/table.cjs +2 -0
  859. package/dist/ui/table.cjs.map +1 -0
  860. package/dist/ui/table.js +153 -0
  861. package/dist/ui/table.js.map +1 -0
  862. package/dist/ui/tabs.cjs +2 -0
  863. package/dist/ui/tabs.cjs.map +1 -0
  864. package/dist/ui/tabs.js +92 -0
  865. package/dist/ui/tabs.js.map +1 -0
  866. package/dist/ui/tetra-molecule-icon.cjs +2 -0
  867. package/dist/ui/tetra-molecule-icon.cjs.map +1 -0
  868. package/dist/ui/tetra-molecule-icon.js +50 -0
  869. package/dist/ui/tetra-molecule-icon.js.map +1 -0
  870. package/dist/ui/tetrascience-icon.cjs +2 -0
  871. package/dist/ui/tetrascience-icon.cjs.map +1 -0
  872. package/dist/ui/tetrascience-icon.js +47 -0
  873. package/dist/ui/tetrascience-icon.js.map +1 -0
  874. package/dist/ui/textarea.cjs +2 -0
  875. package/dist/ui/textarea.cjs.map +1 -0
  876. package/dist/ui/textarea.js +19 -0
  877. package/dist/ui/textarea.js.map +1 -0
  878. package/dist/ui/toggle-group.cjs +2 -0
  879. package/dist/ui/toggle-group.cjs.map +1 -0
  880. package/dist/ui/toggle-group.js +81 -0
  881. package/dist/ui/toggle-group.js.map +1 -0
  882. package/dist/ui/toggle.cjs +2 -0
  883. package/dist/ui/toggle.cjs.map +1 -0
  884. package/dist/ui/toggle.js +44 -0
  885. package/dist/ui/toggle.js.map +1 -0
  886. package/dist/ui/tooltip.cjs +2 -0
  887. package/dist/ui/tooltip.cjs.map +1 -0
  888. package/dist/ui/tooltip.js +56 -0
  889. package/dist/ui/tooltip.js.map +1 -0
  890. package/dist/utils/colors.d.ts +50 -0
  891. package/package.json +137 -24
  892. package/dist/athena.d.ts +0 -167
  893. package/dist/components/ai/attachments.cjs +0 -2
  894. package/dist/components/ai/attachments.cjs.map +0 -1
  895. package/dist/components/ai/attachments.js +0 -224
  896. package/dist/components/ai/attachments.js.map +0 -1
  897. package/dist/components/ai/chain-of-thought.cjs +0 -2
  898. package/dist/components/ai/chain-of-thought.cjs.map +0 -1
  899. package/dist/components/ai/chain-of-thought.js +0 -145
  900. package/dist/components/ai/chain-of-thought.js.map +0 -1
  901. package/dist/components/ai/confirmation.cjs +0 -2
  902. package/dist/components/ai/confirmation.cjs.map +0 -1
  903. package/dist/components/ai/confirmation.js +0 -109
  904. package/dist/components/ai/confirmation.js.map +0 -1
  905. package/dist/components/ai/context.cjs +0 -2
  906. package/dist/components/ai/context.cjs.map +0 -1
  907. package/dist/components/ai/context.js +0 -266
  908. package/dist/components/ai/context.js.map +0 -1
  909. package/dist/components/ai/conversation.cjs +0 -4
  910. package/dist/components/ai/conversation.cjs.map +0 -1
  911. package/dist/components/ai/conversation.js +0 -108
  912. package/dist/components/ai/conversation.js.map +0 -1
  913. package/dist/components/ai/inline-citation.cjs +0 -2
  914. package/dist/components/ai/inline-citation.cjs.map +0 -1
  915. package/dist/components/ai/inline-citation.js +0 -182
  916. package/dist/components/ai/inline-citation.js.map +0 -1
  917. package/dist/components/ai/message.cjs +0 -2
  918. package/dist/components/ai/message.cjs.map +0 -1
  919. package/dist/components/ai/message.js +0 -237
  920. package/dist/components/ai/message.js.map +0 -1
  921. package/dist/components/ai/model-selector.cjs +0 -2
  922. package/dist/components/ai/model-selector.cjs.map +0 -1
  923. package/dist/components/ai/model-selector.js +0 -77
  924. package/dist/components/ai/model-selector.js.map +0 -1
  925. package/dist/components/ai/prompt-input.cjs +0 -2
  926. package/dist/components/ai/prompt-input.cjs.map +0 -1
  927. package/dist/components/ai/prompt-input.js +0 -774
  928. package/dist/components/ai/prompt-input.js.map +0 -1
  929. package/dist/components/ai/queue.cjs +0 -2
  930. package/dist/components/ai/queue.cjs.map +0 -1
  931. package/dist/components/ai/queue.js +0 -209
  932. package/dist/components/ai/queue.js.map +0 -1
  933. package/dist/components/ai/reasoning.cjs +0 -2
  934. package/dist/components/ai/reasoning.cjs.map +0 -1
  935. package/dist/components/ai/reasoning.js +0 -129
  936. package/dist/components/ai/reasoning.js.map +0 -1
  937. package/dist/components/ai/shimmer.cjs +0 -2
  938. package/dist/components/ai/shimmer.cjs.map +0 -1
  939. package/dist/components/ai/shimmer.js +0 -49
  940. package/dist/components/ai/shimmer.js.map +0 -1
  941. package/dist/components/ai/sources.cjs +0 -2
  942. package/dist/components/ai/sources.cjs.map +0 -1
  943. package/dist/components/ai/sources.js +0 -54
  944. package/dist/components/ai/sources.js.map +0 -1
  945. package/dist/components/ai/speech-input.cjs +0 -2
  946. package/dist/components/ai/speech-input.cjs.map +0 -1
  947. package/dist/components/ai/speech-input.js +0 -123
  948. package/dist/components/ai/speech-input.js.map +0 -1
  949. package/dist/components/ai/stream-status.cjs +0 -2
  950. package/dist/components/ai/stream-status.cjs.map +0 -1
  951. package/dist/components/ai/stream-status.js +0 -106
  952. package/dist/components/ai/stream-status.js.map +0 -1
  953. package/dist/components/ai/suggestion.cjs +0 -2
  954. package/dist/components/ai/suggestion.cjs.map +0 -1
  955. package/dist/components/ai/suggestion.js +0 -38
  956. package/dist/components/ai/suggestion.js.map +0 -1
  957. package/dist/components/ai/task.cjs +0 -2
  958. package/dist/components/ai/task.cjs.map +0 -1
  959. package/dist/components/ai/task.js +0 -94
  960. package/dist/components/ai/task.js.map +0 -1
  961. package/dist/components/ai/tool.cjs +0 -2
  962. package/dist/components/ai/tool.cjs.map +0 -1
  963. package/dist/components/ai/tool.js +0 -143
  964. package/dist/components/ai/tool.js.map +0 -1
  965. package/dist/components/charts/AreaGraph/AreaGraph.cjs +0 -2
  966. package/dist/components/charts/AreaGraph/AreaGraph.cjs.map +0 -1
  967. package/dist/components/charts/AreaGraph/AreaGraph.js +0 -271
  968. package/dist/components/charts/AreaGraph/AreaGraph.js.map +0 -1
  969. package/dist/components/charts/BarGraph/BarGraph.cjs +0 -2
  970. package/dist/components/charts/BarGraph/BarGraph.cjs.map +0 -1
  971. package/dist/components/charts/BarGraph/BarGraph.js +0 -220
  972. package/dist/components/charts/BarGraph/BarGraph.js.map +0 -1
  973. package/dist/components/charts/Boxplot/Boxplot.cjs +0 -2
  974. package/dist/components/charts/Boxplot/Boxplot.cjs.map +0 -1
  975. package/dist/components/charts/Boxplot/Boxplot.js +0 -209
  976. package/dist/components/charts/Boxplot/Boxplot.js.map +0 -1
  977. package/dist/components/charts/ChromatogramChart/ChromatogramChart.cjs +0 -2
  978. package/dist/components/charts/ChromatogramChart/ChromatogramChart.cjs.map +0 -1
  979. package/dist/components/charts/ChromatogramChart/ChromatogramChart.js +0 -227
  980. package/dist/components/charts/ChromatogramChart/ChromatogramChart.js.map +0 -1
  981. package/dist/components/charts/ChromatogramChart/annotations.cjs +0 -2
  982. package/dist/components/charts/ChromatogramChart/annotations.cjs.map +0 -1
  983. package/dist/components/charts/ChromatogramChart/annotations.js +0 -73
  984. package/dist/components/charts/ChromatogramChart/annotations.js.map +0 -1
  985. package/dist/components/charts/ChromatogramChart/boundaryMarkers.cjs +0 -2
  986. package/dist/components/charts/ChromatogramChart/boundaryMarkers.cjs.map +0 -1
  987. package/dist/components/charts/ChromatogramChart/boundaryMarkers.js +0 -34
  988. package/dist/components/charts/ChromatogramChart/boundaryMarkers.js.map +0 -1
  989. package/dist/components/charts/ChromatogramChart/constants.cjs +0 -2
  990. package/dist/components/charts/ChromatogramChart/constants.cjs.map +0 -1
  991. package/dist/components/charts/ChromatogramChart/constants.js +0 -30
  992. package/dist/components/charts/ChromatogramChart/constants.js.map +0 -1
  993. package/dist/components/charts/ChromatogramChart/dataProcessing.cjs +0 -2
  994. package/dist/components/charts/ChromatogramChart/dataProcessing.cjs.map +0 -1
  995. package/dist/components/charts/ChromatogramChart/dataProcessing.js +0 -79
  996. package/dist/components/charts/ChromatogramChart/dataProcessing.js.map +0 -1
  997. package/dist/components/charts/ChromatogramChart/peakDetection.cjs.map +0 -1
  998. package/dist/components/charts/ChromatogramChart/peakDetection.js.map +0 -1
  999. package/dist/components/charts/DotPlot/DotPlot.cjs +0 -2
  1000. package/dist/components/charts/DotPlot/DotPlot.cjs.map +0 -1
  1001. package/dist/components/charts/DotPlot/DotPlot.js +0 -208
  1002. package/dist/components/charts/DotPlot/DotPlot.js.map +0 -1
  1003. package/dist/components/charts/Heatmap/Heatmap.cjs +0 -2
  1004. package/dist/components/charts/Heatmap/Heatmap.cjs.map +0 -1
  1005. package/dist/components/charts/Heatmap/Heatmap.js +0 -67
  1006. package/dist/components/charts/Heatmap/Heatmap.js.map +0 -1
  1007. package/dist/components/charts/LineGraph/LineGraph.cjs +0 -2
  1008. package/dist/components/charts/LineGraph/LineGraph.cjs.map +0 -1
  1009. package/dist/components/charts/LineGraph/LineGraph.js +0 -225
  1010. package/dist/components/charts/LineGraph/LineGraph.js.map +0 -1
  1011. package/dist/components/charts/ScatterGraph/ScatterGraph.cjs +0 -2
  1012. package/dist/components/charts/ScatterGraph/ScatterGraph.cjs.map +0 -1
  1013. package/dist/components/charts/ScatterGraph/ScatterGraph.js +0 -234
  1014. package/dist/components/charts/ScatterGraph/ScatterGraph.js.map +0 -1
  1015. package/dist/components/composed/tdp-link.cjs +0 -2
  1016. package/dist/components/composed/tdp-link.cjs.map +0 -1
  1017. package/dist/components/composed/tdp-link.js +0 -84
  1018. package/dist/components/composed/tdp-link.js.map +0 -1
  1019. package/dist/components/composed/tdp-url.cjs.map +0 -1
  1020. package/dist/components/composed/tdp-url.js.map +0 -1
  1021. package/dist/components/ui/accordion.cjs +0 -2
  1022. package/dist/components/ui/accordion.cjs.map +0 -1
  1023. package/dist/components/ui/accordion.js +0 -83
  1024. package/dist/components/ui/accordion.js.map +0 -1
  1025. package/dist/components/ui/alert-dialog.cjs +0 -2
  1026. package/dist/components/ui/alert-dialog.cjs.map +0 -1
  1027. package/dist/components/ui/alert-dialog.js +0 -181
  1028. package/dist/components/ui/alert-dialog.js.map +0 -1
  1029. package/dist/components/ui/alert.cjs +0 -2
  1030. package/dist/components/ui/alert.cjs.map +0 -1
  1031. package/dist/components/ui/alert.js +0 -81
  1032. package/dist/components/ui/alert.js.map +0 -1
  1033. package/dist/components/ui/aspect-ratio.cjs.map +0 -1
  1034. package/dist/components/ui/aspect-ratio.js.map +0 -1
  1035. package/dist/components/ui/avatar.cjs +0 -2
  1036. package/dist/components/ui/avatar.cjs.map +0 -1
  1037. package/dist/components/ui/avatar.js +0 -107
  1038. package/dist/components/ui/avatar.js.map +0 -1
  1039. package/dist/components/ui/badge.cjs +0 -2
  1040. package/dist/components/ui/badge.cjs.map +0 -1
  1041. package/dist/components/ui/badge.js +0 -47
  1042. package/dist/components/ui/badge.js.map +0 -1
  1043. package/dist/components/ui/banner.cjs +0 -2
  1044. package/dist/components/ui/banner.cjs.map +0 -1
  1045. package/dist/components/ui/banner.js +0 -80
  1046. package/dist/components/ui/banner.js.map +0 -1
  1047. package/dist/components/ui/breadcrumb.cjs +0 -2
  1048. package/dist/components/ui/breadcrumb.cjs.map +0 -1
  1049. package/dist/components/ui/breadcrumb.js +0 -118
  1050. package/dist/components/ui/breadcrumb.js.map +0 -1
  1051. package/dist/components/ui/button-group.cjs +0 -2
  1052. package/dist/components/ui/button-group.cjs.map +0 -1
  1053. package/dist/components/ui/button-group.js +0 -77
  1054. package/dist/components/ui/button-group.js.map +0 -1
  1055. package/dist/components/ui/button.cjs +0 -2
  1056. package/dist/components/ui/button.cjs.map +0 -1
  1057. package/dist/components/ui/button.js +0 -57
  1058. package/dist/components/ui/button.js.map +0 -1
  1059. package/dist/components/ui/calendar.cjs +0 -2
  1060. package/dist/components/ui/calendar.cjs.map +0 -1
  1061. package/dist/components/ui/calendar.js +0 -174
  1062. package/dist/components/ui/calendar.js.map +0 -1
  1063. package/dist/components/ui/card.cjs +0 -2
  1064. package/dist/components/ui/card.cjs.map +0 -1
  1065. package/dist/components/ui/card.js +0 -102
  1066. package/dist/components/ui/card.js.map +0 -1
  1067. package/dist/components/ui/carousel.cjs +0 -2
  1068. package/dist/components/ui/carousel.cjs.map +0 -1
  1069. package/dist/components/ui/carousel.js +0 -179
  1070. package/dist/components/ui/carousel.js.map +0 -1
  1071. package/dist/components/ui/checkbox.cjs +0 -2
  1072. package/dist/components/ui/checkbox.cjs.map +0 -1
  1073. package/dist/components/ui/checkbox.js +0 -35
  1074. package/dist/components/ui/checkbox.js.map +0 -1
  1075. package/dist/components/ui/code-block.cjs +0 -4
  1076. package/dist/components/ui/code-block.cjs.map +0 -1
  1077. package/dist/components/ui/code-block.js +0 -306
  1078. package/dist/components/ui/code-block.js.map +0 -1
  1079. package/dist/components/ui/code-editor.cjs +0 -2
  1080. package/dist/components/ui/code-editor.cjs.map +0 -1
  1081. package/dist/components/ui/code-editor.js +0 -103
  1082. package/dist/components/ui/code-editor.js.map +0 -1
  1083. package/dist/components/ui/collapsible.cjs.map +0 -1
  1084. package/dist/components/ui/collapsible.js.map +0 -1
  1085. package/dist/components/ui/combobox.cjs +0 -2
  1086. package/dist/components/ui/combobox.cjs.map +0 -1
  1087. package/dist/components/ui/combobox.js +0 -281
  1088. package/dist/components/ui/combobox.js.map +0 -1
  1089. package/dist/components/ui/command.cjs +0 -2
  1090. package/dist/components/ui/command.cjs.map +0 -1
  1091. package/dist/components/ui/command.js +0 -174
  1092. package/dist/components/ui/command.js.map +0 -1
  1093. package/dist/components/ui/context-menu.cjs +0 -2
  1094. package/dist/components/ui/context-menu.cjs.map +0 -1
  1095. package/dist/components/ui/context-menu.js +0 -236
  1096. package/dist/components/ui/context-menu.js.map +0 -1
  1097. package/dist/components/ui/dialog.cjs +0 -2
  1098. package/dist/components/ui/dialog.cjs.map +0 -1
  1099. package/dist/components/ui/dialog.js +0 -165
  1100. package/dist/components/ui/dialog.js.map +0 -1
  1101. package/dist/components/ui/drawer.cjs +0 -2
  1102. package/dist/components/ui/drawer.cjs.map +0 -1
  1103. package/dist/components/ui/drawer.js +0 -125
  1104. package/dist/components/ui/drawer.js.map +0 -1
  1105. package/dist/components/ui/dropdown-menu.cjs +0 -2
  1106. package/dist/components/ui/dropdown-menu.cjs.map +0 -1
  1107. package/dist/components/ui/dropdown-menu.js +0 -252
  1108. package/dist/components/ui/dropdown-menu.js.map +0 -1
  1109. package/dist/components/ui/field.cjs +0 -2
  1110. package/dist/components/ui/field.cjs.map +0 -1
  1111. package/dist/components/ui/field.js +0 -210
  1112. package/dist/components/ui/field.js.map +0 -1
  1113. package/dist/components/ui/hover-card.cjs +0 -2
  1114. package/dist/components/ui/hover-card.cjs.map +0 -1
  1115. package/dist/components/ui/hover-card.js +0 -39
  1116. package/dist/components/ui/hover-card.js.map +0 -1
  1117. package/dist/components/ui/input-group.cjs +0 -2
  1118. package/dist/components/ui/input-group.cjs.map +0 -1
  1119. package/dist/components/ui/input-group.js +0 -145
  1120. package/dist/components/ui/input-group.js.map +0 -1
  1121. package/dist/components/ui/input-otp.cjs +0 -2
  1122. package/dist/components/ui/input-otp.cjs.map +0 -1
  1123. package/dist/components/ui/input-otp.js +0 -82
  1124. package/dist/components/ui/input-otp.js.map +0 -1
  1125. package/dist/components/ui/input.cjs +0 -2
  1126. package/dist/components/ui/input.cjs.map +0 -1
  1127. package/dist/components/ui/input.js +0 -20
  1128. package/dist/components/ui/input.js.map +0 -1
  1129. package/dist/components/ui/item.cjs +0 -2
  1130. package/dist/components/ui/item.cjs.map +0 -1
  1131. package/dist/components/ui/item.js +0 -191
  1132. package/dist/components/ui/item.js.map +0 -1
  1133. package/dist/components/ui/kbd.cjs +0 -2
  1134. package/dist/components/ui/kbd.cjs.map +0 -1
  1135. package/dist/components/ui/kbd.js +0 -30
  1136. package/dist/components/ui/kbd.js.map +0 -1
  1137. package/dist/components/ui/label.cjs +0 -2
  1138. package/dist/components/ui/label.cjs.map +0 -1
  1139. package/dist/components/ui/label.js +0 -23
  1140. package/dist/components/ui/label.js.map +0 -1
  1141. package/dist/components/ui/menubar.cjs +0 -2
  1142. package/dist/components/ui/menubar.cjs.map +0 -1
  1143. package/dist/components/ui/menubar.js +0 -256
  1144. package/dist/components/ui/menubar.js.map +0 -1
  1145. package/dist/components/ui/navigation-menu.cjs +0 -2
  1146. package/dist/components/ui/navigation-menu.cjs.map +0 -1
  1147. package/dist/components/ui/navigation-menu.js +0 -164
  1148. package/dist/components/ui/navigation-menu.js.map +0 -1
  1149. package/dist/components/ui/popover.cjs +0 -2
  1150. package/dist/components/ui/popover.cjs.map +0 -1
  1151. package/dist/components/ui/popover.js +0 -45
  1152. package/dist/components/ui/popover.js.map +0 -1
  1153. package/dist/components/ui/radio-group.cjs +0 -2
  1154. package/dist/components/ui/radio-group.cjs.map +0 -1
  1155. package/dist/components/ui/radio-group.js +0 -45
  1156. package/dist/components/ui/radio-group.js.map +0 -1
  1157. package/dist/components/ui/resizable.cjs +0 -2
  1158. package/dist/components/ui/resizable.cjs.map +0 -1
  1159. package/dist/components/ui/resizable.js +0 -58
  1160. package/dist/components/ui/resizable.js.map +0 -1
  1161. package/dist/components/ui/scroll-area.cjs +0 -2
  1162. package/dist/components/ui/scroll-area.cjs.map +0 -1
  1163. package/dist/components/ui/scroll-area.js +0 -60
  1164. package/dist/components/ui/scroll-area.js.map +0 -1
  1165. package/dist/components/ui/select.cjs +0 -2
  1166. package/dist/components/ui/select.cjs.map +0 -1
  1167. package/dist/components/ui/select.js +0 -184
  1168. package/dist/components/ui/select.js.map +0 -1
  1169. package/dist/components/ui/separator.cjs +0 -2
  1170. package/dist/components/ui/separator.cjs.map +0 -1
  1171. package/dist/components/ui/separator.js +0 -27
  1172. package/dist/components/ui/separator.js.map +0 -1
  1173. package/dist/components/ui/sheet.cjs +0 -2
  1174. package/dist/components/ui/sheet.cjs.map +0 -1
  1175. package/dist/components/ui/sheet.js +0 -137
  1176. package/dist/components/ui/sheet.js.map +0 -1
  1177. package/dist/components/ui/sidebar.cjs +0 -2
  1178. package/dist/components/ui/sidebar.cjs.map +0 -1
  1179. package/dist/components/ui/sidebar.js +0 -579
  1180. package/dist/components/ui/sidebar.js.map +0 -1
  1181. package/dist/components/ui/skeleton.cjs +0 -2
  1182. package/dist/components/ui/skeleton.cjs.map +0 -1
  1183. package/dist/components/ui/skeleton.js +0 -24
  1184. package/dist/components/ui/skeleton.js.map +0 -1
  1185. package/dist/components/ui/slider.cjs +0 -2
  1186. package/dist/components/ui/slider.cjs.map +0 -1
  1187. package/dist/components/ui/slider.js +0 -60
  1188. package/dist/components/ui/slider.js.map +0 -1
  1189. package/dist/components/ui/sonner.cjs +0 -2
  1190. package/dist/components/ui/sonner.cjs.map +0 -1
  1191. package/dist/components/ui/sonner.js +0 -37
  1192. package/dist/components/ui/sonner.js.map +0 -1
  1193. package/dist/components/ui/spinner.cjs +0 -2
  1194. package/dist/components/ui/spinner.cjs.map +0 -1
  1195. package/dist/components/ui/spinner.js +0 -39
  1196. package/dist/components/ui/spinner.js.map +0 -1
  1197. package/dist/components/ui/switch.cjs +0 -2
  1198. package/dist/components/ui/switch.cjs.map +0 -1
  1199. package/dist/components/ui/switch.js +0 -32
  1200. package/dist/components/ui/switch.js.map +0 -1
  1201. package/dist/components/ui/table.cjs +0 -2
  1202. package/dist/components/ui/table.cjs.map +0 -1
  1203. package/dist/components/ui/table.js +0 -152
  1204. package/dist/components/ui/table.js.map +0 -1
  1205. package/dist/components/ui/tabs.cjs +0 -2
  1206. package/dist/components/ui/tabs.cjs.map +0 -1
  1207. package/dist/components/ui/tabs.js +0 -92
  1208. package/dist/components/ui/tabs.js.map +0 -1
  1209. package/dist/components/ui/tetrascience-icon.cjs +0 -2
  1210. package/dist/components/ui/tetrascience-icon.cjs.map +0 -1
  1211. package/dist/components/ui/tetrascience-icon.js +0 -46
  1212. package/dist/components/ui/tetrascience-icon.js.map +0 -1
  1213. package/dist/components/ui/textarea.cjs +0 -2
  1214. package/dist/components/ui/textarea.cjs.map +0 -1
  1215. package/dist/components/ui/textarea.js +0 -19
  1216. package/dist/components/ui/textarea.js.map +0 -1
  1217. package/dist/components/ui/toggle-group.cjs +0 -2
  1218. package/dist/components/ui/toggle-group.cjs.map +0 -1
  1219. package/dist/components/ui/toggle-group.js +0 -77
  1220. package/dist/components/ui/toggle-group.js.map +0 -1
  1221. package/dist/components/ui/toggle.cjs +0 -2
  1222. package/dist/components/ui/toggle.cjs.map +0 -1
  1223. package/dist/components/ui/toggle.js +0 -44
  1224. package/dist/components/ui/toggle.js.map +0 -1
  1225. package/dist/components/ui/tooltip.cjs +0 -2
  1226. package/dist/components/ui/tooltip.cjs.map +0 -1
  1227. package/dist/components/ui/tooltip.js +0 -56
  1228. package/dist/components/ui/tooltip.js.map +0 -1
  1229. package/dist/databricks.d.ts +0 -129
  1230. package/dist/providers/athena.d.ts +0 -9
  1231. package/dist/providers/databricks.d.ts +0 -9
  1232. package/dist/providers/snowflake.d.ts +0 -9
  1233. package/dist/snowflake.d.ts +0 -125
  1234. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/peakDetection.cjs +0 -0
  1235. /package/dist/components/charts/{ChromatogramChart → Chromatogram}/peakDetection.js +0 -0
  1236. /package/dist/{components/composed → composed}/tdp-url.cjs +0 -0
  1237. /package/dist/{components/composed → composed}/tdp-url.js +0 -0
  1238. /package/dist/{components/ui → ui}/aspect-ratio.cjs +0 -0
  1239. /package/dist/{components/ui → ui}/aspect-ratio.js +0 -0
  1240. /package/dist/{components/ui → ui}/collapsible.cjs +0 -0
  1241. /package/dist/{components/ui → ui}/collapsible.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Histogram.cjs","sources":["../../../../src/components/charts/Histogram/Histogram.tsx"],"sourcesContent":["import Plotly from \"plotly.js-dist\";\nimport React, { useEffect, useRef, useMemo } from \"react\";\n\nimport { useChartTooltip } from \"../ChartTooltip\";\n\nimport { useElementSize } from \"@/hooks/use-element-size\";\nimport { usePlotlyTheme } from \"@/hooks/use-plotly-theme\";\nimport { cn } from \"@/lib/utils\";\nimport { CHART_COLORS } from \"@/utils/colors\";\nimport \"./Histogram.scss\";\n\n/** Exponent coefficient for normal distribution calculation */\nconst NORMAL_DISTRIBUTION_EXPONENT_COEFF = -0.5;\n\ninterface HistogramDataSeries {\n x: number[];\n name: string;\n color?: string;\n autobinx?: boolean;\n xbins?: {\n start: number;\n end: number;\n size: number;\n };\n opacity?: number;\n showDistributionLine?: boolean;\n lineWidth?: number;\n}\n\ntype HistogramProps = {\n dataSeries: HistogramDataSeries | HistogramDataSeries[];\n /**\n * Fixed width in pixels. When omitted, the chart fills its container and\n * tracks the container's width via a `ResizeObserver`.\n */\n width?: number;\n /**\n * Fixed height in pixels. When omitted, the chart fills its container and\n * tracks the container's height via a `ResizeObserver`.\n */\n height?: number;\n title?: string;\n xTitle?: string;\n yTitle?: string;\n bargap?: number;\n showDistributionLine?: boolean;\n};\n\nconst calculateMean = (data: number[]): number => {\n const sum = data.reduce((acc, val) => acc + val, 0);\n return sum / data.length;\n};\n\nconst calculateStdDev = (data: number[], mean: number): number => {\n const squaredDiffs = data.map((value) => Math.pow(value - mean, 2));\n const variance =\n squaredDiffs.reduce((acc, val) => acc + val, 0) / data.length;\n return Math.sqrt(variance);\n};\n\nconst generateNormalDistributionPoints = (\n mean: number,\n stdDev: number,\n start: number,\n end: number,\n points = 100\n): { x: number[]; y: number[] } => {\n const xValues: number[] = [];\n const yValues: number[] = [];\n\n const step = (end - start) / (points - 1);\n\n for (let i = 0; i < points; i++) {\n const x = start + i * step;\n xValues.push(x);\n\n const exponent = NORMAL_DISTRIBUTION_EXPONENT_COEFF * Math.pow((x - mean) / stdDev, 2);\n const y = (1 / (stdDev * Math.sqrt(2 * Math.PI))) * Math.exp(exponent);\n yValues.push(y);\n }\n\n return { x: xValues, y: yValues };\n};\n\nconst scaleDistributionCurve = (\n yValues: number[],\n histogramData: number[],\n bins: { start: number; end: number; size: number }\n): number[] => {\n const binCount = Math.ceil((bins.end - bins.start) / bins.size);\n const binFrequencies = Array(binCount).fill(0);\n\n histogramData.forEach((value) => {\n if (value >= bins.start && value <= bins.end) {\n const binIndex = Math.floor((value - bins.start) / bins.size);\n binFrequencies[binIndex]++;\n }\n });\n\n const maxBinFrequency = Math.max(...binFrequencies);\n const maxCurveValue = Math.max(...yValues);\n\n const scaleFactor = maxBinFrequency / maxCurveValue;\n\n return yValues.map((y) => y * scaleFactor);\n};\n\nconst Histogram: React.FC<HistogramProps> = ({\n dataSeries,\n width,\n height,\n title = \"Histogram\",\n xTitle = \"X Axis\",\n yTitle = \"Frequency\",\n bargap = 0.2,\n showDistributionLine = false,\n}) => {\n const plotRef = useRef<HTMLDivElement>(null);\n const theme = usePlotlyTheme();\n const { bindTooltip, tooltipElement } = useChartTooltip({ xLabel: xTitle, yLabel: yTitle });\n\n // Omitted width/height → fill the container and track its measured size;\n // explicit pixel values override. Histogram has its own HTML title + legend,\n // so we measure a wrapper around just the Plotly canvas. See AreaGraph for\n // the reference pattern.\n const [plotAreaRef, measured] = useElementSize<HTMLDivElement>();\n const resolvedWidth = width ?? measured.width;\n const resolvedHeight = height ?? measured.height;\n const hasSize = resolvedWidth > 0 && resolvedHeight > 0;\n // Fill is per-dimension: omit width to fill the container width, omit height\n // to fill its height (so e.g. a fixed width with a container-driven height works).\n const fillWidth = width === undefined;\n const fillHeight = height === undefined;\n const sizeRef = useRef({ width: resolvedWidth, height: resolvedHeight });\n sizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n const plotInitedRef = useRef(false);\n // Size last applied to the plot, so the resize effect can skip a redundant\n // relayout right after newPlot already drew at that size.\n const appliedSizeRef = useRef({ width: 0, height: 0 });\n const seriesArray = useMemo(\n () => (Array.isArray(dataSeries) ? dataSeries : [dataSeries]),\n [dataSeries],\n );\n const effectiveBarMode = useMemo<\n \"stack\" | \"group\" | \"overlay\" | \"relative\" | undefined\n >(() => (seriesArray.length > 1 ? \"stack\" : undefined), [seriesArray.length]);\n\n const defaultColors = CHART_COLORS;\n\n const seriesWithColors = useMemo(() => {\n return seriesArray.map((series, index) => {\n const hasDistributionLine =\n typeof series.showDistributionLine === \"undefined\"\n ? showDistributionLine\n : series.showDistributionLine;\n\n return {\n ...series,\n color: series.color || defaultColors[index % defaultColors.length],\n opacity: hasDistributionLine ? 0.5 : series.opacity || 1,\n showDistributionLine: hasDistributionLine,\n lineWidth: series.lineWidth || 3,\n };\n });\n }, [seriesArray, showDistributionLine, defaultColors]);\n\n const gridColor = theme.gridColor;\n\n const histogramData = useMemo(\n () =>\n seriesWithColors.map((series) => ({\n type: \"histogram\" as const,\n x: series.x,\n name: series.name,\n marker: {\n color: series.color,\n line: {\n color: theme.paperBg,\n width: 1,\n },\n opacity: series.opacity,\n },\n autobinx: series.autobinx,\n xbins: series.xbins,\n hoverinfo: \"none\" as const,\n })),\n [seriesWithColors, theme],\n );\n\n const distributionLines = useMemo(\n () =>\n seriesWithColors\n .filter((series) => series.showDistributionLine)\n .map((series) => {\n const mean = calculateMean(series.x);\n const stdDev = calculateStdDev(series.x, mean);\n\n const min = Math.min(...series.x);\n const max = Math.max(...series.x);\n const range = max - min;\n const start = min - range * 0.1;\n const end = max + range * 0.1;\n\n const bins = series.xbins || {\n start: start,\n end: end,\n size: range / 10,\n };\n\n const curvePoints = generateNormalDistributionPoints(\n mean,\n stdDev,\n start,\n end,\n 100,\n );\n\n const scaledYValues = scaleDistributionCurve(\n curvePoints.y,\n series.x,\n bins,\n );\n\n return {\n type: \"scatter\" as const,\n x: curvePoints.x,\n y: scaledYValues,\n mode: \"lines\" as const,\n name: `${series.name} Distribution`,\n line: {\n color: series.color,\n width: series.lineWidth,\n },\n hoverinfo: \"none\" as const,\n };\n }),\n [seriesWithColors],\n );\n\n const plotData = useMemo(\n () => [...histogramData, ...distributionLines],\n [histogramData, distributionLines],\n );\n\n useEffect(() => {\n if (!plotRef.current || !hasSize) return;\n\n const layout = {\n width: sizeRef.current.width,\n height: sizeRef.current.height,\n font: {\n family: \"Inter, sans-serif\",\n },\n showlegend: false,\n margin: { l: 90, r: 40, b: 80, t: 40 },\n xaxis: {\n title: {\n text: xTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: \"Inter, sans-serif\",\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n automargin: true,\n },\n yaxis: {\n title: {\n text: yTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: \"Inter, sans-serif\",\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n rangemode: \"tozero\" as const,\n automargin: true,\n },\n barmode: effectiveBarMode,\n bargap: bargap,\n paper_bgcolor: theme.paperBg,\n plot_bgcolor: theme.plotBg,\n };\n\n const config = {\n // Sizing is driven from the measured container; disable Plotly's own\n // window-resize responsiveness (it can't see container resizes).\n responsive: false,\n displayModeBar: false,\n displaylogo: false,\n };\n\n Plotly.newPlot(plotRef.current, plotData, layout, config);\n bindTooltip(plotRef.current);\n\n // Capture ref value for cleanup\n const plotElement = plotRef.current;\n plotInitedRef.current = true;\n appliedSizeRef.current = { ...sizeRef.current };\n\n return () => {\n if (plotElement) {\n Plotly.purge(plotElement);\n plotInitedRef.current = false;\n }\n };\n }, [hasSize, xTitle, yTitle, bargap, plotData, effectiveBarMode, gridColor, theme, bindTooltip]);\n\n // Resize in place when the measured/overridden size changes — cheaper than\n // recreating the plot, and it preserves tooltip/event bindings.\n useEffect(() => {\n const plotElement = plotRef.current;\n if (!plotElement || !plotInitedRef.current || resolvedWidth <= 0 || resolvedHeight <= 0) {\n return;\n }\n // newPlot already drew at the current size; skip the redundant relayout\n // (it would queue an automargin redraw that can reject if we unmount first).\n if (\n appliedSizeRef.current.width === resolvedWidth &&\n appliedSizeRef.current.height === resolvedHeight\n ) {\n return;\n }\n appliedSizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n // Swallow rejections from a relayout that races an unmount/purge.\n void Plotly.relayout(plotElement, { width: resolvedWidth, height: resolvedHeight }).catch(\n () => {},\n );\n }, [resolvedWidth, resolvedHeight]);\n\n const ChartLegend: React.FC<{\n series: Array<{ name: string; color: string }>;\n }> = ({ series }) => {\n const items = series.map((item, i) => (\n <React.Fragment key={item.name}>\n <div className=\"legend-item\">\n <span className=\"color-box\" style={{ background: item.color }} />\n {item.name}\n {i < series.length - 1 && <span className=\"divider\" />}\n </div>\n </React.Fragment>\n ));\n\n const rows = [];\n const rowSize = 6;\n for (let i = 0; i < items.length; i += rowSize) {\n rows.push(\n <div className=\"legend-row\" key={i}>\n {items.slice(i, i + rowSize)}\n </div>\n );\n }\n\n return <div className=\"legend-container\">{rows}</div>;\n };\n\n return (\n <div\n className={cn(\"histogram-container relative\", fillWidth && \"w-full\", fillHeight && \"h-full\")}\n style={width === undefined ? undefined : { width }}\n >\n <div className={cn(\"chart-container\", fillHeight && \"flex h-full flex-col\")}>\n {title && (\n <div className=\"title-container\">\n <h2 className=\"title\">{title}</h2>\n </div>\n )}\n {/* Measured plot area — flexes to fill the space left by the title and\n legend in fill mode, so the Plotly canvas tracks it. */}\n <div ref={plotAreaRef} className={cn(fillHeight && \"min-h-0 flex-1\")}>\n <div\n ref={plotRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n margin: \"0\",\n }}\n />\n </div>\n <ChartLegend series={seriesWithColors} />\n </div>\n {tooltipElement}\n </div>\n );\n};\n\nexport { Histogram };\nexport type { HistogramDataSeries, HistogramProps };\n"],"names":["NORMAL_DISTRIBUTION_EXPONENT_COEFF","calculateMean","data","acc","val","calculateStdDev","mean","variance","value","generateNormalDistributionPoints","stdDev","start","end","points","xValues","yValues","step","i","x","exponent","y","scaleDistributionCurve","histogramData","bins","binCount","binFrequencies","binIndex","maxBinFrequency","maxCurveValue","scaleFactor","Histogram","dataSeries","width","height","title","xTitle","yTitle","bargap","showDistributionLine","plotRef","useRef","theme","usePlotlyTheme","bindTooltip","tooltipElement","useChartTooltip","plotAreaRef","measured","useElementSize","resolvedWidth","resolvedHeight","hasSize","fillWidth","fillHeight","sizeRef","plotInitedRef","appliedSizeRef","seriesArray","useMemo","effectiveBarMode","defaultColors","CHART_COLORS","seriesWithColors","series","index","hasDistributionLine","gridColor","distributionLines","min","max","range","curvePoints","scaledYValues","plotData","useEffect","layout","config","Plotly","plotElement","ChartLegend","items","item","jsx","React","jsxs","rows","rowSize","cn"],"mappings":"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"}
1
+ {"version":3,"file":"Histogram.cjs","sources":["../../../../src/components/charts/Histogram/Histogram.tsx"],"sourcesContent":["import React, { useEffect, useRef, useMemo } from \"react\";\n\nimport { useChartTooltip } from \"../ChartTooltip\";\nimport { getLoadedPlotly, loadPlotly } from \"../plotly-loader\";\n\nimport { useElementSize } from \"@/hooks/use-element-size\";\nimport { CHART_FONT_FAMILY, usePlotlyTheme } from \"@/hooks/use-plotly-theme\";\nimport { cn } from \"@/lib/utils\";\nimport { CHART_COLORS } from \"@/utils/colors\";\nimport \"./Histogram.scss\";\n\n/** Exponent coefficient for normal distribution calculation */\nconst NORMAL_DISTRIBUTION_EXPONENT_COEFF = -0.5;\n\ninterface HistogramDataSeries {\n x: number[];\n name: string;\n color?: string;\n autobinx?: boolean;\n xbins?: {\n start: number;\n end: number;\n size: number;\n };\n opacity?: number;\n showDistributionLine?: boolean;\n lineWidth?: number;\n}\n\ntype HistogramProps = {\n dataSeries: HistogramDataSeries | HistogramDataSeries[];\n /**\n * Fixed width in pixels. When omitted, the chart fills its container and\n * tracks the container's width via a `ResizeObserver`.\n */\n width?: number;\n /**\n * Fixed height in pixels. When omitted, the chart fills its container and\n * tracks the container's height via a `ResizeObserver`.\n */\n height?: number;\n title?: string;\n xTitle?: string;\n yTitle?: string;\n bargap?: number;\n showDistributionLine?: boolean;\n};\n\nconst calculateMean = (data: number[]): number => {\n const sum = data.reduce((acc, val) => acc + val, 0);\n return sum / data.length;\n};\n\nconst calculateStdDev = (data: number[], mean: number): number => {\n const squaredDiffs = data.map((value) => Math.pow(value - mean, 2));\n const variance =\n squaredDiffs.reduce((acc, val) => acc + val, 0) / data.length;\n return Math.sqrt(variance);\n};\n\nconst generateNormalDistributionPoints = (\n mean: number,\n stdDev: number,\n start: number,\n end: number,\n points = 100\n): { x: number[]; y: number[] } => {\n const xValues: number[] = [];\n const yValues: number[] = [];\n\n const step = (end - start) / (points - 1);\n\n for (let i = 0; i < points; i++) {\n const x = start + i * step;\n xValues.push(x);\n\n const exponent = NORMAL_DISTRIBUTION_EXPONENT_COEFF * Math.pow((x - mean) / stdDev, 2);\n const y = (1 / (stdDev * Math.sqrt(2 * Math.PI))) * Math.exp(exponent);\n yValues.push(y);\n }\n\n return { x: xValues, y: yValues };\n};\n\nconst scaleDistributionCurve = (\n yValues: number[],\n histogramData: number[],\n bins: { start: number; end: number; size: number }\n): number[] => {\n const binCount = Math.ceil((bins.end - bins.start) / bins.size);\n const binFrequencies = Array(binCount).fill(0);\n\n histogramData.forEach((value) => {\n if (value >= bins.start && value <= bins.end) {\n const binIndex = Math.floor((value - bins.start) / bins.size);\n binFrequencies[binIndex]++;\n }\n });\n\n const maxBinFrequency = Math.max(...binFrequencies);\n const maxCurveValue = Math.max(...yValues);\n\n const scaleFactor = maxBinFrequency / maxCurveValue;\n\n return yValues.map((y) => y * scaleFactor);\n};\n\nconst Histogram: React.FC<HistogramProps> = ({\n dataSeries,\n width,\n height,\n title = \"Histogram\",\n xTitle = \"X Axis\",\n yTitle = \"Frequency\",\n bargap = 0.2,\n showDistributionLine = false,\n}) => {\n const plotRef = useRef<HTMLDivElement>(null);\n const theme = usePlotlyTheme();\n const { bindTooltip, tooltipElement } = useChartTooltip({ xLabel: xTitle, yLabel: yTitle });\n\n // Omitted width/height → fill the container and track its measured size;\n // explicit pixel values override. Histogram has its own HTML title + legend,\n // so we measure a wrapper around just the Plotly canvas. See AreaPlot for\n // the reference pattern.\n const [plotAreaRef, measured] = useElementSize<HTMLDivElement>();\n const resolvedWidth = width ?? measured.width;\n const resolvedHeight = height ?? measured.height;\n const hasSize = resolvedWidth > 0 && resolvedHeight > 0;\n // Fill is per-dimension: omit width to fill the container width, omit height\n // to fill its height (so e.g. a fixed width with a container-driven height works).\n const fillWidth = width === undefined;\n const fillHeight = height === undefined;\n const sizeRef = useRef({ width: resolvedWidth, height: resolvedHeight });\n sizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n const plotInitedRef = useRef(false);\n // Size last applied to the plot, so the resize effect can skip a redundant\n // relayout right after newPlot already drew at that size.\n const appliedSizeRef = useRef({ width: 0, height: 0 });\n const seriesArray = useMemo(\n () => (Array.isArray(dataSeries) ? dataSeries : [dataSeries]),\n [dataSeries],\n );\n const effectiveBarMode = useMemo<\n \"stack\" | \"group\" | \"overlay\" | \"relative\" | undefined\n >(() => (seriesArray.length > 1 ? \"stack\" : undefined), [seriesArray.length]);\n\n const defaultColors = CHART_COLORS;\n\n const seriesWithColors = useMemo(() => {\n return seriesArray.map((series, index) => {\n const hasDistributionLine =\n typeof series.showDistributionLine === \"undefined\"\n ? showDistributionLine\n : series.showDistributionLine;\n\n return {\n ...series,\n color: series.color || defaultColors[index % defaultColors.length],\n opacity: hasDistributionLine ? 0.5 : series.opacity || 1,\n showDistributionLine: hasDistributionLine,\n lineWidth: series.lineWidth || 3,\n };\n });\n }, [seriesArray, showDistributionLine, defaultColors]);\n\n const gridColor = theme.gridColor;\n\n const histogramData = useMemo(\n () =>\n seriesWithColors.map((series) => ({\n type: \"histogram\" as const,\n x: series.x,\n name: series.name,\n marker: {\n color: series.color,\n line: {\n color: theme.paperBg,\n width: 1,\n },\n opacity: series.opacity,\n },\n autobinx: series.autobinx,\n xbins: series.xbins,\n hoverinfo: \"none\" as const,\n })),\n [seriesWithColors, theme],\n );\n\n const distributionLines = useMemo(\n () =>\n seriesWithColors\n .filter((series) => series.showDistributionLine)\n .map((series) => {\n const mean = calculateMean(series.x);\n const stdDev = calculateStdDev(series.x, mean);\n\n const min = Math.min(...series.x);\n const max = Math.max(...series.x);\n const range = max - min;\n const start = min - range * 0.1;\n const end = max + range * 0.1;\n\n const bins = series.xbins || {\n start: start,\n end: end,\n size: range / 10,\n };\n\n const curvePoints = generateNormalDistributionPoints(\n mean,\n stdDev,\n start,\n end,\n 100,\n );\n\n const scaledYValues = scaleDistributionCurve(\n curvePoints.y,\n series.x,\n bins,\n );\n\n return {\n type: \"scatter\" as const,\n x: curvePoints.x,\n y: scaledYValues,\n mode: \"lines\" as const,\n name: `${series.name} Distribution`,\n line: {\n color: series.color,\n width: series.lineWidth,\n },\n hoverinfo: \"none\" as const,\n };\n }),\n [seriesWithColors],\n );\n\n const plotData = useMemo(\n () => [...histogramData, ...distributionLines],\n [histogramData, distributionLines],\n );\n\n useEffect(() => {\n if (!plotRef.current || !hasSize) return;\n\n const layout = {\n width: sizeRef.current.width,\n height: sizeRef.current.height,\n font: {\n family: CHART_FONT_FAMILY,\n },\n showlegend: false,\n margin: { l: 90, r: 40, b: 80, t: 40 },\n xaxis: {\n title: {\n text: xTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: CHART_FONT_FAMILY,\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n automargin: true,\n },\n yaxis: {\n title: {\n text: yTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: CHART_FONT_FAMILY,\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n rangemode: \"tozero\" as const,\n automargin: true,\n },\n barmode: effectiveBarMode,\n bargap: bargap,\n paper_bgcolor: theme.paperBg,\n plot_bgcolor: theme.plotBg,\n };\n\n const config = {\n // Sizing is driven from the measured container; disable Plotly's own\n // window-resize responsiveness (it can't see container resizes).\n responsive: false,\n displayModeBar: false,\n displaylogo: false,\n };\n\n // Plotly is loaded lazily so it stays out of the consumer's main chunk\n // (SW-2007); the draw is skipped if the effect re-runs or unmounts first.\n let cancelled = false;\n let plotElement: HTMLDivElement | null = null;\n void loadPlotly().then((plotly) => {\n if (cancelled || !plotRef.current) return;\n plotly.newPlot(plotRef.current, plotData, layout, config);\n bindTooltip(plotRef.current);\n\n // Capture ref value for cleanup\n plotElement = plotRef.current;\n plotInitedRef.current = true;\n appliedSizeRef.current = { ...sizeRef.current };\n });\n\n return () => {\n cancelled = true;\n if (plotElement) {\n getLoadedPlotly().purge(plotElement);\n plotInitedRef.current = false;\n }\n };\n }, [hasSize, xTitle, yTitle, bargap, plotData, effectiveBarMode, gridColor, theme, bindTooltip]);\n\n // Resize in place when the measured/overridden size changes — cheaper than\n // recreating the plot, and it preserves tooltip/event bindings.\n useEffect(() => {\n const plotElement = plotRef.current;\n if (!plotElement || !plotInitedRef.current || resolvedWidth <= 0 || resolvedHeight <= 0) {\n return;\n }\n // newPlot already drew at the current size; skip the redundant relayout\n // (it would queue an automargin redraw that can reject if we unmount first).\n if (\n appliedSizeRef.current.width === resolvedWidth &&\n appliedSizeRef.current.height === resolvedHeight\n ) {\n return;\n }\n appliedSizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n // Swallow rejections from a relayout that races an unmount/purge.\n // plotInitedRef guarantees Plotly finished loading, so sync access is safe.\n void getLoadedPlotly()\n .relayout(plotElement, { width: resolvedWidth, height: resolvedHeight })\n .catch(() => {});\n }, [resolvedWidth, resolvedHeight]);\n\n const ChartLegend: React.FC<{\n series: Array<{ name: string; color: string }>;\n }> = ({ series }) => {\n const items = series.map((item, i) => (\n <React.Fragment key={item.name}>\n <div className=\"legend-item\">\n <span className=\"color-box\" style={{ background: item.color }} />\n {item.name}\n {i < series.length - 1 && <span className=\"divider\" />}\n </div>\n </React.Fragment>\n ));\n\n const rows = [];\n const rowSize = 6;\n for (let i = 0; i < items.length; i += rowSize) {\n rows.push(\n <div className=\"legend-row\" key={i}>\n {items.slice(i, i + rowSize)}\n </div>\n );\n }\n\n return <div className=\"legend-container\">{rows}</div>;\n };\n\n return (\n <div\n className={cn(\"histogram-container relative\", fillWidth && \"w-full\", fillHeight && \"h-full\")}\n style={width === undefined ? undefined : { width }}\n >\n <div className={cn(\"chart-container\", fillHeight && \"flex h-full flex-col\")}>\n {title && (\n <div className=\"title-container\">\n <h2 className=\"title\">{title}</h2>\n </div>\n )}\n {/* Measured plot area — flexes to fill the space left by the title and\n legend in fill mode, so the Plotly canvas tracks it. */}\n <div ref={plotAreaRef} className={cn(fillHeight && \"min-h-0 flex-1\")}>\n <div\n ref={plotRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n margin: \"0\",\n }}\n />\n </div>\n <ChartLegend series={seriesWithColors} />\n </div>\n {tooltipElement}\n </div>\n );\n};\n\nexport { Histogram };\nexport type { HistogramDataSeries, HistogramProps };\n"],"names":["NORMAL_DISTRIBUTION_EXPONENT_COEFF","calculateMean","data","acc","val","calculateStdDev","mean","variance","value","generateNormalDistributionPoints","stdDev","start","end","points","xValues","yValues","step","i","x","exponent","y","scaleDistributionCurve","histogramData","bins","binCount","binFrequencies","binIndex","maxBinFrequency","maxCurveValue","scaleFactor","Histogram","dataSeries","width","height","title","xTitle","yTitle","bargap","showDistributionLine","plotRef","useRef","theme","usePlotlyTheme","bindTooltip","tooltipElement","useChartTooltip","plotAreaRef","measured","useElementSize","resolvedWidth","resolvedHeight","hasSize","fillWidth","fillHeight","sizeRef","plotInitedRef","appliedSizeRef","seriesArray","useMemo","effectiveBarMode","defaultColors","CHART_COLORS","seriesWithColors","series","index","hasDistributionLine","gridColor","distributionLines","min","max","range","curvePoints","scaledYValues","plotData","useEffect","layout","CHART_FONT_FAMILY","config","cancelled","plotElement","loadPlotly","plotly","getLoadedPlotly","ChartLegend","items","item","jsx","React","jsxs","rows","rowSize","cn"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { default as React } from 'react';
2
+ interface HistogramDataSeries {
3
+ x: number[];
4
+ name: string;
5
+ color?: string;
6
+ autobinx?: boolean;
7
+ xbins?: {
8
+ start: number;
9
+ end: number;
10
+ size: number;
11
+ };
12
+ opacity?: number;
13
+ showDistributionLine?: boolean;
14
+ lineWidth?: number;
15
+ }
16
+ type HistogramProps = {
17
+ dataSeries: HistogramDataSeries | HistogramDataSeries[];
18
+ /**
19
+ * Fixed width in pixels. When omitted, the chart fills its container and
20
+ * tracks the container's width via a `ResizeObserver`.
21
+ */
22
+ width?: number;
23
+ /**
24
+ * Fixed height in pixels. When omitted, the chart fills its container and
25
+ * tracks the container's height via a `ResizeObserver`.
26
+ */
27
+ height?: number;
28
+ title?: string;
29
+ xTitle?: string;
30
+ yTitle?: string;
31
+ bargap?: number;
32
+ showDistributionLine?: boolean;
33
+ };
34
+ declare const Histogram: React.FC<HistogramProps>;
35
+ export { Histogram };
36
+ export type { HistogramDataSeries, HistogramProps };
@@ -1,67 +1,67 @@
1
- import { jsxs as I, jsx as u } from "react/jsx-runtime";
2
- import A from "plotly.js-dist";
3
- import G, { useRef as k, useMemo as x, useEffect as V } from "react";
4
- import { useChartTooltip as J } from "../ChartTooltip/ChartTooltip.js";
5
- import { useElementSize as K } from "../../../hooks/use-element-size.js";
6
- import { usePlotlyTheme as Q } from "../../../hooks/use-plotly-theme.js";
7
- import { cn as _ } from "../../../lib/utils.js";
8
- import { CHART_COLORS as Z } from "../../../utils/colors.js";
1
+ import { jsxs as _, jsx as d } from "react/jsx-runtime";
2
+ import J, { useRef as k, useMemo as y, useEffect as V } from "react";
3
+ import { useChartTooltip as K } from "../ChartTooltip/ChartTooltip.js";
4
+ import { loadPlotly as Q, getLoadedPlotly as j } from "../plotly-loader.js";
5
+ import { useElementSize as Z } from "../../../hooks/use-element-size.js";
6
+ import { usePlotlyTheme as tt, CHART_FONT_FAMILY as E } from "../../../hooks/use-plotly-theme.js";
7
+ import { cn as F } from "../../../lib/utils.js";
8
+ import { CHART_COLORS as ot } from "../../../utils/colors.js";
9
9
  /* empty css */
10
- const tt = -0.5, ot = (r) => r.reduce((e, s) => e + s, 0) / r.length, et = (r, c) => {
11
- const s = r.map((i) => Math.pow(i - c, 2)).reduce((i, a) => i + a, 0) / r.length;
12
- return Math.sqrt(s);
13
- }, nt = (r, c, e, s, i = 100) => {
14
- const a = [], p = [], g = (s - e) / (i - 1);
15
- for (let n = 0; n < i; n++) {
16
- const o = e + n * g;
17
- a.push(o);
18
- const b = tt * Math.pow((o - r) / c, 2), z = 1 / (c * Math.sqrt(2 * Math.PI)) * Math.exp(b);
19
- p.push(z);
10
+ const et = -0.5, nt = (r) => r.reduce((n, a) => n + a, 0) / r.length, rt = (r, l) => {
11
+ const a = r.map((c) => Math.pow(c - l, 2)).reduce((c, s) => c + s, 0) / r.length;
12
+ return Math.sqrt(a);
13
+ }, it = (r, l, n, a, c = 100) => {
14
+ const s = [], g = [], x = (a - n) / (c - 1);
15
+ for (let o = 0; o < c; o++) {
16
+ const e = n + o * x;
17
+ s.push(e);
18
+ const b = et * Math.pow((e - r) / l, 2), z = 1 / (l * Math.sqrt(2 * Math.PI)) * Math.exp(b);
19
+ g.push(z);
20
20
  }
21
- return { x: a, y: p };
22
- }, rt = (r, c, e) => {
23
- const s = Math.ceil((e.end - e.start) / e.size), i = Array(s).fill(0);
24
- c.forEach((n) => {
25
- if (n >= e.start && n <= e.end) {
26
- const o = Math.floor((n - e.start) / e.size);
27
- i[o]++;
21
+ return { x: s, y: g };
22
+ }, ct = (r, l, n) => {
23
+ const a = Math.ceil((n.end - n.start) / n.size), c = Array(a).fill(0);
24
+ l.forEach((o) => {
25
+ if (o >= n.start && o <= n.end) {
26
+ const e = Math.floor((o - n.start) / n.size);
27
+ c[e]++;
28
28
  }
29
29
  });
30
- const a = Math.max(...i), p = Math.max(...r), g = a / p;
31
- return r.map((n) => n * g);
32
- }, ft = ({
30
+ const s = Math.max(...c), g = Math.max(...r), x = s / g;
31
+ return r.map((o) => o * x);
32
+ }, gt = ({
33
33
  dataSeries: r,
34
- width: c,
35
- height: e,
36
- title: s = "Histogram",
37
- xTitle: i = "X Axis",
38
- yTitle: a = "Frequency",
39
- bargap: p = 0.2,
40
- showDistributionLine: g = !1
34
+ width: l,
35
+ height: n,
36
+ title: a = "Histogram",
37
+ xTitle: c = "X Axis",
38
+ yTitle: s = "Frequency",
39
+ bargap: g = 0.2,
40
+ showDistributionLine: x = !1
41
41
  }) => {
42
- const n = k(null), o = Q(), { bindTooltip: b, tooltipElement: z } = J({ xLabel: i, yLabel: a }), [j, q] = K(), m = c ?? q.width, f = e ?? q.height, B = m > 0 && f > 0, X = c === void 0, D = e === void 0, M = k({ width: m, height: f });
43
- M.current = { width: m, height: f };
44
- const R = k(!1), C = k({ width: 0, height: 0 }), N = x(
42
+ const o = k(null), e = tt(), { bindTooltip: b, tooltipElement: z } = K({ xLabel: c, yLabel: s }), [X, P] = Z(), f = l ?? P.width, p = n ?? P.height, q = f > 0 && p > 0, Y = l === void 0, D = n === void 0, M = k({ width: f, height: p });
43
+ M.current = { width: f, height: p };
44
+ const L = k(!1), C = k({ width: 0, height: 0 }), N = y(
45
45
  () => Array.isArray(r) ? r : [r],
46
46
  [r]
47
- ), F = x(() => N.length > 1 ? "stack" : void 0, [N.length]), L = Z, y = x(() => N.map((t, d) => {
48
- const h = typeof t.showDistributionLine > "u" ? g : t.showDistributionLine;
47
+ ), B = y(() => N.length > 1 ? "stack" : void 0, [N.length]), R = ot, v = y(() => N.map((t, u) => {
48
+ const h = typeof t.showDistributionLine > "u" ? x : t.showDistributionLine;
49
49
  return {
50
50
  ...t,
51
- color: t.color || L[d % L.length],
51
+ color: t.color || R[u % R.length],
52
52
  opacity: h ? 0.5 : t.opacity || 1,
53
53
  showDistributionLine: h,
54
54
  lineWidth: t.lineWidth || 3
55
55
  };
56
- }), [N, g, L]), E = o.gridColor, P = x(
57
- () => y.map((t) => ({
56
+ }), [N, x, R]), A = e.gridColor, I = y(
57
+ () => v.map((t) => ({
58
58
  type: "histogram",
59
59
  x: t.x,
60
60
  name: t.name,
61
61
  marker: {
62
62
  color: t.color,
63
63
  line: {
64
- color: o.paperBg,
64
+ color: e.paperBg,
65
65
  width: 1
66
66
  },
67
67
  opacity: t.opacity
@@ -70,28 +70,28 @@ const tt = -0.5, ot = (r) => r.reduce((e, s) => e + s, 0) / r.length, et = (r, c
70
70
  xbins: t.xbins,
71
71
  hoverinfo: "none"
72
72
  })),
73
- [y, o]
74
- ), O = x(
75
- () => y.filter((t) => t.showDistributionLine).map((t) => {
76
- const d = ot(t.x), h = et(t.x, d), w = Math.min(...t.x), l = Math.max(...t.x), v = l - w, W = w - v * 0.1, H = l + v * 0.1, Y = t.xbins || {
77
- start: W,
78
- end: H,
79
- size: v / 10
80
- }, T = nt(
81
- d,
73
+ [v, e]
74
+ ), O = y(
75
+ () => v.filter((t) => t.showDistributionLine).map((t) => {
76
+ const u = nt(t.x), h = rt(t.x, u), m = Math.min(...t.x), i = Math.max(...t.x), w = i - m, S = m - w * 0.1, W = i + w * 0.1, $ = t.xbins || {
77
+ start: S,
78
+ end: W,
79
+ size: w / 10
80
+ }, T = it(
81
+ u,
82
82
  h,
83
+ S,
83
84
  W,
84
- H,
85
85
  100
86
- ), $ = rt(
86
+ ), G = ct(
87
87
  T.y,
88
88
  t.x,
89
- Y
89
+ $
90
90
  );
91
91
  return {
92
92
  type: "scatter",
93
93
  x: T.x,
94
- y: $,
94
+ y: G,
95
95
  mode: "lines",
96
96
  name: `${t.name} Distribution`,
97
97
  line: {
@@ -101,111 +101,110 @@ const tt = -0.5, ot = (r) => r.reduce((e, s) => e + s, 0) / r.length, et = (r, c
101
101
  hoverinfo: "none"
102
102
  };
103
103
  }),
104
- [y]
105
- ), S = x(
106
- () => [...P, ...O],
107
- [P, O]
104
+ [v]
105
+ ), H = y(
106
+ () => [...I, ...O],
107
+ [I, O]
108
108
  );
109
109
  V(() => {
110
- if (!n.current || !B) return;
110
+ if (!o.current || !q) return;
111
111
  const t = {
112
112
  width: M.current.width,
113
113
  height: M.current.height,
114
114
  font: {
115
- family: "Inter, sans-serif"
115
+ family: E
116
116
  },
117
117
  showlegend: !1,
118
118
  margin: { l: 90, r: 40, b: 80, t: 40 },
119
119
  xaxis: {
120
120
  title: {
121
- text: i,
121
+ text: c,
122
122
  font: {
123
123
  size: 16,
124
- color: o.textSecondary,
125
- family: "Inter, sans-serif",
124
+ color: e.textSecondary,
125
+ family: E,
126
126
  weight: 400
127
127
  },
128
128
  standoff: 20
129
129
  },
130
- gridcolor: E,
131
- tickcolor: o.tickColor,
130
+ gridcolor: A,
131
+ tickcolor: e.tickColor,
132
132
  ticklen: 8,
133
133
  tickwidth: 1,
134
134
  ticks: "outside",
135
- linecolor: o.lineColor,
135
+ linecolor: e.lineColor,
136
136
  linewidth: 1,
137
137
  zeroline: !1,
138
138
  automargin: !0
139
139
  },
140
140
  yaxis: {
141
141
  title: {
142
- text: a,
142
+ text: s,
143
143
  font: {
144
144
  size: 16,
145
- color: o.textSecondary,
146
- family: "Inter, sans-serif",
145
+ color: e.textSecondary,
146
+ family: E,
147
147
  weight: 400
148
148
  },
149
149
  standoff: 20
150
150
  },
151
- gridcolor: E,
152
- tickcolor: o.tickColor,
151
+ gridcolor: A,
152
+ tickcolor: e.tickColor,
153
153
  ticklen: 8,
154
154
  tickwidth: 1,
155
155
  ticks: "outside",
156
- linecolor: o.lineColor,
156
+ linecolor: e.lineColor,
157
157
  linewidth: 1,
158
158
  zeroline: !1,
159
159
  rangemode: "tozero",
160
160
  automargin: !0
161
161
  },
162
- barmode: F,
163
- bargap: p,
164
- paper_bgcolor: o.paperBg,
165
- plot_bgcolor: o.plotBg
166
- }, d = {
162
+ barmode: B,
163
+ bargap: g,
164
+ paper_bgcolor: e.paperBg,
165
+ plot_bgcolor: e.plotBg
166
+ }, u = {
167
167
  // Sizing is driven from the measured container; disable Plotly's own
168
168
  // window-resize responsiveness (it can't see container resizes).
169
169
  responsive: !1,
170
170
  displayModeBar: !1,
171
171
  displaylogo: !1
172
172
  };
173
- A.newPlot(n.current, S, t, d), b(n.current);
174
- const h = n.current;
175
- return R.current = !0, C.current = { ...M.current }, () => {
176
- h && (A.purge(h), R.current = !1);
173
+ let h = !1, m = null;
174
+ return Q().then((i) => {
175
+ h || !o.current || (i.newPlot(o.current, H, t, u), b(o.current), m = o.current, L.current = !0, C.current = { ...M.current });
176
+ }), () => {
177
+ h = !0, m && (j().purge(m), L.current = !1);
177
178
  };
178
- }, [B, i, a, p, S, F, E, o, b]), V(() => {
179
- const t = n.current;
180
- !t || !R.current || m <= 0 || f <= 0 || C.current.width === m && C.current.height === f || (C.current = { width: m, height: f }, A.relayout(t, { width: m, height: f }).catch(
181
- () => {
182
- }
183
- ));
184
- }, [m, f]);
179
+ }, [q, c, s, g, H, B, A, e, b]), V(() => {
180
+ const t = o.current;
181
+ !t || !L.current || f <= 0 || p <= 0 || C.current.width === f && C.current.height === p || (C.current = { width: f, height: p }, j().relayout(t, { width: f, height: p }).catch(() => {
182
+ }));
183
+ }, [f, p]);
185
184
  const U = ({ series: t }) => {
186
- const d = t.map((l, v) => /* @__PURE__ */ u(G.Fragment, { children: /* @__PURE__ */ I("div", { className: "legend-item", children: [
187
- /* @__PURE__ */ u("span", { className: "color-box", style: { background: l.color } }),
188
- l.name,
189
- v < t.length - 1 && /* @__PURE__ */ u("span", { className: "divider" })
190
- ] }) }, l.name)), h = [], w = 6;
191
- for (let l = 0; l < d.length; l += w)
185
+ const u = t.map((i, w) => /* @__PURE__ */ d(J.Fragment, { children: /* @__PURE__ */ _("div", { className: "legend-item", children: [
186
+ /* @__PURE__ */ d("span", { className: "color-box", style: { background: i.color } }),
187
+ i.name,
188
+ w < t.length - 1 && /* @__PURE__ */ d("span", { className: "divider" })
189
+ ] }) }, i.name)), h = [], m = 6;
190
+ for (let i = 0; i < u.length; i += m)
192
191
  h.push(
193
- /* @__PURE__ */ u("div", { className: "legend-row", children: d.slice(l, l + w) }, l)
192
+ /* @__PURE__ */ d("div", { className: "legend-row", children: u.slice(i, i + m) }, i)
194
193
  );
195
- return /* @__PURE__ */ u("div", { className: "legend-container", children: h });
194
+ return /* @__PURE__ */ d("div", { className: "legend-container", children: h });
196
195
  };
197
- return /* @__PURE__ */ I(
196
+ return /* @__PURE__ */ _(
198
197
  "div",
199
198
  {
200
- className: _("histogram-container relative", X && "w-full", D && "h-full"),
201
- style: c === void 0 ? void 0 : { width: c },
199
+ className: F("histogram-container relative", Y && "w-full", D && "h-full"),
200
+ style: l === void 0 ? void 0 : { width: l },
202
201
  children: [
203
- /* @__PURE__ */ I("div", { className: _("chart-container", D && "flex h-full flex-col"), children: [
204
- s && /* @__PURE__ */ u("div", { className: "title-container", children: /* @__PURE__ */ u("h2", { className: "title", children: s }) }),
205
- /* @__PURE__ */ u("div", { ref: j, className: _(D && "min-h-0 flex-1"), children: /* @__PURE__ */ u(
202
+ /* @__PURE__ */ _("div", { className: F("chart-container", D && "flex h-full flex-col"), children: [
203
+ a && /* @__PURE__ */ d("div", { className: "title-container", children: /* @__PURE__ */ d("h2", { className: "title", children: a }) }),
204
+ /* @__PURE__ */ d("div", { ref: X, className: F(D && "min-h-0 flex-1"), children: /* @__PURE__ */ d(
206
205
  "div",
207
206
  {
208
- ref: n,
207
+ ref: o,
209
208
  style: {
210
209
  width: "100%",
211
210
  height: "100%",
@@ -213,7 +212,7 @@ const tt = -0.5, ot = (r) => r.reduce((e, s) => e + s, 0) / r.length, et = (r, c
213
212
  }
214
213
  }
215
214
  ) }),
216
- /* @__PURE__ */ u(U, { series: y })
215
+ /* @__PURE__ */ d(U, { series: v })
217
216
  ] }),
218
217
  z
219
218
  ]
@@ -221,6 +220,6 @@ const tt = -0.5, ot = (r) => r.reduce((e, s) => e + s, 0) / r.length, et = (r, c
221
220
  );
222
221
  };
223
222
  export {
224
- ft as Histogram
223
+ gt as Histogram
225
224
  };
226
225
  //# sourceMappingURL=Histogram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Histogram.js","sources":["../../../../src/components/charts/Histogram/Histogram.tsx"],"sourcesContent":["import Plotly from \"plotly.js-dist\";\nimport React, { useEffect, useRef, useMemo } from \"react\";\n\nimport { useChartTooltip } from \"../ChartTooltip\";\n\nimport { useElementSize } from \"@/hooks/use-element-size\";\nimport { usePlotlyTheme } from \"@/hooks/use-plotly-theme\";\nimport { cn } from \"@/lib/utils\";\nimport { CHART_COLORS } from \"@/utils/colors\";\nimport \"./Histogram.scss\";\n\n/** Exponent coefficient for normal distribution calculation */\nconst NORMAL_DISTRIBUTION_EXPONENT_COEFF = -0.5;\n\ninterface HistogramDataSeries {\n x: number[];\n name: string;\n color?: string;\n autobinx?: boolean;\n xbins?: {\n start: number;\n end: number;\n size: number;\n };\n opacity?: number;\n showDistributionLine?: boolean;\n lineWidth?: number;\n}\n\ntype HistogramProps = {\n dataSeries: HistogramDataSeries | HistogramDataSeries[];\n /**\n * Fixed width in pixels. When omitted, the chart fills its container and\n * tracks the container's width via a `ResizeObserver`.\n */\n width?: number;\n /**\n * Fixed height in pixels. When omitted, the chart fills its container and\n * tracks the container's height via a `ResizeObserver`.\n */\n height?: number;\n title?: string;\n xTitle?: string;\n yTitle?: string;\n bargap?: number;\n showDistributionLine?: boolean;\n};\n\nconst calculateMean = (data: number[]): number => {\n const sum = data.reduce((acc, val) => acc + val, 0);\n return sum / data.length;\n};\n\nconst calculateStdDev = (data: number[], mean: number): number => {\n const squaredDiffs = data.map((value) => Math.pow(value - mean, 2));\n const variance =\n squaredDiffs.reduce((acc, val) => acc + val, 0) / data.length;\n return Math.sqrt(variance);\n};\n\nconst generateNormalDistributionPoints = (\n mean: number,\n stdDev: number,\n start: number,\n end: number,\n points = 100\n): { x: number[]; y: number[] } => {\n const xValues: number[] = [];\n const yValues: number[] = [];\n\n const step = (end - start) / (points - 1);\n\n for (let i = 0; i < points; i++) {\n const x = start + i * step;\n xValues.push(x);\n\n const exponent = NORMAL_DISTRIBUTION_EXPONENT_COEFF * Math.pow((x - mean) / stdDev, 2);\n const y = (1 / (stdDev * Math.sqrt(2 * Math.PI))) * Math.exp(exponent);\n yValues.push(y);\n }\n\n return { x: xValues, y: yValues };\n};\n\nconst scaleDistributionCurve = (\n yValues: number[],\n histogramData: number[],\n bins: { start: number; end: number; size: number }\n): number[] => {\n const binCount = Math.ceil((bins.end - bins.start) / bins.size);\n const binFrequencies = Array(binCount).fill(0);\n\n histogramData.forEach((value) => {\n if (value >= bins.start && value <= bins.end) {\n const binIndex = Math.floor((value - bins.start) / bins.size);\n binFrequencies[binIndex]++;\n }\n });\n\n const maxBinFrequency = Math.max(...binFrequencies);\n const maxCurveValue = Math.max(...yValues);\n\n const scaleFactor = maxBinFrequency / maxCurveValue;\n\n return yValues.map((y) => y * scaleFactor);\n};\n\nconst Histogram: React.FC<HistogramProps> = ({\n dataSeries,\n width,\n height,\n title = \"Histogram\",\n xTitle = \"X Axis\",\n yTitle = \"Frequency\",\n bargap = 0.2,\n showDistributionLine = false,\n}) => {\n const plotRef = useRef<HTMLDivElement>(null);\n const theme = usePlotlyTheme();\n const { bindTooltip, tooltipElement } = useChartTooltip({ xLabel: xTitle, yLabel: yTitle });\n\n // Omitted width/height → fill the container and track its measured size;\n // explicit pixel values override. Histogram has its own HTML title + legend,\n // so we measure a wrapper around just the Plotly canvas. See AreaGraph for\n // the reference pattern.\n const [plotAreaRef, measured] = useElementSize<HTMLDivElement>();\n const resolvedWidth = width ?? measured.width;\n const resolvedHeight = height ?? measured.height;\n const hasSize = resolvedWidth > 0 && resolvedHeight > 0;\n // Fill is per-dimension: omit width to fill the container width, omit height\n // to fill its height (so e.g. a fixed width with a container-driven height works).\n const fillWidth = width === undefined;\n const fillHeight = height === undefined;\n const sizeRef = useRef({ width: resolvedWidth, height: resolvedHeight });\n sizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n const plotInitedRef = useRef(false);\n // Size last applied to the plot, so the resize effect can skip a redundant\n // relayout right after newPlot already drew at that size.\n const appliedSizeRef = useRef({ width: 0, height: 0 });\n const seriesArray = useMemo(\n () => (Array.isArray(dataSeries) ? dataSeries : [dataSeries]),\n [dataSeries],\n );\n const effectiveBarMode = useMemo<\n \"stack\" | \"group\" | \"overlay\" | \"relative\" | undefined\n >(() => (seriesArray.length > 1 ? \"stack\" : undefined), [seriesArray.length]);\n\n const defaultColors = CHART_COLORS;\n\n const seriesWithColors = useMemo(() => {\n return seriesArray.map((series, index) => {\n const hasDistributionLine =\n typeof series.showDistributionLine === \"undefined\"\n ? showDistributionLine\n : series.showDistributionLine;\n\n return {\n ...series,\n color: series.color || defaultColors[index % defaultColors.length],\n opacity: hasDistributionLine ? 0.5 : series.opacity || 1,\n showDistributionLine: hasDistributionLine,\n lineWidth: series.lineWidth || 3,\n };\n });\n }, [seriesArray, showDistributionLine, defaultColors]);\n\n const gridColor = theme.gridColor;\n\n const histogramData = useMemo(\n () =>\n seriesWithColors.map((series) => ({\n type: \"histogram\" as const,\n x: series.x,\n name: series.name,\n marker: {\n color: series.color,\n line: {\n color: theme.paperBg,\n width: 1,\n },\n opacity: series.opacity,\n },\n autobinx: series.autobinx,\n xbins: series.xbins,\n hoverinfo: \"none\" as const,\n })),\n [seriesWithColors, theme],\n );\n\n const distributionLines = useMemo(\n () =>\n seriesWithColors\n .filter((series) => series.showDistributionLine)\n .map((series) => {\n const mean = calculateMean(series.x);\n const stdDev = calculateStdDev(series.x, mean);\n\n const min = Math.min(...series.x);\n const max = Math.max(...series.x);\n const range = max - min;\n const start = min - range * 0.1;\n const end = max + range * 0.1;\n\n const bins = series.xbins || {\n start: start,\n end: end,\n size: range / 10,\n };\n\n const curvePoints = generateNormalDistributionPoints(\n mean,\n stdDev,\n start,\n end,\n 100,\n );\n\n const scaledYValues = scaleDistributionCurve(\n curvePoints.y,\n series.x,\n bins,\n );\n\n return {\n type: \"scatter\" as const,\n x: curvePoints.x,\n y: scaledYValues,\n mode: \"lines\" as const,\n name: `${series.name} Distribution`,\n line: {\n color: series.color,\n width: series.lineWidth,\n },\n hoverinfo: \"none\" as const,\n };\n }),\n [seriesWithColors],\n );\n\n const plotData = useMemo(\n () => [...histogramData, ...distributionLines],\n [histogramData, distributionLines],\n );\n\n useEffect(() => {\n if (!plotRef.current || !hasSize) return;\n\n const layout = {\n width: sizeRef.current.width,\n height: sizeRef.current.height,\n font: {\n family: \"Inter, sans-serif\",\n },\n showlegend: false,\n margin: { l: 90, r: 40, b: 80, t: 40 },\n xaxis: {\n title: {\n text: xTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: \"Inter, sans-serif\",\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n automargin: true,\n },\n yaxis: {\n title: {\n text: yTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: \"Inter, sans-serif\",\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n rangemode: \"tozero\" as const,\n automargin: true,\n },\n barmode: effectiveBarMode,\n bargap: bargap,\n paper_bgcolor: theme.paperBg,\n plot_bgcolor: theme.plotBg,\n };\n\n const config = {\n // Sizing is driven from the measured container; disable Plotly's own\n // window-resize responsiveness (it can't see container resizes).\n responsive: false,\n displayModeBar: false,\n displaylogo: false,\n };\n\n Plotly.newPlot(plotRef.current, plotData, layout, config);\n bindTooltip(plotRef.current);\n\n // Capture ref value for cleanup\n const plotElement = plotRef.current;\n plotInitedRef.current = true;\n appliedSizeRef.current = { ...sizeRef.current };\n\n return () => {\n if (plotElement) {\n Plotly.purge(plotElement);\n plotInitedRef.current = false;\n }\n };\n }, [hasSize, xTitle, yTitle, bargap, plotData, effectiveBarMode, gridColor, theme, bindTooltip]);\n\n // Resize in place when the measured/overridden size changes — cheaper than\n // recreating the plot, and it preserves tooltip/event bindings.\n useEffect(() => {\n const plotElement = plotRef.current;\n if (!plotElement || !plotInitedRef.current || resolvedWidth <= 0 || resolvedHeight <= 0) {\n return;\n }\n // newPlot already drew at the current size; skip the redundant relayout\n // (it would queue an automargin redraw that can reject if we unmount first).\n if (\n appliedSizeRef.current.width === resolvedWidth &&\n appliedSizeRef.current.height === resolvedHeight\n ) {\n return;\n }\n appliedSizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n // Swallow rejections from a relayout that races an unmount/purge.\n void Plotly.relayout(plotElement, { width: resolvedWidth, height: resolvedHeight }).catch(\n () => {},\n );\n }, [resolvedWidth, resolvedHeight]);\n\n const ChartLegend: React.FC<{\n series: Array<{ name: string; color: string }>;\n }> = ({ series }) => {\n const items = series.map((item, i) => (\n <React.Fragment key={item.name}>\n <div className=\"legend-item\">\n <span className=\"color-box\" style={{ background: item.color }} />\n {item.name}\n {i < series.length - 1 && <span className=\"divider\" />}\n </div>\n </React.Fragment>\n ));\n\n const rows = [];\n const rowSize = 6;\n for (let i = 0; i < items.length; i += rowSize) {\n rows.push(\n <div className=\"legend-row\" key={i}>\n {items.slice(i, i + rowSize)}\n </div>\n );\n }\n\n return <div className=\"legend-container\">{rows}</div>;\n };\n\n return (\n <div\n className={cn(\"histogram-container relative\", fillWidth && \"w-full\", fillHeight && \"h-full\")}\n style={width === undefined ? undefined : { width }}\n >\n <div className={cn(\"chart-container\", fillHeight && \"flex h-full flex-col\")}>\n {title && (\n <div className=\"title-container\">\n <h2 className=\"title\">{title}</h2>\n </div>\n )}\n {/* Measured plot area — flexes to fill the space left by the title and\n legend in fill mode, so the Plotly canvas tracks it. */}\n <div ref={plotAreaRef} className={cn(fillHeight && \"min-h-0 flex-1\")}>\n <div\n ref={plotRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n margin: \"0\",\n }}\n />\n </div>\n <ChartLegend series={seriesWithColors} />\n </div>\n {tooltipElement}\n </div>\n );\n};\n\nexport { Histogram };\nexport type { HistogramDataSeries, HistogramProps };\n"],"names":["NORMAL_DISTRIBUTION_EXPONENT_COEFF","calculateMean","data","acc","val","calculateStdDev","mean","variance","value","generateNormalDistributionPoints","stdDev","start","end","points","xValues","yValues","step","i","x","exponent","y","scaleDistributionCurve","histogramData","bins","binCount","binFrequencies","binIndex","maxBinFrequency","maxCurveValue","scaleFactor","Histogram","dataSeries","width","height","title","xTitle","yTitle","bargap","showDistributionLine","plotRef","useRef","theme","usePlotlyTheme","bindTooltip","tooltipElement","useChartTooltip","plotAreaRef","measured","useElementSize","resolvedWidth","resolvedHeight","hasSize","fillWidth","fillHeight","sizeRef","plotInitedRef","appliedSizeRef","seriesArray","useMemo","effectiveBarMode","defaultColors","CHART_COLORS","seriesWithColors","series","index","hasDistributionLine","gridColor","distributionLines","min","max","range","curvePoints","scaledYValues","plotData","useEffect","layout","config","Plotly","plotElement","ChartLegend","items","item","jsx","React","jsxs","rows","rowSize","cn"],"mappings":";;;;;;;;;AAYA,MAAMA,KAAqC,MAoCrCC,KAAgB,CAACC,MACTA,EAAK,OAAO,CAACC,GAAKC,MAAQD,IAAMC,GAAK,CAAC,IACrCF,EAAK,QAGdG,KAAkB,CAACH,GAAgBI,MAAyB;AAEhE,QAAMC,IADeL,EAAK,IAAI,CAACM,MAAU,KAAK,IAAIA,IAAQF,GAAM,CAAC,CAAC,EAEnD,OAAO,CAACH,GAAKC,MAAQD,IAAMC,GAAK,CAAC,IAAIF,EAAK;AACzD,SAAO,KAAK,KAAKK,CAAQ;AAC3B,GAEME,KAAmC,CACvCH,GACAI,GACAC,GACAC,GACAC,IAAS,QACwB;AACjC,QAAMC,IAAoB,CAAA,GACpBC,IAAoB,CAAA,GAEpBC,KAAQJ,IAAMD,MAAUE,IAAS;AAEvC,WAASI,IAAI,GAAGA,IAAIJ,GAAQI,KAAK;AAC/B,UAAMC,IAAIP,IAAQM,IAAID;AACtB,IAAAF,EAAQ,KAAKI,CAAC;AAEd,UAAMC,IAAWnB,KAAqC,KAAK,KAAKkB,IAAIZ,KAAQI,GAAQ,CAAC,GAC/EU,IAAK,KAAKV,IAAS,KAAK,KAAK,IAAI,KAAK,EAAE,KAAM,KAAK,IAAIS,CAAQ;AACrE,IAAAJ,EAAQ,KAAKK,CAAC;AAAA,EAChB;AAEA,SAAO,EAAE,GAAGN,GAAS,GAAGC,EAAA;AAC1B,GAEMM,KAAyB,CAC7BN,GACAO,GACAC,MACa;AACb,QAAMC,IAAW,KAAK,MAAMD,EAAK,MAAMA,EAAK,SAASA,EAAK,IAAI,GACxDE,IAAiB,MAAMD,CAAQ,EAAE,KAAK,CAAC;AAE7C,EAAAF,EAAc,QAAQ,CAACd,MAAU;AAC/B,QAAIA,KAASe,EAAK,SAASf,KAASe,EAAK,KAAK;AAC5C,YAAMG,IAAW,KAAK,OAAOlB,IAAQe,EAAK,SAASA,EAAK,IAAI;AAC5D,MAAAE,EAAeC,CAAQ;AAAA,IACzB;AAAA,EACF,CAAC;AAED,QAAMC,IAAkB,KAAK,IAAI,GAAGF,CAAc,GAC5CG,IAAgB,KAAK,IAAI,GAAGb,CAAO,GAEnCc,IAAcF,IAAkBC;AAEtC,SAAOb,EAAQ,IAAI,CAACK,MAAMA,IAAIS,CAAW;AAC3C,GAEMC,KAAsC,CAAC;AAAA,EAC3C,YAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,QAAAC,IAAS;AAAA,EACT,sBAAAC,IAAuB;AACzB,MAAM;AACJ,QAAMC,IAAUC,EAAuB,IAAI,GACrCC,IAAQC,EAAA,GACR,EAAE,aAAAC,GAAa,gBAAAC,EAAA,IAAmBC,EAAgB,EAAE,QAAQV,GAAQ,QAAQC,GAAQ,GAMpF,CAACU,GAAaC,CAAQ,IAAIC,EAAA,GAC1BC,IAAgBjB,KAASe,EAAS,OAClCG,IAAiBjB,KAAUc,EAAS,QACpCI,IAAUF,IAAgB,KAAKC,IAAiB,GAGhDE,IAAYpB,MAAU,QACtBqB,IAAapB,MAAW,QACxBqB,IAAUd,EAAO,EAAE,OAAOS,GAAe,QAAQC,GAAgB;AACvE,EAAAI,EAAQ,UAAU,EAAE,OAAOL,GAAe,QAAQC,EAAA;AAClD,QAAMK,IAAgBf,EAAO,EAAK,GAG5BgB,IAAiBhB,EAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,GAC/CiB,IAAcC;AAAA,IAClB,MAAO,MAAM,QAAQ3B,CAAU,IAAIA,IAAa,CAACA,CAAU;AAAA,IAC3D,CAACA,CAAU;AAAA,EAAA,GAEP4B,IAAmBD,EAEvB,MAAOD,EAAY,SAAS,IAAI,UAAU,QAAY,CAACA,EAAY,MAAM,CAAC,GAEtEG,IAAgBC,GAEhBC,IAAmBJ,EAAQ,MACxBD,EAAY,IAAI,CAACM,GAAQC,MAAU;AACxC,UAAMC,IACJ,OAAOF,EAAO,uBAAyB,MACnCzB,IACAyB,EAAO;AAEb,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,OAAOA,EAAO,SAASH,EAAcI,IAAQJ,EAAc,MAAM;AAAA,MACjE,SAASK,IAAsB,MAAMF,EAAO,WAAW;AAAA,MACvD,sBAAsBE;AAAA,MACtB,WAAWF,EAAO,aAAa;AAAA,IAAA;AAAA,EAEnC,CAAC,GACA,CAACN,GAAanB,GAAsBsB,CAAa,CAAC,GAE/CM,IAAYzB,EAAM,WAElBnB,IAAgBoC;AAAA,IACpB,MACEI,EAAiB,IAAI,CAACC,OAAY;AAAA,MAChC,MAAM;AAAA,MACN,GAAGA,EAAO;AAAA,MACV,MAAMA,EAAO;AAAA,MACb,QAAQ;AAAA,QACN,OAAOA,EAAO;AAAA,QACd,MAAM;AAAA,UACJ,OAAOtB,EAAM;AAAA,UACb,OAAO;AAAA,QAAA;AAAA,QAET,SAASsB,EAAO;AAAA,MAAA;AAAA,MAElB,UAAUA,EAAO;AAAA,MACjB,OAAOA,EAAO;AAAA,MACd,WAAW;AAAA,IAAA,EACX;AAAA,IACJ,CAACD,GAAkBrB,CAAK;AAAA,EAAA,GAGpB0B,IAAoBT;AAAA,IACxB,MACEI,EACG,OAAO,CAACC,MAAWA,EAAO,oBAAoB,EAC9C,IAAI,CAACA,MAAW;AACf,YAAMzD,IAAOL,GAAc8D,EAAO,CAAC,GAC7BrD,IAASL,GAAgB0D,EAAO,GAAGzD,CAAI,GAEvC8D,IAAM,KAAK,IAAI,GAAGL,EAAO,CAAC,GAC1BM,IAAM,KAAK,IAAI,GAAGN,EAAO,CAAC,GAC1BO,IAAQD,IAAMD,GACdzD,IAAQyD,IAAME,IAAQ,KACtB1D,IAAMyD,IAAMC,IAAQ,KAEpB/C,IAAOwC,EAAO,SAAS;AAAA,QAC3B,OAAApD;AAAA,QACA,KAAAC;AAAA,QACA,MAAM0D,IAAQ;AAAA,MAAA,GAGVC,IAAc9D;AAAA,QAClBH;AAAA,QACAI;AAAA,QACAC;AAAA,QACAC;AAAA,QACA;AAAA,MAAA,GAGI4D,IAAgBnD;AAAA,QACpBkD,EAAY;AAAA,QACZR,EAAO;AAAA,QACPxC;AAAA,MAAA;AAGF,aAAO;AAAA,QACL,MAAM;AAAA,QACN,GAAGgD,EAAY;AAAA,QACf,GAAGC;AAAA,QACH,MAAM;AAAA,QACN,MAAM,GAAGT,EAAO,IAAI;AAAA,QACpB,MAAM;AAAA,UACJ,OAAOA,EAAO;AAAA,UACd,OAAOA,EAAO;AAAA,QAAA;AAAA,QAEhB,WAAW;AAAA,MAAA;AAAA,IAEf,CAAC;AAAA,IACL,CAACD,CAAgB;AAAA,EAAA,GAGbW,IAAWf;AAAA,IACf,MAAM,CAAC,GAAGpC,GAAe,GAAG6C,CAAiB;AAAA,IAC7C,CAAC7C,GAAe6C,CAAiB;AAAA,EAAA;AAGnC,EAAAO,EAAU,MAAM;AACd,QAAI,CAACnC,EAAQ,WAAW,CAACY,EAAS;AAElC,UAAMwB,IAAS;AAAA,MACb,OAAOrB,EAAQ,QAAQ;AAAA,MACvB,QAAQA,EAAQ,QAAQ;AAAA,MACxB,MAAM;AAAA,QACJ,QAAQ;AAAA,MAAA;AAAA,MAEV,YAAY;AAAA,MACZ,QAAQ,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAA;AAAA,MAClC,OAAO;AAAA,QACL,OAAO;AAAA,UACL,MAAMnB;AAAA,UACN,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,OAAOM,EAAM;AAAA,YACb,QAAQ;AAAA,YACR,QAAQ;AAAA,UAAA;AAAA,UAEV,UAAU;AAAA,QAAA;AAAA,QAEZ,WAAWyB;AAAA,QACX,WAAWzB,EAAM;AAAA,QACjB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,QACP,WAAWA,EAAM;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,OAAO;AAAA,UACL,MAAML;AAAA,UACN,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,OAAOK,EAAM;AAAA,YACb,QAAQ;AAAA,YACR,QAAQ;AAAA,UAAA;AAAA,UAEV,UAAU;AAAA,QAAA;AAAA,QAEZ,WAAWyB;AAAA,QACX,WAAWzB,EAAM;AAAA,QACjB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,QACP,WAAWA,EAAM;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,MAAA;AAAA,MAEd,SAASkB;AAAA,MACT,QAAAtB;AAAA,MACA,eAAeI,EAAM;AAAA,MACrB,cAAcA,EAAM;AAAA,IAAA,GAGhBmC,IAAS;AAAA;AAAA;AAAA,MAGb,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,IAAA;AAGf,IAAAC,EAAO,QAAQtC,EAAQ,SAASkC,GAAUE,GAAQC,CAAM,GACxDjC,EAAYJ,EAAQ,OAAO;AAG3B,UAAMuC,IAAcvC,EAAQ;AAC5B,WAAAgB,EAAc,UAAU,IACxBC,EAAe,UAAU,EAAE,GAAGF,EAAQ,QAAA,GAE/B,MAAM;AACX,MAAIwB,MACFD,EAAO,MAAMC,CAAW,GACxBvB,EAAc,UAAU;AAAA,IAE5B;AAAA,EACF,GAAG,CAACJ,GAAShB,GAAQC,GAAQC,GAAQoC,GAAUd,GAAkBO,GAAWzB,GAAOE,CAAW,CAAC,GAI/F+B,EAAU,MAAM;AACd,UAAMI,IAAcvC,EAAQ;AAC5B,IAAI,CAACuC,KAAe,CAACvB,EAAc,WAAWN,KAAiB,KAAKC,KAAkB,KAMpFM,EAAe,QAAQ,UAAUP,KACjCO,EAAe,QAAQ,WAAWN,MAIpCM,EAAe,UAAU,EAAE,OAAOP,GAAe,QAAQC,EAAA,GAEpD2B,EAAO,SAASC,GAAa,EAAE,OAAO7B,GAAe,QAAQC,EAAA,CAAgB,EAAE;AAAA,MAClF,MAAM;AAAA,MAAC;AAAA,IAAA;AAAA,EAEX,GAAG,CAACD,GAAeC,CAAc,CAAC;AAElC,QAAM6B,IAED,CAAC,EAAE,QAAAhB,QAAa;AACnB,UAAMiB,IAAQjB,EAAO,IAAI,CAACkB,GAAMhE,MAC9B,gBAAAiE,EAACC,EAAM,UAAN,EACC,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,aAAY,OAAO,EAAE,YAAYD,EAAK,SAAS;AAAA,MAC9DA,EAAK;AAAA,MACLhE,IAAI8C,EAAO,SAAS,KAAK,gBAAAmB,EAAC,QAAA,EAAK,WAAU,UAAA,CAAU;AAAA,IAAA,EAAA,CACtD,EAAA,GALmBD,EAAK,IAM1B,CACD,GAEKI,IAAO,CAAA,GACPC,IAAU;AAChB,aAASrE,IAAI,GAAGA,IAAI+D,EAAM,QAAQ/D,KAAKqE;AACrC,MAAAD,EAAK;AAAA,QACH,gBAAAH,EAAC,OAAA,EAAI,WAAU,cACZ,UAAAF,EAAM,MAAM/D,GAAGA,IAAIqE,CAAO,EAAA,GADIrE,CAEjC;AAAA,MAAA;AAIJ,WAAO,gBAAAiE,EAAC,OAAA,EAAI,WAAU,oBAAoB,UAAAG,GAAK;AAAA,EACjD;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWG,EAAG,gCAAgCnC,KAAa,UAAUC,KAAc,QAAQ;AAAA,MAC3F,OAAOrB,MAAU,SAAY,SAAY,EAAE,OAAAA,EAAA;AAAA,MAE3C,UAAA;AAAA,QAAA,gBAAAoD,EAAC,SAAI,WAAWG,EAAG,mBAAmBlC,KAAc,sBAAsB,GACvE,UAAA;AAAA,UAAAnB,KACC,gBAAAgD,EAAC,SAAI,WAAU,mBACb,4BAAC,MAAA,EAAG,WAAU,SAAS,UAAAhD,EAAA,CAAM,EAAA,CAC/B;AAAA,UAIF,gBAAAgD,EAAC,SAAI,KAAKpC,GAAa,WAAWyC,EAAGlC,KAAc,gBAAgB,GACjE,UAAA,gBAAA6B;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK3C;AAAA,cACL,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,QAAQ;AAAA,cAAA;AAAA,YACV;AAAA,UAAA,GAEJ;AAAA,UACA,gBAAA2C,EAACH,GAAA,EAAY,QAAQjB,EAAA,CAAkB;AAAA,QAAA,GACzC;AAAA,QACClB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"Histogram.js","sources":["../../../../src/components/charts/Histogram/Histogram.tsx"],"sourcesContent":["import React, { useEffect, useRef, useMemo } from \"react\";\n\nimport { useChartTooltip } from \"../ChartTooltip\";\nimport { getLoadedPlotly, loadPlotly } from \"../plotly-loader\";\n\nimport { useElementSize } from \"@/hooks/use-element-size\";\nimport { CHART_FONT_FAMILY, usePlotlyTheme } from \"@/hooks/use-plotly-theme\";\nimport { cn } from \"@/lib/utils\";\nimport { CHART_COLORS } from \"@/utils/colors\";\nimport \"./Histogram.scss\";\n\n/** Exponent coefficient for normal distribution calculation */\nconst NORMAL_DISTRIBUTION_EXPONENT_COEFF = -0.5;\n\ninterface HistogramDataSeries {\n x: number[];\n name: string;\n color?: string;\n autobinx?: boolean;\n xbins?: {\n start: number;\n end: number;\n size: number;\n };\n opacity?: number;\n showDistributionLine?: boolean;\n lineWidth?: number;\n}\n\ntype HistogramProps = {\n dataSeries: HistogramDataSeries | HistogramDataSeries[];\n /**\n * Fixed width in pixels. When omitted, the chart fills its container and\n * tracks the container's width via a `ResizeObserver`.\n */\n width?: number;\n /**\n * Fixed height in pixels. When omitted, the chart fills its container and\n * tracks the container's height via a `ResizeObserver`.\n */\n height?: number;\n title?: string;\n xTitle?: string;\n yTitle?: string;\n bargap?: number;\n showDistributionLine?: boolean;\n};\n\nconst calculateMean = (data: number[]): number => {\n const sum = data.reduce((acc, val) => acc + val, 0);\n return sum / data.length;\n};\n\nconst calculateStdDev = (data: number[], mean: number): number => {\n const squaredDiffs = data.map((value) => Math.pow(value - mean, 2));\n const variance =\n squaredDiffs.reduce((acc, val) => acc + val, 0) / data.length;\n return Math.sqrt(variance);\n};\n\nconst generateNormalDistributionPoints = (\n mean: number,\n stdDev: number,\n start: number,\n end: number,\n points = 100\n): { x: number[]; y: number[] } => {\n const xValues: number[] = [];\n const yValues: number[] = [];\n\n const step = (end - start) / (points - 1);\n\n for (let i = 0; i < points; i++) {\n const x = start + i * step;\n xValues.push(x);\n\n const exponent = NORMAL_DISTRIBUTION_EXPONENT_COEFF * Math.pow((x - mean) / stdDev, 2);\n const y = (1 / (stdDev * Math.sqrt(2 * Math.PI))) * Math.exp(exponent);\n yValues.push(y);\n }\n\n return { x: xValues, y: yValues };\n};\n\nconst scaleDistributionCurve = (\n yValues: number[],\n histogramData: number[],\n bins: { start: number; end: number; size: number }\n): number[] => {\n const binCount = Math.ceil((bins.end - bins.start) / bins.size);\n const binFrequencies = Array(binCount).fill(0);\n\n histogramData.forEach((value) => {\n if (value >= bins.start && value <= bins.end) {\n const binIndex = Math.floor((value - bins.start) / bins.size);\n binFrequencies[binIndex]++;\n }\n });\n\n const maxBinFrequency = Math.max(...binFrequencies);\n const maxCurveValue = Math.max(...yValues);\n\n const scaleFactor = maxBinFrequency / maxCurveValue;\n\n return yValues.map((y) => y * scaleFactor);\n};\n\nconst Histogram: React.FC<HistogramProps> = ({\n dataSeries,\n width,\n height,\n title = \"Histogram\",\n xTitle = \"X Axis\",\n yTitle = \"Frequency\",\n bargap = 0.2,\n showDistributionLine = false,\n}) => {\n const plotRef = useRef<HTMLDivElement>(null);\n const theme = usePlotlyTheme();\n const { bindTooltip, tooltipElement } = useChartTooltip({ xLabel: xTitle, yLabel: yTitle });\n\n // Omitted width/height → fill the container and track its measured size;\n // explicit pixel values override. Histogram has its own HTML title + legend,\n // so we measure a wrapper around just the Plotly canvas. See AreaPlot for\n // the reference pattern.\n const [plotAreaRef, measured] = useElementSize<HTMLDivElement>();\n const resolvedWidth = width ?? measured.width;\n const resolvedHeight = height ?? measured.height;\n const hasSize = resolvedWidth > 0 && resolvedHeight > 0;\n // Fill is per-dimension: omit width to fill the container width, omit height\n // to fill its height (so e.g. a fixed width with a container-driven height works).\n const fillWidth = width === undefined;\n const fillHeight = height === undefined;\n const sizeRef = useRef({ width: resolvedWidth, height: resolvedHeight });\n sizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n const plotInitedRef = useRef(false);\n // Size last applied to the plot, so the resize effect can skip a redundant\n // relayout right after newPlot already drew at that size.\n const appliedSizeRef = useRef({ width: 0, height: 0 });\n const seriesArray = useMemo(\n () => (Array.isArray(dataSeries) ? dataSeries : [dataSeries]),\n [dataSeries],\n );\n const effectiveBarMode = useMemo<\n \"stack\" | \"group\" | \"overlay\" | \"relative\" | undefined\n >(() => (seriesArray.length > 1 ? \"stack\" : undefined), [seriesArray.length]);\n\n const defaultColors = CHART_COLORS;\n\n const seriesWithColors = useMemo(() => {\n return seriesArray.map((series, index) => {\n const hasDistributionLine =\n typeof series.showDistributionLine === \"undefined\"\n ? showDistributionLine\n : series.showDistributionLine;\n\n return {\n ...series,\n color: series.color || defaultColors[index % defaultColors.length],\n opacity: hasDistributionLine ? 0.5 : series.opacity || 1,\n showDistributionLine: hasDistributionLine,\n lineWidth: series.lineWidth || 3,\n };\n });\n }, [seriesArray, showDistributionLine, defaultColors]);\n\n const gridColor = theme.gridColor;\n\n const histogramData = useMemo(\n () =>\n seriesWithColors.map((series) => ({\n type: \"histogram\" as const,\n x: series.x,\n name: series.name,\n marker: {\n color: series.color,\n line: {\n color: theme.paperBg,\n width: 1,\n },\n opacity: series.opacity,\n },\n autobinx: series.autobinx,\n xbins: series.xbins,\n hoverinfo: \"none\" as const,\n })),\n [seriesWithColors, theme],\n );\n\n const distributionLines = useMemo(\n () =>\n seriesWithColors\n .filter((series) => series.showDistributionLine)\n .map((series) => {\n const mean = calculateMean(series.x);\n const stdDev = calculateStdDev(series.x, mean);\n\n const min = Math.min(...series.x);\n const max = Math.max(...series.x);\n const range = max - min;\n const start = min - range * 0.1;\n const end = max + range * 0.1;\n\n const bins = series.xbins || {\n start: start,\n end: end,\n size: range / 10,\n };\n\n const curvePoints = generateNormalDistributionPoints(\n mean,\n stdDev,\n start,\n end,\n 100,\n );\n\n const scaledYValues = scaleDistributionCurve(\n curvePoints.y,\n series.x,\n bins,\n );\n\n return {\n type: \"scatter\" as const,\n x: curvePoints.x,\n y: scaledYValues,\n mode: \"lines\" as const,\n name: `${series.name} Distribution`,\n line: {\n color: series.color,\n width: series.lineWidth,\n },\n hoverinfo: \"none\" as const,\n };\n }),\n [seriesWithColors],\n );\n\n const plotData = useMemo(\n () => [...histogramData, ...distributionLines],\n [histogramData, distributionLines],\n );\n\n useEffect(() => {\n if (!plotRef.current || !hasSize) return;\n\n const layout = {\n width: sizeRef.current.width,\n height: sizeRef.current.height,\n font: {\n family: CHART_FONT_FAMILY,\n },\n showlegend: false,\n margin: { l: 90, r: 40, b: 80, t: 40 },\n xaxis: {\n title: {\n text: xTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: CHART_FONT_FAMILY,\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n automargin: true,\n },\n yaxis: {\n title: {\n text: yTitle,\n font: {\n size: 16,\n color: theme.textSecondary,\n family: CHART_FONT_FAMILY,\n weight: 400,\n },\n standoff: 20,\n },\n gridcolor: gridColor,\n tickcolor: theme.tickColor,\n ticklen: 8,\n tickwidth: 1,\n ticks: \"outside\" as const,\n linecolor: theme.lineColor,\n linewidth: 1,\n zeroline: false,\n rangemode: \"tozero\" as const,\n automargin: true,\n },\n barmode: effectiveBarMode,\n bargap: bargap,\n paper_bgcolor: theme.paperBg,\n plot_bgcolor: theme.plotBg,\n };\n\n const config = {\n // Sizing is driven from the measured container; disable Plotly's own\n // window-resize responsiveness (it can't see container resizes).\n responsive: false,\n displayModeBar: false,\n displaylogo: false,\n };\n\n // Plotly is loaded lazily so it stays out of the consumer's main chunk\n // (SW-2007); the draw is skipped if the effect re-runs or unmounts first.\n let cancelled = false;\n let plotElement: HTMLDivElement | null = null;\n void loadPlotly().then((plotly) => {\n if (cancelled || !plotRef.current) return;\n plotly.newPlot(plotRef.current, plotData, layout, config);\n bindTooltip(plotRef.current);\n\n // Capture ref value for cleanup\n plotElement = plotRef.current;\n plotInitedRef.current = true;\n appliedSizeRef.current = { ...sizeRef.current };\n });\n\n return () => {\n cancelled = true;\n if (plotElement) {\n getLoadedPlotly().purge(plotElement);\n plotInitedRef.current = false;\n }\n };\n }, [hasSize, xTitle, yTitle, bargap, plotData, effectiveBarMode, gridColor, theme, bindTooltip]);\n\n // Resize in place when the measured/overridden size changes — cheaper than\n // recreating the plot, and it preserves tooltip/event bindings.\n useEffect(() => {\n const plotElement = plotRef.current;\n if (!plotElement || !plotInitedRef.current || resolvedWidth <= 0 || resolvedHeight <= 0) {\n return;\n }\n // newPlot already drew at the current size; skip the redundant relayout\n // (it would queue an automargin redraw that can reject if we unmount first).\n if (\n appliedSizeRef.current.width === resolvedWidth &&\n appliedSizeRef.current.height === resolvedHeight\n ) {\n return;\n }\n appliedSizeRef.current = { width: resolvedWidth, height: resolvedHeight };\n // Swallow rejections from a relayout that races an unmount/purge.\n // plotInitedRef guarantees Plotly finished loading, so sync access is safe.\n void getLoadedPlotly()\n .relayout(plotElement, { width: resolvedWidth, height: resolvedHeight })\n .catch(() => {});\n }, [resolvedWidth, resolvedHeight]);\n\n const ChartLegend: React.FC<{\n series: Array<{ name: string; color: string }>;\n }> = ({ series }) => {\n const items = series.map((item, i) => (\n <React.Fragment key={item.name}>\n <div className=\"legend-item\">\n <span className=\"color-box\" style={{ background: item.color }} />\n {item.name}\n {i < series.length - 1 && <span className=\"divider\" />}\n </div>\n </React.Fragment>\n ));\n\n const rows = [];\n const rowSize = 6;\n for (let i = 0; i < items.length; i += rowSize) {\n rows.push(\n <div className=\"legend-row\" key={i}>\n {items.slice(i, i + rowSize)}\n </div>\n );\n }\n\n return <div className=\"legend-container\">{rows}</div>;\n };\n\n return (\n <div\n className={cn(\"histogram-container relative\", fillWidth && \"w-full\", fillHeight && \"h-full\")}\n style={width === undefined ? undefined : { width }}\n >\n <div className={cn(\"chart-container\", fillHeight && \"flex h-full flex-col\")}>\n {title && (\n <div className=\"title-container\">\n <h2 className=\"title\">{title}</h2>\n </div>\n )}\n {/* Measured plot area — flexes to fill the space left by the title and\n legend in fill mode, so the Plotly canvas tracks it. */}\n <div ref={plotAreaRef} className={cn(fillHeight && \"min-h-0 flex-1\")}>\n <div\n ref={plotRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n margin: \"0\",\n }}\n />\n </div>\n <ChartLegend series={seriesWithColors} />\n </div>\n {tooltipElement}\n </div>\n );\n};\n\nexport { Histogram };\nexport type { HistogramDataSeries, HistogramProps };\n"],"names":["NORMAL_DISTRIBUTION_EXPONENT_COEFF","calculateMean","data","acc","val","calculateStdDev","mean","variance","value","generateNormalDistributionPoints","stdDev","start","end","points","xValues","yValues","step","i","x","exponent","y","scaleDistributionCurve","histogramData","bins","binCount","binFrequencies","binIndex","maxBinFrequency","maxCurveValue","scaleFactor","Histogram","dataSeries","width","height","title","xTitle","yTitle","bargap","showDistributionLine","plotRef","useRef","theme","usePlotlyTheme","bindTooltip","tooltipElement","useChartTooltip","plotAreaRef","measured","useElementSize","resolvedWidth","resolvedHeight","hasSize","fillWidth","fillHeight","sizeRef","plotInitedRef","appliedSizeRef","seriesArray","useMemo","effectiveBarMode","defaultColors","CHART_COLORS","seriesWithColors","series","index","hasDistributionLine","gridColor","distributionLines","min","max","range","curvePoints","scaledYValues","plotData","useEffect","layout","CHART_FONT_FAMILY","config","cancelled","plotElement","loadPlotly","plotly","getLoadedPlotly","ChartLegend","items","item","jsx","React","jsxs","rows","rowSize","cn"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Histogram } from './Histogram';
2
+ export type { HistogramDataSeries, HistogramProps } from './Histogram';
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("react/jsx-runtime"),n=require("react"),V=require("../ChartTooltip/ChartTooltip.cjs"),N=require("../plotly-loader.cjs"),B=require("../../../hooks/use-element-size.cjs"),h=require("../../../hooks/use-plotly-theme.cjs"),G=require("../../../lib/utils.cjs"),W=require("../../../utils/colors.cjs"),D=60,J=30,K=({dataSeries:d,width:T,height:R,xRange:L,yRange:g,variant:y="lines",xTitle:b,yTitle:k,title:p,xTickText:M})=>{const u=n.useRef(null),o=h.usePlotlyTheme(),{bindTooltip:v,tooltipElement:S}=V.useChartTooltip({xLabel:b,yLabel:k}),[X,I]=B.useElementSize(),c=T??I.width,a=R??I.height,P=c>0&&a>0,j=T===void 0,U=R===void 0,_=n.useRef({width:c,height:a});_.current={width:c,height:a};const C=n.useRef(!1),w=n.useRef({width:0,height:0}),{yMin:z,yMax:F}=n.useMemo(()=>{let t=Number.MAX_VALUE,e=Number.MIN_VALUE,l=Number.MAX_VALUE,i=Number.MIN_VALUE;d.forEach(A=>{A.x.forEach(s=>{t=Math.min(t,s),e=Math.max(e,s)}),A.y.forEach(s=>{l=Math.min(l,s),i=Math.max(i,s)})});const m=(e-t)*.1,r=(i-l)*.1;return{xMin:t-m,xMax:e+m,yMin:l-r,yMax:i+r}},[d]),f=n.useMemo(()=>g||[z,F],[g,z,F]),O=n.useMemo(()=>{const t=f[1]-f[0];let e=Math.pow(10,Math.floor(Math.log10(t)));t/e>10&&(e=e*2),t/e<4&&(e=e/2);const l=[];let i=Math.ceil(f[0]/e)*e;for(;i<=f[1];)l.push(i),i+=e;return l},[f]),x=n.useMemo(()=>[...new Set(d.flatMap(t=>t.x))].sort((t,e)=>t-e),[d]),Y=!!M&&M.length===x.length,q=n.useMemo(()=>{switch(y){case"lines+markers":case"lines+markers+error_bars":return"lines+markers";default:return"lines"}},[y]),E=n.useMemo(()=>({tickcolor:o.tickColor,ticklen:12,tickwidth:1,ticks:"outside",tickfont:{size:16,color:o.textColor,family:h.CHART_FONT_FAMILY,weight:400},linecolor:o.lineColor,linewidth:1,position:0,zeroline:!1}),[o]);return n.useEffect(()=>{if(!u.current||!P)return;const t=d.map((r,A)=>{const s=W.seriesColor(A,r.color);return{x:r.x,y:r.y,type:"scatter",mode:q,name:r.name,hoverinfo:"none",line:{color:s,width:1.5},marker:y==="lines"?{opacity:0}:{color:s,size:8,symbol:r.symbol||"triangle-up"},error_y:y==="lines+markers+error_bars"?r.error_y||{type:"data",array:r.y.map(()=>10),visible:!0,color:s,thickness:1,width:5}:void 0}}),e={...p?{title:{text:p,font:{size:32,family:h.CHART_FONT_FAMILY,color:o.textColor}}}:{},width:_.current.width,height:_.current.height,margin:{l:80,r:30,b:96,t:p?D:J,pad:10},paper_bgcolor:o.paperBg,plot_bgcolor:o.plotBg,font:{family:h.CHART_FONT_FAMILY},dragmode:!1,xaxis:{title:{text:b,font:{size:16,color:o.textSecondary,family:h.CHART_FONT_FAMILY,weight:400},standoff:32},gridcolor:o.gridColor,range:L,autorange:!L,tickmode:"array",tickvals:x,ticktext:Y?M:x.map(String),showgrid:!0,automargin:!0,...E},yaxis:{title:{text:k,font:{size:16,color:o.textSecondary,family:h.CHART_FONT_FAMILY,weight:400},standoff:30},gridcolor:o.gridColor,range:g,autorange:!g,tickmode:"array",tickvals:O,showgrid:!0,automargin:!0,...E},legend:{x:.5,y:0,xanchor:"center",yanchor:"bottom",yref:"container",orientation:"h",font:{size:16,color:o.legendColor,family:h.CHART_FONT_FAMILY,weight:500}},showlegend:!0},l={responsive:!1,displayModeBar:!1,displaylogo:!1};let i=!1,m=null;return N.loadPlotly().then(r=>{i||!u.current||(r.newPlot(u.current,t,e,l),v(u.current),m=u.current,C.current=!0,w.current={..._.current})}),()=>{i=!0,m&&(N.getLoadedPlotly().purge(m),C.current=!1)}},[d,P,L,g,b,k,p,q,E,x,O,Y,M,f,y,o,v]),n.useEffect(()=>{const t=u.current;!t||!C.current||c<=0||a<=0||w.current.width===c&&w.current.height===a||(w.current={width:c,height:a},N.getLoadedPlotly().relayout(t,{width:c,height:a}).catch(()=>{}))},[c,a]),H.jsxs("div",{ref:X,className:G.cn("relative",j&&"w-full",U&&"h-full"),children:[H.jsx("div",{ref:u,style:{width:"100%",height:"100%"}}),S]})};exports.LinePlot=K;
2
+ //# sourceMappingURL=LinePlot.cjs.map