matterviz 0.3.6 → 0.3.7

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 (863) hide show
  1. package/dist/EmptyState.svelte.d.ts +9 -0
  2. package/dist/FilePicker.svelte +360 -0
  3. package/dist/FilePicker.svelte.d.ts +17 -0
  4. package/dist/Icon.svelte.d.ts +13 -0
  5. package/dist/MillerIndexInput.svelte +66 -0
  6. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  7. package/dist/api/mp.d.ts +6 -0
  8. package/dist/api/mp.js +22 -0
  9. package/dist/api/optimade.d.ts +45 -0
  10. package/dist/api/optimade.js +135 -0
  11. package/dist/brillouin/BrillouinZone.svelte +549 -0
  12. package/dist/brillouin/BrillouinZone.svelte.d.ts +83 -0
  13. package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
  14. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
  15. package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
  16. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  17. package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  18. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  19. package/dist/brillouin/BrillouinZoneScene.svelte +476 -0
  20. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +48 -0
  21. package/dist/brillouin/BrillouinZoneTooltip.svelte +92 -0
  22. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
  23. package/dist/brillouin/compute.d.ts +17 -0
  24. package/dist/brillouin/compute.js +426 -0
  25. package/dist/brillouin/index.d.ts +8 -0
  26. package/dist/brillouin/index.js +7 -0
  27. package/dist/brillouin/types.d.ts +43 -0
  28. package/dist/brillouin/types.js +1 -0
  29. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  30. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  31. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  32. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  33. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  34. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  35. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  36. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  37. package/dist/chempot-diagram/async-compute.svelte.js +78 -0
  38. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  39. package/dist/chempot-diagram/chempot-worker.js +11 -0
  40. package/dist/chempot-diagram/color.d.ts +10 -0
  41. package/dist/chempot-diagram/color.js +32 -0
  42. package/dist/chempot-diagram/compute.d.ts +48 -0
  43. package/dist/chempot-diagram/compute.js +806 -0
  44. package/dist/chempot-diagram/index.d.ts +6 -0
  45. package/dist/chempot-diagram/index.js +6 -0
  46. package/dist/chempot-diagram/pointer.d.ts +16 -0
  47. package/dist/chempot-diagram/pointer.js +40 -0
  48. package/dist/chempot-diagram/temperature.d.ts +15 -0
  49. package/dist/chempot-diagram/temperature.js +34 -0
  50. package/dist/chempot-diagram/types.d.ts +81 -0
  51. package/dist/chempot-diagram/types.js +28 -0
  52. package/dist/colors/index.d.ts +47 -0
  53. package/dist/colors/index.js +203 -0
  54. package/dist/composition/BarChart.svelte +297 -0
  55. package/dist/composition/BarChart.svelte.d.ts +39 -0
  56. package/dist/composition/BubbleChart.svelte +218 -0
  57. package/dist/composition/BubbleChart.svelte.d.ts +28 -0
  58. package/dist/composition/Composition.svelte +165 -0
  59. package/dist/composition/Composition.svelte.d.ts +15 -0
  60. package/dist/composition/Formula.svelte +268 -0
  61. package/dist/composition/Formula.svelte.d.ts +19 -0
  62. package/dist/composition/FormulaFilter.svelte +1257 -0
  63. package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
  64. package/dist/composition/PieChart.svelte +323 -0
  65. package/dist/composition/PieChart.svelte.d.ts +37 -0
  66. package/dist/composition/format.d.ts +15 -0
  67. package/dist/composition/format.js +109 -0
  68. package/dist/composition/index.d.ts +20 -0
  69. package/dist/composition/index.js +14 -0
  70. package/dist/composition/parse.d.ts +56 -0
  71. package/dist/composition/parse.js +474 -0
  72. package/dist/constants.d.ts +29 -0
  73. package/dist/constants.js +99 -0
  74. package/dist/controls.d.ts +14 -0
  75. package/dist/controls.js +30 -0
  76. package/dist/convex-hull/ConvexHull.svelte +157 -0
  77. package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
  78. package/dist/convex-hull/ConvexHull2D.svelte +825 -0
  79. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
  80. package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
  81. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
  82. package/dist/convex-hull/ConvexHull4D.svelte +1398 -0
  83. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
  84. package/dist/convex-hull/ConvexHullControls.svelte +535 -0
  85. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
  86. package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
  87. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
  88. package/dist/convex-hull/ConvexHullStats.svelte +929 -0
  89. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
  90. package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
  91. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
  92. package/dist/convex-hull/GasPressureControls.svelte +247 -0
  93. package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
  94. package/dist/convex-hull/StructurePopup.svelte +151 -0
  95. package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
  96. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
  97. package/dist/convex-hull/barycentric-coords.d.ts +18 -0
  98. package/dist/convex-hull/barycentric-coords.js +182 -0
  99. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  100. package/dist/convex-hull/demo-temperature.js +40 -0
  101. package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
  102. package/dist/convex-hull/gas-thermodynamics.js +314 -0
  103. package/dist/convex-hull/helpers.d.ts +114 -0
  104. package/dist/convex-hull/helpers.js +710 -0
  105. package/dist/convex-hull/index.d.ts +119 -0
  106. package/dist/convex-hull/index.js +58 -0
  107. package/dist/convex-hull/thermodynamics.d.ts +67 -0
  108. package/dist/convex-hull/thermodynamics.js +1752 -0
  109. package/dist/convex-hull/types.d.ts +162 -0
  110. package/dist/convex-hull/types.js +36 -0
  111. package/dist/coordination/CoordinationBarPlot.svelte +311 -0
  112. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
  113. package/dist/coordination/calc-coordination.d.ts +15 -0
  114. package/dist/coordination/calc-coordination.js +63 -0
  115. package/dist/coordination/index.d.ts +8 -0
  116. package/dist/coordination/index.js +7 -0
  117. package/dist/effects.svelte.d.ts +12 -0
  118. package/dist/effects.svelte.js +37 -0
  119. package/dist/element/BohrAtom.svelte.d.ts +20 -0
  120. package/dist/element/ElementHeading.svelte +26 -0
  121. package/dist/element/ElementHeading.svelte.d.ts +8 -0
  122. package/dist/element/ElementPhoto.svelte +57 -0
  123. package/dist/element/ElementPhoto.svelte.d.ts +9 -0
  124. package/dist/element/ElementStats.svelte +80 -0
  125. package/dist/element/ElementStats.svelte.d.ts +8 -0
  126. package/dist/element/ElementTile.svelte +484 -0
  127. package/dist/element/ElementTile.svelte.d.ts +29 -0
  128. package/dist/element/Nucleus.svelte.d.ts +17 -0
  129. package/dist/element/data.d.ts +2 -0
  130. package/dist/element/data.js +2 -0
  131. package/dist/element/index.d.ts +8 -0
  132. package/dist/element/index.js +7 -0
  133. package/dist/element/types.d.ts +57 -0
  134. package/dist/element/types.js +1 -0
  135. package/dist/feedback/ClickFeedback.svelte +58 -0
  136. package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
  137. package/dist/feedback/DragOverlay.svelte +42 -0
  138. package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
  139. package/dist/feedback/Spinner.svelte.d.ts +7 -0
  140. package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
  141. package/dist/feedback/index.d.ts +4 -0
  142. package/dist/feedback/index.js +4 -0
  143. package/dist/fermi-surface/FermiSlice.svelte +189 -0
  144. package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
  145. package/dist/fermi-surface/FermiSurface.svelte +600 -0
  146. package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
  147. package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
  148. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
  149. package/dist/fermi-surface/FermiSurfaceScene.svelte +794 -0
  150. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
  151. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  152. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
  153. package/dist/fermi-surface/compute.d.ts +5 -0
  154. package/dist/fermi-surface/compute.js +538 -0
  155. package/dist/fermi-surface/constants.d.ts +9 -0
  156. package/dist/fermi-surface/constants.js +27 -0
  157. package/dist/fermi-surface/export.d.ts +5 -0
  158. package/dist/fermi-surface/export.js +50 -0
  159. package/dist/fermi-surface/index.d.ts +12 -0
  160. package/dist/fermi-surface/index.js +13 -0
  161. package/dist/fermi-surface/marching-cubes.d.ts +2 -0
  162. package/dist/fermi-surface/marching-cubes.js +2 -0
  163. package/dist/fermi-surface/parse.d.ts +2 -0
  164. package/dist/fermi-surface/parse.js +491 -0
  165. package/dist/fermi-surface/symmetry.d.ts +3 -0
  166. package/dist/fermi-surface/symmetry.js +46 -0
  167. package/dist/fermi-surface/types.d.ts +110 -0
  168. package/dist/fermi-surface/types.js +4 -0
  169. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  170. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  171. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  172. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  173. package/dist/heatmap-matrix/index.d.ts +53 -0
  174. package/dist/heatmap-matrix/index.js +100 -0
  175. package/dist/heatmap-matrix/shared.d.ts +2 -0
  176. package/dist/heatmap-matrix/shared.js +4 -0
  177. package/dist/icons.d.ts +569 -0
  178. package/dist/icons.js +648 -0
  179. package/dist/index.d.ts +39 -0
  180. package/dist/index.js +39 -0
  181. package/dist/io/decompress.d.ts +11 -0
  182. package/dist/io/decompress.js +74 -0
  183. package/dist/io/export.d.ts +16 -0
  184. package/dist/io/export.js +316 -0
  185. package/dist/io/fetch.d.ts +5 -0
  186. package/dist/io/fetch.js +39 -0
  187. package/dist/io/file-drop.d.ts +7 -0
  188. package/dist/io/file-drop.js +43 -0
  189. package/dist/io/index.d.ts +7 -0
  190. package/dist/io/index.js +6 -0
  191. package/dist/io/is-binary.d.ts +1 -0
  192. package/dist/io/is-binary.js +20 -0
  193. package/dist/io/types.d.ts +8 -0
  194. package/dist/io/types.js +1 -0
  195. package/dist/io/url-drop.d.ts +2 -0
  196. package/dist/io/url-drop.js +123 -0
  197. package/dist/isosurface/Isosurface.svelte +285 -0
  198. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  199. package/dist/isosurface/IsosurfaceControls.svelte +277 -0
  200. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  201. package/dist/isosurface/index.d.ts +5 -0
  202. package/dist/isosurface/index.js +6 -0
  203. package/dist/isosurface/parse.d.ts +6 -0
  204. package/dist/isosurface/parse.js +553 -0
  205. package/dist/isosurface/slice.d.ts +11 -0
  206. package/dist/isosurface/slice.js +140 -0
  207. package/dist/isosurface/types.d.ts +56 -0
  208. package/dist/isosurface/types.js +227 -0
  209. package/dist/labels.d.ts +53 -0
  210. package/dist/labels.js +277 -0
  211. package/dist/layout/FullscreenToggle.svelte +50 -0
  212. package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
  213. package/dist/layout/InfoCard.svelte +120 -0
  214. package/dist/layout/InfoCard.svelte.d.ts +21 -0
  215. package/dist/layout/InfoTag.svelte +185 -0
  216. package/dist/layout/InfoTag.svelte.d.ts +19 -0
  217. package/dist/layout/PropertyFilter.svelte +246 -0
  218. package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
  219. package/dist/layout/SettingsSection.svelte +148 -0
  220. package/dist/layout/SettingsSection.svelte.d.ts +17 -0
  221. package/dist/layout/SubpageGrid.svelte +82 -0
  222. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  223. package/dist/layout/fullscreen.d.ts +9 -0
  224. package/dist/layout/fullscreen.js +53 -0
  225. package/dist/layout/index.d.ts +10 -0
  226. package/dist/layout/index.js +8 -0
  227. package/dist/layout/json-tree/JsonNode.svelte +548 -0
  228. package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
  229. package/dist/layout/json-tree/JsonTree.svelte +1230 -0
  230. package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
  231. package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
  232. package/dist/layout/json-tree/index.d.ts +3 -0
  233. package/dist/layout/json-tree/index.js +3 -0
  234. package/dist/layout/json-tree/types.d.ts +74 -0
  235. package/dist/layout/json-tree/types.js +2 -0
  236. package/dist/layout/json-tree/utils.d.ts +29 -0
  237. package/dist/layout/json-tree/utils.js +641 -0
  238. package/dist/marching-cubes.d.ts +14 -0
  239. package/dist/marching-cubes.js +540 -0
  240. package/dist/math.d.ts +101 -0
  241. package/dist/math.js +905 -0
  242. package/dist/overlays/ContextMenu.svelte +162 -0
  243. package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
  244. package/dist/overlays/CopyButton.svelte +45 -0
  245. package/dist/overlays/CopyButton.svelte.d.ts +8 -0
  246. package/dist/overlays/DragControlTab.svelte +98 -0
  247. package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
  248. package/dist/overlays/DraggablePane.svelte +487 -0
  249. package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
  250. package/dist/overlays/InfoPaneCards.svelte +149 -0
  251. package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
  252. package/dist/overlays/index.d.ts +3 -0
  253. package/dist/overlays/index.js +3 -0
  254. package/dist/periodic-table/PeriodicTable.svelte +469 -0
  255. package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
  256. package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
  257. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
  258. package/dist/periodic-table/PropertySelect.svelte +37 -0
  259. package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
  260. package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
  261. package/dist/periodic-table/index.d.ts +10 -0
  262. package/dist/periodic-table/index.js +4 -0
  263. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  264. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
  265. package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
  266. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
  267. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  268. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  269. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  270. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
  271. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  272. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
  273. package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
  274. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
  275. package/dist/phase-diagram/build-diagram.d.ts +11 -0
  276. package/dist/phase-diagram/build-diagram.js +160 -0
  277. package/dist/phase-diagram/colors.d.ts +35 -0
  278. package/dist/phase-diagram/colors.js +51 -0
  279. package/dist/phase-diagram/diagram-input.d.ts +29 -0
  280. package/dist/phase-diagram/diagram-input.js +3 -0
  281. package/dist/phase-diagram/index.d.ts +13 -0
  282. package/dist/phase-diagram/index.js +11 -0
  283. package/dist/phase-diagram/parse.d.ts +55 -0
  284. package/dist/phase-diagram/parse.js +272 -0
  285. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  286. package/dist/phase-diagram/svg-to-diagram.js +867 -0
  287. package/dist/phase-diagram/types.d.ts +93 -0
  288. package/dist/phase-diagram/types.js +1 -0
  289. package/dist/phase-diagram/utils.d.ts +118 -0
  290. package/dist/phase-diagram/utils.js +604 -0
  291. package/dist/plot/AxisLabel.svelte +51 -0
  292. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  293. package/dist/plot/BarPlot.svelte +2113 -0
  294. package/dist/plot/BarPlot.svelte.d.ts +84 -0
  295. package/dist/plot/BarPlotControls.svelte +66 -0
  296. package/dist/plot/BarPlotControls.svelte.d.ts +18 -0
  297. package/dist/plot/BinnedScatterPlot.svelte +1114 -0
  298. package/dist/plot/BinnedScatterPlot.svelte.d.ts +66 -0
  299. package/dist/plot/ColorBar.svelte +721 -0
  300. package/dist/plot/ColorBar.svelte.d.ts +31 -0
  301. package/dist/plot/ColorScaleSelect.svelte +54 -0
  302. package/dist/plot/ColorScaleSelect.svelte.d.ts +15 -0
  303. package/dist/plot/ElementScatter.svelte +63 -0
  304. package/dist/plot/ElementScatter.svelte.d.ts +14 -0
  305. package/dist/plot/FillArea.svelte.d.ts +21 -0
  306. package/dist/plot/Histogram.svelte +1558 -0
  307. package/dist/plot/Histogram.svelte.d.ts +50 -0
  308. package/dist/plot/HistogramControls.svelte +212 -0
  309. package/dist/plot/HistogramControls.svelte.d.ts +22 -0
  310. package/dist/plot/InteractiveAxisLabel.svelte +96 -0
  311. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +14 -0
  312. package/dist/plot/Line.svelte +84 -0
  313. package/dist/plot/Line.svelte.d.ts +15 -0
  314. package/dist/plot/PlotAxis.svelte +169 -0
  315. package/dist/plot/PlotAxis.svelte.d.ts +24 -0
  316. package/dist/plot/PlotControls.svelte +537 -0
  317. package/dist/plot/PlotControls.svelte.d.ts +4 -0
  318. package/dist/plot/PlotLegend.svelte +569 -0
  319. package/dist/plot/PlotLegend.svelte.d.ts +29 -0
  320. package/dist/plot/PlotTooltip.svelte +67 -0
  321. package/dist/plot/PlotTooltip.svelte.d.ts +17 -0
  322. package/dist/plot/PortalSelect.svelte +253 -0
  323. package/dist/plot/PortalSelect.svelte.d.ts +16 -0
  324. package/dist/plot/ReferenceLine.svelte.d.ts +20 -0
  325. package/dist/plot/ReferenceLine3D.svelte +156 -0
  326. package/dist/plot/ReferenceLine3D.svelte.d.ts +14 -0
  327. package/dist/plot/ReferencePlane.svelte +175 -0
  328. package/dist/plot/ReferencePlane.svelte.d.ts +14 -0
  329. package/dist/plot/ScatterPlot.svelte +2778 -0
  330. package/dist/plot/ScatterPlot.svelte.d.ts +96 -0
  331. package/dist/plot/ScatterPlot3D.svelte +529 -0
  332. package/dist/plot/ScatterPlot3D.svelte.d.ts +95 -0
  333. package/dist/plot/ScatterPlot3DControls.svelte +437 -0
  334. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +20 -0
  335. package/dist/plot/ScatterPlot3DScene.svelte +912 -0
  336. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +74 -0
  337. package/dist/plot/ScatterPlotControls.svelte +306 -0
  338. package/dist/plot/ScatterPlotControls.svelte.d.ts +17 -0
  339. package/dist/plot/ScatterPoint.svelte +182 -0
  340. package/dist/plot/ScatterPoint.svelte.d.ts +22 -0
  341. package/dist/plot/SpacegroupBarPlot.svelte +293 -0
  342. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +9 -0
  343. package/dist/plot/Surface3D.svelte +197 -0
  344. package/dist/plot/Surface3D.svelte.d.ts +13 -0
  345. package/dist/plot/ZeroLines.svelte +97 -0
  346. package/dist/plot/ZeroLines.svelte.d.ts +33 -0
  347. package/dist/plot/ZoomRect.svelte +23 -0
  348. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  349. package/dist/plot/adaptive-density.d.ts +69 -0
  350. package/dist/plot/adaptive-density.js +191 -0
  351. package/dist/plot/auto-place.d.ts +43 -0
  352. package/dist/plot/auto-place.js +122 -0
  353. package/dist/plot/axis-utils.d.ts +19 -0
  354. package/dist/plot/axis-utils.js +78 -0
  355. package/dist/plot/binned-scatter-types.d.ts +59 -0
  356. package/dist/plot/binned-scatter-types.js +1 -0
  357. package/dist/plot/data-cleaning.d.ts +37 -0
  358. package/dist/plot/data-cleaning.js +855 -0
  359. package/dist/plot/data-transform.d.ts +16 -0
  360. package/dist/plot/data-transform.js +45 -0
  361. package/dist/plot/defaults.d.ts +19 -0
  362. package/dist/plot/defaults.js +9 -0
  363. package/dist/plot/fill-utils.d.ts +46 -0
  364. package/dist/plot/fill-utils.js +322 -0
  365. package/dist/plot/hover-lock.svelte.d.ts +14 -0
  366. package/dist/plot/hover-lock.svelte.js +46 -0
  367. package/dist/plot/index.d.ts +41 -0
  368. package/dist/plot/index.js +39 -0
  369. package/dist/plot/interactions.d.ts +12 -0
  370. package/dist/plot/interactions.js +101 -0
  371. package/dist/plot/layout.d.ts +78 -0
  372. package/dist/plot/layout.js +273 -0
  373. package/dist/plot/reference-line.d.ts +60 -0
  374. package/dist/plot/reference-line.js +314 -0
  375. package/dist/plot/scales.d.ts +48 -0
  376. package/dist/plot/scales.js +481 -0
  377. package/dist/plot/svg.d.ts +1 -0
  378. package/dist/plot/svg.js +11 -0
  379. package/dist/plot/types.d.ts +831 -0
  380. package/dist/plot/types.js +99 -0
  381. package/dist/plot/utils/label-placement.d.ts +68 -0
  382. package/dist/plot/utils/label-placement.js +326 -0
  383. package/dist/plot/utils/series-visibility.d.ts +15 -0
  384. package/dist/plot/utils/series-visibility.js +85 -0
  385. package/dist/plot/utils.d.ts +1 -0
  386. package/dist/plot/utils.js +14 -0
  387. package/dist/rdf/RdfPlot.svelte +247 -0
  388. package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
  389. package/dist/rdf/calc-rdf.d.ts +4 -0
  390. package/dist/rdf/calc-rdf.js +111 -0
  391. package/dist/rdf/index.d.ts +23 -0
  392. package/dist/rdf/index.js +2 -0
  393. package/dist/sanitize.d.ts +6 -0
  394. package/dist/sanitize.js +116 -0
  395. package/dist/settings.d.ts +255 -0
  396. package/dist/settings.js +1132 -0
  397. package/dist/spectral/Bands.svelte +1040 -0
  398. package/dist/spectral/Bands.svelte.d.ts +40 -0
  399. package/dist/spectral/BandsAndDos.svelte +134 -0
  400. package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
  401. package/dist/spectral/BrillouinBandsDos.svelte +252 -0
  402. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
  403. package/dist/spectral/Dos.svelte +697 -0
  404. package/dist/spectral/Dos.svelte.d.ts +29 -0
  405. package/dist/spectral/helpers.d.ts +119 -0
  406. package/dist/spectral/helpers.js +1032 -0
  407. package/dist/spectral/index.d.ts +6 -0
  408. package/dist/spectral/index.js +6 -0
  409. package/dist/spectral/types.d.ts +84 -0
  410. package/dist/spectral/types.js +2 -0
  411. package/dist/state.svelte.d.ts +25 -0
  412. package/dist/state.svelte.js +45 -0
  413. package/dist/structure/Arrow.svelte +72 -0
  414. package/dist/structure/Arrow.svelte.d.ts +15 -0
  415. package/dist/structure/AtomLegend.svelte +815 -0
  416. package/dist/structure/AtomLegend.svelte.d.ts +35 -0
  417. package/dist/structure/Bond.svelte +140 -0
  418. package/dist/structure/Bond.svelte.d.ts +9 -0
  419. package/dist/structure/CanvasTooltip.svelte +33 -0
  420. package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
  421. package/dist/structure/CellSelect.svelte +349 -0
  422. package/dist/structure/CellSelect.svelte.d.ts +13 -0
  423. package/dist/structure/Cylinder.svelte +45 -0
  424. package/dist/structure/Cylinder.svelte.d.ts +10 -0
  425. package/dist/structure/Lattice.svelte +196 -0
  426. package/dist/structure/Lattice.svelte.d.ts +17 -0
  427. package/dist/structure/Structure.svelte +2248 -0
  428. package/dist/structure/Structure.svelte.d.ts +89 -0
  429. package/dist/structure/StructureControls.svelte +1273 -0
  430. package/dist/structure/StructureControls.svelte.d.ts +31 -0
  431. package/dist/structure/StructureExportPane.svelte +252 -0
  432. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  433. package/dist/structure/StructureInfoPane.svelte +737 -0
  434. package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
  435. package/dist/structure/StructureScene.svelte +2255 -0
  436. package/dist/structure/StructureScene.svelte.d.ts +111 -0
  437. package/dist/structure/atom-properties.d.ts +37 -0
  438. package/dist/structure/atom-properties.js +200 -0
  439. package/dist/structure/bond-order-perception.d.ts +13 -0
  440. package/dist/structure/bond-order-perception.js +384 -0
  441. package/dist/structure/bonding.d.ts +68 -0
  442. package/dist/structure/bonding.js +696 -0
  443. package/dist/structure/export.d.ts +20 -0
  444. package/dist/structure/export.js +727 -0
  445. package/dist/structure/index.d.ts +126 -0
  446. package/dist/structure/index.js +169 -0
  447. package/dist/structure/label-placement.d.ts +14 -0
  448. package/dist/structure/label-placement.js +72 -0
  449. package/dist/structure/measure.d.ts +6 -0
  450. package/dist/structure/measure.js +29 -0
  451. package/dist/structure/parse.d.ts +66 -0
  452. package/dist/structure/parse.js +1392 -0
  453. package/dist/structure/partial-occupancy.d.ts +25 -0
  454. package/dist/structure/partial-occupancy.js +99 -0
  455. package/dist/structure/pbc.d.ts +9 -0
  456. package/dist/structure/pbc.js +123 -0
  457. package/dist/structure/supercell.d.ts +8 -0
  458. package/dist/structure/supercell.js +170 -0
  459. package/dist/structure/validation.d.ts +2 -0
  460. package/dist/structure/validation.js +10 -0
  461. package/dist/symmetry/SymmetryStats.svelte +226 -0
  462. package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
  463. package/dist/symmetry/WyckoffTable.svelte +120 -0
  464. package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
  465. package/dist/symmetry/cell-transform.d.ts +12 -0
  466. package/dist/symmetry/cell-transform.js +91 -0
  467. package/dist/symmetry/index.d.ts +43 -0
  468. package/dist/symmetry/index.js +228 -0
  469. package/dist/symmetry/spacegroups.d.ts +9 -0
  470. package/dist/symmetry/spacegroups.js +394 -0
  471. package/dist/table/HeatmapTable.svelte +1833 -0
  472. package/dist/table/HeatmapTable.svelte.d.ts +49 -0
  473. package/dist/table/ToggleMenu.svelte +385 -0
  474. package/dist/table/ToggleMenu.svelte.d.ts +11 -0
  475. package/dist/table/index.d.ts +74 -0
  476. package/dist/table/index.js +38 -0
  477. package/dist/theme/ThemeControl.svelte +53 -0
  478. package/dist/theme/ThemeControl.svelte.d.ts +9 -0
  479. package/dist/theme/index.d.ts +29 -0
  480. package/dist/theme/index.js +79 -0
  481. package/dist/time.d.ts +4 -0
  482. package/dist/time.js +70 -0
  483. package/dist/tooltip/TooltipContent.svelte +58 -0
  484. package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
  485. package/dist/tooltip/index.d.ts +2 -0
  486. package/dist/tooltip/index.js +1 -0
  487. package/dist/tooltip/types.d.ts +8 -0
  488. package/dist/tooltip/types.js +1 -0
  489. package/dist/trajectory/Trajectory.svelte +1545 -0
  490. package/dist/trajectory/Trajectory.svelte.d.ts +77 -0
  491. package/dist/trajectory/TrajectoryError.svelte +128 -0
  492. package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
  493. package/dist/trajectory/TrajectoryExportPane.svelte +357 -0
  494. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
  495. package/dist/trajectory/TrajectoryInfoPane.svelte +313 -0
  496. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
  497. package/dist/trajectory/constants.d.ts +6 -0
  498. package/dist/trajectory/constants.js +7 -0
  499. package/dist/trajectory/extract.d.ts +5 -0
  500. package/dist/trajectory/extract.js +162 -0
  501. package/dist/trajectory/format-detect.d.ts +9 -0
  502. package/dist/trajectory/format-detect.js +76 -0
  503. package/dist/trajectory/frame-reader.d.ts +17 -0
  504. package/dist/trajectory/frame-reader.js +332 -0
  505. package/dist/trajectory/helpers.d.ts +15 -0
  506. package/dist/trajectory/helpers.js +164 -0
  507. package/dist/trajectory/index.d.ts +63 -0
  508. package/dist/trajectory/index.js +126 -0
  509. package/dist/trajectory/parse/ase.d.ts +2 -0
  510. package/dist/trajectory/parse/ase.js +73 -0
  511. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  512. package/dist/trajectory/parse/hdf5.js +127 -0
  513. package/dist/trajectory/parse/index.d.ts +12 -0
  514. package/dist/trajectory/parse/index.js +298 -0
  515. package/dist/trajectory/parse/lammps.d.ts +5 -0
  516. package/dist/trajectory/parse/lammps.js +179 -0
  517. package/dist/trajectory/parse/vasp.d.ts +2 -0
  518. package/dist/trajectory/parse/vasp.js +68 -0
  519. package/dist/trajectory/parse/xyz.d.ts +2 -0
  520. package/dist/trajectory/parse/xyz.js +110 -0
  521. package/dist/trajectory/plotting.d.ts +28 -0
  522. package/dist/trajectory/plotting.js +423 -0
  523. package/dist/trajectory/types.d.ts +11 -0
  524. package/dist/trajectory/types.js +1 -0
  525. package/dist/utils.d.ts +6 -0
  526. package/dist/utils.js +45 -0
  527. package/dist/xrd/XrdPlot.svelte +615 -0
  528. package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
  529. package/dist/xrd/broadening.d.ts +20 -0
  530. package/dist/xrd/broadening.js +97 -0
  531. package/dist/xrd/calc-xrd.d.ts +37 -0
  532. package/dist/xrd/calc-xrd.js +336 -0
  533. package/dist/xrd/index.d.ts +37 -0
  534. package/dist/xrd/index.js +4 -0
  535. package/dist/xrd/parse.d.ts +13 -0
  536. package/dist/xrd/parse.js +749 -0
  537. package/license +1 -1
  538. package/package.json +232 -1457
  539. package/readme.md +98 -171
  540. package/.vscode/launch.json +0 -13
  541. package/.vscodeignore +0 -7
  542. package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
  543. package/dist/assets/browser-DdDecX_W.js +0 -1
  544. package/dist/assets/export-qgn-H9y6.js +0 -2
  545. package/dist/assets/main-DiKYzti2.css +0 -1
  546. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  547. package/dist/extension.js +0 -31293
  548. package/dist/src/lib/FilePicker.svelte +0 -360
  549. package/dist/src/lib/MillerIndexInput.svelte +0 -66
  550. package/dist/src/lib/api/mp.ts +0 -26
  551. package/dist/src/lib/api/optimade.ts +0 -204
  552. package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
  553. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
  554. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
  555. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  556. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
  557. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
  558. package/dist/src/lib/brillouin/compute.ts +0 -529
  559. package/dist/src/lib/brillouin/index.ts +0 -8
  560. package/dist/src/lib/brillouin/types.ts +0 -51
  561. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
  562. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
  563. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
  564. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
  565. package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
  566. package/dist/src/lib/chempot-diagram/color.ts +0 -42
  567. package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
  568. package/dist/src/lib/chempot-diagram/index.ts +0 -6
  569. package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
  570. package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
  571. package/dist/src/lib/chempot-diagram/types.ts +0 -130
  572. package/dist/src/lib/colors/index.ts +0 -249
  573. package/dist/src/lib/composition/BarChart.svelte +0 -297
  574. package/dist/src/lib/composition/BubbleChart.svelte +0 -218
  575. package/dist/src/lib/composition/Composition.svelte +0 -165
  576. package/dist/src/lib/composition/Formula.svelte +0 -268
  577. package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
  578. package/dist/src/lib/composition/PieChart.svelte +0 -323
  579. package/dist/src/lib/composition/format.ts +0 -155
  580. package/dist/src/lib/composition/index.ts +0 -37
  581. package/dist/src/lib/composition/parse.ts +0 -605
  582. package/dist/src/lib/constants.ts +0 -134
  583. package/dist/src/lib/controls.ts +0 -42
  584. package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
  585. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
  586. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
  587. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
  588. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
  589. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
  590. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
  591. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
  592. package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
  593. package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
  594. package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
  595. package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
  596. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
  597. package/dist/src/lib/convex-hull/helpers.ts +0 -932
  598. package/dist/src/lib/convex-hull/index.ts +0 -202
  599. package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
  600. package/dist/src/lib/convex-hull/types.ts +0 -267
  601. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
  602. package/dist/src/lib/coordination/calc-coordination.ts +0 -93
  603. package/dist/src/lib/coordination/index.ts +0 -9
  604. package/dist/src/lib/effects.svelte.ts +0 -48
  605. package/dist/src/lib/element/ElementHeading.svelte +0 -26
  606. package/dist/src/lib/element/ElementPhoto.svelte +0 -57
  607. package/dist/src/lib/element/ElementStats.svelte +0 -80
  608. package/dist/src/lib/element/ElementTile.svelte +0 -484
  609. package/dist/src/lib/element/data.ts +0 -14
  610. package/dist/src/lib/element/index.ts +0 -8
  611. package/dist/src/lib/element/types.ts +0 -62
  612. package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
  613. package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
  614. package/dist/src/lib/feedback/index.ts +0 -4
  615. package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
  616. package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
  617. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
  618. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
  619. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  620. package/dist/src/lib/fermi-surface/compute.ts +0 -728
  621. package/dist/src/lib/fermi-surface/constants.ts +0 -32
  622. package/dist/src/lib/fermi-surface/export.ts +0 -64
  623. package/dist/src/lib/fermi-surface/index.ts +0 -14
  624. package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
  625. package/dist/src/lib/fermi-surface/parse.ts +0 -574
  626. package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
  627. package/dist/src/lib/fermi-surface/types.ts +0 -159
  628. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
  629. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  630. package/dist/src/lib/heatmap-matrix/index.ts +0 -167
  631. package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
  632. package/dist/src/lib/icons.ts +0 -650
  633. package/dist/src/lib/index.ts +0 -61
  634. package/dist/src/lib/io/decompress.ts +0 -92
  635. package/dist/src/lib/io/export.ts +0 -385
  636. package/dist/src/lib/io/fetch.ts +0 -46
  637. package/dist/src/lib/io/file-drop.ts +0 -51
  638. package/dist/src/lib/io/index.ts +0 -7
  639. package/dist/src/lib/io/is-binary.ts +0 -24
  640. package/dist/src/lib/io/types.ts +0 -8
  641. package/dist/src/lib/io/url-drop.ts +0 -141
  642. package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
  643. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
  644. package/dist/src/lib/isosurface/index.ts +0 -7
  645. package/dist/src/lib/isosurface/parse.ts +0 -656
  646. package/dist/src/lib/isosurface/slice.ts +0 -175
  647. package/dist/src/lib/isosurface/types.ts +0 -309
  648. package/dist/src/lib/labels.ts +0 -320
  649. package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
  650. package/dist/src/lib/layout/InfoCard.svelte +0 -120
  651. package/dist/src/lib/layout/InfoTag.svelte +0 -185
  652. package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
  653. package/dist/src/lib/layout/SettingsSection.svelte +0 -148
  654. package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
  655. package/dist/src/lib/layout/fullscreen.ts +0 -65
  656. package/dist/src/lib/layout/index.ts +0 -11
  657. package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
  658. package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
  659. package/dist/src/lib/layout/json-tree/index.ts +0 -3
  660. package/dist/src/lib/layout/json-tree/types.ts +0 -126
  661. package/dist/src/lib/layout/json-tree/utils.ts +0 -682
  662. package/dist/src/lib/marching-cubes.ts +0 -614
  663. package/dist/src/lib/math.ts +0 -1081
  664. package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
  665. package/dist/src/lib/overlays/CopyButton.svelte +0 -45
  666. package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
  667. package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
  668. package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
  669. package/dist/src/lib/overlays/index.ts +0 -3
  670. package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
  671. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
  672. package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
  673. package/dist/src/lib/periodic-table/index.ts +0 -12
  674. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  675. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
  676. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  677. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
  678. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
  679. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
  680. package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
  681. package/dist/src/lib/phase-diagram/colors.ts +0 -58
  682. package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
  683. package/dist/src/lib/phase-diagram/index.ts +0 -13
  684. package/dist/src/lib/phase-diagram/parse.ts +0 -348
  685. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
  686. package/dist/src/lib/phase-diagram/types.ts +0 -144
  687. package/dist/src/lib/phase-diagram/utils.ts +0 -775
  688. package/dist/src/lib/plot/AxisLabel.svelte +0 -51
  689. package/dist/src/lib/plot/BarPlot.svelte +0 -2113
  690. package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
  691. package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
  692. package/dist/src/lib/plot/ColorBar.svelte +0 -721
  693. package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
  694. package/dist/src/lib/plot/ElementScatter.svelte +0 -63
  695. package/dist/src/lib/plot/Histogram.svelte +0 -1558
  696. package/dist/src/lib/plot/HistogramControls.svelte +0 -212
  697. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
  698. package/dist/src/lib/plot/Line.svelte +0 -84
  699. package/dist/src/lib/plot/PlotAxis.svelte +0 -169
  700. package/dist/src/lib/plot/PlotControls.svelte +0 -537
  701. package/dist/src/lib/plot/PlotLegend.svelte +0 -569
  702. package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
  703. package/dist/src/lib/plot/PortalSelect.svelte +0 -253
  704. package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
  705. package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
  706. package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
  707. package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
  708. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
  709. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
  710. package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
  711. package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
  712. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
  713. package/dist/src/lib/plot/Surface3D.svelte +0 -197
  714. package/dist/src/lib/plot/ZeroLines.svelte +0 -97
  715. package/dist/src/lib/plot/ZoomRect.svelte +0 -23
  716. package/dist/src/lib/plot/adaptive-density.ts +0 -316
  717. package/dist/src/lib/plot/auto-place.ts +0 -184
  718. package/dist/src/lib/plot/axis-utils.ts +0 -122
  719. package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
  720. package/dist/src/lib/plot/data-cleaning.ts +0 -1069
  721. package/dist/src/lib/plot/data-transform.ts +0 -69
  722. package/dist/src/lib/plot/defaults.ts +0 -9
  723. package/dist/src/lib/plot/fill-utils.ts +0 -494
  724. package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
  725. package/dist/src/lib/plot/index.ts +0 -53
  726. package/dist/src/lib/plot/interactions.ts +0 -119
  727. package/dist/src/lib/plot/layout.ts +0 -425
  728. package/dist/src/lib/plot/reference-line.ts +0 -426
  729. package/dist/src/lib/plot/scales.ts +0 -654
  730. package/dist/src/lib/plot/svg.ts +0 -23
  731. package/dist/src/lib/plot/types.ts +0 -1144
  732. package/dist/src/lib/plot/utils/label-placement.ts +0 -541
  733. package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
  734. package/dist/src/lib/plot/utils.ts +0 -11
  735. package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
  736. package/dist/src/lib/rdf/calc-rdf.ts +0 -167
  737. package/dist/src/lib/rdf/index.ts +0 -27
  738. package/dist/src/lib/sanitize.ts +0 -126
  739. package/dist/src/lib/settings.ts +0 -1479
  740. package/dist/src/lib/spectral/Bands.svelte +0 -1040
  741. package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
  742. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
  743. package/dist/src/lib/spectral/Dos.svelte +0 -697
  744. package/dist/src/lib/spectral/helpers.ts +0 -1381
  745. package/dist/src/lib/spectral/index.ts +0 -8
  746. package/dist/src/lib/spectral/types.ts +0 -112
  747. package/dist/src/lib/state.svelte.ts +0 -64
  748. package/dist/src/lib/structure/Arrow.svelte +0 -72
  749. package/dist/src/lib/structure/AtomLegend.svelte +0 -815
  750. package/dist/src/lib/structure/Bond.svelte +0 -140
  751. package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
  752. package/dist/src/lib/structure/CellSelect.svelte +0 -349
  753. package/dist/src/lib/structure/Cylinder.svelte +0 -45
  754. package/dist/src/lib/structure/Lattice.svelte +0 -196
  755. package/dist/src/lib/structure/Structure.svelte +0 -2248
  756. package/dist/src/lib/structure/StructureControls.svelte +0 -1273
  757. package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
  758. package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
  759. package/dist/src/lib/structure/StructureScene.svelte +0 -2255
  760. package/dist/src/lib/structure/atom-properties.ts +0 -316
  761. package/dist/src/lib/structure/bond-order-perception.ts +0 -447
  762. package/dist/src/lib/structure/bonding.ts +0 -944
  763. package/dist/src/lib/structure/export.ts +0 -861
  764. package/dist/src/lib/structure/index.ts +0 -291
  765. package/dist/src/lib/structure/label-placement.ts +0 -130
  766. package/dist/src/lib/structure/measure.ts +0 -45
  767. package/dist/src/lib/structure/parse.ts +0 -1705
  768. package/dist/src/lib/structure/partial-occupancy.ts +0 -183
  769. package/dist/src/lib/structure/pbc.ts +0 -164
  770. package/dist/src/lib/structure/supercell.ts +0 -226
  771. package/dist/src/lib/structure/validation.ts +0 -11
  772. package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
  773. package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
  774. package/dist/src/lib/symmetry/cell-transform.ts +0 -118
  775. package/dist/src/lib/symmetry/index.ts +0 -348
  776. package/dist/src/lib/symmetry/spacegroups.ts +0 -404
  777. package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
  778. package/dist/src/lib/table/ToggleMenu.svelte +0 -385
  779. package/dist/src/lib/table/index.ts +0 -139
  780. package/dist/src/lib/theme/ThemeControl.svelte +0 -53
  781. package/dist/src/lib/theme/index.ts +0 -107
  782. package/dist/src/lib/time.ts +0 -71
  783. package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
  784. package/dist/src/lib/tooltip/index.ts +0 -2
  785. package/dist/src/lib/tooltip/types.ts +0 -13
  786. package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
  787. package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
  788. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
  789. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
  790. package/dist/src/lib/trajectory/constants.ts +0 -7
  791. package/dist/src/lib/trajectory/extract.ts +0 -196
  792. package/dist/src/lib/trajectory/format-detect.ts +0 -96
  793. package/dist/src/lib/trajectory/frame-reader.ts +0 -456
  794. package/dist/src/lib/trajectory/helpers.ts +0 -217
  795. package/dist/src/lib/trajectory/index.ts +0 -218
  796. package/dist/src/lib/trajectory/parse/ase.ts +0 -109
  797. package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
  798. package/dist/src/lib/trajectory/parse/index.ts +0 -411
  799. package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
  800. package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
  801. package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
  802. package/dist/src/lib/trajectory/plotting.ts +0 -599
  803. package/dist/src/lib/trajectory/types.ts +0 -13
  804. package/dist/src/lib/utils.ts +0 -56
  805. package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
  806. package/dist/src/lib/xrd/broadening.ts +0 -130
  807. package/dist/src/lib/xrd/calc-xrd.ts +0 -397
  808. package/dist/src/lib/xrd/index.ts +0 -38
  809. package/dist/src/lib/xrd/parse.ts +0 -858
  810. package/dist/webview.js +0 -29421
  811. package/icon.png +0 -0
  812. package/matterviz-0.3.2.vsix +0 -0
  813. package/matterviz-0.3.4.vsix +0 -0
  814. package/matterviz-0.3.5.vsix +0 -0
  815. package/scripts/sync-config.ts +0 -101
  816. package/src/declarations.d.ts +0 -2
  817. package/src/extension.ts +0 -972
  818. package/src/node-io.ts +0 -65
  819. package/src/types.ts +0 -17
  820. package/src/webview/JsonBrowser.svelte +0 -1079
  821. package/src/webview/PlotPanel.svelte +0 -346
  822. package/src/webview/detect.ts +0 -444
  823. package/src/webview/main.ts +0 -764
  824. package/src/webview/plot-utils.ts +0 -250
  825. package/test-fixtures/all-viz-types.json.gz +0 -0
  826. package/test-fixtures/plot-demo-data.json.gz +0 -0
  827. package/tests/detect.test.ts +0 -604
  828. package/tests/extension.test.ts +0 -2041
  829. package/tests/node-io.test.ts +0 -39
  830. package/tests/plot-utils.test.ts +0 -302
  831. package/tests/vite-plugin-json-gz.test.ts +0 -114
  832. package/tests/vscode-mock.ts +0 -18
  833. package/tests/webview.test.ts +0 -231
  834. package/tsconfig.json +0 -20
  835. package/vite-plugin-json-gz.ts +0 -29
  836. package/vite.config.ts +0 -34
  837. package/vite.extension.config.ts +0 -34
  838. /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
  839. /package/dist/{src/lib/Icon.svelte → Icon.svelte} +0 -0
  840. /package/dist/{src/lib/app.css → app.css} +0 -0
  841. /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
  842. /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
  843. /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
  844. /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
  845. /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
  846. /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
  847. /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
  848. /package/dist/{src/lib/convex-hull → convex-hull}/TemperatureSlider.svelte +0 -0
  849. /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
  850. /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
  851. /package/dist/{src/lib/element → element}/data.json +0 -0
  852. /package/dist/{src/lib/element → element}/data.json.gz +0 -0
  853. /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
  854. /package/dist/{src/lib/element → element}/data.schema.json +0 -0
  855. /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
  856. /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
  857. /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
  858. /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
  859. /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
  860. /package/dist/{src/lib/plot → plot}/FillArea.svelte +0 -0
  861. /package/dist/{src/lib/plot → plot}/ReferenceLine.svelte +0 -0
  862. /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
  863. /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
