matterviz 0.3.7 → 0.4.1

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 (486) hide show
  1. package/dist/Icon.svelte +7 -4
  2. package/dist/MillerIndexInput.svelte +1 -1
  3. package/dist/api/optimade.js +32 -26
  4. package/dist/app.css +0 -3
  5. package/dist/brillouin/BrillouinZone.svelte +76 -148
  6. package/dist/brillouin/BrillouinZone.svelte.d.ts +6 -14
  7. package/dist/brillouin/BrillouinZoneExportPane.svelte +43 -96
  8. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneInfoPane.svelte +9 -32
  10. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
  11. package/dist/brillouin/BrillouinZoneScene.svelte +97 -205
  12. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +4 -23
  13. package/dist/brillouin/BrillouinZoneTooltip.svelte +16 -25
  14. package/dist/brillouin/ReciprocalVectors.svelte +39 -0
  15. package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
  16. package/dist/brillouin/compute.d.ts +2 -0
  17. package/dist/brillouin/compute.js +89 -90
  18. package/dist/brillouin/geometry.d.ts +8 -0
  19. package/dist/brillouin/geometry.js +57 -0
  20. package/dist/brillouin/index.d.ts +2 -0
  21. package/dist/brillouin/index.js +2 -0
  22. package/dist/brillouin/types.d.ts +2 -2
  23. package/dist/chempot-diagram/ChemPotDiagram.svelte +14 -13
  24. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
  25. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +109 -203
  26. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
  27. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +180 -470
  28. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
  29. package/dist/chempot-diagram/async-compute.svelte.js +3 -1
  30. package/dist/chempot-diagram/chempot-worker.js +2 -1
  31. package/dist/chempot-diagram/color.d.ts +3 -6
  32. package/dist/chempot-diagram/color.js +5 -5
  33. package/dist/chempot-diagram/compute.d.ts +4 -4
  34. package/dist/chempot-diagram/compute.js +20 -20
  35. package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
  36. package/dist/chempot-diagram/controls-state.svelte.js +42 -0
  37. package/dist/chempot-diagram/export.d.ts +47 -0
  38. package/dist/chempot-diagram/export.js +133 -0
  39. package/dist/chempot-diagram/index.d.ts +1 -0
  40. package/dist/chempot-diagram/index.js +1 -0
  41. package/dist/chempot-diagram/pointer.d.ts +0 -10
  42. package/dist/chempot-diagram/pointer.js +4 -4
  43. package/dist/chempot-diagram/types.d.ts +3 -3
  44. package/dist/colors/index.js +8 -7
  45. package/dist/composition/FormulaFilter.svelte +18 -11
  46. package/dist/composition/PieChart.svelte +11 -10
  47. package/dist/composition/chem-sys.d.ts +8 -0
  48. package/dist/composition/chem-sys.js +86 -0
  49. package/dist/composition/format.js +7 -4
  50. package/dist/composition/index.d.ts +1 -0
  51. package/dist/composition/index.js +1 -0
  52. package/dist/composition/parse.d.ts +0 -1
  53. package/dist/composition/parse.js +41 -31
  54. package/dist/controls.d.ts +1 -0
  55. package/dist/controls.js +0 -1
  56. package/dist/convex-hull/ConvexHull.svelte +8 -10
  57. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
  58. package/dist/convex-hull/ConvexHull2D.svelte +106 -185
  59. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  60. package/dist/convex-hull/ConvexHull3D.svelte +179 -683
  61. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  62. package/dist/convex-hull/ConvexHull4D.svelte +183 -687
  63. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  64. package/dist/convex-hull/ConvexHullChrome.svelte +268 -0
  65. package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
  66. package/dist/convex-hull/ConvexHullControls.svelte +88 -7
  67. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
  68. package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
  69. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
  70. package/dist/convex-hull/ConvexHullStats.svelte +36 -175
  71. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
  72. package/dist/convex-hull/ConvexHullTooltip.svelte +11 -2
  73. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
  74. package/dist/convex-hull/GasPressureControls.svelte +4 -4
  75. package/dist/convex-hull/TemperatureSlider.svelte +2 -2
  76. package/dist/convex-hull/barycentric-coords.d.ts +2 -4
  77. package/dist/convex-hull/barycentric-coords.js +6 -33
  78. package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
  79. package/dist/convex-hull/canvas-interactions.svelte.js +278 -0
  80. package/dist/convex-hull/demo-temperature.d.ts +1 -1
  81. package/dist/convex-hull/demo-temperature.js +20 -22
  82. package/dist/convex-hull/gas-thermodynamics.d.ts +2 -2
  83. package/dist/convex-hull/gas-thermodynamics.js +22 -30
  84. package/dist/convex-hull/helpers.d.ts +42 -7
  85. package/dist/convex-hull/helpers.js +171 -78
  86. package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
  87. package/dist/convex-hull/hull-state.svelte.js +124 -0
  88. package/dist/convex-hull/index.d.ts +10 -8
  89. package/dist/convex-hull/index.js +7 -2
  90. package/dist/convex-hull/thermodynamics.js +136 -960
  91. package/dist/convex-hull/types.d.ts +13 -5
  92. package/dist/convex-hull/types.js +12 -0
  93. package/dist/coordination/CoordinationBarPlot.svelte +27 -34
  94. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  95. package/dist/element/BohrAtom.svelte +2 -1
  96. package/dist/element/index.d.ts +4 -0
  97. package/dist/element/index.js +18 -0
  98. package/dist/feedback/DragOverlay.svelte +3 -1
  99. package/dist/feedback/DragOverlay.svelte.d.ts +1 -0
  100. package/dist/feedback/StatusMessage.svelte +13 -3
  101. package/dist/fermi-surface/FermiSlice.svelte +13 -5
  102. package/dist/fermi-surface/FermiSurface.svelte +78 -151
  103. package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -14
  104. package/dist/fermi-surface/FermiSurfaceControls.svelte +1 -1
  105. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  106. package/dist/fermi-surface/FermiSurfaceScene.svelte +72 -221
  107. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
  108. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +8 -34
  109. package/dist/fermi-surface/compute.js +67 -66
  110. package/dist/fermi-surface/export.js +6 -16
  111. package/dist/fermi-surface/index.d.ts +0 -1
  112. package/dist/fermi-surface/index.js +0 -1
  113. package/dist/fermi-surface/parse.d.ts +1 -1
  114. package/dist/fermi-surface/parse.js +71 -79
  115. package/dist/fermi-surface/types.d.ts +3 -2
  116. package/dist/heatmap-matrix/HeatmapMatrix.svelte +69 -52
  117. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +4 -3
  118. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +3 -2
  119. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
  120. package/dist/heatmap-matrix/index.d.ts +3 -2
  121. package/dist/heatmap-matrix/index.js +1 -1
  122. package/dist/index.d.ts +1 -0
  123. package/dist/index.js +1 -0
  124. package/dist/io/ExportPane.svelte +166 -0
  125. package/dist/io/ExportPane.svelte.d.ts +17 -0
  126. package/dist/io/decompress.js +5 -4
  127. package/dist/io/export.d.ts +9 -5
  128. package/dist/io/export.js +77 -51
  129. package/dist/io/fetch.d.ts +2 -1
  130. package/dist/io/fetch.js +5 -1
  131. package/dist/io/file-drop.d.ts +8 -1
  132. package/dist/io/file-drop.js +48 -36
  133. package/dist/io/index.d.ts +2 -0
  134. package/dist/io/index.js +10 -0
  135. package/dist/io/types.d.ts +13 -0
  136. package/dist/io/url-drop.js +64 -33
  137. package/dist/isosurface/parse.js +52 -51
  138. package/dist/isosurface/slice.js +5 -4
  139. package/dist/isosurface/types.js +1 -1
  140. package/dist/keyboard.d.ts +3 -0
  141. package/dist/keyboard.js +23 -0
  142. package/dist/labels.d.ts +1 -1
  143. package/dist/labels.js +9 -8
  144. package/dist/layout/FullscreenButton.svelte +33 -0
  145. package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
  146. package/dist/layout/FullscreenToggle.svelte +8 -14
  147. package/dist/layout/PropertyFilter.svelte +3 -2
  148. package/dist/layout/SettingsSection.svelte +1 -1
  149. package/dist/layout/ViewerChrome.svelte +116 -0
  150. package/dist/layout/ViewerChrome.svelte.d.ts +17 -0
  151. package/dist/layout/fullscreen.d.ts +4 -0
  152. package/dist/layout/fullscreen.svelte.d.ts +8 -0
  153. package/dist/layout/fullscreen.svelte.js +37 -0
  154. package/dist/layout/index.d.ts +3 -0
  155. package/dist/layout/index.js +3 -0
  156. package/dist/layout/json-tree/JsonNode.svelte +1 -1
  157. package/dist/layout/json-tree/JsonTree.svelte +2 -2
  158. package/dist/layout/json-tree/utils.js +5 -4
  159. package/dist/marching-cubes.js +8 -13
  160. package/dist/math.d.ts +12 -4
  161. package/dist/math.js +42 -30
  162. package/dist/overlays/DraggablePane.svelte +4 -4
  163. package/dist/overlays/index.d.ts +4 -0
  164. package/dist/periodic-table/PeriodicTable.svelte +27 -15
  165. package/dist/periodic-table/PropertySelect.svelte +1 -0
  166. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +9 -3
  167. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
  168. package/dist/phase-diagram/PhaseDiagramControls.svelte +3 -2
  169. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
  170. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
  171. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
  172. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +47 -132
  173. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
  174. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +1 -1
  175. package/dist/phase-diagram/build-diagram.js +2 -2
  176. package/dist/phase-diagram/colors.js +1 -1
  177. package/dist/phase-diagram/parse.d.ts +2 -1
  178. package/dist/phase-diagram/parse.js +6 -5
  179. package/dist/phase-diagram/types.d.ts +1 -1
  180. package/dist/phase-diagram/utils.d.ts +3 -3
  181. package/dist/phase-diagram/utils.js +8 -12
  182. package/dist/plot/{BarPlot.svelte → bar/BarPlot.svelte} +246 -841
  183. package/dist/plot/{BarPlot.svelte.d.ts → bar/BarPlot.svelte.d.ts} +8 -16
  184. package/dist/plot/{BarPlotControls.svelte → bar/BarPlotControls.svelte} +6 -5
  185. package/dist/plot/{BarPlotControls.svelte.d.ts → bar/BarPlotControls.svelte.d.ts} +3 -3
  186. package/dist/plot/{SpacegroupBarPlot.svelte → bar/SpacegroupBarPlot.svelte} +8 -7
  187. package/dist/plot/{SpacegroupBarPlot.svelte.d.ts → bar/SpacegroupBarPlot.svelte.d.ts} +1 -1
  188. package/dist/plot/bar/data.d.ts +40 -0
  189. package/dist/plot/bar/data.js +154 -0
  190. package/dist/plot/bar/geometry.d.ts +39 -0
  191. package/dist/plot/bar/geometry.js +60 -0
  192. package/dist/plot/bar/index.d.ts +3 -0
  193. package/dist/plot/bar/index.js +3 -0
  194. package/dist/plot/box/BoxPlot.svelte +1292 -0
  195. package/dist/plot/box/BoxPlot.svelte.d.ts +95 -0
  196. package/dist/plot/box/BoxPlotControls.svelte +109 -0
  197. package/dist/plot/box/BoxPlotControls.svelte.d.ts +19 -0
  198. package/dist/plot/box/Violin.svelte +14 -0
  199. package/dist/plot/box/Violin.svelte.d.ts +70 -0
  200. package/dist/plot/box/box-plot.d.ts +56 -0
  201. package/dist/plot/box/box-plot.js +129 -0
  202. package/dist/plot/box/index.d.ts +5 -0
  203. package/dist/plot/box/index.js +5 -0
  204. package/dist/plot/box/kde.d.ts +17 -0
  205. package/dist/plot/box/kde.js +160 -0
  206. package/dist/plot/box/quantile.d.ts +3 -0
  207. package/dist/plot/box/quantile.js +53 -0
  208. package/dist/plot/{auto-place.d.ts → core/auto-place.d.ts} +1 -1
  209. package/dist/plot/{auto-place.js → core/auto-place.js} +6 -3
  210. package/dist/plot/core/axis-utils.d.ts +46 -0
  211. package/dist/plot/core/axis-utils.js +110 -0
  212. package/dist/plot/{AxisLabel.svelte → core/components/AxisLabel.svelte} +2 -2
  213. package/dist/plot/{AxisLabel.svelte.d.ts → core/components/AxisLabel.svelte.d.ts} +1 -1
  214. package/dist/plot/{ColorBar.svelte → core/components/ColorBar.svelte} +41 -38
  215. package/dist/plot/{ColorBar.svelte.d.ts → core/components/ColorBar.svelte.d.ts} +7 -6
  216. package/dist/plot/{ColorScaleSelect.svelte → core/components/ColorScaleSelect.svelte} +4 -3
  217. package/dist/plot/{ColorScaleSelect.svelte.d.ts → core/components/ColorScaleSelect.svelte.d.ts} +2 -2
  218. package/dist/plot/core/components/ControlPane.svelte +46 -0
  219. package/dist/plot/core/components/ControlPane.svelte.d.ts +13 -0
  220. package/dist/plot/{FillArea.svelte → core/components/FillArea.svelte} +17 -6
  221. package/dist/plot/{FillArea.svelte.d.ts → core/components/FillArea.svelte.d.ts} +1 -1
  222. package/dist/plot/{InteractiveAxisLabel.svelte → core/components/InteractiveAxisLabel.svelte} +3 -3
  223. package/dist/plot/{InteractiveAxisLabel.svelte.d.ts → core/components/InteractiveAxisLabel.svelte.d.ts} +2 -2
  224. package/dist/plot/{Line.svelte → core/components/Line.svelte} +33 -15
  225. package/dist/plot/{Line.svelte.d.ts → core/components/Line.svelte.d.ts} +3 -2
  226. package/dist/plot/{PlotAxis.svelte → core/components/PlotAxis.svelte} +9 -6
  227. package/dist/plot/{PlotAxis.svelte.d.ts → core/components/PlotAxis.svelte.d.ts} +5 -3
  228. package/dist/plot/{PlotControls.svelte → core/components/PlotControls.svelte} +17 -29
  229. package/dist/plot/core/components/PlotControls.svelte.d.ts +4 -0
  230. package/dist/plot/{PlotLegend.svelte → core/components/PlotLegend.svelte} +21 -10
  231. package/dist/plot/{PlotLegend.svelte.d.ts → core/components/PlotLegend.svelte.d.ts} +3 -2
  232. package/dist/plot/{PlotTooltip.svelte → core/components/PlotTooltip.svelte} +17 -1
  233. package/dist/plot/{PlotTooltip.svelte.d.ts → core/components/PlotTooltip.svelte.d.ts} +8 -0
  234. package/dist/plot/{PortalSelect.svelte → core/components/PortalSelect.svelte} +11 -7
  235. package/dist/plot/{ReferenceLine.svelte → core/components/ReferenceLine.svelte} +3 -3
  236. package/dist/plot/{ReferenceLine.svelte.d.ts → core/components/ReferenceLine.svelte.d.ts} +1 -1
  237. package/dist/plot/{ReferenceLine3D.svelte → core/components/ReferenceLine3D.svelte} +5 -5
  238. package/dist/plot/{ReferenceLine3D.svelte.d.ts → core/components/ReferenceLine3D.svelte.d.ts} +5 -5
  239. package/dist/plot/{ReferencePlane.svelte → core/components/ReferencePlane.svelte} +8 -8
  240. package/dist/plot/{ReferencePlane.svelte.d.ts → core/components/ReferencePlane.svelte.d.ts} +5 -5
  241. package/dist/plot/{ZeroLines.svelte → core/components/ZeroLines.svelte} +3 -3
  242. package/dist/plot/{ZeroLines.svelte.d.ts → core/components/ZeroLines.svelte.d.ts} +3 -3
  243. package/dist/plot/{ZoomRect.svelte → core/components/ZoomRect.svelte} +1 -1
  244. package/dist/plot/{ZoomRect.svelte.d.ts → core/components/ZoomRect.svelte.d.ts} +1 -1
  245. package/dist/plot/core/components/index.d.ts +17 -0
  246. package/dist/plot/core/components/index.js +17 -0
  247. package/dist/plot/{data-cleaning.d.ts → core/data-cleaning.d.ts} +71 -1
  248. package/dist/plot/{data-cleaning.js → core/data-cleaning.js} +21 -23
  249. package/dist/plot/{data-transform.d.ts → core/data-transform.d.ts} +2 -2
  250. package/dist/plot/{data-transform.js → core/data-transform.js} +3 -3
  251. package/dist/plot/core/fill-utils.d.ts +34 -0
  252. package/dist/plot/core/fill-utils.js +391 -0
  253. package/dist/plot/core/index.d.ts +10 -0
  254. package/dist/plot/core/index.js +11 -0
  255. package/dist/plot/core/interactions.d.ts +39 -0
  256. package/dist/plot/core/interactions.js +209 -0
  257. package/dist/plot/{layout.d.ts → core/layout.d.ts} +1 -0
  258. package/dist/plot/{layout.js → core/layout.js} +16 -8
  259. package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
  260. package/dist/plot/core/pan-zoom.svelte.js +221 -0
  261. package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
  262. package/dist/plot/core/placed-tween.svelte.js +68 -0
  263. package/dist/plot/{reference-line.d.ts → core/reference-line.d.ts} +11 -11
  264. package/dist/plot/{reference-line.js → core/reference-line.js} +29 -42
  265. package/dist/plot/core/scales.d.ts +40 -0
  266. package/dist/plot/{scales.js → core/scales.js} +94 -93
  267. package/dist/plot/core/svg.d.ts +3 -0
  268. package/dist/plot/core/svg.js +41 -0
  269. package/dist/plot/{types.d.ts → core/types.d.ts} +36 -85
  270. package/dist/plot/{types.js → core/types.js} +1 -1
  271. package/dist/plot/{utils → core/utils}/label-placement.d.ts +3 -3
  272. package/dist/plot/{utils → core/utils}/label-placement.js +3 -3
  273. package/dist/plot/core/utils/series-visibility.d.ts +26 -0
  274. package/dist/plot/{utils → core/utils}/series-visibility.js +29 -2
  275. package/dist/plot/core/utils.d.ts +12 -0
  276. package/dist/plot/core/utils.js +27 -0
  277. package/dist/plot/{Histogram.svelte → histogram/Histogram.svelte} +174 -551
  278. package/dist/plot/{Histogram.svelte.d.ts → histogram/Histogram.svelte.d.ts} +2 -2
  279. package/dist/plot/{HistogramControls.svelte → histogram/HistogramControls.svelte} +6 -6
  280. package/dist/plot/{HistogramControls.svelte.d.ts → histogram/HistogramControls.svelte.d.ts} +4 -4
  281. package/dist/plot/histogram/index.d.ts +2 -0
  282. package/dist/plot/histogram/index.js +2 -0
  283. package/dist/plot/index.d.ts +8 -41
  284. package/dist/plot/index.js +10 -39
  285. package/dist/plot/sankey/Sankey.svelte +697 -0
  286. package/dist/plot/sankey/Sankey.svelte.d.ts +74 -0
  287. package/dist/plot/sankey/SankeyControls.svelte +98 -0
  288. package/dist/plot/sankey/SankeyControls.svelte.d.ts +19 -0
  289. package/dist/plot/sankey/index.d.ts +4 -0
  290. package/dist/plot/sankey/index.js +3 -0
  291. package/dist/plot/sankey/sankey-types.d.ts +42 -0
  292. package/dist/plot/sankey/sankey-types.js +4 -0
  293. package/dist/plot/sankey/sankey.d.ts +52 -0
  294. package/dist/plot/sankey/sankey.js +189 -0
  295. package/dist/plot/{BinnedScatterPlot.svelte → scatter/BinnedScatterPlot.svelte} +64 -64
  296. package/dist/plot/{BinnedScatterPlot.svelte.d.ts → scatter/BinnedScatterPlot.svelte.d.ts} +6 -6
  297. package/dist/plot/{ElementScatter.svelte → scatter/ElementScatter.svelte} +6 -6
  298. package/dist/plot/{ElementScatter.svelte.d.ts → scatter/ElementScatter.svelte.d.ts} +2 -2
  299. package/dist/plot/{ScatterPlot.svelte → scatter/ScatterPlot.svelte} +297 -1008
  300. package/dist/plot/{ScatterPlot.svelte.d.ts → scatter/ScatterPlot.svelte.d.ts} +10 -18
  301. package/dist/plot/{ScatterPlotControls.svelte → scatter/ScatterPlotControls.svelte} +6 -5
  302. package/dist/plot/{ScatterPlotControls.svelte.d.ts → scatter/ScatterPlotControls.svelte.d.ts} +2 -2
  303. package/dist/plot/{ScatterPoint.svelte → scatter/ScatterPoint.svelte} +7 -7
  304. package/dist/plot/{ScatterPoint.svelte.d.ts → scatter/ScatterPoint.svelte.d.ts} +3 -3
  305. package/dist/plot/{adaptive-density.d.ts → scatter/adaptive-density.d.ts} +14 -4
  306. package/dist/plot/{adaptive-density.js → scatter/adaptive-density.js} +46 -20
  307. package/dist/plot/{binned-scatter-types.d.ts → scatter/binned-scatter-types.d.ts} +5 -12
  308. package/dist/plot/scatter/index.d.ts +7 -0
  309. package/dist/plot/scatter/index.js +5 -0
  310. package/dist/plot/scatter/scatter-data.d.ts +19 -0
  311. package/dist/plot/scatter/scatter-data.js +212 -0
  312. package/dist/plot/{ScatterPlot3D.svelte → scatter-3d/ScatterPlot3D.svelte} +25 -34
  313. package/dist/plot/{ScatterPlot3D.svelte.d.ts → scatter-3d/ScatterPlot3D.svelte.d.ts} +9 -17
  314. package/dist/plot/{ScatterPlot3DControls.svelte → scatter-3d/ScatterPlot3DControls.svelte} +14 -14
  315. package/dist/plot/{ScatterPlot3DControls.svelte.d.ts → scatter-3d/ScatterPlot3DControls.svelte.d.ts} +6 -6
  316. package/dist/plot/{ScatterPlot3DScene.svelte → scatter-3d/ScatterPlot3DScene.svelte} +129 -128
  317. package/dist/plot/{ScatterPlot3DScene.svelte.d.ts → scatter-3d/ScatterPlot3DScene.svelte.d.ts} +6 -15
  318. package/dist/plot/{Surface3D.svelte → scatter-3d/Surface3D.svelte} +7 -6
  319. package/dist/plot/{Surface3D.svelte.d.ts → scatter-3d/Surface3D.svelte.d.ts} +5 -4
  320. package/dist/plot/scatter-3d/index.d.ts +4 -0
  321. package/dist/plot/scatter-3d/index.js +4 -0
  322. package/dist/plot/sunburst/Sunburst.svelte +1041 -0
  323. package/dist/plot/sunburst/Sunburst.svelte.d.ts +97 -0
  324. package/dist/plot/sunburst/SunburstControls.svelte +200 -0
  325. package/dist/plot/sunburst/SunburstControls.svelte.d.ts +26 -0
  326. package/dist/plot/sunburst/index.d.ts +4 -0
  327. package/dist/plot/sunburst/index.js +4 -0
  328. package/dist/plot/sunburst/render.d.ts +34 -0
  329. package/dist/plot/sunburst/render.js +122 -0
  330. package/dist/plot/sunburst/sunburst.d.ts +62 -0
  331. package/dist/plot/sunburst/sunburst.js +269 -0
  332. package/dist/rdf/RdfPlot.svelte +2 -1
  333. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  334. package/dist/rdf/calc-rdf.js +11 -24
  335. package/dist/sanitize.js +14 -3
  336. package/dist/scene/SceneCamera.svelte +62 -0
  337. package/dist/scene/SceneCamera.svelte.d.ts +19 -0
  338. package/dist/scene/bind-renderer.svelte.d.ts +2 -0
  339. package/dist/scene/bind-renderer.svelte.js +14 -0
  340. package/dist/scene/index.d.ts +4 -0
  341. package/dist/scene/index.js +5 -0
  342. package/dist/scene/props.js +52 -0
  343. package/dist/scene/types.d.ts +26 -0
  344. package/dist/scene/types.js +1 -0
  345. package/dist/settings.d.ts +79 -3
  346. package/dist/settings.js +321 -1
  347. package/dist/spectral/Bands.svelte +47 -36
  348. package/dist/spectral/Bands.svelte.d.ts +6 -6
  349. package/dist/spectral/BandsAndDos.svelte +23 -25
  350. package/dist/spectral/BrillouinBandsDos.svelte +42 -30
  351. package/dist/spectral/Dos.svelte +15 -23
  352. package/dist/spectral/Dos.svelte.d.ts +4 -3
  353. package/dist/spectral/helpers.d.ts +8 -6
  354. package/dist/spectral/helpers.js +137 -65
  355. package/dist/state.svelte.d.ts +0 -7
  356. package/dist/state.svelte.js +0 -6
  357. package/dist/structure/Arrow.svelte +2 -4
  358. package/dist/structure/AtomLegend.svelte +8 -9
  359. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  360. package/dist/structure/CanvasTooltip.svelte +1 -0
  361. package/dist/structure/CellSelect.svelte +12 -5
  362. package/dist/structure/CellSelect.svelte.d.ts +2 -1
  363. package/dist/structure/Cylinder.svelte +12 -8
  364. package/dist/structure/Cylinder.svelte.d.ts +4 -1
  365. package/dist/structure/Lattice.svelte +2 -2
  366. package/dist/structure/Structure.svelte +365 -423
  367. package/dist/structure/Structure.svelte.d.ts +5 -15
  368. package/dist/structure/StructureControls.svelte +217 -2
  369. package/dist/structure/StructureControls.svelte.d.ts +5 -3
  370. package/dist/structure/StructureExportPane.svelte +54 -156
  371. package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
  372. package/dist/structure/StructureInfoPane.svelte +10 -9
  373. package/dist/structure/StructureInfoPane.svelte.d.ts +5 -5
  374. package/dist/structure/StructureScene.svelte +376 -208
  375. package/dist/structure/StructureScene.svelte.d.ts +22 -20
  376. package/dist/structure/{label-placement.d.ts → atom-label-placement.d.ts} +3 -3
  377. package/dist/structure/{label-placement.js → atom-label-placement.js} +15 -5
  378. package/dist/structure/atom-properties.d.ts +1 -1
  379. package/dist/structure/atom-properties.js +17 -22
  380. package/dist/structure/bond-order-perception.js +3 -5
  381. package/dist/structure/bonding.d.ts +4 -0
  382. package/dist/structure/bonding.js +134 -63
  383. package/dist/structure/export.d.ts +24 -4
  384. package/dist/structure/export.js +89 -143
  385. package/dist/structure/index.d.ts +4 -4
  386. package/dist/structure/index.js +3 -3
  387. package/dist/structure/measure.d.ts +3 -2
  388. package/dist/structure/measure.js +6 -5
  389. package/dist/structure/parse.d.ts +3 -2
  390. package/dist/structure/parse.js +419 -438
  391. package/dist/structure/partial-occupancy.d.ts +0 -1
  392. package/dist/structure/partial-occupancy.js +1 -1
  393. package/dist/structure/pbc.d.ts +1 -1
  394. package/dist/structure/pbc.js +190 -13
  395. package/dist/structure/polyhedra.d.ts +41 -0
  396. package/dist/structure/polyhedra.js +602 -0
  397. package/dist/structure/site.d.ts +4 -0
  398. package/dist/structure/site.js +1 -0
  399. package/dist/structure/supercell.js +3 -2
  400. package/dist/structure/validation.js +5 -6
  401. package/dist/symmetry/SymmetryElementControls.svelte +69 -0
  402. package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
  403. package/dist/symmetry/SymmetryElements.svelte +354 -0
  404. package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
  405. package/dist/symmetry/SymmetryStats.svelte +113 -8
  406. package/dist/symmetry/WyckoffTable.svelte +68 -7
  407. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
  408. package/dist/symmetry/cell-transform.js +7 -14
  409. package/dist/symmetry/index.d.ts +14 -4
  410. package/dist/symmetry/index.js +291 -72
  411. package/dist/symmetry/spacegroups.d.ts +12 -1
  412. package/dist/symmetry/spacegroups.js +63 -14
  413. package/dist/symmetry/symmetry-elements.d.ts +33 -0
  414. package/dist/symmetry/symmetry-elements.js +521 -0
  415. package/dist/symmetry/wyckoff-db.d.ts +9 -0
  416. package/dist/symmetry/wyckoff-db.js +87 -0
  417. package/dist/table/HeatmapTable.svelte +66 -25
  418. package/dist/table/HeatmapTable.svelte.d.ts +1 -1
  419. package/dist/table/index.d.ts +1 -3
  420. package/dist/table/index.js +1 -1
  421. package/dist/theme/index.js +8 -8
  422. package/dist/tooltip/KCoords.svelte +45 -0
  423. package/dist/tooltip/KCoords.svelte.d.ts +8 -0
  424. package/dist/tooltip/index.d.ts +1 -0
  425. package/dist/tooltip/index.js +1 -0
  426. package/dist/trajectory/Trajectory.svelte +123 -100
  427. package/dist/trajectory/Trajectory.svelte.d.ts +11 -22
  428. package/dist/trajectory/TrajectoryExportPane.svelte +17 -25
  429. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
  430. package/dist/trajectory/TrajectoryInfoPane.svelte +5 -3
  431. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
  432. package/dist/trajectory/constants.js +6 -2
  433. package/dist/trajectory/extract.js +17 -37
  434. package/dist/trajectory/format-detect.d.ts +1 -1
  435. package/dist/trajectory/format-detect.js +27 -19
  436. package/dist/trajectory/frame-reader.d.ts +0 -1
  437. package/dist/trajectory/frame-reader.js +63 -162
  438. package/dist/trajectory/helpers.d.ts +10 -2
  439. package/dist/trajectory/helpers.js +56 -36
  440. package/dist/trajectory/index.js +1 -1
  441. package/dist/trajectory/parse/ase.d.ts +9 -1
  442. package/dist/trajectory/parse/ase.js +47 -32
  443. package/dist/trajectory/parse/diagnostics.d.ts +3 -0
  444. package/dist/trajectory/parse/diagnostics.js +14 -0
  445. package/dist/trajectory/parse/hdf5.js +1 -1
  446. package/dist/trajectory/parse/index.d.ts +1 -1
  447. package/dist/trajectory/parse/index.js +65 -105
  448. package/dist/trajectory/parse/lammps.d.ts +0 -2
  449. package/dist/trajectory/parse/lammps.js +8 -6
  450. package/dist/trajectory/parse/pymatgen.d.ts +2 -0
  451. package/dist/trajectory/parse/pymatgen.js +74 -0
  452. package/dist/trajectory/parse/vasp.js +38 -18
  453. package/dist/trajectory/parse/xyz.d.ts +13 -1
  454. package/dist/trajectory/parse/xyz.js +102 -94
  455. package/dist/trajectory/plotting.d.ts +1 -2
  456. package/dist/trajectory/plotting.js +16 -113
  457. package/dist/utils.d.ts +2 -0
  458. package/dist/utils.js +7 -5
  459. package/dist/xrd/XrdPlot.svelte +16 -30
  460. package/dist/xrd/broadening.d.ts +2 -1
  461. package/dist/xrd/calc-xrd.js +18 -20
  462. package/dist/xrd/index.d.ts +2 -2
  463. package/dist/xrd/parse.js +2 -2
  464. package/package.json +43 -26
  465. package/dist/element/data.json +0 -11864
  466. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  467. package/dist/fermi-surface/marching-cubes.js +0 -2
  468. package/dist/plot/PlotControls.svelte.d.ts +0 -4
  469. package/dist/plot/axis-utils.d.ts +0 -19
  470. package/dist/plot/axis-utils.js +0 -78
  471. package/dist/plot/defaults.d.ts +0 -19
  472. package/dist/plot/defaults.js +0 -9
  473. package/dist/plot/fill-utils.d.ts +0 -46
  474. package/dist/plot/fill-utils.js +0 -322
  475. package/dist/plot/hover-lock.svelte.d.ts +0 -14
  476. package/dist/plot/hover-lock.svelte.js +0 -46
  477. package/dist/plot/interactions.d.ts +0 -12
  478. package/dist/plot/interactions.js +0 -101
  479. package/dist/plot/scales.d.ts +0 -48
  480. package/dist/plot/svg.d.ts +0 -1
  481. package/dist/plot/svg.js +0 -11
  482. package/dist/plot/utils/series-visibility.d.ts +0 -15
  483. package/dist/plot/utils.d.ts +0 -1
  484. package/dist/plot/utils.js +0 -14
  485. /package/dist/plot/{PortalSelect.svelte.d.ts → core/components/PortalSelect.svelte.d.ts} +0 -0
  486. /package/dist/plot/{binned-scatter-types.js → scatter/binned-scatter-types.js} +0 -0
