matterviz 0.4.1 → 0.4.2

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 (395) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +12 -14
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/app.css +53 -0
  6. package/dist/brillouin/BrillouinZone.svelte +75 -85
  7. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  8. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  9. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  10. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  11. package/dist/brillouin/BrillouinZoneScene.svelte +26 -39
  12. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  13. package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
  14. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +62 -74
  15. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  16. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +511 -547
  17. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  18. package/dist/chempot-diagram/async-compute.svelte.js +1 -1
  19. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  20. package/dist/colors/index.d.ts +0 -4
  21. package/dist/colors/index.js +19 -20
  22. package/dist/composition/BarChart.svelte +37 -31
  23. package/dist/composition/BubbleChart.svelte +17 -17
  24. package/dist/composition/Composition.svelte +7 -11
  25. package/dist/composition/Formula.svelte +18 -25
  26. package/dist/composition/FormulaFilter.svelte +92 -95
  27. package/dist/composition/PieChart.svelte +55 -41
  28. package/dist/composition/format.js +1 -1
  29. package/dist/composition/index.d.ts +2 -0
  30. package/dist/composition/index.js +14 -0
  31. package/dist/composition/parse.d.ts +2 -2
  32. package/dist/composition/parse.js +11 -10
  33. package/dist/constants.js +11 -9
  34. package/dist/convex-hull/ConvexHull.svelte +12 -15
  35. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  36. package/dist/convex-hull/ConvexHull2D.svelte +93 -92
  37. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  38. package/dist/convex-hull/ConvexHull3D.svelte +109 -140
  39. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  40. package/dist/convex-hull/ConvexHull4D.svelte +75 -94
  41. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  42. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  43. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  44. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  45. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  46. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  47. package/dist/convex-hull/StructurePopup.svelte +17 -21
  48. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  49. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  50. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  51. package/dist/convex-hull/helpers.d.ts +8 -10
  52. package/dist/convex-hull/helpers.js +36 -36
  53. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  54. package/dist/convex-hull/thermodynamics.js +18 -17
  55. package/dist/coordination/CoordinationBarPlot.svelte +38 -33
  56. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  57. package/dist/coordination/calc-coordination.d.ts +1 -1
  58. package/dist/coordination/calc-coordination.js +28 -25
  59. package/dist/element/BohrAtom.svelte +5 -8
  60. package/dist/element/ElementHeading.svelte +4 -1
  61. package/dist/element/ElementPhoto.svelte +11 -9
  62. package/dist/element/ElementStats.svelte +12 -10
  63. package/dist/element/ElementTile.svelte +24 -29
  64. package/dist/element/Nucleus.svelte +4 -2
  65. package/dist/element/data.d.ts +1 -2
  66. package/dist/element/helpers.d.ts +4 -0
  67. package/dist/element/helpers.js +18 -0
  68. package/dist/element/index.d.ts +1 -4
  69. package/dist/element/index.js +3 -18
  70. package/dist/feedback/DragOverlay.svelte +5 -5
  71. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  72. package/dist/feedback/StatusMessage.svelte +7 -4
  73. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  74. package/dist/fermi-surface/FermiSurface.svelte +14 -22
  75. package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -7
  76. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  77. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  78. package/dist/fermi-surface/FermiSurfaceScene.svelte +37 -64
  79. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  80. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  81. package/dist/fermi-surface/compute.js +3 -3
  82. package/dist/fermi-surface/parse.js +22 -24
  83. package/dist/heatmap-matrix/HeatmapMatrix.svelte +109 -148
  84. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  85. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  86. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  87. package/dist/heatmap-matrix/index.d.ts +5 -0
  88. package/dist/icons.d.ts +4 -0
  89. package/dist/icons.js +4 -0
  90. package/dist/io/ExportPane.svelte +10 -6
  91. package/dist/io/decompress.d.ts +2 -1
  92. package/dist/io/decompress.js +22 -35
  93. package/dist/io/export.d.ts +4 -0
  94. package/dist/io/export.js +5 -1
  95. package/dist/io/fetch.d.ts +0 -3
  96. package/dist/io/fetch.js +0 -11
  97. package/dist/io/index.d.ts +0 -1
  98. package/dist/io/index.js +2 -9
  99. package/dist/io/is-binary.d.ts +9 -0
  100. package/dist/io/is-binary.js +45 -1
  101. package/dist/io/url-drop.js +13 -25
  102. package/dist/isosurface/Isosurface.svelte +17 -23
  103. package/dist/isosurface/IsosurfaceControls.svelte +37 -42
  104. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  105. package/dist/isosurface/parse-vaspwave.js +138 -0
  106. package/dist/isosurface/parse.js +6 -6
  107. package/dist/labels.d.ts +6 -2
  108. package/dist/labels.js +43 -13
  109. package/dist/layout/FullscreenButton.svelte +2 -1
  110. package/dist/layout/FullscreenToggle.svelte +10 -4
  111. package/dist/layout/InfoCard.svelte +7 -18
  112. package/dist/layout/InfoTag.svelte +1 -3
  113. package/dist/layout/NumberRangeInput.svelte +46 -0
  114. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  115. package/dist/layout/PropertyFilter.svelte +2 -6
  116. package/dist/layout/SettingsSection.svelte +21 -17
  117. package/dist/layout/SubpageGrid.svelte +3 -1
  118. package/dist/layout/ViewerChrome.svelte +9 -10
  119. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  120. package/dist/layout/fullscreen.js +3 -5
  121. package/dist/layout/fullscreen.svelte.js +1 -2
  122. package/dist/layout/index.d.ts +1 -0
  123. package/dist/layout/index.js +1 -0
  124. package/dist/layout/json-tree/JsonNode.svelte +8 -11
  125. package/dist/layout/json-tree/JsonTree.svelte +53 -77
  126. package/dist/layout/json-tree/JsonValue.svelte +7 -15
  127. package/dist/layout/json-tree/utils.js +14 -23
  128. package/dist/math.d.ts +2 -0
  129. package/dist/math.js +19 -0
  130. package/dist/overlays/ContextMenu.svelte +4 -2
  131. package/dist/overlays/CopyButton.svelte +11 -5
  132. package/dist/overlays/DragControlTab.svelte +6 -1
  133. package/dist/overlays/DraggablePane.svelte +81 -26
  134. package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
  135. package/dist/overlays/GlassChip.svelte +30 -0
  136. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  137. package/dist/overlays/InfoPaneCards.svelte +11 -23
  138. package/dist/overlays/index.d.ts +7 -0
  139. package/dist/overlays/index.js +26 -0
  140. package/dist/overlays/portal.d.ts +2 -0
  141. package/dist/overlays/portal.js +14 -0
  142. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  143. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  144. package/dist/periodic-table/PeriodicTableControls.svelte +11 -63
  145. package/dist/periodic-table/TableInset.svelte +9 -4
  146. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
  147. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  148. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  149. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  150. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  151. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  152. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  153. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  154. package/dist/phase-diagram/build-diagram.js +3 -3
  155. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  156. package/dist/phase-diagram/parse.js +15 -15
  157. package/dist/phase-diagram/svg-to-diagram.js +21 -15
  158. package/dist/phase-diagram/utils.js +2 -3
  159. package/dist/plot/bar/BarPlot.svelte +430 -391
  160. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  161. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  162. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  163. package/dist/plot/bar/SpacegroupBarPlot.svelte +29 -36
  164. package/dist/plot/bar/data.d.ts +5 -4
  165. package/dist/plot/bar/data.js +2 -1
  166. package/dist/plot/box/BoxPlot.svelte +301 -209
  167. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  168. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  169. package/dist/plot/box/box-plot.js +1 -1
  170. package/dist/plot/core/auto-place.js +1 -1
  171. package/dist/plot/core/axis-utils.d.ts +12 -7
  172. package/dist/plot/core/axis-utils.js +48 -48
  173. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  174. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  175. package/dist/plot/core/components/ColorBar.svelte +101 -106
  176. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  177. package/dist/plot/core/components/FillArea.svelte +10 -17
  178. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  179. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  180. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  181. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  182. package/dist/plot/core/components/Line.svelte +18 -9
  183. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  184. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  185. package/dist/plot/core/components/PlotControls.svelte +65 -41
  186. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  187. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  188. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  189. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  190. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  191. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  192. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  193. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  194. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  195. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  196. package/dist/plot/core/components/index.d.ts +1 -0
  197. package/dist/plot/core/components/index.js +1 -0
  198. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  199. package/dist/plot/core/data-cleaning-signal.js +467 -0
  200. package/dist/plot/core/data-cleaning.d.ts +2 -42
  201. package/dist/plot/core/data-cleaning.js +27 -474
  202. package/dist/plot/core/data-transform.js +9 -5
  203. package/dist/plot/core/fill-utils.d.ts +3 -1
  204. package/dist/plot/core/fill-utils.js +28 -6
  205. package/dist/plot/core/index.d.ts +1 -0
  206. package/dist/plot/core/index.js +1 -0
  207. package/dist/plot/core/interactions.js +0 -2
  208. package/dist/plot/core/layout.d.ts +3 -1
  209. package/dist/plot/core/layout.js +22 -13
  210. package/dist/plot/core/marginals.d.ts +170 -0
  211. package/dist/plot/core/marginals.js +436 -0
  212. package/dist/plot/core/reference-line.js +1 -1
  213. package/dist/plot/core/scales.d.ts +23 -0
  214. package/dist/plot/core/scales.js +39 -13
  215. package/dist/plot/core/types/fills.d.ts +101 -0
  216. package/dist/plot/core/types/fills.js +15 -0
  217. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  218. package/dist/plot/core/types/plot-3d.js +4 -0
  219. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  220. package/dist/plot/core/types/reference-lines.js +9 -0
  221. package/dist/plot/core/types.d.ts +29 -324
  222. package/dist/plot/core/types.js +23 -20
  223. package/dist/plot/core/utils/hierarchy-chart.d.ts +51 -0
  224. package/dist/plot/core/utils/hierarchy-chart.js +179 -0
  225. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  226. package/dist/plot/core/utils/hierarchy-labels.js +99 -0
  227. package/dist/plot/core/utils/label-placement.js +2 -2
  228. package/dist/plot/histogram/Histogram.svelte +304 -325
  229. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  230. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  231. package/dist/plot/histogram/histogram.d.ts +31 -0
  232. package/dist/plot/histogram/histogram.js +70 -0
  233. package/dist/plot/histogram/index.d.ts +1 -0
  234. package/dist/plot/histogram/index.js +1 -0
  235. package/dist/plot/index.d.ts +1 -0
  236. package/dist/plot/index.js +1 -0
  237. package/dist/plot/sankey/Sankey.svelte +78 -69
  238. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  239. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  240. package/dist/plot/scatter/BinnedScatterPlot.svelte +263 -109
  241. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  242. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  243. package/dist/plot/scatter/ScatterPlot.svelte +477 -385
  244. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  245. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  246. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  247. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  248. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  249. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  250. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  251. package/dist/plot/scatter/scatter-data.js +8 -7
  252. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  253. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  254. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  255. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  256. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  257. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  258. package/dist/plot/sunburst/Sunburst.svelte +251 -329
  259. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  260. package/dist/plot/sunburst/index.d.ts +1 -1
  261. package/dist/plot/sunburst/index.js +2 -1
  262. package/dist/plot/sunburst/render.d.ts +2 -2
  263. package/dist/plot/sunburst/render.js +47 -22
  264. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  265. package/dist/plot/sunburst/sunburst.js +10 -3
  266. package/dist/plot/treemap/Treemap.svelte +907 -0
  267. package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
  268. package/dist/plot/treemap/index.d.ts +3 -0
  269. package/dist/plot/treemap/index.js +4 -0
  270. package/dist/plot/treemap/treemap.d.ts +26 -0
  271. package/dist/plot/treemap/treemap.js +99 -0
  272. package/dist/rdf/RdfPlot.svelte +22 -26
  273. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  274. package/dist/rdf/calc-rdf.js +4 -8
  275. package/dist/sanitize.js +1 -1
  276. package/dist/scene/bind-renderer.svelte.js +14 -6
  277. package/dist/settings.d.ts +19 -9
  278. package/dist/settings.js +77 -50
  279. package/dist/spectral/Bands.svelte +223 -230
  280. package/dist/spectral/BandsAndDos.svelte +11 -9
  281. package/dist/spectral/BrillouinBandsDos.svelte +19 -27
  282. package/dist/spectral/Dos.svelte +70 -73
  283. package/dist/spectral/helpers.d.ts +3 -3
  284. package/dist/spectral/helpers.js +25 -35
  285. package/dist/state.svelte.js +5 -18
  286. package/dist/structure/Arrow.svelte +5 -18
  287. package/dist/structure/ArrowInstances.svelte +160 -0
  288. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  289. package/dist/structure/AtomLegend.svelte +115 -75
  290. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  291. package/dist/structure/Bond.svelte +31 -23
  292. package/dist/structure/CanvasTooltip.svelte +15 -3
  293. package/dist/structure/CellSelect.svelte +11 -26
  294. package/dist/structure/Cylinder.svelte +24 -40
  295. package/dist/structure/InstancedAtoms.svelte +114 -0
  296. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  297. package/dist/structure/Lattice.svelte +85 -149
  298. package/dist/structure/SiteLabels.svelte +122 -0
  299. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  300. package/dist/structure/Structure.svelte +473 -419
  301. package/dist/structure/Structure.svelte.d.ts +4 -2
  302. package/dist/structure/StructureCarousel.svelte +630 -0
  303. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  304. package/dist/structure/StructureControls.svelte +157 -399
  305. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  306. package/dist/structure/StructureExportPane.svelte +17 -21
  307. package/dist/structure/StructureInfoPane.svelte +72 -66
  308. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  309. package/dist/structure/StructureScene.svelte +467 -476
  310. package/dist/structure/StructureScene.svelte.d.ts +3 -1
  311. package/dist/structure/StructureViewport.svelte +386 -0
  312. package/dist/structure/StructureViewport.svelte.d.ts +63 -0
  313. package/dist/structure/atom-label-placement.d.ts +16 -12
  314. package/dist/structure/atom-label-placement.js +70 -37
  315. package/dist/structure/atom-properties.d.ts +2 -0
  316. package/dist/structure/atom-properties.js +104 -38
  317. package/dist/structure/bonding.d.ts +10 -3
  318. package/dist/structure/bonding.js +84 -28
  319. package/dist/structure/edit-history.d.ts +6 -0
  320. package/dist/structure/edit-history.js +27 -0
  321. package/dist/structure/export.d.ts +1 -0
  322. package/dist/structure/export.js +39 -31
  323. package/dist/structure/format-detect.d.ts +1 -0
  324. package/dist/structure/format-detect.js +22 -0
  325. package/dist/structure/geometry.d.ts +9 -0
  326. package/dist/structure/geometry.js +27 -0
  327. package/dist/structure/index.d.ts +16 -1
  328. package/dist/structure/index.js +13 -2
  329. package/dist/structure/measure.d.ts +1 -1
  330. package/dist/structure/measure.js +6 -12
  331. package/dist/structure/parse.d.ts +2 -1
  332. package/dist/structure/parse.js +243 -222
  333. package/dist/structure/partial-occupancy.js +4 -2
  334. package/dist/structure/pbc.js +78 -98
  335. package/dist/structure/polyhedra.d.ts +0 -1
  336. package/dist/structure/polyhedra.js +3 -18
  337. package/dist/structure/supercell.d.ts +1 -2
  338. package/dist/structure/supercell.js +7 -13
  339. package/dist/symmetry/SymmetryElements.svelte +11 -15
  340. package/dist/symmetry/SymmetryStats.svelte +56 -68
  341. package/dist/symmetry/WyckoffTable.svelte +5 -24
  342. package/dist/symmetry/cell-transform.js +1 -0
  343. package/dist/symmetry/index.d.ts +1 -0
  344. package/dist/symmetry/index.js +8 -2
  345. package/dist/symmetry/spacegroups.js +3 -2
  346. package/dist/table/HeatmapTable.svelte +1102 -365
  347. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  348. package/dist/table/ToggleMenu.svelte +5 -12
  349. package/dist/table/index.d.ts +21 -6
  350. package/dist/table/index.js +34 -21
  351. package/dist/theme/ThemeControl.svelte +16 -8
  352. package/dist/theme/index.d.ts +1 -5
  353. package/dist/theme/index.js +4 -10
  354. package/dist/theme/themes.mjs +14 -7
  355. package/dist/tooltip/KCoords.svelte +4 -1
  356. package/dist/tooltip/TooltipContent.svelte +2 -5
  357. package/dist/trajectory/Trajectory.svelte +515 -308
  358. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  359. package/dist/trajectory/TrajectoryError.svelte +11 -8
  360. package/dist/trajectory/TrajectoryExportPane.svelte +14 -31
  361. package/dist/trajectory/TrajectoryInfoPane.svelte +85 -97
  362. package/dist/trajectory/extract.js +56 -34
  363. package/dist/trajectory/format-detect.js +11 -9
  364. package/dist/trajectory/frame-reader.d.ts +2 -0
  365. package/dist/trajectory/frame-reader.js +33 -29
  366. package/dist/trajectory/helpers.d.ts +2 -0
  367. package/dist/trajectory/helpers.js +18 -7
  368. package/dist/trajectory/index.d.ts +1 -0
  369. package/dist/trajectory/index.js +3 -0
  370. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  371. package/dist/trajectory/parse/h5-utils.js +109 -0
  372. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  373. package/dist/trajectory/parse/hdf5.js +116 -106
  374. package/dist/trajectory/parse/index.d.ts +2 -3
  375. package/dist/trajectory/parse/index.js +17 -20
  376. package/dist/trajectory/parse/lammps.js +8 -12
  377. package/dist/trajectory/parse/vasp.js +10 -7
  378. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  379. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  380. package/dist/trajectory/parse/vaspout-h5.d.ts +5 -0
  381. package/dist/trajectory/parse/vaspout-h5.js +284 -0
  382. package/dist/trajectory/parse/xyz.js +11 -7
  383. package/dist/trajectory/plotting.d.ts +8 -9
  384. package/dist/trajectory/plotting.js +99 -27
  385. package/dist/utils.d.ts +3 -0
  386. package/dist/utils.js +7 -0
  387. package/dist/xrd/XrdPlot.svelte +47 -61
  388. package/dist/xrd/broadening.js +2 -1
  389. package/dist/xrd/calc-xrd.js +2 -4
  390. package/dist/xrd/parse.d.ts +0 -1
  391. package/dist/xrd/parse.js +56 -73
  392. package/package.json +61 -33
  393. package/dist/api/mp.d.ts +0 -6
  394. package/dist/api/mp.js +0 -22
  395. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
