matterviz 0.4.1 → 0.4.3

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 (499) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +48 -60
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/api/optimade.js +10 -7
  6. package/dist/app.css +68 -0
  7. package/dist/brillouin/BrillouinZone.svelte +90 -91
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  9. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  12. package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  14. package/dist/brillouin/compute.js +10 -16
  15. package/dist/brillouin/geometry.js +2 -2
  16. package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
  17. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
  20. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  21. package/dist/chempot-diagram/async-compute.svelte.js +13 -14
  22. package/dist/chempot-diagram/color.d.ts +21 -1
  23. package/dist/chempot-diagram/color.js +70 -1
  24. package/dist/chempot-diagram/compute.d.ts +7 -0
  25. package/dist/chempot-diagram/compute.js +85 -26
  26. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  27. package/dist/chempot-diagram/export.js +1 -6
  28. package/dist/chempot-diagram/temperature.js +9 -10
  29. package/dist/colors/index.d.ts +0 -4
  30. package/dist/colors/index.js +19 -20
  31. package/dist/composition/BarChart.svelte +30 -26
  32. package/dist/composition/BubbleChart.svelte +17 -17
  33. package/dist/composition/Composition.svelte +10 -19
  34. package/dist/composition/Formula.svelte +20 -27
  35. package/dist/composition/FormulaFilter.svelte +115 -184
  36. package/dist/composition/PieChart.svelte +55 -41
  37. package/dist/composition/format.js +7 -9
  38. package/dist/composition/index.d.ts +2 -0
  39. package/dist/composition/index.js +14 -0
  40. package/dist/composition/parse.d.ts +2 -2
  41. package/dist/composition/parse.js +61 -115
  42. package/dist/constants.d.ts +0 -1
  43. package/dist/constants.js +17 -26
  44. package/dist/convex-hull/ConvexHull.svelte +12 -15
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +93 -94
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +127 -186
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +131 -180
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  53. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  54. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  55. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  56. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  57. package/dist/convex-hull/StructurePopup.svelte +18 -22
  58. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  59. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  60. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  61. package/dist/convex-hull/gas-thermodynamics.js +21 -53
  62. package/dist/convex-hull/helpers.d.ts +8 -10
  63. package/dist/convex-hull/helpers.js +37 -43
  64. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  65. package/dist/convex-hull/thermodynamics.js +37 -44
  66. package/dist/coordination/CoordinationBarPlot.svelte +49 -53
  67. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  68. package/dist/coordination/calc-coordination.d.ts +1 -1
  69. package/dist/coordination/calc-coordination.js +28 -25
  70. package/dist/element/BohrAtom.svelte +5 -9
  71. package/dist/element/ElementHeading.svelte +4 -1
  72. package/dist/element/ElementPhoto.svelte +11 -9
  73. package/dist/element/ElementStats.svelte +12 -10
  74. package/dist/element/ElementTile.svelte +44 -67
  75. package/dist/element/Nucleus.svelte +4 -2
  76. package/dist/element/data.d.ts +3 -2
  77. package/dist/element/data.js +5 -1
  78. package/dist/element/helpers.d.ts +4 -0
  79. package/dist/element/helpers.js +18 -0
  80. package/dist/element/index.d.ts +2 -5
  81. package/dist/element/index.js +4 -19
  82. package/dist/feedback/DragOverlay.svelte +5 -5
  83. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  84. package/dist/feedback/StatusMessage.svelte +7 -4
  85. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  86. package/dist/fermi-surface/FermiSurface.svelte +35 -44
  87. package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
  88. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  89. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  90. package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
  91. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  92. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  93. package/dist/fermi-surface/compute.js +25 -58
  94. package/dist/fermi-surface/parse.js +54 -88
  95. package/dist/file-viewer/JsonBrowser.svelte +1043 -0
  96. package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
  97. package/dist/file-viewer/PlotPanel.svelte +350 -0
  98. package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
  99. package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
  100. package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
  101. package/dist/file-viewer/detect.d.ts +11 -0
  102. package/dist/file-viewer/detect.js +381 -0
  103. package/dist/file-viewer/eligibility.d.ts +4 -0
  104. package/dist/file-viewer/eligibility.js +53 -0
  105. package/dist/file-viewer/host-protocol.d.ts +50 -0
  106. package/dist/file-viewer/host-transfer.d.ts +25 -0
  107. package/dist/file-viewer/host-transfer.js +42 -0
  108. package/dist/file-viewer/index.d.ts +5 -0
  109. package/dist/file-viewer/index.js +5 -0
  110. package/dist/file-viewer/main.d.ts +44 -0
  111. package/dist/file-viewer/main.js +535 -0
  112. package/dist/file-viewer/parse.d.ts +9 -0
  113. package/dist/file-viewer/parse.js +170 -0
  114. package/dist/file-viewer/plot-utils.d.ts +24 -0
  115. package/dist/file-viewer/plot-utils.js +191 -0
  116. package/dist/file-viewer/types.d.ts +4 -0
  117. package/dist/file-viewer/types.js +5 -0
  118. package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
  119. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  120. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  121. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  122. package/dist/heatmap-matrix/index.d.ts +5 -0
  123. package/dist/icons.d.ts +4 -0
  124. package/dist/icons.js +4 -0
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +1 -1
  127. package/dist/io/ExportPane.svelte +11 -7
  128. package/dist/io/decompress.d.ts +4 -1
  129. package/dist/io/decompress.js +24 -36
  130. package/dist/io/export.d.ts +11 -4
  131. package/dist/io/export.js +75 -19
  132. package/dist/io/fetch.d.ts +0 -3
  133. package/dist/io/fetch.js +0 -11
  134. package/dist/io/file-drop.js +60 -35
  135. package/dist/io/index.d.ts +0 -1
  136. package/dist/io/index.js +2 -9
  137. package/dist/io/is-binary.d.ts +9 -0
  138. package/dist/io/is-binary.js +45 -1
  139. package/dist/io/url-drop.d.ts +2 -0
  140. package/dist/io/url-drop.js +40 -40
  141. package/dist/isosurface/Isosurface.svelte +700 -215
  142. package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
  143. package/dist/isosurface/IsosurfaceControls.svelte +590 -116
  144. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
  145. package/dist/isosurface/VolumeSlice.svelte +224 -0
  146. package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
  147. package/dist/isosurface/coloring.d.ts +20 -0
  148. package/dist/isosurface/coloring.js +118 -0
  149. package/dist/isosurface/geometry-worker-types.d.ts +38 -0
  150. package/dist/isosurface/geometry.worker.d.ts +1 -0
  151. package/dist/isosurface/geometry.worker.js +59 -0
  152. package/dist/isosurface/grid.d.ts +10 -0
  153. package/dist/isosurface/grid.js +31 -0
  154. package/dist/isosurface/index.d.ts +4 -0
  155. package/dist/isosurface/index.js +4 -0
  156. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  157. package/dist/isosurface/parse-vaspwave.js +138 -0
  158. package/dist/isosurface/parse.js +6 -6
  159. package/dist/isosurface/profile.d.ts +12 -0
  160. package/dist/isosurface/profile.js +19 -0
  161. package/dist/isosurface/sampling.d.ts +34 -0
  162. package/dist/isosurface/sampling.js +408 -0
  163. package/dist/isosurface/slice-rendering.d.ts +13 -0
  164. package/dist/isosurface/slice-rendering.js +79 -0
  165. package/dist/isosurface/slice.d.ts +22 -2
  166. package/dist/isosurface/slice.js +200 -116
  167. package/dist/isosurface/types.d.ts +24 -1
  168. package/dist/isosurface/types.js +120 -8
  169. package/dist/json-path.d.ts +4 -0
  170. package/dist/json-path.js +89 -0
  171. package/dist/labels.d.ts +6 -2
  172. package/dist/labels.js +44 -14
  173. package/dist/layout/FullscreenButton.svelte +2 -1
  174. package/dist/layout/FullscreenToggle.svelte +10 -4
  175. package/dist/layout/InfoCard.svelte +8 -21
  176. package/dist/layout/InfoTag.svelte +1 -3
  177. package/dist/layout/NumberRangeInput.svelte +46 -0
  178. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  179. package/dist/layout/PropertyFilter.svelte +2 -6
  180. package/dist/layout/SettingsSection.svelte +57 -62
  181. package/dist/layout/SettingsSection.svelte.d.ts +6 -7
  182. package/dist/layout/SubpageGrid.svelte +3 -1
  183. package/dist/layout/ViewerChrome.svelte +16 -11
  184. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  185. package/dist/layout/fullscreen.js +3 -5
  186. package/dist/layout/fullscreen.svelte.js +1 -2
  187. package/dist/layout/index.d.ts +1 -0
  188. package/dist/layout/index.js +1 -0
  189. package/dist/layout/json-tree/JsonNode.svelte +22 -59
  190. package/dist/layout/json-tree/JsonTree.svelte +101 -172
  191. package/dist/layout/json-tree/JsonValue.svelte +9 -32
  192. package/dist/layout/json-tree/utils.d.ts +0 -3
  193. package/dist/layout/json-tree/utils.js +50 -188
  194. package/dist/marching-cubes.d.ts +8 -1
  195. package/dist/marching-cubes.js +115 -48
  196. package/dist/math.d.ts +5 -2
  197. package/dist/math.js +48 -38
  198. package/dist/overlays/ContextMenu.svelte +19 -34
  199. package/dist/overlays/CopyButton.svelte +11 -5
  200. package/dist/overlays/DragControlTab.svelte +6 -1
  201. package/dist/overlays/DraggablePane.svelte +110 -74
  202. package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
  203. package/dist/overlays/GlassChip.svelte +32 -0
  204. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  205. package/dist/overlays/InfoPaneCards.svelte +11 -23
  206. package/dist/overlays/index.d.ts +7 -0
  207. package/dist/overlays/index.js +26 -0
  208. package/dist/overlays/portal.d.ts +2 -0
  209. package/dist/overlays/portal.js +14 -0
  210. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  211. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  212. package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
  213. package/dist/periodic-table/TableInset.svelte +9 -4
  214. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
  215. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  216. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  217. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  218. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  219. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  220. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  221. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  222. package/dist/phase-diagram/build-diagram.js +4 -9
  223. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  224. package/dist/phase-diagram/parse.js +15 -15
  225. package/dist/phase-diagram/svg-to-diagram.js +28 -27
  226. package/dist/phase-diagram/utils.js +2 -3
  227. package/dist/plot/bar/BarPlot.svelte +461 -426
  228. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  229. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  230. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  231. package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
  232. package/dist/plot/bar/data.d.ts +5 -4
  233. package/dist/plot/bar/data.js +2 -1
  234. package/dist/plot/box/BoxPlot.svelte +322 -226
  235. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  236. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  237. package/dist/plot/box/box-plot.js +1 -1
  238. package/dist/plot/core/auto-place.d.ts +1 -1
  239. package/dist/plot/core/auto-place.js +2 -2
  240. package/dist/plot/core/axis-utils.d.ts +12 -7
  241. package/dist/plot/core/axis-utils.js +48 -48
  242. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  243. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  244. package/dist/plot/core/components/ColorBar.svelte +101 -106
  245. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  246. package/dist/plot/core/components/FillArea.svelte +10 -17
  247. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  248. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  249. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  250. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  251. package/dist/plot/core/components/Line.svelte +18 -9
  252. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  253. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  254. package/dist/plot/core/components/PlotControls.svelte +65 -41
  255. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  256. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  257. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  258. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  259. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  260. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  261. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  262. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  263. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  264. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  265. package/dist/plot/core/components/index.d.ts +1 -0
  266. package/dist/plot/core/components/index.js +1 -0
  267. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  268. package/dist/plot/core/data-cleaning-signal.js +467 -0
  269. package/dist/plot/core/data-cleaning.d.ts +2 -42
  270. package/dist/plot/core/data-cleaning.js +27 -474
  271. package/dist/plot/core/data-transform.d.ts +1 -2
  272. package/dist/plot/core/data-transform.js +9 -15
  273. package/dist/plot/core/fill-utils.d.ts +3 -1
  274. package/dist/plot/core/fill-utils.js +28 -6
  275. package/dist/plot/core/index.d.ts +1 -0
  276. package/dist/plot/core/index.js +1 -0
  277. package/dist/plot/core/interactions.js +0 -2
  278. package/dist/plot/core/layout.d.ts +15 -6
  279. package/dist/plot/core/layout.js +57 -38
  280. package/dist/plot/core/marginals.d.ts +170 -0
  281. package/dist/plot/core/marginals.js +436 -0
  282. package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
  283. package/dist/plot/core/pan-zoom.svelte.js +34 -17
  284. package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -21
  286. package/dist/plot/core/reference-line.js +1 -1
  287. package/dist/plot/core/scales.d.ts +23 -0
  288. package/dist/plot/core/scales.js +39 -13
  289. package/dist/plot/core/svg.js +0 -1
  290. package/dist/plot/core/types/fills.d.ts +101 -0
  291. package/dist/plot/core/types/fills.js +15 -0
  292. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  293. package/dist/plot/core/types/plot-3d.js +4 -0
  294. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  295. package/dist/plot/core/types/reference-lines.js +9 -0
  296. package/dist/plot/core/types.d.ts +29 -324
  297. package/dist/plot/core/types.js +23 -20
  298. package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
  299. package/dist/plot/core/utils/hierarchy-chart.js +191 -0
  300. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  301. package/dist/plot/core/utils/hierarchy-labels.js +100 -0
  302. package/dist/plot/core/utils/label-placement.js +2 -2
  303. package/dist/plot/histogram/Histogram.svelte +314 -340
  304. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  305. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  306. package/dist/plot/histogram/histogram.d.ts +31 -0
  307. package/dist/plot/histogram/histogram.js +70 -0
  308. package/dist/plot/histogram/index.d.ts +1 -0
  309. package/dist/plot/histogram/index.js +1 -0
  310. package/dist/plot/index.d.ts +1 -0
  311. package/dist/plot/index.js +1 -0
  312. package/dist/plot/sankey/Sankey.svelte +78 -69
  313. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  314. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  315. package/dist/plot/sankey/sankey.js +13 -9
  316. package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
  317. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  318. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  319. package/dist/plot/scatter/ScatterPlot.svelte +517 -410
  320. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  321. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  322. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  323. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  324. package/dist/plot/scatter/adaptive-density.d.ts +1 -1
  325. package/dist/plot/scatter/adaptive-density.js +36 -20
  326. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  327. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  328. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  329. package/dist/plot/scatter/scatter-data.js +8 -7
  330. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  331. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  332. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  333. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  334. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  335. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  336. package/dist/plot/sunburst/Sunburst.svelte +269 -347
  337. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  338. package/dist/plot/sunburst/index.d.ts +1 -1
  339. package/dist/plot/sunburst/index.js +2 -1
  340. package/dist/plot/sunburst/render.d.ts +2 -2
  341. package/dist/plot/sunburst/render.js +47 -22
  342. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  343. package/dist/plot/sunburst/sunburst.js +10 -3
  344. package/dist/plot/treemap/Treemap.svelte +1022 -0
  345. package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
  346. package/dist/plot/treemap/index.d.ts +4 -0
  347. package/dist/plot/treemap/index.js +4 -0
  348. package/dist/plot/treemap/labels.d.ts +38 -0
  349. package/dist/plot/treemap/labels.js +80 -0
  350. package/dist/plot/treemap/treemap.d.ts +28 -0
  351. package/dist/plot/treemap/treemap.js +102 -0
  352. package/dist/rdf/RdfPlot.svelte +37 -59
  353. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  354. package/dist/rdf/calc-rdf.js +63 -52
  355. package/dist/rdf/index.d.ts +0 -1
  356. package/dist/sanitize.js +85 -27
  357. package/dist/scene/SceneCamera.svelte +1 -1
  358. package/dist/scene/SceneCamera.svelte.d.ts +1 -1
  359. package/dist/scene/bind-renderer.svelte.js +14 -6
  360. package/dist/scene/index.d.ts +1 -2
  361. package/dist/scene/index.js +1 -1
  362. package/dist/scene/{props.js → props.svelte.js} +15 -1
  363. package/dist/settings.d.ts +19 -9
  364. package/dist/settings.js +229 -525
  365. package/dist/spectral/Bands.svelte +207 -221
  366. package/dist/spectral/BandsAndDos.svelte +11 -9
  367. package/dist/spectral/BrillouinBandsDos.svelte +19 -42
  368. package/dist/spectral/Dos.svelte +92 -93
  369. package/dist/spectral/helpers.d.ts +3 -3
  370. package/dist/spectral/helpers.js +65 -140
  371. package/dist/state.svelte.js +5 -18
  372. package/dist/structure/Arrow.svelte +5 -18
  373. package/dist/structure/ArrowInstances.svelte +160 -0
  374. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  375. package/dist/structure/AtomLegend.svelte +120 -85
  376. package/dist/structure/AtomLegend.svelte.d.ts +2 -3
  377. package/dist/structure/Bond.svelte +31 -23
  378. package/dist/structure/CanvasTooltip.svelte +15 -3
  379. package/dist/structure/CellSelect.svelte +45 -35
  380. package/dist/structure/Cylinder.svelte +24 -40
  381. package/dist/structure/InstancedAtoms.svelte +114 -0
  382. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  383. package/dist/structure/Lattice.svelte +85 -149
  384. package/dist/structure/SiteLabels.svelte +122 -0
  385. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  386. package/dist/structure/Structure.svelte +636 -504
  387. package/dist/structure/Structure.svelte.d.ts +4 -2
  388. package/dist/structure/StructureCarousel.svelte +637 -0
  389. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  390. package/dist/structure/StructureControls.svelte +165 -425
  391. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  392. package/dist/structure/StructureExportPane.svelte +17 -21
  393. package/dist/structure/StructureInfoPane.svelte +128 -133
  394. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  395. package/dist/structure/StructureScene.svelte +535 -578
  396. package/dist/structure/StructureScene.svelte.d.ts +6 -2
  397. package/dist/structure/StructureViewport.svelte +451 -0
  398. package/dist/structure/StructureViewport.svelte.d.ts +65 -0
  399. package/dist/structure/atom-label-placement.d.ts +16 -12
  400. package/dist/structure/atom-label-placement.js +70 -37
  401. package/dist/structure/atom-properties.d.ts +2 -0
  402. package/dist/structure/atom-properties.js +105 -38
  403. package/dist/structure/bond-order-perception.js +3 -8
  404. package/dist/structure/bonding.d.ts +9 -3
  405. package/dist/structure/bonding.js +95 -46
  406. package/dist/structure/edit-history.d.ts +6 -0
  407. package/dist/structure/edit-history.js +27 -0
  408. package/dist/structure/export.d.ts +1 -0
  409. package/dist/structure/export.js +89 -105
  410. package/dist/structure/format-detect.d.ts +1 -0
  411. package/dist/structure/format-detect.js +20 -0
  412. package/dist/structure/geometry.d.ts +9 -0
  413. package/dist/structure/geometry.js +27 -0
  414. package/dist/structure/index.d.ts +16 -1
  415. package/dist/structure/index.js +15 -10
  416. package/dist/structure/measure.d.ts +1 -1
  417. package/dist/structure/measure.js +6 -12
  418. package/dist/structure/parse.d.ts +2 -1
  419. package/dist/structure/parse.js +272 -313
  420. package/dist/structure/partial-occupancy.js +10 -5
  421. package/dist/structure/pbc.js +85 -107
  422. package/dist/structure/polyhedra.d.ts +0 -1
  423. package/dist/structure/polyhedra.js +7 -21
  424. package/dist/structure/prop-groups.d.ts +85 -0
  425. package/dist/structure/prop-groups.js +18 -0
  426. package/dist/structure/supercell.d.ts +1 -2
  427. package/dist/structure/supercell.js +7 -13
  428. package/dist/symmetry/SymmetryElements.svelte +11 -15
  429. package/dist/symmetry/SymmetryStats.svelte +55 -71
  430. package/dist/symmetry/WyckoffTable.svelte +10 -28
  431. package/dist/symmetry/cell-transform.js +6 -14
  432. package/dist/symmetry/index.d.ts +1 -0
  433. package/dist/symmetry/index.js +13 -10
  434. package/dist/symmetry/spacegroups.js +3 -2
  435. package/dist/table/HeatmapTable.svelte +1142 -447
  436. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  437. package/dist/table/ToggleMenu.svelte +168 -53
  438. package/dist/table/ToggleMenu.svelte.d.ts +1 -1
  439. package/dist/table/index.d.ts +21 -6
  440. package/dist/table/index.js +34 -21
  441. package/dist/theme/ThemeControl.svelte +16 -8
  442. package/dist/theme/embedded.d.ts +18 -0
  443. package/dist/theme/embedded.js +206 -0
  444. package/dist/theme/index.d.ts +5 -5
  445. package/dist/theme/index.js +5 -12
  446. package/dist/theme/themes.mjs +44 -66
  447. package/dist/tooltip/KCoords.svelte +4 -1
  448. package/dist/tooltip/TooltipContent.svelte +3 -6
  449. package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
  450. package/dist/tooltip/index.d.ts +8 -1
  451. package/dist/trajectory/Trajectory.svelte +613 -386
  452. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  453. package/dist/trajectory/TrajectoryError.svelte +12 -74
  454. package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
  455. package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
  456. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
  457. package/dist/trajectory/extract.js +61 -49
  458. package/dist/trajectory/format-detect.d.ts +2 -0
  459. package/dist/trajectory/format-detect.js +17 -13
  460. package/dist/trajectory/frame-reader.d.ts +2 -0
  461. package/dist/trajectory/frame-reader.js +35 -32
  462. package/dist/trajectory/helpers.d.ts +2 -0
  463. package/dist/trajectory/helpers.js +34 -56
  464. package/dist/trajectory/index.d.ts +1 -0
  465. package/dist/trajectory/index.js +5 -8
  466. package/dist/trajectory/parse/ase.js +1 -1
  467. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  468. package/dist/trajectory/parse/h5-utils.js +109 -0
  469. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  470. package/dist/trajectory/parse/hdf5.js +116 -106
  471. package/dist/trajectory/parse/index.d.ts +6 -6
  472. package/dist/trajectory/parse/index.js +25 -33
  473. package/dist/trajectory/parse/lammps.js +8 -12
  474. package/dist/trajectory/parse/vasp.js +10 -7
  475. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  476. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  477. package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
  478. package/dist/trajectory/parse/vaspout-h5.js +281 -0
  479. package/dist/trajectory/parse/xyz.js +59 -9
  480. package/dist/trajectory/plotting.d.ts +8 -9
  481. package/dist/trajectory/plotting.js +113 -64
  482. package/dist/utils.d.ts +3 -0
  483. package/dist/utils.js +7 -0
  484. package/dist/xrd/XrdPlot.svelte +79 -118
  485. package/dist/xrd/broadening.js +2 -1
  486. package/dist/xrd/calc-xrd.js +24 -62
  487. package/dist/xrd/parse.d.ts +0 -1
  488. package/dist/xrd/parse.js +69 -95
  489. package/package.json +94 -34
  490. package/readme.md +6 -5
  491. package/dist/api/mp.d.ts +0 -6
  492. package/dist/api/mp.js +0 -22
  493. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  494. package/dist/scene/types.d.ts +0 -26
  495. package/dist/tooltip/types.d.ts +0 -8
  496. package/dist/trajectory/constants.d.ts +0 -6
  497. package/dist/trajectory/constants.js +0 -11
  498. /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
  499. /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