@@ -0,0 +1,912 @@
1
+ <script
2
+ lang="ts"
3
+ generics="Metadata extends Record<string, unknown> = Record<string, unknown>"
4
+ >
5
+ import type { D3ColorSchemeName, D3InterpolateName } from '../colors'
6
+ import { format_num } from '../labels'
7
+ import type { Vec2, Vec3 } from '../math'
8
+ import type {
9
+ AxisConfig3D,
10
+ CameraProjection3D,
11
+ DataSeries3D,
12
+ DisplayConfig3D,
13
+ InternalPoint3D,
14
+ RefLine3D,
15
+ RefPlane,
16
+ ScaleType,
17
+ Scatter3DHandlerEvent,
18
+ StyleOverrides3D,
19
+ Surface3DConfig,
20
+ } from './types'
21
+ import { T, useTask, useThrelte } from '@threlte/core'
22
+ import * as extras from '@threlte/extras'
23
+ import { scaleLinear } from 'd3-scale'
24
+ import { type ComponentProps, onDestroy, type Snippet, untrack } from 'svelte'
25
+ import type { Camera, Scene } from 'three'
26
+ import * as THREE from 'three'
27
+ import { Line2 } from 'three/examples/jsm/lines/Line2.js'
28
+ import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js'
29
+ import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js'
30
+ import { get_series_color } from './data-transform'
31
+ import { normalize_to_scene } from './reference-line'
32
+ import ReferenceLine3D from './ReferenceLine3D.svelte'
33
+ import ReferencePlane from './ReferencePlane.svelte'
34
+ import { create_color_scale, create_size_scale } from './scales'
35
+ import Surface3D from './Surface3D.svelte'
36
+
37
+ let {
38
+ series = [],
39
+ series_visibility = [],
40
+ x_axis = {},
41
+ y_axis = {},
42
+ z_axis = {},
43
+ display = {},
44
+ styles = {},
45
+ surfaces = [],
46
+ ref_lines = [],
47
+ ref_planes = [],
48
+ color_scale = { type: `linear`, scheme: `interpolateViridis` },
49
+ size_scale = { type: `linear`, radius_range: [0.05, 0.2] },
50
+ camera_position = [10, 10, 10] as Vec3,
51
+ camera_projection = `perspective` as CameraProjection3D,
52
+ auto_rotate = 0,
53
+ rotation_damping = 0,
54
+ fov = 50,
55
+ min_zoom = 0.1,
56
+ max_zoom = 100,
57
+ rotate_speed = 2,
58
+ zoom_speed = 2,
59
+ pan_speed = 2,
60
+ ambient_light = 0.6,
61
+ directional_light = 0.8,
62
+ sphere_segments = 16,
63
+ gizmo = true,
64
+ hovered_point = $bindable(null),
65
+ on_point_click,
66
+ on_point_hover,
67
+ tooltip,
68
+ scene = $bindable(),
69
+ camera = $bindable(),
70
+ orbit_controls = $bindable(),
71
+ width = 0,
72
+ height = 0,
73
+ }: {
74
+ series?: DataSeries3D<Metadata>[]
75
+ series_visibility?: boolean[]
76
+ x_axis?: AxisConfig3D
77
+ y_axis?: AxisConfig3D
78
+ z_axis?: AxisConfig3D
79
+ display?: DisplayConfig3D
80
+ styles?: StyleOverrides3D
81
+ surfaces?: Surface3DConfig[]
82
+ ref_lines?: RefLine3D[]
83
+ ref_planes?: RefPlane[]
84
+ color_scale?: {
85
+ type?: ScaleType
86
+ scheme?: D3ColorSchemeName | D3InterpolateName
87
+ value_range?: [number, number]
88
+ }
89
+ size_scale?: {
90
+ type?: ScaleType
91
+ radius_range?: [number, number]
92
+ value_range?: [number, number]
93
+ }
94
+ camera_position?: Vec3
95
+ camera_projection?: CameraProjection3D
96
+ auto_rotate?: number
97
+ rotation_damping?: number
98
+ fov?: number
99
+ min_zoom?: number
100
+ max_zoom?: number
101
+ rotate_speed?: number
102
+ zoom_speed?: number
103
+ pan_speed?: number
104
+ ambient_light?: number
105
+ directional_light?: number
106
+ sphere_segments?: number
107
+ gizmo?: boolean | ComponentProps<typeof extras.Gizmo>
108
+ hovered_point?: InternalPoint3D<Metadata> | null
109
+ on_point_click?: (data: Scatter3DHandlerEvent<Metadata>) => void
110
+ on_point_hover?: (data: Scatter3DHandlerEvent<Metadata> | null) => void
111
+ tooltip?: Snippet<[Scatter3DHandlerEvent<Metadata>]>
112
+ scene?: Scene
113
+ camera?: Camera
114
+ orbit_controls?: ComponentProps<typeof extras.OrbitControls>[`ref`]
115
+ width?: number
116
+ height?: number
117
+ } = $props()
118
+
119
+ const threlte = useThrelte()
120
+ $effect(() => {
121
+ scene = threlte.scene
122
+ camera = threlte.camera.current
123
+ })
124
+
125
+ extras.interactivity()
126
+
127
+ // Scene dimensions: x/y are horizontal (2:2), z is vertical (1)
128
+ // Note: In Three.js, Y is vertical. We map user's Z → Three.js Y (vertical)
129
+ // and user's Y → Three.js Z (depth). So scene_z here refers to Three.js Y.
130
+ const scene_x = 10 // user X → Three.js X (horizontal)
131
+ const scene_y = 10 // user Y → Three.js Z (depth/horizontal)
132
+ const scene_z = 5 // user Z → Three.js Y (vertical)
133
+ const half_x = scene_x / 2
134
+ const half_y = scene_y / 2
135
+ const half_z = scene_z / 2
136
+
137
+ // Dynamic backside positions - axes/grids/planes always face away from camera
138
+ // pos.x/y/z are the Three.js positions where axes attach (backside of cube)
139
+ let pos = $state({ x: -half_x, y: -half_z, z: -half_y })
140
+
141
+ // Update backside positions when camera crosses axis planes
142
+ useTask(() => {
143
+ if (!camera) return
144
+ const cam = camera.position
145
+ // Only update when sign changes to avoid triggering geometry recreation every frame
146
+ const new_x = cam.x > 0 ? -half_x : half_x
147
+ const new_y = cam.y > 0 ? -half_z : half_z
148
+ const new_z = cam.z > 0 ? -half_y : half_y
149
+ if (pos.x !== new_x) pos.x = new_x
150
+ if (pos.y !== new_y) pos.y = new_y
151
+ if (pos.z !== new_z) pos.z = new_z
152
+ })
153
+
154
+ // Sign helpers for tick/label offsets (point outward from cube center)
155
+ const sign_x = $derived(pos.x < 0 ? -1 : 1)
156
+ const sign_y = $derived(pos.y < 0 ? -1 : 1)
157
+
158
+ // Flatten all points from series
159
+ let all_points = $derived(
160
+ series
161
+ .filter(Boolean)
162
+ .flatMap((srs, series_idx) =>
163
+ srs.x.map((x_val, point_idx) => ({
164
+ x: x_val,
165
+ y: srs.y[point_idx],
166
+ z: srs.z[point_idx],
167
+ series_idx,
168
+ point_idx,
169
+ color_value: srs.color_values?.[point_idx] ?? null,
170
+ size_value: srs.size_values?.[point_idx] ?? null,
171
+ metadata: Array.isArray(srs.metadata)
172
+ ? srs.metadata[point_idx]
173
+ : srs.metadata,
174
+ point_style: Array.isArray(srs.point_style)
175
+ ? srs.point_style[point_idx]
176
+ : srs.point_style,
177
+ }))
178
+ ),
179
+ )
180
+
181
+ // Sample surface points for range calculation (10x10 grid)
182
+ function sample_surface(
183
+ surface: Surface3DConfig,
184
+ ): { x: number; y: number; z: number }[] {
185
+ const n = 10
186
+ const pts: { x: number; y: number; z: number }[] = []
187
+ if (surface.type === `grid` && surface.z_fn) {
188
+ const [x0, x1] = surface.x_range ?? [-1, 1]
189
+ const [y0, y1] = surface.y_range ?? [-1, 1]
190
+ for (let i = 0; i <= n; i++) {
191
+ for (let j = 0; j <= n; j++) {
192
+ const x = x0 + (i / n) * (x1 - x0), y = y0 + (j / n) * (y1 - y0)
193
+ pts.push({ x, y, z: surface.z_fn(x, y) })
194
+ }
195
+ }
196
+ } else if (surface.type === `parametric` && surface.parametric_fn) {
197
+ const [u0, u1] = surface.u_range ?? [0, 1]
198
+ const [v0, v1] = surface.v_range ?? [0, 1]
199
+ for (let i = 0; i <= n; i++) {
200
+ for (let j = 0; j <= n; j++) {
201
+ pts.push(
202
+ surface.parametric_fn(u0 + (i / n) * (u1 - u0), v0 + (j / n) * (v1 - v0)),
203
+ )
204
+ }
205
+ }
206
+ } else if (surface.type === `triangulated` && surface.points) {
207
+ pts.push(...surface.points)
208
+ }
209
+ return pts.filter((pt) => isFinite(pt.x) && isFinite(pt.y) && isFinite(pt.z))
210
+ }
211
+
212
+ // Compute axis range with D3's nice() for clean boundaries
213
+ function compute_range(
214
+ values: number[],
215
+ range?: [number | null, number | null],
216
+ ): Vec2 {
217
+ if (range?.[0] != null && range?.[1] != null) return range as Vec2
218
+ const valid = values.filter(isFinite)
219
+ if (!valid.length) return [0, 1]
220
+ let [min, max] = [Math.min(...valid), Math.max(...valid)]
221
+ const pad = min === max
222
+ ? (min === 0 ? 1 : Math.abs(min * 0.1))
223
+ : (max - min) * 0.05
224
+ if (range?.[0] == null) min -= pad
225
+ if (range?.[1] == null) max += pad
226
+ return scaleLinear().domain([range?.[0] ?? min, range?.[1] ?? max]).nice()
227
+ .domain() as Vec2
228
+ }
229
+
230
+ // Collect xyz values from points and surfaces
231
+ let surface_samples = $derived(surfaces.flatMap(sample_surface))
232
+ let x_range = $derived(
233
+ compute_range([
234
+ ...all_points.map((point) => point.x),
235
+ ...surface_samples.map((point) => point.x),
236
+ ], x_axis.range),
237
+ )
238
+ let y_range = $derived(
239
+ compute_range([
240
+ ...all_points.map((point) => point.y),
241
+ ...surface_samples.map((point) => point.y),
242
+ ], y_axis.range),
243
+ )
244
+ let z_range = $derived(
245
+ compute_range([
246
+ ...all_points.map((point) => point.z),
247
+ ...surface_samples.map((point) => point.z),
248
+ ], z_axis.range),
249
+ )
250
+
251
+ const normalize_x = (value: number) => normalize_to_scene(value, x_range, scene_x)
252
+ const normalize_y = (value: number) => normalize_to_scene(value, y_range, scene_y)
253
+ const normalize_z = (value: number) => normalize_to_scene(value, z_range, scene_z)
254
+
255
+ // Color/size scales
256
+ let all_color_values = $derived(
257
+ all_points.map((pt) => pt.color_value).filter((val): val is number => val != null),
258
+ )
259
+ let auto_color_range: [number, number] = $derived.by(() => {
260
+ if (!all_color_values.length) return [0, 1]
261
+ let min = all_color_values[0]
262
+ let max = all_color_values[0]
263
+ for (const val of all_color_values) {
264
+ if (val < min) min = val
265
+ else if (val > max) max = val
266
+ }
267
+ return [min, max]
268
+ })
269
+ let all_size_values = $derived(
270
+ all_points.map((pt) => pt.size_value).filter((val): val is number => val != null),
271
+ )
272
+ let color_scale_fn = $derived(create_color_scale(color_scale, auto_color_range))
273
+ let size_scale_fn = $derived(create_size_scale(size_scale, all_size_values))
274
+
275
+ // Process points with normalized positions
276
+ // Swap Y/Z for Three.js: user Z → Three.js Y (vertical), user Y → Three.js Z (depth)
277
+ let processed_points = $derived(
278
+ all_points.map((pt): InternalPoint3D<Metadata> => ({
279
+ ...pt,
280
+ x: normalize_x(pt.x), // user X → Three.js X
281
+ y: normalize_z(pt.z), // user Z → Three.js Y (vertical)
282
+ z: normalize_y(pt.y), // user Y → Three.js Z (depth)
283
+ })),
284
+ )
285
+
286
+ // Group points by radius, with per-instance colors
287
+ type RadiusGroup = {
288
+ radius: number
289
+ points: InternalPoint3D<Metadata>[]
290
+ colors: string[]
291
+ }
292
+
293
+ let radius_groups = $derived.by((): RadiusGroup[] => {
294
+ const groups: Record<string, RadiusGroup> = {}
295
+ for (const pt of processed_points) {
296
+ const srs = series[pt.series_idx]
297
+ if (!(series_visibility[pt.series_idx] ?? srs?.visible ?? true)) continue
298
+ const color = pt.color_value != null
299
+ ? color_scale_fn(pt.color_value)
300
+ : pt.point_style?.fill ?? get_series_color(pt.series_idx)
301
+ const radius = pt.size_value != null
302
+ ? size_scale_fn(pt.size_value)
303
+ : (pt.point_style?.radius ?? styles.point?.size ?? 2) * 0.05
304
+ const key = radius.toFixed(4)
305
+ ;(groups[key] ??= { radius, points: [], colors: [] }).points.push(pt)
306
+ groups[key].colors.push(color)
307
+ }
308
+ return Object.values(groups)
309
+ })
310
+
311
+ // Projection settings - render point shadows on background planes
312
+ let proj_opacity = $derived(display.projection_opacity ?? 0.3)
313
+ let proj_scale = $derived(display.projection_scale ?? 0.5)
314
+
315
+ // Projection plane configs: each fixes one axis to the backside position
316
+ type ProjectionConfig = {
317
+ key: `xy` | `xz` | `yz`
318
+ get_pos: (pt: InternalPoint3D<Metadata>) => Vec3
319
+ }
320
+ let projection_configs = $derived(
321
+ ([`xy`, `xz`, `yz`] as const)
322
+ .filter((key) => display.projections?.[key])
323
+ .map((key): ProjectionConfig => ({
324
+ key,
325
+ get_pos: key === `xy`
326
+ ? (pt) => [pt.x, pos.y, pt.z]
327
+ : key === `xz`
328
+ ? (pt) => [pt.x, pt.y, pos.z]
329
+ : (pt) => [pos.x, pt.y, pt.z],
330
+ })),
331
+ )
332
+
333
+ // Series line data for connecting points
334
+ type SeriesLineData = {
335
+ series_idx: number
336
+ color: string
337
+ width: number
338
+ dashed: boolean
339
+ line2: Line2
340
+ geometry: LineGeometry
341
+ material: LineMaterial
342
+ }
343
+
344
+ // Track previous lines for cleanup
345
+ let series_lines: SeriesLineData[] = $state([])
346
+
347
+ $effect(() => {
348
+ // Dispose old lines before creating new ones
349
+ for (const line_data of untrack(() => series_lines)) {
350
+ line_data.geometry.dispose()
351
+ line_data.material.dispose()
352
+ }
353
+
354
+ const lines: SeriesLineData[] = []
355
+ for (let series_idx = 0; series_idx < series.length; series_idx++) {
356
+ const srs = series[series_idx]
357
+ if (!srs?.line_style) continue
358
+ if (!(series_visibility[series_idx] ?? srs.visible ?? true)) continue
359
+
360
+ // Get points for this series in order
361
+ const series_points = processed_points
362
+ .filter((pt) => pt.series_idx === series_idx)
363
+ .sort((a, b) => a.point_idx - b.point_idx)
364
+
365
+ if (series_points.length < 2) continue
366
+
367
+ // Create fat line geometry (LineGeometry for Line2)
368
+ const positions: number[] = []
369
+ for (const pt of series_points) {
370
+ positions.push(pt.x, pt.y, pt.z)
371
+ }
372
+ const geometry = new LineGeometry()
373
+ geometry.setPositions(positions)
374
+
375
+ // Determine line style
376
+ const line_style = srs.line_style
377
+ const color = line_style.stroke ??
378
+ (Array.isArray(srs.point_style)
379
+ ? srs.point_style[0]?.fill
380
+ : srs.point_style?.fill) ??
381
+ get_series_color(series_idx)
382
+ const line_width = line_style.stroke_width ?? 2
383
+ const dashed = Boolean(line_style.line_dash)
384
+
385
+ // Create LineMaterial for fat lines (linewidth is in pixels when resolution is set)
386
+ // Use placeholder resolution; the separate resolution effect updates it
387
+ const material = new LineMaterial({
388
+ color: new THREE.Color(color).getHex(),
389
+ linewidth: line_width, // Width in pixels
390
+ dashed,
391
+ dashScale: dashed ? 2 : 1,
392
+ dashSize: 0.1,
393
+ gapSize: 0.05,
394
+ resolution: new THREE.Vector2(1, 1),
395
+ })
396
+
397
+ const line2 = new Line2(geometry, material)
398
+ line2.computeLineDistances()
399
+
400
+ lines.push({
401
+ series_idx,
402
+ color,
403
+ width: line_width,
404
+ dashed,
405
+ line2,
406
+ geometry,
407
+ material,
408
+ })
409
+ }
410
+ series_lines = lines
411
+ })
412
+
413
+ // Update LineMaterial resolution when canvas size changes
414
+ $effect(() => {
415
+ const canvas_width = width || 1
416
+ const canvas_height = height || 1
417
+ for (const line_data of series_lines) {
418
+ line_data.material.resolution.set(canvas_width, canvas_height)
419
+ }
420
+ })
421
+
422
+ // Cleanup on component destroy
423
+ onDestroy(() => {
424
+ for (const { geometry, material } of series_lines) {
425
+ geometry.dispose()
426
+ material.dispose()
427
+ }
428
+ Object.values(axis_geometries).forEach((geom) => geom.dispose())
429
+ for (const data of Object.values(axis_geom_data)) {
430
+ data.tick_geoms.forEach((geom) => geom.dispose())
431
+ data.grid_geoms.flat().forEach((geom) => geom.dispose())
432
+ }
433
+ })
434
+
435
+ // Generate axis ticks using D3's smart tick generation
436
+ function gen_ticks(
437
+ range: [number, number],
438
+ ticks?: AxisConfig3D[`ticks`],
439
+ ): number[] {
440
+ if (Array.isArray(ticks)) return ticks
441
+ const [min, max] = range
442
+ if (!isFinite(min) || !isFinite(max) || min === max) return [min]
443
+ const count = typeof ticks === `number` ? ticks : 5
444
+ return scaleLinear().domain([min, max]).ticks(count)
445
+ }
446
+
447
+ let x_ticks = $derived(gen_ticks(x_range, x_axis.ticks))
448
+ let y_ticks = $derived(gen_ticks(y_range, y_axis.ticks))
449
+ let z_ticks = $derived(gen_ticks(z_range, z_axis.ticks))
450
+
451
+ // Create axis line geometry - reuses a shared Float32Array for efficiency
452
+ function create_line_geometry(start: Vec3, end: Vec3): THREE.BufferGeometry {
453
+ const geometry = new THREE.BufferGeometry()
454
+ const positions = new Float32Array([...start, ...end])
455
+ geometry.setAttribute(`position`, new THREE.BufferAttribute(positions, 3))
456
+ return geometry
457
+ }
458
+
459
+ // Build event data for point interactions
460
+ function make_event_data(
461
+ point: InternalPoint3D<Metadata>,
462
+ event?: MouseEvent,
463
+ ): Scatter3DHandlerEvent<Metadata> | null {
464
+ const orig = all_points.find(
465
+ (pt) => pt.series_idx === point.series_idx && pt.point_idx === point.point_idx,
466
+ )
467
+ if (!orig) return null
468
+ return {
469
+ x: orig.x,
470
+ y: orig.y,
471
+ z: orig.z,
472
+ metadata: point.metadata ?? null,
473
+ label: series[point.series_idx]?.label ?? null,
474
+ series_idx: point.series_idx,
475
+ x_axis,
476
+ y_axis,
477
+ z_axis,
478
+ x_formatted: format_num(orig.x, x_axis.format || `.3~g`),
479
+ y_formatted: format_num(orig.y, y_axis.format || `.3~g`),
480
+ z_formatted: format_num(orig.z, z_axis.format || `.3~g`),
481
+ color_value: point.color_value,
482
+ fullscreen: false,
483
+ event,
484
+ point,
485
+ }
486
+ }
487
+
488
+ function handle_point_enter(point: InternalPoint3D<Metadata>) {
489
+ hovered_point = point
490
+ const data = make_event_data(point)
491
+ if (data) on_point_hover?.(data)
492
+ }
493
+
494
+ function handle_point_click(point: InternalPoint3D<Metadata>, event: MouseEvent) {
495
+ const data = make_event_data(point, event)
496
+ if (data) on_point_click?.(data)
497
+ }
498
+
499
+ // Gizmo props - parent (ScatterPlot3D) handles className and ColorBar offset adjustments
500
+ let gizmo_props = $derived(
501
+ gizmo === false
502
+ ? null
503
+ : gizmo === true
504
+ ? { background: { enabled: false }, offset: { left: 5, bottom: 5 } }
505
+ : gizmo,
506
+ )
507
+
508
+ // Orbit controls - snappy with minimal inertia
509
+ let orbit_controls_props = $derived({
510
+ enableRotate: rotate_speed > 0,
511
+ rotateSpeed: rotate_speed,
512
+ enableZoom: zoom_speed > 0,
513
+ zoomSpeed: zoom_speed,
514
+ enablePan: pan_speed > 0,
515
+ panSpeed: pan_speed,
516
+ target: [0, 0, 0] as Vec3,
517
+ maxZoom: max_zoom,
518
+ minZoom: min_zoom,
519
+ autoRotate: Boolean(auto_rotate),
520
+ autoRotateSpeed: auto_rotate,
521
+ enableDamping: rotation_damping > 0,
522
+ dampingFactor: rotation_damping,
523
+ })
524
+
525
+ // Axis configuration for rendering
526
+ const tick_length = 0.15
527
+ type AxisKey = `x` | `y` | `z`
528
+ const AXIS_KEYS: readonly AxisKey[] = [`x`, `y`, `z`]
529
+
530
+ // Main axis line geometries - updated when backside positions change
531
+ let axis_geometries: Record<AxisKey, THREE.BufferGeometry> = $state({
532
+ x: create_line_geometry([-half_x, -half_z, -half_y], [half_x, -half_z, -half_y]),
533
+ y: create_line_geometry([-half_x, -half_z, -half_y], [-half_x, -half_z, half_y]),
534
+ z: create_line_geometry([-half_x, -half_z, -half_y], [-half_x, half_z, -half_y]),
535
+ })
536
+
537
+ $effect(() => {
538
+ // Capture pos values for dependency tracking
539
+ const { x: px, y: py, z: pz } = pos
540
+ untrack(() => {
541
+ for (const key of AXIS_KEYS) axis_geometries[key].dispose()
542
+ })
543
+ // X-axis: spans full X, positioned at backside Y and Z
544
+ axis_geometries.x = create_line_geometry([-half_x, py, pz], [half_x, py, pz])
545
+ // Y-axis (user Y → Three.js Z): spans full Z, positioned at backside X and Y
546
+ axis_geometries.y = create_line_geometry([px, py, -half_y], [px, py, half_y])
547
+ // Z-axis (user Z → Three.js Y): spans full Y, positioned at backside X and Z
548
+ axis_geometries.z = create_line_geometry([px, -half_z, pz], [px, half_z, pz])
549
+ })
550
+
551
+ // Axis rendering config - all positions use backside `pos` values
552
+ let axes_config = $derived([
553
+ {
554
+ key: `x` as AxisKey,
555
+ color: `#ef4444`,
556
+ axis: x_axis,
557
+ ticks: x_ticks,
558
+ range: x_range,
559
+ get_tick_pos: (val: number): Vec3 => [normalize_x(val), pos.y, pos.z],
560
+ get_tick_end: (
561
+ val: number,
562
+ ): Vec3 => [normalize_x(val), pos.y + sign_y * tick_length, pos.z],
563
+ get_grid_lines: (val: number): [Vec3, Vec3][] => {
564
+ const px = normalize_x(val)
565
+ return [
566
+ [[px, -half_z, pos.z], [px, half_z, pos.z]],
567
+ [[px, pos.y, -half_y], [px, pos.y, half_y]],
568
+ ]
569
+ },
570
+ tick_label_pos: (
571
+ val: number,
572
+ ): Vec3 => [normalize_x(val), pos.y + sign_y * 0.4, pos.z],
573
+ axis_label_pos: [0, pos.y + sign_y * 0.9, pos.z] as Vec3,
574
+ },
575
+ {
576
+ key: `y` as AxisKey,
577
+ color: `#22c55e`,
578
+ axis: y_axis,
579
+ ticks: y_ticks,
580
+ range: y_range,
581
+ get_tick_pos: (val: number): Vec3 => [pos.x, pos.y, normalize_y(val)],
582
+ get_tick_end: (
583
+ val: number,
584
+ ): Vec3 => [pos.x, pos.y + sign_y * tick_length, normalize_y(val)],
585
+ get_grid_lines: (val: number): [Vec3, Vec3][] => {
586
+ const py = normalize_y(val)
587
+ return [
588
+ [[-half_x, pos.y, py], [half_x, pos.y, py]],
589
+ [[pos.x, -half_z, py], [pos.x, half_z, py]],
590
+ ]
591
+ },
592
+ tick_label_pos: (
593
+ val: number,
594
+ ): Vec3 => [pos.x + sign_x * 0.5, pos.y + sign_y * 0.4, normalize_y(val)],
595
+ axis_label_pos: [
596
+ pos.x,
597
+ pos.y + sign_y * 0.9,
598
+ pos.z < 0 ? half_y + 0.5 : -half_y - 0.5,
599
+ ] as Vec3,
600
+ },
601
+ {
602
+ key: `z` as AxisKey,
603
+ color: `#3b82f6`,
604
+ axis: z_axis,
605
+ ticks: z_ticks,
606
+ range: z_range,
607
+ get_tick_pos: (val: number): Vec3 => [pos.x, normalize_z(val), pos.z],
608
+ get_tick_end: (
609
+ val: number,
610
+ ): Vec3 => [pos.x + sign_x * tick_length, normalize_z(val), pos.z],
611
+ get_grid_lines: (val: number): [Vec3, Vec3][] => {
612
+ const pz = normalize_z(val)
613
+ return [
614
+ [[-half_x, pz, pos.z], [half_x, pz, pos.z]],
615
+ [[pos.x, pz, -half_y], [pos.x, pz, half_y]],
616
+ ]
617
+ },
618
+ tick_label_pos: (
619
+ val: number,
620
+ ): Vec3 => [pos.x + sign_x * 0.5, normalize_z(val), pos.z],
621
+ axis_label_pos: [pos.x + sign_x, 0, pos.z] as Vec3,
622
+ },
623
+ ])
624
+
625
+ // Pre-computed geometries for tick marks and grid lines, indexed by axis and tick position
626
+ type AxisGeomData = {
627
+ tick_geoms: THREE.BufferGeometry[]
628
+ grid_geoms: THREE.BufferGeometry[][]
629
+ }
630
+ const empty_geom_data = (): AxisGeomData => ({ tick_geoms: [], grid_geoms: [] })
631
+ let axis_geom_data: Record<AxisKey, AxisGeomData> = $state({
632
+ x: empty_geom_data(),
633
+ y: empty_geom_data(),
634
+ z: empty_geom_data(),
635
+ })
636
+
637
+ // Recreate tick/grid geometries when axes config changes
638
+ $effect(() => {
639
+ const config = axes_config
640
+ // Dispose old geometries (untracked to avoid dependency cycle)
641
+ untrack(() => {
642
+ for (const key of AXIS_KEYS) {
643
+ axis_geom_data[key].tick_geoms.forEach((geom) => geom.dispose())
644
+ axis_geom_data[key].grid_geoms.flat().forEach((geom) => geom.dispose())
645
+ }
646
+ })
647
+ for (const { key, ticks, get_tick_pos, get_tick_end, get_grid_lines } of config) {
648
+ axis_geom_data[key] = {
649
+ tick_geoms: ticks.map((val) =>
650
+ create_line_geometry(get_tick_pos(val), get_tick_end(val))
651
+ ),
652
+ grid_geoms: ticks.map((val) =>
653
+ get_grid_lines(val).map(([start, end]) => create_line_geometry(start, end))
654
+ ),
655
+ }
656
+ }
657
+ })
658
+ </script>
659
+
660
+ {#if camera_projection === `perspective`}
661
+ <T.PerspectiveCamera makeDefault position={camera_position} {fov} near={0.1} far={1000}>
662
+ <extras.OrbitControls bind:ref={orbit_controls} {...orbit_controls_props}>
663
+ {#if gizmo_props}<extras.Gizmo {...gizmo_props} />{/if}
664
+ </extras.OrbitControls>
665
+ </T.PerspectiveCamera>
666
+ {:else}
667
+ <T.OrthographicCamera
668
+ makeDefault
669
+ position={camera_position}
670
+ zoom={Math.min(width, height) / Math.max(scene_x, scene_y) / 2 || 50}
671
+ near={-100}
672
+ far={1000}
673
+ >
674
+ <extras.OrbitControls bind:ref={orbit_controls} {...orbit_controls_props}>
675
+ {#if gizmo_props}<extras.Gizmo {...gizmo_props} />{/if}
676
+ </extras.OrbitControls>
677
+ </T.OrthographicCamera>
678
+ {/if}
679
+
680
+ <!-- Lighting -->
681
+ <T.DirectionalLight position={[10, 20, 10]} intensity={directional_light} />
682
+ <T.DirectionalLight position={[-10, -10, -10]} intensity={directional_light * 0.3} />
683
+ <T.AmbientLight intensity={ambient_light} />
684
+
685
+ <!-- Background planes with subtle shading - always on backside relative to camera -->
686
+ {#if display.show_grid !== false}
687
+ {@const plane_mat = {
688
+ color: `#888`,
689
+ opacity: 0.04,
690
+ transparent: true,
691
+ side: THREE.DoubleSide,
692
+ depthWrite: false,
693
+ }}
694
+ <T.Mesh position={[0, pos.y, 0]} rotation.x={-Math.PI / 2} renderOrder={-1}>
695
+ <T.PlaneGeometry args={[scene_x, scene_y]} />
696
+ <T.MeshBasicMaterial {...plane_mat} />
697
+ </T.Mesh>
698
+ <T.Mesh position={[0, 0, pos.z]} renderOrder={-1}>
699
+ <T.PlaneGeometry args={[scene_x, scene_z]} />
700
+ <T.MeshBasicMaterial {...plane_mat} />
701
+ </T.Mesh>
702
+ <T.Mesh position={[pos.x, 0, 0]} rotation.y={Math.PI / 2} renderOrder={-1}>
703
+ <T.PlaneGeometry args={[scene_y, scene_z]} />
704
+ <T.MeshBasicMaterial {...plane_mat} />
705
+ </T.Mesh>
706
+ {/if}
707
+
708
+ <!-- Axes with ticks and grid -->
709
+ {#if display.show_axes !== false}
710
+ {#each axes_config as { key, color, axis, ticks, tick_label_pos, axis_label_pos } (key)}
711
+ <!-- Main axis line -->
712
+ <T.Line>
713
+ <T is={axis_geometries[key]} />
714
+ <T.LineBasicMaterial {color} linewidth={2} />
715
+ </T.Line>
716
+ <!-- Ticks and grid -->
717
+ {#each ticks as tick_val, tick_idx (tick_val)}
718
+ {#if axis_geom_data[key].tick_geoms[tick_idx]}
719
+ <T.Line>
720
+ <T is={axis_geom_data[key].tick_geoms[tick_idx]} />
721
+ <T.LineBasicMaterial {color} />
722
+ </T.Line>
723
+ {/if}
724
+ {#if display.show_grid !== false}
725
+ {#each axis_geom_data[key].grid_geoms[tick_idx] ?? [] as
726
+ grid_geom,
727
+ grid_idx
728
+ (grid_idx)
729
+ }
730
+ <T.Line>
731
+ <T is={grid_geom} />
732
+ <T.LineBasicMaterial color="#888" opacity={0.4} transparent />
733
+ </T.Line>
734
+ {/each}
735
+ {/if}
736
+ <extras.HTML position={tick_label_pos(tick_val)} center>
737
+ <span class="tick-label">{format_num(tick_val, axis.format || `.2~g`)}</span>
738
+ </extras.HTML>
739
+ {/each}
740
+ <!-- Axis label -->
741
+ <extras.HTML position={axis_label_pos} center>
742
+ <span class="axis-label" style:color>{axis.label || key.toUpperCase()}</span>
743
+ </extras.HTML>
744
+ {/each}
745
+ {/if}
746
+
747
+ <!-- Surfaces -->
748
+ {#each surfaces.filter((srf) => srf.visible !== false) as
749
+ surface
750
+ (surface.id ?? surfaces.indexOf(surface))
751
+ }
752
+ <Surface3D
753
+ config={surface}
754
+ {x_range}
755
+ {y_range}
756
+ {z_range}
757
+ {scene_x}
758
+ {scene_y}
759
+ {scene_z}
760
+ />
761
+ {/each}
762
+
763
+ <!-- Reference Planes -->
764
+ {#each (ref_planes ?? []).filter((plane) => plane.visible !== false) as
765
+ ref_plane,
766
+ plane_idx
767
+ (ref_plane.id ?? plane_idx)
768
+ }
769
+ <ReferencePlane
770
+ {ref_plane}
771
+ scene_size={[scene_x, scene_y, scene_z]}
772
+ ranges={{ x: x_range, y: y_range, z: z_range }}
773
+ />
774
+ {/each}
775
+
776
+ <!-- Reference Lines -->
777
+ {#each (ref_lines ?? []).filter((line) => line.visible !== false) as
778
+ ref_line,
779
+ line_idx
780
+ (ref_line.id ?? line_idx)
781
+ }
782
+ <ReferenceLine3D
783
+ {ref_line}
784
+ scene_size={[scene_x, scene_y, scene_z]}
785
+ ranges={{ x: x_range, y: y_range, z: z_range }}
786
+ />
787
+ {/each}
788
+
789
+ <!-- Series lines connecting points (fat lines using Line2) -->
790
+ {#each series_lines as line_data (line_data.series_idx)}
791
+ <T is={line_data.line2} />
792
+ {/each}
793
+
794
+ <!-- Instanced scatter points with per-instance colors and event handling -->
795
+ {#each radius_groups as group (group.radius)}
796
+ <extras.InstancedMesh
797
+ limit={group.points.length}
798
+ range={group.points.length}
799
+ frustumCulled={false}
800
+ >
801
+ <T.SphereGeometry args={[1, sphere_segments, sphere_segments]} />
802
+ <T.MeshStandardMaterial vertexColors={false} />
803
+ {#each group.points as point, idx (`${point.series_idx}-${point.point_idx}`)}
804
+ <extras.Instance
805
+ position={[point.x, point.y, point.z]}
806
+ scale={group.radius}
807
+ color={group.colors[idx]}
808
+ onpointerenter={() => handle_point_enter(point)}
809
+ onpointerleave={() => {
810
+ hovered_point = null
811
+ on_point_hover?.(null)
812
+ }}
813
+ onclick={(evt: MouseEvent) => handle_point_click(point, evt)}
814
+ />
815
+ {/each}
816
+ </extras.InstancedMesh>
817
+ {/each}
818
+
819
+ <!-- Plane Projections - render point shadows on enabled background planes -->
820
+ {#each projection_configs as { key, get_pos } (key)}
821
+ {#each radius_groups as group (group.radius)}
822
+ <extras.InstancedMesh
823
+ limit={group.points.length}
824
+ range={group.points.length}
825
+ frustumCulled={false}
826
+ >
827
+ <T.SphereGeometry args={[1, 8, 8]} />
828
+ <T.MeshBasicMaterial transparent opacity={proj_opacity} depthWrite={false} />
829
+ {#each group.points as point, idx (`${key}-${point.series_idx}-${point.point_idx}`)}
830
+ <extras.Instance
831
+ position={get_pos(point)}
832
+ scale={group.radius * proj_scale}
833
+ color={group.colors[idx]}
834
+ />
835
+ {/each}
836
+ </extras.InstancedMesh>
837
+ {/each}
838
+ {/each}
839
+
840
+ <!-- Hover highlight -->
841
+ {#if hovered_point}
842
+ {@const hp = hovered_point}
843
+ {@const group = radius_groups.find((grp) =>
844
+ grp.points.some((pt) =>
845
+ pt.series_idx === hp.series_idx && pt.point_idx === hp.point_idx
846
+ )
847
+ )}
848
+ <T.Mesh position={[hp.x, hp.y, hp.z]} scale={(group?.radius ?? 0.1) * 1.5}>
849
+ <T.SphereGeometry args={[1, 16, 16]} />
850
+ <T.MeshStandardMaterial
851
+ color="white"
852
+ transparent
853
+ opacity={0.4}
854
+ emissive="white"
855
+ emissiveIntensity={0.3}
856
+ depthTest={false}
857
+ depthWrite={false}
858
+ />
859
+ </T.Mesh>
860
+ {/if}
861
+
862
+ <!-- Tooltip -->
863
+ {#if hovered_point}
864
+ {@const hp = hovered_point}
865
+ {@const data = make_event_data(hp)}
866
+ {#if data}
867
+ <extras.HTML position={[hp.x, hp.y + 0.3, hp.z]} center>
868
+ {#if tooltip}
869
+ {@render tooltip(data)}
870
+ {:else}
871
+ <div class="tooltip">
872
+ <div>x: {data.x_formatted}</div>
873
+ <div>y: {data.y_formatted}</div>
874
+ <div>z: {data.z_formatted}</div>
875
+ {#if data.color_value != null}
876
+ <div>value: {format_num(data.color_value, `.3~g`)}</div>
877
+ {/if}
878
+ </div>
879
+ {/if}
880
+ </extras.HTML>
881
+ {/if}
882
+ {/if}
883
+
884
+ <style>
885
+ :is(.axis-label, .tick-label) {
886
+ pointer-events: none;
887
+ user-select: none;
888
+ white-space: nowrap;
889
+ }
890
+ .axis-label {
891
+ font-size: 13px;
892
+ font-weight: 600;
893
+ }
894
+ .tick-label {
895
+ font-size: 10px;
896
+ color: var(--text-color, #333);
897
+ }
898
+ .tooltip {
899
+ background: var(--scatter3d-tooltip-bg, rgba(0, 0, 0, 0.85));
900
+ color: var(--scatter3d-tooltip-color, white);
901
+ padding: 6px 10px;
902
+ border-radius: 4px;
903
+ font-size: 12px;
904
+ white-space: nowrap;
905
+ pointer-events: none;
906
+ user-select: none;
907
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
908
+ }
909
+ .tooltip div {
910
+ line-height: 1.4;
911
+ }
912
+ </style>