matterviz 0.4.0 → 0.4.2

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 (527) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +12 -14
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/app.css +53 -0
  6. package/dist/brillouin/BrillouinZone.svelte +132 -219
  7. package/dist/brillouin/BrillouinZone.svelte.d.ts +9 -20
  8. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  9. package/dist/brillouin/BrillouinZoneExportPane.svelte +47 -96
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +15 -42
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
  13. package/dist/brillouin/BrillouinZoneScene.svelte +63 -230
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +3 -23
  15. package/dist/brillouin/ReciprocalVectors.svelte +39 -0
  16. package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
  17. package/dist/brillouin/compute.d.ts +2 -0
  18. package/dist/brillouin/compute.js +80 -77
  19. package/dist/brillouin/geometry.d.ts +8 -0
  20. package/dist/brillouin/geometry.js +57 -0
  21. package/dist/brillouin/index.d.ts +2 -0
  22. package/dist/brillouin/index.js +2 -0
  23. package/dist/brillouin/types.d.ts +2 -2
  24. package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
  25. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
  26. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +143 -246
  27. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
  28. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +652 -976
  29. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
  30. package/dist/chempot-diagram/async-compute.svelte.js +1 -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 +3 -3
  34. package/dist/chempot-diagram/compute.js +3 -1
  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.d.ts +0 -4
  45. package/dist/colors/index.js +21 -22
  46. package/dist/composition/BarChart.svelte +37 -31
  47. package/dist/composition/BubbleChart.svelte +17 -17
  48. package/dist/composition/Composition.svelte +7 -11
  49. package/dist/composition/Formula.svelte +18 -25
  50. package/dist/composition/FormulaFilter.svelte +96 -98
  51. package/dist/composition/PieChart.svelte +60 -46
  52. package/dist/composition/chem-sys.js +3 -2
  53. package/dist/composition/format.js +4 -3
  54. package/dist/composition/index.d.ts +2 -0
  55. package/dist/composition/index.js +14 -0
  56. package/dist/composition/parse.d.ts +2 -3
  57. package/dist/composition/parse.js +27 -28
  58. package/dist/constants.js +11 -9
  59. package/dist/controls.d.ts +1 -0
  60. package/dist/controls.js +0 -1
  61. package/dist/convex-hull/ConvexHull.svelte +20 -25
  62. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
  63. package/dist/convex-hull/ConvexHull2D.svelte +176 -256
  64. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  65. package/dist/convex-hull/ConvexHull3D.svelte +269 -804
  66. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  67. package/dist/convex-hull/ConvexHull4D.svelte +236 -755
  68. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  69. package/dist/convex-hull/ConvexHullChrome.svelte +264 -0
  70. package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
  71. package/dist/convex-hull/ConvexHullControls.svelte +128 -49
  72. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
  73. package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
  74. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
  75. package/dist/convex-hull/ConvexHullStats.svelte +210 -351
  76. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
  77. package/dist/convex-hull/ConvexHullTooltip.svelte +16 -14
  78. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
  79. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  80. package/dist/convex-hull/StructurePopup.svelte +17 -21
  81. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  82. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  83. package/dist/convex-hull/barycentric-coords.d.ts +2 -4
  84. package/dist/convex-hull/barycentric-coords.js +6 -33
  85. package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
  86. package/dist/convex-hull/canvas-interactions.svelte.js +279 -0
  87. package/dist/convex-hull/helpers.d.ts +47 -17
  88. package/dist/convex-hull/helpers.js +186 -101
  89. package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
  90. package/dist/convex-hull/hull-state.svelte.js +124 -0
  91. package/dist/convex-hull/index.d.ts +9 -7
  92. package/dist/convex-hull/index.js +7 -2
  93. package/dist/convex-hull/thermodynamics.js +109 -937
  94. package/dist/convex-hull/types.d.ts +12 -4
  95. package/dist/convex-hull/types.js +12 -0
  96. package/dist/coordination/CoordinationBarPlot.svelte +41 -43
  97. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  98. package/dist/coordination/calc-coordination.d.ts +1 -1
  99. package/dist/coordination/calc-coordination.js +28 -25
  100. package/dist/element/BohrAtom.svelte +6 -8
  101. package/dist/element/ElementHeading.svelte +4 -1
  102. package/dist/element/ElementPhoto.svelte +11 -9
  103. package/dist/element/ElementStats.svelte +12 -10
  104. package/dist/element/ElementTile.svelte +24 -29
  105. package/dist/element/ElementTile.svelte.d.ts +1 -1
  106. package/dist/element/Nucleus.svelte +4 -2
  107. package/dist/element/data.d.ts +1 -2
  108. package/dist/element/helpers.d.ts +4 -0
  109. package/dist/element/helpers.js +18 -0
  110. package/dist/element/index.d.ts +1 -0
  111. package/dist/element/index.js +3 -0
  112. package/dist/feedback/DragOverlay.svelte +5 -3
  113. package/dist/feedback/DragOverlay.svelte.d.ts +2 -1
  114. package/dist/feedback/StatusMessage.svelte +20 -7
  115. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  116. package/dist/fermi-surface/FermiSurface.svelte +78 -165
  117. package/dist/fermi-surface/FermiSurface.svelte.d.ts +9 -20
  118. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  119. package/dist/fermi-surface/FermiSurfaceScene.svelte +93 -272
  120. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
  121. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  122. package/dist/fermi-surface/compute.js +14 -13
  123. package/dist/fermi-surface/export.js +4 -15
  124. package/dist/fermi-surface/index.d.ts +0 -1
  125. package/dist/fermi-surface/index.js +0 -1
  126. package/dist/fermi-surface/parse.d.ts +1 -1
  127. package/dist/fermi-surface/parse.js +84 -97
  128. package/dist/fermi-surface/types.d.ts +2 -2
  129. package/dist/heatmap-matrix/HeatmapMatrix.svelte +161 -185
  130. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +6 -5
  131. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +12 -9
  132. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
  133. package/dist/heatmap-matrix/index.d.ts +8 -2
  134. package/dist/icons.d.ts +4 -0
  135. package/dist/icons.js +4 -0
  136. package/dist/index.d.ts +1 -0
  137. package/dist/index.js +1 -0
  138. package/dist/io/ExportPane.svelte +170 -0
  139. package/dist/io/ExportPane.svelte.d.ts +17 -0
  140. package/dist/io/decompress.d.ts +2 -1
  141. package/dist/io/decompress.js +22 -36
  142. package/dist/io/export.d.ts +9 -1
  143. package/dist/io/export.js +37 -29
  144. package/dist/io/fetch.d.ts +2 -4
  145. package/dist/io/fetch.js +0 -11
  146. package/dist/io/file-drop.d.ts +7 -0
  147. package/dist/io/file-drop.js +13 -0
  148. package/dist/io/index.d.ts +1 -0
  149. package/dist/io/index.js +3 -0
  150. package/dist/io/is-binary.d.ts +9 -0
  151. package/dist/io/is-binary.js +45 -1
  152. package/dist/io/types.d.ts +13 -0
  153. package/dist/io/url-drop.js +13 -25
  154. package/dist/isosurface/Isosurface.svelte +17 -23
  155. package/dist/isosurface/IsosurfaceControls.svelte +37 -42
  156. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  157. package/dist/isosurface/parse-vaspwave.js +138 -0
  158. package/dist/isosurface/parse.js +50 -48
  159. package/dist/labels.d.ts +6 -2
  160. package/dist/labels.js +44 -14
  161. package/dist/layout/FullscreenButton.svelte +34 -0
  162. package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
  163. package/dist/layout/FullscreenToggle.svelte +12 -12
  164. package/dist/layout/InfoCard.svelte +7 -18
  165. package/dist/layout/InfoTag.svelte +1 -3
  166. package/dist/layout/NumberRangeInput.svelte +46 -0
  167. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  168. package/dist/layout/PropertyFilter.svelte +2 -6
  169. package/dist/layout/SettingsSection.svelte +21 -17
  170. package/dist/layout/SubpageGrid.svelte +3 -1
  171. package/dist/layout/ViewerChrome.svelte +115 -0
  172. package/dist/layout/ViewerChrome.svelte.d.ts +18 -0
  173. package/dist/layout/fullscreen.d.ts +4 -0
  174. package/dist/layout/fullscreen.js +3 -5
  175. package/dist/layout/fullscreen.svelte.d.ts +8 -0
  176. package/dist/layout/fullscreen.svelte.js +36 -0
  177. package/dist/layout/index.d.ts +4 -0
  178. package/dist/layout/index.js +4 -0
  179. package/dist/layout/json-tree/JsonNode.svelte +8 -11
  180. package/dist/layout/json-tree/JsonTree.svelte +53 -77
  181. package/dist/layout/json-tree/JsonValue.svelte +7 -15
  182. package/dist/layout/json-tree/utils.js +14 -23
  183. package/dist/math.d.ts +9 -3
  184. package/dist/math.js +37 -21
  185. package/dist/overlays/ContextMenu.svelte +4 -2
  186. package/dist/overlays/CopyButton.svelte +11 -5
  187. package/dist/overlays/DragControlTab.svelte +6 -1
  188. package/dist/overlays/DraggablePane.svelte +81 -26
  189. package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
  190. package/dist/overlays/GlassChip.svelte +30 -0
  191. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  192. package/dist/overlays/InfoPaneCards.svelte +11 -23
  193. package/dist/overlays/index.d.ts +11 -0
  194. package/dist/overlays/index.js +26 -0
  195. package/dist/overlays/portal.d.ts +2 -0
  196. package/dist/overlays/portal.js +14 -0
  197. package/dist/periodic-table/PeriodicTable.svelte +115 -146
  198. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  199. package/dist/periodic-table/PeriodicTableControls.svelte +11 -63
  200. package/dist/periodic-table/TableInset.svelte +9 -4
  201. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
  202. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  203. package/dist/phase-diagram/PhaseDiagramControls.svelte +73 -96
  204. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
  205. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
  206. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
  207. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +49 -134
  208. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
  209. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  210. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  211. package/dist/phase-diagram/build-diagram.js +3 -3
  212. package/dist/phase-diagram/colors.js +1 -1
  213. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  214. package/dist/phase-diagram/parse.d.ts +2 -1
  215. package/dist/phase-diagram/parse.js +15 -15
  216. package/dist/phase-diagram/svg-to-diagram.js +21 -15
  217. package/dist/phase-diagram/utils.js +2 -3
  218. package/dist/plot/bar/BarPlot.svelte +494 -692
  219. package/dist/plot/bar/BarPlot.svelte.d.ts +9 -15
  220. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  221. package/dist/plot/bar/BarPlotControls.svelte.d.ts +5 -7
  222. package/dist/plot/bar/SpacegroupBarPlot.svelte +31 -37
  223. package/dist/plot/bar/data.d.ts +5 -4
  224. package/dist/plot/bar/data.js +2 -1
  225. package/dist/plot/box/BoxPlot.svelte +361 -439
  226. package/dist/plot/box/BoxPlot.svelte.d.ts +6 -3
  227. package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
  228. package/dist/plot/box/Violin.svelte.d.ts +2 -1
  229. package/dist/plot/box/box-plot.d.ts +3 -2
  230. package/dist/plot/box/box-plot.js +6 -3
  231. package/dist/plot/box/kde.d.ts +2 -1
  232. package/dist/plot/box/kde.js +4 -4
  233. package/dist/plot/core/auto-place.d.ts +1 -1
  234. package/dist/plot/core/auto-place.js +5 -2
  235. package/dist/plot/core/axis-utils.d.ts +12 -7
  236. package/dist/plot/core/axis-utils.js +48 -48
  237. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  238. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  239. package/dist/plot/core/components/ColorBar.svelte +106 -111
  240. package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
  241. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  242. package/dist/plot/core/components/FillArea.svelte +10 -17
  243. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  244. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  245. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  246. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  247. package/dist/plot/core/components/Line.svelte +21 -11
  248. package/dist/plot/core/components/Line.svelte.d.ts +5 -2
  249. package/dist/plot/core/components/PlotAxis.svelte +42 -18
  250. package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
  251. package/dist/plot/core/components/PlotControls.svelte +65 -41
  252. package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
  253. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  254. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  255. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  256. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  257. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  258. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  259. package/dist/plot/core/components/ReferenceLine3D.svelte +56 -59
  260. package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
  261. package/dist/plot/core/components/ReferencePlane.svelte +9 -10
  262. package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
  263. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  264. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  265. package/dist/plot/core/components/index.d.ts +1 -0
  266. package/dist/plot/core/components/index.js +1 -0
  267. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  268. package/dist/plot/core/data-cleaning-signal.js +467 -0
  269. package/dist/plot/core/data-cleaning.d.ts +2 -42
  270. package/dist/plot/core/data-cleaning.js +29 -476
  271. package/dist/plot/core/data-transform.js +9 -5
  272. package/dist/plot/core/fill-utils.d.ts +7 -4
  273. package/dist/plot/core/fill-utils.js +34 -9
  274. package/dist/plot/core/index.d.ts +1 -0
  275. package/dist/plot/core/index.js +1 -0
  276. package/dist/plot/core/interactions.d.ts +5 -1
  277. package/dist/plot/core/interactions.js +14 -2
  278. package/dist/plot/core/layout.d.ts +3 -1
  279. package/dist/plot/core/layout.js +22 -13
  280. package/dist/plot/core/marginals.d.ts +170 -0
  281. package/dist/plot/core/marginals.js +436 -0
  282. package/dist/plot/core/pan-zoom.svelte.d.ts +35 -0
  283. package/dist/plot/core/pan-zoom.svelte.js +221 -0
  284. package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -0
  286. package/dist/plot/core/reference-line.d.ts +10 -10
  287. package/dist/plot/core/reference-line.js +7 -7
  288. package/dist/plot/core/scales.d.ts +40 -25
  289. package/dist/plot/core/scales.js +49 -21
  290. package/dist/plot/core/svg.d.ts +2 -1
  291. package/dist/plot/core/types/fills.d.ts +101 -0
  292. package/dist/plot/core/types/fills.js +15 -0
  293. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  294. package/dist/plot/core/types/plot-3d.js +4 -0
  295. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  296. package/dist/plot/core/types/reference-lines.js +9 -0
  297. package/dist/plot/core/types.d.ts +47 -331
  298. package/dist/plot/core/types.js +23 -20
  299. package/dist/plot/core/utils/hierarchy-chart.d.ts +51 -0
  300. package/dist/plot/core/utils/hierarchy-chart.js +179 -0
  301. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  302. package/dist/plot/core/utils/hierarchy-labels.js +99 -0
  303. package/dist/plot/core/utils/label-placement.d.ts +1 -1
  304. package/dist/plot/core/utils/label-placement.js +5 -5
  305. package/dist/plot/core/utils.d.ts +2 -1
  306. package/dist/plot/histogram/Histogram.svelte +373 -631
  307. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  308. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  309. package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
  310. package/dist/plot/histogram/histogram.d.ts +31 -0
  311. package/dist/plot/histogram/histogram.js +70 -0
  312. package/dist/plot/histogram/index.d.ts +1 -0
  313. package/dist/plot/histogram/index.js +1 -0
  314. package/dist/plot/index.d.ts +1 -0
  315. package/dist/plot/index.js +1 -0
  316. package/dist/plot/sankey/Sankey.svelte +79 -73
  317. package/dist/plot/sankey/Sankey.svelte.d.ts +3 -3
  318. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  319. package/dist/plot/sankey/sankey.js +3 -1
  320. package/dist/plot/scatter/BinnedScatterPlot.svelte +264 -112
  321. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +11 -4
  322. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  323. package/dist/plot/scatter/ScatterPlot.svelte +623 -821
  324. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +9 -15
  325. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  326. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  327. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  328. package/dist/plot/scatter/binned-scatter-types.d.ts +6 -12
  329. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  330. package/dist/plot/scatter/index.d.ts +1 -1
  331. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  332. package/dist/plot/scatter/scatter-data.js +8 -7
  333. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +40 -60
  334. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
  335. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +17 -15
  336. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
  337. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +232 -234
  338. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
  339. package/dist/plot/scatter-3d/Surface3D.svelte +9 -17
  340. package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
  341. package/dist/plot/sunburst/Sunburst.svelte +256 -338
  342. package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
  343. package/dist/plot/sunburst/index.d.ts +1 -1
  344. package/dist/plot/sunburst/index.js +2 -1
  345. package/dist/plot/sunburst/render.d.ts +2 -2
  346. package/dist/plot/sunburst/render.js +47 -22
  347. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  348. package/dist/plot/sunburst/sunburst.js +14 -4
  349. package/dist/plot/treemap/Treemap.svelte +907 -0
  350. package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
  351. package/dist/plot/treemap/index.d.ts +3 -0
  352. package/dist/plot/treemap/index.js +4 -0
  353. package/dist/plot/treemap/treemap.d.ts +26 -0
  354. package/dist/plot/treemap/treemap.js +99 -0
  355. package/dist/rdf/RdfPlot.svelte +22 -26
  356. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  357. package/dist/rdf/calc-rdf.js +4 -8
  358. package/dist/sanitize.js +14 -3
  359. package/dist/scene/SceneCamera.svelte +62 -0
  360. package/dist/scene/SceneCamera.svelte.d.ts +19 -0
  361. package/dist/scene/bind-renderer.svelte.d.ts +2 -0
  362. package/dist/scene/bind-renderer.svelte.js +22 -0
  363. package/dist/scene/index.d.ts +4 -0
  364. package/dist/scene/index.js +5 -0
  365. package/dist/scene/props.js +52 -0
  366. package/dist/scene/types.d.ts +26 -0
  367. package/dist/scene/types.js +1 -0
  368. package/dist/settings.d.ts +33 -11
  369. package/dist/settings.js +136 -51
  370. package/dist/spectral/Bands.svelte +231 -237
  371. package/dist/spectral/Bands.svelte.d.ts +3 -2
  372. package/dist/spectral/BandsAndDos.svelte +29 -29
  373. package/dist/spectral/BrillouinBandsDos.svelte +21 -29
  374. package/dist/spectral/Dos.svelte +75 -77
  375. package/dist/spectral/Dos.svelte.d.ts +2 -1
  376. package/dist/spectral/helpers.d.ts +9 -9
  377. package/dist/spectral/helpers.js +66 -70
  378. package/dist/state.svelte.d.ts +0 -7
  379. package/dist/state.svelte.js +5 -24
  380. package/dist/structure/Arrow.svelte +6 -21
  381. package/dist/structure/ArrowInstances.svelte +160 -0
  382. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  383. package/dist/structure/AtomLegend.svelte +115 -75
  384. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  385. package/dist/structure/Bond.svelte +31 -23
  386. package/dist/structure/CanvasTooltip.svelte +16 -3
  387. package/dist/structure/CellSelect.svelte +22 -29
  388. package/dist/structure/CellSelect.svelte.d.ts +2 -1
  389. package/dist/structure/Cylinder.svelte +24 -40
  390. package/dist/structure/InstancedAtoms.svelte +114 -0
  391. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  392. package/dist/structure/Lattice.svelte +85 -149
  393. package/dist/structure/SiteLabels.svelte +122 -0
  394. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  395. package/dist/structure/Structure.svelte +725 -735
  396. package/dist/structure/Structure.svelte.d.ts +8 -16
  397. package/dist/structure/StructureCarousel.svelte +630 -0
  398. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  399. package/dist/structure/StructureControls.svelte +298 -325
  400. package/dist/structure/StructureControls.svelte.d.ts +5 -3
  401. package/dist/structure/StructureExportPane.svelte +62 -168
  402. package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
  403. package/dist/structure/StructureInfoPane.svelte +77 -69
  404. package/dist/structure/StructureInfoPane.svelte.d.ts +6 -6
  405. package/dist/structure/StructureScene.svelte +758 -600
  406. package/dist/structure/StructureScene.svelte.d.ts +24 -20
  407. package/dist/structure/StructureViewport.svelte +386 -0
  408. package/dist/structure/StructureViewport.svelte.d.ts +63 -0
  409. package/dist/structure/atom-label-placement.d.ts +18 -0
  410. package/dist/structure/atom-label-placement.js +115 -0
  411. package/dist/structure/atom-properties.d.ts +3 -1
  412. package/dist/structure/atom-properties.js +115 -54
  413. package/dist/structure/bond-order-perception.js +2 -4
  414. package/dist/structure/bonding.d.ts +12 -2
  415. package/dist/structure/bonding.js +172 -73
  416. package/dist/structure/edit-history.d.ts +6 -0
  417. package/dist/structure/edit-history.js +27 -0
  418. package/dist/structure/export.d.ts +25 -4
  419. package/dist/structure/export.js +103 -153
  420. package/dist/structure/format-detect.d.ts +1 -0
  421. package/dist/structure/format-detect.js +22 -0
  422. package/dist/structure/geometry.d.ts +9 -0
  423. package/dist/structure/geometry.js +27 -0
  424. package/dist/structure/index.d.ts +18 -1
  425. package/dist/structure/index.js +15 -2
  426. package/dist/structure/measure.d.ts +1 -1
  427. package/dist/structure/measure.js +6 -12
  428. package/dist/structure/parse.d.ts +5 -3
  429. package/dist/structure/parse.js +551 -567
  430. package/dist/structure/partial-occupancy.d.ts +0 -1
  431. package/dist/structure/partial-occupancy.js +5 -3
  432. package/dist/structure/pbc.d.ts +1 -1
  433. package/dist/structure/pbc.js +204 -51
  434. package/dist/structure/polyhedra.d.ts +40 -0
  435. package/dist/structure/polyhedra.js +587 -0
  436. package/dist/structure/site.d.ts +4 -0
  437. package/dist/structure/site.js +1 -0
  438. package/dist/structure/supercell.d.ts +1 -2
  439. package/dist/structure/supercell.js +10 -15
  440. package/dist/structure/validation.js +5 -6
  441. package/dist/symmetry/SymmetryElementControls.svelte +69 -0
  442. package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
  443. package/dist/symmetry/SymmetryElements.svelte +350 -0
  444. package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
  445. package/dist/symmetry/SymmetryStats.svelte +142 -49
  446. package/dist/symmetry/WyckoffTable.svelte +58 -16
  447. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
  448. package/dist/symmetry/cell-transform.js +8 -14
  449. package/dist/symmetry/index.d.ts +15 -4
  450. package/dist/symmetry/index.js +308 -81
  451. package/dist/symmetry/spacegroups.d.ts +5 -1
  452. package/dist/symmetry/spacegroups.js +18 -3
  453. package/dist/symmetry/symmetry-elements.d.ts +33 -0
  454. package/dist/symmetry/symmetry-elements.js +521 -0
  455. package/dist/symmetry/wyckoff-db.d.ts +9 -0
  456. package/dist/symmetry/wyckoff-db.js +87 -0
  457. package/dist/table/HeatmapTable.svelte +1104 -378
  458. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  459. package/dist/table/ToggleMenu.svelte +5 -12
  460. package/dist/table/index.d.ts +21 -6
  461. package/dist/table/index.js +34 -21
  462. package/dist/theme/ThemeControl.svelte +16 -8
  463. package/dist/theme/index.d.ts +1 -5
  464. package/dist/theme/index.js +4 -10
  465. package/dist/theme/themes.mjs +14 -7
  466. package/dist/tooltip/KCoords.svelte +4 -1
  467. package/dist/tooltip/TooltipContent.svelte +2 -5
  468. package/dist/trajectory/Trajectory.svelte +556 -352
  469. package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
  470. package/dist/trajectory/TrajectoryError.svelte +11 -8
  471. package/dist/trajectory/TrajectoryExportPane.svelte +28 -54
  472. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
  473. package/dist/trajectory/TrajectoryInfoPane.svelte +88 -99
  474. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
  475. package/dist/trajectory/constants.js +6 -2
  476. package/dist/trajectory/extract.js +73 -71
  477. package/dist/trajectory/format-detect.d.ts +0 -1
  478. package/dist/trajectory/format-detect.js +13 -17
  479. package/dist/trajectory/frame-reader.d.ts +2 -1
  480. package/dist/trajectory/frame-reader.js +74 -136
  481. package/dist/trajectory/helpers.d.ts +12 -2
  482. package/dist/trajectory/helpers.js +68 -37
  483. package/dist/trajectory/index.d.ts +1 -0
  484. package/dist/trajectory/index.js +3 -0
  485. package/dist/trajectory/parse/ase.d.ts +9 -1
  486. package/dist/trajectory/parse/ase.js +47 -32
  487. package/dist/trajectory/parse/diagnostics.d.ts +3 -0
  488. package/dist/trajectory/parse/diagnostics.js +14 -0
  489. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  490. package/dist/trajectory/parse/h5-utils.js +109 -0
  491. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  492. package/dist/trajectory/parse/hdf5.js +116 -106
  493. package/dist/trajectory/parse/index.d.ts +3 -4
  494. package/dist/trajectory/parse/index.js +68 -119
  495. package/dist/trajectory/parse/lammps.d.ts +0 -2
  496. package/dist/trajectory/parse/lammps.js +14 -16
  497. package/dist/trajectory/parse/pymatgen.d.ts +2 -0
  498. package/dist/trajectory/parse/pymatgen.js +74 -0
  499. package/dist/trajectory/parse/vasp.js +13 -9
  500. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  501. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  502. package/dist/trajectory/parse/vaspout-h5.d.ts +5 -0
  503. package/dist/trajectory/parse/vaspout-h5.js +284 -0
  504. package/dist/trajectory/parse/xyz.d.ts +9 -21
  505. package/dist/trajectory/parse/xyz.js +38 -39
  506. package/dist/trajectory/plotting.d.ts +8 -10
  507. package/dist/trajectory/plotting.js +102 -127
  508. package/dist/utils.d.ts +4 -0
  509. package/dist/utils.js +8 -1
  510. package/dist/xrd/XrdPlot.svelte +56 -85
  511. package/dist/xrd/broadening.d.ts +2 -1
  512. package/dist/xrd/broadening.js +2 -1
  513. package/dist/xrd/calc-xrd.js +8 -15
  514. package/dist/xrd/index.d.ts +2 -2
  515. package/dist/xrd/parse.d.ts +0 -1
  516. package/dist/xrd/parse.js +56 -73
  517. package/package.json +77 -36
  518. package/dist/api/mp.d.ts +0 -6
  519. package/dist/api/mp.js +0 -22
  520. package/dist/element/data.json +0 -11864
  521. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  522. package/dist/fermi-surface/marching-cubes.js +0 -2
  523. package/dist/plot/core/hover-lock.svelte.d.ts +0 -14
  524. package/dist/plot/core/hover-lock.svelte.js +0 -45
  525. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  526. package/dist/structure/label-placement.d.ts +0 -14
  527. package/dist/structure/label-placement.js +0 -72
