matterviz 0.3.4 → 0.3.6

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 (852) hide show
  1. package/.vscode/launch.json +13 -0
  2. package/.vscodeignore +7 -0
  3. package/dist/assets/STLExporter-BpTH3YHE.js +8 -0
  4. package/dist/assets/browser-DdDecX_W.js +1 -0
  5. package/dist/assets/export-qgn-H9y6.js +2 -0
  6. package/dist/assets/main-DiKYzti2.css +1 -0
  7. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  8. package/dist/extension.js +31293 -0
  9. package/dist/src/lib/FilePicker.svelte +360 -0
  10. package/dist/src/lib/MillerIndexInput.svelte +66 -0
  11. package/dist/src/lib/api/mp.ts +26 -0
  12. package/dist/src/lib/api/optimade.ts +204 -0
  13. package/dist/src/lib/app.css +247 -0
  14. package/dist/src/lib/brillouin/BrillouinZone.svelte +549 -0
  15. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +144 -0
  16. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +146 -0
  17. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  18. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +476 -0
  19. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +92 -0
  20. package/dist/src/lib/brillouin/compute.ts +529 -0
  21. package/dist/src/lib/brillouin/index.ts +8 -0
  22. package/dist/src/lib/brillouin/types.ts +51 -0
  23. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +327 -0
  24. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  25. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  26. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +94 -0
  27. package/dist/src/lib/chempot-diagram/chempot-worker.ts +11 -0
  28. package/dist/src/lib/chempot-diagram/color.ts +42 -0
  29. package/dist/src/lib/chempot-diagram/compute.ts +1014 -0
  30. package/dist/src/lib/chempot-diagram/index.ts +6 -0
  31. package/dist/src/lib/chempot-diagram/pointer.ts +56 -0
  32. package/dist/src/lib/chempot-diagram/temperature.ts +77 -0
  33. package/dist/src/lib/chempot-diagram/types.ts +130 -0
  34. package/dist/src/lib/colors/index.ts +249 -0
  35. package/dist/src/lib/composition/BarChart.svelte +297 -0
  36. package/dist/src/lib/composition/BubbleChart.svelte +218 -0
  37. package/dist/src/lib/composition/Composition.svelte +165 -0
  38. package/dist/src/lib/composition/Formula.svelte +268 -0
  39. package/dist/src/lib/composition/FormulaFilter.svelte +1257 -0
  40. package/dist/src/lib/composition/PieChart.svelte +323 -0
  41. package/dist/src/lib/composition/format.ts +155 -0
  42. package/dist/src/lib/composition/index.ts +37 -0
  43. package/dist/src/lib/composition/parse.ts +605 -0
  44. package/dist/src/lib/constants.ts +134 -0
  45. package/dist/src/lib/controls.ts +42 -0
  46. package/dist/src/lib/convex-hull/ConvexHull.svelte +157 -0
  47. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +825 -0
  48. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +1801 -0
  49. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +1398 -0
  50. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +535 -0
  51. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +125 -0
  52. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +929 -0
  53. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +131 -0
  54. package/dist/src/lib/convex-hull/GasPressureControls.svelte +247 -0
  55. package/dist/src/lib/convex-hull/StructurePopup.svelte +151 -0
  56. package/dist/src/lib/convex-hull/TemperatureSlider.svelte +140 -0
  57. package/dist/src/lib/convex-hull/barycentric-coords.ts +246 -0
  58. package/dist/src/lib/convex-hull/demo-temperature.ts +63 -0
  59. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +405 -0
  60. package/dist/src/lib/convex-hull/helpers.ts +932 -0
  61. package/dist/src/lib/convex-hull/index.ts +202 -0
  62. package/dist/src/lib/convex-hull/thermodynamics.ts +2192 -0
  63. package/dist/src/lib/convex-hull/types.ts +267 -0
  64. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +311 -0
  65. package/dist/src/lib/coordination/calc-coordination.ts +93 -0
  66. package/dist/src/lib/coordination/index.ts +9 -0
  67. package/dist/src/lib/effects.svelte.ts +48 -0
  68. package/dist/src/lib/element/BohrAtom.svelte +147 -0
  69. package/dist/src/lib/element/ElementHeading.svelte +26 -0
  70. package/dist/src/lib/element/ElementPhoto.svelte +57 -0
  71. package/dist/src/lib/element/ElementStats.svelte +80 -0
  72. package/dist/src/lib/element/ElementTile.svelte +484 -0
  73. package/dist/src/lib/element/data.json.gz.d.ts +4 -0
  74. package/dist/src/lib/element/data.ts +14 -0
  75. package/dist/src/lib/element/index.ts +8 -0
  76. package/dist/src/lib/element/types.ts +62 -0
  77. package/dist/src/lib/feedback/ClickFeedback.svelte +58 -0
  78. package/dist/src/lib/feedback/DragOverlay.svelte +42 -0
  79. package/dist/src/lib/feedback/index.ts +4 -0
  80. package/dist/src/lib/fermi-surface/FermiSlice.svelte +189 -0
  81. package/dist/src/lib/fermi-surface/FermiSurface.svelte +600 -0
  82. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +448 -0
  83. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +794 -0
  84. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  85. package/dist/src/lib/fermi-surface/compute.ts +728 -0
  86. package/dist/src/lib/fermi-surface/constants.ts +32 -0
  87. package/dist/src/lib/fermi-surface/export.ts +64 -0
  88. package/dist/src/lib/fermi-surface/index.ts +14 -0
  89. package/dist/src/lib/fermi-surface/marching-cubes.ts +3 -0
  90. package/dist/src/lib/fermi-surface/parse.ts +574 -0
  91. package/dist/src/lib/fermi-surface/symmetry.ts +56 -0
  92. package/dist/src/lib/fermi-surface/types.ts +159 -0
  93. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  94. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  95. package/dist/src/lib/heatmap-matrix/index.ts +167 -0
  96. package/dist/src/lib/heatmap-matrix/shared.ts +7 -0
  97. package/dist/src/lib/icons.ts +650 -0
  98. package/dist/src/lib/index.ts +61 -0
  99. package/dist/src/lib/io/decompress.ts +92 -0
  100. package/dist/src/lib/io/export.ts +385 -0
  101. package/dist/src/lib/io/fetch.ts +46 -0
  102. package/dist/src/lib/io/file-drop.ts +51 -0
  103. package/dist/src/lib/io/index.ts +7 -0
  104. package/dist/src/lib/io/is-binary.ts +24 -0
  105. package/dist/src/lib/io/types.ts +8 -0
  106. package/dist/src/lib/io/url-drop.ts +141 -0
  107. package/dist/src/lib/isosurface/Isosurface.svelte +285 -0
  108. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +277 -0
  109. package/dist/src/lib/isosurface/index.ts +7 -0
  110. package/dist/src/lib/isosurface/parse.ts +656 -0
  111. package/dist/src/lib/isosurface/slice.ts +175 -0
  112. package/dist/src/lib/isosurface/types.ts +309 -0
  113. package/dist/src/lib/labels.ts +320 -0
  114. package/dist/src/lib/layout/FullscreenToggle.svelte +50 -0
  115. package/dist/src/lib/layout/InfoCard.svelte +120 -0
  116. package/dist/src/lib/layout/InfoTag.svelte +185 -0
  117. package/dist/src/lib/layout/PropertyFilter.svelte +246 -0
  118. package/dist/src/lib/layout/SettingsSection.svelte +148 -0
  119. package/dist/src/lib/layout/SubpageGrid.svelte +82 -0
  120. package/dist/src/lib/layout/fullscreen.ts +65 -0
  121. package/dist/src/lib/layout/index.ts +11 -0
  122. package/dist/src/lib/layout/json-tree/JsonNode.svelte +548 -0
  123. package/dist/src/lib/layout/json-tree/JsonTree.svelte +1230 -0
  124. package/dist/src/lib/layout/json-tree/JsonValue.svelte +334 -0
  125. package/dist/src/lib/layout/json-tree/index.ts +3 -0
  126. package/dist/src/lib/layout/json-tree/types.ts +126 -0
  127. package/dist/src/lib/layout/json-tree/utils.ts +682 -0
  128. package/dist/src/lib/marching-cubes.ts +614 -0
  129. package/dist/src/lib/math.ts +1081 -0
  130. package/dist/src/lib/overlays/ContextMenu.svelte +162 -0
  131. package/dist/src/lib/overlays/CopyButton.svelte +45 -0
  132. package/dist/src/lib/overlays/DragControlTab.svelte +98 -0
  133. package/dist/src/lib/overlays/DraggablePane.svelte +487 -0
  134. package/dist/src/lib/overlays/InfoPaneCards.svelte +149 -0
  135. package/dist/src/lib/overlays/index.ts +3 -0
  136. package/dist/src/lib/periodic-table/PeriodicTable.svelte +469 -0
  137. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +557 -0
  138. package/dist/src/lib/periodic-table/PropertySelect.svelte +37 -0
  139. package/dist/src/lib/periodic-table/index.ts +12 -0
  140. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  141. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +444 -0
  142. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  143. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  144. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  145. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +203 -0
  146. package/dist/src/lib/phase-diagram/build-diagram.ts +186 -0
  147. package/dist/src/lib/phase-diagram/colors.ts +58 -0
  148. package/dist/src/lib/phase-diagram/diagram-input.ts +40 -0
  149. package/dist/src/lib/phase-diagram/index.ts +13 -0
  150. package/dist/src/lib/phase-diagram/parse.ts +348 -0
  151. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +1023 -0
  152. package/dist/src/lib/phase-diagram/types.ts +144 -0
  153. package/dist/src/lib/phase-diagram/utils.ts +775 -0
  154. package/dist/src/lib/plot/AxisLabel.svelte +51 -0
  155. package/dist/src/lib/plot/BarPlot.svelte +2113 -0
  156. package/dist/src/lib/plot/BarPlotControls.svelte +66 -0
  157. package/dist/src/lib/plot/BinnedScatterPlot.svelte +1114 -0
  158. package/dist/src/lib/plot/ColorBar.svelte +721 -0
  159. package/dist/src/lib/plot/ColorScaleSelect.svelte +54 -0
  160. package/dist/src/lib/plot/ElementScatter.svelte +63 -0
  161. package/dist/src/lib/plot/FillArea.svelte +223 -0
  162. package/dist/src/lib/plot/Histogram.svelte +1558 -0
  163. package/dist/src/lib/plot/HistogramControls.svelte +212 -0
  164. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +96 -0
  165. package/dist/src/lib/plot/Line.svelte +84 -0
  166. package/dist/src/lib/plot/PlotAxis.svelte +169 -0
  167. package/dist/src/lib/plot/PlotControls.svelte +537 -0
  168. package/dist/src/lib/plot/PlotLegend.svelte +569 -0
  169. package/dist/src/lib/plot/PlotTooltip.svelte +67 -0
  170. package/dist/src/lib/plot/PortalSelect.svelte +253 -0
  171. package/dist/src/lib/plot/ReferenceLine3D.svelte +156 -0
  172. package/dist/src/lib/plot/ReferencePlane.svelte +175 -0
  173. package/dist/src/lib/plot/ScatterPlot.svelte +2778 -0
  174. package/dist/src/lib/plot/ScatterPlot3D.svelte +529 -0
  175. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +437 -0
  176. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +912 -0
  177. package/dist/src/lib/plot/ScatterPlotControls.svelte +306 -0
  178. package/dist/src/lib/plot/ScatterPoint.svelte +182 -0
  179. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +293 -0
  180. package/dist/src/lib/plot/Surface3D.svelte +197 -0
  181. package/dist/src/lib/plot/ZeroLines.svelte +97 -0
  182. package/dist/src/lib/plot/ZoomRect.svelte +23 -0
  183. package/dist/src/lib/plot/adaptive-density.ts +316 -0
  184. package/dist/src/lib/plot/auto-place.ts +184 -0
  185. package/dist/src/lib/plot/axis-utils.ts +122 -0
  186. package/dist/src/lib/plot/binned-scatter-types.ts +83 -0
  187. package/dist/src/lib/plot/data-cleaning.ts +1069 -0
  188. package/dist/src/lib/plot/data-transform.ts +69 -0
  189. package/dist/src/lib/plot/defaults.ts +9 -0
  190. package/dist/src/lib/plot/fill-utils.ts +494 -0
  191. package/dist/src/lib/plot/hover-lock.svelte.ts +60 -0
  192. package/dist/src/lib/plot/index.ts +53 -0
  193. package/dist/src/lib/plot/interactions.ts +119 -0
  194. package/dist/src/lib/plot/layout.ts +425 -0
  195. package/dist/src/lib/plot/reference-line.ts +426 -0
  196. package/dist/src/lib/plot/scales.ts +654 -0
  197. package/dist/src/lib/plot/svg.ts +23 -0
  198. package/dist/src/lib/plot/types.ts +1144 -0
  199. package/dist/src/lib/plot/utils/label-placement.ts +541 -0
  200. package/dist/src/lib/plot/utils/series-visibility.ts +140 -0
  201. package/dist/src/lib/plot/utils.ts +11 -0
  202. package/dist/src/lib/rdf/RdfPlot.svelte +247 -0
  203. package/dist/src/lib/rdf/calc-rdf.ts +167 -0
  204. package/dist/src/lib/rdf/index.ts +27 -0
  205. package/dist/src/lib/sanitize.ts +126 -0
  206. package/dist/src/lib/settings.ts +1479 -0
  207. package/dist/src/lib/spectral/Bands.svelte +1040 -0
  208. package/dist/src/lib/spectral/BandsAndDos.svelte +134 -0
  209. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +252 -0
  210. package/dist/src/lib/spectral/Dos.svelte +697 -0
  211. package/dist/src/lib/spectral/helpers.ts +1381 -0
  212. package/dist/src/lib/spectral/index.ts +8 -0
  213. package/dist/src/lib/spectral/types.ts +112 -0
  214. package/dist/src/lib/state.svelte.ts +64 -0
  215. package/dist/src/lib/structure/Arrow.svelte +72 -0
  216. package/dist/src/lib/structure/AtomLegend.svelte +815 -0
  217. package/dist/src/lib/structure/Bond.svelte +140 -0
  218. package/dist/src/lib/structure/CanvasTooltip.svelte +33 -0
  219. package/dist/src/lib/structure/CellSelect.svelte +349 -0
  220. package/dist/src/lib/structure/Cylinder.svelte +45 -0
  221. package/dist/src/lib/structure/Lattice.svelte +196 -0
  222. package/dist/src/lib/structure/Structure.svelte +2248 -0
  223. package/dist/src/lib/structure/StructureControls.svelte +1273 -0
  224. package/dist/src/lib/structure/StructureExportPane.svelte +252 -0
  225. package/dist/src/lib/structure/StructureInfoPane.svelte +737 -0
  226. package/dist/src/lib/structure/StructureScene.svelte +2255 -0
  227. package/dist/src/lib/structure/atom-properties.ts +316 -0
  228. package/dist/src/lib/structure/bond-order-perception.ts +447 -0
  229. package/dist/src/lib/structure/bonding.ts +944 -0
  230. package/dist/src/lib/structure/export.ts +861 -0
  231. package/dist/src/lib/structure/index.ts +291 -0
  232. package/dist/src/lib/structure/label-placement.ts +130 -0
  233. package/dist/src/lib/structure/measure.ts +45 -0
  234. package/dist/src/lib/structure/parse.ts +1705 -0
  235. package/dist/src/lib/structure/partial-occupancy.ts +183 -0
  236. package/dist/src/lib/structure/pbc.ts +164 -0
  237. package/dist/src/lib/structure/supercell.ts +226 -0
  238. package/dist/src/lib/structure/validation.ts +11 -0
  239. package/dist/src/lib/symmetry/SymmetryStats.svelte +226 -0
  240. package/dist/src/lib/symmetry/WyckoffTable.svelte +120 -0
  241. package/dist/src/lib/symmetry/cell-transform.ts +118 -0
  242. package/dist/src/lib/symmetry/index.ts +348 -0
  243. package/dist/src/lib/symmetry/spacegroups.ts +404 -0
  244. package/dist/src/lib/table/HeatmapTable.svelte +1833 -0
  245. package/dist/src/lib/table/ToggleMenu.svelte +385 -0
  246. package/dist/src/lib/table/index.ts +139 -0
  247. package/dist/src/lib/theme/ThemeControl.svelte +53 -0
  248. package/dist/src/lib/theme/index.ts +107 -0
  249. package/dist/src/lib/theme/themes.mjs +297 -0
  250. package/dist/src/lib/time.ts +71 -0
  251. package/dist/src/lib/tooltip/TooltipContent.svelte +58 -0
  252. package/dist/src/lib/tooltip/index.ts +2 -0
  253. package/dist/src/lib/tooltip/types.ts +13 -0
  254. package/dist/src/lib/trajectory/Trajectory.svelte +1545 -0
  255. package/dist/src/lib/trajectory/TrajectoryError.svelte +128 -0
  256. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +357 -0
  257. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +313 -0
  258. package/dist/src/lib/trajectory/constants.ts +7 -0
  259. package/dist/src/lib/trajectory/extract.ts +196 -0
  260. package/dist/src/lib/trajectory/format-detect.ts +96 -0
  261. package/dist/src/lib/trajectory/frame-reader.ts +456 -0
  262. package/dist/src/lib/trajectory/helpers.ts +217 -0
  263. package/dist/src/lib/trajectory/index.ts +218 -0
  264. package/dist/src/lib/trajectory/parse/ase.ts +109 -0
  265. package/dist/src/lib/trajectory/parse/hdf5.ts +173 -0
  266. package/dist/src/lib/trajectory/parse/index.ts +411 -0
  267. package/dist/src/lib/trajectory/parse/lammps.ts +215 -0
  268. package/dist/src/lib/trajectory/parse/vasp.ts +102 -0
  269. package/dist/src/lib/trajectory/parse/xyz.ts +143 -0
  270. package/dist/src/lib/trajectory/plotting.ts +599 -0
  271. package/dist/src/lib/trajectory/types.ts +13 -0
  272. package/dist/src/lib/utils.ts +56 -0
  273. package/dist/src/lib/xrd/XrdPlot.svelte +615 -0
  274. package/dist/src/lib/xrd/broadening.ts +130 -0
  275. package/dist/src/lib/xrd/calc-xrd.ts +397 -0
  276. package/dist/src/lib/xrd/index.ts +38 -0
  277. package/dist/src/lib/xrd/parse.ts +858 -0
  278. package/dist/webview.js +29421 -0
  279. package/icon.png +0 -0
  280. package/license +1 -1
  281. package/matterviz-0.3.2.vsix +0 -0
  282. package/matterviz-0.3.4.vsix +0 -0
  283. package/matterviz-0.3.5.vsix +0 -0
  284. package/package.json +1461 -231
  285. package/readme.md +171 -98
  286. package/scripts/sync-config.ts +101 -0
  287. package/src/declarations.d.ts +2 -0
  288. package/src/extension.ts +972 -0
  289. package/src/node-io.ts +65 -0
  290. package/src/types.ts +17 -0
  291. package/src/webview/JsonBrowser.svelte +1079 -0
  292. package/src/webview/PlotPanel.svelte +346 -0
  293. package/src/webview/detect.ts +444 -0
  294. package/src/webview/main.ts +764 -0
  295. package/src/webview/plot-utils.ts +250 -0
  296. package/test-fixtures/all-viz-types.json.gz +0 -0
  297. package/test-fixtures/plot-demo-data.json.gz +0 -0
  298. package/tests/detect.test.ts +604 -0
  299. package/tests/extension.test.ts +2041 -0
  300. package/tests/node-io.test.ts +39 -0
  301. package/tests/plot-utils.test.ts +302 -0
  302. package/tests/vite-plugin-json-gz.test.ts +114 -0
  303. package/tests/vscode-mock.ts +18 -0
  304. package/tests/webview.test.ts +231 -0
  305. package/tsconfig.json +20 -0
  306. package/vite-plugin-json-gz.ts +29 -0
  307. package/vite.config.ts +34 -0
  308. package/vite.extension.config.ts +34 -0
  309. package/dist/EmptyState.svelte.d.ts +0 -9
  310. package/dist/FilePicker.svelte +0 -360
  311. package/dist/FilePicker.svelte.d.ts +0 -17
  312. package/dist/Icon.svelte.d.ts +0 -13
  313. package/dist/MillerIndexInput.svelte +0 -66
  314. package/dist/MillerIndexInput.svelte.d.ts +0 -7
  315. package/dist/api/mp.d.ts +0 -6
  316. package/dist/api/mp.js +0 -22
  317. package/dist/api/optimade.d.ts +0 -45
  318. package/dist/api/optimade.js +0 -135
  319. package/dist/app.css +0 -240
  320. package/dist/brillouin/BrillouinZone.svelte +0 -543
  321. package/dist/brillouin/BrillouinZone.svelte.d.ts +0 -83
  322. package/dist/brillouin/BrillouinZoneControls.svelte +0 -144
  323. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +0 -17
  324. package/dist/brillouin/BrillouinZoneExportPane.svelte +0 -148
  325. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +0 -15
  326. package/dist/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  327. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +0 -13
  328. package/dist/brillouin/BrillouinZoneScene.svelte +0 -476
  329. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +0 -48
  330. package/dist/brillouin/BrillouinZoneTooltip.svelte +0 -92
  331. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +0 -8
  332. package/dist/brillouin/compute.d.ts +0 -17
  333. package/dist/brillouin/compute.js +0 -422
  334. package/dist/brillouin/index.d.ts +0 -8
  335. package/dist/brillouin/index.js +0 -8
  336. package/dist/brillouin/types.d.ts +0 -48
  337. package/dist/brillouin/types.js +0 -1
  338. package/dist/chempot-diagram/ChemPotDiagram.svelte +0 -327
  339. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +0 -13
  340. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +0 -847
  341. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +0 -16
  342. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +0 -3194
  343. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +0 -16
  344. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +0 -7
  345. package/dist/chempot-diagram/async-compute.svelte.d.ts +0 -3
  346. package/dist/chempot-diagram/async-compute.svelte.js +0 -77
  347. package/dist/chempot-diagram/chempot-worker.d.ts +0 -1
  348. package/dist/chempot-diagram/chempot-worker.js +0 -11
  349. package/dist/chempot-diagram/color.d.ts +0 -10
  350. package/dist/chempot-diagram/color.js +0 -32
  351. package/dist/chempot-diagram/compute.d.ts +0 -48
  352. package/dist/chempot-diagram/compute.js +0 -812
  353. package/dist/chempot-diagram/index.d.ts +0 -6
  354. package/dist/chempot-diagram/index.js +0 -6
  355. package/dist/chempot-diagram/pointer.d.ts +0 -16
  356. package/dist/chempot-diagram/pointer.js +0 -40
  357. package/dist/chempot-diagram/temperature.d.ts +0 -15
  358. package/dist/chempot-diagram/temperature.js +0 -36
  359. package/dist/chempot-diagram/types.d.ts +0 -86
  360. package/dist/chempot-diagram/types.js +0 -28
  361. package/dist/colors/index.d.ts +0 -47
  362. package/dist/colors/index.js +0 -203
  363. package/dist/composition/BarChart.svelte +0 -297
  364. package/dist/composition/BarChart.svelte.d.ts +0 -39
  365. package/dist/composition/BubbleChart.svelte +0 -218
  366. package/dist/composition/BubbleChart.svelte.d.ts +0 -28
  367. package/dist/composition/Composition.svelte +0 -164
  368. package/dist/composition/Composition.svelte.d.ts +0 -15
  369. package/dist/composition/Formula.svelte +0 -265
  370. package/dist/composition/Formula.svelte.d.ts +0 -19
  371. package/dist/composition/FormulaFilter.svelte +0 -1259
  372. package/dist/composition/FormulaFilter.svelte.d.ts +0 -51
  373. package/dist/composition/PieChart.svelte +0 -323
  374. package/dist/composition/PieChart.svelte.d.ts +0 -37
  375. package/dist/composition/format.d.ts +0 -15
  376. package/dist/composition/format.js +0 -109
  377. package/dist/composition/index.d.ts +0 -20
  378. package/dist/composition/index.js +0 -14
  379. package/dist/composition/parse.d.ts +0 -55
  380. package/dist/composition/parse.js +0 -459
  381. package/dist/constants.d.ts +0 -29
  382. package/dist/constants.js +0 -105
  383. package/dist/controls.d.ts +0 -14
  384. package/dist/controls.js +0 -30
  385. package/dist/convex-hull/ConvexHull.svelte +0 -157
  386. package/dist/convex-hull/ConvexHull.svelte.d.ts +0 -13
  387. package/dist/convex-hull/ConvexHull2D.svelte +0 -813
  388. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +0 -11
  389. package/dist/convex-hull/ConvexHull3D.svelte +0 -1788
  390. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +0 -8
  391. package/dist/convex-hull/ConvexHull4D.svelte +0 -1374
  392. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +0 -8
  393. package/dist/convex-hull/ConvexHullControls.svelte +0 -546
  394. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +0 -48
  395. package/dist/convex-hull/ConvexHullInfoPane.svelte +0 -115
  396. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +0 -18
  397. package/dist/convex-hull/ConvexHullStats.svelte +0 -905
  398. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +0 -15
  399. package/dist/convex-hull/ConvexHullTooltip.svelte +0 -131
  400. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +0 -33
  401. package/dist/convex-hull/GasPressureControls.svelte +0 -247
  402. package/dist/convex-hull/GasPressureControls.svelte.d.ts +0 -11
  403. package/dist/convex-hull/StructurePopup.svelte +0 -116
  404. package/dist/convex-hull/StructurePopup.svelte.d.ts +0 -18
  405. package/dist/convex-hull/TemperatureSlider.svelte +0 -137
  406. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +0 -8
  407. package/dist/convex-hull/barycentric-coords.d.ts +0 -18
  408. package/dist/convex-hull/barycentric-coords.js +0 -182
  409. package/dist/convex-hull/demo-temperature.d.ts +0 -6
  410. package/dist/convex-hull/demo-temperature.js +0 -40
  411. package/dist/convex-hull/gas-thermodynamics.d.ts +0 -16
  412. package/dist/convex-hull/gas-thermodynamics.js +0 -316
  413. package/dist/convex-hull/helpers.d.ts +0 -103
  414. package/dist/convex-hull/helpers.js +0 -671
  415. package/dist/convex-hull/index.d.ts +0 -118
  416. package/dist/convex-hull/index.js +0 -57
  417. package/dist/convex-hull/thermodynamics.d.ts +0 -66
  418. package/dist/convex-hull/thermodynamics.js +0 -1752
  419. package/dist/convex-hull/types.d.ts +0 -162
  420. package/dist/convex-hull/types.js +0 -36
  421. package/dist/coordination/CoordinationBarPlot.svelte +0 -311
  422. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +0 -30
  423. package/dist/coordination/calc-coordination.d.ts +0 -15
  424. package/dist/coordination/calc-coordination.js +0 -63
  425. package/dist/coordination/index.d.ts +0 -8
  426. package/dist/coordination/index.js +0 -7
  427. package/dist/element/BohrAtom.svelte +0 -149
  428. package/dist/element/BohrAtom.svelte.d.ts +0 -20
  429. package/dist/element/ElementHeading.svelte +0 -26
  430. package/dist/element/ElementHeading.svelte.d.ts +0 -8
  431. package/dist/element/ElementPhoto.svelte +0 -57
  432. package/dist/element/ElementPhoto.svelte.d.ts +0 -9
  433. package/dist/element/ElementStats.svelte +0 -80
  434. package/dist/element/ElementStats.svelte.d.ts +0 -8
  435. package/dist/element/ElementTile.svelte +0 -484
  436. package/dist/element/ElementTile.svelte.d.ts +0 -29
  437. package/dist/element/Nucleus.svelte.d.ts +0 -17
  438. package/dist/element/data.d.ts +0 -3
  439. package/dist/element/data.js +0 -2
  440. package/dist/element/data.json.gz.d.ts +0 -2
  441. package/dist/element/index.d.ts +0 -8
  442. package/dist/element/index.js +0 -8
  443. package/dist/element/types.d.ts +0 -57
  444. package/dist/element/types.js +0 -1
  445. package/dist/feedback/ClickFeedback.svelte +0 -58
  446. package/dist/feedback/ClickFeedback.svelte.d.ts +0 -12
  447. package/dist/feedback/DragOverlay.svelte +0 -42
  448. package/dist/feedback/DragOverlay.svelte.d.ts +0 -7
  449. package/dist/feedback/Spinner.svelte.d.ts +0 -7
  450. package/dist/feedback/StatusMessage.svelte.d.ts +0 -9
  451. package/dist/feedback/index.d.ts +0 -4
  452. package/dist/feedback/index.js +0 -4
  453. package/dist/fermi-surface/FermiSlice.svelte +0 -189
  454. package/dist/fermi-surface/FermiSlice.svelte.d.ts +0 -24
  455. package/dist/fermi-surface/FermiSurface.svelte +0 -597
  456. package/dist/fermi-surface/FermiSurface.svelte.d.ts +0 -83
  457. package/dist/fermi-surface/FermiSurfaceControls.svelte +0 -452
  458. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +0 -35
  459. package/dist/fermi-surface/FermiSurfaceScene.svelte +0 -792
  460. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +0 -50
  461. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  462. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +0 -8
  463. package/dist/fermi-surface/compute.d.ts +0 -5
  464. package/dist/fermi-surface/compute.js +0 -538
  465. package/dist/fermi-surface/constants.d.ts +0 -9
  466. package/dist/fermi-surface/constants.js +0 -27
  467. package/dist/fermi-surface/export.d.ts +0 -5
  468. package/dist/fermi-surface/export.js +0 -63
  469. package/dist/fermi-surface/index.d.ts +0 -12
  470. package/dist/fermi-surface/index.js +0 -13
  471. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  472. package/dist/fermi-surface/marching-cubes.js +0 -2
  473. package/dist/fermi-surface/parse.d.ts +0 -2
  474. package/dist/fermi-surface/parse.js +0 -495
  475. package/dist/fermi-surface/symmetry.d.ts +0 -3
  476. package/dist/fermi-surface/symmetry.js +0 -46
  477. package/dist/fermi-surface/types.d.ts +0 -113
  478. package/dist/fermi-surface/types.js +0 -4
  479. package/dist/heatmap-matrix/HeatmapMatrix.svelte +0 -1527
  480. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +0 -110
  481. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  482. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +0 -30
  483. package/dist/heatmap-matrix/index.d.ts +0 -53
  484. package/dist/heatmap-matrix/index.js +0 -100
  485. package/dist/heatmap-matrix/shared.d.ts +0 -2
  486. package/dist/heatmap-matrix/shared.js +0 -4
  487. package/dist/icons.d.ts +0 -569
  488. package/dist/icons.js +0 -648
  489. package/dist/index.d.ts +0 -39
  490. package/dist/index.js +0 -39
  491. package/dist/io/decompress.d.ts +0 -10
  492. package/dist/io/decompress.js +0 -69
  493. package/dist/io/export.d.ts +0 -16
  494. package/dist/io/export.js +0 -312
  495. package/dist/io/fetch.d.ts +0 -5
  496. package/dist/io/fetch.js +0 -39
  497. package/dist/io/file-drop.d.ts +0 -7
  498. package/dist/io/file-drop.js +0 -43
  499. package/dist/io/index.d.ts +0 -7
  500. package/dist/io/index.js +0 -7
  501. package/dist/io/is-binary.d.ts +0 -1
  502. package/dist/io/is-binary.js +0 -5
  503. package/dist/io/types.d.ts +0 -8
  504. package/dist/io/types.js +0 -1
  505. package/dist/io/url-drop.d.ts +0 -2
  506. package/dist/io/url-drop.js +0 -117
  507. package/dist/isosurface/Isosurface.svelte +0 -285
  508. package/dist/isosurface/Isosurface.svelte.d.ts +0 -8
  509. package/dist/isosurface/IsosurfaceControls.svelte +0 -291
  510. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +0 -9
  511. package/dist/isosurface/index.d.ts +0 -5
  512. package/dist/isosurface/index.js +0 -6
  513. package/dist/isosurface/parse.d.ts +0 -6
  514. package/dist/isosurface/parse.js +0 -553
  515. package/dist/isosurface/slice.d.ts +0 -11
  516. package/dist/isosurface/slice.js +0 -140
  517. package/dist/isosurface/types.d.ts +0 -56
  518. package/dist/isosurface/types.js +0 -227
  519. package/dist/labels.d.ts +0 -53
  520. package/dist/labels.js +0 -274
  521. package/dist/layout/FullscreenToggle.svelte +0 -50
  522. package/dist/layout/FullscreenToggle.svelte.d.ts +0 -7
  523. package/dist/layout/InfoCard.svelte +0 -120
  524. package/dist/layout/InfoCard.svelte.d.ts +0 -21
  525. package/dist/layout/InfoTag.svelte +0 -183
  526. package/dist/layout/InfoTag.svelte.d.ts +0 -19
  527. package/dist/layout/PropertyFilter.svelte +0 -244
  528. package/dist/layout/PropertyFilter.svelte.d.ts +0 -24
  529. package/dist/layout/SettingsSection.svelte +0 -148
  530. package/dist/layout/SettingsSection.svelte.d.ts +0 -17
  531. package/dist/layout/SubpageGrid.svelte +0 -82
  532. package/dist/layout/SubpageGrid.svelte.d.ts +0 -14
  533. package/dist/layout/fullscreen.d.ts +0 -9
  534. package/dist/layout/fullscreen.js +0 -53
  535. package/dist/layout/index.d.ts +0 -10
  536. package/dist/layout/index.js +0 -8
  537. package/dist/layout/json-tree/JsonNode.svelte +0 -547
  538. package/dist/layout/json-tree/JsonNode.svelte.d.ts +0 -11
  539. package/dist/layout/json-tree/JsonTree.svelte +0 -1222
  540. package/dist/layout/json-tree/JsonTree.svelte.d.ts +0 -6
  541. package/dist/layout/json-tree/JsonValue.svelte +0 -334
  542. package/dist/layout/json-tree/JsonValue.svelte.d.ts +0 -9
  543. package/dist/layout/json-tree/index.d.ts +0 -3
  544. package/dist/layout/json-tree/index.js +0 -3
  545. package/dist/layout/json-tree/types.d.ts +0 -73
  546. package/dist/layout/json-tree/types.js +0 -3
  547. package/dist/layout/json-tree/utils.d.ts +0 -29
  548. package/dist/layout/json-tree/utils.js +0 -648
  549. package/dist/marching-cubes.d.ts +0 -14
  550. package/dist/marching-cubes.js +0 -542
  551. package/dist/math.d.ts +0 -91
  552. package/dist/math.js +0 -896
  553. package/dist/overlays/ContextMenu.svelte +0 -162
  554. package/dist/overlays/ContextMenu.svelte.d.ts +0 -25
  555. package/dist/overlays/DraggablePane.svelte +0 -564
  556. package/dist/overlays/DraggablePane.svelte.d.ts +0 -36
  557. package/dist/overlays/index.d.ts +0 -2
  558. package/dist/overlays/index.js +0 -2
  559. package/dist/periodic-table/PeriodicTable.svelte +0 -469
  560. package/dist/periodic-table/PeriodicTable.svelte.d.ts +0 -55
  561. package/dist/periodic-table/PeriodicTableControls.svelte +0 -557
  562. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +0 -24
  563. package/dist/periodic-table/PropertySelect.svelte +0 -37
  564. package/dist/periodic-table/PropertySelect.svelte.d.ts +0 -13
  565. package/dist/periodic-table/TableInset.svelte.d.ts +0 -9
  566. package/dist/periodic-table/index.d.ts +0 -10
  567. package/dist/periodic-table/index.js +0 -4
  568. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  569. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +0 -44
  570. package/dist/phase-diagram/PhaseDiagramControls.svelte +0 -451
  571. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +0 -30
  572. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  573. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +0 -15
  574. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +0 -192
  575. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +0 -19
  576. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +0 -392
  577. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +0 -16
  578. package/dist/phase-diagram/TdbInfoPanel.svelte +0 -203
  579. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +0 -12
  580. package/dist/phase-diagram/build-diagram.d.ts +0 -11
  581. package/dist/phase-diagram/build-diagram.js +0 -167
  582. package/dist/phase-diagram/colors.d.ts +0 -35
  583. package/dist/phase-diagram/colors.js +0 -51
  584. package/dist/phase-diagram/diagram-input.d.ts +0 -33
  585. package/dist/phase-diagram/diagram-input.js +0 -3
  586. package/dist/phase-diagram/index.d.ts +0 -13
  587. package/dist/phase-diagram/index.js +0 -13
  588. package/dist/phase-diagram/parse.d.ts +0 -55
  589. package/dist/phase-diagram/parse.js +0 -276
  590. package/dist/phase-diagram/svg-to-diagram.d.ts +0 -2
  591. package/dist/phase-diagram/svg-to-diagram.js +0 -869
  592. package/dist/phase-diagram/types.d.ts +0 -99
  593. package/dist/phase-diagram/types.js +0 -1
  594. package/dist/phase-diagram/utils.d.ts +0 -118
  595. package/dist/phase-diagram/utils.js +0 -606
  596. package/dist/plot/AxisLabel.svelte +0 -51
  597. package/dist/plot/AxisLabel.svelte.d.ts +0 -16
  598. package/dist/plot/BarPlot.svelte +0 -2256
  599. package/dist/plot/BarPlot.svelte.d.ts +0 -82
  600. package/dist/plot/BarPlotControls.svelte +0 -66
  601. package/dist/plot/BarPlotControls.svelte.d.ts +0 -18
  602. package/dist/plot/ColorBar.svelte +0 -719
  603. package/dist/plot/ColorBar.svelte.d.ts +0 -31
  604. package/dist/plot/ColorScaleSelect.svelte +0 -54
  605. package/dist/plot/ColorScaleSelect.svelte.d.ts +0 -15
  606. package/dist/plot/ElementScatter.svelte +0 -63
  607. package/dist/plot/ElementScatter.svelte.d.ts +0 -14
  608. package/dist/plot/FillArea.svelte +0 -226
  609. package/dist/plot/FillArea.svelte.d.ts +0 -20
  610. package/dist/plot/Histogram.svelte +0 -1654
  611. package/dist/plot/Histogram.svelte.d.ts +0 -50
  612. package/dist/plot/HistogramControls.svelte +0 -212
  613. package/dist/plot/HistogramControls.svelte.d.ts +0 -22
  614. package/dist/plot/InteractiveAxisLabel.svelte +0 -94
  615. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +0 -14
  616. package/dist/plot/Line.svelte +0 -85
  617. package/dist/plot/Line.svelte.d.ts +0 -15
  618. package/dist/plot/PlotControls.svelte +0 -537
  619. package/dist/plot/PlotControls.svelte.d.ts +0 -4
  620. package/dist/plot/PlotLegend.svelte +0 -498
  621. package/dist/plot/PlotLegend.svelte.d.ts +0 -25
  622. package/dist/plot/PlotTooltip.svelte +0 -67
  623. package/dist/plot/PlotTooltip.svelte.d.ts +0 -17
  624. package/dist/plot/PortalSelect.svelte +0 -253
  625. package/dist/plot/PortalSelect.svelte.d.ts +0 -16
  626. package/dist/plot/ReferenceLine.svelte.d.ts +0 -20
  627. package/dist/plot/ReferenceLine3D.svelte +0 -154
  628. package/dist/plot/ReferenceLine3D.svelte.d.ts +0 -14
  629. package/dist/plot/ReferencePlane.svelte +0 -178
  630. package/dist/plot/ReferencePlane.svelte.d.ts +0 -14
  631. package/dist/plot/ScatterPlot.svelte +0 -2831
  632. package/dist/plot/ScatterPlot.svelte.d.ts +0 -92
  633. package/dist/plot/ScatterPlot3D.svelte +0 -499
  634. package/dist/plot/ScatterPlot3D.svelte.d.ts +0 -94
  635. package/dist/plot/ScatterPlot3DControls.svelte +0 -437
  636. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +0 -20
  637. package/dist/plot/ScatterPlot3DScene.svelte +0 -912
  638. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +0 -74
  639. package/dist/plot/ScatterPlotControls.svelte +0 -307
  640. package/dist/plot/ScatterPlotControls.svelte.d.ts +0 -17
  641. package/dist/plot/ScatterPoint.svelte +0 -185
  642. package/dist/plot/ScatterPoint.svelte.d.ts +0 -19
  643. package/dist/plot/SpacegroupBarPlot.svelte +0 -292
  644. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +0 -9
  645. package/dist/plot/Surface3D.svelte +0 -200
  646. package/dist/plot/Surface3D.svelte.d.ts +0 -13
  647. package/dist/plot/ZeroLines.svelte +0 -96
  648. package/dist/plot/ZeroLines.svelte.d.ts +0 -32
  649. package/dist/plot/ZoomRect.svelte +0 -23
  650. package/dist/plot/ZoomRect.svelte.d.ts +0 -8
  651. package/dist/plot/axis-utils.d.ts +0 -19
  652. package/dist/plot/axis-utils.js +0 -80
  653. package/dist/plot/data-cleaning.d.ts +0 -37
  654. package/dist/plot/data-cleaning.js +0 -855
  655. package/dist/plot/data-transform.d.ts +0 -16
  656. package/dist/plot/data-transform.js +0 -45
  657. package/dist/plot/defaults.d.ts +0 -19
  658. package/dist/plot/defaults.js +0 -9
  659. package/dist/plot/fill-utils.d.ts +0 -51
  660. package/dist/plot/fill-utils.js +0 -337
  661. package/dist/plot/hover-lock.svelte.d.ts +0 -14
  662. package/dist/plot/hover-lock.svelte.js +0 -46
  663. package/dist/plot/index.d.ts +0 -43
  664. package/dist/plot/index.js +0 -37
  665. package/dist/plot/interactions.d.ts +0 -12
  666. package/dist/plot/interactions.js +0 -100
  667. package/dist/plot/layout.d.ts +0 -60
  668. package/dist/plot/layout.js +0 -230
  669. package/dist/plot/reference-line.d.ts +0 -60
  670. package/dist/plot/reference-line.js +0 -316
  671. package/dist/plot/scales.d.ts +0 -48
  672. package/dist/plot/scales.js +0 -484
  673. package/dist/plot/svg.d.ts +0 -1
  674. package/dist/plot/svg.js +0 -11
  675. package/dist/plot/types.d.ts +0 -863
  676. package/dist/plot/types.js +0 -103
  677. package/dist/plot/utils/label-placement.d.ts +0 -47
  678. package/dist/plot/utils/label-placement.js +0 -256
  679. package/dist/plot/utils/series-visibility.d.ts +0 -9
  680. package/dist/plot/utils/series-visibility.js +0 -67
  681. package/dist/plot/utils.d.ts +0 -1
  682. package/dist/plot/utils.js +0 -14
  683. package/dist/rdf/RdfPlot.svelte +0 -247
  684. package/dist/rdf/RdfPlot.svelte.d.ts +0 -27
  685. package/dist/rdf/calc-rdf.d.ts +0 -4
  686. package/dist/rdf/calc-rdf.js +0 -111
  687. package/dist/rdf/index.d.ts +0 -23
  688. package/dist/rdf/index.js +0 -2
  689. package/dist/sanitize.d.ts +0 -4
  690. package/dist/sanitize.js +0 -107
  691. package/dist/settings.d.ts +0 -253
  692. package/dist/settings.js +0 -1123
  693. package/dist/spectral/Bands.svelte +0 -1040
  694. package/dist/spectral/Bands.svelte.d.ts +0 -40
  695. package/dist/spectral/BandsAndDos.svelte +0 -128
  696. package/dist/spectral/BandsAndDos.svelte.d.ts +0 -18
  697. package/dist/spectral/BrillouinBandsDos.svelte +0 -248
  698. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +0 -20
  699. package/dist/spectral/Dos.svelte +0 -697
  700. package/dist/spectral/Dos.svelte.d.ts +0 -29
  701. package/dist/spectral/helpers.d.ts +0 -117
  702. package/dist/spectral/helpers.js +0 -1023
  703. package/dist/spectral/index.d.ts +0 -6
  704. package/dist/spectral/index.js +0 -7
  705. package/dist/spectral/types.d.ts +0 -84
  706. package/dist/spectral/types.js +0 -2
  707. package/dist/state.svelte.d.ts +0 -25
  708. package/dist/state.svelte.js +0 -45
  709. package/dist/structure/Arrow.svelte +0 -72
  710. package/dist/structure/Arrow.svelte.d.ts +0 -15
  711. package/dist/structure/AtomLegend.svelte +0 -798
  712. package/dist/structure/AtomLegend.svelte.d.ts +0 -34
  713. package/dist/structure/Bond.svelte +0 -140
  714. package/dist/structure/Bond.svelte.d.ts +0 -9
  715. package/dist/structure/CanvasTooltip.svelte +0 -33
  716. package/dist/structure/CanvasTooltip.svelte.d.ts +0 -12
  717. package/dist/structure/CellSelect.svelte +0 -351
  718. package/dist/structure/CellSelect.svelte.d.ts +0 -13
  719. package/dist/structure/Cylinder.svelte +0 -45
  720. package/dist/structure/Cylinder.svelte.d.ts +0 -10
  721. package/dist/structure/Lattice.svelte +0 -196
  722. package/dist/structure/Lattice.svelte.d.ts +0 -17
  723. package/dist/structure/Structure.svelte +0 -1857
  724. package/dist/structure/Structure.svelte.d.ts +0 -83
  725. package/dist/structure/StructureControls.svelte +0 -1184
  726. package/dist/structure/StructureControls.svelte.d.ts +0 -31
  727. package/dist/structure/StructureExportPane.svelte +0 -251
  728. package/dist/structure/StructureExportPane.svelte.d.ts +0 -17
  729. package/dist/structure/StructureInfoPane.svelte +0 -434
  730. package/dist/structure/StructureInfoPane.svelte.d.ts +0 -18
  731. package/dist/structure/StructureScene.svelte +0 -1574
  732. package/dist/structure/StructureScene.svelte.d.ts +0 -104
  733. package/dist/structure/atom-properties.d.ts +0 -37
  734. package/dist/structure/atom-properties.js +0 -198
  735. package/dist/structure/bonding.d.ts +0 -33
  736. package/dist/structure/bonding.js +0 -304
  737. package/dist/structure/export.d.ts +0 -20
  738. package/dist/structure/export.js +0 -725
  739. package/dist/structure/ferrox-wasm-types.d.ts +0 -46
  740. package/dist/structure/ferrox-wasm-types.js +0 -18
  741. package/dist/structure/ferrox-wasm.d.ts +0 -94
  742. package/dist/structure/ferrox-wasm.js +0 -249
  743. package/dist/structure/index.d.ts +0 -110
  744. package/dist/structure/index.js +0 -168
  745. package/dist/structure/measure.d.ts +0 -6
  746. package/dist/structure/measure.js +0 -29
  747. package/dist/structure/parse.d.ts +0 -65
  748. package/dist/structure/parse.js +0 -1374
  749. package/dist/structure/partial-occupancy.d.ts +0 -25
  750. package/dist/structure/partial-occupancy.js +0 -99
  751. package/dist/structure/pbc.d.ts +0 -9
  752. package/dist/structure/pbc.js +0 -123
  753. package/dist/structure/supercell.d.ts +0 -8
  754. package/dist/structure/supercell.js +0 -137
  755. package/dist/structure/validation.d.ts +0 -2
  756. package/dist/structure/validation.js +0 -10
  757. package/dist/symmetry/SymmetryStats.svelte +0 -226
  758. package/dist/symmetry/SymmetryStats.svelte.d.ts +0 -21
  759. package/dist/symmetry/WyckoffTable.svelte +0 -113
  760. package/dist/symmetry/WyckoffTable.svelte.d.ts +0 -11
  761. package/dist/symmetry/cell-transform.d.ts +0 -12
  762. package/dist/symmetry/cell-transform.js +0 -77
  763. package/dist/symmetry/index.d.ts +0 -43
  764. package/dist/symmetry/index.js +0 -229
  765. package/dist/symmetry/spacegroups.d.ts +0 -9
  766. package/dist/symmetry/spacegroups.js +0 -394
  767. package/dist/table/HeatmapTable.svelte +0 -1854
  768. package/dist/table/HeatmapTable.svelte.d.ts +0 -49
  769. package/dist/table/ToggleMenu.svelte +0 -376
  770. package/dist/table/ToggleMenu.svelte.d.ts +0 -11
  771. package/dist/table/index.d.ts +0 -74
  772. package/dist/table/index.js +0 -38
  773. package/dist/theme/ThemeControl.svelte +0 -53
  774. package/dist/theme/ThemeControl.svelte.d.ts +0 -9
  775. package/dist/theme/index.d.ts +0 -29
  776. package/dist/theme/index.js +0 -79
  777. package/dist/theme/themes.mjs +0 -285
  778. package/dist/time.d.ts +0 -4
  779. package/dist/time.js +0 -70
  780. package/dist/tooltip/TooltipContent.svelte +0 -58
  781. package/dist/tooltip/TooltipContent.svelte.d.ts +0 -31
  782. package/dist/tooltip/index.d.ts +0 -2
  783. package/dist/tooltip/index.js +0 -2
  784. package/dist/tooltip/types.d.ts +0 -8
  785. package/dist/tooltip/types.js +0 -1
  786. package/dist/trajectory/Trajectory.svelte +0 -1517
  787. package/dist/trajectory/Trajectory.svelte.d.ts +0 -77
  788. package/dist/trajectory/TrajectoryError.svelte +0 -128
  789. package/dist/trajectory/TrajectoryError.svelte.d.ts +0 -13
  790. package/dist/trajectory/TrajectoryExportPane.svelte +0 -357
  791. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +0 -17
  792. package/dist/trajectory/TrajectoryInfoPane.svelte +0 -387
  793. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +0 -17
  794. package/dist/trajectory/constants.d.ts +0 -6
  795. package/dist/trajectory/constants.js +0 -7
  796. package/dist/trajectory/extract.d.ts +0 -5
  797. package/dist/trajectory/extract.js +0 -162
  798. package/dist/trajectory/format-detect.d.ts +0 -9
  799. package/dist/trajectory/format-detect.js +0 -76
  800. package/dist/trajectory/frame-reader.d.ts +0 -17
  801. package/dist/trajectory/frame-reader.js +0 -332
  802. package/dist/trajectory/helpers.d.ts +0 -14
  803. package/dist/trajectory/helpers.js +0 -172
  804. package/dist/trajectory/index.d.ts +0 -63
  805. package/dist/trajectory/index.js +0 -126
  806. package/dist/trajectory/parse/ase.d.ts +0 -2
  807. package/dist/trajectory/parse/ase.js +0 -77
  808. package/dist/trajectory/parse/hdf5.d.ts +0 -2
  809. package/dist/trajectory/parse/hdf5.js +0 -129
  810. package/dist/trajectory/parse/index.d.ts +0 -12
  811. package/dist/trajectory/parse/index.js +0 -299
  812. package/dist/trajectory/parse/lammps.d.ts +0 -5
  813. package/dist/trajectory/parse/lammps.js +0 -179
  814. package/dist/trajectory/parse/vasp.d.ts +0 -2
  815. package/dist/trajectory/parse/vasp.js +0 -68
  816. package/dist/trajectory/parse/xyz.d.ts +0 -2
  817. package/dist/trajectory/parse/xyz.js +0 -110
  818. package/dist/trajectory/plotting.d.ts +0 -28
  819. package/dist/trajectory/plotting.js +0 -423
  820. package/dist/trajectory/types.d.ts +0 -11
  821. package/dist/trajectory/types.js +0 -1
  822. package/dist/utils.d.ts +0 -5
  823. package/dist/utils.js +0 -36
  824. package/dist/xrd/XrdPlot.svelte +0 -615
  825. package/dist/xrd/XrdPlot.svelte.d.ts +0 -28
  826. package/dist/xrd/broadening.d.ts +0 -20
  827. package/dist/xrd/broadening.js +0 -97
  828. package/dist/xrd/calc-xrd.d.ts +0 -37
  829. package/dist/xrd/calc-xrd.js +0 -337
  830. package/dist/xrd/index.d.ts +0 -37
  831. package/dist/xrd/index.js +0 -4
  832. package/dist/xrd/parse.d.ts +0 -13
  833. package/dist/xrd/parse.js +0 -749
  834. /package/dist/{EmptyState.svelte → src/lib/EmptyState.svelte} +0 -0
  835. /package/dist/{Icon.svelte → src/lib/Icon.svelte} +0 -0
  836. /package/dist/{chempot-diagram → src/lib/chempot-diagram}/ChemPotScene3D.svelte +0 -0
  837. /package/dist/{colors → src/lib/colors}/alloy-colors.json +0 -0
  838. /package/dist/{colors → src/lib/colors}/dark-mode-colors.json +0 -0
  839. /package/dist/{colors → src/lib/colors}/jmol-colors.json +0 -0
  840. /package/dist/{colors → src/lib/colors}/muted-colors.json +0 -0
  841. /package/dist/{colors → src/lib/colors}/pastel-colors.json +0 -0
  842. /package/dist/{colors → src/lib/colors}/vesta-colors.json +0 -0
  843. /package/dist/{element → src/lib/element}/Nucleus.svelte +0 -0
  844. /package/dist/{element → src/lib/element}/data.json +0 -0
  845. /package/dist/{element → src/lib/element}/data.json.gz +0 -0
  846. /package/dist/{element → src/lib/element}/data.schema.json +0 -0
  847. /package/dist/{element-image-urls.json → src/lib/element-image-urls.json} +0 -0
  848. /package/dist/{feedback → src/lib/feedback}/Spinner.svelte +0 -0
  849. /package/dist/{feedback → src/lib/feedback}/StatusMessage.svelte +0 -0
  850. /package/dist/{periodic-table → src/lib/periodic-table}/TableInset.svelte +0 -0
  851. /package/dist/{plot → src/lib/plot}/ReferenceLine.svelte +0 -0
  852. /package/dist/{xrd → src/lib/xrd}/atomic_scattering_params.json +0 -0
@@ -0,0 +1,1086 @@
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>