matterviz 0.3.1 → 0.3.3

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 (358) hide show
  1. package/dist/EmptyState.svelte +10 -2
  2. package/dist/FilePicker.svelte +154 -96
  3. package/dist/Icon.svelte +20 -14
  4. package/dist/MillerIndexInput.svelte +27 -21
  5. package/dist/api/optimade.js +6 -6
  6. package/dist/app.css +216 -178
  7. package/dist/brillouin/BrillouinZone.svelte +299 -198
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +74 -55
  11. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte +277 -165
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  15. package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
  16. package/dist/brillouin/compute.js +11 -6
  17. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  18. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  19. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +847 -0
  20. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  21. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3194 -0
  22. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  23. package/dist/chempot-diagram/ChemPotScene3D.svelte +11 -0
  24. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  25. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  26. package/dist/chempot-diagram/async-compute.svelte.js +77 -0
  27. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  28. package/dist/chempot-diagram/chempot-worker.js +11 -0
  29. package/dist/chempot-diagram/color.d.ts +10 -0
  30. package/dist/chempot-diagram/color.js +32 -0
  31. package/dist/chempot-diagram/compute.d.ts +48 -0
  32. package/dist/chempot-diagram/compute.js +812 -0
  33. package/dist/chempot-diagram/index.d.ts +6 -0
  34. package/dist/chempot-diagram/index.js +6 -0
  35. package/dist/chempot-diagram/pointer.d.ts +16 -0
  36. package/dist/chempot-diagram/pointer.js +40 -0
  37. package/dist/chempot-diagram/temperature.d.ts +15 -0
  38. package/dist/chempot-diagram/temperature.js +36 -0
  39. package/dist/chempot-diagram/types.d.ts +86 -0
  40. package/dist/chempot-diagram/types.js +28 -0
  41. package/dist/colors/index.d.ts +3 -1
  42. package/dist/colors/index.js +9 -3
  43. package/dist/composition/BarChart.svelte +141 -77
  44. package/dist/composition/BubbleChart.svelte +107 -52
  45. package/dist/composition/Composition.svelte +100 -79
  46. package/dist/composition/Formula.svelte +108 -62
  47. package/dist/composition/FormulaFilter.svelte +973 -353
  48. package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
  49. package/dist/composition/PieChart.svelte +199 -99
  50. package/dist/composition/PieChart.svelte.d.ts +1 -1
  51. package/dist/composition/format.d.ts +5 -0
  52. package/dist/composition/format.js +20 -3
  53. package/dist/composition/parse.js +14 -9
  54. package/dist/convex-hull/ConvexHull.svelte +93 -38
  55. package/dist/convex-hull/ConvexHull2D.svelte +551 -393
  56. package/dist/convex-hull/ConvexHull3D.svelte +1303 -825
  57. package/dist/convex-hull/ConvexHull4D.svelte +1012 -686
  58. package/dist/convex-hull/ConvexHullControls.svelte +115 -28
  59. package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
  60. package/dist/convex-hull/ConvexHullStats.svelte +821 -249
  61. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
  62. package/dist/convex-hull/ConvexHullTooltip.svelte +41 -16
  63. package/dist/convex-hull/GasPressureControls.svelte +104 -61
  64. package/dist/convex-hull/StructurePopup.svelte +25 -4
  65. package/dist/convex-hull/TemperatureSlider.svelte +45 -25
  66. package/dist/convex-hull/barycentric-coords.js +13 -7
  67. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  68. package/dist/convex-hull/demo-temperature.js +40 -0
  69. package/dist/convex-hull/gas-thermodynamics.js +17 -12
  70. package/dist/convex-hull/helpers.d.ts +10 -1
  71. package/dist/convex-hull/helpers.js +79 -38
  72. package/dist/convex-hull/index.d.ts +1 -0
  73. package/dist/convex-hull/index.js +1 -0
  74. package/dist/convex-hull/thermodynamics.d.ts +8 -21
  75. package/dist/convex-hull/thermodynamics.js +163 -69
  76. package/dist/convex-hull/types.d.ts +12 -12
  77. package/dist/convex-hull/types.js +0 -12
  78. package/dist/coordination/CoordinationBarPlot.svelte +232 -176
  79. package/dist/element/BohrAtom.svelte +56 -13
  80. package/dist/element/ElementHeading.svelte +7 -2
  81. package/dist/element/ElementPhoto.svelte +15 -9
  82. package/dist/element/ElementStats.svelte +10 -4
  83. package/dist/element/ElementTile.svelte +137 -73
  84. package/dist/element/Nucleus.svelte +39 -11
  85. package/dist/element/data.js +2 -14
  86. package/dist/element/data.json.gz +0 -0
  87. package/dist/element/types.d.ts +1 -0
  88. package/dist/feedback/ClickFeedback.svelte +16 -5
  89. package/dist/feedback/DragOverlay.svelte +10 -2
  90. package/dist/feedback/Spinner.svelte +4 -2
  91. package/dist/feedback/StatusMessage.svelte +8 -2
  92. package/dist/fermi-surface/FermiSlice.svelte +118 -88
  93. package/dist/fermi-surface/FermiSurface.svelte +336 -239
  94. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  95. package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
  96. package/dist/fermi-surface/FermiSurfaceScene.svelte +536 -343
  97. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  98. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
  99. package/dist/fermi-surface/compute.js +16 -20
  100. package/dist/fermi-surface/parse.js +37 -33
  101. package/dist/fermi-surface/symmetry.js +2 -7
  102. package/dist/fermi-surface/types.d.ts +3 -5
  103. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1527 -0
  104. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  105. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  106. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  107. package/dist/heatmap-matrix/index.d.ts +53 -0
  108. package/dist/heatmap-matrix/index.js +100 -0
  109. package/dist/heatmap-matrix/shared.d.ts +2 -0
  110. package/dist/heatmap-matrix/shared.js +4 -0
  111. package/dist/icons.d.ts +111 -0
  112. package/dist/icons.js +158 -0
  113. package/dist/index.d.ts +5 -2
  114. package/dist/index.js +5 -2
  115. package/dist/io/decompress.js +1 -1
  116. package/dist/io/export.d.ts +3 -0
  117. package/dist/io/export.js +138 -140
  118. package/dist/io/file-drop.d.ts +7 -0
  119. package/dist/io/file-drop.js +43 -0
  120. package/dist/io/index.d.ts +2 -2
  121. package/dist/io/index.js +2 -112
  122. package/dist/io/is-binary.js +2 -3
  123. package/dist/io/types.d.ts +1 -0
  124. package/dist/io/url-drop.d.ts +2 -0
  125. package/dist/io/url-drop.js +117 -0
  126. package/dist/isosurface/Isosurface.svelte +220 -110
  127. package/dist/isosurface/IsosurfaceControls.svelte +65 -28
  128. package/dist/isosurface/parse.js +104 -56
  129. package/dist/isosurface/slice.d.ts +2 -1
  130. package/dist/isosurface/slice.js +8 -13
  131. package/dist/isosurface/types.d.ts +14 -1
  132. package/dist/isosurface/types.js +152 -5
  133. package/dist/labels.d.ts +2 -1
  134. package/dist/labels.js +12 -8
  135. package/dist/layout/FullscreenToggle.svelte +11 -2
  136. package/dist/layout/InfoCard.svelte +38 -6
  137. package/dist/layout/InfoTag.svelte +125 -94
  138. package/dist/layout/PropertyFilter.svelte +82 -37
  139. package/dist/layout/SettingsSection.svelte +85 -55
  140. package/dist/layout/SubpageGrid.svelte +82 -0
  141. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  142. package/dist/layout/index.d.ts +1 -0
  143. package/dist/layout/index.js +1 -0
  144. package/dist/layout/json-tree/JsonNode.svelte +266 -223
  145. package/dist/layout/json-tree/JsonTree.svelte +516 -429
  146. package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
  147. package/dist/layout/json-tree/JsonValue.svelte +281 -173
  148. package/dist/layout/json-tree/types.d.ts +10 -2
  149. package/dist/layout/json-tree/utils.d.ts +2 -0
  150. package/dist/layout/json-tree/utils.js +37 -2
  151. package/dist/marching-cubes.js +25 -2
  152. package/dist/math.d.ts +20 -17
  153. package/dist/math.js +474 -57
  154. package/dist/overlays/ContextMenu.svelte +66 -40
  155. package/dist/overlays/DraggablePane.svelte +331 -154
  156. package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
  157. package/dist/periodic-table/PeriodicTable.svelte +278 -145
  158. package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
  159. package/dist/periodic-table/PropertySelect.svelte +25 -7
  160. package/dist/periodic-table/TableInset.svelte +8 -3
  161. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +559 -267
  162. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
  163. package/dist/phase-diagram/PhaseDiagramControls.svelte +131 -51
  164. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
  165. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  166. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  167. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +160 -110
  168. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +8 -1
  169. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +217 -86
  170. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
  171. package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
  172. package/dist/phase-diagram/build-diagram.js +9 -9
  173. package/dist/phase-diagram/colors.js +1 -3
  174. package/dist/phase-diagram/index.d.ts +2 -0
  175. package/dist/phase-diagram/index.js +2 -0
  176. package/dist/phase-diagram/parse.js +10 -9
  177. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  178. package/dist/phase-diagram/svg-to-diagram.js +869 -0
  179. package/dist/phase-diagram/types.d.ts +10 -0
  180. package/dist/phase-diagram/utils.d.ts +8 -4
  181. package/dist/phase-diagram/utils.js +219 -74
  182. package/dist/plot/AxisLabel.svelte +51 -0
  183. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  184. package/dist/plot/BarPlot.svelte +1461 -768
  185. package/dist/plot/BarPlot.svelte.d.ts +3 -3
  186. package/dist/plot/BarPlotControls.svelte +33 -6
  187. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  188. package/dist/plot/ColorBar.svelte +533 -383
  189. package/dist/plot/ColorBar.svelte.d.ts +1 -1
  190. package/dist/plot/ColorScaleSelect.svelte +28 -7
  191. package/dist/plot/ElementScatter.svelte +38 -16
  192. package/dist/plot/FillArea.svelte +152 -92
  193. package/dist/plot/Histogram.svelte +1162 -709
  194. package/dist/plot/Histogram.svelte.d.ts +1 -1
  195. package/dist/plot/HistogramControls.svelte +81 -18
  196. package/dist/plot/HistogramControls.svelte.d.ts +6 -2
  197. package/dist/plot/InteractiveAxisLabel.svelte +34 -11
  198. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
  199. package/dist/plot/Line.svelte +63 -28
  200. package/dist/plot/PlotControls.svelte +221 -96
  201. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  202. package/dist/plot/PlotLegend.svelte +174 -91
  203. package/dist/plot/PlotTooltip.svelte +45 -6
  204. package/dist/plot/PortalSelect.svelte +175 -146
  205. package/dist/plot/ReferenceLine.svelte +77 -22
  206. package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
  207. package/dist/plot/ReferenceLine3D.svelte +132 -107
  208. package/dist/plot/ReferencePlane.svelte +146 -123
  209. package/dist/plot/ScatterPlot.svelte +1880 -1156
  210. package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
  211. package/dist/plot/ScatterPlot3D.svelte +256 -131
  212. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  213. package/dist/plot/ScatterPlot3DControls.svelte +300 -297
  214. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
  215. package/dist/plot/ScatterPlot3DScene.svelte +608 -406
  216. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  217. package/dist/plot/ScatterPlotControls.svelte +150 -70
  218. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  219. package/dist/plot/ScatterPoint.svelte +98 -26
  220. package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
  221. package/dist/plot/SpacegroupBarPlot.svelte +142 -85
  222. package/dist/plot/Surface3D.svelte +159 -108
  223. package/dist/plot/ZeroLines.svelte +96 -0
  224. package/dist/plot/ZeroLines.svelte.d.ts +32 -0
  225. package/dist/plot/ZoomRect.svelte +23 -0
  226. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  227. package/dist/plot/axis-utils.d.ts +1 -1
  228. package/dist/plot/axis-utils.js +1 -3
  229. package/dist/plot/data-cleaning.js +12 -28
  230. package/dist/plot/data-transform.js +2 -1
  231. package/dist/plot/fill-utils.js +2 -0
  232. package/dist/plot/index.d.ts +6 -2
  233. package/dist/plot/index.js +6 -2
  234. package/dist/plot/interactions.d.ts +8 -10
  235. package/dist/plot/interactions.js +2 -3
  236. package/dist/plot/layout.d.ts +11 -2
  237. package/dist/plot/layout.js +44 -17
  238. package/dist/plot/reference-line.d.ts +5 -22
  239. package/dist/plot/reference-line.js +12 -84
  240. package/dist/plot/scales.js +24 -36
  241. package/dist/plot/types.d.ts +53 -40
  242. package/dist/plot/types.js +12 -7
  243. package/dist/plot/utils/label-placement.d.ts +32 -15
  244. package/dist/plot/utils/label-placement.js +227 -63
  245. package/dist/plot/utils/series-visibility.js +2 -3
  246. package/dist/plot/utils.d.ts +1 -0
  247. package/dist/plot/utils.js +14 -0
  248. package/dist/rdf/RdfPlot.svelte +173 -132
  249. package/dist/rdf/calc-rdf.js +4 -5
  250. package/dist/sanitize.d.ts +4 -0
  251. package/dist/sanitize.js +107 -0
  252. package/dist/settings.d.ts +21 -6
  253. package/dist/settings.js +63 -19
  254. package/dist/spectral/Bands.svelte +963 -412
  255. package/dist/spectral/Bands.svelte.d.ts +22 -2
  256. package/dist/spectral/BandsAndDos.svelte +90 -49
  257. package/dist/spectral/BrillouinBandsDos.svelte +151 -93
  258. package/dist/spectral/Dos.svelte +389 -258
  259. package/dist/spectral/helpers.d.ts +23 -1
  260. package/dist/spectral/helpers.js +119 -51
  261. package/dist/spectral/types.d.ts +2 -0
  262. package/dist/state.svelte.d.ts +1 -1
  263. package/dist/state.svelte.js +3 -2
  264. package/dist/structure/Arrow.svelte +59 -20
  265. package/dist/structure/AtomLegend.svelte +231 -129
  266. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  267. package/dist/structure/Bond.svelte +73 -47
  268. package/dist/structure/CanvasTooltip.svelte +10 -2
  269. package/dist/structure/CellSelect.svelte +148 -51
  270. package/dist/structure/Cylinder.svelte +33 -17
  271. package/dist/structure/Lattice.svelte +88 -33
  272. package/dist/structure/Structure.svelte +1077 -821
  273. package/dist/structure/Structure.svelte.d.ts +1 -1
  274. package/dist/structure/StructureControls.svelte +373 -139
  275. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  276. package/dist/structure/StructureExportPane.svelte +124 -89
  277. package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
  278. package/dist/structure/StructureInfoPane.svelte +304 -231
  279. package/dist/structure/StructureScene.svelte +919 -445
  280. package/dist/structure/StructureScene.svelte.d.ts +16 -7
  281. package/dist/structure/atom-properties.d.ts +6 -2
  282. package/dist/structure/atom-properties.js +42 -29
  283. package/dist/structure/bonding.js +6 -7
  284. package/dist/structure/export.js +22 -34
  285. package/dist/structure/ferrox-wasm-types.d.ts +3 -2
  286. package/dist/structure/ferrox-wasm-types.js +0 -3
  287. package/dist/structure/ferrox-wasm.d.ts +3 -2
  288. package/dist/structure/ferrox-wasm.js +2 -3
  289. package/dist/structure/index.d.ts +16 -0
  290. package/dist/structure/index.js +88 -6
  291. package/dist/structure/measure.d.ts +2 -2
  292. package/dist/structure/measure.js +4 -44
  293. package/dist/structure/parse.js +130 -155
  294. package/dist/structure/partial-occupancy.d.ts +25 -0
  295. package/dist/structure/partial-occupancy.js +99 -0
  296. package/dist/structure/pbc.d.ts +1 -0
  297. package/dist/structure/pbc.js +16 -6
  298. package/dist/structure/supercell.d.ts +2 -2
  299. package/dist/structure/supercell.js +12 -22
  300. package/dist/structure/validation.js +5 -3
  301. package/dist/symmetry/SymmetryStats.svelte +94 -37
  302. package/dist/symmetry/WyckoffTable.svelte +42 -14
  303. package/dist/symmetry/cell-transform.js +5 -3
  304. package/dist/symmetry/index.d.ts +7 -4
  305. package/dist/symmetry/index.js +87 -21
  306. package/dist/symmetry/spacegroups.js +148 -148
  307. package/dist/table/HeatmapTable.svelte +1112 -516
  308. package/dist/table/HeatmapTable.svelte.d.ts +12 -1
  309. package/dist/table/ToggleMenu.svelte +125 -90
  310. package/dist/table/index.d.ts +2 -0
  311. package/dist/table/index.js +2 -4
  312. package/dist/theme/ThemeControl.svelte +21 -12
  313. package/dist/time.js +4 -1
  314. package/dist/tooltip/TooltipContent.svelte +33 -8
  315. package/dist/trajectory/Trajectory.svelte +889 -687
  316. package/dist/trajectory/TrajectoryError.svelte +14 -3
  317. package/dist/trajectory/TrajectoryExportPane.svelte +148 -90
  318. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
  319. package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
  320. package/dist/trajectory/constants.d.ts +6 -0
  321. package/dist/trajectory/constants.js +7 -0
  322. package/dist/trajectory/extract.js +13 -31
  323. package/dist/trajectory/format-detect.d.ts +9 -0
  324. package/dist/trajectory/format-detect.js +76 -0
  325. package/dist/trajectory/frame-reader.d.ts +17 -0
  326. package/dist/trajectory/frame-reader.js +332 -0
  327. package/dist/trajectory/helpers.d.ts +14 -0
  328. package/dist/trajectory/helpers.js +172 -0
  329. package/dist/trajectory/index.d.ts +1 -0
  330. package/dist/trajectory/index.js +23 -14
  331. package/dist/trajectory/parse/ase.d.ts +2 -0
  332. package/dist/trajectory/parse/ase.js +77 -0
  333. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  334. package/dist/trajectory/parse/hdf5.js +129 -0
  335. package/dist/trajectory/parse/index.d.ts +12 -0
  336. package/dist/trajectory/parse/index.js +299 -0
  337. package/dist/trajectory/parse/lammps.d.ts +5 -0
  338. package/dist/trajectory/parse/lammps.js +179 -0
  339. package/dist/trajectory/parse/vasp.d.ts +2 -0
  340. package/dist/trajectory/parse/vasp.js +68 -0
  341. package/dist/trajectory/parse/xyz.d.ts +2 -0
  342. package/dist/trajectory/parse/xyz.js +110 -0
  343. package/dist/trajectory/plotting.js +13 -8
  344. package/dist/trajectory/types.d.ts +11 -0
  345. package/dist/trajectory/types.js +1 -0
  346. package/dist/utils.d.ts +3 -0
  347. package/dist/utils.js +17 -0
  348. package/dist/xrd/XrdPlot.svelte +337 -245
  349. package/dist/xrd/broadening.js +14 -9
  350. package/dist/xrd/calc-xrd.js +12 -19
  351. package/dist/xrd/parse.d.ts +1 -1
  352. package/dist/xrd/parse.js +17 -17
  353. package/package.json +103 -101
  354. package/readme.md +4 -4
  355. package/dist/trajectory/parse.d.ts +0 -42
  356. package/dist/trajectory/parse.js +0 -1267
  357. /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
  358. /package/dist/theme/{themes.js → themes.mjs} +0 -0