@@ -1,20 +1,23 @@
1
1
  <script lang="ts">
2
- import { AXIS_COLORS, NEG_AXIS_COLORS } from '../colors'
3
2
  import type { Vec3 } from '../math'
4
3
  import * as math from '../math'
5
- import { type CameraProjection, DEFAULTS } from '../settings'
6
- import Arrow from '../structure/Arrow.svelte'
4
+ import { bind_renderer, build_orbit_props, SceneCamera } from '../scene'
5
+ import type { SceneControlProps, ThreltePointerEvent } from '../scene'
6
+ import { DEFAULTS } from '../settings'
7
7
  import Cylinder from '../structure/Cylinder.svelte'
8
- import { T, useThrelte } from '@threlte/core'
8
+ import { T } from '@threlte/core'
9
9
  import * as extras from '@threlte/extras'
10
- import type { ComponentProps } from 'svelte'
11
- import type { Camera, Scene } from 'three'
12
- import { BufferAttribute, BufferGeometry, Vector3 } from 'three'
10
+ import {
11
+ cartesian_to_fractional,
12
+ default_camera_position,
13
+ k_lattice_inverse,
14
+ k_space_size,
15
+ polyhedron_centroid,
16
+ polyhedron_geometry,
17
+ } from './geometry'
18
+ import ReciprocalVectors from './ReciprocalVectors.svelte'
13
19
  import type { BrillouinZoneData, BZHoverData, IrreducibleBZData } from './types'