@@ -25,16 +25,19 @@
25
25
  has_been_dragged = $bindable(false),
26
26
  currently_dragging = $bindable(false),
27
27
  resizable = `none`,
28
+ position = `absolute`,
28
29
  }: {
29
30
  show?: boolean
30
31
  show_pane?: boolean
31
32
  children: Snippet<
32
- [{
33
- show: boolean
34
- show_control_buttons: boolean
35
- has_been_dragged: boolean
36
- currently_dragging: boolean
37
- }]
33
+ [
34
+ {
35
+ show: boolean
36
+ show_control_buttons: boolean
37
+ has_been_dragged: boolean
38
+ currently_dragging: boolean
39
+ },
40
+ ]
38
41
  >
39
42
  // Toggle button
40
43
  toggle_props?: HTMLAttributes<HTMLButtonElement>
@@ -49,6 +52,10 @@
49
52
  persistent?: boolean
50
53
  // Resize mode: 'both' | 'width' | 'height' | 'none'
51
54
  resizable?: `both` | `width` | `height` | `none`
55
+ // 'fixed' renders the pane relative to the viewport so it escapes
56
+ // overflow-clipping ancestors (e.g. cards/tables with overflow: hidden)
57
+ // and clamps its max-height to the space below the toggle button.
58
+ position?: `absolute` | `fixed`
52
59
  // Callbacks
53
60
  onclose?: () => void
54
61
  on_drag_start?: () => void
@@ -63,6 +70,8 @@
63
70
  let show_control_buttons = $state(false)
64
71
  let resizing = $state(false)
65
72
  let resize_end_time = 0
73
+ const viewport_margin_px = 8
74
+ const min_reachable_pane_height_px = 180
66
75
 
67
76
  // Resize via bottom-right grip
68
77
  function handle_resize_start(event: PointerEvent) {
@@ -83,9 +92,7 @@
83
92
  pane_div.style.width = `${Math.max(200, start_w + evt.clientX - start_x)}px`
84
93
  }
85
94
  if (resizable !== `width`) {
86
- pane_div.style.maxHeight = `${
87
- Math.max(100, start_h + evt.clientY - start_y)
88
- }px`
95
+ pane_div.style.maxHeight = `${Math.max(100, start_h + evt.clientY - start_y)}px`
89
96
  }
90
97
  }
