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,794 @@
1
+ <script lang="ts">
2
+ import type { BrillouinZoneData } from '../brillouin'
3
+ import { AXIS_COLORS, NEG_AXIS_COLORS } from '../colors'
4
+ import type { Matrix4Tuple, Vec3 } from '../math'
5
+ import * as math from '../math'
6
+ import type { CameraProjection } from '../settings'
7
+ import { DEFAULTS } from '../settings'
8
+ import { Arrow, Cylinder } from '../structure'
9
+ import { T, useThrelte } from '@threlte/core'
10
+ import * as extras from '@threlte/extras'
11
+ import * as d3_sc from 'd3-scale-chromatic'
12
+ import type { ComponentProps } from 'svelte'
13
+ import { SvelteMap } from 'svelte/reactivity'
14
+ import type { Camera, Scene } from 'three'
15
+ import {
16
+ BackSide,
17
+ BufferAttribute,
18
+ BufferGeometry,
19
+ Color,
20
+ DoubleSide,
21
+ FrontSide,
22
+ Matrix4,
23
+ Plane,
24
+ Vector3,
25
+ } from 'three'
26
+ import * as constants from './constants'
27
+ import { IDENTITY_4x4, OH_SYMMETRY_MATRICES } from './symmetry'
28
+ import type {
29
+ ColorProperty,
30
+ FermiHoverData,
31
+ FermiSurfaceData,
32
+ Isosurface,
33
+ RepresentationMode,
34
+ } from './types'
35
+
36
+ // Threlte pointer event type for mesh interactions
37
+ type ThreltePointerEvent = { point: Vector3; nativeEvent: PointerEvent }
38
+
39
+ let {
40
+ fermi_data = $bindable(),
41
+ bz_data = $bindable(),
42
+ camera_position = $bindable(),
43
+ camera_projection = $bindable(`perspective`),
44
+ // Fermi surface styling
45
+ color_property = `band`,
46
+ color_scale = `interpolateViridis`,
47
+ representation = `solid`,
48
+ surface_opacity = $bindable(0.8),
49
+ selected_bands,
50
+ // BZ styling
51
+ show_bz = true,
52
+ bz_color = `#888888`,
53
+ bz_opacity = 0.1,
54
+ bz_edge_color = `#333333`,
55
+ bz_edge_width = 0.02,
56
+ show_vectors = true,
57
+ tile_bz = false,
58
+ // Clipping plane
59
+ clip_enabled = false,
60
+ clip_axis = `z`,
61
+ clip_position = 0,
62
+ clip_flip = false,
63
+ vector_scale = 1.0,
64
+ // Camera controls
65
+ rotation_damping = DEFAULTS.structure.rotation_damping,
66
+ max_zoom = DEFAULTS.structure.max_zoom,
67
+ min_zoom = DEFAULTS.structure.min_zoom,
68
+ rotate_speed = DEFAULTS.structure.rotate_speed,
69
+ zoom_speed = DEFAULTS.structure.zoom_speed,
70
+ pan_speed = DEFAULTS.structure.pan_speed,
71
+ zoom_to_cursor = DEFAULTS.structure.zoom_to_cursor,
72
+ fov = DEFAULTS.structure.fov,
73
+ initial_zoom = DEFAULTS.structure.initial_zoom,
74
+ ambient_light = DEFAULTS.structure.ambient_light,
75
+ directional_light = DEFAULTS.structure.directional_light,
76
+ gizmo = DEFAULTS.structure.show_gizmo,
77
+ auto_rotate = DEFAULTS.structure.auto_rotate,
78
+ camera_is_moving = $bindable(false),
79
+ scene = $bindable(),
80
+ camera = $bindable(),
81
+ hover_data = $bindable<FermiHoverData | null>(null),
82
+ }: {
83
+ fermi_data?: FermiSurfaceData
84
+ bz_data?: BrillouinZoneData
85
+ camera_position?: Vec3 | undefined
86
+ camera_projection?: CameraProjection
87
+ color_property?: ColorProperty
88
+ color_scale?: string
89
+ representation?: RepresentationMode
90
+ surface_opacity?: number
91
+ selected_bands?: number[]
92
+ show_bz?: boolean
93
+ bz_color?: string
94
+ bz_opacity?: number
95
+ bz_edge_color?: string
96
+ bz_edge_width?: number
97
+ show_vectors?: boolean
98
+ tile_bz?: boolean
99
+ clip_enabled?: boolean
100
+ clip_axis?: `x` | `y` | `z`
101
+ clip_position?: number
102
+ clip_flip?: boolean
103
+ vector_scale?: number
104
+ rotation_damping?: number
105
+ max_zoom?: number
106
+ min_zoom?: number
107
+ rotate_speed?: number
108
+ zoom_speed?: number
109
+ pan_speed?: number
110
+ zoom_to_cursor?: boolean
111
+ fov?: number
112
+ initial_zoom?: number
113
+ ambient_light?: number
114
+ directional_light?: number
115
+ gizmo?: boolean | ComponentProps<typeof extras.Gizmo>
116
+ auto_rotate?: number
117
+ camera_is_moving?: boolean
118
+ scene?: Scene
119
+ camera?: Camera
120
+ hover_data?: FermiHoverData | null
121
+ } = $props()
122
+
123
+ const threlte = useThrelte()
124
+
125
+ // Compute scene size for clipping (also used for camera positioning later)
126
+ function get_scene_size(): number {
127
+ if (!fermi_data?.k_lattice) return 10
128
+ const mags = fermi_data.k_lattice.map((vec) => Math.hypot(...vec))
129
+ return mags.reduce((sum, mag) => sum + mag, 0) / 3
130
+ }
131
+
132
+ // Compute clipping plane based on axis and position
133
+ // Plane equation: dot(normal, point) + constant >= 0 means point is visible
134
+ const clip_plane = $derived.by(() => {
135
+ if (!clip_enabled) return null
136
+
137
+ const axis_idx = { x: 0, y: 1, z: 2 }[clip_axis]
138
+ const normal_arr: Vec3 = [0, 0, 0]
139
+ normal_arr[axis_idx] = clip_flip ? -1 : 1
140
+
141
+ const scaled_position = clip_position * get_scene_size()
142
+ // constant = -position for normal case (keep points >= position)
143
+ // constant = +position for flipped case (keep points <= position)
144
+ const constant = clip_flip ? scaled_position : -scaled_position
145
+
146
+ return new Plane(new Vector3(...normal_arr), constant)
147
+ })
148
+
149
+ // Apply clipping plane to renderer
150
+ $effect(() => {
151
+ if (!threlte.renderer) return
152
+
153
+ if (clip_plane) {
154
+ threlte.renderer.clippingPlanes = [clip_plane]
155
+ threlte.renderer.localClippingEnabled = true
156
+ } else {
157
+ threlte.renderer.clippingPlanes = []
158
+ threlte.renderer.localClippingEnabled = false
159
+ }
160
+ })
161
+
162
+ $effect(() => {
163
+ scene = threlte.scene
164
+ camera = threlte.camera.current
165
+ if (threlte.renderer) {
166
+ // Enable object sorting for proper depth ordering of transparent surfaces
167
+ threlte.renderer.sortObjects = true
168
+ Object.assign(threlte.renderer.domElement, { __renderer: threlte.renderer })
169
+ }
170
+ })
171
+
172
+ extras.interactivity()
173
+
174
+ // Get color interpolator from d3
175
+ const get_interpolator = (name: string): (t: number) => string => {
176
+ const fn = d3_sc[name as keyof typeof d3_sc]
177
+ return typeof fn === `function` ? fn : d3_sc.interpolateViridis
178
+ }
179
+
180
+ // Filter surfaces based on selected bands
181
+ let visible_surfaces = $derived(
182
+ fermi_data?.isosurfaces.filter((surface) =>
183
+ selected_bands === undefined || selected_bands.includes(surface.band_index)
184
+ ) ?? [],
185
+ )
186
+
187
+ // Compute average vertex distance from origin for each surface (used for render ordering)
188
+ // Smaller distance = inner surface = render first (lower renderOrder)
189
+ // Larger distance = outer surface = render last (higher renderOrder)
190
+ function compute_surface_radius(surface: Isosurface): number {
191
+ if (surface.vertices.length === 0) return 0
192
+ let sum = 0
193
+ for (const vertex of surface.vertices) {
194
+ sum += Math.hypot(vertex[0], vertex[1], vertex[2])
195
+ }
196
+ return sum / surface.vertices.length
197
+ }
198
+
199
+ // Map from surface to its render order based on size (inner surfaces first)
200
+ let surface_render_orders = $derived.by((): Map<Isosurface, number> => {
201
+ const order_map = new SvelteMap<Isosurface, number>()
202
+ if (visible_surfaces.length === 0) return order_map
203
+
204
+ // Compute radius for each surface and sort by it
205
+ const surfaces_with_radius = visible_surfaces.map((surface) => ({
206
+ surface,
207
+ radius: compute_surface_radius(surface),
208
+ }))
209
+ surfaces_with_radius.sort((a, b) => a.radius - b.radius)
210
+
211
+ // Assign render order: smaller radius (inner) = lower order = rendered first
212
+ for (let idx = 0; idx < surfaces_with_radius.length; idx++) {
213
+ order_map.set(surfaces_with_radius[idx].surface, idx)
214
+ }
215
+ return order_map
216
+ })
217
+
218
+ // Compute property range for color scaling
219
+ let property_range = $derived.by((): [number, number] => {
220
+ if (color_property !== `velocity` && color_property !== `custom`) {
221
+ return [0, 1]
222
+ }
223
+ let [min_val, max_val] = [Infinity, -Infinity]
224
+ for (const surface of visible_surfaces) {
225
+ if (!surface.properties) continue
226
+ for (const prop of surface.properties) {
227
+ if (prop < min_val) min_val = prop
228
+ if (prop > max_val) max_val = prop
229
+ }
230
+ }
231
+ if (min_val === Infinity) return [0, 1]
232
+ return [min_val, max_val]
233
+ })
234
+
235
+ // Get color for a surface/vertex
236
+ function get_surface_color(surface: Isosurface, vertex_idx?: number): string {
237
+ if (color_property === `band`) {
238
+ return constants.BAND_COLORS[surface.band_index % constants.BAND_COLORS.length]
239
+ }
240
+ if (
241
+ (color_property === `velocity` || color_property === `custom`) &&
242
+ surface.properties &&
243
+ vertex_idx !== undefined
244
+ ) {
245
+ const prop = surface.properties[vertex_idx]
246
+ const [min_val, max_val] = property_range
247
+ const normalized = max_val > min_val
248
+ ? (prop - min_val) / (max_val - min_val)
249
+ : 0.5
250
+ return get_interpolator(color_scale)(normalized)
251
+ }
252
+ // Spin coloring
253
+ if (color_property === `spin` && surface.spin) {
254
+ return surface.spin === `up` ? `#e41a1c` : `#377eb8`
255
+ }
256
+ return constants.BAND_COLORS[surface.band_index % constants.BAND_COLORS.length]
257
+ }
258
+
259
+ // Create geometry for an isosurface
260
+ function create_isosurface_geometry(
261
+ surface: Isosurface,
262
+ ): { geometry: BufferGeometry; dispose: () => void } | null {
263
+ if (surface.vertices.length === 0 || surface.faces.length === 0) return null
264
+
265
+ const positions: number[] = []
266
+ const normals: number[] = []
267
+ const colors: number[] = []
268
+
269
+ const use_vertex_colors = color_property === `velocity` ||
270
+ color_property === `custom`
271
+
272
+ const n_vertices = surface.vertices.length
273
+
274
+ for (const face of surface.faces) {
275
+ if (face.length < 3) continue
276
+
277
+ // Fan triangulation: for polygon with N vertices, create N-2 triangles
278
+ // e.g. quad [0,1,2,3] becomes triangles [0,1,2] and [0,2,3]
279
+ for (let fan_idx = 1; fan_idx < face.length - 1; fan_idx++) {
280
+ const idx0 = face[0]
281
+ const idx1 = face[fan_idx]
282
+ const idx2 = face[fan_idx + 1]
283
+
284
+ // Validate face indices are within bounds (protects against malformed JSON files)
285
+ if (
286
+ idx0 < 0 || idx0 >= n_vertices ||
287
+ idx1 < 0 || idx1 >= n_vertices ||
288
+ idx2 < 0 || idx2 >= n_vertices
289
+ ) {
290
+ continue
291
+ }
292
+
293
+ const v0 = surface.vertices[idx0]
294
+ const v1 = surface.vertices[idx1]
295
+ const v2 = surface.vertices[idx2]
296
+
297
+ positions.push(...v0, ...v1, ...v2)
298
+
299
+ // Use per-vertex normals if available, otherwise compute face normal
300
+ if (surface.normals && surface.normals.length > 0) {
301
+ const n0 = surface.normals[idx0] ?? [0, 0, 1]
302
+ const n1 = surface.normals[idx1] ?? [0, 0, 1]
303
+ const n2 = surface.normals[idx2] ?? [0, 0, 1]
304
+ normals.push(...n0, ...n1, ...n2)
305
+ } else {
306
+ const e1: Vec3 = math.subtract(v1, v0)
307
+ const e2: Vec3 = math.subtract(v2, v0)
308
+ const normal = math.cross_3d(e1, e2)
309
+ const len = Math.hypot(...normal)
310
+ const unit_normal = len > 1e-10 ? normal.map((coord) => coord / len) : [0, 0, 1]
311
+ normals.push(...unit_normal, ...unit_normal, ...unit_normal)
312
+ }
313
+
314
+ // Per-vertex colors for this triangle
315
+ if (use_vertex_colors) {
316
+ for (const vert_idx of [idx0, idx1, idx2]) {
317
+ const color_str = get_surface_color(surface, vert_idx)
318
+ const color = new Color(color_str)
319
+ colors.push(color.r, color.g, color.b)
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ const geometry = new BufferGeometry()
326
+ geometry.setAttribute(
327
+ `position`,
328
+ new BufferAttribute(new Float32Array(positions), 3),
329
+ )
330
+ geometry.setAttribute(`normal`, new BufferAttribute(new Float32Array(normals), 3))
331
+
332
+ if (use_vertex_colors) {
333
+ geometry.setAttribute(`color`, new BufferAttribute(new Float32Array(colors), 3))
334
+ }
335
+
336
+ geometry.computeBoundingSphere()
337
+
338
+ return { geometry, dispose: () => geometry.dispose() }
339
+ }
340
+
341
+ // Memoized geometry cache - pre-compute geometries to avoid recomputation on every render
342
+ type GeometryData = { geometry: BufferGeometry; dispose: () => void }
343
+ let geometry_cache = $derived.by((): Map<string, GeometryData | null> => {
344
+ const cache = new SvelteMap<string, GeometryData | null>()
345
+ for (let idx = 0; idx < visible_surfaces.length; idx++) {
346
+ const surface = visible_surfaces[idx]
347
+ const key = `${surface.band_index}-${surface.spin}-${idx}`
348
+ cache.set(key, create_isosurface_geometry(surface))
349
+ }
350
+ return cache
351
+ })
352
+
353
+ // Cleanup geometries when cache changes
354
+ $effect(() => {
355
+ const current_cache = geometry_cache
356
+ return () => {
357
+ for (const geo_data of current_cache.values()) {
358
+ geo_data?.dispose()
359
+ }
360
+ }
361
+ })
362
+
363
+ // Count total triangles and auto-disable tiling for very large surfaces
364
+ let total_triangles = $derived(
365
+ visible_surfaces.reduce((sum, surface) => sum + surface.faces.length, 0),
366
+ )
367
+ let effective_tile_bz = $derived(
368
+ tile_bz && total_triangles < constants.MAX_TRIANGLES_FOR_TILING,
369
+ )
370
+
371
+ // Warn user when tiling is auto-disabled
372
+ $effect(() => {
373
+ if (tile_bz && !effective_tile_bz && total_triangles > 0) {
374
+ console.warn(
375
+ `Fermi surface has ${total_triangles} triangles, auto-disabled BZ tiling for performance`,
376
+ )
377
+ }
378
+ })
379
+
380
+ // Compute rotation target from surfaces or BZ
381
+ const rotation_target = $derived.by((): Vec3 => {
382
+ if (bz_data?.vertices && bz_data.vertices.length > 0) {
383
+ const sum = bz_data.vertices.reduce(
384
+ (acc, vert) => math.add(acc, vert),
385
+ [0, 0, 0] as Vec3,
386
+ )
387
+ return math.scale(sum, 1 / bz_data.vertices.length)
388
+ }
389
+ return [0, 0, 0]
390
+ })
391
+
392
+ // Scene size for camera positioning (uses helper function defined earlier)
393
+ const scene_size = $derived(get_scene_size())
394
+
395
+ const computed_camera_position = $derived.by(
396
+ () =>
397
+ camera_position || ([10, 3, 8].map((coord) =>
398
+ coord * Math.max(1, scene_size)
399
+ ) as Vec3),
400
+ )
401
+
402
+ const gizmo_props = $derived({
403
+ background: { enabled: false },
404
+ className: `responsive-gizmo`,
405
+ ...Object.fromEntries(
406
+ [...AXIS_COLORS, ...NEG_AXIS_COLORS].map(([axis, color, hover]) => [
407
+ axis,
408
+ {
409
+ color,
410
+ labelColor: `#111`,
411
+ opacity: axis.startsWith(`n`) ? 0.9 : 0.8,
412
+ hover: {
413
+ color: hover,
414
+ labelColor: `#222`,
415
+ opacity: axis.startsWith(`n`) ? 1 : 0.9,
416
+ },
417
+ },
418
+ ]),
419
+ ),
420
+ ...(typeof gizmo === `object` ? gizmo : {}),
421
+ offset: { left: 5, bottom: 5 },
422
+ })
423
+
424
+ const is_ortho = $derived(camera_projection === `orthographic`)
425
+ const orbit_controls_props = $derived({
426
+ position: [0, 0, 0],
427
+ target: rotation_target,
428
+ enableRotate: rotate_speed > 0,
429
+ rotateSpeed: rotate_speed,
430
+ enableZoom: zoom_speed > 0,
431
+ zoomSpeed: is_ortho ? zoom_speed * 2 : zoom_speed,
432
+ zoomToCursor: zoom_to_cursor,
433
+ enablePan: pan_speed > 0,
434
+ panSpeed: pan_speed,
435
+ maxZoom: max_zoom,
436
+ minZoom: min_zoom,
437
+ autoRotate: Boolean(auto_rotate),
438
+ autoRotateSpeed: auto_rotate,
439
+ enableDamping: Boolean(rotation_damping),
440
+ dampingFactor: rotation_damping,
441
+ onstart: () => (camera_is_moving = true),
442
+ onend: () => (camera_is_moving = false),
443
+ })
444
+
445
+ const vector_colors = [`red`, `green`, `blue`]
446
+ const vector_labels = [`b₁`, `b₂`, `b₃`]
447
+
448
+ // Create BZ geometry
449
+ const bz_geometry = $derived.by(() => {
450
+ if (!bz_data || bz_data.faces.length === 0) return null
451
+
452
+ const positions: number[] = []
453
+ const normals: number[] = []
454
+
455
+ for (const face of bz_data.faces) {
456
+ if (face.length < 3) continue
457
+
458
+ for (let face_idx = 1; face_idx < face.length - 1; face_idx++) {
459
+ const indices = [face[0], face[face_idx], face[face_idx + 1]]
460
+ if (indices.some((idx) => idx < 0 || idx >= bz_data.vertices.length)) continue
461
+ const [v0, v1, v2] = indices.map((idx) => bz_data.vertices[idx])
462
+ positions.push(...v0, ...v1, ...v2)
463
+
464
+ const e1: Vec3 = math.subtract(v1, v0)
465
+ const e2: Vec3 = math.subtract(v2, v0)
466
+ const normal_vec = math.cross_3d(e1, e2)
467
+ const len = Math.hypot(...normal_vec)
468
+ const norm = len > 1e-10 ? normal_vec.map((coord) => coord / len) : [0, 0, 0]
469
+ normals.push(...norm, ...norm, ...norm)
470
+ }
471
+ }
472
+
473
+ const geometry = new BufferGeometry()
474
+ geometry.setAttribute(
475
+ `position`,
476
+ new BufferAttribute(new Float32Array(positions), 3),
477
+ )
478
+ geometry.setAttribute(`normal`, new BufferAttribute(new Float32Array(normals), 3))
479
+ geometry.computeBoundingSphere()
480
+ return geometry
481
+ })
482
+
483
+ $effect(() => {
484
+ const prev_geometry = bz_geometry
485
+ return () => prev_geometry?.dispose()
486
+ })
487
+
488
+ // Get material props for two-pass transparent rendering
489
+ // Pass 1 (back faces): renders interior/back of surfaces first
490
+ // Pass 2 (front faces): renders exterior/front of surfaces on top
491
+ // This avoids z-fighting while showing both sides correctly
492
+ const get_material_props = (
493
+ surface_color: string,
494
+ use_vertex_colors: boolean,
495
+ surface_idx: number,
496
+ pass: `front` | `back`,
497
+ ) => {
498
+ const is_transparent = surface_opacity < 1
499
+ const base = {
500
+ transparent: is_transparent,
501
+ opacity: surface_opacity,
502
+ // Two-pass: back faces first (pass=back), front faces second (pass=front)
503
+ // For opaque: just use DoubleSide
504
+ side: is_transparent ? (pass === `back` ? BackSide : FrontSide) : DoubleSide,
505
+ depthWrite: true,
506
+ depthTest: true,
507
+ // Polygon offset helps separate overlapping geometry
508
+ polygonOffset: true,
509
+ polygonOffsetFactor: 1 + surface_idx * 0.5,
510
+ polygonOffsetUnits: 1 + surface_idx * 0.5,
511
+ }
512
+
513
+ if (use_vertex_colors) {
514
+ return { ...base, vertexColors: true }
515
+ }
516
+ return { ...base, color: surface_color }
517
+ }
518
+
519
+ // Compute inverse of k_lattice for Cartesian->fractional conversion (cached)
520
+ const k_lattice_inv = $derived.by(() => {
521
+ if (!fermi_data?.k_lattice) return null
522
+ try {
523
+ return math.matrix_inverse_3x3(fermi_data.k_lattice)
524
+ } catch {
525
+ return null
526
+ }
527
+ })
528
+
529
+ // Throttle state for pointer move events to avoid O(n) vertex lookups causing jank
530
+ let last_hover_time = 0
531
+
532
+ // Convert Cartesian k-coordinates to fractional (reciprocal lattice units)
533
+ // Returns null if k_lattice is unavailable or inversion failed
534
+ function cartesian_to_fractional(cart: Vec3): Vec3 | null {
535
+ if (!k_lattice_inv) return null
536
+ return math.mat3x3_vec3_multiply(k_lattice_inv, cart)
537
+ }
538
+
539
+ // Find index of nearest vertex to a point in a surface
540
+ function find_nearest_vertex(surface: Isosurface, point: Vec3): number {
541
+ let [min_dist, nearest_idx] = [Infinity, 0]
542
+ for (let idx = 0; idx < surface.vertices.length; idx++) {
543
+ const vertex = surface.vertices[idx]
544
+ const dist = Math.hypot(
545
+ point[0] - vertex[0],
546
+ point[1] - vertex[1],
547
+ point[2] - vertex[2],
548
+ )
549
+ if (dist < min_dist) {
550
+ min_dist = dist
551
+ nearest_idx = idx
552
+ }
553
+ }
554
+ return nearest_idx
555
+ }
556
+
557
+ // Create hover data from pointer event on a surface
558
+ function create_hover_data(
559
+ event: ThreltePointerEvent,
560
+ surface: Isosurface,
561
+ surface_color: string,
562
+ sym_idx: number,
563
+ sym_matrix: Matrix4Tuple,
564
+ ): FermiHoverData {
565
+ // event.point is in world space (after sym_matrix transformation)
566
+ const position_cartesian: Vec3 = [event.point.x, event.point.y, event.point.z]
567
+ const position_fractional = cartesian_to_fractional(position_cartesian)
568
+
569
+ // Transform world-space point to local space for nearest-vertex lookup
570
+ // surface.vertices are in local space (raw geometry before sym_matrix)
571
+ const local_point = event.point.clone()
572
+ const inv_matrix = new Matrix4().fromArray(sym_matrix).invert()
573
+ local_point.applyMatrix4(inv_matrix)
574
+ const local_position: Vec3 = [local_point.x, local_point.y, local_point.z]
575
+
576
+ // Find nearest vertex for property lookup (in local space)
577
+ const nearest_idx = find_nearest_vertex(surface, local_position)
578
+ const property_value = surface.properties?.[nearest_idx]
579
+ const has_velocities = fermi_data?.metadata?.has_velocities
580
+ const property_name = property_value != null
581
+ ? (has_velocities ? `velocity` : `custom`)
582
+ : undefined
583
+
584
+ const { clientX, clientY } = event.nativeEvent
585
+ return {
586
+ band_index: surface.band_index,
587
+ spin: surface.spin,
588
+ position_cartesian,
589
+ position_fractional,
590
+ screen_position: { x: clientX, y: clientY },
591
+ surface_color,
592
+ property_value,
593
+ property_name,
594
+ is_tiled: effective_tile_bz,
595
+ symmetry_index: sym_idx,
596
+ }
597
+ }
598
+
599
+ // Throttled handler for pointer move events
600
+ // Skips expensive nearest-vertex lookups if called too frequently
601
+ function handle_pointer_move(
602
+ event: ThreltePointerEvent,
603
+ surface: Isosurface,
604
+ surface_color: string,
605
+ sym_idx: number,
606
+ sym_matrix: Matrix4Tuple,
607
+ ): void {
608
+ const now = performance.now()
609
+ if (now - last_hover_time < constants.HOVER_THROTTLE_MS) return
610
+ last_hover_time = now
611
+ hover_data = create_hover_data(event, surface, surface_color, sym_idx, sym_matrix)
612
+ }
613
+ </script>
614
+
615
+ {#if camera_projection === `perspective`}
616
+ <T.PerspectiveCamera makeDefault position={computed_camera_position} {fov}>
617
+ <extras.OrbitControls {...orbit_controls_props}>
618
+ {#if gizmo}<extras.Gizmo {...gizmo_props} />{/if}
619
+ </extras.OrbitControls>
620
+ </T.PerspectiveCamera>
621
+ {:else}
622
+ <T.OrthographicCamera
623
+ makeDefault
624
+ position={computed_camera_position}
625
+ zoom={initial_zoom}
626
+ near={-100}
627
+ >
628
+ <extras.OrbitControls {...orbit_controls_props}>
629
+ {#if gizmo}<extras.Gizmo {...gizmo_props} />{/if}
630
+ </extras.OrbitControls>
631
+ </T.OrthographicCamera>
632
+ {/if}
633
+
634
+ <T.DirectionalLight position={[3, 10, 10]} intensity={directional_light} />
635
+ <T.DirectionalLight position={[-3, -5, -10]} intensity={directional_light * 0.5} />
636
+ <T.AmbientLight intensity={ambient_light} />
637
+
638
+ <T.Group position={rotation_target}>
639
+ <!-- Brillouin zone overlay -->
640
+ {#if show_bz && bz_data && bz_geometry}
641
+ <T.Mesh geometry={bz_geometry}>
642
+ <T.MeshStandardMaterial
643
+ color={bz_color}
644
+ transparent
645
+ opacity={bz_opacity}
646
+ side={2}
647
+ depthWrite={false}
648
+ />
649
+ </T.Mesh>
650
+
651
+ <!-- BZ edges -->
652
+ {#each bz_data.edges as edge_segment, edge_idx (`bz-edge-${edge_idx}`)}
653
+ {@const [from, to] = edge_segment}
654
+ <Cylinder {from} {to} thickness={bz_edge_width} color={bz_edge_color} />
655
+ {/each}
656
+ {/if}
657
+
658
+ <!-- Reciprocal lattice vectors -->
659
+ {#if show_vectors && fermi_data?.k_lattice}
660
+ {#each fermi_data.k_lattice as vec, idx (idx)}
661
+ {@const scaled_vec = vec.map((coord) => coord * vector_scale) as Vec3}
662
+ {@const label_position = scaled_vec.map((coord) => coord * 1.15) as Vec3}
663
+ <Arrow
664
+ position={[0, 0, 0]}
665
+ vector={scaled_vec}
666
+ color={vector_colors[idx]}
667
+ scale={1}
668
+ />
669
+ <extras.HTML center position={label_position}>
670
+ <span style:color={vector_colors[idx]} style:font-size="1.2em">
671
+ {vector_labels[idx]}
672
+ </span>
673
+ </extras.HTML>
674
+ {/each}
675
+ {/if}
676
+
677
+ <!-- Fermi surfaces (with optional symmetry tiling) -->
678
+ {#each visible_surfaces as
679
+ surface,
680
+ surface_idx
681
+ (`surface-${surface.band_index}-${surface.spin}-${surface_idx}`)
682
+ }
683
+ {@const geo_key = `${surface.band_index}-${surface.spin}-${surface_idx}`}
684
+ {@const geo_data = geometry_cache.get(geo_key)}
685
+ {@const surface_color = get_surface_color(surface)}
686
+ {@const use_vertex_colors = color_property === `velocity` || color_property === `custom`}
687
+ {@const symmetry_ops = effective_tile_bz ? OH_SYMMETRY_MATRICES : [IDENTITY_4x4]}
688
+ {@const renderOrder = surface_render_orders.get(surface) ?? surface_idx}
689
+
690
+ {#if geo_data}
691
+ {#each symmetry_ops as sym_matrix, sym_idx (`sym-${sym_idx}`)}
692
+ {#if representation === `wireframe`}
693
+ <T.Mesh
694
+ geometry={geo_data.geometry}
695
+ matrix={sym_matrix}
696
+ matrixAutoUpdate={false}
697
+ {renderOrder}
698
+ onpointermove={(event: ThreltePointerEvent) =>
699
+ handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
700
+ onpointerleave={() => {
701
+ hover_data = null
702
+ }}
703
+ >
704
+ <T.MeshBasicMaterial
705
+ color={surface_color}
706
+ wireframe
707
+ transparent={surface_opacity < 1}
708
+ opacity={surface_opacity}
709
+ depthWrite={true}
710
+ depthTest={true}
711
+ />
712
+ </T.Mesh>
713
+ {:else if surface_opacity < 1}
714
+ <!-- Two-pass rendering for transparent surfaces -->
715
+ <!-- Pass 1: Back faces (rendered first, lower renderOrder) -->
716
+ <T.Mesh
717
+ geometry={geo_data.geometry}
718
+ matrix={sym_matrix}
719
+ matrixAutoUpdate={false}
720
+ renderOrder={renderOrder * 2}
721
+ onpointermove={(event: ThreltePointerEvent) =>
722
+ handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
723
+ onpointerleave={() => {
724
+ hover_data = null
725
+ }}
726
+ >
727
+ <T.MeshStandardMaterial
728
+ {...get_material_props(surface_color, use_vertex_colors, surface_idx, `back`)}
729
+ metalness={0.1}
730
+ roughness={0.6}
731
+ flatShading={false}
732
+ />
733
+ </T.Mesh>
734
+ <!-- Pass 2: Front faces (rendered second, higher renderOrder) -->
735
+ <T.Mesh
736
+ geometry={geo_data.geometry}
737
+ matrix={sym_matrix}
738
+ matrixAutoUpdate={false}
739
+ renderOrder={renderOrder * 2 + 1}
740
+ onpointermove={(event: ThreltePointerEvent) =>
741
+ handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
742
+ onpointerleave={() => {
743
+ hover_data = null
744
+ }}
745
+ >
746
+ <T.MeshStandardMaterial
747
+ {...get_material_props(
748
+ surface_color,
749
+ use_vertex_colors,
750
+ surface_idx,
751
+ `front`,
752
+ )}
753
+ metalness={0.1}
754
+ roughness={0.6}
755
+ flatShading={false}
756
+ />
757
+ </T.Mesh>
758
+ {:else}
759
+ <!-- Single pass for opaque surfaces -->
760
+ <T.Mesh
761
+ geometry={geo_data.geometry}
762
+ matrix={sym_matrix}
763
+ matrixAutoUpdate={false}
764
+ {renderOrder}
765
+ onpointermove={(event: ThreltePointerEvent) =>
766
+ handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
767
+ onpointerleave={() => {
768
+ hover_data = null
769
+ }}
770
+ >
771
+ <T.MeshStandardMaterial
772
+ {...get_material_props(
773
+ surface_color,
774
+ use_vertex_colors,
775
+ surface_idx,
776
+ `front`,
777
+ )}
778
+ metalness={0.1}
779
+ roughness={0.6}
780
+ flatShading={false}
781
+ />
782
+ </T.Mesh>
783
+ {/if}
784
+ {/each}
785
+ {/if}
786
+ {/each}
787
+ </T.Group>
788
+
789
+ <style>
790
+ :global(.fermi-surface .responsive-gizmo) {
791
+ width: clamp(70px, 18cqmin, 100px) !important;
792
+ height: clamp(70px, 18cqmin, 100px) !important;
793
+ }
794
+ </style>