14
20
 
15
- // Threlte pointer event type for mesh interactions
16
- type ThreltePointerEvent = { point: Vector3; nativeEvent: PointerEvent }
17
-
18
21
  let {
19
22
  bz_data = $bindable(),
20
23
  camera_position = $bindable(),
@@ -22,7 +25,7 @@
22
25
  surface_color = $bindable(`#4488ff`),
23
26
  surface_opacity = $bindable(0.3),
24
27
  edge_color = $bindable(`#000000`),
25
- edge_width = $bindable(0.05),
28
+ edge_width = $bindable(0.002),
26
29
  show_vectors = $bindable(true),
27
30
  vector_scale = $bindable(1.0),
28
31
  // Irreducible BZ options
@@ -43,7 +46,6 @@
43
46
  directional_light = DEFAULTS.structure.directional_light,
44
47
  gizmo = DEFAULTS.structure.show_gizmo,
45
48
  auto_rotate = DEFAULTS.structure.auto_rotate,
46
- camera_is_moving = $bindable(false),
47
49
  scene = $bindable(),
48
50
  camera = $bindable(),
49
51
  k_path_points = [],
@@ -52,10 +54,9 @@
52
54
  hovered_qpoint_index = null,
53
55
  hover_data = $bindable<BZHoverData | null>(null),
54
56
  on_kpath_hover,
55
- }: {
57
+ }: SceneControlProps & {
56
58
  bz_data?: BrillouinZoneData
57
59
  camera_position?: Vec3 | undefined
58
- camera_projection?: CameraProjection
59
60
  surface_color?: string
60
61
  surface_opacity?: number
61
62
  edge_color?: string
@@ -67,22 +68,6 @@
67
68
  ibz_data?: IrreducibleBZData | null
68
69
  ibz_color?: string
69
70
  ibz_opacity?: number
70
- rotation_damping?: number
71
- max_zoom?: number
72
- min_zoom?: number
73
- rotate_speed?: number
74
- zoom_speed?: number
75
- pan_speed?: number
76
- zoom_to_cursor?: boolean
77
- fov?: number
78
- initial_zoom?: number
79
- ambient_light?: number
80
- directional_light?: number
81
- gizmo?: boolean | ComponentProps<typeof extras.Gizmo>
82
- auto_rotate?: number
83
- camera_is_moving?: boolean
84
- scene?: Scene
85
- camera?: Camera
86
71
  k_path_points?: Vec3[]
87
72
  k_path_labels?: { position: Vec3; label: string | null }[]
88
73
  hovered_k_point?: Vec3 | null
@@ -91,87 +76,38 @@
91
76
  on_kpath_hover?: (qpoint_index: number | null) => void
92
77
  } = $props()
