matterviz 0.3.6 → 0.4.0

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