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
@@ -2,6 +2,7 @@ import type { D3InterpolateName } from '../../colors';
2
2
  import type { Point2D } from '../../math';
3
3
  import type { AxisLoadError, BasePlotProps, ColorScaleConfig, ControlsConfig, DataLoaderFn, DataSeries, ErrorBand, FillHandlerEvent, FillRegion, HoverConfig, InternalPoint, LabelPlacementConfig, LegendConfig, PanConfig, PlotConfig, Point, RefLine, RefLineEvent, ScatterHandlerEvent, ScatterHandlerProps, SizeScaleConfig, StyleOverrides, UserContentProps } from '..';
4
4
  import { ColorBar } from '..';
5
+ import type { MarginalsProp } from '../core/marginals';
5
6
  import type { ComponentProps, Snippet } from 'svelte';
6
7
  import type { HTMLAttributes } from 'svelte/elements';
7
8
  import type { TweenOptions } from 'svelte/motion';
@@ -63,6 +64,7 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
63
64
  on_axis_change?: (axis: `x` | `x2` | `y` | `y2`, key: string, new_series: DataSeries<Metadata>[]) => void;
64
65
  on_error?: (error: AxisLoadError) => void;
65
66
  pan?: PanConfig;
67
+ marginals?: MarginalsProp;
66
68
  };
67
69
  exports: {};
68
70
  bindings: "display" | "x2_axis" | "y_axis" | "y2_axis" | "fullscreen" | "wrapper" | "series" | "hovered" | "ref_lines" | "x_axis" | "tooltip_point" | "fill_regions" | "selected_series_idx";
@@ -38,9 +38,7 @@
38
38
  } = $props()
39
39
 
40
40
  let non_null_series = $derived(series.filter((srs) => srs != null))
41
- let visible_series = $derived(
42
- non_null_series.filter((srs) => (srs.visible ?? true)),
43
- )
41
+ let visible_series = $derived(non_null_series.filter((srs) => srs.visible ?? true))
44
42
  let has_multiple_series = $derived(non_null_series.length > 1)
45
43
 
46
44
  // Derive what marker types are present, and whether color/size are data-driven
@@ -55,7 +53,8 @@
55
53
  visible_series.some((srs) => srs?.size_values?.some((val) => val != null)),
56
54
  )
57
55
 