93
78
 
94
- const threlte = useThrelte()
95
- $effect(() => {
96
- scene = threlte.scene
97
- camera = threlte.camera.current
98
- if (threlte.renderer) {
99
- Object.assign(threlte.renderer.domElement, { __renderer: threlte.renderer })
100
- }
79
+ bind_renderer((threlte_scene, threlte_camera) => {
80
+ scene = threlte_scene
81
+ camera = threlte_camera
101
82
  })
102
83
 
103
84
  extras.interactivity()
104
85
 
105
- // Compute centroid of BZ vertices for proper rotation center
106
- const rotation_target = $derived.by((): Vec3 => {
107
- if (!bz_data?.vertices || bz_data.vertices.length === 0) return [0, 0, 0]
108
- const sum = bz_data.vertices.reduce(
109
- (acc, v) => math.add(acc, v),
110
- [0, 0, 0] as Vec3,
111
- )
112
- return math.scale(sum, 1 / bz_data.vertices.length)
113
- })
114
-
115
- // BZ size for camera positioning: average magnitude of k-vectors
116
- const bz_size = $derived.by(() => {
117
- if (!bz_data?.k_lattice) return 10
118
- const mags = bz_data.k_lattice.map((vec) => Math.hypot(...vec))
119
- return mags.reduce((sum, mag) => sum + mag, 0) / 3
120
- })
121
-
122
- const computed_camera_position = $derived.by(() =>
123
- camera_position || ([10, 3, 8].map((coord) => coord * Math.max(1, bz_size)) as Vec3)
86
+ // BZ centroid as rotation center; mean k-vector magnitude for camera positioning
87
+ const rotation_target = $derived(polyhedron_centroid(bz_data?.vertices))
88
+ const bz_size = $derived(k_space_size(bz_data?.k_lattice))
89
+ const computed_camera_position = $derived(
90
+ camera_position || default_camera_position(bz_size),
124
91
  )
125
92
 
126
- const gizmo_props = $derived({
127
- background: { enabled: false },
128
- className: `responsive-gizmo`,
129
- ...Object.fromEntries(
130
- [...AXIS_COLORS, ...NEG_AXIS_COLORS].map(([axis, color, hover]) => [
131
- axis,
132
- {
133
- color,
134
- labelColor: `#111`,
135
- opacity: axis.startsWith(`n`) ? 0.9 : 0.8,
136
- hover: {
137
- color: hover,
138
- labelColor: `#222`,
139
- opacity: axis.startsWith(`n`) ? 1 : 0.9,
140
- },
141
- },
142
- ]),
143
- ),
144
- ...(typeof gizmo === `object` ? gizmo : {}),
145
- offset: { left: 5, bottom: 5 },
146
- })
147
-
148
- const is_ortho = $derived(camera_projection === `orthographic`)
149
- const orbit_controls_props = $derived({
150
- position: [0, 0, 0],
151
- target: rotation_target,
152
- enableRotate: rotate_speed > 0,
153
- rotateSpeed: rotate_speed,
154
- enableZoom: zoom_speed > 0,
155
- zoomSpeed: is_ortho ? zoom_speed * 2 : zoom_speed,
156
- zoomToCursor: zoom_to_cursor,
157
- enablePan: pan_speed > 0,
158
- panSpeed: pan_speed,
159
- maxZoom: max_zoom,
160
- minZoom: min_zoom,
161
- autoRotate: Boolean(auto_rotate),
162
- autoRotateSpeed: auto_rotate,
163
- enableDamping: Boolean(rotation_damping),
164
- dampingFactor: rotation_damping,
165
- onstart: () => (camera_is_moving = true),
166
- onend: () => (camera_is_moving = false),
167
- })
168
-
169
- const vector_colors = [`red`, `green`, `blue`]
170
- const vector_labels = [`b₁`, `b₂`, `b₃`]
93
+ const orbit_controls_props = $derived(
94
+ build_orbit_props({
95
+ camera_projection,
96
+ target: rotation_target,
97
+ rotate_speed,
98
+ zoom_speed,
99
+ zoom_to_cursor,
100
+ pan_speed,
101
+ max_zoom,
102
+ min_zoom,
103
+ auto_rotate,
104
+ rotation_damping,
105
+ }),
106
+ )
171
107
 
172
108
  // K-path styling. The invisible hover proxy is twice the visible thickness so the cursor
173
109
  // snaps to the path even when it isn't directly over the thin visible segment.
174
- const KPATH_THICKNESS = 0.12
110
+ const KPATH_THICKNESS = 0.012
175
111
  const KPATH_HOVER_THICKNESS = KPATH_THICKNESS * 2
176
112
 
177
113
  // Threshold for skipping k-path segments that bridge a path discontinuity (e.g. `U|K`).
@@ -186,50 +122,11 @@
186
122
  return lens[Math.floor(lens.length / 2)] * 10
187
123
  })
188
124
 
189
- // Create mesh geometry from faces with fan triangulation
190
- function create_mesh_geometry(
191
- vertices: Vec3[],
192
- faces: number[][],
193
- ): BufferGeometry | null {
194
- if (faces.length === 0) return null
195
-
196
- const positions: number[] = []
197
- const normals: number[] = []
198
-
199
- for (const face of faces) {
200
- if (face.length < 3) continue
201
- for (let face_idx = 1; face_idx < face.length - 1; face_idx++) {
202
- const indices = [face[0], face[face_idx], face[face_idx + 1]]
203
- if (indices.some((idx) => idx < 0 || idx >= vertices.length)) continue
204
- const [v0, v1, v2] = indices.map((idx) => vertices[idx])
205
- positions.push(...v0, ...v1, ...v2)
206
-
207
- const e1: Vec3 = math.subtract(v1, v0)
208
- const e2: Vec3 = math.subtract(v2, v0)
209
- const normal_vec = math.cross_3d(e1, e2)
210
- const len = Math.hypot(...normal_vec)
211
- const norm = len > 1e-10 ? normal_vec.map((coord) => coord / len) : [0, 0, 0]
212
- normals.push(...norm, ...norm, ...norm)
213
- }
214
- }
215
-
216
- const geometry = new BufferGeometry()
217
- geometry.setAttribute(
218
- `position`,
219
- new BufferAttribute(new Float32Array(positions), 3),
220
- )
221
- geometry.setAttribute(`normal`, new BufferAttribute(new Float32Array(normals), 3))
222
- geometry.computeBoundingSphere()
223
- return geometry
224
- }
225
-
226
125
  const bz_geometry = $derived(
227
- bz_data ? create_mesh_geometry(bz_data.vertices, bz_data.faces) : null,
126
+ bz_data ? polyhedron_geometry(bz_data.vertices, bz_data.faces) : null,
228
127
  )
229
128
  const ibz_geometry = $derived(
230
- show_ibz && ibz_data
231
- ? create_mesh_geometry(ibz_data.vertices, ibz_data.faces)
232
- : null,
129
+ show_ibz && ibz_data ? polyhedron_geometry(ibz_data.vertices, ibz_data.faces) : null,
233
130
  )
234
131
 
235
132
  // Separate effects to avoid disposing one geometry when only the other changes
@@ -242,21 +139,8 @@
242
139
  return () => prev?.dispose()
243
140
  })
