matterviz 0.3.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (926) 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 +44 -0
  5. package/dist/Icon.svelte.d.ts +13 -0
  6. package/dist/MillerIndexInput.svelte +66 -0
  7. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  8. package/dist/api/mp.d.ts +6 -0
  9. package/dist/api/mp.js +22 -0
  10. package/dist/api/optimade.d.ts +45 -0
  11. package/dist/api/optimade.js +141 -0
  12. package/dist/app.css +244 -0
  13. package/dist/brillouin/BrillouinZone.svelte +554 -0
  14. package/dist/brillouin/BrillouinZone.svelte.d.ts +84 -0
  15. package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
  16. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
  17. package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
  18. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  19. package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  20. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  21. package/dist/brillouin/BrillouinZoneScene.svelte +522 -0
  22. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +49 -0
  23. package/dist/brillouin/BrillouinZoneTooltip.svelte +83 -0
  24. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
  25. package/dist/brillouin/compute.d.ts +17 -0
  26. package/dist/brillouin/compute.js +422 -0
  27. package/dist/brillouin/index.d.ts +8 -0
  28. package/dist/brillouin/index.js +7 -0
  29. package/dist/brillouin/types.d.ts +43 -0
  30. package/dist/brillouin/types.js +1 -0
  31. package/dist/chempot-diagram/ChemPotDiagram.svelte +328 -0
  32. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  33. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +843 -0
  34. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  35. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3191 -0
  36. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  37. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  38. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  39. package/dist/chempot-diagram/async-compute.svelte.js +80 -0
  40. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  41. package/dist/chempot-diagram/chempot-worker.js +12 -0
  42. package/dist/chempot-diagram/color.d.ts +10 -0
  43. package/dist/chempot-diagram/color.js +32 -0
  44. package/dist/chempot-diagram/compute.d.ts +48 -0
  45. package/dist/chempot-diagram/compute.js +804 -0
  46. package/dist/chempot-diagram/index.d.ts +6 -0
  47. package/dist/chempot-diagram/index.js +6 -0
  48. package/dist/chempot-diagram/pointer.d.ts +16 -0
  49. package/dist/chempot-diagram/pointer.js +40 -0
  50. package/dist/chempot-diagram/temperature.d.ts +15 -0
  51. package/dist/chempot-diagram/temperature.js +34 -0
  52. package/dist/chempot-diagram/types.d.ts +81 -0
  53. package/dist/chempot-diagram/types.js +28 -0
  54. package/dist/colors/index.d.ts +47 -0
  55. package/dist/colors/index.js +204 -0
  56. package/dist/composition/BarChart.svelte +297 -0
  57. package/dist/composition/BarChart.svelte.d.ts +39 -0
  58. package/dist/composition/BubbleChart.svelte +218 -0
  59. package/dist/composition/BubbleChart.svelte.d.ts +28 -0
  60. package/dist/composition/Composition.svelte +165 -0
  61. package/dist/composition/Composition.svelte.d.ts +15 -0
  62. package/dist/composition/Formula.svelte +268 -0
  63. package/dist/composition/Formula.svelte.d.ts +19 -0
  64. package/dist/composition/FormulaFilter.svelte +1263 -0
  65. package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
  66. package/dist/composition/PieChart.svelte +324 -0
  67. package/dist/composition/PieChart.svelte.d.ts +37 -0
  68. package/dist/composition/chem-sys.d.ts +8 -0
  69. package/dist/composition/chem-sys.js +85 -0
  70. package/dist/composition/format.d.ts +15 -0
  71. package/dist/composition/format.js +111 -0
  72. package/dist/composition/index.d.ts +21 -0
  73. package/dist/composition/index.js +15 -0
  74. package/dist/composition/parse.d.ts +56 -0
  75. package/dist/composition/parse.js +486 -0
  76. package/dist/constants.d.ts +29 -0
  77. package/dist/constants.js +99 -0
  78. package/dist/controls.d.ts +14 -0
  79. package/dist/controls.js +30 -0
  80. package/dist/convex-hull/ConvexHull.svelte +157 -0
  81. package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
  82. package/dist/convex-hull/ConvexHull2D.svelte +827 -0
  83. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
  84. package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
  85. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
  86. package/dist/convex-hull/ConvexHull4D.svelte +1394 -0
  87. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
  88. package/dist/convex-hull/ConvexHullControls.svelte +535 -0
  89. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
  90. package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
  91. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
  92. package/dist/convex-hull/ConvexHullStats.svelte +929 -0
  93. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
  94. package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
  95. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
  96. package/dist/convex-hull/GasPressureControls.svelte +247 -0
  97. package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
  98. package/dist/convex-hull/StructurePopup.svelte +151 -0
  99. package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
  100. package/dist/convex-hull/TemperatureSlider.svelte +140 -0
  101. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
  102. package/dist/convex-hull/barycentric-coords.d.ts +18 -0
  103. package/dist/convex-hull/barycentric-coords.js +182 -0
  104. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  105. package/dist/convex-hull/demo-temperature.js +38 -0
  106. package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
  107. package/dist/convex-hull/gas-thermodynamics.js +306 -0
  108. package/dist/convex-hull/helpers.d.ts +117 -0
  109. package/dist/convex-hull/helpers.js +718 -0
  110. package/dist/convex-hull/index.d.ts +119 -0
  111. package/dist/convex-hull/index.js +58 -0
  112. package/dist/convex-hull/thermodynamics.d.ts +67 -0
  113. package/dist/convex-hull/thermodynamics.js +1757 -0
  114. package/dist/convex-hull/types.d.ts +162 -0
  115. package/dist/convex-hull/types.js +36 -0
  116. package/dist/coordination/CoordinationBarPlot.svelte +311 -0
  117. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
  118. package/dist/coordination/calc-coordination.d.ts +15 -0
  119. package/dist/coordination/calc-coordination.js +63 -0
  120. package/dist/coordination/index.d.ts +8 -0
  121. package/dist/coordination/index.js +7 -0
  122. package/dist/effects.svelte.d.ts +12 -0
  123. package/dist/effects.svelte.js +37 -0
  124. package/dist/element/BohrAtom.svelte.d.ts +20 -0
  125. package/dist/element/ElementHeading.svelte +26 -0
  126. package/dist/element/ElementHeading.svelte.d.ts +8 -0
  127. package/dist/element/ElementPhoto.svelte +57 -0
  128. package/dist/element/ElementPhoto.svelte.d.ts +9 -0
  129. package/dist/element/ElementStats.svelte +80 -0
  130. package/dist/element/ElementStats.svelte.d.ts +8 -0
  131. package/dist/element/ElementTile.svelte +484 -0
  132. package/dist/element/ElementTile.svelte.d.ts +29 -0
  133. package/dist/element/Nucleus.svelte.d.ts +17 -0
  134. package/dist/element/data.d.ts +2 -0
  135. package/dist/element/data.js +2 -0
  136. package/dist/element/index.d.ts +8 -0
  137. package/dist/element/index.js +7 -0
  138. package/dist/element/types.d.ts +57 -0
  139. package/dist/element/types.js +1 -0
  140. package/dist/feedback/ClickFeedback.svelte +58 -0
  141. package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
  142. package/dist/feedback/DragOverlay.svelte +42 -0
  143. package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
  144. package/dist/feedback/Spinner.svelte.d.ts +7 -0
  145. package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
  146. package/dist/feedback/index.d.ts +4 -0
  147. package/dist/feedback/index.js +4 -0
  148. package/dist/fermi-surface/FermiSlice.svelte +197 -0
  149. package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
  150. package/dist/fermi-surface/FermiSurface.svelte +606 -0
  151. package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
  152. package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
  153. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
  154. package/dist/fermi-surface/FermiSurfaceScene.svelte +797 -0
  155. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
  156. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +85 -0
  157. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
  158. package/dist/fermi-surface/compute.d.ts +5 -0
  159. package/dist/fermi-surface/compute.js +538 -0
  160. package/dist/fermi-surface/constants.d.ts +9 -0
  161. package/dist/fermi-surface/constants.js +27 -0
  162. package/dist/fermi-surface/export.d.ts +5 -0
  163. package/dist/fermi-surface/export.js +51 -0
  164. package/dist/fermi-surface/index.d.ts +12 -0
  165. package/dist/fermi-surface/index.js +13 -0
  166. package/dist/fermi-surface/marching-cubes.d.ts +2 -0
  167. package/dist/fermi-surface/marching-cubes.js +2 -0
  168. package/dist/fermi-surface/parse.d.ts +2 -0
  169. package/dist/fermi-surface/parse.js +494 -0
  170. package/dist/fermi-surface/symmetry.d.ts +3 -0
  171. package/dist/fermi-surface/symmetry.js +46 -0
  172. package/dist/fermi-surface/types.d.ts +111 -0
  173. package/dist/fermi-surface/types.js +4 -0
  174. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1547 -0
  175. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  176. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  177. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  178. package/dist/heatmap-matrix/index.d.ts +53 -0
  179. package/dist/heatmap-matrix/index.js +100 -0
  180. package/dist/heatmap-matrix/shared.d.ts +2 -0
  181. package/dist/heatmap-matrix/shared.js +4 -0
  182. package/dist/icons.d.ts +569 -0
  183. package/dist/icons.js +648 -0
  184. package/dist/index.d.ts +39 -0
  185. package/dist/index.js +39 -0
  186. package/dist/io/decompress.d.ts +11 -0
  187. package/dist/io/decompress.js +76 -0
  188. package/dist/io/export.d.ts +16 -0
  189. package/dist/io/export.js +338 -0
  190. package/dist/io/fetch.d.ts +5 -0
  191. package/dist/io/fetch.js +43 -0
  192. package/dist/io/file-drop.d.ts +7 -0
  193. package/dist/io/file-drop.js +42 -0
  194. package/dist/io/index.d.ts +7 -0
  195. package/dist/io/index.js +6 -0
  196. package/dist/io/is-binary.d.ts +1 -0
  197. package/dist/io/is-binary.js +20 -0
  198. package/dist/io/types.d.ts +8 -0
  199. package/dist/io/types.js +1 -0
  200. package/dist/io/url-drop.d.ts +2 -0
  201. package/dist/io/url-drop.js +154 -0
  202. package/dist/isosurface/Isosurface.svelte +285 -0
  203. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  204. package/dist/isosurface/IsosurfaceControls.svelte +277 -0
  205. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  206. package/dist/isosurface/index.d.ts +5 -0
  207. package/dist/isosurface/index.js +6 -0
  208. package/dist/isosurface/parse.d.ts +6 -0
  209. package/dist/isosurface/parse.js +552 -0
  210. package/dist/isosurface/slice.d.ts +11 -0
  211. package/dist/isosurface/slice.js +141 -0
  212. package/dist/isosurface/types.d.ts +56 -0
  213. package/dist/isosurface/types.js +227 -0
  214. package/dist/keyboard.d.ts +3 -0
  215. package/dist/keyboard.js +23 -0
  216. package/dist/labels.d.ts +53 -0
  217. package/dist/labels.js +278 -0
  218. package/dist/layout/FullscreenToggle.svelte +50 -0
  219. package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
  220. package/dist/layout/InfoCard.svelte +120 -0
  221. package/dist/layout/InfoCard.svelte.d.ts +21 -0
  222. package/dist/layout/InfoTag.svelte +185 -0
  223. package/dist/layout/InfoTag.svelte.d.ts +19 -0
  224. package/dist/layout/PropertyFilter.svelte +247 -0
  225. package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
  226. package/dist/layout/SettingsSection.svelte +148 -0
  227. package/dist/layout/SettingsSection.svelte.d.ts +17 -0
  228. package/dist/layout/SubpageGrid.svelte +82 -0
  229. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  230. package/dist/layout/fullscreen.d.ts +9 -0
  231. package/dist/layout/fullscreen.js +53 -0
  232. package/dist/layout/index.d.ts +10 -0
  233. package/dist/layout/index.js +8 -0
  234. package/dist/layout/json-tree/JsonNode.svelte +548 -0
  235. package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
  236. package/dist/layout/json-tree/JsonTree.svelte +1230 -0
  237. package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
  238. package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
  239. package/dist/layout/json-tree/index.d.ts +3 -0
  240. package/dist/layout/json-tree/index.js +3 -0
  241. package/dist/layout/json-tree/types.d.ts +74 -0
  242. package/dist/layout/json-tree/types.js +2 -0
  243. package/dist/layout/json-tree/utils.d.ts +29 -0
  244. package/dist/layout/json-tree/utils.js +642 -0
  245. package/dist/marching-cubes.d.ts +14 -0
  246. package/dist/marching-cubes.js +535 -0
  247. package/dist/math.d.ts +105 -0
  248. package/dist/math.js +920 -0
  249. package/dist/overlays/ContextMenu.svelte +162 -0
  250. package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
  251. package/dist/overlays/CopyButton.svelte +45 -0
  252. package/dist/overlays/CopyButton.svelte.d.ts +8 -0
  253. package/dist/overlays/DragControlTab.svelte +98 -0
  254. package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
  255. package/dist/overlays/DraggablePane.svelte +487 -0
  256. package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
  257. package/dist/overlays/InfoPaneCards.svelte +149 -0
  258. package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
  259. package/dist/overlays/index.d.ts +3 -0
  260. package/dist/overlays/index.js +3 -0
  261. package/dist/periodic-table/PeriodicTable.svelte +480 -0
  262. package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
  263. package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
  264. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
  265. package/dist/periodic-table/PropertySelect.svelte +38 -0
  266. package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
  267. package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
  268. package/dist/periodic-table/index.d.ts +10 -0
  269. package/dist/periodic-table/index.js +4 -0
  270. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1092 -0
  271. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
  272. package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
  273. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
  274. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +127 -0
  275. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  276. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  277. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
  278. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  279. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
  280. package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
  281. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
  282. package/dist/phase-diagram/build-diagram.d.ts +11 -0
  283. package/dist/phase-diagram/build-diagram.js +160 -0
  284. package/dist/phase-diagram/colors.d.ts +35 -0
  285. package/dist/phase-diagram/colors.js +51 -0
  286. package/dist/phase-diagram/diagram-input.d.ts +29 -0
  287. package/dist/phase-diagram/diagram-input.js +3 -0
  288. package/dist/phase-diagram/index.d.ts +13 -0
  289. package/dist/phase-diagram/index.js +11 -0
  290. package/dist/phase-diagram/parse.d.ts +55 -0
  291. package/dist/phase-diagram/parse.js +273 -0
  292. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  293. package/dist/phase-diagram/svg-to-diagram.js +867 -0
  294. package/dist/phase-diagram/types.d.ts +93 -0
  295. package/dist/phase-diagram/types.js +1 -0
  296. package/dist/phase-diagram/utils.d.ts +118 -0
  297. package/dist/phase-diagram/utils.js +600 -0
  298. package/dist/plot/bar/BarPlot.svelte +1755 -0
  299. package/dist/plot/bar/BarPlot.svelte.d.ts +84 -0
  300. package/dist/plot/bar/BarPlotControls.svelte +67 -0
  301. package/dist/plot/bar/BarPlotControls.svelte.d.ts +18 -0
  302. package/dist/plot/bar/SpacegroupBarPlot.svelte +293 -0
  303. package/dist/plot/bar/SpacegroupBarPlot.svelte.d.ts +9 -0
  304. package/dist/plot/bar/data.d.ts +40 -0
  305. package/dist/plot/bar/data.js +154 -0
  306. package/dist/plot/bar/geometry.d.ts +39 -0
  307. package/dist/plot/bar/geometry.js +60 -0
  308. package/dist/plot/bar/index.d.ts +3 -0
  309. package/dist/plot/bar/index.js +3 -0
  310. package/dist/plot/box/BoxPlot.svelte +1462 -0
  311. package/dist/plot/box/BoxPlot.svelte.d.ts +94 -0
  312. package/dist/plot/box/BoxPlotControls.svelte +109 -0
  313. package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
  314. package/dist/plot/box/Violin.svelte +14 -0
  315. package/dist/plot/box/Violin.svelte.d.ts +70 -0
  316. package/dist/plot/box/box-plot.d.ts +55 -0
  317. package/dist/plot/box/box-plot.js +126 -0
  318. package/dist/plot/box/index.d.ts +5 -0
  319. package/dist/plot/box/index.js +5 -0
  320. package/dist/plot/box/kde.d.ts +16 -0
  321. package/dist/plot/box/kde.js +160 -0
  322. package/dist/plot/box/quantile.d.ts +3 -0
  323. package/dist/plot/box/quantile.js +53 -0
  324. package/dist/plot/core/auto-place.d.ts +43 -0
  325. package/dist/plot/core/auto-place.js +122 -0
  326. package/dist/plot/core/axis-utils.d.ts +46 -0
  327. package/dist/plot/core/axis-utils.js +110 -0
  328. package/dist/plot/core/components/AxisLabel.svelte +51 -0
  329. package/dist/plot/core/components/AxisLabel.svelte.d.ts +16 -0
  330. package/dist/plot/core/components/ColorBar.svelte +724 -0
  331. package/dist/plot/core/components/ColorBar.svelte.d.ts +31 -0
  332. package/dist/plot/core/components/ColorScaleSelect.svelte +55 -0
  333. package/dist/plot/core/components/ColorScaleSelect.svelte.d.ts +15 -0
  334. package/dist/plot/core/components/ControlPane.svelte +46 -0
  335. package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
  336. package/dist/plot/core/components/FillArea.svelte +234 -0
  337. package/dist/plot/core/components/FillArea.svelte.d.ts +21 -0
  338. package/dist/plot/core/components/InteractiveAxisLabel.svelte +96 -0
  339. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +14 -0
  340. package/dist/plot/core/components/Line.svelte +101 -0
  341. package/dist/plot/core/components/Line.svelte.d.ts +15 -0
  342. package/dist/plot/core/components/PlotAxis.svelte +171 -0
  343. package/dist/plot/core/components/PlotAxis.svelte.d.ts +25 -0
  344. package/dist/plot/core/components/PlotControls.svelte +525 -0
  345. package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
  346. package/dist/plot/core/components/PlotLegend.svelte +580 -0
  347. package/dist/plot/core/components/PlotLegend.svelte.d.ts +30 -0
  348. package/dist/plot/core/components/PlotTooltip.svelte +83 -0
  349. package/dist/plot/core/components/PlotTooltip.svelte.d.ts +25 -0
  350. package/dist/plot/core/components/PortalSelect.svelte +257 -0
  351. package/dist/plot/core/components/PortalSelect.svelte.d.ts +16 -0
  352. package/dist/plot/core/components/ReferenceLine.svelte +204 -0
  353. package/dist/plot/core/components/ReferenceLine.svelte.d.ts +20 -0
  354. package/dist/plot/core/components/ReferenceLine3D.svelte +156 -0
  355. package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +14 -0
  356. package/dist/plot/core/components/ReferencePlane.svelte +175 -0
  357. package/dist/plot/core/components/ReferencePlane.svelte.d.ts +14 -0
  358. package/dist/plot/core/components/ZeroLines.svelte +97 -0
  359. package/dist/plot/core/components/ZeroLines.svelte.d.ts +33 -0
  360. package/dist/plot/core/components/ZoomRect.svelte +23 -0
  361. package/dist/plot/core/components/ZoomRect.svelte.d.ts +8 -0
  362. package/dist/plot/core/components/index.d.ts +17 -0
  363. package/dist/plot/core/components/index.js +17 -0
  364. package/dist/plot/core/data-cleaning.d.ts +107 -0
  365. package/dist/plot/core/data-cleaning.js +853 -0
  366. package/dist/plot/core/data-transform.d.ts +16 -0
  367. package/dist/plot/core/data-transform.js +45 -0
  368. package/dist/plot/core/fill-utils.d.ts +33 -0
  369. package/dist/plot/core/fill-utils.js +388 -0
  370. package/dist/plot/core/hover-lock.svelte.d.ts +14 -0
  371. package/dist/plot/core/hover-lock.svelte.js +45 -0
  372. package/dist/plot/core/index.d.ts +10 -0
  373. package/dist/plot/core/index.js +11 -0
  374. package/dist/plot/core/interactions.d.ts +35 -0
  375. package/dist/plot/core/interactions.js +195 -0
  376. package/dist/plot/core/layout.d.ts +79 -0
  377. package/dist/plot/core/layout.js +281 -0
  378. package/dist/plot/core/reference-line.d.ts +60 -0
  379. package/dist/plot/core/reference-line.js +301 -0
  380. package/dist/plot/core/scales.d.ts +48 -0
  381. package/dist/plot/core/scales.js +480 -0
  382. package/dist/plot/core/svg.d.ts +2 -0
  383. package/dist/plot/core/svg.js +41 -0
  384. package/dist/plot/core/types.d.ts +771 -0
  385. package/dist/plot/core/types.js +99 -0
  386. package/dist/plot/core/utils/label-placement.d.ts +68 -0
  387. package/dist/plot/core/utils/label-placement.js +326 -0
  388. package/dist/plot/core/utils/series-visibility.d.ts +26 -0
  389. package/dist/plot/core/utils/series-visibility.js +112 -0
  390. package/dist/plot/core/utils.d.ts +11 -0
  391. package/dist/plot/core/utils.js +27 -0
  392. package/dist/plot/histogram/Histogram.svelte +1418 -0
  393. package/dist/plot/histogram/Histogram.svelte.d.ts +50 -0
  394. package/dist/plot/histogram/HistogramControls.svelte +212 -0
  395. package/dist/plot/histogram/HistogramControls.svelte.d.ts +22 -0
  396. package/dist/plot/histogram/index.d.ts +2 -0
  397. package/dist/plot/histogram/index.js +2 -0
  398. package/dist/plot/index.d.ts +8 -0
  399. package/dist/plot/index.js +10 -0
  400. package/dist/plot/sankey/Sankey.svelte +700 -0
  401. package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
  402. package/dist/plot/sankey/SankeyControls.svelte +98 -0
  403. package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
  404. package/dist/plot/sankey/index.d.ts +4 -0
  405. package/dist/plot/sankey/index.js +3 -0
  406. package/dist/plot/sankey/sankey-types.d.ts +42 -0
  407. package/dist/plot/sankey/sankey-types.js +4 -0
  408. package/dist/plot/sankey/sankey.d.ts +52 -0
  409. package/dist/plot/sankey/sankey.js +187 -0
  410. package/dist/plot/scatter/BinnedScatterPlot.svelte +1116 -0
  411. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +66 -0
  412. package/dist/plot/scatter/ElementScatter.svelte +63 -0
  413. package/dist/plot/scatter/ElementScatter.svelte.d.ts +14 -0
  414. package/dist/plot/scatter/ScatterPlot.svelte +2357 -0
  415. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +96 -0
  416. package/dist/plot/scatter/ScatterPlotControls.svelte +307 -0
  417. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +17 -0
  418. package/dist/plot/scatter/ScatterPoint.svelte +182 -0
  419. package/dist/plot/scatter/ScatterPoint.svelte.d.ts +22 -0
  420. package/dist/plot/scatter/adaptive-density.d.ts +79 -0
  421. package/dist/plot/scatter/adaptive-density.js +217 -0
  422. package/dist/plot/scatter/binned-scatter-types.d.ts +59 -0
  423. package/dist/plot/scatter/binned-scatter-types.js +1 -0
  424. package/dist/plot/scatter/index.d.ts +7 -0
  425. package/dist/plot/scatter/index.js +5 -0
  426. package/dist/plot/scatter/scatter-data.d.ts +19 -0
  427. package/dist/plot/scatter/scatter-data.js +212 -0
  428. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +531 -0
  429. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +95 -0
  430. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +438 -0
  431. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +20 -0
  432. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +912 -0
  433. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +74 -0
  434. package/dist/plot/scatter-3d/Surface3D.svelte +197 -0
  435. package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +13 -0
  436. package/dist/plot/scatter-3d/index.d.ts +4 -0
  437. package/dist/plot/scatter-3d/index.js +4 -0
  438. package/dist/plot/sunburst/Sunburst.svelte +1045 -0
  439. package/dist/plot/sunburst/Sunburst.svelte.d.ts +96 -0
  440. package/dist/plot/sunburst/SunburstControls.svelte +200 -0
  441. package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
  442. package/dist/plot/sunburst/index.d.ts +4 -0
  443. package/dist/plot/sunburst/index.js +4 -0
  444. package/dist/plot/sunburst/render.d.ts +34 -0
  445. package/dist/plot/sunburst/render.js +122 -0
  446. package/dist/plot/sunburst/sunburst.d.ts +62 -0
  447. package/dist/plot/sunburst/sunburst.js +266 -0
  448. package/dist/rdf/RdfPlot.svelte +248 -0
  449. package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
  450. package/dist/rdf/calc-rdf.d.ts +4 -0
  451. package/dist/rdf/calc-rdf.js +98 -0
  452. package/dist/rdf/index.d.ts +23 -0
  453. package/dist/rdf/index.js +2 -0
  454. package/dist/sanitize.d.ts +6 -0
  455. package/dist/sanitize.js +116 -0
  456. package/dist/settings.d.ts +319 -0
  457. package/dist/settings.js +1394 -0
  458. package/dist/spectral/Bands.svelte +1050 -0
  459. package/dist/spectral/Bands.svelte.d.ts +39 -0
  460. package/dist/spectral/BandsAndDos.svelte +134 -0
  461. package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
  462. package/dist/spectral/BrillouinBandsDos.svelte +264 -0
  463. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
  464. package/dist/spectral/Dos.svelte +688 -0
  465. package/dist/spectral/Dos.svelte.d.ts +29 -0
  466. package/dist/spectral/helpers.d.ts +121 -0
  467. package/dist/spectral/helpers.js +1098 -0
  468. package/dist/spectral/index.d.ts +6 -0
  469. package/dist/spectral/index.js +6 -0
  470. package/dist/spectral/types.d.ts +84 -0
  471. package/dist/spectral/types.js +2 -0
  472. package/dist/state.svelte.d.ts +25 -0
  473. package/dist/state.svelte.js +45 -0
  474. package/dist/structure/Arrow.svelte +72 -0
  475. package/dist/structure/Arrow.svelte.d.ts +15 -0
  476. package/dist/structure/AtomLegend.svelte +814 -0
  477. package/dist/structure/AtomLegend.svelte.d.ts +35 -0
  478. package/dist/structure/Bond.svelte +140 -0
  479. package/dist/structure/Bond.svelte.d.ts +9 -0
  480. package/dist/structure/CanvasTooltip.svelte +33 -0
  481. package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
  482. package/dist/structure/CellSelect.svelte +348 -0
  483. package/dist/structure/CellSelect.svelte.d.ts +13 -0
  484. package/dist/structure/Cylinder.svelte +49 -0
  485. package/dist/structure/Cylinder.svelte.d.ts +13 -0
  486. package/dist/structure/Lattice.svelte +196 -0
  487. package/dist/structure/Lattice.svelte.d.ts +17 -0
  488. package/dist/structure/Structure.svelte +2254 -0
  489. package/dist/structure/Structure.svelte.d.ts +89 -0
  490. package/dist/structure/StructureControls.svelte +1273 -0
  491. package/dist/structure/StructureControls.svelte.d.ts +31 -0
  492. package/dist/structure/StructureExportPane.svelte +252 -0
  493. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  494. package/dist/structure/StructureInfoPane.svelte +736 -0
  495. package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
  496. package/dist/structure/StructureScene.svelte +2256 -0
  497. package/dist/structure/StructureScene.svelte.d.ts +111 -0
  498. package/dist/structure/atom-properties.d.ts +37 -0
  499. package/dist/structure/atom-properties.js +200 -0
  500. package/dist/structure/bond-order-perception.d.ts +13 -0
  501. package/dist/structure/bond-order-perception.js +384 -0
  502. package/dist/structure/bonding.d.ts +69 -0
  503. package/dist/structure/bonding.js +724 -0
  504. package/dist/structure/export.d.ts +20 -0
  505. package/dist/structure/export.js +731 -0
  506. package/dist/structure/index.d.ts +124 -0
  507. package/dist/structure/index.js +167 -0
  508. package/dist/structure/label-placement.d.ts +14 -0
  509. package/dist/structure/label-placement.js +72 -0
  510. package/dist/structure/measure.d.ts +7 -0
  511. package/dist/structure/measure.js +30 -0
  512. package/dist/structure/parse.d.ts +66 -0
  513. package/dist/structure/parse.js +1410 -0
  514. package/dist/structure/partial-occupancy.d.ts +25 -0
  515. package/dist/structure/partial-occupancy.js +99 -0
  516. package/dist/structure/pbc.d.ts +9 -0
  517. package/dist/structure/pbc.js +127 -0
  518. package/dist/structure/supercell.d.ts +8 -0
  519. package/dist/structure/supercell.js +170 -0
  520. package/dist/structure/validation.d.ts +2 -0
  521. package/dist/structure/validation.js +10 -0
  522. package/dist/symmetry/SymmetryStats.svelte +226 -0
  523. package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
  524. package/dist/symmetry/WyckoffTable.svelte +120 -0
  525. package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
  526. package/dist/symmetry/cell-transform.d.ts +12 -0
  527. package/dist/symmetry/cell-transform.js +91 -0
  528. package/dist/symmetry/index.d.ts +43 -0
  529. package/dist/symmetry/index.js +226 -0
  530. package/dist/symmetry/spacegroups.d.ts +16 -0
  531. package/dist/symmetry/spacegroups.js +429 -0
  532. package/dist/table/HeatmapTable.svelte +1885 -0
  533. package/dist/table/HeatmapTable.svelte.d.ts +49 -0
  534. package/dist/table/ToggleMenu.svelte +385 -0
  535. package/dist/table/ToggleMenu.svelte.d.ts +11 -0
  536. package/dist/table/index.d.ts +72 -0
  537. package/dist/table/index.js +38 -0
  538. package/dist/theme/ThemeControl.svelte +53 -0
  539. package/dist/theme/ThemeControl.svelte.d.ts +9 -0
  540. package/dist/theme/index.d.ts +29 -0
  541. package/dist/theme/index.js +79 -0
  542. package/dist/time.d.ts +4 -0
  543. package/dist/time.js +70 -0
  544. package/dist/tooltip/KCoords.svelte +45 -0
  545. package/dist/tooltip/KCoords.svelte.d.ts +8 -0
  546. package/dist/tooltip/TooltipContent.svelte +58 -0
  547. package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
  548. package/dist/tooltip/index.d.ts +3 -0
  549. package/dist/tooltip/index.js +2 -0
  550. package/dist/tooltip/types.d.ts +8 -0
  551. package/dist/tooltip/types.js +1 -0
  552. package/dist/trajectory/Trajectory.svelte +1571 -0
  553. package/dist/trajectory/Trajectory.svelte.d.ts +78 -0
  554. package/dist/trajectory/TrajectoryError.svelte +128 -0
  555. package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
  556. package/dist/trajectory/TrajectoryExportPane.svelte +358 -0
  557. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
  558. package/dist/trajectory/TrajectoryInfoPane.svelte +314 -0
  559. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
  560. package/dist/trajectory/constants.d.ts +6 -0
  561. package/dist/trajectory/constants.js +7 -0
  562. package/dist/trajectory/extract.d.ts +5 -0
  563. package/dist/trajectory/extract.js +162 -0
  564. package/dist/trajectory/format-detect.d.ts +10 -0
  565. package/dist/trajectory/format-detect.js +90 -0
  566. package/dist/trajectory/frame-reader.d.ts +17 -0
  567. package/dist/trajectory/frame-reader.js +299 -0
  568. package/dist/trajectory/helpers.d.ts +15 -0
  569. package/dist/trajectory/helpers.js +164 -0
  570. package/dist/trajectory/index.d.ts +63 -0
  571. package/dist/trajectory/index.js +126 -0
  572. package/dist/trajectory/parse/ase.d.ts +2 -0
  573. package/dist/trajectory/parse/ase.js +73 -0
  574. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  575. package/dist/trajectory/parse/hdf5.js +127 -0
  576. package/dist/trajectory/parse/index.d.ts +12 -0
  577. package/dist/trajectory/parse/index.js +306 -0
  578. package/dist/trajectory/parse/lammps.d.ts +5 -0
  579. package/dist/trajectory/parse/lammps.js +179 -0
  580. package/dist/trajectory/parse/vasp.d.ts +2 -0
  581. package/dist/trajectory/parse/vasp.js +87 -0
  582. package/dist/trajectory/parse/xyz.d.ts +26 -0
  583. package/dist/trajectory/parse/xyz.js +123 -0
  584. package/dist/trajectory/plotting.d.ts +28 -0
  585. package/dist/trajectory/plotting.js +423 -0
  586. package/dist/trajectory/types.d.ts +11 -0
  587. package/dist/trajectory/types.js +1 -0
  588. package/dist/utils.d.ts +7 -0
  589. package/dist/utils.js +47 -0
  590. package/dist/xrd/XrdPlot.svelte +616 -0
  591. package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
  592. package/dist/xrd/broadening.d.ts +20 -0
  593. package/dist/xrd/broadening.js +97 -0
  594. package/dist/xrd/calc-xrd.d.ts +37 -0
  595. package/dist/xrd/calc-xrd.js +339 -0
  596. package/dist/xrd/index.d.ts +37 -0
  597. package/dist/xrd/index.js +4 -0
  598. package/dist/xrd/parse.d.ts +13 -0
  599. package/dist/xrd/parse.js +749 -0
  600. package/license +1 -1
  601. package/package.json +237 -1458
  602. package/readme.md +98 -171
  603. package/.vscode/launch.json +0 -13
  604. package/.vscodeignore +0 -7
  605. package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
  606. package/dist/assets/browser-DdDecX_W.js +0 -1
  607. package/dist/assets/export-qgn-H9y6.js +0 -2
  608. package/dist/assets/main-DiKYzti2.css +0 -1
  609. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  610. package/dist/extension.js +0 -31293
  611. package/dist/src/lib/FilePicker.svelte +0 -360
  612. package/dist/src/lib/Icon.svelte +0 -41
  613. package/dist/src/lib/MillerIndexInput.svelte +0 -66
  614. package/dist/src/lib/api/mp.ts +0 -26
  615. package/dist/src/lib/api/optimade.ts +0 -204
  616. package/dist/src/lib/app.css +0 -247
  617. package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
  618. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
  619. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
  620. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  621. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
  622. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
  623. package/dist/src/lib/brillouin/compute.ts +0 -529
  624. package/dist/src/lib/brillouin/index.ts +0 -8
  625. package/dist/src/lib/brillouin/types.ts +0 -51
  626. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
  627. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
  628. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
  629. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
  630. package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
  631. package/dist/src/lib/chempot-diagram/color.ts +0 -42
  632. package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
  633. package/dist/src/lib/chempot-diagram/index.ts +0 -6
  634. package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
  635. package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
  636. package/dist/src/lib/chempot-diagram/types.ts +0 -130
  637. package/dist/src/lib/colors/index.ts +0 -249
  638. package/dist/src/lib/composition/BarChart.svelte +0 -297
  639. package/dist/src/lib/composition/BubbleChart.svelte +0 -218
  640. package/dist/src/lib/composition/Composition.svelte +0 -165
  641. package/dist/src/lib/composition/Formula.svelte +0 -268
  642. package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
  643. package/dist/src/lib/composition/PieChart.svelte +0 -323
  644. package/dist/src/lib/composition/format.ts +0 -155
  645. package/dist/src/lib/composition/index.ts +0 -37
  646. package/dist/src/lib/composition/parse.ts +0 -605
  647. package/dist/src/lib/constants.ts +0 -134
  648. package/dist/src/lib/controls.ts +0 -42
  649. package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
  650. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
  651. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
  652. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
  653. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
  654. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
  655. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
  656. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
  657. package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
  658. package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
  659. package/dist/src/lib/convex-hull/TemperatureSlider.svelte +0 -140
  660. package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
  661. package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
  662. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
  663. package/dist/src/lib/convex-hull/helpers.ts +0 -932
  664. package/dist/src/lib/convex-hull/index.ts +0 -202
  665. package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
  666. package/dist/src/lib/convex-hull/types.ts +0 -267
  667. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
  668. package/dist/src/lib/coordination/calc-coordination.ts +0 -93
  669. package/dist/src/lib/coordination/index.ts +0 -9
  670. package/dist/src/lib/effects.svelte.ts +0 -48
  671. package/dist/src/lib/element/ElementHeading.svelte +0 -26
  672. package/dist/src/lib/element/ElementPhoto.svelte +0 -57
  673. package/dist/src/lib/element/ElementStats.svelte +0 -80
  674. package/dist/src/lib/element/ElementTile.svelte +0 -484
  675. package/dist/src/lib/element/data.ts +0 -14
  676. package/dist/src/lib/element/index.ts +0 -8
  677. package/dist/src/lib/element/types.ts +0 -62
  678. package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
  679. package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
  680. package/dist/src/lib/feedback/index.ts +0 -4
  681. package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
  682. package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
  683. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
  684. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
  685. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  686. package/dist/src/lib/fermi-surface/compute.ts +0 -728
  687. package/dist/src/lib/fermi-surface/constants.ts +0 -32
  688. package/dist/src/lib/fermi-surface/export.ts +0 -64
  689. package/dist/src/lib/fermi-surface/index.ts +0 -14
  690. package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
  691. package/dist/src/lib/fermi-surface/parse.ts +0 -574
  692. package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
  693. package/dist/src/lib/fermi-surface/types.ts +0 -159
  694. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
  695. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  696. package/dist/src/lib/heatmap-matrix/index.ts +0 -167
  697. package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
  698. package/dist/src/lib/icons.ts +0 -650
  699. package/dist/src/lib/index.ts +0 -61
  700. package/dist/src/lib/io/decompress.ts +0 -92
  701. package/dist/src/lib/io/export.ts +0 -385
  702. package/dist/src/lib/io/fetch.ts +0 -46
  703. package/dist/src/lib/io/file-drop.ts +0 -51
  704. package/dist/src/lib/io/index.ts +0 -7
  705. package/dist/src/lib/io/is-binary.ts +0 -24
  706. package/dist/src/lib/io/types.ts +0 -8
  707. package/dist/src/lib/io/url-drop.ts +0 -141
  708. package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
  709. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
  710. package/dist/src/lib/isosurface/index.ts +0 -7
  711. package/dist/src/lib/isosurface/parse.ts +0 -656
  712. package/dist/src/lib/isosurface/slice.ts +0 -175
  713. package/dist/src/lib/isosurface/types.ts +0 -309
  714. package/dist/src/lib/labels.ts +0 -320
  715. package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
  716. package/dist/src/lib/layout/InfoCard.svelte +0 -120
  717. package/dist/src/lib/layout/InfoTag.svelte +0 -185
  718. package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
  719. package/dist/src/lib/layout/SettingsSection.svelte +0 -148
  720. package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
  721. package/dist/src/lib/layout/fullscreen.ts +0 -65
  722. package/dist/src/lib/layout/index.ts +0 -11
  723. package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
  724. package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
  725. package/dist/src/lib/layout/json-tree/index.ts +0 -3
  726. package/dist/src/lib/layout/json-tree/types.ts +0 -126
  727. package/dist/src/lib/layout/json-tree/utils.ts +0 -682
  728. package/dist/src/lib/marching-cubes.ts +0 -614
  729. package/dist/src/lib/math.ts +0 -1081
  730. package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
  731. package/dist/src/lib/overlays/CopyButton.svelte +0 -45
  732. package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
  733. package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
  734. package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
  735. package/dist/src/lib/overlays/index.ts +0 -3
  736. package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
  737. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
  738. package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
  739. package/dist/src/lib/periodic-table/index.ts +0 -12
  740. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  741. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
  742. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  743. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
  744. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
  745. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
  746. package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
  747. package/dist/src/lib/phase-diagram/colors.ts +0 -58
  748. package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
  749. package/dist/src/lib/phase-diagram/index.ts +0 -13
  750. package/dist/src/lib/phase-diagram/parse.ts +0 -348
  751. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
  752. package/dist/src/lib/phase-diagram/types.ts +0 -144
  753. package/dist/src/lib/phase-diagram/utils.ts +0 -775
  754. package/dist/src/lib/plot/AxisLabel.svelte +0 -51
  755. package/dist/src/lib/plot/BarPlot.svelte +0 -2113
  756. package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
  757. package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
  758. package/dist/src/lib/plot/ColorBar.svelte +0 -721
  759. package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
  760. package/dist/src/lib/plot/ElementScatter.svelte +0 -63
  761. package/dist/src/lib/plot/FillArea.svelte +0 -223
  762. package/dist/src/lib/plot/Histogram.svelte +0 -1558
  763. package/dist/src/lib/plot/HistogramControls.svelte +0 -212
  764. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
  765. package/dist/src/lib/plot/Line.svelte +0 -84
  766. package/dist/src/lib/plot/PlotAxis.svelte +0 -169
  767. package/dist/src/lib/plot/PlotControls.svelte +0 -537
  768. package/dist/src/lib/plot/PlotLegend.svelte +0 -569
  769. package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
  770. package/dist/src/lib/plot/PortalSelect.svelte +0 -253
  771. package/dist/src/lib/plot/ReferenceLine.svelte +0 -204
  772. package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
  773. package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
  774. package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
  775. package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
  776. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
  777. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
  778. package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
  779. package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
  780. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
  781. package/dist/src/lib/plot/Surface3D.svelte +0 -197
  782. package/dist/src/lib/plot/ZeroLines.svelte +0 -97
  783. package/dist/src/lib/plot/ZoomRect.svelte +0 -23
  784. package/dist/src/lib/plot/adaptive-density.ts +0 -316
  785. package/dist/src/lib/plot/auto-place.ts +0 -184
  786. package/dist/src/lib/plot/axis-utils.ts +0 -122
  787. package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
  788. package/dist/src/lib/plot/data-cleaning.ts +0 -1069
  789. package/dist/src/lib/plot/data-transform.ts +0 -69
  790. package/dist/src/lib/plot/defaults.ts +0 -9
  791. package/dist/src/lib/plot/fill-utils.ts +0 -494
  792. package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
  793. package/dist/src/lib/plot/index.ts +0 -53
  794. package/dist/src/lib/plot/interactions.ts +0 -119
  795. package/dist/src/lib/plot/layout.ts +0 -425
  796. package/dist/src/lib/plot/reference-line.ts +0 -426
  797. package/dist/src/lib/plot/scales.ts +0 -654
  798. package/dist/src/lib/plot/svg.ts +0 -23
  799. package/dist/src/lib/plot/types.ts +0 -1144
  800. package/dist/src/lib/plot/utils/label-placement.ts +0 -541
  801. package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
  802. package/dist/src/lib/plot/utils.ts +0 -11
  803. package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
  804. package/dist/src/lib/rdf/calc-rdf.ts +0 -167
  805. package/dist/src/lib/rdf/index.ts +0 -27
  806. package/dist/src/lib/sanitize.ts +0 -126
  807. package/dist/src/lib/settings.ts +0 -1479
  808. package/dist/src/lib/spectral/Bands.svelte +0 -1040
  809. package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
  810. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
  811. package/dist/src/lib/spectral/Dos.svelte +0 -697
  812. package/dist/src/lib/spectral/helpers.ts +0 -1381
  813. package/dist/src/lib/spectral/index.ts +0 -8
  814. package/dist/src/lib/spectral/types.ts +0 -112
  815. package/dist/src/lib/state.svelte.ts +0 -64
  816. package/dist/src/lib/structure/Arrow.svelte +0 -72
  817. package/dist/src/lib/structure/AtomLegend.svelte +0 -815
  818. package/dist/src/lib/structure/Bond.svelte +0 -140
  819. package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
  820. package/dist/src/lib/structure/CellSelect.svelte +0 -349
  821. package/dist/src/lib/structure/Cylinder.svelte +0 -45
  822. package/dist/src/lib/structure/Lattice.svelte +0 -196
  823. package/dist/src/lib/structure/Structure.svelte +0 -2248
  824. package/dist/src/lib/structure/StructureControls.svelte +0 -1273
  825. package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
  826. package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
  827. package/dist/src/lib/structure/StructureScene.svelte +0 -2255
  828. package/dist/src/lib/structure/atom-properties.ts +0 -316
  829. package/dist/src/lib/structure/bond-order-perception.ts +0 -447
  830. package/dist/src/lib/structure/bonding.ts +0 -944
  831. package/dist/src/lib/structure/export.ts +0 -861
  832. package/dist/src/lib/structure/index.ts +0 -291
  833. package/dist/src/lib/structure/label-placement.ts +0 -130
  834. package/dist/src/lib/structure/measure.ts +0 -45
  835. package/dist/src/lib/structure/parse.ts +0 -1705
  836. package/dist/src/lib/structure/partial-occupancy.ts +0 -183
  837. package/dist/src/lib/structure/pbc.ts +0 -164
  838. package/dist/src/lib/structure/supercell.ts +0 -226
  839. package/dist/src/lib/structure/validation.ts +0 -11
  840. package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
  841. package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
  842. package/dist/src/lib/symmetry/cell-transform.ts +0 -118
  843. package/dist/src/lib/symmetry/index.ts +0 -348
  844. package/dist/src/lib/symmetry/spacegroups.ts +0 -404
  845. package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
  846. package/dist/src/lib/table/ToggleMenu.svelte +0 -385
  847. package/dist/src/lib/table/index.ts +0 -139
  848. package/dist/src/lib/theme/ThemeControl.svelte +0 -53
  849. package/dist/src/lib/theme/index.ts +0 -107
  850. package/dist/src/lib/time.ts +0 -71
  851. package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
  852. package/dist/src/lib/tooltip/index.ts +0 -2
  853. package/dist/src/lib/tooltip/types.ts +0 -13
  854. package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
  855. package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
  856. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
  857. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
  858. package/dist/src/lib/trajectory/constants.ts +0 -7
  859. package/dist/src/lib/trajectory/extract.ts +0 -196
  860. package/dist/src/lib/trajectory/format-detect.ts +0 -96
  861. package/dist/src/lib/trajectory/frame-reader.ts +0 -456
  862. package/dist/src/lib/trajectory/helpers.ts +0 -217
  863. package/dist/src/lib/trajectory/index.ts +0 -218
  864. package/dist/src/lib/trajectory/parse/ase.ts +0 -109
  865. package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
  866. package/dist/src/lib/trajectory/parse/index.ts +0 -411
  867. package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
  868. package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
  869. package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
  870. package/dist/src/lib/trajectory/plotting.ts +0 -599
  871. package/dist/src/lib/trajectory/types.ts +0 -13
  872. package/dist/src/lib/utils.ts +0 -56
  873. package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
  874. package/dist/src/lib/xrd/broadening.ts +0 -130
  875. package/dist/src/lib/xrd/calc-xrd.ts +0 -397
  876. package/dist/src/lib/xrd/index.ts +0 -38
  877. package/dist/src/lib/xrd/parse.ts +0 -858
  878. package/dist/webview.js +0 -29421
  879. package/icon.png +0 -0
  880. package/matterviz-0.3.2.vsix +0 -0
  881. package/matterviz-0.3.4.vsix +0 -0
  882. package/matterviz-0.3.5.vsix +0 -0
  883. package/scripts/sync-config.ts +0 -101
  884. package/src/declarations.d.ts +0 -2
  885. package/src/extension.ts +0 -972
  886. package/src/node-io.ts +0 -65
  887. package/src/types.ts +0 -17
  888. package/src/webview/JsonBrowser.svelte +0 -1079
  889. package/src/webview/PlotPanel.svelte +0 -346
  890. package/src/webview/detect.ts +0 -444
  891. package/src/webview/main.ts +0 -764
  892. package/src/webview/plot-utils.ts +0 -250
  893. package/test-fixtures/all-viz-types.json.gz +0 -0
  894. package/test-fixtures/plot-demo-data.json.gz +0 -0
  895. package/tests/detect.test.ts +0 -604
  896. package/tests/extension.test.ts +0 -2041
  897. package/tests/node-io.test.ts +0 -39
  898. package/tests/plot-utils.test.ts +0 -302
  899. package/tests/vite-plugin-json-gz.test.ts +0 -114
  900. package/tests/vscode-mock.ts +0 -18
  901. package/tests/webview.test.ts +0 -231
  902. package/tsconfig.json +0 -20
  903. package/vite-plugin-json-gz.ts +0 -29
  904. package/vite.config.ts +0 -34
  905. package/vite.extension.config.ts +0 -34
  906. /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
  907. /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
  908. /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
  909. /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
  910. /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
  911. /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
  912. /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
  913. /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
  914. /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
  915. /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
  916. /package/dist/{src/lib/element → element}/data.json +0 -0
  917. /package/dist/{src/lib/element → element}/data.json.gz +0 -0
  918. /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
  919. /package/dist/{src/lib/element → element}/data.schema.json +0 -0
  920. /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
  921. /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
  922. /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
  923. /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
  924. /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
  925. /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
  926. /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
@@ -1,912 +0,0 @@
1
- <script
2
- lang="ts"
3
- generics="Metadata extends Record<string, unknown> = Record<string, unknown>"
4
- >
5
- import type { D3ColorSchemeName, D3InterpolateName } from '$lib/colors'
6
- import { format_num } from '$lib/labels'
7
- import type { Vec2, Vec3 } from '$lib/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 '$lib/plot/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>