@@ -1,17 +1,25 @@
1
1
  <script lang="ts">
2
2
  import type { BrillouinZoneData } from '../brillouin'
3
- import { AXIS_COLORS, NEG_AXIS_COLORS } from '../colors'
4
- import type { Matrix4Tuple, Vec3 } from '../math'
3
+ import {
4
+ cartesian_to_fractional,
5
+ default_camera_position,
6
+ k_lattice_inverse,
7
+ k_space_size,
8
+ polyhedron_centroid,
9
+ polyhedron_geometry,
10
+ ReciprocalVectors,
11
+ } from '../brillouin'
12
+ import type { D3InterpolateName } from '../colors'
13
+ import { get_d3_interpolator } from '../colors'
14
+ import type { Matrix4Tuple, Vec2, Vec3 } from '../math'
5
15
  import * as math from '../math'
6
- import type { CameraProjection } from '../settings'
16
+ import { bind_renderer, build_orbit_props, SceneCamera } from '../scene'
17
+ import type { SceneControlProps, ThreltePointerEvent } from '../scene'
7
18
  import { DEFAULTS } from '../settings'
8
- import { Arrow, Cylinder } from '../structure'
9
- import { T, useThrelte } from '@threlte/core'
19
+ import { Cylinder } from '../structure'
20
+ import { T } from '@threlte/core'
10
21
  import * as extras from '@threlte/extras'