91
98
  function on_up() {
@@ -124,6 +131,10 @@
124
131
  width: ``,
125
132
  maxHeight: ``,
126
133
  })
134
+ // Refresh --pane-viewport-clamp for the new position (matches
135
+ // handle_resize and the mount effect; without this a reset after a
136
+ // drag + window resize keeps a stale bottom-edge cap)
137
+ apply_viewport_clamp()
127
138
  }
128
139
  }
129
140
  // Hide the control buttons after reset
@@ -147,10 +158,31 @@
147
158
  const pane_width = pane_div?.getBoundingClientRect().width || 450
148
159
  const ox = offset.x ?? 5
149
160
  const oy = offset.y ?? 5
161
+
162
+ if (position === `fixed`) {
163
+ // Viewport-relative: keep the pane reachable within the screen.
164
+ const left = Math.max(
165
+ viewport_margin_px,
166
+ Math.min(
167
+ toggle_rect.right - pane_width + ox,
168
+ window.innerWidth - pane_width - viewport_margin_px,
169
+ ),
170
+ )
171
+ const top = Math.max(
172
+ viewport_margin_px,
173
+ Math.min(
174
+ toggle_rect.bottom + oy,
175
+ window.innerHeight - min_reachable_pane_height_px - viewport_margin_px,
176
+ ),
177
+ )
178
+ return { left: `${left}px`, top: `${top}px` }
179
+ }
180
+
150
181
  const positioned_ancestor = toggle_pane_btn.offsetParent