58
- $effect(() => { // Initialize show_points/show_lines from defaults
56
+ $effect(() => {
57
+ // Initialize show_points/show_lines from defaults
59
58
  styles.show_points ??= DEFAULTS.scatter.show_points
60
59
  styles.show_lines ??= DEFAULTS.scatter.show_lines
61
60
  })
@@ -77,14 +76,14 @@
77
76
  {...rest}
78
77
  >
79
78
  {@render children?.({
80
- x_axis,
81
- x2_axis,
82
- y_axis,
83
- y2_axis,
84
- display,
85
- styles,
86
- selected_series_idx,
87
- })}
79
+ x_axis,
80
+ x2_axis,
81
+ y_axis,
82
+ y2_axis,
83
+ display,
84
+ styles,
85
+ selected_series_idx,
86
+ })}
88
87
  {#if has_any_points || has_any_lines}
89
88
  <SettingsSection
90
89
  title="Markers"
@@ -97,14 +96,18 @@
97
96
  >
98
97
  {#if has_any_points}
99
98
  <label
100
- {@attach tooltip({ content: `Toggle visibility of data points in the scatter plot` })}
99
+ {@attach tooltip({
100
+ content: `Toggle visibility of data points in the scatter plot`,
101
+ })}
101
102
  >
102
103
  <input type="checkbox" bind:checked={styles.show_points} /> Show points
103
104
  </label>
104
105
  {/if}
105
106
  {#if has_any_lines}
106
107
  <label
107
- {@attach tooltip({ content: `Toggle visibility of connecting lines between data points` })}
108
+ {@attach tooltip({
109
+ content: `Toggle visibility of connecting lines between data points`,
110
+ })}
108
111
  >
109
112
  <input type="checkbox" bind:checked={styles.show_lines} /> Show lines
110
113
  </label>
@@ -164,11 +167,7 @@
164
167
  {#if !has_color_data}
165
168
  <div class="pane-row" data-key="point.color">
166
169
  <label for="{uid}-point-color">Color:</label>
167
- <input
168
- id="{uid}-point-color"
169
- type="color"
170
- bind:value={styles.point.color}
171
- />
170
+ <input id="{uid}-point-color" type="color" bind:value={styles.point.color} />
172
171
  </div>
173
172
  {/if}
174
173
  <div class="pane-row" data-key="point.opacity">
@@ -12,6 +12,6 @@ type $$ComponentProps = Omit<PlotControlsProps, `children` | `post_children`> &
12
12
  } & Required<PlotConfig>
13
13
  ]>;
14
14
  };
15
- declare const ScatterPlotControls: import("svelte").Component<$$ComponentProps, {}, "display" | "x2_axis" | "y_axis" | "y2_axis" | "x_axis" | "selected_series_idx" | "styles">;
15
+ declare const ScatterPlotControls: import("svelte").Component<$$ComponentProps, {}, "display" | "x2_axis" | "y_axis" | "y2_axis" | "x_axis" | "styles" | "selected_series_idx">;
16
16
  type ScatterPlotControls = ReturnType<typeof ScatterPlotControls>;
17
17
  export default ScatterPlotControls;
@@ -3,7 +3,10 @@
3
3
  import type { HoverStyle, LabelStyle, Point } from '..'
4
4
  import type { Point2D } from '../../math'
5
5
  import type { PointStyle } from '../core/types'
6
- import { estimate_label_size, label_leader_segment } from '../core/utils/label-placement'
6
+ import {
7
+ estimate_label_size,
8
+ label_leader_segment,
9
+ } from '../core/utils/label-placement'
7
10
  import { DEFAULTS } from '../../settings'
8
11
  import * as d3_symbols from 'd3-shape'
9
12
  import { symbol } from 'd3-shape'
@@ -103,13 +106,16 @@
103
106
  {@const offset_x = label.offset?.x ?? 10}
104
107
  {@const offset_y = label.offset?.y ?? 0}
105
108
  {@const displacement = Math.hypot(offset_x, offset_y)}
106
- {@const leader_line = displacement > leader_line_threshold ? label_leader_segment({
107
- point: { x: 0, y: 0 },
108
- point_radius: style.radius ?? 3,
109
- label_center: { x: offset_x, y: offset_y },
110
- label_size: label.size ?? estimate_label_size(label.text, label.font_size),
111
- min_length: 6,
112
- }) : null}
109
+ {@const leader_line =
110
+ displacement > leader_line_threshold
111
+ ? label_leader_segment({
112
+ point: { x: 0, y: 0 },
113
+ point_radius: style.radius ?? 3,
114
+ label_center: { x: offset_x, y: offset_y },
115
+ label_size: label.size ?? estimate_label_size(label.text, label.font_size),
116
+ min_length: 6,
117
+ })
118
+ : null}
113
119
  {#if leader_line}
114
120
  <line
115
121
  x1={leader_line.x1}
@@ -164,7 +170,8 @@
164
170
  filter: blur(3px);
165
171
  }
166
172
  @keyframes ring-pulse {
167
- 0%, 100% {
173
+ 0%,
174
+ 100% {
168
175
  opacity: 0.3;
169
176
  transform: scale(1);
170
177
  }
@@ -67,7 +67,7 @@ export type BinTransforms = {
67
67
  export declare function scale_bin_transform(scale_type?: ScaleType): BinTransform;
68
68
  export declare const get_metadata_at: <Metadata>(metadata: DensePointSeries<Metadata>[`metadata`], point_idx: number) => Metadata | undefined;
69
69
  export declare const range_bounds: (range: Vec2) => Vec2;
70
- export declare function series_extents(series: readonly DensePointSeries[]): {
70
+ export declare function series_extents(series: readonly DensePointSeries[], x_scale_type?: ScaleType, y_scale_type?: ScaleType): {
71
71
  x: Vec2;
72
72
  y: Vec2;
73
73
  };
@@ -33,39 +33,55 @@ export const range_bounds = (range) => range[0] <= range[1] ? range : [range[1],
33
33
  const in_bounds = (value, min, max) => Number.isFinite(value) && value >= min && value <= max;
34
34
  const value_bin = (value, min, span, bins) => Math.min(bins - 1, Math.max(0, Math.floor(((value - min) / span) * bins)));
35
35
  const series_length = (srs) => Math.min(srs.x.length, srs.y.length);
36
- const padded_extent = (min, max) => {
36
+ const padded_extent = (min, max, scale_type) => {
37
+ const log_scale = get_scale_type_name(scale_type) === `log`;
37
38
  if (!Number.isFinite(min) || !Number.isFinite(max))
38
- return [0, 1];
39
- if (min === max)
40
- return [min - 0.5, max + 0.5];
41
- const padding = (max - min) * 0.05;
42
- return [min - padding, max + padding];
39
+ return log_scale ? [1, 10] : [0, 1];
40
+ const { forward, inverse } = scale_bin_transform(scale_type);
41
+ const t_min = forward(min);
42
+ const t_max = forward(max);
43
+ if (t_min === t_max) {
44
+ if (log_scale) {
45
+ const center = Math.max(min, LOG_EPS);
46
+ return [Math.max(LOG_EPS, center / Math.sqrt(10)), center * Math.sqrt(10)];
47
+ }
48
+ return [inverse(t_min - 0.5), inverse(t_max + 0.5)];
49
+ }
50
+ const padding = (t_max - t_min) * 0.05;
51
+ const clamp = (val) => Math.min(Number.MAX_VALUE, Math.max(-Number.MAX_VALUE, val));
52
+ return [clamp(inverse(t_min - padding)), clamp(inverse(t_max + padding))];
43
53
  };
44
- export function series_extents(series) {
54
+ export function series_extents(series, x_scale_type, y_scale_type) {
45
55
  let x_min = Infinity;
46
56
  let x_max = -Infinity;
47
57
  let y_min = Infinity;
48
58
  let y_max = -Infinity;
59
+ const log_x = get_scale_type_name(x_scale_type) === `log`;
60
+ const log_y = get_scale_type_name(y_scale_type) === `log`;
49
61
  for (const srs of series) {
50
62
  const n_points = series_length(srs);
51
63
  for (let idx = 0; idx < n_points; idx++) {
52
64
  const x = srs.x[idx];
53
65
  const y = srs.y[idx];
54
- if (Number.isFinite(x)) {
55
- if (x < x_min)
56
- x_min = x;
57
- if (x > x_max)
58
- x_max = x;
59
- }
60
- if (Number.isFinite(y)) {
61
- if (y < y_min)
62
- y_min = y;
63
- if (y > y_max)
64
- y_max = y;
65
- }
66
+ if (!Number.isFinite(x) || !Number.isFinite(y))
67
+ continue;
68
+ // Align with bin_points / log scale floor so sub-LOG_EPS samples don't widen extent
69
+ if ((log_x && x < LOG_EPS) || (log_y && y < LOG_EPS))
70
+ continue;
71
+ if (x < x_min)
72
+ x_min = x;
73
+ if (x > x_max)
74
+ x_max = x;
75
+ if (y < y_min)
76
+ y_min = y;
77
+ if (y > y_max)
78
+ y_max = y;
66
79
  }
67
80
  }
68
- return { x: padded_extent(x_min, x_max), y: padded_extent(y_min, y_max) };
81
+ return {
82
+ x: padded_extent(x_min, x_max, x_scale_type),
83
+ y: padded_extent(y_min, y_max, y_scale_type),
84
+ };
69
85
  }
70
86
  export function bin_points(series, x_range, y_range, x_bins, y_bins, transforms) {
71
87
  const counts = new Uint32Array(x_bins * y_bins);
@@ -1,12 +1,13 @@
1
1
  import type { D3InterpolateName } from '../../colors';
2
2
  import type { DenseInternalPoint } from './adaptive-density';
3
3
  import type ColorBar from '../core/components/ColorBar.svelte';
4
- import type { ColorScaleConfig, LabelPlacementConfig, ScatterHandlerProps, SizeScaleConfig } from '../core/types';
4
+ import type { ColorScaleConfig, LabelPlacementConfig, RefLine, ScatterHandlerProps, SizeScaleConfig } from '../core/types';
5
5
  import type { ComponentProps, Snippet } from 'svelte';
6
6
  export type BinnedColorScaleConfig = ColorScaleConfig | D3InterpolateName;
7
7
  export type BinnedSizeScaleConfig = SizeScaleConfig & {
8
8
  pick_radius?: number | `auto`;
9
9
  };
10
+ export declare const DEFAULT_BINNED_SIZE_SCALE: BinnedSizeScaleConfig;
10
11
  export type BinnedDensityConfig = {
11
12
  bin_px?: number;
12
13
  color_scale?: BinnedColorScaleConfig;
@@ -27,7 +28,7 @@ export type BinnedRefLine = {
27
28
  width?: number;
28
29
  };
29
30
  export type BinnedOverlaysConfig = {
30
- ref_lines?: BinnedRefLine[];
31
+ ref_lines?: (BinnedRefLine | RefLine)[];
31
32
  };
32
33
  export type BinnedPointBasePayload<Metadata extends Record<string, unknown> = Record<string, unknown>> = ScatterHandlerProps<Metadata> & {
33
34
  point: DenseInternalPoint<Metadata>;
@@ -1 +1,6 @@
1
- export {};
1
+ import { SCALE_DEFAULTS } from '../core/types';
2
+ export const DEFAULT_BINNED_SIZE_SCALE = {
3
+ type: `linear`,
4
+ radius_range: SCALE_DEFAULTS.binned_radius,
5
+ pick_radius: SCALE_DEFAULTS.binned_radius[1],
6
+ };
@@ -1,6 +1,6 @@
1
1
  import type { DataSeries, FillRegion, InternalPoint, LegendItem, PointStyle } from '..';
2
2
  import { type AxisRanges } from '../core/types';
3
- export type { AxisRanges };
3
+ export { type AxisRanges } from '../core/types';
4
4
  export declare function filter_series_to_ranges<Metadata = Record<string, unknown>>(series: readonly DataSeries<Metadata>[], ranges: AxisRanges): (DataSeries<Metadata> & {
5
5
  filtered_data: InternalPoint<Metadata>[];
6
6
  })[];
@@ -2,7 +2,8 @@ import { symbol_names } from '../../labels';
2
2
  import { get_series_color, get_series_symbol, process_prop, } from '../core/data-transform';
3
3
  import { is_fill_gradient } from '../core/fill-utils';
4
4
  import { DEFAULT_MARKERS } from '../core/types';
5
- const in_range = (val, lo, hi) => val != null && !isNaN(val) && val >= Math.min(lo, hi) && val <= Math.max(lo, hi);
5
+ export {} from '../core/types';
6
+ const in_range = (val, lo, hi) => val != null && Number.isFinite(val) && val >= Math.min(lo, hi) && val <= Math.max(lo, hi);
6
7
  // Filter series data to only include points within bounds and augment with internal data.
7
8
  // Full x/y arrays are kept on each returned series (via spread) so connecting lines can
8
9
  // continue through off-range points; only filtered_data (rendered markers) is range-limited.
@@ -79,7 +80,7 @@ export function build_legend_data(series, computed_fills, color_scale_fn) {
79
80
  const first_point_style = Array.isArray(data_series?.point_style)
80
81
  ? data_series.point_style[0]
81
82
  : data_series?.point_style;
82
- if (series_markers?.includes(`points`)) {
83
+ if (series_markers.includes(`points`)) {
83
84
  if (first_point_style) {
84
85
  if (typeof first_point_style.symbol_type === `string` &&
85
86
  symbol_names.includes(first_point_style.symbol_type)) {
@@ -101,7 +102,7 @@ export function build_legend_data(series, computed_fills, color_scale_fn) {
101
102
  display_style.symbol_type = undefined;
102
103
  display_style.symbol_color = undefined;
103
104
  }
104
- if (series_markers?.includes(`line`)) {
105
+ if (series_markers.includes(`line`)) {
105
106
  // Explicit line stroke, then color scale, then point colors, then series default
106
107
  let line_color = data_series?.line_style?.stroke;
107
108
  if (!line_color) {
@@ -172,7 +173,7 @@ export function build_legend_data(series, computed_fills, color_scale_fn) {
172
173
  const is_transparent_or_none = (color) => !color ||
173
174
  color === `none` ||
174
175
  color === `transparent` ||
175
- /rgba\([^)]+[,/]\s*0(\.0*)?\s*\)$/.test(color);
176
+ /rgba\([^)]+[,/]\s*0(?:\.0*)?\s*\)$/.test(color);
176
177
  // Type-guard negation of is_transparent_or_none so usable colors narrow to string
177
178
  const is_opaque_color = (color) => !is_transparent_or_none(color);
178
179
  // Resolve tooltip background color: point color-scale value, then point fill, then point
@@ -186,12 +187,12 @@ export function pick_tooltip_bg(point, series, color_scale_fn) {
186
187
  const fill_color = point_style?.fill;
187
188
  if (is_opaque_color(fill_color))
188
189
  return fill_color;
189
- if (series_markers?.includes(`points`)) {
190
+ if (series_markers.includes(`points`)) {
190
191
  const stroke_color = point_style?.stroke;
191
192
  if (is_opaque_color(stroke_color))
192
193
  return stroke_color;
193
194
  }
194
- if (series_markers?.includes(`line`)) {
195
+ if (series_markers.includes(`line`)) {
195
196
  const line_style = series?.line_style ?? {};
196
197
  const first_point_style = Array.isArray(series?.point_style)
197
198
  ? series?.point_style[0]
@@ -203,7 +204,7 @@ export function pick_tooltip_bg(point, series, color_scale_fn) {
203
204
  }
204
205
  if (is_transparent_or_none(line_color_candidate) && first_color_value != null)
205
206
  line_color_candidate = color_scale_fn(first_color_value);
206
- if (is_transparent_or_none(line_color_candidate) && series_markers?.includes(`points`))
207
+ if (is_transparent_or_none(line_color_candidate) && series_markers.includes(`points`))
207
208
  line_color_candidate = first_point_style?.stroke;
208
209
  if (is_opaque_color(line_color_candidate))
209
210
  return line_color_candidate;
@@ -19,12 +19,12 @@
19
19
  LegendConfig,
20
20
  RefLine3D,
21
21
  RefPlane,
22
- ScaleType,
23
22
  Scatter3DHandlerEvent,
24
23
  SizeScaleConfig,
25
24
  StyleOverrides3D,
26
25
  Surface3DConfig,
27
26
  } from '../core/types'
27
+ import { SCALE_DEFAULTS } from '../core/types'
28
28
  import { Canvas } from '@threlte/core'
29
29
  import * as extras from '@threlte/extras'
30
30
  import { onMount } from 'svelte'
@@ -54,17 +54,9 @@
54
54
  },
55
55
  styles = {},
56
56
  // Color and size scaling
57
- color_scale = {
58
- type: `linear` as ScaleType,
59
- scheme: `interpolateViridis` as D3InterpolateName,
60
- value_range: undefined,
61
- },
57
+ color_scale = SCALE_DEFAULTS.color,
62
58
  color_bar = {},
63
- size_scale = {
64
- type: `linear` as ScaleType,
65
- radius_range: [0.05, 0.2],
66
- value_range: undefined,
67
- },
59
+ size_scale = SCALE_DEFAULTS.size_3d,
68
60
  // Legend
69
61
  legend = {},
70
62
  // Camera settings
@@ -119,7 +111,7 @@
119
111
  display?: DisplayConfig3D
120
112
  styles?: StyleOverrides3D
121
113
  color_scale?: ColorScaleConfig | D3InterpolateName
122
- color_bar?: ComponentProps<typeof ColorBar> & { margin?: number | Sides } | null
114
+ color_bar?: (ComponentProps<typeof ColorBar> & { margin?: number | Sides }) | null
123
115
  size_scale?: SizeScaleConfig
124
116
  legend?: LegendConfig | null
125
117
  camera_position?: Vec3
@@ -150,9 +142,7 @@
150
142
  orbit_controls?: ComponentProps<typeof extras.OrbitControls>[`ref`]
151
143
  tooltip?: Snippet<[Scatter3DHandlerEvent<Metadata>]>
152
144
  children?: Snippet<[{ height: number; width: number; fullscreen: boolean }]>
153
- header_controls?: Snippet<
154
- [{ height: number; width: number; fullscreen: boolean }]
155
- >
145
+ header_controls?: Snippet<[{ height: number; width: number; fullscreen: boolean }]>
156
146
  controls_extra?: Snippet
157
147
  } = $props()
158
148
 
@@ -160,7 +150,7 @@
160
150
 
161
151
  // Track mounted state to avoid SSR/hydration mismatch with Canvas
162
152
  let mounted = $state(false)
163
- onMount(() => mounted = true)
153
+ onMount(() => (mounted = true))
164
154
 
165
155
  const series_visibility_keys = $derived.by((): string[] => {
166
156
  const id_counts = new Map<string | number, number>()
@@ -190,8 +180,9 @@
190
180
  }
191
181
  })
192
182
  let series_visibility = $derived(
193
- series.map((srs, idx) =>
194
- visibility_overrides.get(series_visibility_keys[idx]) ?? srs?.visible ?? true
183
+ series.map(
184
+ (srs, idx) =>
185
+ visibility_overrides.get(series_visibility_keys[idx]) ?? srs?.visible ?? true,
195
186
  ),
196
187
  )
197
188
 
@@ -219,16 +210,14 @@
219
210
 
220
211
  // Collect all color values for color bar
221
212
  let all_color_values = $derived(
222
- series.filter(Boolean).flatMap((srs) =>
223
- srs.color_values?.filter((val): val is number => val != null) ?? []
224
- ),
213
+ series
214
+ .filter(Boolean)
215
+ .flatMap((srs) => srs.color_values?.filter((val): val is number => val != null) ?? []),
225
216
  )
226
217
 
227
218
  let auto_color_range = $derived(calculate_domain(all_color_values))
228
219
 
229
- let color_scale_fn = $derived(
230
- create_color_scale(normalized_color_scale, auto_color_range),
231
- )
220
+ let color_scale_fn = $derived(create_color_scale(normalized_color_scale, auto_color_range))
232
221
 
233
222
  // Legend data
234
223
  let legend_data = $derived(
@@ -244,10 +233,9 @@
244
233
  display_style: {
245
234
  symbol_type: `Circle` as const,
246
235
  symbol_color: srs?.point_style
247
- ? (Array.isArray(srs.point_style)
248
- ? srs.point_style[0]?.fill
249
- : srs.point_style?.fill) ??
250
- series_color
236
+ ? ((Array.isArray(srs.point_style)
237
+ ? srs.point_style[0]?.fill
238
+ : srs.point_style?.fill) ?? series_color)
251
239
  : series_color,
252
240
  },
253
241
  has_explicit_label: Boolean(srs?.label),
@@ -306,7 +294,7 @@
306
294
  bind:clientWidth={width}
307
295
  bind:clientHeight={height}
308
296
  {...rest}
309
- class="scatter-3d {rest.class ?? ``}"
297
+ class={[`scatter-3d`, rest.class]}
310
298
  class:fullscreen
311
299
  >
312
300
  {#if width && height}
@@ -391,9 +379,9 @@
391
379
  <!-- Color Bar -->
392
380
  {#if color_bar && all_color_values.length > 0}
393
381
  {@const color_domain = [
394
- normalized_color_scale.value_range?.[0] ?? auto_color_range[0],
395
- normalized_color_scale.value_range?.[1] ?? auto_color_range[1],
396
- ] as Vec2}
382
+ normalized_color_scale.value_range?.[0] ?? auto_color_range[0],
383
+ normalized_color_scale.value_range?.[1] ?? auto_color_range[1],
384
+ ] as Vec2}
397
385
  <ColorBar
398
386
  tick_labels={4}
399
387
  tick_side="primary"
@@ -401,7 +389,8 @@
401
389
  color_scale_domain={color_domain}
402
390
  scale_type={normalized_color_scale.type}
403
391
  range={color_domain?.every((val) => val != null) ? color_domain : undefined}
404
- wrapper_style="position: absolute; bottom: 2em; left: 2em; {color_bar?.wrapper_style ?? ``}"
392
+ wrapper_style="position: absolute; bottom: 2em; left: 2em; {color_bar?.wrapper_style ??
393
+ ``}"
405
394
  bar_style="width: 200px; height: 16px; {color_bar?.style ?? ``}"
406
395
  {...color_bar}
407
396
  />
@@ -508,7 +497,9 @@
508
497
  div.scatter-3d :global(.pane-toggle),
509
498
  div.scatter-3d .header-controls {
510
499
  opacity: 0;
511
- transition: opacity 0.2s, background-color 0.2s;
500
+ transition:
501
+ opacity 0.2s,
502
+ background-color 0.2s;
512
503
  }
513
504
  div.scatter-3d:hover :global(.pane-toggle),
514
505
  div.scatter-3d:hover .header-controls,
@@ -64,7 +64,7 @@ declare function $$render<Metadata extends Record<string, unknown> = Record<stri
64
64
  controls_extra?: Snippet;
65
65
  };
66
66
  exports: {};
67
- bindings: "fullscreen" | "wrapper" | "hovered" | "scene" | "camera" | "orbit_controls" | "camera_position" | "tooltip_point";
67
+ bindings: "fullscreen" | "wrapper" | "hovered" | "camera" | "camera_position" | "orbit_controls" | "scene" | "tooltip_point";
68
68
  slots: {};
69
69
  events: {};
70
70
  };
@@ -72,7 +72,7 @@ declare class __sveltets_Render<Metadata extends Record<string, unknown> = Recor
72
72
  props(): ReturnType<typeof $$render<Metadata>>['props'];
73
73
  events(): ReturnType<typeof $$render<Metadata>>['events'];
74
74
  slots(): ReturnType<typeof $$render<Metadata>>['slots'];
75
- bindings(): "fullscreen" | "wrapper" | "hovered" | "scene" | "camera" | "orbit_controls" | "camera_position" | "tooltip_point";
75
+ bindings(): "fullscreen" | "wrapper" | "hovered" | "camera" | "camera_position" | "orbit_controls" | "scene" | "tooltip_point";
76
76
  exports(): {};
77
77
  }
78
78
  interface $$IsomorphicComponent {
@@ -14,6 +14,7 @@
14
14
  } from '../core/types'
15
15
  import { calculate_domain } from '../core/scales'
16
16
  import { unique_id } from '../core/utils'
17
+ import { parse_num_token } from '../../utils'
17
18
  import type { ComponentProps, Snippet } from 'svelte'
18
19
 
19
20
  // Unique ID prefix to avoid conflicts when multiple instances on same page
@@ -69,8 +70,8 @@
69
70
 
70
71
  // Helpers to update display properties - avoids verbose inline handlers
71
72
  const update_display = (key: keyof DisplayConfig3D) => (event: InputControlEvent) => {
72
- const parsed = parseFloat(get_input_value(event))
73
- // Guard against NaN when input is cleared - preserve existing value
73
+ const parsed = parse_num_token(get_input_value(event))
74
+ // Guard against cleared/invalid input - preserve existing value
74
75
  if (!Number.isNaN(parsed)) display = { ...display, [key]: parsed }
75
76
  }
76
77
  const toggle_display = (key: keyof DisplayConfig3D) => () => {
@@ -356,9 +357,11 @@
356
357
  {#if series.length > 0 || surfaces.length > 0}
357
358
  <div class="data-summary">
358
359
  {#if series.length > 0}
359
- <span>{series.length} series · {
360
- series.reduce((sum, srs) => sum + srs.x.length, 0).toLocaleString()
361
- } points</span>
360
+ <span
361
+ >{series.length} series · {series
362
+ .reduce((sum, srs) => sum + srs.x.length, 0)
363
+ .toLocaleString()} points</span
364
+ >
362
365
  {/if}
363
366
  {#if surfaces.length > 0}
364
367
  <span>{surfaces.length} {surfaces.length === 1 ? `surface` : `surfaces`}</span>