11
- import * as d3_sc from 'd3-scale-chromatic'
12
- import type { ComponentProps } from 'svelte'
13
22
  import { SvelteMap } from 'svelte/reactivity'
14
- import type { Camera, Scene } from 'three'
15
23
  import {
16
24
  BackSide,
17
25
  BufferAttribute,
@@ -33,9 +41,6 @@
33
41
  RepresentationMode,
34
42
  } from './types'
35
43
 
36
- // Threlte pointer event type for mesh interactions
37
- type ThreltePointerEvent = { point: Vector3; nativeEvent: PointerEvent }
38
-
39
44
  let {
40
45
  fermi_data = $bindable(),
41
46
  bz_data = $bindable(),
@@ -75,15 +80,13 @@
75
80
  directional_light = DEFAULTS.structure.directional_light,
76
81
  gizmo = DEFAULTS.structure.show_gizmo,
77
82
  auto_rotate = DEFAULTS.structure.auto_rotate,
78
- camera_is_moving = $bindable(false),
79
83
  scene = $bindable(),
80
84
  camera = $bindable(),
81
85
  hover_data = $bindable<FermiHoverData | null>(null),
82
- }: {
86
+ }: SceneControlProps & {
83
87
  fermi_data?: FermiSurfaceData
84
88
  bz_data?: BrillouinZoneData
85
89
  camera_position?: Vec3 | undefined
86
- camera_projection?: CameraProjection
87
90
  color_property?: ColorProperty
88
91
  color_scale?: string
89
92
  representation?: RepresentationMode
@@ -101,33 +104,20 @@
101
104
  clip_position?: number
102
105
  clip_flip?: boolean
103
106
  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
107
  hover_data?: FermiHoverData | null
121
108
  } = $props()