151
182
  const ancestor_rect = positioned_ancestor?.getBoundingClientRect()
152
183
 
153
- if (!ancestor_rect) { // Fallback to document positioning
184
+ if (!ancestor_rect) {
185
+ // Fallback to document positioning
154
186
  const scroll_x = window.scrollX || document.documentElement.scrollLeft
155
187
  const scroll_y = window.scrollY || document.documentElement.scrollTop
156
188
  return {
@@ -173,10 +205,11 @@
173
205
  if (Date.now() - resize_end_time < 200) return
174
206
 
175
207
  const target = event.target
176
- const is_toggle_button = target instanceof Node &&
208
+ const is_toggle_button =
209
+ target instanceof Node &&
177
210
  (target === toggle_pane_btn || (toggle_pane_btn?.contains(target) ?? false))
178
- const is_inside_pane = target instanceof Node &&
179
- (target === pane_div || (pane_div?.contains(target) ?? false))
211
+ const is_inside_pane =
212
+ target instanceof Node && (target === pane_div || (pane_div?.contains(target) ?? false))
180
213
 
181
214
  if (!is_toggle_button && !is_inside_pane && !currently_dragging && !resizing) {
182
215
  close_pane()
@@ -186,7 +219,8 @@
186
219
  // Debounced resize handler for better performance
187
220
  let resize_timeout: ReturnType<typeof setTimeout> | undefined = $state(undefined)
188
221
 
189
- function handle_resize() { // Only reposition if pane is visible and hasn't been manually dragged
222
+ function handle_resize() {
223
+ // Only reposition if pane is visible and hasn't been manually dragged
190
224
  if (!show || has_been_dragged || currently_dragging) return
191
225
 
192
226
  if (resize_timeout) clearTimeout(resize_timeout)
@@ -197,11 +231,30 @@
197
231
  initial_position = pos
198
232
  pane_div.style.left = pos.left
199
233
  pane_div.style.top = pos.top
234
+ apply_viewport_clamp()
200
235
  }
201
236
  }, 50) // Debounce resize events
202
237
  resize_timeout = current_timeout
203
238
  }
204
239
 
240
+ // Fixed panes must never extend past the bottom viewport edge: cap the
241
+ // --pane-viewport-clamp var (combined with --pane-max-height via min() in
242
+ // CSS) to the space below the pane's top edge. No minimum here — usability
243
+ // is handled by calculate_position, which clamps the top so at least
244
+ // min_reachable_pane_height_px of space remains below.
245
+ function apply_viewport_clamp(): void {
246
+ if (position !== `fixed` || !pane_div || !toggle_pane_btn) return
247
+ // style.top is a `${n}px` string when set; "0px" is a valid position, so only
248
+ // fall back to the live rect when the inline style is unset or non-numeric
249
+ const parsed_top = Number(pane_div.style.top.replace(/px$/, ``))
250
+ const pane_top =
251
+ pane_div.style.top && !Number.isNaN(parsed_top)
252
+ ? parsed_top
253
+ : pane_div.getBoundingClientRect().top
254
+ const available = window.innerHeight - pane_top - viewport_margin_px
255
+ pane_div.style.setProperty(`--pane-viewport-clamp`, `${Math.max(0, available)}px`)
256
+ }
257
+
205
258
  // Position pane when shown
206
259
  $effect(() => {
207
260
  if (show && toggle_pane_btn && !has_been_dragged) {
@@ -216,6 +269,7 @@
216
269
  width: ``,
217
270
  maxHeight: ``,
218
271
  })
272
+ apply_viewport_clamp()
219
273
  }
220
274
  }
221
275
  })
