matterviz 0.4.1 → 0.4.3

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 (499) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +48 -60
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/api/optimade.js +10 -7
  6. package/dist/app.css +68 -0
  7. package/dist/brillouin/BrillouinZone.svelte +90 -91
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  9. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  12. package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  14. package/dist/brillouin/compute.js +10 -16
  15. package/dist/brillouin/geometry.js +2 -2
  16. package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
  17. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
  20. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  21. package/dist/chempot-diagram/async-compute.svelte.js +13 -14
  22. package/dist/chempot-diagram/color.d.ts +21 -1
  23. package/dist/chempot-diagram/color.js +70 -1
  24. package/dist/chempot-diagram/compute.d.ts +7 -0
  25. package/dist/chempot-diagram/compute.js +85 -26
  26. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  27. package/dist/chempot-diagram/export.js +1 -6
  28. package/dist/chempot-diagram/temperature.js +9 -10
  29. package/dist/colors/index.d.ts +0 -4
  30. package/dist/colors/index.js +19 -20
  31. package/dist/composition/BarChart.svelte +30 -26
  32. package/dist/composition/BubbleChart.svelte +17 -17
  33. package/dist/composition/Composition.svelte +10 -19
  34. package/dist/composition/Formula.svelte +20 -27
  35. package/dist/composition/FormulaFilter.svelte +115 -184
  36. package/dist/composition/PieChart.svelte +55 -41
  37. package/dist/composition/format.js +7 -9
  38. package/dist/composition/index.d.ts +2 -0
  39. package/dist/composition/index.js +14 -0
  40. package/dist/composition/parse.d.ts +2 -2
  41. package/dist/composition/parse.js +61 -115
  42. package/dist/constants.d.ts +0 -1
  43. package/dist/constants.js +17 -26
  44. package/dist/convex-hull/ConvexHull.svelte +12 -15
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +93 -94
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +127 -186
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +131 -180
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  53. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  54. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  55. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  56. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  57. package/dist/convex-hull/StructurePopup.svelte +18 -22
  58. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  59. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  60. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  61. package/dist/convex-hull/gas-thermodynamics.js +21 -53
  62. package/dist/convex-hull/helpers.d.ts +8 -10
  63. package/dist/convex-hull/helpers.js +37 -43
  64. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  65. package/dist/convex-hull/thermodynamics.js +37 -44
  66. package/dist/coordination/CoordinationBarPlot.svelte +49 -53
  67. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  68. package/dist/coordination/calc-coordination.d.ts +1 -1
  69. package/dist/coordination/calc-coordination.js +28 -25
  70. package/dist/element/BohrAtom.svelte +5 -9
  71. package/dist/element/ElementHeading.svelte +4 -1
  72. package/dist/element/ElementPhoto.svelte +11 -9
  73. package/dist/element/ElementStats.svelte +12 -10
  74. package/dist/element/ElementTile.svelte +44 -67
  75. package/dist/element/Nucleus.svelte +4 -2
  76. package/dist/element/data.d.ts +3 -2
  77. package/dist/element/data.js +5 -1
  78. package/dist/element/helpers.d.ts +4 -0
  79. package/dist/element/helpers.js +18 -0
  80. package/dist/element/index.d.ts +2 -5
  81. package/dist/element/index.js +4 -19
  82. package/dist/feedback/DragOverlay.svelte +5 -5
  83. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  84. package/dist/feedback/StatusMessage.svelte +7 -4
  85. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  86. package/dist/fermi-surface/FermiSurface.svelte +35 -44
  87. package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
  88. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  89. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  90. package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
  91. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  92. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  93. package/dist/fermi-surface/compute.js +25 -58
  94. package/dist/fermi-surface/parse.js +54 -88
  95. package/dist/file-viewer/JsonBrowser.svelte +1043 -0
  96. package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
  97. package/dist/file-viewer/PlotPanel.svelte +350 -0
  98. package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
  99. package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
  100. package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
  101. package/dist/file-viewer/detect.d.ts +11 -0
  102. package/dist/file-viewer/detect.js +381 -0
  103. package/dist/file-viewer/eligibility.d.ts +4 -0
  104. package/dist/file-viewer/eligibility.js +53 -0
  105. package/dist/file-viewer/host-protocol.d.ts +50 -0
  106. package/dist/file-viewer/host-transfer.d.ts +25 -0
  107. package/dist/file-viewer/host-transfer.js +42 -0
  108. package/dist/file-viewer/index.d.ts +5 -0
  109. package/dist/file-viewer/index.js +5 -0
  110. package/dist/file-viewer/main.d.ts +44 -0
  111. package/dist/file-viewer/main.js +535 -0
  112. package/dist/file-viewer/parse.d.ts +9 -0
  113. package/dist/file-viewer/parse.js +170 -0
  114. package/dist/file-viewer/plot-utils.d.ts +24 -0
  115. package/dist/file-viewer/plot-utils.js +191 -0
  116. package/dist/file-viewer/types.d.ts +4 -0
  117. package/dist/file-viewer/types.js +5 -0
  118. package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
  119. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  120. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  121. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  122. package/dist/heatmap-matrix/index.d.ts +5 -0
  123. package/dist/icons.d.ts +4 -0
  124. package/dist/icons.js +4 -0
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +1 -1
  127. package/dist/io/ExportPane.svelte +11 -7
  128. package/dist/io/decompress.d.ts +4 -1
  129. package/dist/io/decompress.js +24 -36
  130. package/dist/io/export.d.ts +11 -4
  131. package/dist/io/export.js +75 -19
  132. package/dist/io/fetch.d.ts +0 -3
  133. package/dist/io/fetch.js +0 -11
  134. package/dist/io/file-drop.js +60 -35
  135. package/dist/io/index.d.ts +0 -1
  136. package/dist/io/index.js +2 -9
  137. package/dist/io/is-binary.d.ts +9 -0
  138. package/dist/io/is-binary.js +45 -1
  139. package/dist/io/url-drop.d.ts +2 -0
  140. package/dist/io/url-drop.js +40 -40
  141. package/dist/isosurface/Isosurface.svelte +700 -215
  142. package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
  143. package/dist/isosurface/IsosurfaceControls.svelte +590 -116
  144. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
  145. package/dist/isosurface/VolumeSlice.svelte +224 -0
  146. package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
  147. package/dist/isosurface/coloring.d.ts +20 -0
  148. package/dist/isosurface/coloring.js +118 -0
  149. package/dist/isosurface/geometry-worker-types.d.ts +38 -0
  150. package/dist/isosurface/geometry.worker.d.ts +1 -0
  151. package/dist/isosurface/geometry.worker.js +59 -0
  152. package/dist/isosurface/grid.d.ts +10 -0
  153. package/dist/isosurface/grid.js +31 -0
  154. package/dist/isosurface/index.d.ts +4 -0
  155. package/dist/isosurface/index.js +4 -0
  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 +6 -6
  159. package/dist/isosurface/profile.d.ts +12 -0
  160. package/dist/isosurface/profile.js +19 -0
  161. package/dist/isosurface/sampling.d.ts +34 -0
  162. package/dist/isosurface/sampling.js +408 -0
  163. package/dist/isosurface/slice-rendering.d.ts +13 -0
  164. package/dist/isosurface/slice-rendering.js +79 -0
  165. package/dist/isosurface/slice.d.ts +22 -2
  166. package/dist/isosurface/slice.js +200 -116
  167. package/dist/isosurface/types.d.ts +24 -1
  168. package/dist/isosurface/types.js +120 -8
  169. package/dist/json-path.d.ts +4 -0
  170. package/dist/json-path.js +89 -0
  171. package/dist/labels.d.ts +6 -2
  172. package/dist/labels.js +44 -14
  173. package/dist/layout/FullscreenButton.svelte +2 -1
  174. package/dist/layout/FullscreenToggle.svelte +10 -4
  175. package/dist/layout/InfoCard.svelte +8 -21
  176. package/dist/layout/InfoTag.svelte +1 -3
  177. package/dist/layout/NumberRangeInput.svelte +46 -0
  178. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  179. package/dist/layout/PropertyFilter.svelte +2 -6
  180. package/dist/layout/SettingsSection.svelte +57 -62
  181. package/dist/layout/SettingsSection.svelte.d.ts +6 -7
  182. package/dist/layout/SubpageGrid.svelte +3 -1
  183. package/dist/layout/ViewerChrome.svelte +16 -11
  184. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  185. package/dist/layout/fullscreen.js +3 -5
  186. package/dist/layout/fullscreen.svelte.js +1 -2
  187. package/dist/layout/index.d.ts +1 -0
  188. package/dist/layout/index.js +1 -0
  189. package/dist/layout/json-tree/JsonNode.svelte +22 -59
  190. package/dist/layout/json-tree/JsonTree.svelte +101 -172
  191. package/dist/layout/json-tree/JsonValue.svelte +9 -32
  192. package/dist/layout/json-tree/utils.d.ts +0 -3
  193. package/dist/layout/json-tree/utils.js +50 -188
  194. package/dist/marching-cubes.d.ts +8 -1
  195. package/dist/marching-cubes.js +115 -48
  196. package/dist/math.d.ts +5 -2
  197. package/dist/math.js +48 -38
  198. package/dist/overlays/ContextMenu.svelte +19 -34
  199. package/dist/overlays/CopyButton.svelte +11 -5
  200. package/dist/overlays/DragControlTab.svelte +6 -1
  201. package/dist/overlays/DraggablePane.svelte +110 -74
  202. package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
  203. package/dist/overlays/GlassChip.svelte +32 -0
  204. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  205. package/dist/overlays/InfoPaneCards.svelte +11 -23
  206. package/dist/overlays/index.d.ts +7 -0
  207. package/dist/overlays/index.js +26 -0
  208. package/dist/overlays/portal.d.ts +2 -0
  209. package/dist/overlays/portal.js +14 -0
  210. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  211. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  212. package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
  213. package/dist/periodic-table/TableInset.svelte +9 -4
  214. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
  215. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  216. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  217. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  218. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  219. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  220. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  221. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  222. package/dist/phase-diagram/build-diagram.js +4 -9
  223. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  224. package/dist/phase-diagram/parse.js +15 -15
  225. package/dist/phase-diagram/svg-to-diagram.js +28 -27
  226. package/dist/phase-diagram/utils.js +2 -3
  227. package/dist/plot/bar/BarPlot.svelte +461 -426
  228. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  229. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  230. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  231. package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
  232. package/dist/plot/bar/data.d.ts +5 -4
  233. package/dist/plot/bar/data.js +2 -1
  234. package/dist/plot/box/BoxPlot.svelte +322 -226
  235. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  236. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  237. package/dist/plot/box/box-plot.js +1 -1
  238. package/dist/plot/core/auto-place.d.ts +1 -1
  239. package/dist/plot/core/auto-place.js +2 -2
  240. package/dist/plot/core/axis-utils.d.ts +12 -7
  241. package/dist/plot/core/axis-utils.js +48 -48
  242. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  243. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  244. package/dist/plot/core/components/ColorBar.svelte +101 -106
  245. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  246. package/dist/plot/core/components/FillArea.svelte +10 -17
  247. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  248. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  249. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  250. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  251. package/dist/plot/core/components/Line.svelte +18 -9
  252. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  253. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  254. package/dist/plot/core/components/PlotControls.svelte +65 -41
  255. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  256. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  257. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  258. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  259. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  260. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  261. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  262. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  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 +27 -474
  271. package/dist/plot/core/data-transform.d.ts +1 -2
  272. package/dist/plot/core/data-transform.js +9 -15
  273. package/dist/plot/core/fill-utils.d.ts +3 -1
  274. package/dist/plot/core/fill-utils.js +28 -6
  275. package/dist/plot/core/index.d.ts +1 -0
  276. package/dist/plot/core/index.js +1 -0
  277. package/dist/plot/core/interactions.js +0 -2
  278. package/dist/plot/core/layout.d.ts +15 -6
  279. package/dist/plot/core/layout.js +57 -38
  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 +2 -4
  283. package/dist/plot/core/pan-zoom.svelte.js +34 -17
  284. package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -21
  286. package/dist/plot/core/reference-line.js +1 -1
  287. package/dist/plot/core/scales.d.ts +23 -0
  288. package/dist/plot/core/scales.js +39 -13
  289. package/dist/plot/core/svg.js +0 -1
  290. package/dist/plot/core/types/fills.d.ts +101 -0
  291. package/dist/plot/core/types/fills.js +15 -0
  292. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  293. package/dist/plot/core/types/plot-3d.js +4 -0
  294. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  295. package/dist/plot/core/types/reference-lines.js +9 -0
  296. package/dist/plot/core/types.d.ts +29 -324
  297. package/dist/plot/core/types.js +23 -20
  298. package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
  299. package/dist/plot/core/utils/hierarchy-chart.js +191 -0
  300. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  301. package/dist/plot/core/utils/hierarchy-labels.js +100 -0
  302. package/dist/plot/core/utils/label-placement.js +2 -2
  303. package/dist/plot/histogram/Histogram.svelte +314 -340
  304. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  305. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  306. package/dist/plot/histogram/histogram.d.ts +31 -0
  307. package/dist/plot/histogram/histogram.js +70 -0
  308. package/dist/plot/histogram/index.d.ts +1 -0
  309. package/dist/plot/histogram/index.js +1 -0
  310. package/dist/plot/index.d.ts +1 -0
  311. package/dist/plot/index.js +1 -0
  312. package/dist/plot/sankey/Sankey.svelte +78 -69
  313. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  314. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  315. package/dist/plot/sankey/sankey.js +13 -9
  316. package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
  317. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  318. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  319. package/dist/plot/scatter/ScatterPlot.svelte +517 -410
  320. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  321. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  322. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  323. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  324. package/dist/plot/scatter/adaptive-density.d.ts +1 -1
  325. package/dist/plot/scatter/adaptive-density.js +36 -20
  326. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  327. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  328. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  329. package/dist/plot/scatter/scatter-data.js +8 -7
  330. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  331. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  332. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  333. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  334. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  335. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  336. package/dist/plot/sunburst/Sunburst.svelte +269 -347
  337. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  338. package/dist/plot/sunburst/index.d.ts +1 -1
  339. package/dist/plot/sunburst/index.js +2 -1
  340. package/dist/plot/sunburst/render.d.ts +2 -2
  341. package/dist/plot/sunburst/render.js +47 -22
  342. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  343. package/dist/plot/sunburst/sunburst.js +10 -3
  344. package/dist/plot/treemap/Treemap.svelte +1022 -0
  345. package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
  346. package/dist/plot/treemap/index.d.ts +4 -0
  347. package/dist/plot/treemap/index.js +4 -0
  348. package/dist/plot/treemap/labels.d.ts +38 -0
  349. package/dist/plot/treemap/labels.js +80 -0
  350. package/dist/plot/treemap/treemap.d.ts +28 -0
  351. package/dist/plot/treemap/treemap.js +102 -0
  352. package/dist/rdf/RdfPlot.svelte +37 -59
  353. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  354. package/dist/rdf/calc-rdf.js +63 -52
  355. package/dist/rdf/index.d.ts +0 -1
  356. package/dist/sanitize.js +85 -27
  357. package/dist/scene/SceneCamera.svelte +1 -1
  358. package/dist/scene/SceneCamera.svelte.d.ts +1 -1
  359. package/dist/scene/bind-renderer.svelte.js +14 -6
  360. package/dist/scene/index.d.ts +1 -2
  361. package/dist/scene/index.js +1 -1
  362. package/dist/scene/{props.js → props.svelte.js} +15 -1
  363. package/dist/settings.d.ts +19 -9
  364. package/dist/settings.js +229 -525
  365. package/dist/spectral/Bands.svelte +207 -221
  366. package/dist/spectral/BandsAndDos.svelte +11 -9
  367. package/dist/spectral/BrillouinBandsDos.svelte +19 -42
  368. package/dist/spectral/Dos.svelte +92 -93
  369. package/dist/spectral/helpers.d.ts +3 -3
  370. package/dist/spectral/helpers.js +65 -140
  371. package/dist/state.svelte.js +5 -18
  372. package/dist/structure/Arrow.svelte +5 -18
  373. package/dist/structure/ArrowInstances.svelte +160 -0
  374. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  375. package/dist/structure/AtomLegend.svelte +120 -85
  376. package/dist/structure/AtomLegend.svelte.d.ts +2 -3
  377. package/dist/structure/Bond.svelte +31 -23
  378. package/dist/structure/CanvasTooltip.svelte +15 -3
  379. package/dist/structure/CellSelect.svelte +45 -35
  380. package/dist/structure/Cylinder.svelte +24 -40
  381. package/dist/structure/InstancedAtoms.svelte +114 -0
  382. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  383. package/dist/structure/Lattice.svelte +85 -149
  384. package/dist/structure/SiteLabels.svelte +122 -0
  385. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  386. package/dist/structure/Structure.svelte +636 -504
  387. package/dist/structure/Structure.svelte.d.ts +4 -2
  388. package/dist/structure/StructureCarousel.svelte +637 -0
  389. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  390. package/dist/structure/StructureControls.svelte +165 -425
  391. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  392. package/dist/structure/StructureExportPane.svelte +17 -21
  393. package/dist/structure/StructureInfoPane.svelte +128 -133
  394. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  395. package/dist/structure/StructureScene.svelte +535 -578
  396. package/dist/structure/StructureScene.svelte.d.ts +6 -2
  397. package/dist/structure/StructureViewport.svelte +451 -0
  398. package/dist/structure/StructureViewport.svelte.d.ts +65 -0
  399. package/dist/structure/atom-label-placement.d.ts +16 -12
  400. package/dist/structure/atom-label-placement.js +70 -37
  401. package/dist/structure/atom-properties.d.ts +2 -0
  402. package/dist/structure/atom-properties.js +105 -38
  403. package/dist/structure/bond-order-perception.js +3 -8
  404. package/dist/structure/bonding.d.ts +9 -3
  405. package/dist/structure/bonding.js +95 -46
  406. package/dist/structure/edit-history.d.ts +6 -0
  407. package/dist/structure/edit-history.js +27 -0
  408. package/dist/structure/export.d.ts +1 -0
  409. package/dist/structure/export.js +89 -105
  410. package/dist/structure/format-detect.d.ts +1 -0
  411. package/dist/structure/format-detect.js +20 -0
  412. package/dist/structure/geometry.d.ts +9 -0
  413. package/dist/structure/geometry.js +27 -0
  414. package/dist/structure/index.d.ts +16 -1
  415. package/dist/structure/index.js +15 -10
  416. package/dist/structure/measure.d.ts +1 -1
  417. package/dist/structure/measure.js +6 -12
  418. package/dist/structure/parse.d.ts +2 -1
  419. package/dist/structure/parse.js +272 -313
  420. package/dist/structure/partial-occupancy.js +10 -5
  421. package/dist/structure/pbc.js +85 -107
  422. package/dist/structure/polyhedra.d.ts +0 -1
  423. package/dist/structure/polyhedra.js +7 -21
  424. package/dist/structure/prop-groups.d.ts +85 -0
  425. package/dist/structure/prop-groups.js +18 -0
  426. package/dist/structure/supercell.d.ts +1 -2
  427. package/dist/structure/supercell.js +7 -13
  428. package/dist/symmetry/SymmetryElements.svelte +11 -15
  429. package/dist/symmetry/SymmetryStats.svelte +55 -71
  430. package/dist/symmetry/WyckoffTable.svelte +10 -28
  431. package/dist/symmetry/cell-transform.js +6 -14
  432. package/dist/symmetry/index.d.ts +1 -0
  433. package/dist/symmetry/index.js +13 -10
  434. package/dist/symmetry/spacegroups.js +3 -2
  435. package/dist/table/HeatmapTable.svelte +1142 -447
  436. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  437. package/dist/table/ToggleMenu.svelte +168 -53
  438. package/dist/table/ToggleMenu.svelte.d.ts +1 -1
  439. package/dist/table/index.d.ts +21 -6
  440. package/dist/table/index.js +34 -21
  441. package/dist/theme/ThemeControl.svelte +16 -8
  442. package/dist/theme/embedded.d.ts +18 -0
  443. package/dist/theme/embedded.js +206 -0
  444. package/dist/theme/index.d.ts +5 -5
  445. package/dist/theme/index.js +5 -12
  446. package/dist/theme/themes.mjs +44 -66
  447. package/dist/tooltip/KCoords.svelte +4 -1
  448. package/dist/tooltip/TooltipContent.svelte +3 -6
  449. package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
  450. package/dist/tooltip/index.d.ts +8 -1
  451. package/dist/trajectory/Trajectory.svelte +613 -386
  452. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  453. package/dist/trajectory/TrajectoryError.svelte +12 -74
  454. package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
  455. package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
  456. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
  457. package/dist/trajectory/extract.js +61 -49
  458. package/dist/trajectory/format-detect.d.ts +2 -0
  459. package/dist/trajectory/format-detect.js +17 -13
  460. package/dist/trajectory/frame-reader.d.ts +2 -0
  461. package/dist/trajectory/frame-reader.js +35 -32
  462. package/dist/trajectory/helpers.d.ts +2 -0
  463. package/dist/trajectory/helpers.js +34 -56
  464. package/dist/trajectory/index.d.ts +1 -0
  465. package/dist/trajectory/index.js +5 -8
  466. package/dist/trajectory/parse/ase.js +1 -1
  467. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  468. package/dist/trajectory/parse/h5-utils.js +109 -0
  469. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  470. package/dist/trajectory/parse/hdf5.js +116 -106
  471. package/dist/trajectory/parse/index.d.ts +6 -6
  472. package/dist/trajectory/parse/index.js +25 -33
  473. package/dist/trajectory/parse/lammps.js +8 -12
  474. package/dist/trajectory/parse/vasp.js +10 -7
  475. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  476. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  477. package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
  478. package/dist/trajectory/parse/vaspout-h5.js +281 -0
  479. package/dist/trajectory/parse/xyz.js +59 -9
  480. package/dist/trajectory/plotting.d.ts +8 -9
  481. package/dist/trajectory/plotting.js +113 -64
  482. package/dist/utils.d.ts +3 -0
  483. package/dist/utils.js +7 -0
  484. package/dist/xrd/XrdPlot.svelte +79 -118
  485. package/dist/xrd/broadening.js +2 -1
  486. package/dist/xrd/calc-xrd.js +24 -62
  487. package/dist/xrd/parse.d.ts +0 -1
  488. package/dist/xrd/parse.js +69 -95
  489. package/package.json +94 -34
  490. package/readme.md +6 -5
  491. package/dist/api/mp.d.ts +0 -6
  492. package/dist/api/mp.js +0 -22
  493. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  494. package/dist/scene/types.d.ts +0 -26
  495. package/dist/tooltip/types.d.ts +0 -8
  496. package/dist/trajectory/constants.d.ts +0 -6
  497. package/dist/trajectory/constants.js +0 -11
  498. /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
  499. /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