@@ -1,8 +1,9 @@
1
1
  import type { AxisConfig } from '../plot';
2
2
  import type { ComponentProps, Snippet } from 'svelte';
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
+ import type { DiagramInput } from './diagram-input';
4
5
  import PhaseDiagramControls from './PhaseDiagramControls.svelte';
5
- import type { PhaseDiagramConfig, PhaseDiagramData, PhaseDiagramTooltipConfig, PhaseHoverInfo, PhaseRegion } from './types';
6
+ import type { LeverRuleMode, PhaseDiagramConfig, PhaseDiagramData, PhaseDiagramTooltipConfig, PhaseHoverInfo, PhaseRegion } from './types';
6
7
  type Props = HTMLAttributes<HTMLDivElement> & {
7
8
  data: PhaseDiagramData;
8
9
  config?: Partial<PhaseDiagramConfig>;
@@ -24,6 +25,9 @@ type Props = HTMLAttributes<HTMLDivElement> & {
24
25
  export_pane_open?: boolean;
25
26
  png_dpi?: number;
26
27
  export_filename?: string;
28
+ lever_rule_mode?: LeverRuleMode;
29
+ diagram_input?: DiagramInput | null;
30
+ editor_open?: boolean;
27
31
  x_axis?: AxisConfig;
28
32
  y_axis?: AxisConfig;
29
33
  tooltip?: Snippet<[PhaseHoverInfo]> | PhaseDiagramTooltipConfig | false;
@@ -35,6 +39,6 @@ type Props = HTMLAttributes<HTMLDivElement> & {
35
39
  }
36
40
  ]>;
37
41
  };
