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,1086 +0,0 @@
1
- <script lang="ts">
2
- import { format_num } from '$lib/labels'
3
- import {
4
- FullscreenToggle,
5
- set_fullscreen_bg,
6
- setup_fullscreen_effect,
7
- } from '$lib/layout'
8
- import { sanitize_svg } from '$lib/sanitize'
9
- import { compute_bounding_box_2d, polygon_centroid, type Vec2 } from '$lib/math'
10
- import type { AxisConfig } from '$lib/plot'
11
- import { constrain_tooltip_position } from '$lib/plot/layout'
12
- import { scaleLinear } from 'd3-scale'
13
- import type { ComponentProps, Snippet } from 'svelte'
14
- import type { HTMLAttributes } from 'svelte/elements'
15
- import { build_diagram } from './build-diagram'
16
- import type { DiagramInput } from './diagram-input'
17
- import PhaseDiagramControls from './PhaseDiagramControls.svelte'
18
- import PhaseDiagramEditorPane from './PhaseDiagramEditorPane.svelte'
19
- import PhaseDiagramExportPane from './PhaseDiagramExportPane.svelte'
20
- import PhaseDiagramTooltip from './PhaseDiagramTooltip.svelte'
21
- import { parse_phase_diagram_svg } from './svg-to-diagram'
22
- import type {
23
- LeverRuleMode,
24
- PhaseDiagramConfig,
25
- PhaseDiagramData,
26
- PhaseDiagramTooltipConfig,
27
- PhaseHoverInfo,
28
- PhaseRegion,
29
- TempUnit,
30
- } from './types'
31
- import {
32
- calculate_lever_rule,
33
- calculate_vertical_lever_rule,
34
- compute_label_properties,
35
- compute_x_domain,
36
- convert_temp,
37
- find_phase_at_point,
38
- format_composition,
39
- format_formula_svg,
40
- format_hover_info_text,
41
- format_label_svg,
42
- generate_boundary_path,
43
- generate_region_path,
44
- get_multi_phase_gradient,
45
- get_phase_color,
46
- merge_phase_diagram_config,
47
- PHASE_COLOR_RGB,
48
- transform_vertices,
49
- } from './utils'
50
-
51
- let {
52
- data,
53
- config = $bindable({}),
54
- on_phase_hover,
55
- fullscreen = $bindable(false),
56
- wrapper = $bindable(),
57
- hovered_region = $bindable(null),
58
- show_boundaries = $bindable(true),
59
- show_labels = $bindable(true),
60
- show_special_points = $bindable(true),
61
- show_grid = $bindable(true),
62
- show_component_labels = $bindable(true),
63
- fullscreen_toggle = true,
64
- enable_export = true,
65
- show_controls = true,
66
- display_temp_unit = $bindable(),
67
- controls_open = $bindable(false),
68
- controls_props = {},
69
- export_pane_open = $bindable(false),
70
- png_dpi = $bindable(150),
71
- export_filename = `phase-diagram`,
72
- lever_rule_mode = $bindable(`horizontal`),
73
- diagram_input = $bindable<DiagramInput | null>(null),
74
- editor_open = $bindable(false),
75
- x_axis = $bindable({}),
76
- y_axis = $bindable({}),
77
- tooltip,
78
- children,
79
- ...rest
80
- }: HTMLAttributes<HTMLDivElement> & {
81
- data: PhaseDiagramData
82
- config?: Partial<PhaseDiagramConfig>
83
- // Hover callback
84
- on_phase_hover?: (info: PhaseHoverInfo | null) => void
85
- // Bindable state
86
- fullscreen?: boolean
87
- wrapper?: HTMLDivElement
88
- hovered_region?: PhaseRegion | null
89
- // Display options
90
- show_boundaries?: boolean
91
- show_labels?: boolean
92
- show_special_points?: boolean
93
- show_grid?: boolean
94
- show_component_labels?: boolean
95
- fullscreen_toggle?: boolean
96
- enable_export?: boolean
97
- show_controls?: boolean
98
- // Temperature display unit (can differ from data.temperature_unit)
99
- display_temp_unit?: `K` | `°C` | `°F`
100
- // Controls pane
101
- controls_open?: boolean
102
- controls_props?: Partial<ComponentProps<typeof PhaseDiagramControls>>
103
- // Export options
104
- export_pane_open?: boolean
105
- png_dpi?: number
106
- export_filename?: string
107
- // Lever rule mode (horizontal = composition tie-line, vertical = temperature tie-line)
108
- lever_rule_mode?: LeverRuleMode
109
- // Diagram input editor (for SVG drop editing)
110
- diagram_input?: DiagramInput | null
111
- editor_open?: boolean
112
- // Axis configuration
113
- x_axis?: AxisConfig
114
- y_axis?: AxisConfig
115
- // Custom tooltip - can be a snippet (replaces default), config object (adds prefix/suffix),
116
- // or false to disable tooltip entirely
117
- tooltip?: Snippet<[PhaseHoverInfo]> | PhaseDiagramTooltipConfig | false
118
- children?: Snippet<
119
- [{ width: number; height: number; fullscreen: boolean }]
120
- >
121
- } = $props()
122
-
123
- // Shared icon/toggle styling for controls and export panes
124
- const pane_icon_style = `width: 14px; height: 14px`
125
- const pane_toggle_props = { style: `padding: 0` }
126
-
127
- // Rebuild diagram data when diagram_input changes ($derived auto-recomputes)
128
- const rebuilt_data = $derived.by(() => {
129
- if (!diagram_input) return null
130
- try {
131
- return build_diagram(diagram_input)
132
- } catch (error) {
133
- console.warn(`Failed to rebuild diagram from input:`, error)
134
- return null
135
- }
136
- })
137
-
138
- // Override from direct PhaseDiagramData edits in the editor pane
139
- let data_override = $state<PhaseDiagramData | null>(null)
140
-
141
- // Clear data_override when source data changes (e.g. new SVG dropped or data prop updated)
142
- $effect(() => {
143
- if (diagram_input || data) data_override = null
144
- })
145
-
146
- // Use editor override first (clears rebuilt_data path), then rebuilt, then data prop
147
- const effective_data = $derived(data_override ?? rebuilt_data ?? data)
148
-
149
- // Handle SVG file drop directly on the component
150
- function handle_svg_drop(event: DragEvent) {
151
- event.preventDefault()
152
- const file = event.dataTransfer?.files[0]
153
- if (!file || (!file.name.endsWith(`.svg`) && file.type !== `image/svg+xml`)) {
154
- return
155
- }
156
- const reader = new FileReader()
157
- reader.addEventListener(`load`, () => {
158
- try {
159
- diagram_input = parse_phase_diagram_svg(reader.result as string)
160
- } catch (error) {
161
- console.error(`Failed to parse dropped SVG:`, error)
162
- }
163
- })
164
- reader.readAsText(file)
165
- }
166
-
167
- // Merge config with centralized defaults using shared helper
168
- const merged_config = $derived(merge_phase_diagram_config(config))
169
-
170
- // Dimensions - use container size directly, no fallback to avoid layout shift
171
- let width = $state(0)
172
- let height = $state(0)
173
-
174
- // Margin from config
175
- const margin = $derived(merged_config.margin)
176
-
177
- // Pre-computed plot edges to avoid repeated calculations
178
- const left = $derived(margin.l)
179
- const right = $derived(width - margin.r)
180
- const top = $derived(margin.t)
181
- const bottom = $derived(height - margin.b)
182
- const plot_width = $derived(right - left)
183
- const plot_height = $derived(bottom - top)
184
-
185
- // Compute x domain from data extent, x_axis.range override, or default [0, 1]
186
- // Auto-extends to 0/1 when edge regions contain a pure component
187
- const x_domain = $derived(compute_x_domain(x_axis.range, effective_data))
188
-
189
- // Scales
190
- const x_scale = $derived(scaleLinear().domain(x_domain).range([left, right]))
191
-
192
- // Temperature units (guard for initial render when data may be undefined)
193
- const data_temp_unit = $derived<TempUnit>(
194
- (effective_data?.temperature_unit ?? `K`) as TempUnit,
195
- )
196
- const temp_unit = $derived<TempUnit>(display_temp_unit ?? data_temp_unit)
197
- const temp_range = $derived(effective_data?.temperature_range ?? [0, 1000])
198
-
199
- // Convert temperature range for display
200
- const display_temp_range = $derived<Vec2>([
201
- convert_temp(temp_range[0], data_temp_unit, temp_unit),
202
- convert_temp(temp_range[1], data_temp_unit, temp_unit),
203
- ])
204
-
205
- // y_scale maps data temperatures to SVG coordinates
206
- // We keep this in data units so region vertices render correctly
207
- const y_scale = $derived(
208
- scaleLinear().domain(temp_range).range([bottom, top]),
209
- )
210
-
211
- // y_scale_display maps display temperatures (after unit conversion) to SVG
212
- // Used for axis labels and ticks
213
- const y_scale_display = $derived(
214
- scaleLinear().domain(display_temp_range).range([bottom, top]),
215
- )
216
-
217
- // Generate tick values using d3 scale's built-in ticks method
218
- const x_ticks = $derived(
219
- x_scale.ticks(typeof x_axis.ticks === `number` ? x_axis.ticks : 5),
220
- )
221
- // Use display scale for y ticks so they show converted temperatures
222
- const y_ticks = $derived(
223
- y_scale_display.ticks(typeof y_axis.ticks === `number` ? y_axis.ticks : 6),
224
- )
225
-
226
- // Transform regions to SVG coordinates
227
- const transformed_regions = $derived(
228
- (effective_data?.regions ?? []).map((region) => {
229
- const svg_vertices = transform_vertices(region.vertices, x_scale, y_scale)
230
- const { width: box_width, height: box_height } = compute_bounding_box_2d(svg_vertices)
231
- const label_props = compute_label_properties(
232
- region.name,
233
- { width: box_width, height: box_height },
234
- merged_config.font_size,
235
- )
236
- // Get gradient stops for multi-phase regions (2+, supports 3+ phases)
237
- const gradient = get_multi_phase_gradient(region.name)
238
- const x_coords = svg_vertices.map(([vx]) => vx)
239
- return {
240
- ...region,
241
- svg_path: generate_region_path(svg_vertices),
242
- label_pos: region.label_position
243
- ? [x_scale(region.label_position[0]), y_scale(region.label_position[1])]
244
- : polygon_centroid(svg_vertices),
245
- label_rotation: label_props.rotation,
246
- label_lines: label_props.lines,
247
- label_scale: label_props.scale,
248
- gradient,
249
- x_min: Math.min(...x_coords),
250
- x_max: Math.max(...x_coords),
251
- }
252
- }),
253
- )
254
-
255
- // Transform boundaries to SVG coordinates
256
- const transformed_boundaries = $derived(
257
- (effective_data?.boundaries ?? []).map((boundary) => ({
258
- ...boundary,
259
- svg_path: generate_boundary_path(
260
- transform_vertices(boundary.points, x_scale, y_scale),
261
- ),
262
- })),
263
- )
264
-
265
- // Transform special points to SVG coordinates
266
- const transformed_special_points = $derived(
267
- (effective_data?.special_points ?? []).map((point) => ({
268
- ...point,
269
- svg_x: x_scale(point.position[0]),
270
- svg_y: y_scale(point.position[1]),
271
- })),
272
- )
273
-
274
- // Hover state
275
- let hover_info = $state<PhaseHoverInfo | null>(null)
276
- // Locked tooltip state (click to lock, click again to unlock)
277
- let locked_hover_info = $state<PhaseHoverInfo | null>(null)
278
-
279
- // Clear hover state helper (used in multiple places)
280
- function clear_hover() {
281
- hover_info = null
282
- hovered_region = null
283
- on_phase_hover?.(null)
284
- }
285
-
286
- // Handle click to lock/unlock tooltip
287
- function handle_click() {
288
- if (locked_hover_info) {
289
- // Unlock if already locked
290
- locked_hover_info = null
291
- } else if (hover_info) {
292
- // Lock current hover info
293
- locked_hover_info = { ...hover_info }
294
- }
295
- }
296
-
297
- // Effective hover info - locked takes precedence
298
- const effective_hover_info = $derived(locked_hover_info ?? hover_info)
299
-
300
- // Copy feedback state
301
- let copy_feedback_visible = $state(false)
302
- let copy_feedback_pos = $state({ x: 0, y: 0 })
303
- let copy_feedback_timeout: ReturnType<typeof setTimeout> | undefined
304
-
305
- // Handle double-click to copy tooltip data
306
- async function handle_double_click(event: MouseEvent) {
307
- if (!hover_info) return
308
- try {
309
- await navigator.clipboard.writeText(
310
- format_hover_info_text(
311
- hover_info,
312
- temp_unit,
313
- comp_unit,
314
- component_a,
315
- component_b,
316
- data_temp_unit,
317
- lever_rule_mode,
318
- ),
319
- )
320
- if (copy_feedback_timeout) clearTimeout(copy_feedback_timeout)
321
- copy_feedback_pos = { x: event.clientX, y: event.clientY }
322
- copy_feedback_visible = true
323
- copy_feedback_timeout = setTimeout(() => {
324
- copy_feedback_visible = false
325
- copy_feedback_timeout = undefined
326
- }, 1500)
327
- } catch (error) {
328
- console.error(`Failed to copy phase data:`, error)
329
- }
330
- }
331
-
332
- // Tooltip element reference for measuring actual size
333
- let tooltip_el = $state<HTMLDivElement | null>(null)
334
-
335
- // Tooltip positioning using shared utility (uses effective_hover_info for locked state)
336
- const tooltip_pos = $derived.by(() => {
337
- const info = effective_hover_info
338
- if (!info) return { x: 0, y: 0 }
339
- return constrain_tooltip_position(
340
- info.position.x,
341
- info.position.y,
342
- tooltip_el?.offsetWidth ?? 200,
343
- tooltip_el?.offsetHeight ?? 150,
344
- globalThis.innerWidth ?? 1000,
345
- globalThis.innerHeight ?? 800,
346
- { offset: 15 },
347
- )
348
- })
349
-
350
- // Find nearest special point within threshold (in SVG pixels)
351
- function find_nearby_special_point(
352
- svg_x: number,
353
- svg_y: number,
354
- threshold: number = 20,
355
- ) {
356
- let nearest: (typeof transformed_special_points)[0] | null = null
357
- let min_dist = threshold
358
- for (const point of transformed_special_points) {
359
- const dist = Math.hypot(point.svg_x - svg_x, point.svg_y - svg_y)
360
- if (dist < min_dist) {
361
- min_dist = dist
362
- nearest = point
363
- }
364
- }
365
- return nearest
366
- }
367
-
368
- // Pointer move handler (unified mouse/touch via Pointer Events API)
369
- function handle_pointer_move(
370
- event: PointerEvent & { currentTarget: SVGElement },
371
- ) {
372
- const svg = event.currentTarget
373
- const rect = svg.getBoundingClientRect()
374
- const svg_x = event.clientX - rect.left
375
- const svg_y = event.clientY - rect.top
376
-
377
- // Check if within plot area
378
- if (
379
- svg_x < left || svg_x > right || svg_y < top || svg_y > bottom ||
380
- !effective_data
381
- ) {
382
- clear_hover()
383
- return
384
- }
385
-
386
- // Convert to data coordinates and find phase
387
- const composition = x_scale.invert(svg_x)
388
- const temperature = y_scale.invert(svg_y)
389
- const region = find_phase_at_point(composition, temperature, effective_data)
390
-
391
- // Check for nearby special point
392
- const nearby_special = show_special_points
393
- ? find_nearby_special_point(svg_x, svg_y)
394
- : null
395
-
396
- if (region) {
397
- hovered_region = region
398
- hover_info = {
399
- region,
400
- composition,
401
- temperature,
402
- position: { x: event.clientX, y: event.clientY },
403
- lever_rule: calculate_lever_rule(region, composition, temperature) ||
404
- undefined,
405
- vertical_lever_rule:
406
- calculate_vertical_lever_rule(region, composition, temperature) ||
407
- undefined,
408
- special_point: nearby_special || undefined,
409
- }
410
- on_phase_hover?.(hover_info)
411
- } else {
412
- clear_hover()
413
- }
414
- }
415
-
416
- function handle_pointer_leave(event: PointerEvent) {
417
- // Don't clear on touch lift (allows reading tooltip) or when locked
418
- if (event.pointerType === `touch` || locked_hover_info) return
419
- clear_hover()
420
- }
421
-
422
- // Document-level keyboard shortcuts
423
- function handle_doc_keydown(event: KeyboardEvent) {
424
- if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === `E`) {
425
- event.preventDefault()
426
- export_pane_open = !export_pane_open
427
- } else if (event.key === `Escape` && locked_hover_info) {
428
- locked_hover_info = null
429
- }
430
- }
431
-
432
- // SVG keyboard handler (Enter/Space to toggle lock)
433
- function handle_svg_keydown(event: KeyboardEvent) {
434
- if (event.key === `Enter` || event.key === ` `) {
435
- event.preventDefault()
436
- handle_click()
437
- }
438
- }
439
-
440
- // Fullscreen handling
441
- $effect(() => {
442
- setup_fullscreen_effect(fullscreen, wrapper)
443
- set_fullscreen_bg(wrapper, fullscreen, `--phase-diagram-bg-fullscreen`)
444
- })
445
-
446
- // Cleanup timeout on unmount to prevent memory leaks
447
- $effect(() => {
448
- return () => {
449
- if (copy_feedback_timeout) clearTimeout(copy_feedback_timeout)
450
- }
451
- })
452
-
453
- // Component labels (guard for initial render when data may be undefined)
454
- const component_a = $derived(effective_data?.components?.[0] ?? ``)
455
- const component_b = $derived(effective_data?.components?.[1] ?? ``)
456
- const comp_unit = $derived(effective_data?.composition_unit ?? `at%`)
457
-
458
- // Pseudo-binary support: format compound names with subscripts when enabled
459
- const use_subscripts = $derived(
460
- effective_data?.pseudo_binary?.use_subscripts ?? true,
461
- )
462
-
463
- // Formatted component labels for SVG axis labels (with tspan subscripts if compound)
464
- const component_a_svg = $derived(format_formula_svg(component_a, use_subscripts))
465
- const component_b_svg = $derived(format_formula_svg(component_b, use_subscripts))
466
-
467
- // Default x-axis label as a single string (avoids mixing plain text with {@html})
468
- const default_x_axis_label = $derived.by(() => {
469
- const prefix = comp_unit === `fraction` ? `x ` : ``
470
- const unit = comp_unit === `fraction` ? `mole fraction` : comp_unit
471
- return `${prefix}${component_b_svg} (${unit})`
472
- })
473
- </script>
474
-
475
- <!-- Grid lines snippet for DRY rendering -->
476
- {#snippet grid_lines(ticks: number[], vertical: boolean)}
477
- {#each ticks as tick (tick)}
478
- <line
479
- x1={vertical ? x_scale(tick) : left}
480
- y1={vertical ? top : y_scale_display(tick)}
481
- x2={vertical ? x_scale(tick) : right}
482
- y2={vertical ? bottom : y_scale_display(tick)}
483
- stroke={merged_config.colors.grid}
484
- stroke-dasharray="4"
485
- />
486
- {/each}
487
- {/snippet}
488
-
489
- <!-- Tie-line snippet: renders line with white outline, phase endpoints, and cursor marker -->
490
- {#snippet tie_line_viz(
491
- x1: number,
492
- y1: number,
493
- x2: number,
494
- y2: number,
495
- endpoints: Array<{ cx: number; cy: number; color: string }>,
496
- cursor_cx: number,
497
- cursor_cy: number,
498
- )}
499
- {@const tl = merged_config.tie_line}
500
- <g class="tie-line" class:locked={locked_hover_info}>
501
- {#each [`white`, `rgb(${PHASE_COLOR_RGB.tie_line})`] as stroke (stroke)}
502
- <line
503
- {x1}
504
- {y1}
505
- {x2}
506
- {y2}
507
- {stroke}
508
- stroke-width={tl.stroke_width + (stroke === `white` ? 1 : 0)}
509
- stroke-linecap="round"
510
- />
511
- {/each}
512
- {#each endpoints as ep, idx (idx)}
513
- <circle
514
- cx={ep.cx}
515
- cy={ep.cy}
516
- r={tl.endpoint_radius}
517
- fill="rgb({ep.color})"
518
- stroke="white"
519
- stroke-width={1.5}
520
- />
521
- {/each}
522
- <circle
523
- cx={cursor_cx}
524
- cy={cursor_cy}
525
- r={tl.cursor_radius}
526
- fill="rgb({PHASE_COLOR_RGB.tie_line})"
527
- stroke="white"
528
- stroke-width={2}
529
- />
530
- </g>
531
- {/snippet}
532
-
533
- <svelte:document
534
- onfullscreenchange={() => {
535
- fullscreen = Boolean(document.fullscreenElement)
536
- }}
537
- onkeydown={handle_doc_keydown}
538
- />
539
-
540
- <div
541
- {...rest}
542
- class="binary-phase-diagram {rest.class ?? ``}"
543
- class:fullscreen
544
- bind:this={wrapper}
545
- bind:clientWidth={width}
546
- bind:clientHeight={height}
547
- role="img"
548
- aria-label="{component_a}-{component_b} binary phase diagram"
549
- ondrop={handle_svg_drop}
550
- ondragover={(ev) => ev.preventDefault()}
551
- >
552
- {#if width > 0 && height > 0}
553
- <!-- Header controls -->
554
- <div class="header-controls">
555
- {#if show_controls}
556
- <PhaseDiagramControls
557
- bind:controls_open
558
- bind:show_boundaries
559
- bind:show_labels
560
- bind:show_special_points
561
- bind:show_grid
562
- bind:show_component_labels
563
- bind:config
564
- bind:lever_rule_mode
565
- bind:x_axis
566
- bind:y_axis
567
- bind:png_dpi
568
- data={effective_data}
569
- {enable_export}
570
- {...controls_props}
571
- icon_style={pane_icon_style}
572
- toggle_props={pane_toggle_props}
573
- />
574
- {/if}
575
- {#if enable_export}
576
- <PhaseDiagramExportPane
577
- bind:export_pane_open
578
- bind:png_dpi
579
- data={effective_data}
580
- {wrapper}
581
- filename={export_filename}
582
- icon_style={pane_icon_style}
583
- toggle_props={pane_toggle_props}
584
- />
585
- {/if}
586
- <PhaseDiagramEditorPane
587
- bind:editor_open
588
- bind:diagram_input
589
- data={effective_data}
590
- ondata={(edited) => data_override = edited}
591
- icon_style={pane_icon_style}
592
- toggle_props={pane_toggle_props}
593
- />
594
- {#if fullscreen_toggle}
595
- <FullscreenToggle bind:fullscreen />
596
- {/if}
597
- </div>
598
-
599
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
600
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
601
- <svg
602
- class="binary-phase-diagram"
603
- {width}
604
- {height}
605
- onpointermove={handle_pointer_move}
606
- onpointerleave={handle_pointer_leave}
607
- onclick={handle_click}
608
- onkeydown={handle_svg_keydown}
609
- ondblclick={handle_double_click}
610
- tabindex="0"
611
- style:display="block"
612
- style:cursor={effective_hover_info ? `crosshair` : `default`}
613
- style:touch-action="none"
614
- role="application"
615
- aria-label="Binary phase diagram. Use mouse to explore phases. Click to lock tooltip, double-click to copy data. Press Ctrl/Cmd+Shift+E to export."
616
- >
617
- <!-- Gradient definitions for multi-phase regions (2+ phases) -->
618
- <defs>
619
- {#each transformed_regions as region (region.id)}
620
- {#if region.gradient}
621
- <linearGradient
622
- id="gradient-{region.id}"
623
- x1={region.x_min}
624
- x2={region.x_max}
625
- y1="0"
626
- y2="0"
627
- gradientUnits="userSpaceOnUse"
628
- >
629
- {#each region.gradient as stop, idx (idx)}
630
- <stop
631
- offset="{stop.offset * 100}%"
632
- stop-color={stop.color}
633
- stop-opacity="0.6"
634
- />
635
- {/each}
636
- </linearGradient>
637
- {/if}
638
- {/each}
639
- </defs>
640
-
641
- <!-- Background -->
642
- <rect
643
- x={left}
644
- y={top}
645
- width={plot_width}
646
- height={plot_height}
647
- fill={merged_config.colors.background}
648
- />
649
-
650
- <!-- Grid lines -->
651
- {#if show_grid}
652
- <g class="grid">
653
- {@render grid_lines(x_ticks, true)}
654
- {@render grid_lines(y_ticks, false)}
655
- </g>
656
- {/if}
657
-
658
- <!-- Phase regions -->
659
- <g class="phase-regions">
660
- {#each transformed_regions as region (region.id)}
661
- <path
662
- d={region.svg_path}
663
- fill={region.gradient
664
- ? `url(#gradient-${region.id})`
665
- : (region.color || get_phase_color(region.name))}
666
- stroke="none"
667
- class:hovered={hovered_region?.id === region.id}
668
- />
669
- {/each}
670
- </g>
671
-
672
- <!-- Boundaries -->
673
- {#if show_boundaries}
674
- <g class="boundaries">
675
- {#each transformed_boundaries as boundary (boundary.id)}
676
- <path
677
- d={boundary.svg_path}
678
- fill="none"
679
- stroke={boundary.style?.color ?? merged_config.colors.boundary}
680
- stroke-width={boundary.style?.width || 2}
681
- stroke-dasharray={boundary.style?.dash || ``}
682
- stroke-linecap="round"
683
- stroke-linejoin="round"
684
- />
685
- {/each}
686
- </g>
687
- {/if}
688
-
689
- <!-- Region labels -->
690
- {#if show_labels}
691
- <g class="region-labels">
692
- {#each transformed_regions as region (region.id)}
693
- {@const line_height = merged_config.font_size * 1.2}
694
- <g
695
- transform="translate({region.label_pos[0]}, {region.label_pos[1]}) rotate({region.label_rotation}) scale({region.label_scale})"
696
- >
697
- {#each region.label_lines as line, line_idx (line_idx)}
698
- <text
699
- x={0}
700
- y={(line_idx - (region.label_lines.length - 1) / 2) * line_height}
701
- text-anchor="middle"
702
- dominant-baseline="middle"
703
- fill={merged_config.colors.text}
704
- font-size={merged_config.font_size}
705
- font-weight="500"
706
- class="region-label"
707
- >
708
- {@html sanitize_svg(format_label_svg(line, use_subscripts))}
709
- </text>
710
- {/each}
711
- </g>
712
- {/each}
713
- </g>
714
- {/if}
715
-
716
- <!-- Tie-line visualization for two-phase regions -->
717
- {#if lever_rule_mode === `vertical` && effective_hover_info?.vertical_lever_rule}
718
- {@const vlr = effective_hover_info.vertical_lever_rule}
719
- {@const cx = x_scale(effective_hover_info.composition)}
720
- {@const y_bot = y_scale(vlr.bottom_temperature)}
721
- {@const y_top = y_scale(vlr.top_temperature)}
722
- {@render tie_line_viz(
723
- cx,
724
- y_bot,
725
- cx,
726
- y_top,
727
- [
728
- { cx, cy: y_bot, color: get_phase_color(vlr.bottom_phase, `rgb`) },
729
- { cx, cy: y_top, color: get_phase_color(vlr.top_phase, `rgb`) },
730
- ],
731
- cx,
732
- y_scale(effective_hover_info.temperature),
733
- )}
734
- {:else if lever_rule_mode === `horizontal` && effective_hover_info?.lever_rule}
735
- {@const lr = effective_hover_info.lever_rule}
736
- {@const cy = y_scale(effective_hover_info.temperature)}
737
- {@const x_l = x_scale(lr.left_composition)}
738
- {@const x_r = x_scale(lr.right_composition)}
739
- {@render tie_line_viz(
740
- x_l,
741
- cy,
742
- x_r,
743
- cy,
744
- [
745
- { cx: x_l, cy, color: get_phase_color(lr.left_phase, `rgb`) },
746
- { cx: x_r, cy, color: get_phase_color(lr.right_phase, `rgb`) },
747
- ],
748
- x_scale(effective_hover_info.composition),
749
- cy,
750
- )}
751
- {/if}
752
-
753
- <!-- Special points (rendered last for highest z-index) -->
754
- {#if show_special_points}
755
- <g class="special-points">
756
- {#each transformed_special_points as point (point.id)}
757
- <!-- Larger hit area for easier hovering (2x radius) -->
758
- <circle
759
- cx={point.svg_x}
760
- cy={point.svg_y}
761
- r={merged_config.special_point_radius * 2}
762
- fill="transparent"
763
- class="special-point-hit-area"
764
- />
765
- <circle
766
- cx={point.svg_x}
767
- cy={point.svg_y}
768
- r={merged_config.special_point_radius}
769
- fill={merged_config.colors.special_point}
770
- stroke="white"
771
- stroke-width={1.5}
772
- class="special-point-marker"
773
- />
774
- {#if point.label}
775
- {@const is_near_left = point.position[0] <= 0.05}
776
- {@const is_near_right = point.position[0] >= 0.95}
777
- {@const anchor = is_near_left ? `start` : is_near_right ? `end` : `middle`}
778
- {@const x_offset = is_near_left ? 4 : is_near_right ? -4 : 0}
779
- <text
780
- x={point.svg_x + x_offset}
781
- y={point.svg_y - merged_config.special_point_radius * 2}
782
- text-anchor={anchor}
783
- fill={merged_config.colors.text}
784
- font-size={merged_config.font_size}
785
- font-weight="bold"
786
- >
787
- {point.label}
788
- </text>
789
- {/if}
790
- {/each}
791
- </g>
792
- {/if}
793
-
794
- <!-- X-axis -->
795
- <g class="x-axis">
796
- <line
797
- x1={left}
798
- y1={bottom}
799
- x2={right}
800
- y2={bottom}
801
- stroke={merged_config.colors.axis}
802
- stroke-width={1}
803
- />
804
- {#each x_ticks as tick (tick)}
805
- <g transform="translate({x_scale(tick)}, {bottom})">
806
- <line y2={6} stroke={merged_config.colors.axis} />
807
- <text
808
- y={20}
809
- text-anchor="middle"
810
- fill={merged_config.colors.text}
811
- font-size={merged_config.font_size}
812
- >
813
- {format_composition(tick, comp_unit, false)}
814
- </text>
815
- </g>
816
- {/each}
817
- <!-- X-axis label (supports custom labels from props, data, or auto-generated with subscripts) -->
818
- <text
819
- x={left + plot_width / 2}
820
- y={height - 10}
821
- text-anchor="middle"
822
- fill={merged_config.colors.text}
823
- font-size={merged_config.font_size + 2}
824
- >
825
- {#if x_axis.label}
826
- {@html sanitize_svg(x_axis.label)}
827
- {:else if effective_data?.x_axis_label}
828
- {@html sanitize_svg(effective_data.x_axis_label)}
829
- {:else}
830
- {@html sanitize_svg(default_x_axis_label)}
831
- {/if}
832
- </text>
833
- </g>
834
-
835
- <!-- Y-axis -->
836
- <g class="y-axis">
837
- <line
838
- x1={left}
839
- y1={top}
840
- x2={left}
841
- y2={bottom}
842
- stroke={merged_config.colors.axis}
843
- stroke-width={1}
844
- />
845
- {#each y_ticks as tick (tick)}
846
- <g transform="translate({left}, {y_scale_display(tick)})">
847
- <line x2={-6} stroke={merged_config.colors.axis} />
848
- <text
849
- x={-10}
850
- text-anchor="end"
851
- dominant-baseline="middle"
852
- fill={merged_config.colors.text}
853
- font-size={merged_config.font_size}
854
- >
855
- {format_num(tick, `.0f`)}
856
- </text>
857
- </g>
858
- {/each}
859
- <!-- Y-axis label (supports custom labels from props or data) -->
860
- <text
861
- transform="rotate(-90)"
862
- x={-(top + plot_height / 2)}
863
- y={16}
864
- text-anchor="middle"
865
- fill={merged_config.colors.text}
866
- font-size={merged_config.font_size + 2}
867
- >
868
- {#if y_axis.label}
869
- {@html sanitize_svg(y_axis.label)}
870
- {:else if effective_data?.y_axis_label}
871
- {@html sanitize_svg(effective_data.y_axis_label)}
872
- {:else}
873
- Temperature ({temp_unit})
874
- {/if}
875
- </text>
876
- </g>
877
-
878
- <!-- Component labels at corners (supports compound formulas with subscripts) -->
879
- {#if show_component_labels}
880
- <text
881
- x={left}
882
- y={bottom + 45}
883
- text-anchor="middle"
884
- fill={merged_config.colors.text}
885
- font-size={merged_config.font_size + 2}
886
- font-weight="bold"
887
- >
888
- {@html sanitize_svg(component_a_svg)}
889
- </text>
890
- <text
891
- x={right}
892
- y={bottom + 45}
893
- text-anchor="middle"
894
- fill={merged_config.colors.text}
895
- font-size={merged_config.font_size + 2}
896
- font-weight="bold"
897
- >
898
- {@html sanitize_svg(component_b_svg)}
899
- </text>
900
- {/if}
901
- </svg>
902
-
903
- <!-- Tooltip (uses effective_hover_info which respects locked state) -->
904
- <!-- tooltip={false} disables tooltip entirely -->
905
- {#if effective_hover_info && tooltip !== false}
906
- <div
907
- bind:this={tooltip_el}
908
- class="tooltip-container"
909
- class:locked={locked_hover_info}
910
- style:left="{tooltip_pos.x}px"
911
- style:top="{tooltip_pos.y}px"
912
- >
913
- {#if locked_hover_info}
914
- <div class="tooltip-lock-indicator" title="Click diagram to unlock">🔒</div>
915
- {/if}
916
- {#if typeof tooltip === `function`}
917
- {@render tooltip(effective_hover_info)}
918
- {:else}
919
- <PhaseDiagramTooltip
920
- hover_info={effective_hover_info}
921
- temperature_unit={temp_unit}
922
- data_temperature_unit={data_temp_unit}
923
- composition_unit={comp_unit}
924
- {component_a}
925
- {component_b}
926
- boundaries={effective_data?.boundaries ?? []}
927
- {lever_rule_mode}
928
- {use_subscripts}
929
- {tooltip}
930
- />
931
- {/if}
932
- </div>
933
- {/if}
934
-
935
- <!-- Copy feedback indicator -->
936
- {#if copy_feedback_visible}
937
- <div
938
- class="copy-feedback"
939
- style:left="{copy_feedback_pos.x}px"
940
- style:top="{copy_feedback_pos.y}px"
941
- >
942
- ✓ Copied
943
- </div>
944
- {/if}
945
-
946
- <!-- Custom children -->
947
- {@render children?.({ width, height, fullscreen })}
948
- {/if}
949
- </div>
950
-
951
- <style>
952
- .binary-phase-diagram {
953
- position: relative;
954
- width: 100%;
955
- height: 100%;
956
- min-height: 400px;
957
- aspect-ratio: 6 / 5; /* Default aspect ratio matching 600x500 */
958
- background: var(--pd-bg, transparent);
959
- container-type: inline-size;
960
-
961
- &.fullscreen {
962
- background: var(--phase-diagram-bg-fullscreen, var(--page-bg, #1a1a2e)) !important;
963
- }
964
- @container (max-width: 500px) {
965
- min-height: 300px;
966
- }
967
- }
968
- .header-controls {
969
- position: absolute;
970
- top: var(--ctrl-btn-top, 30px);
971
- right: var(--ctrl-btn-right, 20px);
972
- display: flex;
973
- align-items: center;
974
- gap: 6px;
975
- z-index: 10;
976
- }
977
- /* Override absolute positioning since container handles it */
978
- .header-controls :global(:is(.fullscreen-toggle, .phase-diagram-controls-toggle)) {
979
- position: static;
980
- }
981
- .header-controls :global(.fullscreen-toggle) {
982
- opacity: 1; /* Always visible when inside header-controls */
983
- }
984
- /* Hide controls and fullscreen toggles by default, show on hover/focus */
985
- .binary-phase-diagram :global(:is(.pane-toggle, .header-controls)) {
986
- opacity: 0;
987
- transition: opacity 0.2s ease;
988
- }
989
- /* Keep editor toggle always visible so users discover the edit feature */
990
- .binary-phase-diagram :global(.pd-editor-toggle) {
991
- opacity: 1;
992
- }
993
- .binary-phase-diagram:is(:hover, :focus-within)
994
- :is(:global(.pane-toggle), .header-controls),
995
- .binary-phase-diagram :global(.pane-toggle:is(:focus-visible, [aria-expanded='true'])),
996
- .header-controls:has(:global(.pane-open)) {
997
- opacity: 1;
998
- }
999
- .phase-regions path {
1000
- transition: opacity 0.15s ease;
1001
-
1002
- &.hovered {
1003
- opacity: 0.85;
1004
- filter: brightness(1.1);
1005
- }
1006
- }
1007
- .special-points {
1008
- pointer-events: auto;
1009
- }
1010
- .special-point-hit-area {
1011
- cursor: pointer;
1012
- pointer-events: auto;
1013
- }
1014
- .special-point-hit-area:hover + .special-point-marker {
1015
- filter: brightness(1.3) drop-shadow(0 0 4px currentColor);
1016
- }
1017
- .special-point-marker {
1018
- pointer-events: none; /* Let hit-area handle events */
1019
- }
1020
- /* Grouped pointer-events: none */
1021
- .region-label, .tie-line, .tooltip-container, .copy-feedback, .grid, .region-labels {
1022
- pointer-events: none;
1023
- }
1024
- .region-label {
1025
- user-select: none;
1026
- }
1027
- .tie-line {
1028
- animation: tie-line-fade-in 150ms ease-out;
1029
-
1030
- &.locked {
1031
- filter: drop-shadow(0 0 3px rgba(255, 107, 107, 0.5));
1032
- }
1033
- }
1034
- @keyframes tie-line-fade-in {
1035
- from {
1036
- opacity: 0;
1037
- }
1038
- }
1039
- :is(.tooltip-container, .copy-feedback) {
1040
- position: fixed;
1041
- }
1042
- .tooltip-container {
1043
- z-index: 1000;
1044
-
1045
- &.locked {
1046
- pointer-events: auto; /* Allow interaction when locked */
1047
- filter: drop-shadow(0 0 4px rgba(99, 102, 241, 0.4));
1048
- }
1049
- }
1050
- .tooltip-lock-indicator {
1051
- position: absolute;
1052
- top: -8px;
1053
- right: -8px;
1054
- font-size: 12px;
1055
- background: rgba(99, 102, 241, 0.9);
1056
- border-radius: 50%;
1057
- width: 20px;
1058
- height: 20px;
1059
- display: flex;
1060
- align-items: center;
1061
- justify-content: center;
1062
- cursor: pointer;
1063
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
1064
- }
1065
- .copy-feedback {
1066
- z-index: 1001;
1067
- background: rgba(76, 175, 80, 0.95);
1068
- color: white;
1069
- padding: 6px 12px;
1070
- border-radius: 4px;
1071
- font-size: 13px;
1072
- font-weight: 500;
1073
- transform: translate(-50%, calc(-100% - 10px));
1074
- animation: copy-fade-up 1.5s ease-out forwards;
1075
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1076
- }
1077
- @keyframes copy-fade-up {
1078
- 0%, 70% {
1079
- opacity: 1;
1080
- }
1081
- 100% {
1082
- opacity: 0;
1083
- transform: translate(-50%, calc(-100% - 30px));
1084
- }
1085
- }
1086
- </style>