@@ -240,7 +294,7 @@
240
294
  {...toggle_props}
241
295
  style={toggle_props.style ?? ``}
242
296
  onclick={toggle_pane}
243
- class="pane-toggle {toggle_props.class ?? ``}"
297
+ class={[`pane-toggle`, toggle_props.class]}
244
298
  {@attach tooltip({ content: toggle_props.title ?? (show ? `Close pane` : `Open pane`) })}
245
299
  >
246
300
  <Icon icon={show ? open_icon : closed_icon} style={icon_style} />
@@ -256,12 +310,13 @@
256
310
  role="dialog"
257
311
  aria-label="Draggable pane"
258
312
  aria-modal="false"
313
+ style:position
259
314
  style:max-width={max_width}
260
315
  style:top={initial_position.top}
261
316
  style:left={initial_position.left}
262
317
  style:display={show ? `grid` : `none`}
263
318
  {...pane_props}
264
- class="draggable-pane toc-exclude {show ? `pane-open` : ``} {pane_props.class ?? ``}"
319
+ class={[`draggable-pane toc-exclude`, show && `pane-open`, pane_props.class]}
265
320
  >
266
321
  <DragControlTab
267
322
  show_controls={show_control_buttons}
@@ -329,21 +384,24 @@
329
384
  box-sizing: border-box;