244
141
 
245
- // Compute inverse of k_lattice for Cartesian->fractional conversion
246
- const k_lattice_inv = $derived.by(() => {
247
- if (!bz_data?.k_lattice) return null
248
- try {
249
- return math.matrix_inverse_3x3(bz_data.k_lattice)
250
- } catch {
251
- return null
252
- }
253
- })
254
-
255
- // Convert Cartesian k-coordinates to fractional (reciprocal lattice units)
256
- function cartesian_to_fractional(cart: Vec3): Vec3 | null {
257
- if (!k_lattice_inv) return null
258
- return math.mat3x3_vec3_multiply(k_lattice_inv, cart)
259
- }
142
+ // Inverse of k_lattice for Cartesian->fractional conversion
143
+ const k_lattice_inv = $derived(k_lattice_inverse(bz_data?.k_lattice))
260
144
 
261
145
  // Throttle state for pointer move events
262
146
  let last_hover_time = 0
@@ -282,21 +166,17 @@
282
166
  })
283
167
 
284
168
  // Create hover data from pointer event
285
- function create_hover_data(
286
- event: ThreltePointerEvent,
287
- is_ibz: boolean,
288
- ): BZHoverData | null {
169
+ function create_hover_data(event: ThreltePointerEvent, is_ibz: boolean): BZHoverData | null {
289
170
  if (!bz_data) return null
290
171
 
291
172
  const position_cartesian: Vec3 = [event.point.x, event.point.y, event.point.z]
292
- const position_fractional = cartesian_to_fractional(position_cartesian)
173
+ const position_fractional = cartesian_to_fractional(k_lattice_inv, position_cartesian)
293
174
 
294
175
  const { clientX, clientY } = event.nativeEvent
295
176
  const ibz_vol = ibz_data?.volume ?? null
296
177
  // Round to nearest integer since symmetry multiplicity is the point group order
297
- const symmetry_multiplicity = ibz_vol != null && ibz_vol > 0
298
- ? Math.round(bz_data.volume / ibz_vol)
299
- : null
178
+ const symmetry_multiplicity =
179
+ ibz_vol != null && ibz_vol > 0 ? Math.round(bz_data.volume / ibz_vol) : null
300
180
 
301
181
  return {
302
182
  position_cartesian,
@@ -342,24 +222,14 @@
342
222
  }
343
223
  </script>
344
224
 
345
- {#if camera_projection === `perspective`}
346
- <T.PerspectiveCamera makeDefault position={computed_camera_position} {fov}>
347
- <extras.OrbitControls {...orbit_controls_props}>
348
- {#if gizmo}<extras.Gizmo {...gizmo_props} />{/if}
349
- </extras.OrbitControls>
350
- </T.PerspectiveCamera>
351
- {:else}
352
- <T.OrthographicCamera
353
- makeDefault
354
- position={computed_camera_position}
355
- zoom={initial_zoom}
356
- near={-100}
357
- >
358
- <extras.OrbitControls {...orbit_controls_props}>
359
- {#if gizmo}<extras.Gizmo {...gizmo_props} />{/if}
360
- </extras.OrbitControls>
361
- </T.OrthographicCamera>
362
- {/if}
225
+ <SceneCamera
226
+ {camera_projection}
227
+ position={computed_camera_position}
228
+ {fov}
229
+ zoom={initial_zoom}
230
+ orbit_props={orbit_controls_props}
231
+ {gizmo}
232
+ />
363
233
 
364
234
  <T.DirectionalLight position={[3, 10, 10]} intensity={directional_light} />
365
235
  <T.AmbientLight intensity={ambient_light} />
@@ -370,7 +240,7 @@
370
240
  {#if bz_geometry}
371
241
  <T.Mesh
372
242
  geometry={bz_geometry}
373
- onpointermove={(e: ThreltePointerEvent) => handle_hover(e, false)}
243
+ onpointermove={(event: ThreltePointerEvent) => handle_hover(event, false)}
374
244
  onpointerleave={() => handle_leave(false)}
375
245
  >
376
246
  <T.MeshStandardMaterial
@@ -393,7 +263,7 @@
393
263
  {#if show_ibz && ibz_geometry}
394
264
  <T.Mesh
395
265
  geometry={ibz_geometry}
396
- onpointermove={(e: ThreltePointerEvent) => handle_hover(e, true)}
266
+ onpointermove={(event: ThreltePointerEvent) => handle_hover(event, true)}
397
267
  onpointerleave={() => handle_leave(true)}
398
268
  >
399
269
  <T.MeshStandardMaterial
@@ -416,43 +286,17 @@
416
286
 
417
287
  <!-- Reciprocal lattice vectors -->
418
288
  {#if show_vectors && bz_data.k_lattice}
419
- {#each bz_data.k_lattice as vec, idx (idx)}
420
- {@const scaled_vec = vec.map((coord) => coord * vector_scale) as Vec3}
421
- {@const label_position = scaled_vec.map((coord) => coord * 1.15) as Vec3}
422
- <Arrow
423
- position={[0, 0, 0]}
424
- vector={scaled_vec}
425
- color={vector_colors[idx]}
426
- scale={1}
427
- shaft_radius={bz_size * 0.008}
428
- arrow_head_radius={bz_size * 0.028}
429
- arrow_head_length={-0.1}
430
- />
431
- <!-- Vector label beyond tip -->
432
- <extras.HTML center position={label_position}>
433
- <span
434
- style:color={vector_colors[idx]}
435
- style:font-size="1.2em"
436
- >
437
- {vector_labels[idx]}
438
- </span>
439
- </extras.HTML>
440
- {/each}
289
+ <ReciprocalVectors k_lattice={bz_data.k_lattice} {vector_scale} size={bz_size} />
441
290
  {/if}
442
291
 
443
292
  <!-- K-path visualization -->
444
293
  {#if k_path_points && k_path_points.length > 1}
445
- {#each k_path_points.slice(0, -1) as
446
- from_point,
447
- idx
448
- (`${from_point}-${k_path_points[idx + 1]}#${idx}`)
449
- }
294
+ {#each k_path_points.slice(0, -1) as from_point, idx (`${from_point}-${k_path_points[idx + 1]}#${idx}`)}
450
295
  {@const to_point = k_path_points[idx + 1]}
451
- {@const seg_len = Math.hypot(
452
- ...math.subtract(to_point as Vec3, from_point as Vec3),
453
- )}
454
- {@const is_hovered = hovered_qpoint_index !== null &&
455
- (idx === hovered_qpoint_index || idx === hovered_qpoint_index - 1)}
296
+ {@const seg_len = Math.hypot(...math.subtract(to_point as Vec3, from_point as Vec3))}
297
+ {@const is_hovered =
298
+ hovered_qpoint_index !== null &&
299
+ (idx === hovered_qpoint_index || idx === hovered_qpoint_index - 1)}
456
300
  {#if seg_len <= k_path_seg_cutoff}
457
301
  <Cylinder
458
302
  from={from_point as Vec3}
@@ -504,19 +348,8 @@
504
348
  {#if hovered_k_point}
505
349
  <T.Mesh position={hovered_k_point}>
506
350
  <T.SphereGeometry args={[0.03, 16, 16]} />
507
- <T.MeshStandardMaterial
508
- color="#ff0000"
509
- emissive="#ff0000"
510
- emissiveIntensity={1.2}
511
- />
351
+ <T.MeshStandardMaterial color="#ff0000" emissive="#ff0000" emissiveIntensity={1.2} />
512
352
  </T.Mesh>
513
353
  {/if}
514
354
  {/if}
515
355
  </T.Group>
516
-
517
- <style>
518
- :global(.brillouin-zone .responsive-gizmo) {
519
- width: clamp(70px, 18cqmin, 100px) !important;
520
- height: clamp(70px, 18cqmin, 100px) !important;
521
- }
522
- </style>
@@ -1,13 +1,9 @@
1
1
  import type { Vec3 } from '../math';
2
- import { type CameraProjection } from '../settings';
3
- import * as extras from '@threlte/extras';
4
- import type { ComponentProps } from 'svelte';
5
- import type { Camera, Scene } from 'three';
2
+ import type { SceneControlProps } from '../scene';
6
3
  import type { BrillouinZoneData, BZHoverData, IrreducibleBZData } from './types';
7
- type $$ComponentProps = {
4
+ type $$ComponentProps = SceneControlProps & {
8
5
  bz_data?: BrillouinZoneData;
9
6
  camera_position?: Vec3 | undefined;
10
- camera_projection?: CameraProjection;
11
7
  surface_color?: string;
12
8
  surface_opacity?: number;
13
9
  edge_color?: string;
@@ -18,22 +14,6 @@ type $$ComponentProps = {
18
14
  ibz_data?: IrreducibleBZData | null;
19
15
  ibz_color?: string;
20
16
  ibz_opacity?: number;
21
- rotation_damping?: number;
22
- max_zoom?: number;
23
- min_zoom?: number;
24
- rotate_speed?: number;
25
- zoom_speed?: number;
26
- pan_speed?: number;
27
- zoom_to_cursor?: boolean;
28
- fov?: number;
29
- initial_zoom?: number;
30
- ambient_light?: number;
31
- directional_light?: number;
32
- gizmo?: boolean | ComponentProps<typeof extras.Gizmo>;
33
- auto_rotate?: number;
34
- camera_is_moving?: boolean;
35
- scene?: Scene;
36
- camera?: Camera;
37
17
  k_path_points?: Vec3[];
38
18
  k_path_labels?: {
39
19
  position: Vec3;
@@ -44,6 +24,6 @@ type $$ComponentProps = {
44
24
  hover_data?: BZHoverData | null;
45
25
  on_kpath_hover?: (qpoint_index: number | null) => void;
46
26
  };
47
- declare const BrillouinZoneScene: import("svelte").Component<$$ComponentProps, {}, "camera_position" | "camera_projection" | "vector_scale" | "camera" | "scene" | "camera_is_moving" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "bz_data" | "hover_data">;
27
+ declare const BrillouinZoneScene: import("svelte").Component<$$ComponentProps, {}, "camera" | "camera_projection" | "camera_position" | "vector_scale" | "scene" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "bz_data" | "hover_data">;
48
28
  type BrillouinZoneScene = ReturnType<typeof BrillouinZoneScene>;
49
29
  export default BrillouinZoneScene;
@@ -0,0 +1,39 @@
1
+ <script lang="ts">
2
+ // Reciprocal lattice vector arrows (b₁, b₂, b₃) with HTML labels beyond the tips, shared by BrillouinZoneScene and FermiSurfaceScene
3
+ import type { Matrix3x3, Vec3 } from '../math'
4
+ import Arrow from '../structure/Arrow.svelte'
5
+ import * as extras from '@threlte/extras'
6
+
7
+ let {
8
+ k_lattice,
9
+ vector_scale = 1.0,
10
+ size = 1,
11
+ }: {
12
+ k_lattice: Matrix3x3
13
+ vector_scale?: number
14
+ size?: number // characteristic scene size used to scale arrow proportions
15
+ } = $props()
16
+
17
+ const vector_colors = [`red`, `green`, `blue`]
18
+ const vector_labels = [`b₁`, `b₂`, `b₃`]
19
+ </script>
20
+
21
+ {#each k_lattice as vec, idx (idx)}
22
+ {@const scaled_vec = vec.map((coord) => coord * vector_scale) as Vec3}
23
+ {@const label_position = scaled_vec.map((coord) => coord * 1.15) as Vec3}
24
+ <Arrow
25
+ position={[0, 0, 0]}
26
+ vector={scaled_vec}
27
+ color={vector_colors[idx]}
28
+ scale={1}
29
+ shaft_radius={size * 0.008}
30
+ arrow_head_radius={size * 0.028}
31
+ arrow_head_length={-0.1}
32
+ />
33
+ <!-- Vector label beyond tip -->
34
+ <extras.HTML center position={label_position}>
35
+ <span style:color={vector_colors[idx]} style:font-size="1.2em">
36
+ {vector_labels[idx]}
37
+ </span>
38
+ </extras.HTML>
39
+ {/each}
@@ -0,0 +1,9 @@
1
+ import type { Matrix3x3 } from '../math';
2
+ type $$ComponentProps = {
3
+ k_lattice: Matrix3x3;
4
+ vector_scale?: number;
5
+ size?: number;
6
+ };
7
+ declare const ReciprocalVectors: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type ReciprocalVectors = ReturnType<typeof ReciprocalVectors>;
9
+ export default ReciprocalVectors;
@@ -12,6 +12,8 @@ type ClippingPlane = {
12
12
  normal: Vec3;
13
13
  dist: number;
14
14
  };
15
+ export declare const IBZ_REFERENCE_DIRECTIONS: Vec3[];
16
+ export declare function find_ibz_reference_direction(non_identity_ops: Matrix3x3[]): Vec3;
15
17
  export declare function compute_ibz_clipping_planes(point_group_ops: Matrix3x3[]): ClippingPlane[];
16
18
  export declare function compute_irreducible_bz(bz_data: BrillouinZoneData, point_group_ops: Matrix3x3[], edge_sharp_angle_deg?: number): IrreducibleBZData | null;
17
19
  export {};