122
109
 
123
- const threlte = useThrelte()
110
+ const threlte = bind_renderer(
111
+ (threlte_scene, threlte_camera) => {
112
+ scene = threlte_scene
113
+ camera = threlte_camera
114
+ },
115
+ // Enable object sorting for proper depth ordering of transparent surfaces
116
+ (renderer) => (renderer.sortObjects = true),
117
+ )
124
118
 
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
- }
119
+ // Characteristic scene size, used for clipping and camera positioning
120
+ const scene_size = $derived(k_space_size(fermi_data?.k_lattice))
131
121
 
132
122
  // Compute clipping plane based on axis and position
133
123
  // Plane equation: dot(normal, point) + constant >= 0 means point is visible
@@ -138,7 +128,7 @@
138
128
  const normal_arr: Vec3 = [0, 0, 0]
139
129
  normal_arr[axis_idx] = clip_flip ? -1 : 1
140
130
 
141
- const scaled_position = clip_position * get_scene_size()
131
+ const scaled_position = clip_position * scene_size
142
132
  // constant = -position for normal case (keep points >= position)
143
133
  // constant = +position for flipped case (keep points <= position)
144
134
  const constant = clip_flip ? scaled_position : -scaled_position
@@ -159,24 +149,8 @@
159
149
  }