38
- declare const IsobaricBinaryPhaseDiagram: import("svelte").Component<Props, {}, "fullscreen" | "controls_open" | "x_axis" | "y_axis" | "show_labels" | "export_pane_open" | "wrapper" | "png_dpi" | "show_grid" | "hovered_region" | "config" | "show_boundaries" | "show_special_points" | "show_component_labels" | "display_temp_unit">;
42
+ declare const IsobaricBinaryPhaseDiagram: import("svelte").Component<Props, {}, "fullscreen" | "controls_open" | "x_axis" | "y_axis" | "show_grid" | "wrapper" | "hovered_region" | "config" | "show_boundaries" | "show_labels" | "show_special_points" | "show_component_labels" | "png_dpi" | "export_pane_open" | "lever_rule_mode" | "editor_open" | "diagram_input" | "display_temp_unit">;
39
43
  type IsobaricBinaryPhaseDiagram = ReturnType<typeof IsobaricBinaryPhaseDiagram>;
40
44
  export default IsobaricBinaryPhaseDiagram;
@@ -1,44 +1,105 @@
1
- <script lang="ts">// NOTE: Axis config objects must be reassigned (not mutated) to trigger $bindable reactivity.
2
- import { format_num } from '../labels';
3
- import SettingsSection from '../layout/SettingsSection.svelte';
4
- import DraggablePane from '../overlays/DraggablePane.svelte';
5
- import { css_color_to_hex } from '../colors';
6
- import { tooltip } from 'svelte-multiselect/attachments';
7
- import { merge_phase_diagram_config, PHASE_DIAGRAM_DEFAULTS } from './utils';
8
- let { controls_open = $bindable(false),
9
- // Visibility toggles
10
- show_boundaries = $bindable(PHASE_DIAGRAM_DEFAULTS.show_boundaries), show_labels = $bindable(PHASE_DIAGRAM_DEFAULTS.show_labels), show_special_points = $bindable(PHASE_DIAGRAM_DEFAULTS.show_special_points), show_grid = $bindable(PHASE_DIAGRAM_DEFAULTS.show_grid), show_component_labels = $bindable(PHASE_DIAGRAM_DEFAULTS.show_component_labels),
11
- // Configuration
12
- config = $bindable({}),
13
- // Axis configuration
14
- x_axis = $bindable({}), y_axis = $bindable({}),
15
- // Data
16
- data,
17
- // Export
18
- enable_export = true, png_dpi = $bindable(PHASE_DIAGRAM_DEFAULTS.png_dpi),
19
- // Pane props
20
- pane_props = {}, toggle_props = {},
21
- // Snippets
22
- children, post_children, ...rest } = $props();
23
- // Merged config using shared helper
24
- const merged_config = $derived(merge_phase_diagram_config(config));
25
- // Helper to update top-level config properties (e.g., font_size, special_point_radius)
26
- function update_config(key, value) {
27
- config = { ...config, [key]: value };
28
- }
29
- // Helper to update nested config properties
30
- function update_nested(key, prop, value) {
31
- config = { ...config, [key]: { ...config[key], [prop]: value } };
32
- }
33
- // Derive component info from data
34
- const component_a = $derived(data?.components?.[0]);
35
- const component_b = $derived(data?.components?.[1]);
36
- const title = $derived(component_a && component_b
37
- ? `${component_a}-${component_b} Phase Diagram`
38
- : `Phase Diagram Controls`);
39
- const temp_unit = $derived(data?.temperature_unit ?? `K`);
40
- const comp_unit = $derived(data?.composition_unit ?? `at%`);
41
- const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
1
+ <script lang="ts">
2
+ // NOTE: Axis config objects must be reassigned (not mutated) to trigger $bindable reactivity.
3
+ import { css_color_to_hex } from '../colors'
4
+ import { format_num } from '../labels'
5
+ import SettingsSection from '../layout/SettingsSection.svelte'
6
+ import DraggablePane from '../overlays/DraggablePane.svelte'
7
+ import type { AxisConfig } from '../plot'
8
+ import type { ComponentProps, Snippet } from 'svelte'
9
+ import { tooltip } from 'svelte-multiselect/attachments'
10
+ import type { LeverRuleMode, PhaseDiagramConfig, PhaseDiagramData } from './types'
11
+ import { merge_phase_diagram_config, PHASE_DIAGRAM_DEFAULTS } from './utils'
12
+
13
+ type Props = Omit<ComponentProps<typeof DraggablePane>, `children`> & {
14
+ controls_open?: boolean
15
+ // Visibility toggles
16
+ show_boundaries?: boolean
17
+ show_labels?: boolean
18
+ show_special_points?: boolean
19
+ show_grid?: boolean
20
+ show_component_labels?: boolean
21
+ // Configuration
22
+ config?: Partial<PhaseDiagramConfig>
23
+ // Lever rule mode
24
+ lever_rule_mode?: LeverRuleMode
25
+ // Axis configuration
26
+ x_axis?: AxisConfig
27
+ y_axis?: AxisConfig
28
+ // Data for context (components, units, etc.)
29
+ data?: PhaseDiagramData
30
+ // Export settings
31
+ enable_export?: boolean
32
+ png_dpi?: number
33
+ // Pane customization
34
+ pane_props?: ComponentProps<typeof DraggablePane>[`pane_props`]
35
+ toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
36
+ // Custom content snippets
37
+ children?: Snippet<[{ controls_open: boolean }]>
38
+ post_children?: Snippet<[{ controls_open: boolean }]>
39
+ }
40
+
41
+ let {
42
+ controls_open = $bindable(false),
43
+ // Visibility toggles
44
+ show_boundaries = $bindable(PHASE_DIAGRAM_DEFAULTS.show_boundaries),
45
+ show_labels = $bindable(PHASE_DIAGRAM_DEFAULTS.show_labels),
46
+ show_special_points = $bindable(PHASE_DIAGRAM_DEFAULTS.show_special_points),
47
+ show_grid = $bindable(PHASE_DIAGRAM_DEFAULTS.show_grid),
48
+ show_component_labels = $bindable(PHASE_DIAGRAM_DEFAULTS.show_component_labels),
49
+ // Configuration
50
+ config = $bindable({}),
51
+ // Lever rule mode
52
+ lever_rule_mode = $bindable(`horizontal`),
53
+ // Axis configuration
54
+ x_axis = $bindable({}),
55
+ y_axis = $bindable({}),
56
+ // Data
57
+ data,
58
+ // Export
59
+ enable_export = true,
60
+ png_dpi = $bindable(PHASE_DIAGRAM_DEFAULTS.png_dpi),
61
+ // Pane props
62
+ pane_props = {},
63
+ toggle_props = {},
64
+ // Snippets
65
+ children,
66
+ post_children,
67
+ ...rest
68
+ }: Props = $props()
69
+
70
+ // Merged config using shared helper
71
+ const merged_config = $derived(merge_phase_diagram_config(config))
72
+
73
+ // Helper to update top-level config properties (e.g., font_size, special_point_radius)
74
+ function update_config<K extends keyof PhaseDiagramConfig>(
75
+ key: K,
76
+ value: PhaseDiagramConfig[K],
77
+ ) {
78
+ config = { ...config, [key]: value }
79
+ }
80
+
81
+ // Helper to update nested config properties
82
+ function update_nested<
83
+ K extends keyof Pick<PhaseDiagramConfig, `colors` | `tie_line`>,
84
+ >(
85
+ key: K,
86
+ prop: string,
87
+ value: string | number,
88
+ ) {
89
+ config = { ...config, [key]: { ...config[key], [prop]: value } }
90
+ }
91
+
92
+ // Derive component info from data
93
+ const component_a = $derived(data?.components?.[0])
94
+ const component_b = $derived(data?.components?.[1])
95
+ const title = $derived(
96
+ component_a && component_b
97
+ ? `${component_a}-${component_b} Phase Diagram`
98
+ : `Phase Diagram Controls`,
99
+ )
100
+ const temp_unit = $derived(data?.temperature_unit ?? `K`)
101
+ const comp_unit = $derived(data?.composition_unit ?? `at%`)
102
+ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0)
42
103
  </script>
