matterviz 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/dist/EmptyState.svelte.d.ts +9 -0
  2. package/dist/FilePicker.svelte +360 -0
  3. package/dist/FilePicker.svelte.d.ts +17 -0
  4. package/dist/Icon.svelte.d.ts +13 -0
  5. package/dist/MillerIndexInput.svelte +66 -0
  6. package/dist/MillerIndexInput.svelte.d.ts +7 -0
  7. package/dist/api/mp.d.ts +6 -0
  8. package/dist/api/mp.js +22 -0
  9. package/dist/api/optimade.d.ts +45 -0
  10. package/dist/api/optimade.js +135 -0
  11. package/dist/brillouin/BrillouinZone.svelte +549 -0
  12. package/dist/brillouin/BrillouinZone.svelte.d.ts +83 -0
  13. package/dist/brillouin/BrillouinZoneControls.svelte +144 -0
  14. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +17 -0
  15. package/dist/brillouin/BrillouinZoneExportPane.svelte +146 -0
  16. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  17. package/dist/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  18. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  19. package/dist/brillouin/BrillouinZoneScene.svelte +476 -0
  20. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +48 -0
  21. package/dist/brillouin/BrillouinZoneTooltip.svelte +92 -0
  22. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +8 -0
  23. package/dist/brillouin/compute.d.ts +17 -0
  24. package/dist/brillouin/compute.js +426 -0
  25. package/dist/brillouin/index.d.ts +8 -0
  26. package/dist/brillouin/index.js +7 -0
  27. package/dist/brillouin/types.d.ts +43 -0
  28. package/dist/brillouin/types.js +1 -0
  29. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  30. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  31. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  32. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  33. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  34. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  35. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  36. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  37. package/dist/chempot-diagram/async-compute.svelte.js +78 -0
  38. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  39. package/dist/chempot-diagram/chempot-worker.js +11 -0
  40. package/dist/chempot-diagram/color.d.ts +10 -0
  41. package/dist/chempot-diagram/color.js +32 -0
  42. package/dist/chempot-diagram/compute.d.ts +48 -0
  43. package/dist/chempot-diagram/compute.js +806 -0
  44. package/dist/chempot-diagram/index.d.ts +6 -0
  45. package/dist/chempot-diagram/index.js +6 -0
  46. package/dist/chempot-diagram/pointer.d.ts +16 -0
  47. package/dist/chempot-diagram/pointer.js +40 -0
  48. package/dist/chempot-diagram/temperature.d.ts +15 -0
  49. package/dist/chempot-diagram/temperature.js +34 -0
  50. package/dist/chempot-diagram/types.d.ts +81 -0
  51. package/dist/chempot-diagram/types.js +28 -0
  52. package/dist/colors/index.d.ts +47 -0
  53. package/dist/colors/index.js +203 -0
  54. package/dist/composition/BarChart.svelte +297 -0
  55. package/dist/composition/BarChart.svelte.d.ts +39 -0
  56. package/dist/composition/BubbleChart.svelte +218 -0
  57. package/dist/composition/BubbleChart.svelte.d.ts +28 -0
  58. package/dist/composition/Composition.svelte +165 -0
  59. package/dist/composition/Composition.svelte.d.ts +15 -0
  60. package/dist/composition/Formula.svelte +268 -0
  61. package/dist/composition/Formula.svelte.d.ts +19 -0
  62. package/dist/composition/FormulaFilter.svelte +1257 -0
  63. package/dist/composition/FormulaFilter.svelte.d.ts +51 -0
  64. package/dist/composition/PieChart.svelte +323 -0
  65. package/dist/composition/PieChart.svelte.d.ts +37 -0
  66. package/dist/composition/format.d.ts +15 -0
  67. package/dist/composition/format.js +109 -0
  68. package/dist/composition/index.d.ts +20 -0
  69. package/dist/composition/index.js +14 -0
  70. package/dist/composition/parse.d.ts +56 -0
  71. package/dist/composition/parse.js +474 -0
  72. package/dist/constants.d.ts +29 -0
  73. package/dist/constants.js +99 -0
  74. package/dist/controls.d.ts +14 -0
  75. package/dist/controls.js +30 -0
  76. package/dist/convex-hull/ConvexHull.svelte +157 -0
  77. package/dist/convex-hull/ConvexHull.svelte.d.ts +13 -0
  78. package/dist/convex-hull/ConvexHull2D.svelte +825 -0
  79. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +11 -0
  80. package/dist/convex-hull/ConvexHull3D.svelte +1801 -0
  81. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +8 -0
  82. package/dist/convex-hull/ConvexHull4D.svelte +1398 -0
  83. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +8 -0
  84. package/dist/convex-hull/ConvexHullControls.svelte +535 -0
  85. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +48 -0
  86. package/dist/convex-hull/ConvexHullInfoPane.svelte +125 -0
  87. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +20 -0
  88. package/dist/convex-hull/ConvexHullStats.svelte +929 -0
  89. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +17 -0
  90. package/dist/convex-hull/ConvexHullTooltip.svelte +131 -0
  91. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +33 -0
  92. package/dist/convex-hull/GasPressureControls.svelte +247 -0
  93. package/dist/convex-hull/GasPressureControls.svelte.d.ts +11 -0
  94. package/dist/convex-hull/StructurePopup.svelte +151 -0
  95. package/dist/convex-hull/StructurePopup.svelte.d.ts +18 -0
  96. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +8 -0
  97. package/dist/convex-hull/barycentric-coords.d.ts +18 -0
  98. package/dist/convex-hull/barycentric-coords.js +182 -0
  99. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  100. package/dist/convex-hull/demo-temperature.js +40 -0
  101. package/dist/convex-hull/gas-thermodynamics.d.ts +16 -0
  102. package/dist/convex-hull/gas-thermodynamics.js +314 -0
  103. package/dist/convex-hull/helpers.d.ts +114 -0
  104. package/dist/convex-hull/helpers.js +710 -0
  105. package/dist/convex-hull/index.d.ts +119 -0
  106. package/dist/convex-hull/index.js +58 -0
  107. package/dist/convex-hull/thermodynamics.d.ts +67 -0
  108. package/dist/convex-hull/thermodynamics.js +1752 -0
  109. package/dist/convex-hull/types.d.ts +162 -0
  110. package/dist/convex-hull/types.js +36 -0
  111. package/dist/coordination/CoordinationBarPlot.svelte +311 -0
  112. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +30 -0
  113. package/dist/coordination/calc-coordination.d.ts +15 -0
  114. package/dist/coordination/calc-coordination.js +63 -0
  115. package/dist/coordination/index.d.ts +8 -0
  116. package/dist/coordination/index.js +7 -0
  117. package/dist/effects.svelte.d.ts +12 -0
  118. package/dist/effects.svelte.js +37 -0
  119. package/dist/element/BohrAtom.svelte.d.ts +20 -0
  120. package/dist/element/ElementHeading.svelte +26 -0
  121. package/dist/element/ElementHeading.svelte.d.ts +8 -0
  122. package/dist/element/ElementPhoto.svelte +57 -0
  123. package/dist/element/ElementPhoto.svelte.d.ts +9 -0
  124. package/dist/element/ElementStats.svelte +80 -0
  125. package/dist/element/ElementStats.svelte.d.ts +8 -0
  126. package/dist/element/ElementTile.svelte +484 -0
  127. package/dist/element/ElementTile.svelte.d.ts +29 -0
  128. package/dist/element/Nucleus.svelte.d.ts +17 -0
  129. package/dist/element/data.d.ts +2 -0
  130. package/dist/element/data.js +2 -0
  131. package/dist/element/index.d.ts +8 -0
  132. package/dist/element/index.js +7 -0
  133. package/dist/element/types.d.ts +57 -0
  134. package/dist/element/types.js +1 -0
  135. package/dist/feedback/ClickFeedback.svelte +58 -0
  136. package/dist/feedback/ClickFeedback.svelte.d.ts +12 -0
  137. package/dist/feedback/DragOverlay.svelte +42 -0
  138. package/dist/feedback/DragOverlay.svelte.d.ts +7 -0
  139. package/dist/feedback/Spinner.svelte.d.ts +7 -0
  140. package/dist/feedback/StatusMessage.svelte.d.ts +9 -0
  141. package/dist/feedback/index.d.ts +4 -0
  142. package/dist/feedback/index.js +4 -0
  143. package/dist/fermi-surface/FermiSlice.svelte +189 -0
  144. package/dist/fermi-surface/FermiSlice.svelte.d.ts +24 -0
  145. package/dist/fermi-surface/FermiSurface.svelte +600 -0
  146. package/dist/fermi-surface/FermiSurface.svelte.d.ts +83 -0
  147. package/dist/fermi-surface/FermiSurfaceControls.svelte +448 -0
  148. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +35 -0
  149. package/dist/fermi-surface/FermiSurfaceScene.svelte +794 -0
  150. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +50 -0
  151. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  152. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +8 -0
  153. package/dist/fermi-surface/compute.d.ts +5 -0
  154. package/dist/fermi-surface/compute.js +538 -0
  155. package/dist/fermi-surface/constants.d.ts +9 -0
  156. package/dist/fermi-surface/constants.js +27 -0
  157. package/dist/fermi-surface/export.d.ts +5 -0
  158. package/dist/fermi-surface/export.js +50 -0
  159. package/dist/fermi-surface/index.d.ts +12 -0
  160. package/dist/fermi-surface/index.js +13 -0
  161. package/dist/fermi-surface/marching-cubes.d.ts +2 -0
  162. package/dist/fermi-surface/marching-cubes.js +2 -0
  163. package/dist/fermi-surface/parse.d.ts +2 -0
  164. package/dist/fermi-surface/parse.js +491 -0
  165. package/dist/fermi-surface/symmetry.d.ts +3 -0
  166. package/dist/fermi-surface/symmetry.js +46 -0
  167. package/dist/fermi-surface/types.d.ts +110 -0
  168. package/dist/fermi-surface/types.js +4 -0
  169. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  170. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  171. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  172. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  173. package/dist/heatmap-matrix/index.d.ts +53 -0
  174. package/dist/heatmap-matrix/index.js +100 -0
  175. package/dist/heatmap-matrix/shared.d.ts +2 -0
  176. package/dist/heatmap-matrix/shared.js +4 -0
  177. package/dist/icons.d.ts +569 -0
  178. package/dist/icons.js +648 -0
  179. package/dist/index.d.ts +39 -0
  180. package/dist/index.js +39 -0
  181. package/dist/io/decompress.d.ts +11 -0
  182. package/dist/io/decompress.js +74 -0
  183. package/dist/io/export.d.ts +16 -0
  184. package/dist/io/export.js +316 -0
  185. package/dist/io/fetch.d.ts +5 -0
  186. package/dist/io/fetch.js +39 -0
  187. package/dist/io/file-drop.d.ts +7 -0
  188. package/dist/io/file-drop.js +43 -0
  189. package/dist/io/index.d.ts +7 -0
  190. package/dist/io/index.js +6 -0
  191. package/dist/io/is-binary.d.ts +1 -0
  192. package/dist/io/is-binary.js +20 -0
  193. package/dist/io/types.d.ts +8 -0
  194. package/dist/io/types.js +1 -0
  195. package/dist/io/url-drop.d.ts +2 -0
  196. package/dist/io/url-drop.js +123 -0
  197. package/dist/isosurface/Isosurface.svelte +285 -0
  198. package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
  199. package/dist/isosurface/IsosurfaceControls.svelte +277 -0
  200. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
  201. package/dist/isosurface/index.d.ts +5 -0
  202. package/dist/isosurface/index.js +6 -0
  203. package/dist/isosurface/parse.d.ts +6 -0
  204. package/dist/isosurface/parse.js +553 -0
  205. package/dist/isosurface/slice.d.ts +11 -0
  206. package/dist/isosurface/slice.js +140 -0
  207. package/dist/isosurface/types.d.ts +56 -0
  208. package/dist/isosurface/types.js +227 -0
  209. package/dist/labels.d.ts +53 -0
  210. package/dist/labels.js +277 -0
  211. package/dist/layout/FullscreenToggle.svelte +50 -0
  212. package/dist/layout/FullscreenToggle.svelte.d.ts +7 -0
  213. package/dist/layout/InfoCard.svelte +120 -0
  214. package/dist/layout/InfoCard.svelte.d.ts +21 -0
  215. package/dist/layout/InfoTag.svelte +185 -0
  216. package/dist/layout/InfoTag.svelte.d.ts +19 -0
  217. package/dist/layout/PropertyFilter.svelte +246 -0
  218. package/dist/layout/PropertyFilter.svelte.d.ts +24 -0
  219. package/dist/layout/SettingsSection.svelte +148 -0
  220. package/dist/layout/SettingsSection.svelte.d.ts +17 -0
  221. package/dist/layout/SubpageGrid.svelte +82 -0
  222. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  223. package/dist/layout/fullscreen.d.ts +9 -0
  224. package/dist/layout/fullscreen.js +53 -0
  225. package/dist/layout/index.d.ts +10 -0
  226. package/dist/layout/index.js +8 -0
  227. package/dist/layout/json-tree/JsonNode.svelte +548 -0
  228. package/dist/layout/json-tree/JsonNode.svelte.d.ts +11 -0
  229. package/dist/layout/json-tree/JsonTree.svelte +1230 -0
  230. package/dist/layout/json-tree/JsonTree.svelte.d.ts +6 -0
  231. package/dist/layout/json-tree/JsonValue.svelte.d.ts +9 -0
  232. package/dist/layout/json-tree/index.d.ts +3 -0
  233. package/dist/layout/json-tree/index.js +3 -0
  234. package/dist/layout/json-tree/types.d.ts +74 -0
  235. package/dist/layout/json-tree/types.js +2 -0
  236. package/dist/layout/json-tree/utils.d.ts +29 -0
  237. package/dist/layout/json-tree/utils.js +641 -0
  238. package/dist/marching-cubes.d.ts +14 -0
  239. package/dist/marching-cubes.js +540 -0
  240. package/dist/math.d.ts +101 -0
  241. package/dist/math.js +905 -0
  242. package/dist/overlays/ContextMenu.svelte +162 -0
  243. package/dist/overlays/ContextMenu.svelte.d.ts +25 -0
  244. package/dist/overlays/CopyButton.svelte +45 -0
  245. package/dist/overlays/CopyButton.svelte.d.ts +8 -0
  246. package/dist/overlays/DragControlTab.svelte +98 -0
  247. package/dist/overlays/DragControlTab.svelte.d.ts +8 -0
  248. package/dist/overlays/DraggablePane.svelte +487 -0
  249. package/dist/overlays/DraggablePane.svelte.d.ts +36 -0
  250. package/dist/overlays/InfoPaneCards.svelte +149 -0
  251. package/dist/overlays/InfoPaneCards.svelte.d.ts +22 -0
  252. package/dist/overlays/index.d.ts +3 -0
  253. package/dist/overlays/index.js +3 -0
  254. package/dist/periodic-table/PeriodicTable.svelte +469 -0
  255. package/dist/periodic-table/PeriodicTable.svelte.d.ts +55 -0
  256. package/dist/periodic-table/PeriodicTableControls.svelte +557 -0
  257. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +24 -0
  258. package/dist/periodic-table/PropertySelect.svelte +37 -0
  259. package/dist/periodic-table/PropertySelect.svelte.d.ts +13 -0
  260. package/dist/periodic-table/TableInset.svelte.d.ts +9 -0
  261. package/dist/periodic-table/index.d.ts +10 -0
  262. package/dist/periodic-table/index.js +4 -0
  263. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  264. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +44 -0
  265. package/dist/phase-diagram/PhaseDiagramControls.svelte +444 -0
  266. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +30 -0
  267. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  268. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  269. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  270. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +19 -0
  271. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  272. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +16 -0
  273. package/dist/phase-diagram/TdbInfoPanel.svelte +203 -0
  274. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +12 -0
  275. package/dist/phase-diagram/build-diagram.d.ts +11 -0
  276. package/dist/phase-diagram/build-diagram.js +160 -0
  277. package/dist/phase-diagram/colors.d.ts +35 -0
  278. package/dist/phase-diagram/colors.js +51 -0
  279. package/dist/phase-diagram/diagram-input.d.ts +29 -0
  280. package/dist/phase-diagram/diagram-input.js +3 -0
  281. package/dist/phase-diagram/index.d.ts +13 -0
  282. package/dist/phase-diagram/index.js +11 -0
  283. package/dist/phase-diagram/parse.d.ts +55 -0
  284. package/dist/phase-diagram/parse.js +272 -0
  285. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  286. package/dist/phase-diagram/svg-to-diagram.js +867 -0
  287. package/dist/phase-diagram/types.d.ts +93 -0
  288. package/dist/phase-diagram/types.js +1 -0
  289. package/dist/phase-diagram/utils.d.ts +118 -0
  290. package/dist/phase-diagram/utils.js +604 -0
  291. package/dist/plot/AxisLabel.svelte +51 -0
  292. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  293. package/dist/plot/BarPlot.svelte +2113 -0
  294. package/dist/plot/BarPlot.svelte.d.ts +84 -0
  295. package/dist/plot/BarPlotControls.svelte +66 -0
  296. package/dist/plot/BarPlotControls.svelte.d.ts +18 -0
  297. package/dist/plot/BinnedScatterPlot.svelte +1114 -0
  298. package/dist/plot/BinnedScatterPlot.svelte.d.ts +66 -0
  299. package/dist/plot/ColorBar.svelte +721 -0
  300. package/dist/plot/ColorBar.svelte.d.ts +31 -0
  301. package/dist/plot/ColorScaleSelect.svelte +54 -0
  302. package/dist/plot/ColorScaleSelect.svelte.d.ts +15 -0
  303. package/dist/plot/ElementScatter.svelte +63 -0
  304. package/dist/plot/ElementScatter.svelte.d.ts +14 -0
  305. package/dist/plot/FillArea.svelte.d.ts +21 -0
  306. package/dist/plot/Histogram.svelte +1558 -0
  307. package/dist/plot/Histogram.svelte.d.ts +50 -0
  308. package/dist/plot/HistogramControls.svelte +212 -0
  309. package/dist/plot/HistogramControls.svelte.d.ts +22 -0
  310. package/dist/plot/InteractiveAxisLabel.svelte +96 -0
  311. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +14 -0
  312. package/dist/plot/Line.svelte +84 -0
  313. package/dist/plot/Line.svelte.d.ts +15 -0
  314. package/dist/plot/PlotAxis.svelte +169 -0
  315. package/dist/plot/PlotAxis.svelte.d.ts +24 -0
  316. package/dist/plot/PlotControls.svelte +537 -0
  317. package/dist/plot/PlotControls.svelte.d.ts +4 -0
  318. package/dist/plot/PlotLegend.svelte +569 -0
  319. package/dist/plot/PlotLegend.svelte.d.ts +29 -0
  320. package/dist/plot/PlotTooltip.svelte +67 -0
  321. package/dist/plot/PlotTooltip.svelte.d.ts +17 -0
  322. package/dist/plot/PortalSelect.svelte +253 -0
  323. package/dist/plot/PortalSelect.svelte.d.ts +16 -0
  324. package/dist/plot/ReferenceLine.svelte.d.ts +20 -0
  325. package/dist/plot/ReferenceLine3D.svelte +156 -0
  326. package/dist/plot/ReferenceLine3D.svelte.d.ts +14 -0
  327. package/dist/plot/ReferencePlane.svelte +175 -0
  328. package/dist/plot/ReferencePlane.svelte.d.ts +14 -0
  329. package/dist/plot/ScatterPlot.svelte +2778 -0
  330. package/dist/plot/ScatterPlot.svelte.d.ts +96 -0
  331. package/dist/plot/ScatterPlot3D.svelte +529 -0
  332. package/dist/plot/ScatterPlot3D.svelte.d.ts +95 -0
  333. package/dist/plot/ScatterPlot3DControls.svelte +437 -0
  334. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +20 -0
  335. package/dist/plot/ScatterPlot3DScene.svelte +912 -0
  336. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +74 -0
  337. package/dist/plot/ScatterPlotControls.svelte +306 -0
  338. package/dist/plot/ScatterPlotControls.svelte.d.ts +17 -0
  339. package/dist/plot/ScatterPoint.svelte +182 -0
  340. package/dist/plot/ScatterPoint.svelte.d.ts +22 -0
  341. package/dist/plot/SpacegroupBarPlot.svelte +293 -0
  342. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +9 -0
  343. package/dist/plot/Surface3D.svelte +197 -0
  344. package/dist/plot/Surface3D.svelte.d.ts +13 -0
  345. package/dist/plot/ZeroLines.svelte +97 -0
  346. package/dist/plot/ZeroLines.svelte.d.ts +33 -0
  347. package/dist/plot/ZoomRect.svelte +23 -0
  348. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  349. package/dist/plot/adaptive-density.d.ts +69 -0
  350. package/dist/plot/adaptive-density.js +191 -0
  351. package/dist/plot/auto-place.d.ts +43 -0
  352. package/dist/plot/auto-place.js +122 -0
  353. package/dist/plot/axis-utils.d.ts +19 -0
  354. package/dist/plot/axis-utils.js +78 -0
  355. package/dist/plot/binned-scatter-types.d.ts +59 -0
  356. package/dist/plot/binned-scatter-types.js +1 -0
  357. package/dist/plot/data-cleaning.d.ts +37 -0
  358. package/dist/plot/data-cleaning.js +855 -0
  359. package/dist/plot/data-transform.d.ts +16 -0
  360. package/dist/plot/data-transform.js +45 -0
  361. package/dist/plot/defaults.d.ts +19 -0
  362. package/dist/plot/defaults.js +9 -0
  363. package/dist/plot/fill-utils.d.ts +46 -0
  364. package/dist/plot/fill-utils.js +322 -0
  365. package/dist/plot/hover-lock.svelte.d.ts +14 -0
  366. package/dist/plot/hover-lock.svelte.js +46 -0
  367. package/dist/plot/index.d.ts +41 -0
  368. package/dist/plot/index.js +39 -0
  369. package/dist/plot/interactions.d.ts +12 -0
  370. package/dist/plot/interactions.js +101 -0
  371. package/dist/plot/layout.d.ts +78 -0
  372. package/dist/plot/layout.js +273 -0
  373. package/dist/plot/reference-line.d.ts +60 -0
  374. package/dist/plot/reference-line.js +314 -0
  375. package/dist/plot/scales.d.ts +48 -0
  376. package/dist/plot/scales.js +481 -0
  377. package/dist/plot/svg.d.ts +1 -0
  378. package/dist/plot/svg.js +11 -0
  379. package/dist/plot/types.d.ts +831 -0
  380. package/dist/plot/types.js +99 -0
  381. package/dist/plot/utils/label-placement.d.ts +68 -0
  382. package/dist/plot/utils/label-placement.js +326 -0
  383. package/dist/plot/utils/series-visibility.d.ts +15 -0
  384. package/dist/plot/utils/series-visibility.js +85 -0
  385. package/dist/plot/utils.d.ts +1 -0
  386. package/dist/plot/utils.js +14 -0
  387. package/dist/rdf/RdfPlot.svelte +247 -0
  388. package/dist/rdf/RdfPlot.svelte.d.ts +27 -0
  389. package/dist/rdf/calc-rdf.d.ts +4 -0
  390. package/dist/rdf/calc-rdf.js +111 -0
  391. package/dist/rdf/index.d.ts +23 -0
  392. package/dist/rdf/index.js +2 -0
  393. package/dist/sanitize.d.ts +6 -0
  394. package/dist/sanitize.js +116 -0
  395. package/dist/settings.d.ts +255 -0
  396. package/dist/settings.js +1132 -0
  397. package/dist/spectral/Bands.svelte +1040 -0
  398. package/dist/spectral/Bands.svelte.d.ts +40 -0
  399. package/dist/spectral/BandsAndDos.svelte +134 -0
  400. package/dist/spectral/BandsAndDos.svelte.d.ts +18 -0
  401. package/dist/spectral/BrillouinBandsDos.svelte +252 -0
  402. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +20 -0
  403. package/dist/spectral/Dos.svelte +697 -0
  404. package/dist/spectral/Dos.svelte.d.ts +29 -0
  405. package/dist/spectral/helpers.d.ts +119 -0
  406. package/dist/spectral/helpers.js +1032 -0
  407. package/dist/spectral/index.d.ts +6 -0
  408. package/dist/spectral/index.js +6 -0
  409. package/dist/spectral/types.d.ts +84 -0
  410. package/dist/spectral/types.js +2 -0
  411. package/dist/state.svelte.d.ts +25 -0
  412. package/dist/state.svelte.js +45 -0
  413. package/dist/structure/Arrow.svelte +72 -0
  414. package/dist/structure/Arrow.svelte.d.ts +15 -0
  415. package/dist/structure/AtomLegend.svelte +815 -0
  416. package/dist/structure/AtomLegend.svelte.d.ts +35 -0
  417. package/dist/structure/Bond.svelte +140 -0
  418. package/dist/structure/Bond.svelte.d.ts +9 -0
  419. package/dist/structure/CanvasTooltip.svelte +33 -0
  420. package/dist/structure/CanvasTooltip.svelte.d.ts +12 -0
  421. package/dist/structure/CellSelect.svelte +349 -0
  422. package/dist/structure/CellSelect.svelte.d.ts +13 -0
  423. package/dist/structure/Cylinder.svelte +45 -0
  424. package/dist/structure/Cylinder.svelte.d.ts +10 -0
  425. package/dist/structure/Lattice.svelte +196 -0
  426. package/dist/structure/Lattice.svelte.d.ts +17 -0
  427. package/dist/structure/Structure.svelte +2248 -0
  428. package/dist/structure/Structure.svelte.d.ts +89 -0
  429. package/dist/structure/StructureControls.svelte +1273 -0
  430. package/dist/structure/StructureControls.svelte.d.ts +31 -0
  431. package/dist/structure/StructureExportPane.svelte +252 -0
  432. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  433. package/dist/structure/StructureInfoPane.svelte +737 -0
  434. package/dist/structure/StructureInfoPane.svelte.d.ts +19 -0
  435. package/dist/structure/StructureScene.svelte +2255 -0
  436. package/dist/structure/StructureScene.svelte.d.ts +111 -0
  437. package/dist/structure/atom-properties.d.ts +37 -0
  438. package/dist/structure/atom-properties.js +200 -0
  439. package/dist/structure/bond-order-perception.d.ts +13 -0
  440. package/dist/structure/bond-order-perception.js +384 -0
  441. package/dist/structure/bonding.d.ts +68 -0
  442. package/dist/structure/bonding.js +696 -0
  443. package/dist/structure/export.d.ts +20 -0
  444. package/dist/structure/export.js +727 -0
  445. package/dist/structure/index.d.ts +126 -0
  446. package/dist/structure/index.js +169 -0
  447. package/dist/structure/label-placement.d.ts +14 -0
  448. package/dist/structure/label-placement.js +72 -0
  449. package/dist/structure/measure.d.ts +6 -0
  450. package/dist/structure/measure.js +29 -0
  451. package/dist/structure/parse.d.ts +66 -0
  452. package/dist/structure/parse.js +1392 -0
  453. package/dist/structure/partial-occupancy.d.ts +25 -0
  454. package/dist/structure/partial-occupancy.js +99 -0
  455. package/dist/structure/pbc.d.ts +9 -0
  456. package/dist/structure/pbc.js +123 -0
  457. package/dist/structure/supercell.d.ts +8 -0
  458. package/dist/structure/supercell.js +170 -0
  459. package/dist/structure/validation.d.ts +2 -0
  460. package/dist/structure/validation.js +10 -0
  461. package/dist/symmetry/SymmetryStats.svelte +226 -0
  462. package/dist/symmetry/SymmetryStats.svelte.d.ts +21 -0
  463. package/dist/symmetry/WyckoffTable.svelte +120 -0
  464. package/dist/symmetry/WyckoffTable.svelte.d.ts +11 -0
  465. package/dist/symmetry/cell-transform.d.ts +12 -0
  466. package/dist/symmetry/cell-transform.js +91 -0
  467. package/dist/symmetry/index.d.ts +43 -0
  468. package/dist/symmetry/index.js +228 -0
  469. package/dist/symmetry/spacegroups.d.ts +9 -0
  470. package/dist/symmetry/spacegroups.js +394 -0
  471. package/dist/table/HeatmapTable.svelte +1833 -0
  472. package/dist/table/HeatmapTable.svelte.d.ts +49 -0
  473. package/dist/table/ToggleMenu.svelte +385 -0
  474. package/dist/table/ToggleMenu.svelte.d.ts +11 -0
  475. package/dist/table/index.d.ts +74 -0
  476. package/dist/table/index.js +38 -0
  477. package/dist/theme/ThemeControl.svelte +53 -0
  478. package/dist/theme/ThemeControl.svelte.d.ts +9 -0
  479. package/dist/theme/index.d.ts +29 -0
  480. package/dist/theme/index.js +79 -0
  481. package/dist/time.d.ts +4 -0
  482. package/dist/time.js +70 -0
  483. package/dist/tooltip/TooltipContent.svelte +58 -0
  484. package/dist/tooltip/TooltipContent.svelte.d.ts +31 -0
  485. package/dist/tooltip/index.d.ts +2 -0
  486. package/dist/tooltip/index.js +1 -0
  487. package/dist/tooltip/types.d.ts +8 -0
  488. package/dist/tooltip/types.js +1 -0
  489. package/dist/trajectory/Trajectory.svelte +1545 -0
  490. package/dist/trajectory/Trajectory.svelte.d.ts +77 -0
  491. package/dist/trajectory/TrajectoryError.svelte +128 -0
  492. package/dist/trajectory/TrajectoryError.svelte.d.ts +13 -0
  493. package/dist/trajectory/TrajectoryExportPane.svelte +357 -0
  494. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +17 -0
  495. package/dist/trajectory/TrajectoryInfoPane.svelte +313 -0
  496. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +17 -0
  497. package/dist/trajectory/constants.d.ts +6 -0
  498. package/dist/trajectory/constants.js +7 -0
  499. package/dist/trajectory/extract.d.ts +5 -0
  500. package/dist/trajectory/extract.js +162 -0
  501. package/dist/trajectory/format-detect.d.ts +9 -0
  502. package/dist/trajectory/format-detect.js +76 -0
  503. package/dist/trajectory/frame-reader.d.ts +17 -0
  504. package/dist/trajectory/frame-reader.js +332 -0
  505. package/dist/trajectory/helpers.d.ts +15 -0
  506. package/dist/trajectory/helpers.js +164 -0
  507. package/dist/trajectory/index.d.ts +63 -0
  508. package/dist/trajectory/index.js +126 -0
  509. package/dist/trajectory/parse/ase.d.ts +2 -0
  510. package/dist/trajectory/parse/ase.js +73 -0
  511. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  512. package/dist/trajectory/parse/hdf5.js +127 -0
  513. package/dist/trajectory/parse/index.d.ts +12 -0
  514. package/dist/trajectory/parse/index.js +298 -0
  515. package/dist/trajectory/parse/lammps.d.ts +5 -0
  516. package/dist/trajectory/parse/lammps.js +179 -0
  517. package/dist/trajectory/parse/vasp.d.ts +2 -0
  518. package/dist/trajectory/parse/vasp.js +68 -0
  519. package/dist/trajectory/parse/xyz.d.ts +2 -0
  520. package/dist/trajectory/parse/xyz.js +110 -0
  521. package/dist/trajectory/plotting.d.ts +28 -0
  522. package/dist/trajectory/plotting.js +423 -0
  523. package/dist/trajectory/types.d.ts +11 -0
  524. package/dist/trajectory/types.js +1 -0
  525. package/dist/utils.d.ts +6 -0
  526. package/dist/utils.js +45 -0
  527. package/dist/xrd/XrdPlot.svelte +615 -0
  528. package/dist/xrd/XrdPlot.svelte.d.ts +28 -0
  529. package/dist/xrd/broadening.d.ts +20 -0
  530. package/dist/xrd/broadening.js +97 -0
  531. package/dist/xrd/calc-xrd.d.ts +37 -0
  532. package/dist/xrd/calc-xrd.js +336 -0
  533. package/dist/xrd/index.d.ts +37 -0
  534. package/dist/xrd/index.js +4 -0
  535. package/dist/xrd/parse.d.ts +13 -0
  536. package/dist/xrd/parse.js +749 -0
  537. package/license +1 -1
  538. package/package.json +232 -1457
  539. package/readme.md +98 -171
  540. package/.vscode/launch.json +0 -13
  541. package/.vscodeignore +0 -7
  542. package/dist/assets/STLExporter-BpTH3YHE.js +0 -8
  543. package/dist/assets/browser-DdDecX_W.js +0 -1
  544. package/dist/assets/export-qgn-H9y6.js +0 -2
  545. package/dist/assets/main-DiKYzti2.css +0 -1
  546. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  547. package/dist/extension.js +0 -31293
  548. package/dist/src/lib/FilePicker.svelte +0 -360
  549. package/dist/src/lib/MillerIndexInput.svelte +0 -66
  550. package/dist/src/lib/api/mp.ts +0 -26
  551. package/dist/src/lib/api/optimade.ts +0 -204
  552. package/dist/src/lib/brillouin/BrillouinZone.svelte +0 -549
  553. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +0 -144
  554. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +0 -146
  555. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  556. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +0 -476
  557. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +0 -92
  558. package/dist/src/lib/brillouin/compute.ts +0 -529
  559. package/dist/src/lib/brillouin/index.ts +0 -8
  560. package/dist/src/lib/brillouin/types.ts +0 -51
  561. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +0 -327
  562. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +0 -846
  563. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +0 -3193
  564. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +0 -94
  565. package/dist/src/lib/chempot-diagram/chempot-worker.ts +0 -11
  566. package/dist/src/lib/chempot-diagram/color.ts +0 -42
  567. package/dist/src/lib/chempot-diagram/compute.ts +0 -1014
  568. package/dist/src/lib/chempot-diagram/index.ts +0 -6
  569. package/dist/src/lib/chempot-diagram/pointer.ts +0 -56
  570. package/dist/src/lib/chempot-diagram/temperature.ts +0 -77
  571. package/dist/src/lib/chempot-diagram/types.ts +0 -130
  572. package/dist/src/lib/colors/index.ts +0 -249
  573. package/dist/src/lib/composition/BarChart.svelte +0 -297
  574. package/dist/src/lib/composition/BubbleChart.svelte +0 -218
  575. package/dist/src/lib/composition/Composition.svelte +0 -165
  576. package/dist/src/lib/composition/Formula.svelte +0 -268
  577. package/dist/src/lib/composition/FormulaFilter.svelte +0 -1257
  578. package/dist/src/lib/composition/PieChart.svelte +0 -323
  579. package/dist/src/lib/composition/format.ts +0 -155
  580. package/dist/src/lib/composition/index.ts +0 -37
  581. package/dist/src/lib/composition/parse.ts +0 -605
  582. package/dist/src/lib/constants.ts +0 -134
  583. package/dist/src/lib/controls.ts +0 -42
  584. package/dist/src/lib/convex-hull/ConvexHull.svelte +0 -157
  585. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +0 -825
  586. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +0 -1801
  587. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +0 -1398
  588. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +0 -535
  589. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +0 -125
  590. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +0 -929
  591. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +0 -131
  592. package/dist/src/lib/convex-hull/GasPressureControls.svelte +0 -247
  593. package/dist/src/lib/convex-hull/StructurePopup.svelte +0 -151
  594. package/dist/src/lib/convex-hull/barycentric-coords.ts +0 -246
  595. package/dist/src/lib/convex-hull/demo-temperature.ts +0 -63
  596. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +0 -405
  597. package/dist/src/lib/convex-hull/helpers.ts +0 -932
  598. package/dist/src/lib/convex-hull/index.ts +0 -202
  599. package/dist/src/lib/convex-hull/thermodynamics.ts +0 -2192
  600. package/dist/src/lib/convex-hull/types.ts +0 -267
  601. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +0 -311
  602. package/dist/src/lib/coordination/calc-coordination.ts +0 -93
  603. package/dist/src/lib/coordination/index.ts +0 -9
  604. package/dist/src/lib/effects.svelte.ts +0 -48
  605. package/dist/src/lib/element/ElementHeading.svelte +0 -26
  606. package/dist/src/lib/element/ElementPhoto.svelte +0 -57
  607. package/dist/src/lib/element/ElementStats.svelte +0 -80
  608. package/dist/src/lib/element/ElementTile.svelte +0 -484
  609. package/dist/src/lib/element/data.ts +0 -14
  610. package/dist/src/lib/element/index.ts +0 -8
  611. package/dist/src/lib/element/types.ts +0 -62
  612. package/dist/src/lib/feedback/ClickFeedback.svelte +0 -58
  613. package/dist/src/lib/feedback/DragOverlay.svelte +0 -42
  614. package/dist/src/lib/feedback/index.ts +0 -4
  615. package/dist/src/lib/fermi-surface/FermiSlice.svelte +0 -189
  616. package/dist/src/lib/fermi-surface/FermiSurface.svelte +0 -600
  617. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +0 -448
  618. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +0 -794
  619. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  620. package/dist/src/lib/fermi-surface/compute.ts +0 -728
  621. package/dist/src/lib/fermi-surface/constants.ts +0 -32
  622. package/dist/src/lib/fermi-surface/export.ts +0 -64
  623. package/dist/src/lib/fermi-surface/index.ts +0 -14
  624. package/dist/src/lib/fermi-surface/marching-cubes.ts +0 -3
  625. package/dist/src/lib/fermi-surface/parse.ts +0 -574
  626. package/dist/src/lib/fermi-surface/symmetry.ts +0 -56
  627. package/dist/src/lib/fermi-surface/types.ts +0 -159
  628. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +0 -1545
  629. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  630. package/dist/src/lib/heatmap-matrix/index.ts +0 -167
  631. package/dist/src/lib/heatmap-matrix/shared.ts +0 -7
  632. package/dist/src/lib/icons.ts +0 -650
  633. package/dist/src/lib/index.ts +0 -61
  634. package/dist/src/lib/io/decompress.ts +0 -92
  635. package/dist/src/lib/io/export.ts +0 -385
  636. package/dist/src/lib/io/fetch.ts +0 -46
  637. package/dist/src/lib/io/file-drop.ts +0 -51
  638. package/dist/src/lib/io/index.ts +0 -7
  639. package/dist/src/lib/io/is-binary.ts +0 -24
  640. package/dist/src/lib/io/types.ts +0 -8
  641. package/dist/src/lib/io/url-drop.ts +0 -141
  642. package/dist/src/lib/isosurface/Isosurface.svelte +0 -285
  643. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +0 -277
  644. package/dist/src/lib/isosurface/index.ts +0 -7
  645. package/dist/src/lib/isosurface/parse.ts +0 -656
  646. package/dist/src/lib/isosurface/slice.ts +0 -175
  647. package/dist/src/lib/isosurface/types.ts +0 -309
  648. package/dist/src/lib/labels.ts +0 -320
  649. package/dist/src/lib/layout/FullscreenToggle.svelte +0 -50
  650. package/dist/src/lib/layout/InfoCard.svelte +0 -120
  651. package/dist/src/lib/layout/InfoTag.svelte +0 -185
  652. package/dist/src/lib/layout/PropertyFilter.svelte +0 -246
  653. package/dist/src/lib/layout/SettingsSection.svelte +0 -148
  654. package/dist/src/lib/layout/SubpageGrid.svelte +0 -82
  655. package/dist/src/lib/layout/fullscreen.ts +0 -65
  656. package/dist/src/lib/layout/index.ts +0 -11
  657. package/dist/src/lib/layout/json-tree/JsonNode.svelte +0 -548
  658. package/dist/src/lib/layout/json-tree/JsonTree.svelte +0 -1230
  659. package/dist/src/lib/layout/json-tree/index.ts +0 -3
  660. package/dist/src/lib/layout/json-tree/types.ts +0 -126
  661. package/dist/src/lib/layout/json-tree/utils.ts +0 -682
  662. package/dist/src/lib/marching-cubes.ts +0 -614
  663. package/dist/src/lib/math.ts +0 -1081
  664. package/dist/src/lib/overlays/ContextMenu.svelte +0 -162
  665. package/dist/src/lib/overlays/CopyButton.svelte +0 -45
  666. package/dist/src/lib/overlays/DragControlTab.svelte +0 -98
  667. package/dist/src/lib/overlays/DraggablePane.svelte +0 -487
  668. package/dist/src/lib/overlays/InfoPaneCards.svelte +0 -149
  669. package/dist/src/lib/overlays/index.ts +0 -3
  670. package/dist/src/lib/periodic-table/PeriodicTable.svelte +0 -469
  671. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +0 -557
  672. package/dist/src/lib/periodic-table/PropertySelect.svelte +0 -37
  673. package/dist/src/lib/periodic-table/index.ts +0 -12
  674. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  675. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +0 -444
  676. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  677. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +0 -184
  678. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +0 -391
  679. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +0 -203
  680. package/dist/src/lib/phase-diagram/build-diagram.ts +0 -186
  681. package/dist/src/lib/phase-diagram/colors.ts +0 -58
  682. package/dist/src/lib/phase-diagram/diagram-input.ts +0 -40
  683. package/dist/src/lib/phase-diagram/index.ts +0 -13
  684. package/dist/src/lib/phase-diagram/parse.ts +0 -348
  685. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +0 -1023
  686. package/dist/src/lib/phase-diagram/types.ts +0 -144
  687. package/dist/src/lib/phase-diagram/utils.ts +0 -775
  688. package/dist/src/lib/plot/AxisLabel.svelte +0 -51
  689. package/dist/src/lib/plot/BarPlot.svelte +0 -2113
  690. package/dist/src/lib/plot/BarPlotControls.svelte +0 -66
  691. package/dist/src/lib/plot/BinnedScatterPlot.svelte +0 -1114
  692. package/dist/src/lib/plot/ColorBar.svelte +0 -721
  693. package/dist/src/lib/plot/ColorScaleSelect.svelte +0 -54
  694. package/dist/src/lib/plot/ElementScatter.svelte +0 -63
  695. package/dist/src/lib/plot/Histogram.svelte +0 -1558
  696. package/dist/src/lib/plot/HistogramControls.svelte +0 -212
  697. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +0 -96
  698. package/dist/src/lib/plot/Line.svelte +0 -84
  699. package/dist/src/lib/plot/PlotAxis.svelte +0 -169
  700. package/dist/src/lib/plot/PlotControls.svelte +0 -537
  701. package/dist/src/lib/plot/PlotLegend.svelte +0 -569
  702. package/dist/src/lib/plot/PlotTooltip.svelte +0 -67
  703. package/dist/src/lib/plot/PortalSelect.svelte +0 -253
  704. package/dist/src/lib/plot/ReferenceLine3D.svelte +0 -156
  705. package/dist/src/lib/plot/ReferencePlane.svelte +0 -175
  706. package/dist/src/lib/plot/ScatterPlot.svelte +0 -2778
  707. package/dist/src/lib/plot/ScatterPlot3D.svelte +0 -529
  708. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +0 -437
  709. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +0 -912
  710. package/dist/src/lib/plot/ScatterPlotControls.svelte +0 -306
  711. package/dist/src/lib/plot/ScatterPoint.svelte +0 -182
  712. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +0 -293
  713. package/dist/src/lib/plot/Surface3D.svelte +0 -197
  714. package/dist/src/lib/plot/ZeroLines.svelte +0 -97
  715. package/dist/src/lib/plot/ZoomRect.svelte +0 -23
  716. package/dist/src/lib/plot/adaptive-density.ts +0 -316
  717. package/dist/src/lib/plot/auto-place.ts +0 -184
  718. package/dist/src/lib/plot/axis-utils.ts +0 -122
  719. package/dist/src/lib/plot/binned-scatter-types.ts +0 -83
  720. package/dist/src/lib/plot/data-cleaning.ts +0 -1069
  721. package/dist/src/lib/plot/data-transform.ts +0 -69
  722. package/dist/src/lib/plot/defaults.ts +0 -9
  723. package/dist/src/lib/plot/fill-utils.ts +0 -494
  724. package/dist/src/lib/plot/hover-lock.svelte.ts +0 -60
  725. package/dist/src/lib/plot/index.ts +0 -53
  726. package/dist/src/lib/plot/interactions.ts +0 -119
  727. package/dist/src/lib/plot/layout.ts +0 -425
  728. package/dist/src/lib/plot/reference-line.ts +0 -426
  729. package/dist/src/lib/plot/scales.ts +0 -654
  730. package/dist/src/lib/plot/svg.ts +0 -23
  731. package/dist/src/lib/plot/types.ts +0 -1144
  732. package/dist/src/lib/plot/utils/label-placement.ts +0 -541
  733. package/dist/src/lib/plot/utils/series-visibility.ts +0 -140
  734. package/dist/src/lib/plot/utils.ts +0 -11
  735. package/dist/src/lib/rdf/RdfPlot.svelte +0 -247
  736. package/dist/src/lib/rdf/calc-rdf.ts +0 -167
  737. package/dist/src/lib/rdf/index.ts +0 -27
  738. package/dist/src/lib/sanitize.ts +0 -126
  739. package/dist/src/lib/settings.ts +0 -1479
  740. package/dist/src/lib/spectral/Bands.svelte +0 -1040
  741. package/dist/src/lib/spectral/BandsAndDos.svelte +0 -134
  742. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +0 -252
  743. package/dist/src/lib/spectral/Dos.svelte +0 -697
  744. package/dist/src/lib/spectral/helpers.ts +0 -1381
  745. package/dist/src/lib/spectral/index.ts +0 -8
  746. package/dist/src/lib/spectral/types.ts +0 -112
  747. package/dist/src/lib/state.svelte.ts +0 -64
  748. package/dist/src/lib/structure/Arrow.svelte +0 -72
  749. package/dist/src/lib/structure/AtomLegend.svelte +0 -815
  750. package/dist/src/lib/structure/Bond.svelte +0 -140
  751. package/dist/src/lib/structure/CanvasTooltip.svelte +0 -33
  752. package/dist/src/lib/structure/CellSelect.svelte +0 -349
  753. package/dist/src/lib/structure/Cylinder.svelte +0 -45
  754. package/dist/src/lib/structure/Lattice.svelte +0 -196
  755. package/dist/src/lib/structure/Structure.svelte +0 -2248
  756. package/dist/src/lib/structure/StructureControls.svelte +0 -1273
  757. package/dist/src/lib/structure/StructureExportPane.svelte +0 -252
  758. package/dist/src/lib/structure/StructureInfoPane.svelte +0 -737
  759. package/dist/src/lib/structure/StructureScene.svelte +0 -2255
  760. package/dist/src/lib/structure/atom-properties.ts +0 -316
  761. package/dist/src/lib/structure/bond-order-perception.ts +0 -447
  762. package/dist/src/lib/structure/bonding.ts +0 -944
  763. package/dist/src/lib/structure/export.ts +0 -861
  764. package/dist/src/lib/structure/index.ts +0 -291
  765. package/dist/src/lib/structure/label-placement.ts +0 -130
  766. package/dist/src/lib/structure/measure.ts +0 -45
  767. package/dist/src/lib/structure/parse.ts +0 -1705
  768. package/dist/src/lib/structure/partial-occupancy.ts +0 -183
  769. package/dist/src/lib/structure/pbc.ts +0 -164
  770. package/dist/src/lib/structure/supercell.ts +0 -226
  771. package/dist/src/lib/structure/validation.ts +0 -11
  772. package/dist/src/lib/symmetry/SymmetryStats.svelte +0 -226
  773. package/dist/src/lib/symmetry/WyckoffTable.svelte +0 -120
  774. package/dist/src/lib/symmetry/cell-transform.ts +0 -118
  775. package/dist/src/lib/symmetry/index.ts +0 -348
  776. package/dist/src/lib/symmetry/spacegroups.ts +0 -404
  777. package/dist/src/lib/table/HeatmapTable.svelte +0 -1833
  778. package/dist/src/lib/table/ToggleMenu.svelte +0 -385
  779. package/dist/src/lib/table/index.ts +0 -139
  780. package/dist/src/lib/theme/ThemeControl.svelte +0 -53
  781. package/dist/src/lib/theme/index.ts +0 -107
  782. package/dist/src/lib/time.ts +0 -71
  783. package/dist/src/lib/tooltip/TooltipContent.svelte +0 -58
  784. package/dist/src/lib/tooltip/index.ts +0 -2
  785. package/dist/src/lib/tooltip/types.ts +0 -13
  786. package/dist/src/lib/trajectory/Trajectory.svelte +0 -1545
  787. package/dist/src/lib/trajectory/TrajectoryError.svelte +0 -128
  788. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +0 -357
  789. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +0 -313
  790. package/dist/src/lib/trajectory/constants.ts +0 -7
  791. package/dist/src/lib/trajectory/extract.ts +0 -196
  792. package/dist/src/lib/trajectory/format-detect.ts +0 -96
  793. package/dist/src/lib/trajectory/frame-reader.ts +0 -456
  794. package/dist/src/lib/trajectory/helpers.ts +0 -217
  795. package/dist/src/lib/trajectory/index.ts +0 -218
  796. package/dist/src/lib/trajectory/parse/ase.ts +0 -109
  797. package/dist/src/lib/trajectory/parse/hdf5.ts +0 -173
  798. package/dist/src/lib/trajectory/parse/index.ts +0 -411
  799. package/dist/src/lib/trajectory/parse/lammps.ts +0 -215
  800. package/dist/src/lib/trajectory/parse/vasp.ts +0 -102
  801. package/dist/src/lib/trajectory/parse/xyz.ts +0 -143
  802. package/dist/src/lib/trajectory/plotting.ts +0 -599
  803. package/dist/src/lib/trajectory/types.ts +0 -13
  804. package/dist/src/lib/utils.ts +0 -56
  805. package/dist/src/lib/xrd/XrdPlot.svelte +0 -615
  806. package/dist/src/lib/xrd/broadening.ts +0 -130
  807. package/dist/src/lib/xrd/calc-xrd.ts +0 -397
  808. package/dist/src/lib/xrd/index.ts +0 -38
  809. package/dist/src/lib/xrd/parse.ts +0 -858
  810. package/dist/webview.js +0 -29421
  811. package/icon.png +0 -0
  812. package/matterviz-0.3.2.vsix +0 -0
  813. package/matterviz-0.3.4.vsix +0 -0
  814. package/matterviz-0.3.5.vsix +0 -0
  815. package/scripts/sync-config.ts +0 -101
  816. package/src/declarations.d.ts +0 -2
  817. package/src/extension.ts +0 -972
  818. package/src/node-io.ts +0 -65
  819. package/src/types.ts +0 -17
  820. package/src/webview/JsonBrowser.svelte +0 -1079
  821. package/src/webview/PlotPanel.svelte +0 -346
  822. package/src/webview/detect.ts +0 -444
  823. package/src/webview/main.ts +0 -764
  824. package/src/webview/plot-utils.ts +0 -250
  825. package/test-fixtures/all-viz-types.json.gz +0 -0
  826. package/test-fixtures/plot-demo-data.json.gz +0 -0
  827. package/tests/detect.test.ts +0 -604
  828. package/tests/extension.test.ts +0 -2041
  829. package/tests/node-io.test.ts +0 -39
  830. package/tests/plot-utils.test.ts +0 -302
  831. package/tests/vite-plugin-json-gz.test.ts +0 -114
  832. package/tests/vscode-mock.ts +0 -18
  833. package/tests/webview.test.ts +0 -231
  834. package/tsconfig.json +0 -20
  835. package/vite-plugin-json-gz.ts +0 -29
  836. package/vite.config.ts +0 -34
  837. package/vite.extension.config.ts +0 -34
  838. /package/dist/{src/lib/EmptyState.svelte → EmptyState.svelte} +0 -0
  839. /package/dist/{src/lib/Icon.svelte → Icon.svelte} +0 -0
  840. /package/dist/{src/lib/app.css → app.css} +0 -0
  841. /package/dist/{src/lib/chempot-diagram → chempot-diagram}/ChemPotScene3D.svelte +0 -0
  842. /package/dist/{src/lib/colors → colors}/alloy-colors.json +0 -0
  843. /package/dist/{src/lib/colors → colors}/dark-mode-colors.json +0 -0
  844. /package/dist/{src/lib/colors → colors}/jmol-colors.json +0 -0
  845. /package/dist/{src/lib/colors → colors}/muted-colors.json +0 -0
  846. /package/dist/{src/lib/colors → colors}/pastel-colors.json +0 -0
  847. /package/dist/{src/lib/colors → colors}/vesta-colors.json +0 -0
  848. /package/dist/{src/lib/convex-hull → convex-hull}/TemperatureSlider.svelte +0 -0
  849. /package/dist/{src/lib/element → element}/BohrAtom.svelte +0 -0
  850. /package/dist/{src/lib/element → element}/Nucleus.svelte +0 -0
  851. /package/dist/{src/lib/element → element}/data.json +0 -0
  852. /package/dist/{src/lib/element → element}/data.json.gz +0 -0
  853. /package/dist/{src/lib/element → element}/data.json.gz.d.ts +0 -0
  854. /package/dist/{src/lib/element → element}/data.schema.json +0 -0
  855. /package/dist/{src/lib/element-image-urls.json → element-image-urls.json} +0 -0
  856. /package/dist/{src/lib/feedback → feedback}/Spinner.svelte +0 -0
  857. /package/dist/{src/lib/feedback → feedback}/StatusMessage.svelte +0 -0
  858. /package/dist/{src/lib/layout → layout}/json-tree/JsonValue.svelte +0 -0
  859. /package/dist/{src/lib/periodic-table → periodic-table}/TableInset.svelte +0 -0
  860. /package/dist/{src/lib/plot → plot}/FillArea.svelte +0 -0
  861. /package/dist/{src/lib/plot → plot}/ReferenceLine.svelte +0 -0
  862. /package/dist/{src/lib/theme → theme}/themes.mjs +0 -0
  863. /package/dist/{src/lib/xrd → xrd}/atomic_scattering_params.json +0 -0