@@ -57,12 +57,10 @@ type $$ComponentProps = {
57
57
  hovered_k_point?: Vec3 | null;
58
58
  hovered_qpoint_index?: number | null;
59
59
  on_kpath_hover?: (qpoint_index: number | null) => void;
60
- children?: Snippet<[
61
- {
62
- structure?: Crystal;
63
- bz_data?: BrillouinZoneData;
64
- }
65
- ]>;
60
+ children?: Snippet<[{
61
+ structure?: Crystal;
62
+ bz_data?: BrillouinZoneData;
63
+ }]>;
66
64
  tooltip_config?: BZTooltipProp;
67
65
  on_file_load?: (data: BZHandlerData) => void;
68
66
  on_error?: (data: BZHandlerData) => void;
@@ -70,6 +68,6 @@ type $$ComponentProps = {
70
68
  on_point_hover?: (data: BZHoverData | null) => void;
71
69
  on_hover?: (data: BZHoverData | null) => void;
72
70
  } & HTMLAttributes<HTMLDivElement>;
73
- declare const BrillouinZone: import("svelte").Component<$$ComponentProps, {}, "structure" | "height" | "width" | "dragover" | "fullscreen" | "wrapper" | "hovered" | "controls_open" | "loading" | "camera_projection" | "vector_scale" | "png_dpi" | "info_pane_open" | "error_msg" | "bz_order" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "show_ibz" | "ibz_color" | "ibz_opacity" | "bz_data" | "ibz_data">;
71
+ declare const BrillouinZone: import("svelte").Component<$$ComponentProps, {}, "height" | "width" | "dragover" | "fullscreen" | "wrapper" | "hovered" | "controls_open" | "structure" | "camera_projection" | "vector_scale" | "loading" | "png_dpi" | "info_pane_open" | "error_msg" | "bz_order" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "show_ibz" | "ibz_color" | "ibz_opacity" | "bz_data" | "ibz_data">;
74
72
  type BrillouinZone = ReturnType<typeof BrillouinZone>;
75
73
  export default BrillouinZone;
@@ -9,7 +9,7 @@
9
9
  surface_color = $bindable(`#4488ff`),
10
10
  surface_opacity = $bindable(0.3),
11
11
  edge_color = $bindable(`#000000`),
12
- edge_width = $bindable(0.05),
12
+ edge_width = $bindable(0.002),
13
13
  show_vectors = $bindable(true),
14
14
  camera_projection = $bindable(`perspective`),
15
15
  // Irreducible BZ options
@@ -84,10 +84,7 @@
84
84
  <SettingsSection
85
85
  title="Edges"
86
86
  current_values={{ edge_color, edge_width }}
87
- on_reset={() => {
88
- edge_color = `#000000`
89
- edge_width = 0.05
90
- }}
87
+ on_reset={() => ([edge_color, edge_width] = [`#000000`, 0.002])}
91
88
  >
92
89
  <label>
93
90
  <span>Color:</span>
@@ -95,7 +92,7 @@
95
92
  </label>
96
93
  <label>
97
94
  <span>Width:</span>
98
- <input type="range" min="0.01" max="0.2" step="0.01" bind:value={edge_width} />
95
+ <input type="range" min="0.002" max="0.02" step="0.001" bind:value={edge_width} />
99
96
  <span class="value">{edge_width.toFixed(2)}</span>
100
97
  </label>
101
98
  </SettingsSection>
@@ -58,25 +58,29 @@
58
58
  const sections = $derived<ExportSection[]>([
59
59
  {
60
60
  title: `Export as image`,
61
- items: [{
62
- label: `PNG`,
63
- disabled: !scene || !camera,
64
- show_dpi: true,
65
- on_download: export_as_png,
66
- }],
61
+ items: [
62
+ {
63
+ label: `PNG`,
64
+ disabled: !scene || !camera,
65
+ show_dpi: true,
66
+ on_download: export_as_png,
67
+ },
68
+ ],
67
69
  },
68
70
  {
69
71
  title: `Export as data`,
70
72
  tooltip: `Includes vertices, faces, edges, and reciprocal lattice vectors`,
71
- items: [{
72
- label: `JSON`,
73
- disabled: !bz_data,
74
- on_download: export_as_json,
75
- copy_text: () => {
76
- const json_data = get_json_data()
77
- return json_data ? JSON.stringify(json_data, null, 2) : null
73
+ items: [
74
+ {
75
+ label: `JSON`,
76
+ disabled: !bz_data,
77
+ on_download: export_as_json,
78
+ copy_text: () => {
79
+ const json_data = get_json_data()
80
+ return json_data ? JSON.stringify(json_data, null, 2) : null
81
+ },
78
82
  },
79
- }],
83
+ ],
80
84
  },
81
85
  ])
82
86
  </script>
@@ -73,20 +73,16 @@
73
73
  items: [
74
74
  {
75
75
  label: `a, b, c`,
76
- value: `${
77
- [structure.lattice.a, structure.lattice.b, structure.lattice.c]
78
- .map((val) => format_num(val, `.3~f`))
79
- .join(`, `)
80
- } Å`,
76
+ value: `${[structure.lattice.a, structure.lattice.b, structure.lattice.c]
77
+ .map((val) => format_num(val, `.3~f`))
78
+ .join(`, `)} Å`,
81
79
  key: `real-lattice-abc`,
82
80
  },
83
81
  {
84
82
  label: `α, β, γ`,
85
- value: `${
86
- [structure.lattice.alpha, structure.lattice.beta, structure.lattice.gamma]
87
- .map((val) => format_num(val, `.2~f`))
88
- .join(`, `)
89
- }°`,
83
+ value: `${[structure.lattice.alpha, structure.lattice.beta, structure.lattice.gamma]
84
+ .map((val) => format_num(val, `.2~f`))
85
+ .join(`, `)}°`,
90
86
  key: `real-lattice-angles`,
91
87
  },
92
88
  ],
@@ -25,7 +25,7 @@
25
25
  surface_color = $bindable(`#4488ff`),
26
26
  surface_opacity = $bindable(0.3),
27
27
  edge_color = $bindable(`#000000`),
28
- edge_width = $bindable(0.05),
28
+ edge_width = $bindable(0.002),
29
29
  show_vectors = $bindable(true),
30
30
  vector_scale = $bindable(1.0),
31
31
  // Irreducible BZ options
@@ -48,7 +48,7 @@
48
48
  auto_rotate = DEFAULTS.structure.auto_rotate,
49
49
  scene = $bindable(),
50
50
  camera = $bindable(),
51
- k_path_points = [],
51
+ k_path_points: input_k_path_points = [],
52
52
  k_path_labels = [],
53
53
  hovered_k_point = null,
54
54
  hovered_qpoint_index = null,
@@ -75,6 +75,7 @@
75
75
  hover_data?: BZHoverData | null
76
76
  on_kpath_hover?: (qpoint_index: number | null) => void
77
77
  } = $props()
78
+ const k_path_points = $derived(input_k_path_points ?? [])
78
79
 
79
80
  bind_renderer((threlte_scene, threlte_camera) => {
80
81
  scene = threlte_scene
@@ -90,29 +91,31 @@
90
91
  camera_position || default_camera_position(bz_size),
91
92
  )
92
93
 
93
- const orbit_controls_props = $derived(build_orbit_props({
94
- camera_projection,
95
- target: rotation_target,
96
- rotate_speed,
97
- zoom_speed,
98
- zoom_to_cursor,
99
- pan_speed,
100
- max_zoom,
101
- min_zoom,
102
- auto_rotate,
103
- rotation_damping,
104
- }))
94
+ const orbit_controls_props = $derived(
95
+ build_orbit_props({
96
+ camera_projection,
97
+ target: rotation_target,
98
+ rotate_speed,
99
+ zoom_speed,
100
+ zoom_to_cursor,
101
+ pan_speed,
102
+ max_zoom,
103
+ min_zoom,
104
+ auto_rotate,
105
+ rotation_damping,
106
+ }),
107
+ )
105
108
 
106
109
  // K-path styling. The invisible hover proxy is twice the visible thickness so the cursor
107
110
  // snaps to the path even when it isn't directly over the thin visible segment.
108
- const KPATH_THICKNESS = 0.12
111
+ const KPATH_THICKNESS = 0.012
109
112
  const KPATH_HOVER_THICKNESS = KPATH_THICKNESS * 2
110
113
 
111
114
  // Threshold for skipping k-path segments that bridge a path discontinuity (e.g. `U|K`).
112
115
  // Band paths are densely sampled, so legit segments are tiny; a discontinuity jumps by
113
116
  // a fraction of the zone. Skip segments far longer than the median sampling step.
114
117
  const k_path_seg_cutoff = $derived.by(() => {
115
- if (!k_path_points || k_path_points.length < 3) return Infinity
118
+ if (k_path_points.length < 3) return Infinity
116
119
  const lens = k_path_points
117
120
  .slice(1)
118
121
  .map((pt, idx) => Math.hypot(...math.subtract(pt as Vec3, k_path_points[idx] as Vec3)))
@@ -124,9 +127,7 @@
124
127
  bz_data ? polyhedron_geometry(bz_data.vertices, bz_data.faces) : null,
125
128
  )
126
129
  const ibz_geometry = $derived(
127
- show_ibz && ibz_data
128
- ? polyhedron_geometry(ibz_data.vertices, ibz_data.faces)
129
- : null,
130
+ show_ibz && ibz_data ? polyhedron_geometry(ibz_data.vertices, ibz_data.faces) : null,
130
131
  )
131
132
 
132
133
  // Separate effects to avoid disposing one geometry when only the other changes
@@ -166,10 +167,7 @@
166
167
  })
167
168
 
168
169
  // Create hover data from pointer event
169
- function create_hover_data(
170
- event: ThreltePointerEvent,
171
- is_ibz: boolean,
172
- ): BZHoverData | null {
170
+ function create_hover_data(event: ThreltePointerEvent, is_ibz: boolean): BZHoverData | null {
173
171
  if (!bz_data) return null
174
172
 
175
173
  const position_cartesian: Vec3 = [event.point.x, event.point.y, event.point.z]
@@ -178,9 +176,8 @@
178
176
  const { clientX, clientY } = event.nativeEvent
179
177
  const ibz_vol = ibz_data?.volume ?? null
180
178
  // Round to nearest integer since symmetry multiplicity is the point group order
181
- const symmetry_multiplicity = ibz_vol != null && ibz_vol > 0
182
- ? Math.round(bz_data.volume / ibz_vol)
183
- : null
179
+ const symmetry_multiplicity =
180
+ ibz_vol != null && ibz_vol > 0 ? Math.round(bz_data.volume / ibz_vol) : null
184
181
 
185
182
  return {
186
183
  position_cartesian,
@@ -294,18 +291,13 @@
294
291
  {/if}
295
292
 
296
293
  <!-- K-path visualization -->
297
- {#if k_path_points && k_path_points.length > 1}
298
- {#each k_path_points.slice(0, -1) as
299
- from_point,
300
- idx
301
- (`${from_point}-${k_path_points[idx + 1]}#${idx}`)
302
- }
294
+ {#if k_path_points.length > 1}
295
+ {#each k_path_points.slice(0, -1) as from_point, idx (`${from_point}-${k_path_points[idx + 1]}#${idx}`)}
303
296
  {@const to_point = k_path_points[idx + 1]}
304
- {@const seg_len = Math.hypot(
305
- ...math.subtract(to_point as Vec3, from_point as Vec3),
306
- )}
307
- {@const is_hovered = hovered_qpoint_index !== null &&
308
- (idx === hovered_qpoint_index || idx === hovered_qpoint_index - 1)}
297
+ {@const seg_len = Math.hypot(...math.subtract(to_point as Vec3, from_point as Vec3))}
298
+ {@const is_hovered =
299
+ hovered_qpoint_index !== null &&
300
+ (idx === hovered_qpoint_index || idx === hovered_qpoint_index - 1)}
309
301
  {#if seg_len <= k_path_seg_cutoff}
310
302
  <Cylinder
311
303
  from={from_point as Vec3}
@@ -326,42 +318,28 @@
326
318
  {/each}
327
319
  {/if}
328
320
 
329
- <!-- Symmetry point spheres at labeled k-path points -->
330
- {#if k_path_labels}
331
- {#each k_path_labels as { position, label }, idx (`sphere-${idx}`)}
332
- {#if label}
333
- <T.Mesh position={[position[0], position[1], position[2]]}>
334
- <T.SphereGeometry args={[0.015, 16, 16]} />
335
- <T.MeshStandardMaterial color="#ffcc00" metalness={0.3} roughness={0.7} />
336
- </T.Mesh>
337
- {/if}
338
- {/each}
339
- {/if}
340
-
341
- <!-- Symmetry point labels on k-path -->
342
- {#if k_path_labels}
343
- {#each k_path_labels as { position, label }, idx (`${label}-${idx}`)}
344
- {#if label}
345
- <extras.HTML center position={position.map((coord) => coord * 1.1) as Vec3}>
346
- <span
347
- style="background: rgba(0, 0, 0, 0.3); padding: 0 3px; border-radius: 2px; color: white"
348
- >
349
- {label}
350
- </span>
351
- </extras.HTML>
352
- {/if}
353
- {/each}
354
- {/if}
321
+ <!-- Symmetry point spheres + labels at labeled k-path points -->
322
+ {#each k_path_labels as { position, label }, idx (`${label}-${idx}`)}
323
+ {#if label}
324
+ <T.Mesh position={[position[0], position[1], position[2]]}>
325
+ <T.SphereGeometry args={[0.015, 16, 16]} />
326
+ <T.MeshStandardMaterial color="#ffcc00" metalness={0.3} roughness={0.7} />
327
+ </T.Mesh>
328
+ <extras.HTML center position={position.map((coord) => coord * 1.1) as Vec3}>
329
+ <span
330
+ style="background: rgba(0, 0, 0, 0.3); padding: 0 3px; border-radius: 2px; color: white"
331
+ >
332
+ {label}
333
+ </span>
334
+ </extras.HTML>
335
+ {/if}
336
+ {/each}
355
337
 
356
338
  <!-- Hovered k-point highlight -->
357
339
  {#if hovered_k_point}
358
340
  <T.Mesh position={hovered_k_point}>
359
341
  <T.SphereGeometry args={[0.03, 16, 16]} />
360
- <T.MeshStandardMaterial
361
- color="#ff0000"
362
- emissive="#ff0000"
363
- emissiveIntensity={1.2}
364
- />
342
+ <T.MeshStandardMaterial color="#ff0000" emissive="#ff0000" emissiveIntensity={1.2} />
365
343
  </T.Mesh>
366
344
  {/if}
367
345
  {/if}
@@ -24,6 +24,6 @@ type $$ComponentProps = SceneControlProps & {
24
24
  hover_data?: BZHoverData | null;
25
25
  on_kpath_hover?: (qpoint_index: number | null) => void;
26
26
  };
27
- declare const BrillouinZoneScene: import("svelte").Component<$$ComponentProps, {}, "scene" | "camera" | "camera_projection" | "camera_position" | "vector_scale" | "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">;
28
28
  type BrillouinZoneScene = ReturnType<typeof BrillouinZoneScene>;
29
29
  export default BrillouinZoneScene;
@@ -3,8 +3,6 @@ import * as math from '../math';
3
3
  import { Vector3 } from 'three';
4
4
  import { ConvexGeometry } from 'three/examples/jsm/geometries/ConvexGeometry.js';
5
5
  const TOL = 1e-8;
6
- // Check if rotation matrix is identity
7
- const is_identity_rotation = (rot) => rot.every((row, idx) => row.every((val, jdx) => Math.abs(val - (idx === jdx ? 1 : 0)) < TOL));
8
6
  // Extract unique point group rotation matrices from space group operations.
9
7
  // Returns fractional-coordinate rotations (W matrices from spglib convention).
10
8
  // These must be converted to Cartesian k-space before use in clipping.
@@ -111,12 +109,11 @@ export function generate_bz_vertices(k_lattice, order = 1,
111
109
  // Higher values give more accurate zones but increase computation time significantly.
112
110
  // Default values: 26 (1st order), 80 (2nd order), 150 (3rd+ order)
113
111
  max_planes_by_order = { 1: 26, 2: 80, 3: 150 }) {
114
- if (order > 3)
115
- order = 3; // Performance limit
116
- const k_points = generate_k_space_grid(k_lattice, order);
112
+ const clamped_order = Math.min(order, 3);
113
+ const k_points = generate_k_space_grid(k_lattice, clamped_order);
117
114
  const center_idx = Math.floor(k_points.length / 2);
118
- // Determine max planes for this order (default to highest value for orders > 3)
119
- const max_planes = max_planes_by_order[order] ?? 150;
115
+ // Fallback for partial records passed through compute_brillouin_zone
116
+ const max_planes = max_planes_by_order[clamped_order] ?? 150;
120
117
  // Create Bragg planes (perpendicular bisectors of k-points)
121
118
  const planes = k_points
122
119
  .map((pt, idx) => {
@@ -152,12 +149,12 @@ max_planes_by_order = { 1: 26, 2: 80, 3: 150 }) {
152
149
  vertex[2] * normals[p_idx][2];
153
150
  if (dot > distances[p_idx] + TOL) {
154
151
  beyond_count++;
155
- if (beyond_count >= order)
152
+ if (beyond_count >= clamped_order)
156
153
  break;
157
154
  }
158
155
  }
159
156
  // Vertex belongs to nth BZ if it's beyond fewer than n planes
160
- if (beyond_count < order && !dedup.has_duplicate(vertex)) {
157
+ if (beyond_count < clamped_order && !dedup.has_duplicate(vertex)) {
161
158
  vertices.push(vertex);
162
159
  dedup.add(vertex);
163
160
  }
@@ -166,13 +163,10 @@ max_planes_by_order = { 1: 26, 2: 80, 3: 150 }) {
166
163
  }
167
164
  return vertices;
168
165
  }
169
- // Compute polyhedron volume via divergence theorem (sum of signed tetrahedral volumes)
166
+ // Compute polyhedron volume via divergence theorem (sum of signed tetrahedral volumes).
167
+ // Faces always come from compute_convex_hull, so each is a valid triangle.
170
168
  function compute_hull_volume(vertices, faces) {
171
- if (faces.length === 0)
172
- return 0;
173
169
  return Math.abs(faces.reduce((sum, face) => {
174
- if (face.length < 3)
175
- return sum;
176
170
  const [v0, v1, v2] = face.slice(0, 3).map((idx) => vertices[idx]);
177
171
  const area_normal = math.scale(math.cross_3d(math.subtract(v1, v0), math.subtract(v2, v0)), 0.5);
178
172
  return sum + math.dot(v0, area_normal) / 3;
@@ -255,7 +249,7 @@ max_planes_by_order = { 1: 26, 2: 80, 3: 150 }) {
255
249
  }
256
250
  const hull = compute_convex_hull(vertices, edge_sharp_angle_deg);
257
251
  return {
258
- order,
252
+ order: Math.min(order, 3),
259
253
  vertices: hull.vertices,
260
254
  faces: hull.faces,
261
255
  edges: hull.edges.map(([i1, i2]) => [hull.vertices[i1], hull.vertices[i2]]),
@@ -305,7 +299,7 @@ export function find_ibz_reference_direction(non_identity_ops) {
305
299
  // of exactly volume(BZ)/|G|. (Using a different reference point per operation — or
306
300
  // flipping individual planes — does NOT yield a fundamental domain in general.)
307
301
  export function compute_ibz_clipping_planes(point_group_ops) {
308
- const non_identity_ops = point_group_ops.filter((rot) => !is_identity_rotation(rot));
302
+ const non_identity_ops = point_group_ops.filter((rot) => !rot.every((row, idx) => row.every((val, jdx) => Math.abs(val - (idx === jdx ? 1 : 0)) < TOL)));
309
303
  if (non_identity_ops.length === 0)
310
304
  return [];
311
305
  const ref_dir = find_ibz_reference_direction(non_identity_ops);
@@ -32,12 +32,12 @@ export function polyhedron_geometry(vertices, faces) {
32
32
  geometry.computeBoundingSphere();
33
33
  return geometry;
34
34
  }
35
- // Inverse of the reciprocal lattice for Cartesian -> fractional conversion; null if the lattice is missing or singular
35
+ // Cartesian fractional via transposed row-vector inverse; null if missing/singular
36
36
  export function k_lattice_inverse(k_lattice) {
37
37
  if (!k_lattice)
38
38
  return null;
39
39
  try {
40
- return math.matrix_inverse_3x3(k_lattice);
40
+ return math.create_cart_to_frac_matrix(k_lattice);
41
41
  }
42
42
  catch {
43
43
  return null;
@@ -10,9 +10,10 @@
10
10
  import ChemPotDiagram3D from './ChemPotDiagram3D.svelte'
11
11
  import { get_ternary_combinations } from './compute'
12
12
  import type {
13
- ChemPotDiagramConfig,
14
- ChemPotHoverInfo,
15
- ChemPotHoverInfo3D,
13
+ AxisRangeData,
14
+ ChemPotDiagramConfig,
15
+ ChemPotHoverInfo,
16
+ ChemPotHoverInfo3D,
16
17
  } from './types'
17
18
  import { CHEMPOT_DEFAULTS } from './types'
18
19
  import { to_error } from '../utils'
@@ -37,27 +38,25 @@
37
38
  // Extract unique elements from all entries (composition keys are element symbols)
38
39
  const all_elements = $derived(
39
40
  [
40
- ...new Set(entries.flatMap((entry) =>
41
- Object.entries(entry.composition)
42
- .filter(([, amount]) => amount > 0)
43
- .map(([element]) => element)
44
- )),
41
+ ...new Set(
42
+ entries.flatMap((entry) =>
43
+ Object.entries(entry.composition)
44
+ .filter(([, amount]) => amount > 0)
45
+ .map(([element]) => element),
46
+ ),
47
+ ),
45
48
  ].toSorted(),
46
49
  )
47
50
 
48
51
  // How many display axes (2 = binary/2D, 3+ = ternary/3D)
49
52
  const display_elements = $derived(config.elements ?? all_elements)
50
53
  const n_display = $derived(display_elements.length)
51
- const show_tooltip = $derived(
52
- config.show_tooltip ?? CHEMPOT_DEFAULTS.show_tooltip,
53
- )
54
+ const show_tooltip = $derived(config.show_tooltip ?? CHEMPOT_DEFAULTS.show_tooltip)
54
55
  const tooltip_detail_level = $derived(
55
56
  config.tooltip_detail_level ?? CHEMPOT_DEFAULTS.tooltip_detail_level,
56
57
  )
57
58
 
58
- const projection_mode = $derived(
59
- config.projection_mode ?? CHEMPOT_DEFAULTS.projection_mode,
60
- )
59
+ const projection_mode = $derived(config.projection_mode ?? CHEMPOT_DEFAULTS.projection_mode)
61
60
  // For quaternary+ in grid mode, generate all C(n,3) ternary projections
62
61
  // Uses display_elements (not all_elements) so config.elements scopes the grid
63
62
  const ternary_combos = $derived(
@@ -81,30 +80,47 @@
81
80
  if (!show_grid) return
82
81
  let cancelled = false
83
82
  compute_chempot_async(entries, { ...config, elements: ternary_combos[0] })
84
- .then(() => { if (!cancelled) grid_cache_ready = true })
83
+ .then(() => {
84
+ if (!cancelled) grid_cache_ready = true
85
+ })
85
86
  .catch((err) => {
86
87
  if (cancelled) return
87
88
  console.error(`Grid precompute failed:`, err)
88
89
  grid_error = to_error(err).message
89
90
  })
90
- return () => { cancelled = true }
91
+ return () => {
92
+ cancelled = true
93
+ }
91
94
  })
92
- const is_hover_info_3d = (value: ChemPotHoverInfo | null): value is ChemPotHoverInfo3D => value?.view === `3d`
95
+ const is_hover_info_3d = (value: ChemPotHoverInfo | null): value is ChemPotHoverInfo3D =>
96
+ value?.view === `3d`
93
97
 
94
98
  let tooltip_el = $state<HTMLElement>()
95
99
  const tooltip_pos = $derived.by(() => {
96
100
  const pointer = hover_info?.pointer
97
101
  if (!pointer) return { x: 4, y: 4 }
98
102
  return constrain_tooltip_position(
99
- pointer.x, pointer.y,
103
+ pointer.x,
104
+ pointer.y,
100
105
  tooltip_el?.offsetWidth ?? 200,
101
106
  tooltip_el?.offsetHeight ?? 100,
102
- width, height,
107
+ width,
108
+ height,
103
109
  { offset: 0 },
104
110
  )
105
111
  })
106
112
  </script>
107
113
 
114
+ {#snippet axis_ranges_section(ranges: AxisRangeData[])}
115
+ <h5 id="axis-ranges">Axis ranges</h5>
116
+ {#each ranges as axis_range (axis_range.element)}
117
+ <p>
118
+ {axis_range.element}: {format_num(axis_range.min_val, `.4~g`)} to
119
+ {format_num(axis_range.max_val, `.4~g`)} eV
120
+ </p>
121
+ {/each}
122
+ {/snippet}
123
+
108
124
  <div class="chempot-diagram-wrapper">
109
125
  {#if n_display < 2}
110
126
  <div
@@ -184,17 +200,13 @@ const is_hover_info_3d = (value: ChemPotHoverInfo | null): value is ChemPotHover
184
200
  style:left="{tooltip_pos.x}px"
185
201
  style:top="{tooltip_pos.y}px"
186
202
  >
187
- <h4>{@html sanitize_html(get_electro_neg_formula(hover_info.formula, false, ``, `.3~s`))}</h4>
203
+ <h4>
204
+ {@html sanitize_html(get_electro_neg_formula(hover_info.formula, false, ``, `.3~s`))}
205
+ </h4>
188
206
  {#if hover_info.view === `2d`}
189
207
  <p>2D domain · Points: {hover_info.n_points}</p>
190
208
  {#if tooltip_detail_level === `detailed`}
191
- <h5 id="axis-ranges">Axis ranges</h5>
192
- {#each hover_info.axis_ranges as axis_range (axis_range.element)}
193
- <p>
194
- {axis_range.element}: {format_num(axis_range.min_val, `.4~g`)} to
195
- {format_num(axis_range.max_val, `.4~g`)} eV
196
- </p>
197
- {/each}
209
+ {@render axis_ranges_section(hover_info.axis_ranges)}
198
210
  {/if}
199
211
  {:else if is_hover_info_3d(hover_info)}
200
212
  <p>
@@ -209,35 +221,24 @@ const is_hover_info_3d = (value: ChemPotHoverInfo | null): value is ChemPotHover
209
221
  </p>
210
222
  <p>
211
223
  Entries: {hover_info.matching_entry_count}
212
- {#if hover_info.min_energy_per_atom !== null &&
213
- hover_info.max_energy_per_atom !== null}
224
+ {#if hover_info.min_energy_per_atom !== null && hover_info.max_energy_per_atom !== null}
214
225
  · E/atom: {format_num(hover_info.min_energy_per_atom, `.4~g`)}
215
226
  to {format_num(hover_info.max_energy_per_atom, `.4~g`)} eV
216
227
  {/if}
217
228
  </p>
218
229
  {#if tooltip_detail_level === `detailed`}
219
- <h5 id="axis-ranges-1">Axis ranges</h5>
220
- {#each hover_info.axis_ranges as axis_range (axis_range.element)}
221
- <p>
222
- {axis_range.element}: {format_num(axis_range.min_val, `.4~g`)} to
223
- {format_num(axis_range.max_val, `.4~g`)} eV
224
- </p>
225
- {/each}
230
+ {@render axis_ranges_section(hover_info.axis_ranges)}
226
231
  <p>
227
- Centroid: ({
228
- hover_info.ann_loc.map((value) => format_num(value, `.3~g`)).join(
229
- `, `,
230
- )
231
- })
232
+ Centroid: ({hover_info.ann_loc
233
+ .map((value) => format_num(value, `.3~g`))
234
+ .join(`, `)})
232
235
  </p>
233
236
  {#if hover_info.neighbors.length > 0}
234
237
  <h5 id="neighbors">Neighbors ({hover_info.neighbors.length})</h5>
235
238
  <p>
236
- {
237
- hover_info.neighbors.map((formula) =>
238
- get_electro_neg_formula(formula, true, ``, `.3~s`)
239
- ).join(`, `)
240
- }
239
+ {hover_info.neighbors
240
+ .map((formula) => get_electro_neg_formula(formula, true, ``, `.3~s`))
241
+ .join(`, `)}
241
242
  </p>
242
243
  {/if}
243
244
  {#if hover_info.touches_limits.length > 0}
@@ -295,10 +296,7 @@ const is_hover_info_3d = (value: ChemPotHoverInfo | null): value is ChemPotHover
295
296
  .chempot-tooltip {
296
297
  position: absolute;
297
298
  max-width: min(32rem, 92vw);
298
- background: var(
299
- --tooltip-bg,
300
- light-dark(rgba(255, 255, 255, 0.95), rgba(0, 0, 0, 0.9))
301
- );
299
+ background: var(--tooltip-bg, light-dark(rgba(255, 255, 255, 0.95), rgba(0, 0, 0, 0.9)));
302
300
  color: var(--tooltip-text, var(--text-color, #222));
303
301
  border: 1px solid color-mix(in srgb, currentColor 18%, transparent);
304
302
  border-radius: 6px;