43
104
 
44
105
  <!-- Reusable snippet for number + range input pairs -->
@@ -65,7 +126,7 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
65
126
  pane_props={{
66
127
  ...pane_props,
67
128
  class: `phase-diagram-controls-pane ${pane_props?.class ?? ``}`,
68
- style: `--pane-padding: 12px; --pane-gap: 6px; ${pane_props?.style ?? ``}`,
129
+ style: pane_props?.style ?? ``,
69
130
  }}
70
131
  toggle_props={{
71
132
  title: controls_open ? `` : `Phase diagram controls`,
@@ -200,14 +261,29 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
200
261
  title="Tie-line Display"
201
262
  current_values={{
202
263
  ...merged_config.tie_line,
264
+ lever_rule_mode,
203
265
  }}
204
266
  on_reset={() => {
205
267
  config = {
206
268
  ...config,
207
269
  tie_line: { ...PHASE_DIAGRAM_DEFAULTS.tie_line },
208
270
  }
271
+ lever_rule_mode = `horizontal`
209
272
  }}
210
273
  >
274
+ <span {@attach tooltip({ content: `Direction of the lever rule tie-line` })}>
275
+ Direction
276
+ <div class="pane-row">
277
+ <label>
278
+ <input type="radio" bind:group={lever_rule_mode} value="horizontal" />
279
+ Horizontal
280
+ </label>
281
+ <label>
282
+ <input type="radio" bind:group={lever_rule_mode} value="vertical" />
283
+ Vertical
284
+ </label>
285
+ </div>
286
+ </span>
211
287
  {@render num_range(
212
288
  `Line width`,
213
289
  merged_config.tie_line.stroke_width,
@@ -215,7 +291,7 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
215
291
  5,
216
292
  0.5,
217
293
  (val) => update_nested(`tie_line`, `stroke_width`, val),
218
- `Thickness of the horizontal tie-line`,
294
+ `Thickness of the tie-line`,
219
295
  )}
220
296
  {@render num_range(
221
297
  `Endpoint radius`,
@@ -291,6 +367,7 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
291
367
  min={72}
292
368
  max={600}
293
369
  step={50}
370
+ style="width: 3.5em"
294
371
  bind:value={png_dpi}
295
372
  />
296
373
  <input
@@ -313,14 +390,16 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
313
390
  :global(.phase-diagram-controls-pane) {
314
391
  font-size: 0.85em;
315
392
  max-width: 320px;
393
+ --pane-padding: 10px;
394
+ --pane-gap: 4px;
316
395
  }
317
396
  :global(.phase-diagram-controls-pane section) {
318
397
  display: flex;
319
398
  flex-direction: column;
320
- gap: 6pt;
399
+ gap: 4pt;
321
400
  }
322
401
  :global(.phase-diagram-controls-pane h4) {
323
- margin: 10pt 0 4pt !important;
402
+ margin: 6pt 0 2pt !important;
324
403
  }
325
404
  :global(.phase-diagram-controls-pane h4:first-of-type) {
326
405
  margin-top: 0 !important;
@@ -328,18 +407,16 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
328
407
  .pane-row {
329
408
  display: flex;
330
409
  gap: 12pt;
331
- justify-content: space-between;
332
- width: 100%;
333
410
  }
334
411
  .visibility-grid {
335
- display: grid;
336
- grid-template-columns: repeat(2, 1fr);
337
- gap: 6pt 12pt;
412
+ display: flex;
413
+ flex-wrap: wrap;
414
+ gap: 4pt 10pt;
338
415
  }
339
416
  .color-grid {
340
417
  display: grid;
341
418
  grid-template-columns: repeat(3, 1fr);
342
- gap: 8pt;
419
+ gap: 6pt;
343
420
  }
344
421
  .color-grid label {
345
422
  flex-direction: column;
@@ -355,6 +432,9 @@ const has_special_points = $derived((data?.special_points?.length ?? 0) > 0);
355
432
  font-size: inherit;
356
433
  font-family: inherit;
357
434
  }
435
+ input[type='number'] {
436
+ width: 3.5em;
437
+ }
358
438
  input[type='range'] {
359
439
  flex: 1;
360
440
  min-width: 40px;
@@ -1,7 +1,7 @@
1
1
  import DraggablePane from '../overlays/DraggablePane.svelte';
2
2
  import type { AxisConfig } from '../plot';
3
3
  import type { ComponentProps, Snippet } from 'svelte';
4
- import type { PhaseDiagramConfig, PhaseDiagramData } from './types';
4
+ import type { LeverRuleMode, PhaseDiagramConfig, PhaseDiagramData } from './types';
5
5
  type Props = Omit<ComponentProps<typeof DraggablePane>, `children`> & {
6
6
  controls_open?: boolean;
7
7
  show_boundaries?: boolean;
@@ -10,6 +10,7 @@ type Props = Omit<ComponentProps<typeof DraggablePane>, `children`> & {
10
10
  show_grid?: boolean;
11
11
  show_component_labels?: boolean;
12
12
  config?: Partial<PhaseDiagramConfig>;
13
+ lever_rule_mode?: LeverRuleMode;
13
14
  x_axis?: AxisConfig;
14
15
  y_axis?: AxisConfig;
15
16
  data?: PhaseDiagramData;
@@ -24,6 +25,6 @@ type Props = Omit<ComponentProps<typeof DraggablePane>, `children`> & {
24
25
  controls_open: boolean;
25
26
  }]>;
26
27
  };
27
- declare const PhaseDiagramControls: import("svelte").Component<Props, {}, "controls_open" | "x_axis" | "y_axis" | "show_labels" | "png_dpi" | "show_grid" | "config" | "show_boundaries" | "show_special_points" | "show_component_labels">;
28
+ declare const PhaseDiagramControls: import("svelte").Component<Props, {}, "controls_open" | "x_axis" | "y_axis" | "show_grid" | "config" | "show_boundaries" | "show_labels" | "show_special_points" | "show_component_labels" | "png_dpi" | "lever_rule_mode">;
28
29
  type PhaseDiagramControls = ReturnType<typeof PhaseDiagramControls>;
29
30
  export default PhaseDiagramControls;
@@ -0,0 +1,126 @@
1
+ <script lang="ts">
2
+ import { JsonTree } from '../layout/json-tree'
3
+ import { set_at_path } from '../layout/json-tree/utils'
4
+ import DraggablePane from '../overlays/DraggablePane.svelte'
5
+ import type { ComponentProps } from 'svelte'
6
+ import { build_diagram } from './build-diagram'
7
+ import type { DiagramInput } from './diagram-input'
8
+ import type { PhaseDiagramData } from './types'
9
+
10
+ let {
11
+ editor_open = $bindable(false),
12
+ diagram_input = $bindable<DiagramInput | null>(null),
13
+ data = null,
14
+ ondata,
15
+ icon_style = ``,
16
+ toggle_props: caller_toggle_props = {},
17
+ }: {
18
+ editor_open?: boolean
19
+ diagram_input?: DiagramInput | null
20
+ data?: PhaseDiagramData | null
21
+ ondata?: (data: PhaseDiagramData) => void
22
+ icon_style?: string
23
+ toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
24
+ } = $props()
25
+
26
+ // The source object currently displayed (DiagramInput or PhaseDiagramData)
27
+ const display_source = $derived(diagram_input ?? data)
28
+
29
+ const root_label = `diagram`
30
+
31
+ // Brief error flash when an edit is rejected by build_diagram
32
+ let rejection_msg = $state<string | null>(null)
33
+ let rejection_timer: ReturnType<typeof setTimeout> | undefined
34
+
35
+ function show_rejection(msg: string) {
36
+ if (rejection_timer) clearTimeout(rejection_timer)
37
+ rejection_msg = msg
38
+ rejection_timer = setTimeout(() => (rejection_msg = null), 3000)
39
+ }
40
+
41
+ // Shared format detection: true if obj looks like a DiagramInput
42
+ function is_diagram_input(obj: Record<string, unknown>): boolean {
43
+ const meta = obj.meta as Record<string, unknown> | undefined
44
+ return Boolean(meta && Array.isArray(meta.components) && `curves` in obj)
45
+ }
46
+
47
+ // Handle inline value edits from JsonTree
48
+ function handle_change(path: string, new_value: unknown, _old_value: unknown) {
49
+ if (!display_source) return
50
+ const updated = set_at_path(display_source, path, new_value, root_label)
51
+
52
+ if (is_diagram_input(updated as Record<string, unknown>)) {
53
+ try {
54
+ build_diagram(updated as DiagramInput)
55
+ diagram_input = updated as DiagramInput
56
+ } catch (error) {
57
+ const msg = error instanceof Error ? error.message : String(error)
58
+ show_rejection(msg)
59
+ }
60
+ return
61
+ }
62
+ // PhaseDiagramData format — clear diagram_input so rebuilt_data doesn't shadow
63
+ diagram_input = null
64
+ ondata?.(updated as PhaseDiagramData)
65
+ }
66
+ </script>
67
+
68
+ <DraggablePane
69
+ bind:show={editor_open}
70
+ open_icon="Cross"
71
+ closed_icon="Edit"
72
+ {icon_style}
73
+ persistent
74
+ pane_props={{ class: `pd-editor-pane` }}
75
+ toggle_props={{
76
+ class: `pd-editor-toggle`,
77
+ title: editor_open ? `` : `Edit diagram data`,
78
+ ...caller_toggle_props,
79
+ }}
80
+ max_width="600px"
81
+ >
82
+ {#if rejection_msg}
83
+ <div class="rejection-flash">{rejection_msg}</div>
84
+ {/if}
85
+ {#if display_source}
86
+ <JsonTree
87
+ value={display_source}
88
+ {root_label}
89
+ default_fold_level={2}
90
+ download_filename="diagram-data.json"
91
+ editable
92
+ onchange={handle_change}
93
+ />
94
+ {:else}
95
+ <p class="placeholder">
96
+ No diagram data loaded. Drop an SVG or JSON file onto the diagram.
97
+ </p>
98
+ {/if}
99
+ </DraggablePane>
100
+
101
+ <style>
102
+ .rejection-flash {
103
+ color: #d32f2f;
104
+ font-size: 11px;
105
+ padding: 4px 8px;
106
+ background: rgba(211, 47, 47, 0.08);
107
+ border-radius: 3px;
108
+ word-break: break-word;
109
+ animation: fade-out 3s ease-out forwards;
110
+ }
111
+ @keyframes fade-out {
112
+ 0%, 80% {
113
+ opacity: 1;
114
+ }
115
+ 100% {
116
+ opacity: 0;
117
+ }
118
+ }
119
+ .placeholder {
120
+ color: var(--text-muted, #888);
121
+ font-style: italic;
122
+ text-align: center;
123
+ padding: 20px;
124
+ margin: 0;
125
+ }
126
+ </style>
@@ -0,0 +1,15 @@
1
+ import DraggablePane from '../overlays/DraggablePane.svelte';
2
+ import type { ComponentProps } from 'svelte';
3
+ import type { DiagramInput } from './diagram-input';
4
+ import type { PhaseDiagramData } from './types';
5
+ type $$ComponentProps = {
6
+ editor_open?: boolean;
7
+ diagram_input?: DiagramInput | null;
8
+ data?: PhaseDiagramData | null;
9
+ ondata?: (data: PhaseDiagramData) => void;
10
+ icon_style?: string;
11
+ toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`];
12
+ };
13
+ declare const PhaseDiagramEditorPane: import("svelte").Component<$$ComponentProps, {}, "editor_open" | "diagram_input">;
14
+ type PhaseDiagramEditorPane = ReturnType<typeof PhaseDiagramEditorPane>;
15
+ export default PhaseDiagramEditorPane;