@@ -0,0 +1,696 @@
1
+ // Bonding algorithms for structure visualization
2
+ import { element_data } from '../element';
3
+ import * as math from '../math';
4
+ const element_lookup = new Map(element_data.map((el) => [el.symbol, el]));
5
+ const covalent_radii = new Map(element_data.flatMap((el) => el.covalent_radius === null ? [] : [[el.symbol, el.covalent_radius]]));
6
+ const is_zero_cell_shift = (cell_shift) => cell_shift === undefined || cell_shift.every((val) => val === 0);
7
+ const format_cell_shift = (cell_shift) => {
8
+ if (cell_shift === undefined || is_zero_cell_shift(cell_shift))
9
+ return ``;
10
+ return `@${cell_shift.join(`,`)}`;
11
+ };
12
+ const negate_cell_shift = (cell_shift) => [
13
+ cell_shift[0] === 0 ? 0 : -cell_shift[0],
14
+ cell_shift[1] === 0 ? 0 : -cell_shift[1],
15
+ cell_shift[2] === 0 ? 0 : -cell_shift[2],
16
+ ];
17
+ const canonical_self_bond_shift = (cell_shift) => {
18
+ const first_non_zero = cell_shift.find((val) => val !== 0);
19
+ return first_non_zero !== undefined && first_non_zero < 0
20
+ ? negate_cell_shift(cell_shift)
21
+ : cell_shift;
22
+ };
23
+ const normalize_bond_endpoints = (site_idx_1, site_idx_2, cell_shift) => {
24
+ if (site_idx_1 === site_idx_2) {
25
+ const ordered = { site_idx_1, site_idx_2 };
26
+ if (cell_shift === undefined || is_zero_cell_shift(cell_shift))
27
+ return ordered;
28
+ return { ...ordered, cell_shift: canonical_self_bond_shift(cell_shift) };
29
+ }
30
+ const ordered = site_idx_1 < site_idx_2
31
+ ? { site_idx_1, site_idx_2 }
32
+ : { site_idx_1: site_idx_2, site_idx_2: site_idx_1 };
33
+ if (cell_shift === undefined || is_zero_cell_shift(cell_shift))
34
+ return ordered;
35
+ return {
36
+ ...ordered,
37
+ cell_shift: site_idx_1 < site_idx_2 ? cell_shift : negate_cell_shift(cell_shift),
38
+ };
39
+ };
40
+ export const normalize_structure_bond = (site_idx_1, site_idx_2, order, cell_shift) => {
41
+ const bond = normalize_bond_endpoints(site_idx_1, site_idx_2, cell_shift);
42
+ return { ...bond, order };
43
+ };
44
+ export const get_bond_key = (idx_1, idx_2, cell_shift) => {
45
+ const normalized = normalize_bond_endpoints(idx_1, idx_2, cell_shift);
46
+ return `${normalized.site_idx_1}-${normalized.site_idx_2}${format_cell_shift(normalized.cell_shift)}`;
47
+ };
48
+ export const BOND_ORDER_OPTIONS = [
49
+ { order: 1, label: `Single` },
50
+ { order: 1.5, label: `1.5` },
51
+ { order: 2, label: `Double` },
52
+ { order: 3, label: `Triple` },
53
+ { order: `aromatic`, label: `Aromatic` },
54
+ ];
55
+ const site_image_shift = (sites, site_idx) => {
56
+ const site = sites?.[site_idx];
57
+ const orig_site_idx = site?.properties?.orig_site_idx;
58
+ if (typeof orig_site_idx !== `number`)
59
+ return [0, 0, 0];
60
+ const orig_site = sites?.[orig_site_idx];
61
+ if (!site?.abc || !orig_site?.abc)
62
+ return [0, 0, 0];
63
+ return [
64
+ Math.round(site.abc[0] - orig_site.abc[0]),
65
+ Math.round(site.abc[1] - orig_site.abc[1]),
66
+ Math.round(site.abc[2] - orig_site.abc[2]),
67
+ ];
68
+ };
69
+ const original_site_idx = (sites, site_idx) => {
70
+ const orig_site_idx = sites?.[site_idx]?.properties?.orig_site_idx;
71
+ return typeof orig_site_idx === `number` ? orig_site_idx : site_idx;
72
+ };
73
+ export const canonicalize_bond_target = (bond, sites) => {
74
+ const shift_1 = site_image_shift(sites, bond.site_idx_1);
75
+ const shift_2 = site_image_shift(sites, bond.site_idx_2);
76
+ const base_shift = bond.cell_shift ?? [0, 0, 0];
77
+ const cell_shift = [
78
+ base_shift[0] + shift_2[0] - shift_1[0],
79
+ base_shift[1] + shift_2[1] - shift_1[1],
80
+ base_shift[2] + shift_2[2] - shift_1[2],
81
+ ];
82
+ return normalize_bond_endpoints(original_site_idx(sites, bond.site_idx_1), original_site_idx(sites, bond.site_idx_2), cell_shift);
83
+ };
84
+ const bond_key_for = (bond) => get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift);
85
+ const matches_bond_key = (bond, key) => bond_key_for(bond) === key;
86
+ const replace_bond = (bonds, next_bond) => {
87
+ const key = bond_key_for(next_bond);
88
+ return [...bonds.filter((bond) => !matches_bond_key(bond, key)), next_bond];
89
+ };
90
+ const remove_bond_key = (bonds, key) => bonds.filter((bond) => !matches_bond_key(bond, key));
91
+ const includes_bond_key = (bonds, key) => bonds.some((bond) => matches_bond_key(bond, key));
92
+ const get_bond_order = (bond) => bond?.bond_order ?? bond?.order ?? 1;
93
+ const find_bond_by_key = (bonds, key) => bonds.find((bond) => matches_bond_key(bond, key));
94
+ const make_bond_record = (bond, order) => normalize_structure_bond(bond.site_idx_1, bond.site_idx_2, order, bond.cell_shift);
95
+ export function has_visible_bond(edit_state, bond, calculated_bonds) {
96
+ const key = bond_key_for(bond);
97
+ if (includes_bond_key(edit_state.removed_bonds, key)) {
98
+ return false;
99
+ }
100
+ if (includes_bond_key(edit_state.added_bonds, key))
101
+ return true;
102
+ return includes_bond_key(calculated_bonds, key);
103
+ }
104
+ export function add_or_restore_bond(edit_state, bond, calculated_bonds, order) {
105
+ const record = make_bond_record(bond, order);
106
+ const key = bond_key_for(record);
107
+ const removed_bond = find_bond_by_key(edit_state.removed_bonds, key);
108
+ if (removed_bond) {
109
+ return {
110
+ action: `restored`,
111
+ changed: true,
112
+ state: {
113
+ ...edit_state,
114
+ added_bonds: remove_bond_key(edit_state.added_bonds, key),
115
+ removed_bonds: remove_bond_key(edit_state.removed_bonds, key),
116
+ bond_order_overrides: removed_bond.order === order
117
+ ? remove_bond_key(edit_state.bond_order_overrides, key)
118
+ : replace_bond(edit_state.bond_order_overrides, record),
119
+ },
120
+ };
121
+ }
122
+ if (has_visible_bond(edit_state, record, calculated_bonds)) {
123
+ return { action: `already-visible`, changed: false, state: edit_state };
124
+ }
125
+ return {
126
+ action: `added`,
127
+ changed: true,
128
+ state: {
129
+ ...edit_state,
130
+ added_bonds: replace_bond(edit_state.added_bonds, record),
131
+ bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
132
+ },
133
+ };
134
+ }
135
+ export function delete_bond(edit_state, bond, calculated_bonds) {
136
+ const record = make_bond_record(bond, 1);
137
+ const key = bond_key_for(record);
138
+ if (includes_bond_key(edit_state.added_bonds, key)) {
139
+ return {
140
+ action: `deleted-added`,
141
+ changed: true,
142
+ state: {
143
+ ...edit_state,
144
+ added_bonds: remove_bond_key(edit_state.added_bonds, key),
145
+ bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
146
+ },
147
+ };
148
+ }
149
+ const calculated = find_bond_by_key(calculated_bonds, key);
150
+ if (!calculated || includes_bond_key(edit_state.removed_bonds, key)) {
151
+ return { action: `not-visible`, changed: false, state: edit_state };
152
+ }
153
+ return {
154
+ action: `deleted-calculated`,
155
+ changed: true,
156
+ state: {
157
+ ...edit_state,
158
+ removed_bonds: replace_bond(edit_state.removed_bonds, {
159
+ ...record,
160
+ order: get_bond_order(calculated),
161
+ }),
162
+ bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
163
+ },
164
+ };
165
+ }
166
+ export function set_bond_order(edit_state, bond, calculated_bonds, order) {
167
+ const record = make_bond_record(bond, order);
168
+ const key = bond_key_for(record);
169
+ const calculated = find_bond_by_key(calculated_bonds, key);
170
+ if (calculated) {
171
+ const visible_order = get_bond_order(calculated);
172
+ const has_existing_edit = includes_bond_key(edit_state.added_bonds, key) ||
173
+ includes_bond_key(edit_state.removed_bonds, key) ||
174
+ includes_bond_key(edit_state.bond_order_overrides, key);
175
+ const next_overrides = order === visible_order
176
+ ? remove_bond_key(edit_state.bond_order_overrides, key)
177
+ : replace_bond(edit_state.bond_order_overrides, record);
178
+ const next_state = {
179
+ added_bonds: remove_bond_key(edit_state.added_bonds, key),
180
+ removed_bonds: remove_bond_key(edit_state.removed_bonds, key),
181
+ bond_order_overrides: next_overrides,
182
+ };
183
+ return {
184
+ action: `ordered-calculated`,
185
+ changed: has_existing_edit || order !== visible_order,
186
+ state: next_state,
187
+ };
188
+ }
189
+ return {
190
+ action: `ordered-added`,
191
+ changed: true,
192
+ state: {
193
+ ...edit_state,
194
+ added_bonds: replace_bond(edit_state.added_bonds, record),
195
+ bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
196
+ },
197
+ };
198
+ }
199
+ export const merge_bond_edits = (base_bonds, added, removed, overrides) => {
200
+ const key_for = (bond) => get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift);
201
+ const normalize_record = (bond) => normalize_structure_bond(bond.site_idx_1, bond.site_idx_2, bond.order, bond.cell_shift);
202
+ const removed_keys = new Set(removed.map(key_for));
203
+ const merged = new Map(base_bonds
204
+ .filter((bond) => !removed_keys.has(key_for(bond)))
205
+ .map((bond) => [key_for(bond), normalize_record(bond)]));
206
+ // Apply additions before overrides so user-set bond orders win even if
207
+ // callers accidentally pass overlapping edit lists.
208
+ for (const bond of added) {
209
+ if (!removed_keys.has(key_for(bond)))
210
+ merged.set(key_for(bond), normalize_record(bond));
211
+ }
212
+ for (const bond of overrides) {
213
+ if (!removed_keys.has(key_for(bond)))
214
+ merged.set(key_for(bond), normalize_record(bond));
215
+ }
216
+ return [...merged.values()];
217
+ };
218
+ const is_record = (value) => typeof value === `object` && value !== null;
219
+ export function normalize_bond_order(order) {
220
+ if (order === `aromatic`)
221
+ return order;
222
+ if (order === 1 || order === 1.5 || order === 2 || order === 3)
223
+ return order;
224
+ return null;
225
+ }
226
+ function normalize_cell_shift(cell_shift) {
227
+ if (cell_shift === undefined)
228
+ return undefined;
229
+ if (!Array.isArray(cell_shift) || cell_shift.length !== 3)
230
+ return null;
231
+ return cell_shift.some((val) => typeof val !== `number` || !Number.isInteger(val))
232
+ ? null
233
+ : [cell_shift[0], cell_shift[1], cell_shift[2]];
234
+ }
235
+ function lattice_translation(structure, cell_shift) {
236
+ if (cell_shift === undefined || is_zero_cell_shift(cell_shift))
237
+ return [0, 0, 0];
238
+ if (!(`lattice` in structure)) {
239
+ throw new Error(`Explicit bond cell_shift requires a crystal lattice`);
240
+ }
241
+ const [shift_a, shift_b, shift_c] = cell_shift;
242
+ const [vec_a, vec_b, vec_c] = structure.lattice.matrix;
243
+ return math.add(math.scale(vec_a, shift_a), math.scale(vec_b, shift_b), math.scale(vec_c, shift_c));
244
+ }
245
+ export function structure_bond_to_bond_pair(structure, bond) {
246
+ const { site_idx_1, site_idx_2, order, cell_shift } = bond;
247
+ const site_1 = structure.sites[site_idx_1];
248
+ const site_2 = structure.sites[site_idx_2];
249
+ if (!site_1 || !site_2) {
250
+ throw new Error(`Cannot create bond pair for invalid site indices ${site_idx_1}, ${site_idx_2}`);
251
+ }
252
+ const pos_1 = site_1.xyz;
253
+ const pos_2 = math.add(site_2.xyz, lattice_translation(structure, cell_shift));
254
+ return {
255
+ pos_1,
256
+ pos_2,
257
+ site_idx_1,
258
+ site_idx_2,
259
+ bond_length: math.euclidean_dist(pos_1, pos_2),
260
+ strength: 1,
261
+ bond_order: order,
262
+ cell_shift,
263
+ transform_matrix: compute_bond_transform(pos_1, pos_2),
264
+ };
265
+ }
266
+ export function get_explicit_bond_metadata(structure) {
267
+ const raw_bonds = structure.properties?.bonds;
268
+ if (raw_bonds === undefined)
269
+ return [];
270
+ if (!Array.isArray(raw_bonds)) {
271
+ console.warn(`Ignoring structure.properties.bonds because it is not an array`);
272
+ return [];
273
+ }
274
+ const explicit_bonds = new Map();
275
+ for (const [entry_idx, raw_bond] of raw_bonds.entries()) {
276
+ if (!is_record(raw_bond)) {
277
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: expected object`);
278
+ continue;
279
+ }
280
+ const { order } = raw_bond;
281
+ const site_idx_1 = raw_bond.site_idx_1;
282
+ const site_idx_2 = raw_bond.site_idx_2;
283
+ if (typeof site_idx_1 !== `number` ||
284
+ typeof site_idx_2 !== `number` ||
285
+ !Number.isInteger(site_idx_1) ||
286
+ !Number.isInteger(site_idx_2)) {
287
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: site indices must be integers`);
288
+ continue;
289
+ }
290
+ if (site_idx_1 < 0 ||
291
+ site_idx_2 < 0 ||
292
+ site_idx_1 >= structure.sites.length ||
293
+ site_idx_2 >= structure.sites.length) {
294
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: site indices ${site_idx_1}, ${site_idx_2} are out of range for ${structure.sites.length} sites`);
295
+ continue;
296
+ }
297
+ const bond_order = normalize_bond_order(order);
298
+ if (bond_order === null) {
299
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: unsupported order ${String(order)}`);
300
+ continue;
301
+ }
302
+ const cell_shift = normalize_cell_shift(raw_bond.cell_shift);
303
+ if (cell_shift === null) {
304
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: cell_shift must be three integers`);
305
+ continue;
306
+ }
307
+ if (site_idx_1 === site_idx_2 && is_zero_cell_shift(cell_shift)) {
308
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: endpoints match`);
309
+ continue;
310
+ }
311
+ if (cell_shift !== undefined &&
312
+ !is_zero_cell_shift(cell_shift) &&
313
+ !(`lattice` in structure)) {
314
+ console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: cell_shift requires a crystal lattice`);
315
+ continue;
316
+ }
317
+ const key = get_bond_key(site_idx_1, site_idx_2, cell_shift);
318
+ if (explicit_bonds.has(key)) {
319
+ console.warn(`Duplicate explicit bond definition at index ${entry_idx} for site indices ${site_idx_1}, ${site_idx_2} with order ${bond_order}; will overwrite the previous entry`);
320
+ }
321
+ explicit_bonds.set(key, normalize_structure_bond(site_idx_1, site_idx_2, bond_order, cell_shift));
322
+ }
323
+ return [...explicit_bonds.values()];
324
+ }
325
+ export function apply_explicit_bond_metadata(structure, bonds) {
326
+ const explicit_bonds = get_explicit_bond_metadata(structure);
327
+ if (explicit_bonds.length === 0)
328
+ return bonds;
329
+ const explicit_by_key = new Map(explicit_bonds.map((bond) => [
330
+ get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift),
331
+ bond,
332
+ ]));
333
+ const merged = bonds.map((bond) => {
334
+ const key = get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift);
335
+ const explicit = explicit_by_key.get(key);
336
+ if (!explicit)
337
+ return bond;
338
+ explicit_by_key.delete(key);
339
+ return { ...bond, bond_order: explicit.order };
340
+ });
341
+ for (const explicit_bond of explicit_by_key.values()) {
342
+ merged.push(structure_bond_to_bond_pair(structure, explicit_bond));
343
+ }
344
+ return merged;
345
+ }
346
+ export function scale_and_offset_bond_matrix(transform_matrix, offset, radius_scale) {
347
+ const matrix = new Float32Array(transform_matrix);
348
+ // Column-major 4x4 layout: 0-2 are the right vector, 8-10 are the forward
349
+ // vector. Scale orientation columns for cylinder radius, not translation.
350
+ for (const matrix_idx of [0, 1, 2, 8, 9, 10]) {
351
+ matrix[matrix_idx] *= radius_scale;
352
+ }
353
+ const right_len = Math.hypot(matrix[0], matrix[1], matrix[2]) || 1;
354
+ const offset_dir = [
355
+ matrix[0] / right_len,
356
+ matrix[1] / right_len,
357
+ matrix[2] / right_len,
358
+ ];
359
+ matrix[12] += offset_dir[0] * offset;
360
+ matrix[13] += offset_dir[1] * offset;
361
+ matrix[14] += offset_dir[2] * offset;
362
+ return matrix;
363
+ }
364
+ export function get_bond_render_matrices(bond, bond_thickness) {
365
+ const order = bond.bond_order ?? 1;
366
+ const gap = bond_thickness * 1.8;
367
+ const offsets_and_scales = order === 2
368
+ ? [
369
+ [-gap / 2, 0.65],
370
+ [gap / 2, 0.65],
371
+ ]
372
+ : order === 3
373
+ ? [
374
+ [-gap, 0.55],
375
+ [0, 0.55],
376
+ [gap, 0.55],
377
+ ]
378
+ : order === 1.5 || order === `aromatic`
379
+ ? [
380
+ [-gap / 2, 0.75],
381
+ [gap / 2, 0.4],
382
+ ]
383
+ : [];
384
+ return offsets_and_scales.length === 0
385
+ ? [bond.transform_matrix]
386
+ : offsets_and_scales.map(([offset, radius_scale]) => scale_and_offset_bond_matrix(bond.transform_matrix, offset, radius_scale));
387
+ }
388
+ // Get the species with highest occupancy from a site.
389
+ const get_majority_species = (site) => (site.species ?? []).reduce((max_species, species) => (species.occu > max_species.occu ? species : max_species), site.species?.[0] ?? { element: ``, occu: -1 });
390
+ // Helper to extract numeric index from site properties
391
+ function get_orig_idx(site, fallback) {
392
+ const props = site.properties;
393
+ if (!props)
394
+ return fallback;
395
+ const raw = props.orig_unit_cell_idx ?? props.orig_site_idx;
396
+ if (raw === undefined)
397
+ return fallback;
398
+ const num = Number(raw);
399
+ return Number.isFinite(num) ? num : fallback;
400
+ }
401
+ // Compute 4x4 transformation matrix for bond cylinder between two positions.
402
+ // Uses Y-up, right-handed coordinate system convention for Three.js compatibility.
403
+ export function compute_bond_transform(pos_1, pos_2) {
404
+ const [dx, dy, dz] = math.subtract(pos_2, pos_1);
405
+ const height = Math.hypot(dx, dy, dz);
406
+ if (height < 1e-10) {
407
+ return new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
408
+ }
409
+ const [dir_x, dir_y, dir_z] = [dx / height, dy / height, dz / height];
410
+ let [m00, m01, m02, m10, m11, m12, m20, m21, m22] = [0, 0, 0, 0, 0, 0, 0, 0, 0];
411
+ // Special case: bond pointing straight up (+Y)
412
+ if (Math.abs(dir_y - 1.0) < 1e-10) {
413
+ ;
414
+ [m00, m01, m02, m10, m11, m12, m20, m21, m22] = [1, 0, 0, 0, 1, 0, 0, 0, 1];
415
+ }
416
+ else if (Math.abs(dir_y + 1.0) < 1e-10) {
417
+ // Special case: bond pointing straight down (-Y)
418
+ ;
419
+ [m00, m01, m02, m10, m11, m12, m20, m21, m22] = [1, 0, 0, 0, -1, 0, 0, 0, 1];
420
+ }
421
+ else {
422
+ // General case: construct orthonormal basis (right, dir, up)
423
+ // Right vector: perpendicular to dir in XZ plane
424
+ const [rx, rz] = [-dir_z, dir_x];
425
+ const r_len = Math.hypot(rx, rz);
426
+ const [right_x, right_z] = [rx / r_len, rz / r_len];
427
+ // Up vector: cross product of dir and right
428
+ const [up_x, up_y, up_z] = [
429
+ dir_y * right_z,
430
+ dir_z * right_x - dir_x * right_z,
431
+ -dir_y * right_x,
432
+ ];
433
+ [m00, m01, m02, m10, m11, m12, m20, m21, m22] = [
434
+ right_x,
435
+ dir_x,
436
+ up_x,
437
+ 0,
438
+ dir_y,
439
+ up_y,
440
+ right_z,
441
+ dir_z,
442
+ up_z,
443
+ ];
444
+ }
445
+ // Position at midpoint between the two atoms
446
+ const [px, py, pz] = [
447
+ (pos_1[0] + pos_2[0]) / 2,
448
+ (pos_1[1] + pos_2[1]) / 2,
449
+ (pos_1[2] + pos_2[2]) / 2,
450
+ ];
451
+ return new Float32Array([
452
+ // Return flattened column-major 4x4 matrix for Three.js
453
+ m00,
454
+ m10,
455
+ m20,
456
+ 0,
457
+ m01 * height,
458
+ m11 * height,
459
+ m21 * height,
460
+ 0,
461
+ m02,
462
+ m12,
463
+ m22,
464
+ 0,
465
+ px,
466
+ py,
467
+ pz,
468
+ 1,
469
+ ]);
470
+ }
471
+ // Build spatial grid by dividing 3D space into cubic cells.
472
+ function build_spatial_grid(sites, cell_size) {
473
+ const grid = new Map();
474
+ for (let idx = 0; idx < sites.length; idx++) {
475
+ const [x, y, z] = sites[idx].xyz.map((coord) => Math.floor(coord / cell_size));
476
+ const key = `${x},${y},${z}`;
477
+ const cell = grid.get(key);
478
+ if (cell)
479
+ cell.push(idx);
480
+ else
481
+ grid.set(key, [idx]);
482
+ }
483
+ return grid;
484
+ }
485
+ // Get all site indices in 3x3x3 cube of cells around position.
486
+ function get_neighbors_from_grid(pos, grid, cell_size) {
487
+ const [cx, cy, cz] = [
488
+ Math.floor(pos[0] / cell_size),
489
+ Math.floor(pos[1] / cell_size),
490
+ Math.floor(pos[2] / cell_size),
491
+ ];
492
+ const neighbors = [];
493
+ for (let dx = -1; dx <= 1; dx++) {
494
+ for (let dy = -1; dy <= 1; dy++) {
495
+ for (let dz = -1; dz <= 1; dz++) {
496
+ const cell = grid.get(`${cx + dx},${cy + dy},${cz + dz}`);
497
+ if (cell)
498
+ neighbors.push(...cell);
499
+ }
500
+ }
501
+ }
502
+ return neighbors;
503
+ }
504
+ // Setup spatial decomposition for structures with >50 atoms.
505
+ function setup_spatial_grid(sites, cutoff) {
506
+ const use_grid = sites.length > 50;
507
+ return use_grid ? { grid: build_spatial_grid(sites, cutoff), cell_size: cutoff } : null;
508
+ }
509
+ // Get candidate neighbor indices using spatial grid or all sites.
510
+ const get_candidates = (pos, sites, spatial) => spatial
511
+ ? get_neighbors_from_grid(pos, spatial.grid, spatial.cell_size)
512
+ : Array.from({ length: sites.length }, (_, idx) => idx);
513
+ export const BONDING_STRATEGIES = { electroneg_ratio, solid_angle };
514
+ // Electronegativity-based bonding with chemical preferences.
515
+ // This algorithm considers electronegativity differences between atoms, metal/nonmetal
516
+ // properties, and distance to determine bond strength. Bonds are only created if the
517
+ // computed strength exceeds the strength_threshold parameter (default: 0.3).
518
+ export function electroneg_ratio(structure, { electronegativity_threshold = 1.7, // Max electronegativity difference for bonding
519
+ max_distance_ratio = 2.0, // Max distance as multiple of sum of covalent radii
520
+ min_bond_dist = 0.4, // Minimum bond distance in Angstroms
521
+ metal_metal_penalty = 0.7, // Strength penalty for metal-metal bonds
522
+ metal_nonmetal_bonus = 1.5, // Strength bonus for metal-nonmetal bonds
523
+ similar_electronegativity_bonus = 1.2, // Bonus for similar electronegativity
524
+ same_species_penalty = 0.5, // Penalty for bonds between same element
525
+ strength_threshold = 0.3, // Minimum bond strength to include in results
526
+ } = {}) {
527
+ const { sites } = structure;
528
+ if (sites.length < 2)
529
+ return [];
530
+ const bonds = [];
531
+ const min_dist_sq = min_bond_dist ** 2;
532
+ const closest = new Map();
533
+ const props = sites.map((site) => {
534
+ const majority = get_majority_species(site);
535
+ const elem = majority.element;
536
+ const data = element_lookup.get(elem);
537
+ return {
538
+ element: elem,
539
+ electroneg: data?.electronegativity ?? 2.0,
540
+ is_metal: data?.metal ?? false,
541
+ is_nonmetal: data?.nonmetal ?? false,
542
+ radius: elem ? covalent_radii.get(elem) : undefined,
543
+ };
544
+ });
545
+ let max_radius = 0;
546
+ for (const radius of covalent_radii.values()) {
547
+ if (radius > max_radius)
548
+ max_radius = radius;
549
+ }
550
+ const max_cutoff = max_radius * 2 * max_distance_ratio;
551
+ const spatial = setup_spatial_grid(sites, max_cutoff);
552
+ const potential_bonds = [];
553
+ for (let idx_a = 0; idx_a < sites.length - 1; idx_a++) {
554
+ const [x1, y1, z1] = sites[idx_a].xyz;
555
+ const props_a = props[idx_a];
556
+ for (const idx_b of get_candidates(sites[idx_a].xyz, sites, spatial)) {
557
+ if (idx_b <= idx_a)
558
+ continue;
559
+ const [x2, y2, z2] = sites[idx_b].xyz;
560
+ const props_b = props[idx_b];
561
+ const [dx, dy, dz] = [x2 - x1, y2 - y1, z2 - z1];
562
+ const dist_sq = dx * dx + dy * dy + dz * dz;
563
+ const dist = Math.sqrt(dist_sq);
564
+ if (dist_sq < min_dist_sq || !props_a.radius || !props_b.radius)
565
+ continue;
566
+ const expected = props_a.radius + props_b.radius;
567
+ if (dist > expected * max_distance_ratio)
568
+ continue;
569
+ const electroneg_diff = Math.abs(props_a.electroneg - props_b.electroneg);
570
+ const electroneg_balance = electroneg_diff / (props_a.electroneg + props_b.electroneg);
571
+ let bond_strength = 1.0;
572
+ if (props_a.is_metal && props_b.is_metal) {
573
+ bond_strength *= metal_metal_penalty;
574
+ }
575
+ else if ((props_a.is_metal && props_b.is_nonmetal) ||
576
+ (props_a.is_nonmetal && props_b.is_metal)) {
577
+ bond_strength *= metal_nonmetal_bonus;
578
+ if (electroneg_diff > electronegativity_threshold)
579
+ bond_strength *= 1.3;
580
+ }
581
+ else if (electroneg_diff < 0.5) {
582
+ bond_strength *= similar_electronegativity_bonus;
583
+ }
584
+ const dist_weight = Math.exp(-((dist / expected - 1) ** 2) / 0.18);
585
+ const electroneg_weight = 1.0 - 0.3 * electroneg_balance;
586
+ let strength = bond_strength * dist_weight * electroneg_weight;
587
+ if (props_a.element === props_b.element)
588
+ strength *= same_species_penalty;
589
+ // If raw strength is already too low, we can skip early
590
+ // (penalty will only reduce it further)
591
+ if (strength <= strength_threshold)
592
+ continue;
593
+ // Use helper logic to handle both supercell and image atoms with robust normalization
594
+ const orig_idx_a = get_orig_idx(sites[idx_a], idx_a);
595
+ const orig_idx_b = get_orig_idx(sites[idx_b], idx_b);
596
+ // Update closest known normalized distance (dist / expected) for original atoms
597
+ // Normalized distance handles atoms of different sizes better than raw distance
598
+ // (e.g. C-H is short but C-C is longer; we don't want C-H to penalize C-C just because H is small)
599
+ const norm_dist = dist / expected;
600
+ const closest_dist_a = closest.get(orig_idx_a) ?? Infinity;
601
+ if (norm_dist < closest_dist_a)
602
+ closest.set(orig_idx_a, norm_dist);
603
+ const closest_dist_b = closest.get(orig_idx_b) ?? Infinity;
604
+ if (norm_dist < closest_dist_b)
605
+ closest.set(orig_idx_b, norm_dist);
606
+ potential_bonds.push({
607
+ site_idx_1: idx_a,
608
+ site_idx_2: idx_b,
609
+ dist,
610
+ expected_dist: expected,
611
+ base_strength: strength,
612
+ orig_idx_a,
613
+ orig_idx_b,
614
+ });
615
+ }
616
+ }
617
+ // Second pass: Apply penalties and filter
618
+ for (const bond of potential_bonds) {
619
+ const { site_idx_1, site_idx_2, dist, expected_dist, base_strength, orig_idx_a, orig_idx_b, } = bond;
620
+ const closest_dist_a = closest.get(orig_idx_a) ?? Infinity;
621
+ const closest_dist_b = closest.get(orig_idx_b) ?? Infinity;
622
+ const norm_dist = dist / expected_dist;
623
+ let strength = base_strength;
624
+ // Apply penalty if this bond is much longer (relative to radii) than the closest known bond
625
+ if (norm_dist > closest_dist_a) {
626
+ strength *= Math.exp(-(norm_dist / closest_dist_a - 1) / 0.5);
627
+ }
628
+ if (orig_idx_b !== orig_idx_a && norm_dist > closest_dist_b) {
629
+ strength *= Math.exp(-(norm_dist / closest_dist_b - 1) / 0.5);
630
+ }
631
+ if (strength > strength_threshold) {
632
+ bonds.push({
633
+ pos_1: sites[site_idx_1].xyz,
634
+ pos_2: sites[site_idx_2].xyz,
635
+ site_idx_1,
636
+ site_idx_2,
637
+ bond_length: dist,
638
+ strength,
639
+ transform_matrix: compute_bond_transform(sites[site_idx_1].xyz, sites[site_idx_2].xyz),
640
+ });
641
+ }
642
+ }
643
+ return apply_explicit_bond_metadata(structure, bonds);
644
+ }
645
+ // Solid angle-based bonding using geometric proximity heuristics.
646
+ // Inspired by Voronoi tessellation without having to actually compute Voronoi cells.
647
+ // This algorithm computes bond strength based on the solid angle subtended by atoms
648
+ // and their distance penalty. Bonds are only created if the computed strength exceeds
649
+ // the strength_threshold parameter.
650
+ export function solid_angle(structure, { min_solid_angle = 0.01, min_face_area = 0.05, max_distance = 5.0, min_bond_dist = 0.4, strength_threshold = 0.05, } = {}) {
651
+ const { sites } = structure;
652
+ if (sites.length < 2)
653
+ return [];
654
+ const bonds = [];
655
+ const min_dist_sq = min_bond_dist ** 2;
656
+ const max_dist_sq = max_distance ** 2;
657
+ const spatial = setup_spatial_grid(sites, max_distance);
658
+ for (let idx_a = 0; idx_a < sites.length - 1; idx_a++) {
659
+ const [x1, y1, z1] = sites[idx_a].xyz;
660
+ const majority_a = get_majority_species(sites[idx_a]);
661
+ const radius_a = majority_a.element ? covalent_radii.get(majority_a.element) : undefined;
662
+ for (const idx_b of get_candidates(sites[idx_a].xyz, sites, spatial)) {
663
+ if (idx_b <= idx_a)
664
+ continue;
665
+ const [x2, y2, z2] = sites[idx_b].xyz;
666
+ const majority_b = get_majority_species(sites[idx_b]);
667
+ const radius_b = majority_b.element ? covalent_radii.get(majority_b.element) : undefined;
668
+ const [dx, dy, dz] = [x2 - x1, y2 - y1, z2 - z1];
669
+ const dist_sq = dx * dx + dy * dy + dz * dz;
670
+ const dist = Math.sqrt(dist_sq);
671
+ if (dist_sq < min_dist_sq || dist_sq > max_dist_sq || !radius_a || !radius_b) {
672
+ continue;
673
+ }
674
+ const avg_radius = (radius_a + radius_b) / 2.0;
675
+ const face_area = Math.PI * avg_radius * avg_radius;
676
+ const bond_solid_angle = face_area / dist_sq;
677
+ if (bond_solid_angle < min_solid_angle || face_area < min_face_area)
678
+ continue;
679
+ const dist_penalty = Math.exp(-((dist / (radius_a + radius_b) - 1) ** 2) / 0.4);
680
+ const angle_strength = Math.min(bond_solid_angle / (4.0 * Math.PI), 1.0);
681
+ const strength = angle_strength * dist_penalty;
682
+ if (strength > strength_threshold) {
683
+ bonds.push({
684
+ pos_1: sites[idx_a].xyz,
685
+ pos_2: sites[idx_b].xyz,
686
+ site_idx_1: idx_a,
687
+ site_idx_2: idx_b,
688
+ bond_length: dist,
689
+ strength,
690
+ transform_matrix: compute_bond_transform(sites[idx_a].xyz, sites[idx_b].xyz),
691
+ });
692
+ }
693
+ }
694
+ }
695
+ return apply_explicit_bond_metadata(structure, bonds);
696
+ }