330
385
  box-shadow: var(
331
386
  --pane-box-shadow,
332
- light-dark(
333
- 0 4px 20px -4px rgba(0, 0, 0, 0.15),
334
- 0 8px 16px -4px rgba(0, 0, 0, 0.3)
335
- )
387
+ light-dark(0 4px 20px -4px rgba(0, 0, 0, 0.15), 0 8px 16px -4px rgba(0, 0, 0, 0.3))
336
388
  );
337
389
  z-index: var(--pane-z-index, 10);
338
390
  display: grid;
339
391
  text-align: left;
340
392
  /* Exclude position from being transitioned to prevent sluggish dragging */
341
- transition: opacity 0.3s, background-color 0.3s, border-color 0.3s, box-shadow 0.3s;
393
+ transition:
394
+ opacity 0.3s,
395
+ background-color 0.3s,
396
+ border-color 0.3s,
397
+ box-shadow 0.3s;
342
398
  width: 28em;
343
399
  max-width: var(--pane-max-width, 80cqw);
344
400
  overflow: visible; /* Allow control-tab to protrude above the pane border */
345
401
  min-height: var(--pane-min-height, auto);
346
- max-height: var(--pane-max-height, 80vh);
402
+ /* --pane-viewport-clamp (set for position="fixed" panes) keeps the pane
403
+ above the bottom viewport edge even when the toggle sits low on screen */
404
+ max-height: min(var(--pane-max-height, 80vh), var(--pane-viewport-clamp, 200vh));
347
405
  }
