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,46 +1,74 @@
1
- <script lang="ts">import DraggablePane from '../overlays/DraggablePane.svelte';
2
- import { export_svg_as_png, export_svg_as_svg } from '../io/export';
3
- import { tooltip } from 'svelte-multiselect/attachments';
4
- let { export_pane_open = $bindable(false), data, wrapper, filename = `phase-diagram`, png_dpi = $bindable(150), ...rest } = $props();
5
- // Copy button feedback state
6
- let copy_status = $state({
7
- json: false,
8
- svg: false,
9
- });
10
- const copy_confirm = `✅`;
11
- // Generate filename with components if available (requires exactly 2 components)
12
- const full_filename = $derived(data?.components?.length === 2
13
- ? `${filename}-${data.components[0]}-${data.components[1]}`
14
- : filename);
15
- const svg = $derived(wrapper?.querySelector(`svg.binary-phase-diagram`));
16
- async function copy_svg() {
17
- if (!svg)
18
- return;
19
- const svg_string = new XMLSerializer().serializeToString(svg);
20
- await navigator.clipboard.writeText(svg_string);
21
- copy_status.svg = true;
22
- setTimeout(() => (copy_status.svg = false), 1500);
23
- }
24
- function download_json() {
25
- if (!data)
26
- return;
27
- const json_string = JSON.stringify(data, null, 2);
28
- const blob = new Blob([json_string], { type: `application/json` });
29
- const url = URL.createObjectURL(blob);
30
- const link = document.createElement(`a`);
31
- link.href = url;
32
- link.download = `${full_filename}.json`;
33
- link.click();
34
- URL.revokeObjectURL(url);
35
- }
36
- async function copy_json() {
37
- if (!data)
38
- return;
39
- const json_string = JSON.stringify(data, null, 2);
40
- await navigator.clipboard.writeText(json_string);
41
- copy_status.json = true;
42
- setTimeout(() => (copy_status.json = false), 1500);
43
- }
1
+ <script lang="ts">
2
+ import { export_svg_as_png, export_svg_as_svg } from '../io/export'
3
+ import DraggablePane from '../overlays/DraggablePane.svelte'
4
+ import type { ComponentProps } from 'svelte'
5
+ import { CopyButton } from 'svelte-multiselect'
6
+ import { tooltip } from 'svelte-multiselect/attachments'
7
+ import type { HTMLAttributes } from 'svelte/elements'
8
+ import type { PhaseDiagramData } from './types'
9
+
10
+ let {
11
+ export_pane_open = $bindable(false),
12
+ data,
13
+ json_payload = undefined,
14
+ wrapper,
15
+ svg_element = undefined,
16
+ svg_query_selector = `svg.binary-phase-diagram`,
17
+ filename = `phase-diagram`,
18
+ png_dpi = $bindable(150),
19
+ icon_style = ``,
20
+ toggle_props: caller_toggle_props = {},
21
+ ...rest
22
+ }: HTMLAttributes<HTMLDivElement> & {
23
+ export_pane_open?: boolean
24
+ data?: PhaseDiagramData
25
+ json_payload?: unknown
26
+ wrapper?: HTMLDivElement
27
+ svg_element?: SVGSVGElement | null
28
+ svg_query_selector?: string
29
+ filename?: string
30
+ png_dpi?: number
31
+ icon_style?: string
32
+ toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
33
+ } = $props()
34
+
35
+ let json_copy_state = $state<ComponentProps<typeof CopyButton>[`state`]>(`ready`)
36
+ let svg_copy_state = $state<ComponentProps<typeof CopyButton>[`state`]>(`ready`)
37
+
38
+ // Generate filename with components if available (requires exactly 2 components)
39
+ const full_filename = $derived(
40
+ data?.components?.length === 2
41
+ ? `${filename}-${data.components[0]}-${data.components[1]}`
42
+ : filename,
43
+ )
44
+
45
+ const svg = $derived(
46
+ svg_element ??
47
+ (wrapper?.querySelector(svg_query_selector) as SVGSVGElement | null),
48
+ )
49
+
50
+ const json_export_data = $derived(json_payload ?? data)
51
+
52
+ const svg_string = $derived(svg ? new XMLSerializer().serializeToString(svg) : null)
53
+
54
+ function download_json() {
55
+ if (!json_export_data) return
56
+
57
+ const json_string = JSON.stringify(json_export_data, null, 2)
58
+ const blob = new Blob([json_string], { type: `application/json` })
59
+ const url = URL.createObjectURL(blob)
60
+
61
+ const link = document.createElement(`a`)
62
+ link.href = url
63
+ link.download = `${full_filename}.json`
64
+ link.click()
65
+
66
+ URL.revokeObjectURL(url)
67
+ }
68
+
69
+ const json_string = $derived(
70
+ json_export_data ? JSON.stringify(json_export_data, null, 2) : null,
71
+ )
44
72
  </script>
