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
@@ -1,944 +0,0 @@
1
- // Bonding algorithms for structure visualization
2
-
3
- import { element_data } from '$lib/element'
4
- import type { Vec3 } from '$lib/math'
5
- import * as math from '$lib/math'
6
- import type { AnyStructure, BondOrder, BondPair, Site, StructureBond } from '$lib/structure'
7
-
8
- type SpatialGrid = Map<string, number[]>
9
-
10
- const element_lookup = new Map(element_data.map((el) => [el.symbol, el]))
11
- const covalent_radii: Map<string, number> = new Map(
12
- element_data.flatMap((el) =>
13
- el.covalent_radius === null ? [] : [[el.symbol, el.covalent_radius]],
14
- ),
15
- )
16
-
17
- const is_zero_cell_shift = (cell_shift: Vec3 | undefined): boolean =>
18
- cell_shift === undefined || cell_shift.every((val) => val === 0)
19
-
20
- const format_cell_shift = (cell_shift: Vec3 | undefined): string => {
21
- if (cell_shift === undefined || is_zero_cell_shift(cell_shift)) return ``
22
- return `@${cell_shift.join(`,`)}`
23
- }
24
-
25
- const negate_cell_shift = (cell_shift: Vec3): Vec3 => [
26
- cell_shift[0] === 0 ? 0 : -cell_shift[0],
27
- cell_shift[1] === 0 ? 0 : -cell_shift[1],
28
- cell_shift[2] === 0 ? 0 : -cell_shift[2],
29
- ]
30
-
31
- const canonical_self_bond_shift = (cell_shift: Vec3): Vec3 => {
32
- const first_non_zero = cell_shift.find((val) => val !== 0)
33
- return first_non_zero !== undefined && first_non_zero < 0
34
- ? negate_cell_shift(cell_shift)
35
- : cell_shift
36
- }
37
-
38
- const normalize_bond_endpoints = (
39
- site_idx_1: number,
40
- site_idx_2: number,
41
- cell_shift?: Vec3,
42
- ): Pick<StructureBond, `site_idx_1` | `site_idx_2` | `cell_shift`> => {
43
- if (site_idx_1 === site_idx_2) {
44
- const ordered = { site_idx_1, site_idx_2 }
45
- if (cell_shift === undefined || is_zero_cell_shift(cell_shift)) return ordered
46
- return { ...ordered, cell_shift: canonical_self_bond_shift(cell_shift) }
47
- }
48
- const ordered =
49
- site_idx_1 < site_idx_2
50
- ? { site_idx_1, site_idx_2 }
51
- : { site_idx_1: site_idx_2, site_idx_2: site_idx_1 }
52
- if (cell_shift === undefined || is_zero_cell_shift(cell_shift)) return ordered
53
- return {
54
- ...ordered,
55
- cell_shift: site_idx_1 < site_idx_2 ? cell_shift : negate_cell_shift(cell_shift),
56
- }
57
- }
58
-
59
- export const normalize_structure_bond = (
60
- site_idx_1: number,
61
- site_idx_2: number,
62
- order: BondOrder,
63
- cell_shift?: Vec3,
64
- ): StructureBond => {
65
- const bond = normalize_bond_endpoints(site_idx_1, site_idx_2, cell_shift)
66
- return { ...bond, order }
67
- }
68
-
69
- export const get_bond_key = (idx_1: number, idx_2: number, cell_shift?: Vec3): string => {
70
- const normalized = normalize_bond_endpoints(idx_1, idx_2, cell_shift)
71
- return `${normalized.site_idx_1}-${normalized.site_idx_2}${format_cell_shift(
72
- normalized.cell_shift,
73
- )}`
74
- }
75
-
76
- export type BondEditState = {
77
- added_bonds: StructureBond[]
78
- removed_bonds: StructureBond[]
79
- bond_order_overrides: StructureBond[]
80
- }
81
-
82
- export type BondEditAction =
83
- | `added`
84
- | `already-visible`
85
- | `deleted-added`
86
- | `deleted-calculated`
87
- | `not-visible`
88
- | `ordered-added`
89
- | `ordered-calculated`
90
- | `restored`
91
-
92
- export type BondEditResult = {
93
- action: BondEditAction
94
- changed: boolean
95
- state: BondEditState
96
- }
97
-
98
- export type BondKeyTarget = Pick<StructureBond, `site_idx_1` | `site_idx_2` | `cell_shift`>
99
- type BondOrderTarget = BondKeyTarget & {
100
- bond_order?: BondOrder
101
- order?: BondOrder
102
- }
103
-
104
- export const BOND_ORDER_OPTIONS: { order: BondOrder; label: string }[] = [
105
- { order: 1, label: `Single` },
106
- { order: 1.5, label: `1.5` },
107
- { order: 2, label: `Double` },
108
- { order: 3, label: `Triple` },
109
- { order: `aromatic`, label: `Aromatic` },
110
- ]
111
-
112
- const site_image_shift = (sites: Site[] | undefined, site_idx: number): Vec3 => {
113
- const site = sites?.[site_idx]
114
- const orig_site_idx = site?.properties?.orig_site_idx
115
- if (typeof orig_site_idx !== `number`) return [0, 0, 0]
116
- const orig_site = sites?.[orig_site_idx]
117
- if (!site?.abc || !orig_site?.abc) return [0, 0, 0]
118
- return [
119
- Math.round(site.abc[0] - orig_site.abc[0]),
120
- Math.round(site.abc[1] - orig_site.abc[1]),
121
- Math.round(site.abc[2] - orig_site.abc[2]),
122
- ]
123
- }
124
-
125
- const original_site_idx = (sites: Site[] | undefined, site_idx: number): number => {
126
- const orig_site_idx = sites?.[site_idx]?.properties?.orig_site_idx
127
- return typeof orig_site_idx === `number` ? orig_site_idx : site_idx
128
- }
129
-
130
- export const canonicalize_bond_target = (
131
- bond: BondKeyTarget,
132
- sites: Site[] | undefined,
133
- ): BondKeyTarget => {
134
- const shift_1 = site_image_shift(sites, bond.site_idx_1)
135
- const shift_2 = site_image_shift(sites, bond.site_idx_2)
136
- const base_shift = bond.cell_shift ?? [0, 0, 0]
137
- const cell_shift: Vec3 = [
138
- base_shift[0] + shift_2[0] - shift_1[0],
139
- base_shift[1] + shift_2[1] - shift_1[1],
140
- base_shift[2] + shift_2[2] - shift_1[2],
141
- ]
142
- return normalize_bond_endpoints(
143
- original_site_idx(sites, bond.site_idx_1),
144
- original_site_idx(sites, bond.site_idx_2),
145
- cell_shift,
146
- )
147
- }
148
-
149
- const bond_key_for = (bond: BondKeyTarget): string =>
150
- get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift)
151
-
152
- const matches_bond_key = (bond: BondKeyTarget, key: string): boolean =>
153
- bond_key_for(bond) === key
154
-
155
- const replace_bond = (bonds: StructureBond[], next_bond: StructureBond): StructureBond[] => {
156
- const key = bond_key_for(next_bond)
157
- return [...bonds.filter((bond) => !matches_bond_key(bond, key)), next_bond]
158
- }
159
-
160
- const remove_bond_key = (bonds: StructureBond[], key: string): StructureBond[] =>
161
- bonds.filter((bond) => !matches_bond_key(bond, key))
162
-
163
- const includes_bond_key = (bonds: BondKeyTarget[], key: string): boolean =>
164
- bonds.some((bond) => matches_bond_key(bond, key))
165
-
166
- const get_bond_order = (bond: BondOrderTarget | undefined): BondOrder =>
167
- bond?.bond_order ?? bond?.order ?? 1
168
-
169
- const find_bond_by_key = <BondType extends BondKeyTarget>(
170
- bonds: BondType[],
171
- key: string,
172
- ): BondType | undefined => bonds.find((bond) => matches_bond_key(bond, key))
173
-
174
- const make_bond_record = (bond: BondKeyTarget, order: BondOrder): StructureBond =>
175
- normalize_structure_bond(bond.site_idx_1, bond.site_idx_2, order, bond.cell_shift)
176
-
177
- export function has_visible_bond(
178
- edit_state: BondEditState,
179
- bond: BondKeyTarget,
180
- calculated_bonds: BondOrderTarget[],
181
- ): boolean {
182
- const key = bond_key_for(bond)
183
- if (includes_bond_key(edit_state.removed_bonds, key)) {
184
- return false
185
- }
186
- if (includes_bond_key(edit_state.added_bonds, key)) return true
187
- return includes_bond_key(calculated_bonds, key)
188
- }
189
-
190
- export function add_or_restore_bond(
191
- edit_state: BondEditState,
192
- bond: BondKeyTarget,
193
- calculated_bonds: BondOrderTarget[],
194
- order: BondOrder,
195
- ): BondEditResult {
196
- const record = make_bond_record(bond, order)
197
- const key = bond_key_for(record)
198
- const removed_bond = find_bond_by_key(edit_state.removed_bonds, key)
199
- if (removed_bond) {
200
- return {
201
- action: `restored`,
202
- changed: true,
203
- state: {
204
- ...edit_state,
205
- added_bonds: remove_bond_key(edit_state.added_bonds, key),
206
- removed_bonds: remove_bond_key(edit_state.removed_bonds, key),
207
- bond_order_overrides:
208
- removed_bond.order === order
209
- ? remove_bond_key(edit_state.bond_order_overrides, key)
210
- : replace_bond(edit_state.bond_order_overrides, record),
211
- },
212
- }
213
- }
214
- if (has_visible_bond(edit_state, record, calculated_bonds)) {
215
- return { action: `already-visible`, changed: false, state: edit_state }
216
- }
217
- return {
218
- action: `added`,
219
- changed: true,
220
- state: {
221
- ...edit_state,
222
- added_bonds: replace_bond(edit_state.added_bonds, record),
223
- bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
224
- },
225
- }
226
- }
227
-
228
- export function delete_bond(
229
- edit_state: BondEditState,
230
- bond: BondKeyTarget,
231
- calculated_bonds: BondOrderTarget[],
232
- ): BondEditResult {
233
- const record = make_bond_record(bond, 1)
234
- const key = bond_key_for(record)
235
- if (includes_bond_key(edit_state.added_bonds, key)) {
236
- return {
237
- action: `deleted-added`,
238
- changed: true,
239
- state: {
240
- ...edit_state,
241
- added_bonds: remove_bond_key(edit_state.added_bonds, key),
242
- bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
243
- },
244
- }
245
- }
246
- const calculated = find_bond_by_key(calculated_bonds, key)
247
- if (!calculated || includes_bond_key(edit_state.removed_bonds, key)) {
248
- return { action: `not-visible`, changed: false, state: edit_state }
249
- }
250
- return {
251
- action: `deleted-calculated`,
252
- changed: true,
253
- state: {
254
- ...edit_state,
255
- removed_bonds: replace_bond(edit_state.removed_bonds, {
256
- ...record,
257
- order: get_bond_order(calculated),
258
- }),
259
- bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
260
- },
261
- }
262
- }
263
-
264
- export function set_bond_order(
265
- edit_state: BondEditState,
266
- bond: BondKeyTarget,
267
- calculated_bonds: BondOrderTarget[],
268
- order: BondOrder,
269
- ): BondEditResult {
270
- const record = make_bond_record(bond, order)
271
- const key = bond_key_for(record)
272
- const calculated = find_bond_by_key(calculated_bonds, key)
273
- if (calculated) {
274
- const visible_order = get_bond_order(calculated)
275
- const has_existing_edit =
276
- includes_bond_key(edit_state.added_bonds, key) ||
277
- includes_bond_key(edit_state.removed_bonds, key) ||
278
- includes_bond_key(edit_state.bond_order_overrides, key)
279
- const next_overrides =
280
- order === visible_order
281
- ? remove_bond_key(edit_state.bond_order_overrides, key)
282
- : replace_bond(edit_state.bond_order_overrides, record)
283
- const next_state = {
284
- added_bonds: remove_bond_key(edit_state.added_bonds, key),
285
- removed_bonds: remove_bond_key(edit_state.removed_bonds, key),
286
- bond_order_overrides: next_overrides,
287
- }
288
- return {
289
- action: `ordered-calculated`,
290
- changed: has_existing_edit || order !== visible_order,
291
- state: next_state,
292
- }
293
- }
294
- return {
295
- action: `ordered-added`,
296
- changed: true,
297
- state: {
298
- ...edit_state,
299
- added_bonds: replace_bond(edit_state.added_bonds, record),
300
- bond_order_overrides: remove_bond_key(edit_state.bond_order_overrides, key),
301
- },
302
- }
303
- }
304
-
305
- export const merge_bond_edits = (
306
- base_bonds: StructureBond[],
307
- added: StructureBond[],
308
- removed: StructureBond[],
309
- overrides: StructureBond[],
310
- ): StructureBond[] => {
311
- const key_for = (bond: StructureBond): string =>
312
- get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift)
313
- const normalize_record = (bond: StructureBond): StructureBond =>
314
- normalize_structure_bond(bond.site_idx_1, bond.site_idx_2, bond.order, bond.cell_shift)
315
- const removed_keys = new Set(removed.map(key_for))
316
- const merged = new Map(
317
- base_bonds
318
- .filter((bond) => !removed_keys.has(key_for(bond)))
319
- .map((bond) => [key_for(bond), normalize_record(bond)]),
320
- )
321
- // Apply additions before overrides so user-set bond orders win even if
322
- // callers accidentally pass overlapping edit lists.
323
- for (const bond of added) {
324
- if (!removed_keys.has(key_for(bond))) merged.set(key_for(bond), normalize_record(bond))
325
- }
326
- for (const bond of overrides) {
327
- if (!removed_keys.has(key_for(bond))) merged.set(key_for(bond), normalize_record(bond))
328
- }
329
- return [...merged.values()]
330
- }
331
-
332
- const is_record = (value: unknown): value is Record<string, unknown> =>
333
- typeof value === `object` && value !== null
334
-
335
- export function normalize_bond_order(order: unknown): BondOrder | null {
336
- if (order === `aromatic`) return order
337
- if (order === 1 || order === 1.5 || order === 2 || order === 3) return order
338
- return null
339
- }
340
-
341
- function normalize_cell_shift(cell_shift: unknown): Vec3 | undefined | null {
342
- if (cell_shift === undefined) return undefined
343
- if (!Array.isArray(cell_shift) || cell_shift.length !== 3) return null
344
- return cell_shift.some((val) => typeof val !== `number` || !Number.isInteger(val))
345
- ? null
346
- : [cell_shift[0], cell_shift[1], cell_shift[2]]
347
- }
348
-
349
- function lattice_translation(structure: AnyStructure, cell_shift: Vec3 | undefined): Vec3 {
350
- if (cell_shift === undefined || is_zero_cell_shift(cell_shift)) return [0, 0, 0]
351
- if (!(`lattice` in structure)) {
352
- throw new Error(`Explicit bond cell_shift requires a crystal lattice`)
353
- }
354
- const [shift_a, shift_b, shift_c] = cell_shift
355
- const [vec_a, vec_b, vec_c] = structure.lattice.matrix
356
- return math.add(
357
- math.scale(vec_a, shift_a),
358
- math.scale(vec_b, shift_b),
359
- math.scale(vec_c, shift_c),
360
- )
361
- }
362
-
363
- export function structure_bond_to_bond_pair(
364
- structure: AnyStructure,
365
- bond: StructureBond,
366
- ): BondPair {
367
- const { site_idx_1, site_idx_2, order, cell_shift } = bond
368
- const site_1 = structure.sites[site_idx_1]
369
- const site_2 = structure.sites[site_idx_2]
370
- if (!site_1 || !site_2) {
371
- throw new Error(
372
- `Cannot create bond pair for invalid site indices ${site_idx_1}, ${site_idx_2}`,
373
- )
374
- }
375
- const pos_1 = site_1.xyz
376
- const pos_2 = math.add(site_2.xyz, lattice_translation(structure, cell_shift))
377
- return {
378
- pos_1,
379
- pos_2,
380
- site_idx_1,
381
- site_idx_2,
382
- bond_length: math.euclidean_dist(pos_1, pos_2),
383
- strength: 1,
384
- bond_order: order,
385
- cell_shift,
386
- transform_matrix: compute_bond_transform(pos_1, pos_2),
387
- }
388
- }
389
-
390
- export function get_explicit_bond_metadata(structure: AnyStructure): StructureBond[] {
391
- const raw_bonds = structure.properties?.bonds
392
- if (raw_bonds === undefined) return []
393
- if (!Array.isArray(raw_bonds)) {
394
- console.warn(`Ignoring structure.properties.bonds because it is not an array`)
395
- return []
396
- }
397
-
398
- const explicit_bonds = new Map<string, StructureBond>()
399
- for (const [entry_idx, raw_bond] of raw_bonds.entries()) {
400
- if (!is_record(raw_bond)) {
401
- console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: expected object`)
402
- continue
403
- }
404
- const { order } = raw_bond
405
- const site_idx_1 = raw_bond.site_idx_1
406
- const site_idx_2 = raw_bond.site_idx_2
407
- if (
408
- typeof site_idx_1 !== `number` ||
409
- typeof site_idx_2 !== `number` ||
410
- !Number.isInteger(site_idx_1) ||
411
- !Number.isInteger(site_idx_2)
412
- ) {
413
- console.warn(
414
- `Ignoring invalid explicit bond at index ${entry_idx}: site indices must be integers`,
415
- )
416
- continue
417
- }
418
- if (
419
- site_idx_1 < 0 ||
420
- site_idx_2 < 0 ||
421
- site_idx_1 >= structure.sites.length ||
422
- site_idx_2 >= structure.sites.length
423
- ) {
424
- console.warn(
425
- `Ignoring invalid explicit bond at index ${entry_idx}: site indices ${
426
- site_idx_1
427
- }, ${site_idx_2} are out of range for ${structure.sites.length} sites`,
428
- )
429
- continue
430
- }
431
- const bond_order = normalize_bond_order(order)
432
- if (bond_order === null) {
433
- console.warn(
434
- `Ignoring invalid explicit bond at index ${entry_idx}: unsupported order ${String(
435
- order,
436
- )}`,
437
- )
438
- continue
439
- }
440
- const cell_shift = normalize_cell_shift(raw_bond.cell_shift)
441
- if (cell_shift === null) {
442
- console.warn(
443
- `Ignoring invalid explicit bond at index ${entry_idx}: cell_shift must be three integers`,
444
- )
445
- continue
446
- }
447
- if (site_idx_1 === site_idx_2 && is_zero_cell_shift(cell_shift)) {
448
- console.warn(`Ignoring invalid explicit bond at index ${entry_idx}: endpoints match`)
449
- continue
450
- }
451
- if (
452
- cell_shift !== undefined &&
453
- !is_zero_cell_shift(cell_shift) &&
454
- !(`lattice` in structure)
455
- ) {
456
- console.warn(
457
- `Ignoring invalid explicit bond at index ${entry_idx}: cell_shift requires a crystal lattice`,
458
- )
459
- continue
460
- }
461
-
462
- const key = get_bond_key(site_idx_1, site_idx_2, cell_shift)
463
- if (explicit_bonds.has(key)) {
464
- console.warn(
465
- `Duplicate explicit bond definition at index ${entry_idx} for site indices ${
466
- site_idx_1
467
- }, ${site_idx_2} with order ${bond_order}; will overwrite the previous entry`,
468
- )
469
- }
470
- explicit_bonds.set(
471
- key,
472
- normalize_structure_bond(site_idx_1, site_idx_2, bond_order, cell_shift),
473
- )
474
- }
475
- return [...explicit_bonds.values()]
476
- }
477
-
478
- export function apply_explicit_bond_metadata(
479
- structure: AnyStructure,
480
- bonds: BondPair[],
481
- ): BondPair[] {
482
- const explicit_bonds = get_explicit_bond_metadata(structure)
483
- if (explicit_bonds.length === 0) return bonds
484
-
485
- const explicit_by_key = new Map(
486
- explicit_bonds.map((bond) => [
487
- get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift),
488
- bond,
489
- ]),
490
- )
491
- const merged = bonds.map((bond) => {
492
- const key = get_bond_key(bond.site_idx_1, bond.site_idx_2, bond.cell_shift)
493
- const explicit = explicit_by_key.get(key)
494
- if (!explicit) return bond
495
- explicit_by_key.delete(key)
496
- return { ...bond, bond_order: explicit.order }
497
- })
498
-
499
- for (const explicit_bond of explicit_by_key.values()) {
500
- merged.push(structure_bond_to_bond_pair(structure, explicit_bond))
501
- }
502
-
503
- return merged
504
- }
505
-
506
- export function scale_and_offset_bond_matrix(
507
- transform_matrix: Float32Array,
508
- offset: number,
509
- radius_scale: number,
510
- ): Float32Array {
511
- const matrix = new Float32Array(transform_matrix)
512
- // Column-major 4x4 layout: 0-2 are the right vector, 8-10 are the forward
513
- // vector. Scale orientation columns for cylinder radius, not translation.
514
- for (const matrix_idx of [0, 1, 2, 8, 9, 10]) {
515
- matrix[matrix_idx] *= radius_scale
516
- }
517
-
518
- const right_len = Math.hypot(matrix[0], matrix[1], matrix[2]) || 1
519
- const offset_dir: Vec3 = [
520
- matrix[0] / right_len,
521
- matrix[1] / right_len,
522
- matrix[2] / right_len,
523
- ]
524
- matrix[12] += offset_dir[0] * offset
525
- matrix[13] += offset_dir[1] * offset
526
- matrix[14] += offset_dir[2] * offset
527
- return matrix
528
- }
529
-
530
- export function get_bond_render_matrices(
531
- bond: BondPair,
532
- bond_thickness: number,
533
- ): Float32Array[] {
534
- const order = bond.bond_order ?? 1
535
- const gap = bond_thickness * 1.8
536
- const offsets_and_scales: [number, number][] =
537
- order === 2
538
- ? [
539
- [-gap / 2, 0.65],
540
- [gap / 2, 0.65],
541
- ]
542
- : order === 3
543
- ? [
544
- [-gap, 0.55],
545
- [0, 0.55],
546
- [gap, 0.55],
547
- ]
548
- : order === 1.5 || order === `aromatic`
549
- ? [
550
- [-gap / 2, 0.75],
551
- [gap / 2, 0.4],
552
- ]
553
- : []
554
- return offsets_and_scales.length === 0
555
- ? [bond.transform_matrix]
556
- : offsets_and_scales.map(([offset, radius_scale]) =>
557
- scale_and_offset_bond_matrix(bond.transform_matrix, offset, radius_scale),
558
- )
559
- }
560
-
561
- // Get the species with highest occupancy from a site.
562
- const get_majority_species = (site: Site) =>
563
- (site.species ?? []).reduce(
564
- (max_species, species) => (species.occu > max_species.occu ? species : max_species),
565
- site.species?.[0] ?? { element: ``, occu: -1 },
566
- )
567
-
568
- // Helper to extract numeric index from site properties
569
- function get_orig_idx(site: Site, fallback: number): number {
570
- const props = site.properties
571
- if (!props) return fallback
572
-
573
- const raw = props.orig_unit_cell_idx ?? props.orig_site_idx
574
- if (raw === undefined) return fallback
575
-
576
- const num = Number(raw)
577
- return Number.isFinite(num) ? num : fallback
578
- }
579
-
580
- // Compute 4x4 transformation matrix for bond cylinder between two positions.
581
- // Uses Y-up, right-handed coordinate system convention for Three.js compatibility.
582
- export function compute_bond_transform(pos_1: Vec3, pos_2: Vec3): Float32Array {
583
- const [dx, dy, dz] = math.subtract(pos_2, pos_1)
584
- const height = Math.hypot(dx, dy, dz)
585
-
586
- if (height < 1e-10) {
587
- return new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])
588
- }
589
-
590
- const [dir_x, dir_y, dir_z] = [dx / height, dy / height, dz / height]
591
- let [m00, m01, m02, m10, m11, m12, m20, m21, m22] = [0, 0, 0, 0, 0, 0, 0, 0, 0]
592
-
593
- // Special case: bond pointing straight up (+Y)
594
- if (Math.abs(dir_y - 1.0) < 1e-10) {
595
- ;[m00, m01, m02, m10, m11, m12, m20, m21, m22] = [1, 0, 0, 0, 1, 0, 0, 0, 1]
596
- } else if (Math.abs(dir_y + 1.0) < 1e-10) {
597
- // Special case: bond pointing straight down (-Y)
598
- ;[m00, m01, m02, m10, m11, m12, m20, m21, m22] = [1, 0, 0, 0, -1, 0, 0, 0, 1]
599
- } else {
600
- // General case: construct orthonormal basis (right, dir, up)
601
- // Right vector: perpendicular to dir in XZ plane
602
- const [rx, rz] = [-dir_z, dir_x]
603
- const r_len = Math.hypot(rx, rz)
604
- const [right_x, right_z] = [rx / r_len, rz / r_len]
605
- // Up vector: cross product of dir and right
606
- const [up_x, up_y, up_z] = [
607
- dir_y * right_z,
608
- dir_z * right_x - dir_x * right_z,
609
- -dir_y * right_x,
610
- ]
611
- ;[m00, m01, m02, m10, m11, m12, m20, m21, m22] = [
612
- right_x,
613
- dir_x,
614
- up_x,
615
- 0,
616
- dir_y,
617
- up_y,
618
- right_z,
619
- dir_z,
620
- up_z,
621
- ]
622
- }
623
-
624
- // Position at midpoint between the two atoms
625
- const [px, py, pz] = [
626
- (pos_1[0] + pos_2[0]) / 2,
627
- (pos_1[1] + pos_2[1]) / 2,
628
- (pos_1[2] + pos_2[2]) / 2,
629
- ]
630
-
631
- return new Float32Array([
632
- // Return flattened column-major 4x4 matrix for Three.js
633
- m00,
634
- m10,
635
- m20,
636
- 0,
637
- m01 * height,
638
- m11 * height,
639
- m21 * height,
640
- 0,
641
- m02,
642
- m12,
643
- m22,
644
- 0,
645
- px,
646
- py,
647
- pz,
648
- 1,
649
- ])
650
- }
651
-
652
- // Build spatial grid by dividing 3D space into cubic cells.
653
- function build_spatial_grid(sites: Site[], cell_size: number): SpatialGrid {
654
- const grid: SpatialGrid = new Map()
655
- for (let idx = 0; idx < sites.length; idx++) {
656
- const [x, y, z] = sites[idx].xyz.map((coord) => Math.floor(coord / cell_size))
657
- const key = `${x},${y},${z}`
658
- const cell = grid.get(key)
659
- if (cell) cell.push(idx)
660
- else grid.set(key, [idx])
661
- }
662
- return grid
663
- }
664
-
665
- // Get all site indices in 3x3x3 cube of cells around position.
666
- function get_neighbors_from_grid(pos: Vec3, grid: SpatialGrid, cell_size: number): number[] {
667
- const [cx, cy, cz] = [
668
- Math.floor(pos[0] / cell_size),
669
- Math.floor(pos[1] / cell_size),
670
- Math.floor(pos[2] / cell_size),
671
- ]
672
- const neighbors: number[] = []
673
- for (let dx = -1; dx <= 1; dx++) {
674
- for (let dy = -1; dy <= 1; dy++) {
675
- for (let dz = -1; dz <= 1; dz++) {
676
- const cell = grid.get(`${cx + dx},${cy + dy},${cz + dz}`)
677
- if (cell) neighbors.push(...cell)
678
- }
679
- }
680
- }
681
- return neighbors
682
- }
683
-
684
- // Setup spatial decomposition for structures with >50 atoms.
685
- function setup_spatial_grid(sites: Site[], cutoff: number) {
686
- const use_grid = sites.length > 50
687
- return use_grid ? { grid: build_spatial_grid(sites, cutoff), cell_size: cutoff } : null
688
- }
689
-
690
- // Get candidate neighbor indices using spatial grid or all sites.
691
- const get_candidates = (
692
- pos: Vec3,
693
- sites: Site[],
694
- spatial: ReturnType<typeof setup_spatial_grid>,
695
- ): number[] =>
696
- spatial
697
- ? get_neighbors_from_grid(pos, spatial.grid, spatial.cell_size)
698
- : Array.from({ length: sites.length }, (_, idx) => idx)
699
-
700
- export const BONDING_STRATEGIES = { electroneg_ratio, solid_angle } as const
701
- export type BondingStrategy = keyof typeof BONDING_STRATEGIES
702
- export type BondingAlgo = (typeof BONDING_STRATEGIES)[BondingStrategy]
703
-
704
- // Electronegativity-based bonding with chemical preferences.
705
- // This algorithm considers electronegativity differences between atoms, metal/nonmetal
706
- // properties, and distance to determine bond strength. Bonds are only created if the
707
- // computed strength exceeds the strength_threshold parameter (default: 0.3).
708
- export function electroneg_ratio(
709
- structure: AnyStructure,
710
- {
711
- electronegativity_threshold = 1.7, // Max electronegativity difference for bonding
712
- max_distance_ratio = 2.0, // Max distance as multiple of sum of covalent radii
713
- min_bond_dist = 0.4, // Minimum bond distance in Angstroms
714
- metal_metal_penalty = 0.7, // Strength penalty for metal-metal bonds
715
- metal_nonmetal_bonus = 1.5, // Strength bonus for metal-nonmetal bonds
716
- similar_electronegativity_bonus = 1.2, // Bonus for similar electronegativity
717
- same_species_penalty = 0.5, // Penalty for bonds between same element
718
- strength_threshold = 0.3, // Minimum bond strength to include in results
719
- } = {},
720
- ): BondPair[] {
721
- const { sites } = structure
722
- if (sites.length < 2) return []
723
-
724
- const bonds: BondPair[] = []
725
- const min_dist_sq = min_bond_dist ** 2
726
- const closest = new Map<number, number>()
727
-
728
- const props = sites.map((site) => {
729
- const majority = get_majority_species(site)
730
- const elem = majority.element
731
- const data = element_lookup.get(elem)
732
- return {
733
- element: elem,
734
- electroneg: data?.electronegativity ?? 2.0,
735
- is_metal: data?.metal ?? false,
736
- is_nonmetal: data?.nonmetal ?? false,
737
- radius: elem ? covalent_radii.get(elem) : undefined,
738
- }
739
- })
740
-
741
- let max_radius = 0
742
- for (const radius of covalent_radii.values()) {
743
- if (radius > max_radius) max_radius = radius
744
- }
745
- const max_cutoff = max_radius * 2 * max_distance_ratio
746
- const spatial = setup_spatial_grid(sites, max_cutoff)
747
-
748
- // Two-pass approach to ensure symmetry between original and image atoms:
749
- // 1. Collect all potential bonds and determine closest neighbor distance for each unique atom (orig_idx)
750
- // 2. Filter bonds based on penalties using the fully populated closest distances
751
-
752
- interface PotentialBond {
753
- site_idx_1: number
754
- site_idx_2: number
755
- dist: number
756
- expected_dist: number
757
- base_strength: number
758
- orig_idx_a: number
759
- orig_idx_b: number
760
- }
761
-
762
- const potential_bonds: PotentialBond[] = []
763
-
764
- for (let idx_a = 0; idx_a < sites.length - 1; idx_a++) {
765
- const [x1, y1, z1] = sites[idx_a].xyz
766
- const props_a = props[idx_a]
767
-
768
- for (const idx_b of get_candidates(sites[idx_a].xyz, sites, spatial)) {
769
- if (idx_b <= idx_a) continue
770
-
771
- const [x2, y2, z2] = sites[idx_b].xyz
772
- const props_b = props[idx_b]
773
-
774
- const [dx, dy, dz] = [x2 - x1, y2 - y1, z2 - z1]
775
- const dist_sq = dx * dx + dy * dy + dz * dz
776
- const dist = Math.sqrt(dist_sq)
777
-
778
- if (dist_sq < min_dist_sq || !props_a.radius || !props_b.radius) continue
779
-
780
- const expected = props_a.radius + props_b.radius
781
- if (dist > expected * max_distance_ratio) continue
782
-
783
- const electroneg_diff = Math.abs(props_a.electroneg - props_b.electroneg)
784
- const electroneg_balance = electroneg_diff / (props_a.electroneg + props_b.electroneg)
785
-
786
- let bond_strength = 1.0
787
- if (props_a.is_metal && props_b.is_metal) {
788
- bond_strength *= metal_metal_penalty
789
- } else if (
790
- (props_a.is_metal && props_b.is_nonmetal) ||
791
- (props_a.is_nonmetal && props_b.is_metal)
792
- ) {
793
- bond_strength *= metal_nonmetal_bonus
794
- if (electroneg_diff > electronegativity_threshold) bond_strength *= 1.3
795
- } else if (electroneg_diff < 0.5) {
796
- bond_strength *= similar_electronegativity_bonus
797
- }
798
-
799
- const dist_weight = Math.exp(-((dist / expected - 1) ** 2) / 0.18)
800
- const electroneg_weight = 1.0 - 0.3 * electroneg_balance
801
- let strength = bond_strength * dist_weight * electroneg_weight
802
-
803
- if (props_a.element === props_b.element) strength *= same_species_penalty
804
-
805
- // If raw strength is already too low, we can skip early
806
- // (penalty will only reduce it further)
807
- if (strength <= strength_threshold) continue
808
-
809
- // Use helper logic to handle both supercell and image atoms with robust normalization
810
- const orig_idx_a = get_orig_idx(sites[idx_a], idx_a)
811
- const orig_idx_b = get_orig_idx(sites[idx_b], idx_b)
812
-
813
- // Update closest known normalized distance (dist / expected) for original atoms
814
- // Normalized distance handles atoms of different sizes better than raw distance
815
- // (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)
816
- const norm_dist = dist / expected
817
- const closest_dist_a = closest.get(orig_idx_a) ?? Infinity
818
- if (norm_dist < closest_dist_a) closest.set(orig_idx_a, norm_dist)
819
-
820
- const closest_dist_b = closest.get(orig_idx_b) ?? Infinity
821
- if (norm_dist < closest_dist_b) closest.set(orig_idx_b, norm_dist)
822
-
823
- potential_bonds.push({
824
- site_idx_1: idx_a,
825
- site_idx_2: idx_b,
826
- dist,
827
- expected_dist: expected,
828
- base_strength: strength,
829
- orig_idx_a,
830
- orig_idx_b,
831
- })
832
- }
833
- }
834
-
835
- // Second pass: Apply penalties and filter
836
- for (const bond of potential_bonds) {
837
- const {
838
- site_idx_1,
839
- site_idx_2,
840
- dist,
841
- expected_dist,
842
- base_strength,
843
- orig_idx_a,
844
- orig_idx_b,
845
- } = bond
846
-
847
- const closest_dist_a = closest.get(orig_idx_a) ?? Infinity
848
- const closest_dist_b = closest.get(orig_idx_b) ?? Infinity
849
- const norm_dist = dist / expected_dist
850
-
851
- let strength = base_strength
852
-
853
- // Apply penalty if this bond is much longer (relative to radii) than the closest known bond
854
- if (norm_dist > closest_dist_a) {
855
- strength *= Math.exp(-(norm_dist / closest_dist_a - 1) / 0.5)
856
- }
857
- if (orig_idx_b !== orig_idx_a && norm_dist > closest_dist_b) {
858
- strength *= Math.exp(-(norm_dist / closest_dist_b - 1) / 0.5)
859
- }
860
-
861
- if (strength > strength_threshold) {
862
- bonds.push({
863
- pos_1: sites[site_idx_1].xyz,
864
- pos_2: sites[site_idx_2].xyz,
865
- site_idx_1,
866
- site_idx_2,
867
- bond_length: dist,
868
- strength,
869
- transform_matrix: compute_bond_transform(sites[site_idx_1].xyz, sites[site_idx_2].xyz),
870
- })
871
- }
872
- }
873
-
874
- return apply_explicit_bond_metadata(structure, bonds)
875
- }
876
-
877
- // Solid angle-based bonding using geometric proximity heuristics.
878
- // Inspired by Voronoi tessellation without having to actually compute Voronoi cells.
879
- // This algorithm computes bond strength based on the solid angle subtended by atoms
880
- // and their distance penalty. Bonds are only created if the computed strength exceeds
881
- // the strength_threshold parameter.
882
- export function solid_angle(
883
- structure: AnyStructure,
884
- {
885
- min_solid_angle = 0.01,
886
- min_face_area = 0.05,
887
- max_distance = 5.0,
888
- min_bond_dist = 0.4,
889
- strength_threshold = 0.05,
890
- } = {},
891
- ): BondPair[] {
892
- const { sites } = structure
893
- if (sites.length < 2) return []
894
-
895
- const bonds: BondPair[] = []
896
- const min_dist_sq = min_bond_dist ** 2
897
- const max_dist_sq = max_distance ** 2
898
- const spatial = setup_spatial_grid(sites, max_distance)
899
-
900
- for (let idx_a = 0; idx_a < sites.length - 1; idx_a++) {
901
- const [x1, y1, z1] = sites[idx_a].xyz
902
- const majority_a = get_majority_species(sites[idx_a])
903
- const radius_a = majority_a.element ? covalent_radii.get(majority_a.element) : undefined
904
-
905
- for (const idx_b of get_candidates(sites[idx_a].xyz, sites, spatial)) {
906
- if (idx_b <= idx_a) continue
907
-
908
- const [x2, y2, z2] = sites[idx_b].xyz
909
- const majority_b = get_majority_species(sites[idx_b])
910
- const radius_b = majority_b.element ? covalent_radii.get(majority_b.element) : undefined
911
-
912
- const [dx, dy, dz] = [x2 - x1, y2 - y1, z2 - z1]
913
- const dist_sq = dx * dx + dy * dy + dz * dz
914
- const dist = Math.sqrt(dist_sq)
915
-
916
- if (dist_sq < min_dist_sq || dist_sq > max_dist_sq || !radius_a || !radius_b) {
917
- continue
918
- }
919
-
920
- const avg_radius = (radius_a + radius_b) / 2.0
921
- const face_area = Math.PI * avg_radius * avg_radius
922
- const bond_solid_angle = face_area / dist_sq
923
-
924
- if (bond_solid_angle < min_solid_angle || face_area < min_face_area) continue
925
-
926
- const dist_penalty = Math.exp(-((dist / (radius_a + radius_b) - 1) ** 2) / 0.4)
927
- const angle_strength = Math.min(bond_solid_angle / (4.0 * Math.PI), 1.0)
928
- const strength = angle_strength * dist_penalty
929
-
930
- if (strength > strength_threshold) {
931
- bonds.push({
932
- pos_1: sites[idx_a].xyz,
933
- pos_2: sites[idx_b].xyz,
934
- site_idx_1: idx_a,
935
- site_idx_2: idx_b,
936
- bond_length: dist,
937
- strength,
938
- transform_matrix: compute_bond_transform(sites[idx_a].xyz, sites[idx_b].xyz),
939
- })
940
- }
941
- }
942
- }
943
- return apply_explicit_bond_metadata(structure, bonds)
944
- }