348
406
  .draggable-pane .pane-content {
349
407
  padding: var(--pane-padding, 1ex);
@@ -368,10 +426,7 @@
368
426
  }
369
427
  .draggable-pane :global(hr) {
370
428
  border: none;
371
- background: var(
372
- --pane-hr-bg,
373
- light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.1))
374
- );
429
+ background: var(--pane-hr-bg, light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.1)));
375
430
  margin: var(--pane-hr-margin, 4pt 0);
376
431
  height: 1px;
377
432
  }
@@ -24,6 +24,7 @@ type $$ComponentProps = {
24
24
  pane_props?: HTMLAttributes<HTMLDivElement>;
25
25
  persistent?: boolean;
26
26
  resizable?: `both` | `width` | `height` | `none`;
27
+ position?: `absolute` | `fixed`;
27
28
  onclose?: () => void;
28
29
  on_drag_start?: () => void;
29
30
  toggle_pane_btn?: HTMLButtonElement;
@@ -0,0 +1,30 @@
1
+ <!-- Small text overlay with a frosted-glass backdrop, for annotating visual
2
+ content (3D structure viewers, plots) without fully obscuring it. Shared by
3
+ StructurePopup's stats block and StructureCarousel's card headers so both
4
+ render identically. Position/size via --glass-chip-* custom properties. -->
5
+ <script lang="ts">
6
+ import type { Snippet } from 'svelte'
7
+ import type { HTMLAttributes } from 'svelte/elements'
8
+
9
+ let { children, ...rest }: HTMLAttributes<HTMLDivElement> & { children: Snippet } = $props()
10
+ </script>
11
+
12
+ <div {...rest} class={[`glass-chip`, rest.class]}>
13
+ {@render children()}
14
+ </div>
15
+
16
+ <style>
17
+ .glass-chip {
18
+ position: absolute;
19
+ top: var(--glass-chip-top, 10px);
20
+ left: var(--glass-chip-left, 10px);
21
+ z-index: var(--glass-chip-z, 2);
22
+ max-width: var(--glass-chip-max-width, calc(100% - 20px));
23
+ padding: 4px 8px;
24
+ border-radius: 6px;
25
+ background: var(--glass-chip-bg, transparent);
26
+ backdrop-filter: blur(8px);
27
+ color: var(--text-color);
28
+ font-size: var(--glass-chip-font-size, 0.85em);
29
+ }
30
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
4
+ children: Snippet;
5
+ };
6
+ declare const GlassChip: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type GlassChip = ReturnType<typeof GlassChip>;
8
+ export default GlassChip;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { sanitize_html } from '../sanitize'
3
3
  import type { HTMLAttributes } from 'svelte/elements'
4
- import { SvelteSet } from 'svelte/reactivity'
4
+ import { create_clipboard_feedback } from './'
5
5
  import CopyButton from './CopyButton.svelte'
6
6
 
7
7
  type InfoPaneRow = {
@@ -33,7 +33,7 @@
33
33
  } = $props()
34
34
 
35
35
  let info_filter = $state(``)
36
- const copied_items = new SvelteSet<string>()
36
+ const { copied, copy } = create_clipboard_feedback()
37
37
  const row_key = (card_title: string, row: InfoPaneRow, row_idx: number): string =>
38
38
  row.key ?? `${card_title}:${row.label}:${row.value}:${row_idx}`
39
39
 
@@ -44,27 +44,16 @@
44
44
  .map((card) => ({
45
45
  ...card,
46
46
  rows: card.rows.filter(({ label, value }) =>
47
- `${card.title} ${label} ${value}`.toLowerCase().includes(filter)
47
+ `${card.title} ${label} ${value}`.toLowerCase().includes(filter),
48
48
  ),
49
49
  }))
50
50
  .filter(({ rows }) => rows.length > 0)
51
51
  })
52
52
 
53
- async function copy_row(
54
- card_title: string,
55
- row: InfoPaneRow,
56
- row_idx: number,
57
- ): Promise<void> {
58
- const key = row_key(card_title, row, row_idx)
59
- try {
60
- await navigator.clipboard.writeText(`${row.label}: ${row.value}`)
61
- copied_items.add(key)
62
- setTimeout(() => copied_items.delete(key), 1000)
63
- } catch (error) {
64
- console.error(`Failed to copy to clipboard:`, error)
65
- }
66
- }
53
+ const copy_row = (card_title: string, row: InfoPaneRow, row_idx: number): Promise<void> =>
54
+ copy(`${row.label}: ${row.value}`, row_key(card_title, row, row_idx))
67
55
  </script>