160
150
  })
161
151
 
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
152
  extras.interactivity()
173
153
 
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
154
  // Filter surfaces based on selected bands
181
155
  let visible_surfaces = $derived(
182
156
  fermi_data?.isosurfaces.filter((surface) =>
@@ -216,7 +190,7 @@
216
190
  })
217
191
 
218
192
  // Compute property range for color scaling
219
- let property_range = $derived.by((): [number, number] => {
193
+ let property_range = $derived.by((): Vec2 => {
220
194
  if (color_property !== `velocity` && color_property !== `custom`) {
221
195
  return [0, 1]
222
196
  }
@@ -247,7 +221,7 @@
247
221
  const normalized = max_val > min_val
248
222
  ? (prop - min_val) / (max_val - min_val)
249
223
  : 0.5
250
- return get_interpolator(color_scale)(normalized)
224
+ return get_d3_interpolator(color_scale as D3InterpolateName)(normalized)
251
225
  }
252
226
  // Spin coloring
253
227
  if (color_property === `spin` && surface.spin) {
@@ -377,108 +351,30 @@
377
351
  }
378
352
  })
379
353
 
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())
354
+ // BZ centroid as rotation center
355
+ const rotation_target = $derived(polyhedron_centroid(bz_data?.vertices))
394
356
 
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),
357
+ const computed_camera_position = $derived(
358
+ camera_position || default_camera_position(scene_size),
400
359
  )