45
73
 
46
74
  <DraggablePane
@@ -48,95 +76,117 @@ async function copy_json() {
48
76
  open_icon="Cross"
49
77
  closed_icon="Export"
50
78
  pane_props={{ ...rest, class: `export-pane ${rest.class ?? ``}` }}
79
+ {icon_style}
51
80
  toggle_props={{
52
81
  class: `pd-export-toggle`,
53
82
  title: export_pane_open ? `` : `Export phase diagram`,
83
+ ...caller_toggle_props,
54
84
  }}
55
85
  >
56
- <h4 id="export-as-image"
57
- {@attach tooltip({
58
- content: `Download or copy the phase diagram`,
59
- })}
60
- >
61
- Export as image
62
- </h4>
63
- <label>
64
- SVG
65
- <button
66
- type="button"
67
- onclick={() => svg && export_svg_as_svg(svg, `${full_filename}.svg`)}
68
- disabled={!svg}
69
- title="Download SVG"
86
+ <div class="export-grid">
87
+ <h4 id="image"
88
+ {@attach tooltip({
89
+ content: `Download or copy the phase diagram`,
90
+ })}
70
91
  >
71
-
72
- </button>
73
- <button
74
- type="button"
75
- onclick={copy_svg}
76
- disabled={!svg}
77
- title="Copy SVG to clipboard"
78
- >
79
- {copy_status.svg ? copy_confirm : `📋`}
80
- </button>
81
- </label>
82
- <label>
83
- PNG
84
- <button
85
- type="button"
86
- onclick={() => svg && export_svg_as_png(svg, `${full_filename}.png`, png_dpi)}
87
- disabled={!svg}
88
- title={`Download PNG (${png_dpi} DPI)`}
89
- >
90
-
91
- </button>
92
- &nbsp;(DPI: <input
93
- type="number"
94
- min={50}
95
- max={600}
96
- bind:value={png_dpi}
97
- title="Export resolution in dots per inch"
98
- />)
99
- </label>
92
+ Image
93
+ </h4>
94
+ <label>
95
+ SVG
96
+ <button
97
+ type="button"
98
+ onclick={() => svg && export_svg_as_svg(svg, `${full_filename}.svg`)}
99
+ disabled={!svg}
100
+ title="Download SVG"
101
+ >
102
+
103
+ </button>
104
+ <CopyButton
105
+ content={svg_string ?? ``}
106
+ title="Copy SVG to clipboard"
107
+ bind:state={svg_copy_state}
108
+ disabled={!svg_string}
109
+ />
110
+ </label>
111
+ <label>
112
+ PNG
113
+ <button
114
+ type="button"
115
+ onclick={() => svg && export_svg_as_png(svg, `${full_filename}.png`, png_dpi)}
116
+ disabled={!svg}
117
+ title={`Download PNG (${png_dpi} DPI)`}
118
+ >
119
+
120
+ </button>
121
+ <span class="dpi-input"
122
+ >(DPI: <input
123
+ type="number"
124
+ min={50}
125
+ max={600}
126
+ bind:value={png_dpi}
127
+ title="Export resolution in dots per inch"
128
+ />)</span>
129
+ </label>
100
130
 
101
- <h4 id="export-as-data"
102
- {@attach tooltip({
103
- content: `Export phase diagram data as JSON`,
104
- })}
105
- >
106
- Export as data
107
- </h4>
108
- <label>
109
- JSON
110
- <button type="button" onclick={download_json} disabled={!data} title="Download JSON">
111
-
112
- </button>
113
- <button
114
- type="button"
115
- onclick={copy_json}
116
- disabled={!data}
117
- title="Copy JSON to clipboard"
131
+ <h4 id="data"
132
+ {@attach tooltip({
133
+ content: `Export phase diagram data as JSON`,
134
+ })}
118
135
  >
119
- {copy_status.json ? copy_confirm : `📋`}
120
- </button>
121
- </label>
136
+ Data
137
+ </h4>
138
+ <label>
139
+ JSON
140
+ <button
141
+ type="button"
142
+ onclick={download_json}
143
+ disabled={!json_export_data}
144
+ title="Download JSON"
145
+ >
146
+
147
+ </button>
148
+ <CopyButton
149
+ content={json_string ?? ``}
150
+ title="Copy JSON to clipboard"
151
+ bind:state={json_copy_state}
152
+ disabled={!json_string}
153
+ />
154
+ </label>
155
+ </div>
122
156
  </DraggablePane>
123
157
 
124
158
  <style>
125
- label {
159
+ .export-grid {
126
160
  display: flex;
127
161
  flex-wrap: wrap;
128
162
  align-items: center;
129
- gap: 4pt;
163
+ gap: 4pt 10pt;
164
+ }
165
+ .export-grid h4 {
166
+ display: inline-flex;
167
+ align-items: center;
168
+ margin: 0;
169
+ }
170
+ label {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 8pt;
130
174
  font-size: 0.95em;
175
+ white-space: nowrap;
176
+ }
177
+ .dpi-input {
178
+ display: inline-flex;
179
+ align-items: center;
180
+ gap: 2pt;
181
+ white-space: nowrap;
131
182
  }
132
183
  button {
133
184
  width: 1.9em;
134
185
  height: 1.6em;
135
186
  padding: 0 6pt;
136
- margin: 0 0 0 4pt;
137
187
  box-sizing: border-box;
138
188
  }
139
189
  input {
140
- margin: 0 0 0 2pt;
190
+ width: 3.5em;
141
191
  }
142
192
  </style>
@@ -1,12 +1,19 @@
1
+ import DraggablePane from '../overlays/DraggablePane.svelte';
2
+ import type { ComponentProps } from 'svelte';
1
3
  import type { HTMLAttributes } from 'svelte/elements';
2
4
  import type { PhaseDiagramData } from './types';
3
5
  type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
4
6
  export_pane_open?: boolean;
5
7
  data?: PhaseDiagramData;
8
+ json_payload?: unknown;
6
9
  wrapper?: HTMLDivElement;
10
+ svg_element?: SVGSVGElement | null;
11
+ svg_query_selector?: string;
7
12
  filename?: string;
8
13
  png_dpi?: number;
14
+ icon_style?: string;
15
+ toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`];
9
16
  };
10
- declare const PhaseDiagramExportPane: import("svelte").Component<$$ComponentProps, {}, "export_pane_open" | "png_dpi">;
17
+ declare const PhaseDiagramExportPane: import("svelte").Component<$$ComponentProps, {}, "png_dpi" | "export_pane_open">;
11
18
  type PhaseDiagramExportPane = ReturnType<typeof PhaseDiagramExportPane>;
12
19
  export default PhaseDiagramExportPane;