56
+
68
57
  {#if show_filter}
69
58
  <input
70
59
  class="info-filter"
@@ -78,7 +67,7 @@
78
67
  {#if filtered_cards.length === 0}
79
68
  <p class="empty-filter">No {empty_label} matches "{info_filter}".</p>
80
69
  {:else}
81
- <div {...rest} class="info-cards {rest.class ?? ``}" style:--row-label-min={row_label_min}>
70
+ <div {...rest} class={[`info-cards`, rest.class]} style:--row-label-min={row_label_min}>
82
71
  {#each filtered_cards as card (card.title)}
83
72
  <section class="info-card">
84
73
  <svelte:element this={`h${heading_level}`}>{card.title}</svelte:element>
@@ -89,7 +78,7 @@
89
78
  <CopyButton
90
79
  label="Copy {row.label}: {row.value}"
91
80
  title="Copy {row.label}"
92
- copied={copied_items.has(row_key(card.title, row, row_idx))}
81
+ copied={copied.has(row_key(card.title, row, row_idx))}
93
82
  onclick={() => copy_row(card.title, row, row_idx)}
94
83
  />
95
84
  </div>
@@ -129,10 +118,9 @@
129
118
  }
130
119
  .info-row {
131
120
  display: grid;
132
- grid-template-columns: minmax(var(--row-label-min), var(--row-label-max, 0.8fr)) minmax(
133
- 0,
134
- 1fr
135
- ) auto;
121
+ grid-template-columns:
122
+ minmax(var(--row-label-min), var(--row-label-max, 0.8fr)) minmax(0, 1fr)
123
+ auto;
136
124
  align-items: center;
137
125
  gap: 5pt;
138
126
  padding: var(--info-row-padding, 1pt 0);
@@ -1,7 +1,14 @@
1
1
  import type { ComponentProps } from 'svelte';
2
+ import { SvelteSet } from 'svelte/reactivity';
2
3
  import type DraggablePane from './DraggablePane.svelte';
3
4
  export { default as ContextMenu } from './ContextMenu.svelte';
4
5
  export { default as DraggablePane } from './DraggablePane.svelte';
5
6
  export { default as DragControlTab } from './DragControlTab.svelte';
7
+ export { default as GlassChip } from './GlassChip.svelte';
8
+ export * from './portal';
6
9
  export type PaneToggleProps = ComponentProps<typeof DraggablePane>[`toggle_props`];
7
10
  export type PaneProps = ComponentProps<typeof DraggablePane>[`pane_props`];
11
+ export declare function create_clipboard_feedback(duration?: number): {
12
+ copied: SvelteSet<string>;
13
+ copy: (text: string, key: string) => Promise<void>;
14
+ };
@@ -1,3 +1,29 @@
1
+ import { SvelteMap, SvelteSet } from 'svelte/reactivity';
1
2
  export { default as ContextMenu } from './ContextMenu.svelte';
2
3
  export { default as DraggablePane } from './DraggablePane.svelte';
3
4
  export { default as DragControlTab } from './DragControlTab.svelte';
5
+ export { default as GlassChip } from './GlassChip.svelte';
6
+ export * from './portal';
7
+ // Reactive clipboard-copy feedback shared by info panes. `copy(text, key)` writes
8
+ // `text` to the clipboard and flags `key` as recently-copied in the returned reactive
9
+ // `copied` set for `duration` ms, so UIs can show a transient "copied" checkmark.
10
+ export function create_clipboard_feedback(duration = 1000) {
11
+ const copied = new SvelteSet();
12
+ const timers = new SvelteMap();
13
+ const copy = async (text, key) => {
14
+ try {
15
+ await navigator.clipboard.writeText(text);
16
+ copied.add(key);
17
+ // reset any in-flight timer so a re-copy gets the full feedback duration
18
+ clearTimeout(timers.get(key));
19
+ timers.set(key, setTimeout(() => {
20
+ copied.delete(key);
21
+ timers.delete(key);
22
+ }, duration));
23
+ }
24
+ catch (error) {
25
+ console.error(`Failed to copy to clipboard:`, error);
26
+ }
27
+ };
28
+ return { copied, copy };
29
+ }
@@ -0,0 +1,2 @@
1
+ import type { Attachment } from 'svelte/attachments';
2
+ export declare const portal: (target: HTMLElement | null | undefined) => Attachment;
@@ -0,0 +1,14 @@
1
+ // Attachment that moves its element into `target` (e.g. a host panel's toolbar),
2
+ // so components can offer optional external placement of their chrome (search/
3
+ // export/settings buttons etc.) without duplicating markup: pass nothing and the
4
+ // element renders inline where declared; pass a target and it teleports there.
5
+ // A comment anchor marks the original position so the element is restored when
6
+ // the target changes or unmounts, keeping Svelte's teardown sound.
7
+ export const portal = (target) => (element) => {
8
+ if (!target)
9
+ return undefined;
10
+ const anchor = document.createComment(`portal`);
11
+ element.before(anchor);
12
+ target.append(element);
13
+ return () => anchor.replaceWith(element);
14
+ };