401
360
 
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],
361
+ const orbit_controls_props = $derived(build_orbit_props({
362
+ camera_projection,
427
363
  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₃`]
364
+ rotate_speed,
365
+ zoom_speed,
366
+ zoom_to_cursor,
367
+ pan_speed,
368
+ max_zoom,
369
+ min_zoom,
370
+ auto_rotate,
371
+ rotation_damping,
372
+ }))
447
373
 
448
374
  // 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
- })
375
+ const bz_geometry = $derived(
376
+ bz_data ? polyhedron_geometry(bz_data.vertices, bz_data.faces) : null,
377
+ )
482
378
 
483
379
  $effect(() => {
484
380
  const prev_geometry = bz_geometry
@@ -516,26 +412,12 @@
516
412
  return { ...base, color: surface_color }
517
413
  }
518
414
 
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
- })
415
+ // Inverse of k_lattice for Cartesian->fractional conversion (cached)
416
+ const k_lattice_inv = $derived(k_lattice_inverse(fermi_data?.k_lattice))
528
417
 
529
418
  // Throttle state for pointer move events to avoid O(n) vertex lookups causing jank
530
419
  let last_hover_time = 0
531
420
 
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
421
  // Find index of nearest vertex to a point in a surface
540
422
  function find_nearest_vertex(surface: Isosurface, point: Vec3): number {
541
423
  let [min_dist, nearest_idx] = [Infinity, 0]
@@ -564,7 +446,7 @@
564
446
  ): FermiHoverData {
565
447
  // event.point is in world space (after sym_matrix transformation)
566
448
  const position_cartesian: Vec3 = [event.point.x, event.point.y, event.point.z]
567
- const position_fractional = cartesian_to_fractional(position_cartesian)
449
+ const position_fractional = cartesian_to_fractional(k_lattice_inv, position_cartesian)
568
450
 
569
451
  // Transform world-space point to local space for nearest-vertex lookup
570
452
  // surface.vertices are in local space (raw geometry before sym_matrix)
@@ -610,26 +492,20 @@
610
492
  last_hover_time = now
611
493
  hover_data = create_hover_data(event, surface, surface_color, sym_idx, sym_matrix)
612
494
  }
495
+
496
+ const clear_hover = () => {
497
+ hover_data = null
498
+ }
613
499
  </script>
614
500
 
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}
501
+ <SceneCamera
502
+ {camera_projection}
503
+ position={computed_camera_position}
504
+ {fov}
505
+ zoom={initial_zoom}
506
+ orbit_props={orbit_controls_props}
507
+ {gizmo}
508
+ />
633
509
 
634
510
  <T.DirectionalLight position={[3, 10, 10]} intensity={directional_light} />
635
511
  <T.DirectionalLight position={[-3, -5, -10]} intensity={directional_light * 0.5} />
@@ -657,21 +533,11 @@
657
533
 
658
534
  <!-- Reciprocal lattice vectors -->
659
535
  {#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}
536
+ <ReciprocalVectors
537
+ k_lattice={fermi_data.k_lattice}
538
+ {vector_scale}
539
+ size={scene_size}
540
+ />
675
541
  {/if}
676
542
 
677
543
  <!-- Fermi surfaces (with optional symmetry tiling) -->
@@ -697,9 +563,7 @@
697
563
  {renderOrder}
698
564
  onpointermove={(event: ThreltePointerEvent) =>
699
565
  handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
700
- onpointerleave={() => {
701
- hover_data = null
702
- }}
566
+ onpointerleave={clear_hover}
703
567
  >
704
568
  <T.MeshBasicMaterial
705
569
  color={surface_color}
@@ -720,9 +584,7 @@
720
584
  renderOrder={renderOrder * 2}
721
585
  onpointermove={(event: ThreltePointerEvent) =>
722
586
  handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
723
- onpointerleave={() => {
724
- hover_data = null
725
- }}
587
+ onpointerleave={clear_hover}
726
588
  >
727
589
  <T.MeshStandardMaterial
728
590
  {...get_material_props(surface_color, use_vertex_colors, surface_idx, `back`)}
@@ -739,9 +601,7 @@
739
601
  renderOrder={renderOrder * 2 + 1}
740
602
  onpointermove={(event: ThreltePointerEvent) =>
741
603
  handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
742
- onpointerleave={() => {
743
- hover_data = null
744
- }}
604
+ onpointerleave={clear_hover}
745
605
  >
746
606
  <T.MeshStandardMaterial
747
607
  {...get_material_props(
@@ -764,9 +624,7 @@
764
624
  {renderOrder}
765
625
  onpointermove={(event: ThreltePointerEvent) =>
766
626
  handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
767
- onpointerleave={() => {
768
- hover_data = null
769
- }}
627
+ onpointerleave={clear_hover}
770
628
  >
771
629
  <T.MeshStandardMaterial
772
630
  {...get_material_props(
@@ -785,10 +643,3 @@
785
643
  {/if}
786
644
  {/each}
787
645
  </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>
@@ -1,15 +1,11 @@
1
1
  import type { BrillouinZoneData } from '../brillouin';
2
2
  import type { Vec3 } from '../math';
3
- import type { CameraProjection } from '../settings';
4
- import * as extras from '@threlte/extras';
5
- import type { ComponentProps } from 'svelte';
6
- import type { Camera, Scene } from 'three';
3
+ import type { SceneControlProps } from '../scene';
7
4
  import type { ColorProperty, FermiHoverData, FermiSurfaceData, RepresentationMode } from './types';
8
- type $$ComponentProps = {
5
+ type $$ComponentProps = SceneControlProps & {
9
6
  fermi_data?: FermiSurfaceData;
10
7
  bz_data?: BrillouinZoneData;
11
8
  camera_position?: Vec3 | undefined;
12
- camera_projection?: CameraProjection;
13
9
  color_property?: ColorProperty;
14
10
  color_scale?: string;
15
11
  representation?: RepresentationMode;
@@ -27,24 +23,8 @@ type $$ComponentProps = {
27
23
  clip_position?: number;
28
24
  clip_flip?: boolean;
29
25
  vector_scale?: number;
30
- rotation_damping?: number;
31
- max_zoom?: number;
32
- min_zoom?: number;
33
- rotate_speed?: number;
34
- zoom_speed?: number;
35
- pan_speed?: number;
36
- zoom_to_cursor?: boolean;
37
- fov?: number;
38
- initial_zoom?: number;
39
- ambient_light?: number;
40
- directional_light?: number;
41
- gizmo?: boolean | ComponentProps<typeof extras.Gizmo>;
42
- auto_rotate?: number;
43
- camera_is_moving?: boolean;
44
- scene?: Scene;
45
- camera?: Camera;
46
26
  hover_data?: FermiHoverData | null;
47
27
  };
48
- declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "camera_position" | "camera_projection" | "camera" | "scene" | "camera_is_moving" | "surface_opacity" | "bz_data" | "hover_data" | "fermi_data">;
28
+ declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "scene" | "camera" | "camera_projection" | "camera_position" | "surface_opacity" | "bz_data" | "hover_data" | "fermi_data">;
49
29
  type FermiSurfaceScene = ReturnType<typeof FermiSurfaceScene>;
50
30
  export default FermiSurfaceScene;
@@ -1,14 +1,11 @@
1
1
  <script lang="ts">
2
2
  // Tooltip component for Fermi surface hover information
3
3
  // Displays band index, spin, k-coordinates, and optional property values
4
- import { format_num, format_vec3 } from '../labels'
5
- import { TooltipContent } from '../tooltip'
4
+ import { format_num } from '../labels'
5
+ import { KCoords, TooltipContent } from '../tooltip'
6
6
  import type { FermiHoverData, FermiTooltipProp } from './types'
7
7
 
8
- let {
9
- hover_data,
10
- tooltip,
11
- }: {
8
+ let { hover_data, tooltip }: {
12
9
  hover_data: FermiHoverData
13
10
  tooltip?: FermiTooltipProp
14
11
  } = $props()
@@ -23,18 +20,10 @@
23
20
  {/if}
24
21
  </div>
25
22
 
26
- <div class="coords-section">
27
- <div class="coord-row">
28
- <span class="coord-label">k (Å⁻¹):</span>
29
- <span class="coord-values">{format_vec3(hover_data.position_cartesian)}</span>
30
- </div>
31
- {#if hover_data.position_fractional}
32
- <div class="coord-row">
33
- <span class="coord-label">k (frac):</span>
34
- <span class="coord-values">{format_vec3(hover_data.position_fractional)}</span>
35
- </div>
36
- {/if}
37
- </div>
23
+ <KCoords
24
+ cartesian={hover_data.position_cartesian}
25
+ fractional={hover_data.position_fractional}
26
+ />
38
27
 
39
28
  {#if hover_data.property_value != null}
40
29
  <div class="property-row">
@@ -56,7 +45,7 @@
56
45
 
57
46
  <style>
58
47
  .tooltip-content {
59
- max-width: var(--tooltip-max-width, 220px);
48
+ max-width: var(--tooltip-max-width, 250px);
60
49
  }
61
50
  .tooltip-title {
62
51
  display: flex;
@@ -78,21 +67,6 @@
78
67
  background: #377eb8;
79
68
  color: white;
80
69
  }
81
- .coords-section {
82
- margin: 4px 0;
83
- }
84
- .coord-row {
85
- display: flex;
86
- gap: 4px;
87
- font-size: 0.9em;
88
- }
89
- .coord-label {
90
- opacity: 0.8;
91
- min-width: 55px;
92
- }
93
- .coord-values {
94
- font-family: monospace;
95
- }
96
70
  .property-row {
97
71
  margin-top: 4px;
98
72
  font-size: 0.9em;