@@ -5,9 +5,9 @@ import { Tween } from 'svelte/motion';
5
5
  const HOVER_DEBOUNCE_MS = 300;
6
6
  // Tweened position for an auto-placed plot element with the stability gating shared
7
7
  // by BarPlot/BoxPlot/Histogram/ScatterPlot legends: snap (no animation) on first
8
- // placement, follow container resizes, stay put while hovered (debounced hover lock),
9
- // and track placement continuously only when `responsive`. Creates $effects, so it
10
- // must be called during component init.
8
+ // placement, follow container/element resizes, stay put while hovered (debounced
9
+ // hover lock), and track placement continuously only when `responsive`. Creates
10
+ // $effects, so it must be called during component init.
11
11
  export function create_placed_tween(opts) {
12
12
  // Hover lock: placement updates pause while the element is hovered; release is
13
13
  // debounced so brief mouse-outs don't cause jumps
@@ -22,16 +22,43 @@ export function create_placed_tween(opts) {
22
22
  else
23
23
  unlock_timeout = setTimeout(() => (hover_locked = false), HOVER_DEBOUNCE_MS);
24
24
  };
25
- // Plain (untracked) flags: only read/written inside the effect below, and outcomes
26
- // don't depend on re-running when they flip
25
+ // Previous plot dimensions stay plain; they only classify the current effect run.
27
26
  let prev_dims = null;
28
- let has_initial_placement = false;
27
+ let element_size_revision = $state(0);
28
+ let prev_element_size_revision = 0;
29
+ let previous_element;
30
+ let previous_placement_revision;
31
+ let placed = $state(false);
29
32
  const coords = new Tween({ x: 0, y: 0 }, untrack(() => ({ duration: 400, ...opts.tween?.() })));
30
33
  // Clear pending unlock timeout to prevent state updates after unmount
31
34
  $effect(() => () => {
32
35
  if (unlock_timeout)
33
36
  clearTimeout(unlock_timeout);
34
37
  });
38
+ // Decoration content (title, orientation, tick labels) can resize without the
39
+ // plot dimensions changing. Observe it so frozen placements are recomputed.
40
+ $effect(() => {
41
+ const element = opts.element() ?? null;
42
+ if (previous_element !== undefined && previous_element !== element) {
43
+ element_size_revision += 1;
44
+ if (!element)
45
+ placed = false;
46
+ }
47
+ previous_element = element;
48
+ if (!element || typeof ResizeObserver === `undefined`)
49
+ return undefined;
50
+ const observed_elements = new WeakSet();
51
+ const observer = new ResizeObserver((entries) => {
52
+ const size_changed = entries.some(({ target }) => observed_elements.has(target));
53
+ for (const { target } of entries)
54
+ observed_elements.add(target);
55
+ if (size_changed)
56
+ element_size_revision += 1;
57
+ });
58
+ for (const target of [element, ...element.querySelectorAll(`*`)])
59
+ observer.observe(target);
60
+ return () => observer.disconnect();
61
+ });
35
62
  // Update position with stability checks
36
63
  $effect(() => {
37
64
  const { width, height } = opts.dims();
@@ -43,26 +70,46 @@ export function create_placed_tween(opts) {
43
70
  if (manual) {
44
71
  // Immediate update (no animation) for manually positioned elements
45
72
  void coords.set({ x: manual.x, y: manual.y }, { duration: 0 });
46
- return;
73
+ if (opts.element())
74
+ placed = true;
47
75
  }
48
- const placement = opts.placement();
49
- if (!placement)
76
+ // Leave resize revisions pending so unlock recomputes the latest placement.
77
+ if (hover_locked)
50
78
  return;
51
79
  // Track dimensions for resize detection
52
80
  const dims_changed = !prev_dims || prev_dims.width !== width || prev_dims.height !== height;
53
81
  if (dims_changed)
54
82
  prev_dims = { width, height };
55
- // Only update if: resize occurred, OR (not hover-locked AND (responsive OR not
56
- // yet initially placed))
57
- const should_update = dims_changed || (!hover_locked && (opts.responsive() || !has_initial_placement));
58
- if (should_update) {
59
- void coords.set({ x: placement.x, y: placement.y },
60
- // Skip animation on initial placement to avoid jump from (0, 0)
61
- has_initial_placement ? undefined : { duration: 0 });
62
- // Only lock position after the element has an actual measured size
63
- if (opts.element())
64
- has_initial_placement = true;
65
- }
83
+ const element_size_changed = prev_element_size_revision !== element_size_revision;
84
+ prev_element_size_revision = element_size_revision;
85
+ if (element_size_changed)
86
+ opts.on_element_resize?.();
87
+ if (manual)
88
+ return;
89
+ const placement_revision = opts.placement_revision?.();
90
+ const placement_invalidated = !Object.is(previous_placement_revision, placement_revision);
91
+ previous_placement_revision = placement_revision;
92
+ const responsive = opts.responsive();
93
+ // A non-responsive tween tracks `placed` once so it immediately reruns and
94
+ // unsubscribes from the expensive placement chain after its first placement.
95
+ const has_initial_placement = responsive ? untrack(() => placed) : placed;
96
+ // Skip expensive DOM placement before evaluating it: non-responsive
97
+ // elements stay fixed after their initial placement until the plot resizes.
98
+ if (!dims_changed &&
99
+ !element_size_changed &&
100
+ !placement_invalidated &&
101
+ !responsive &&
102
+ has_initial_placement)
103
+ return;
104
+ const placement = opts.placement();
105
+ if (!placement)
106
+ return;
107
+ void coords.set({ x: placement.x, y: placement.y },
108
+ // Skip animation on initial placement to avoid jump from (0, 0)
109
+ has_initial_placement ? undefined : { duration: 0 });
110
+ // Only lock position after the element has an actual measured size
111
+ if (opts.element())
112
+ placed = true;
66
113
  });
67
- return { coords, set_locked };
114
+ return { coords, placed: () => placed, set_locked };
68
115
  }
@@ -210,7 +210,7 @@ export function calculate_annotation_position(x1, y1, x2, y2, annotation) {
210
210
  // Calculate base position with edge padding applied along line direction
211
211
  const dx = x2 - x1;
212
212
  const dy = y2 - y1;
213
- const len = Math.sqrt(dx * dx + dy * dy);
213
+ const len = Math.hypot(dx, dy);
214
214
  let base_x = x1 + frac * dx;
215
215
  let base_y = y1 + frac * dy;
216
216
  // Apply edge padding to pull text slightly inward from plot boundaries
@@ -17,6 +17,29 @@ export type PlotScaleFn = ScaleContinuousNumeric<number, number> | ScaleTime<num
17
17
  export declare function scale_arcsinh(threshold?: number): ArcsinhScale;
18
18
  export declare function generate_arcsinh_ticks(min: number, max: number, threshold?: number, count?: number): number[];
19
19
  export declare function create_scale(scale_type: ScaleType, domain: Vec2, output_range: Vec2): ScaleContinuousNumeric<number, number> | ArcsinhScale;
20
+ export declare function create_axis_scales<A extends {
21
+ scale_type?: ScaleType;
22
+ }>(axes: {
23
+ x: A;
24
+ x2: A;
25
+ y: A;
26
+ y2: A;
27
+ }, ranges: {
28
+ x: Vec2;
29
+ x2: Vec2;
30
+ y: Vec2;
31
+ y2: Vec2;
32
+ }, pad: {
33
+ l: number;
34
+ r: number;
35
+ t: number;
36
+ b: number;
37
+ }, width: number, height: number): {
38
+ x: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
39
+ x2: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
40
+ y: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
41
+ y2: ArcsinhScale | ScaleContinuousNumeric<number, number, never>;
42
+ };
20
43
  export declare const create_time_scale: (domain: Vec2, output_range: Vec2) => ScaleTime<number, number, never>;
21
44
  export declare function generate_ticks(domain: Vec2, scale_type: ScaleType, ticks_option: TicksOption | undefined, scale_fn: PlotScaleFn, // D3 scale function with .ticks() method
22
45
  options?: {
@@ -1,5 +1,7 @@
1
1
  import * as math from '../../math';
2
- import { get_arcsinh_threshold, get_scale_type_name, is_time_scale, } from './types';
2
+ import { get_d3_interpolator } from '../../colors';
3
+ import { clamp01 } from '../../utils';
4
+ import { get_arcsinh_threshold, get_scale_type_name, is_time_scale, SCALE_DEFAULTS, } from './types';
3
5
  import { extent, range } from 'd3-array';
4
6
  import { scaleLinear, scaleLog, scaleSequential, scaleSequentialLog, scaleTime, } from 'd3-scale';
5
7
  import * as d3_sc from 'd3-scale-chromatic';
@@ -188,6 +190,19 @@ export function create_scale(scale_type, domain, output_range) {
188
190
  // For 'time' or 'linear', return linear scale (time scales need create_time_scale())
189
191
  return scaleLinear().domain(domain).range(output_range);
190
192
  }
193
+ // Build the four axis scales for a 2D plot in one call: x/x2 share the horizontal pixel span,
194
+ // y/y2 the inverted vertical one. Shared by BarPlot/BoxPlot/Histogram (identical layout math).
195
+ export function create_axis_scales(axes, ranges, pad, width, height) {
196
+ const x_px = [pad.l, width - pad.r];
197
+ const y_px = [height - pad.b, pad.t];
198
+ const scale = (axis, domain, px) => create_scale(axis.scale_type ?? `linear`, domain, px);
199
+ return {
200
+ x: scale(axes.x, ranges.x, x_px),
201
+ x2: scale(axes.x2, ranges.x2, x_px),
202
+ y: scale(axes.y, ranges.y, y_px),
203
+ y2: scale(axes.y2, ranges.y2, y_px),
204
+ };
205
+ }
191
206
  // Create a time scale for time-based data
192
207
  export const create_time_scale = (domain, output_range) => scaleTime()
193
208
  .domain([new Date(domain[0]), new Date(domain[1])])
@@ -263,9 +278,13 @@ export function calculate_domain(values, scale_type = `linear`) {
263
278
  if (min_val === undefined || max_val === undefined)
264
279
  return [0, 1];
265
280
  const type_name = get_scale_type_name(scale_type);
266
- // Only log scale needs domain clamping to positive values
267
- // Arcsinh and linear can handle any values
268
- return type_name === `log` ? [Math.max(min_val, math.LOG_EPS), max_val] : [min_val, max_val];
281
+ // log clamps to positive (arcsinh/linear take any value); clamp BOTH ends so all-negative
282
+ // data can't leave max <= the clamped min and invert/collapse the scale
283
+ if (type_name === `log`) {
284
+ const lo = Math.max(min_val, math.LOG_EPS);
285
+ return [lo, Math.max(max_val, lo)];
286
+ }
287
+ return [min_val, max_val];
269
288
  }
270
289
  // Advanced domain calculation with padding and nice boundaries (from ScatterPlot)
271
290
  export function get_nice_data_range(points, get_value, limits, scale_type, padding_factor, is_time = false) {
@@ -274,6 +293,13 @@ export function get_nice_data_range(points, get_value, limits, scale_type, paddi
274
293
  let data_min = min ?? min_ext ?? 0;
275
294
  let data_max = max ?? max_ext ?? 1;
276
295
  const type_name = get_scale_type_name(scale_type);
296
+ const can_snap_zero = min_ext !== undefined &&
297
+ max_ext !== undefined &&
298
+ min_ext < max_ext &&
299
+ !is_time &&
300
+ type_name !== `log`;
301
+ const snap_zero_min = can_snap_zero && min === null && min_ext === 0;
302
+ const snap_zero_max = can_snap_zero && max === null && max_ext === 0;
277
303
  // Apply padding *only if* limits were NOT provided
278
304
  if (min === null && max === null && points.length > 0) {
279
305
  if (data_min !== data_max) {
@@ -339,7 +365,7 @@ export function get_nice_data_range(points, get_value, limits, scale_type, paddi
339
365
  // Use D3's nice() to create pretty boundaries
340
366
  // For arcsinh, we don't use D3's nice() - just return padded domain
341
367
  if (type_name === `arcsinh`) {
342
- return [data_min, data_max];
368
+ return [snap_zero_min ? 0 : data_min, snap_zero_max ? 0 : data_max];
343
369
  }
344
370
  // Create the scale with the *padded* data domain
345
371
  const scale = type_name === `log`
@@ -350,7 +376,7 @@ export function get_nice_data_range(points, get_value, limits, scale_type, paddi
350
376
  : scaleLinear().domain([data_min, data_max]);
351
377
  scale.nice();
352
378
  const [nice_min = data_min, nice_max = data_max] = scale.domain();
353
- return [nice_min, nice_max];
379
+ return [snap_zero_min ? 0 : nice_min, snap_zero_max ? 0 : nice_max];
354
380
  }
355
381
  // Generate logarithmic ticks (from ScatterPlot)
356
382
  export function generate_log_ticks(min, max, ticks_option) {
@@ -400,16 +426,16 @@ export function create_color_scale(color_scale_config, auto_color_range) {
400
426
  const candidate_interpolator = Object.entries(d3_sc).find(([key]) => key === scheme)?.[1];
401
427
  const interpolator = typeof candidate_interpolator === `function`
402
428
  ? candidate_interpolator
403
- : d3_sc.interpolateViridis;
429
+ : get_d3_interpolator(SCALE_DEFAULTS.scheme);
404
430
  const [min_val, max_val] = (typeof color_scale_config === `string` ? undefined : color_scale_config.value_range) ??
405
431
  auto_color_range;
406
432
  const scale_type = typeof color_scale_config === `string` ? undefined : color_scale_config.type;
407
433
  const type_name = get_scale_type_name(scale_type);
408
434
  if (type_name === `log`) {
409
- return scaleSequentialLog(interpolator).domain([
410
- Math.max(min_val, math.LOG_EPS),
411
- Math.max(max_val, min_val * 1.1),
412
- ]);
435
+ // clamp both ends (like create_scale): all-negative data otherwise yields an inverted
436
+ // [LOG_EPS, max<0] domain that maps every input to undefined
437
+ const lo = Math.max(min_val, math.LOG_EPS);
438
+ return scaleSequentialLog(interpolator).domain([lo, Math.max(max_val, lo * 1.1)]);
413
439
  }
414
440
  if (type_name === `arcsinh`) {
415
441
  // For arcsinh color scale, we create a custom scale that wraps the interpolator
@@ -436,7 +462,7 @@ function create_arcsinh_color_scale(interpolator, initial_domain, threshold) {
436
462
  const t_val = Math.asinh(value / safe_threshold);
437
463
  // Normalize to [0, 1]
438
464
  const normalized = t_max === t_min ? 0.5 : (t_val - t_min) / (t_max - t_min);
439
- return interpolator(Math.max(0, Math.min(1, normalized)));
465
+ return interpolator(clamp01(normalized));
440
466
  });
441
467
  // Domain getter/setter for D3 compatibility - returns same scale instance
442
468
  scale.domain = function (new_domain) {
@@ -449,7 +475,7 @@ function create_arcsinh_color_scale(interpolator, initial_domain, threshold) {
449
475
  }
450
476
  // Create a size scale function from configuration
451
477
  export function create_size_scale(config, all_size_values) {
452
- const [min_radius, max_radius] = config.radius_range ?? [2, 10];
478
+ const [min_radius, max_radius] = config.radius_range ?? SCALE_DEFAULTS.radius;
453
479
  const auto_range = all_size_values.length > 0
454
480
  ? extent(all_size_values.filter((val) => val !== null))
455
481
  : [0, 1];
@@ -29,7 +29,6 @@ export function violin_path(grid_px, half_offsets_px, center, side, orient) {
29
29
  }
30
30
  return `M${pts.map(([x_pos, y_pos]) => `${x_pos},${y_pos}`).join(`L`)}Z`;
31
31
  }
32
- //
33
32
  // Generate SVG path for a bar with rounded corners on the "free" end (away from axis).
34
33
  // For vertical bars, rounds top corners. For horizontal bars, rounds right corners.
35
34
  export function bar_path(x, y, w, h, r, vertical = true) {
@@ -0,0 +1,101 @@
1
+ export type FillBoundary = {
2
+ type: `series`;
3
+ series_idx: number;
4
+ } | {
5
+ type: `series`;
6
+ series_id: string | number;
7
+ } | {
8
+ type: `constant`;
9
+ value: number;
10
+ } | {
11
+ type: `axis`;
12
+ axis: `x` | `x2` | `y` | `y2`;
13
+ value?: number;
14
+ } | {
15
+ type: `function`;
16
+ fn: (coord: number) => number;
17
+ } | {
18
+ type: `data`;
19
+ values: readonly number[];
20
+ x?: readonly number[];
21
+ } | number;
22
+ export interface FillGradient {
23
+ type: `linear` | `radial`;
24
+ angle?: number;
25
+ center?: {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ stops: readonly [number, string][];
30
+ }
31
+ export interface FillEdgeStyle {
32
+ color?: string;
33
+ width?: number;
34
+ dash?: string;
35
+ opacity?: number;
36
+ }
37
+ export interface FillHoverStyle {
38
+ fill?: string;
39
+ fill_opacity?: number;
40
+ edge?: FillEdgeStyle;
41
+ cursor?: string;
42
+ scale?: number;
43
+ stroke?: string;
44
+ stroke_width?: number;
45
+ }
46
+ export interface FillHandlerEvent {
47
+ event: MouseEvent | KeyboardEvent;
48
+ region_idx: number;
49
+ region_id?: string | number;
50
+ x: number;
51
+ y: number;
52
+ px: number;
53
+ py: number;
54
+ label?: string;
55
+ metadata?: Record<string, unknown>;
56
+ }
57
+ export type LayerZIndex = `below-grid` | `below-lines` | `below-points` | `above-all`;
58
+ export declare const FILL_CURVE_TYPES: readonly ["linear", "monotoneX", "monotoneY", "step", "stepBefore", "stepAfter", "basis", "cardinal", "catmullRom", "natural"];
59
+ export type FillCurveType = (typeof FILL_CURVE_TYPES)[number];
60
+ export interface FillRegion {
61
+ id?: string | number;
62
+ label?: string;
63
+ upper: FillBoundary;
64
+ lower: FillBoundary;
65
+ x_range?: [number | null, number | null];
66
+ y_range?: [number | null, number | null];
67
+ where?: (x: number, y_upper: number, y_lower: number) => boolean;
68
+ fill?: string | FillGradient;
69
+ fill_opacity?: number;
70
+ edge_upper?: FillEdgeStyle;
71
+ edge_lower?: FillEdgeStyle;
72
+ curve?: FillCurveType;
73
+ step_position?: number;
74
+ z_index?: LayerZIndex;
75
+ visible?: boolean;
76
+ hover_style?: FillHoverStyle;
77
+ on_click?: (event: FillHandlerEvent) => void;
78
+ on_hover?: (event: FillHandlerEvent | null) => void;
79
+ show_in_legend?: boolean;
80
+ legend_group?: string;
81
+ metadata?: Record<string, unknown>;
82
+ }
83
+ export interface ErrorBand {
84
+ series: {
85
+ type: `series`;
86
+ series_idx: number;
87
+ } | {
88
+ type: `series`;
89
+ series_id: string | number;
90
+ };
91
+ error: number | readonly number[] | {
92
+ upper: number | readonly number[];
93
+ lower: number | readonly number[];
94
+ };
95
+ fill?: string;
96
+ fill_opacity?: number;
97
+ edge_style?: FillEdgeStyle;
98
+ id?: string | number;
99
+ label?: string;
100
+ show_in_legend?: boolean;
101
+ }
@@ -0,0 +1,15 @@
1
+ // Fill-region and error-band types for 2D plots (shaded areas between boundaries).
2
+ // Self-contained leaf module re-exported via $lib/plot/core/types.
3
+ // Curve types supported for fill path generation (matching d3-shape curves)
4
+ export const FILL_CURVE_TYPES = [
5
+ `linear`,
6
+ `monotoneX`,
7
+ `monotoneY`,
8
+ `step`,
9
+ `stepBefore`,
10
+ `stepAfter`,
11
+ `basis`,
12
+ `cardinal`,
13
+ `catmullRom`,
14
+ `natural`,
15
+ ];
@@ -0,0 +1,87 @@
1
+ import type { Point3D, Vec2, Vec3 } from '../../../math';
2
+ import type { AxisConfig, ControlsConfig, DataSeries, DisplayConfig, HandlerProps, Point, PointStyle, StyleOverrides } from './';
3
+ export interface ScatterPoint3D<Metadata = Record<string, unknown>> extends Point<Metadata> {
4
+ z: number;
5
+ }
6
+ export interface DataSeries3D<Metadata = Record<string, unknown>> extends Omit<DataSeries<Metadata>, `y_axis` | `filtered_data`> {
7
+ z: readonly number[];
8
+ filtered_data?: InternalPoint3D<Metadata>[];
9
+ }
10
+ export interface InternalPoint3D<Metadata = Record<string, unknown>> extends ScatterPoint3D<Metadata> {
11
+ series_idx: number;
12
+ point_idx: number;
13
+ color_value?: number | null;
14
+ size_value?: number | null;
15
+ point_style?: PointStyle;
16
+ }
17
+ export type SurfaceType = `grid` | `parametric` | `triangulated`;
18
+ export interface Surface3DConfig {
19
+ id?: string | number;
20
+ type: SurfaceType;
21
+ x_range?: Vec2;
22
+ y_range?: Vec2;
23
+ resolution?: number | Vec2;
24
+ z_fn?: (x: number, y: number) => number;
25
+ u_range?: Vec2;
26
+ v_range?: Vec2;
27
+ parametric_fn?: (u: number, v: number) => Point3D;
28
+ points?: Point3D[];
29
+ triangles?: Vec3[];
30
+ color?: string;
31
+ color_fn?: (x: number, y: number, z: number) => string;
32
+ opacity?: number;
33
+ wireframe?: boolean;
34
+ wireframe_color?: string;
35
+ wireframe_width?: number;
36
+ visible?: boolean;
37
+ double_sided?: boolean;
38
+ }
39
+ export interface AxisConfig3D extends AxisConfig {
40
+ show_plane?: boolean;
41
+ plane_opacity?: number;
42
+ }
43
+ export interface DisplayConfig3D extends DisplayConfig {
44
+ z_grid?: boolean;
45
+ z_zero_line?: boolean;
46
+ show_axes?: boolean;
47
+ show_axis_labels?: boolean;
48
+ show_bounding_box?: boolean;
49
+ show_grid?: boolean;
50
+ projections?: {
51
+ xy?: boolean;
52
+ xz?: boolean;
53
+ yz?: boolean;
54
+ };
55
+ projection_opacity?: number;
56
+ projection_scale?: number;
57
+ }
58
+ export interface Scatter3DHandlerProps<Metadata = Record<string, unknown>> extends Omit<HandlerProps<Metadata>, `x_axis` | `x2_axis` | `y_axis` | `y2_axis`> {
59
+ z: number;
60
+ x_axis: AxisConfig3D;
61
+ y_axis: AxisConfig3D;
62
+ z_axis: AxisConfig3D;
63
+ x_formatted: string;
64
+ y_formatted: string;
65
+ z_formatted: string;
66
+ color_value?: number | null;
67
+ }
68
+ export type Scatter3DHandlerEvent<Metadata = Record<string, unknown>> = Scatter3DHandlerProps<Metadata> & {
69
+ event?: MouseEvent;
70
+ point: InternalPoint3D<Metadata>;
71
+ };
72
+ export type CameraProjection3D = `perspective` | `orthographic`;
73
+ export interface PlotConfig3D {
74
+ x_axis?: AxisConfig3D;
75
+ y_axis?: AxisConfig3D;
76
+ z_axis?: AxisConfig3D;
77
+ display?: DisplayConfig3D;
78
+ }
79
+ export interface StyleOverrides3D extends StyleOverrides {
80
+ point?: StyleOverrides[`point`] & {
81
+ sphere_segments?: number;
82
+ };
83
+ }
84
+ export interface ControlsConfig3D extends ControlsConfig {
85
+ show_camera_controls?: boolean;
86
+ show_surface_controls?: boolean;
87
+ }
@@ -0,0 +1,4 @@
1
+ // 3D plot types (scatter points, surfaces, axes, handlers) extending the 2D vocabulary.
2
+ // Imports the 2D core types from the barrel and is re-exported by it; nothing in core depends on
3
+ // these, so that re-export cycle is type-only (erased at build, hence harmless).
4
+ export {};
@@ -0,0 +1,140 @@
1
+ import type { Vec3 } from '../../../math';
2
+ import type { LayerZIndex } from './fills';
3
+ export interface RefLineStyle {
4
+ color?: string;
5
+ width?: number;
6
+ dash?: string;
7
+ opacity?: number;
8
+ }
9
+ export interface RefLineAnnotation {
10
+ text: string;
11
+ position?: `start` | `center` | `end`;
12
+ side?: `above` | `below` | `left` | `right`;
13
+ offset?: {
14
+ x?: number;
15
+ y?: number;
16
+ };
17
+ gap?: number;
18
+ edge_padding?: number;
19
+ font_size?: string;
20
+ font_family?: string;
21
+ color?: string;
22
+ background?: string;
23
+ padding?: number;
24
+ rotate?: boolean;
25
+ }
26
+ export interface RefLineEvent {
27
+ event: MouseEvent | KeyboardEvent | FocusEvent;
28
+ line_idx: number;
29
+ line_id?: string | number;
30
+ type: RefLine[`type`];
31
+ label?: string;
32
+ metadata?: Record<string, unknown>;
33
+ }
34
+ export interface RefLineBase {
35
+ id?: string | number;
36
+ x_span?: [number | null, number | null];
37
+ y_span?: [number | null, number | null];
38
+ coord_mode?: `data` | `relative`;
39
+ x_axis?: `x1` | `x2`;
40
+ y_axis?: `y1` | `y2`;
41
+ style?: RefLineStyle;
42
+ annotation?: RefLineAnnotation;
43
+ z_index?: LayerZIndex;
44
+ visible?: boolean;
45
+ hover_style?: RefLineStyle;
46
+ on_click?: (event: RefLineEvent) => void;
47
+ on_hover?: (event: RefLineEvent | null) => void;
48
+ show_in_legend?: boolean;
49
+ label?: string;
50
+ legend_group?: string;
51
+ metadata?: Record<string, unknown>;
52
+ }
53
+ export type RefLineValue = number | Date | string;
54
+ export type RefLine = RefLineBase & ({
55
+ type: `horizontal`;
56
+ y: RefLineValue;
57
+ } | {
58
+ type: `vertical`;
59
+ x: RefLineValue;
60
+ } | {
61
+ type: `diagonal`;
62
+ slope: number;
63
+ intercept: number;
64
+ } | {
65
+ type: `segment`;
66
+ p1: [RefLineValue, RefLineValue];
67
+ p2: [RefLineValue, RefLineValue];
68
+ } | {
69
+ type: `line`;
70
+ p1: [RefLineValue, RefLineValue];
71
+ p2: [RefLineValue, RefLineValue];
72
+ });
73
+ export declare const REF_LINE_STYLE_DEFAULTS: Required<RefLineStyle>;
74
+ type Ref3DBase = Omit<RefLineBase, `coord_mode` | `x_axis` | `y_axis` | `style` | `hover_style` | `annotation` | `on_click` | `on_hover`> & {
75
+ z_span?: [number | null, number | null];
76
+ };
77
+ export interface RefLine3DBase extends Ref3DBase {
78
+ style?: RefLineStyle;
79
+ hover_style?: RefLineStyle;
80
+ annotation?: RefLineAnnotation;
81
+ on_click?: (event: {
82
+ line_idx: number;
83
+ line_id?: string | number;
84
+ }) => void;
85
+ on_hover?: (event: {
86
+ line_idx: number;
87
+ line_id?: string | number;
88
+ } | null) => void;
89
+ }
90
+ export type RefLine3D = RefLine3DBase & ({
91
+ type: `x-axis`;
92
+ y: number;
93
+ z: number;
94
+ } | {
95
+ type: `y-axis`;
96
+ x: number;
97
+ z: number;
98
+ } | {
99
+ type: `z-axis`;
100
+ x: number;
101
+ y: number;
102
+ } | {
103
+ type: `segment`;
104
+ p1: Vec3;
105
+ p2: Vec3;
106
+ } | {
107
+ type: `line`;
108
+ p1: Vec3;
109
+ p2: Vec3;
110
+ });
111
+ export interface RefPlaneStyle {
112
+ color?: string;
113
+ opacity?: number;
114
+ wireframe?: boolean;
115
+ wireframe_color?: string;
116
+ double_sided?: boolean;
117
+ }
118
+ export interface RefPlaneBase extends Ref3DBase {
119
+ style?: RefPlaneStyle;
120
+ }
121
+ export type RefPlane = RefPlaneBase & ({
122
+ type: `xy`;
123
+ z: number;
124
+ } | {
125
+ type: `xz`;
126
+ y: number;
127
+ } | {
128
+ type: `yz`;
129
+ x: number;
130
+ } | {
131
+ type: `normal`;
132
+ normal: Vec3;
133
+ point: Vec3;
134
+ } | {
135
+ type: `points`;
136
+ p1: Vec3;
137
+ p2: Vec3;
138
+ p3: Vec3;
139
+ });
140
+ export {};
@@ -0,0 +1,9 @@
1
+ // Reference-line and reference-plane types for 2D and 3D plots.
2
+ // Depends only on LayerZIndex (from ./fills) and math vectors; re-exported via $lib/plot/core/types.
3
+ // Default style values for reference lines
4
+ export const REF_LINE_STYLE_DEFAULTS = {
5
+ color: `currentColor`,
6
+ width: 1,
7
+ dash: ``,
8
+ opacity: 1,
9
+ };