matterviz 0.4.1 → 0.4.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 (499) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +48 -60
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/api/optimade.js +10 -7
  6. package/dist/app.css +68 -0
  7. package/dist/brillouin/BrillouinZone.svelte +90 -91
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  9. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  12. package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  14. package/dist/brillouin/compute.js +10 -16
  15. package/dist/brillouin/geometry.js +2 -2
  16. package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
  17. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
  20. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  21. package/dist/chempot-diagram/async-compute.svelte.js +13 -14
  22. package/dist/chempot-diagram/color.d.ts +21 -1
  23. package/dist/chempot-diagram/color.js +70 -1
  24. package/dist/chempot-diagram/compute.d.ts +7 -0
  25. package/dist/chempot-diagram/compute.js +85 -26
  26. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  27. package/dist/chempot-diagram/export.js +1 -6
  28. package/dist/chempot-diagram/temperature.js +9 -10
  29. package/dist/colors/index.d.ts +0 -4
  30. package/dist/colors/index.js +19 -20
  31. package/dist/composition/BarChart.svelte +30 -26
  32. package/dist/composition/BubbleChart.svelte +17 -17
  33. package/dist/composition/Composition.svelte +10 -19
  34. package/dist/composition/Formula.svelte +20 -27
  35. package/dist/composition/FormulaFilter.svelte +115 -184
  36. package/dist/composition/PieChart.svelte +55 -41
  37. package/dist/composition/format.js +7 -9
  38. package/dist/composition/index.d.ts +2 -0
  39. package/dist/composition/index.js +14 -0
  40. package/dist/composition/parse.d.ts +2 -2
  41. package/dist/composition/parse.js +61 -115
  42. package/dist/constants.d.ts +0 -1
  43. package/dist/constants.js +17 -26
  44. package/dist/convex-hull/ConvexHull.svelte +12 -15
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +93 -94
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +127 -186
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +131 -180
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  53. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  54. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  55. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  56. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  57. package/dist/convex-hull/StructurePopup.svelte +18 -22
  58. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  59. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  60. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  61. package/dist/convex-hull/gas-thermodynamics.js +21 -53
  62. package/dist/convex-hull/helpers.d.ts +8 -10
  63. package/dist/convex-hull/helpers.js +37 -43
  64. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  65. package/dist/convex-hull/thermodynamics.js +37 -44
  66. package/dist/coordination/CoordinationBarPlot.svelte +49 -53
  67. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  68. package/dist/coordination/calc-coordination.d.ts +1 -1
  69. package/dist/coordination/calc-coordination.js +28 -25
  70. package/dist/element/BohrAtom.svelte +5 -9
  71. package/dist/element/ElementHeading.svelte +4 -1
  72. package/dist/element/ElementPhoto.svelte +11 -9
  73. package/dist/element/ElementStats.svelte +12 -10
  74. package/dist/element/ElementTile.svelte +44 -67
  75. package/dist/element/Nucleus.svelte +4 -2
  76. package/dist/element/data.d.ts +3 -2
  77. package/dist/element/data.js +5 -1
  78. package/dist/element/helpers.d.ts +4 -0
  79. package/dist/element/helpers.js +18 -0
  80. package/dist/element/index.d.ts +2 -5
  81. package/dist/element/index.js +4 -19
  82. package/dist/feedback/DragOverlay.svelte +5 -5
  83. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  84. package/dist/feedback/StatusMessage.svelte +7 -4
  85. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  86. package/dist/fermi-surface/FermiSurface.svelte +35 -44
  87. package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
  88. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  89. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  90. package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
  91. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  92. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  93. package/dist/fermi-surface/compute.js +25 -58
  94. package/dist/fermi-surface/parse.js +54 -88
  95. package/dist/file-viewer/JsonBrowser.svelte +1043 -0
  96. package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
  97. package/dist/file-viewer/PlotPanel.svelte +350 -0
  98. package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
  99. package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
  100. package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
  101. package/dist/file-viewer/detect.d.ts +11 -0
  102. package/dist/file-viewer/detect.js +381 -0
  103. package/dist/file-viewer/eligibility.d.ts +4 -0
  104. package/dist/file-viewer/eligibility.js +53 -0
  105. package/dist/file-viewer/host-protocol.d.ts +50 -0
  106. package/dist/file-viewer/host-transfer.d.ts +25 -0
  107. package/dist/file-viewer/host-transfer.js +42 -0
  108. package/dist/file-viewer/index.d.ts +5 -0
  109. package/dist/file-viewer/index.js +5 -0
  110. package/dist/file-viewer/main.d.ts +44 -0
  111. package/dist/file-viewer/main.js +535 -0
  112. package/dist/file-viewer/parse.d.ts +9 -0
  113. package/dist/file-viewer/parse.js +170 -0
  114. package/dist/file-viewer/plot-utils.d.ts +24 -0
  115. package/dist/file-viewer/plot-utils.js +191 -0
  116. package/dist/file-viewer/types.d.ts +4 -0
  117. package/dist/file-viewer/types.js +5 -0
  118. package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
  119. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  120. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  121. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  122. package/dist/heatmap-matrix/index.d.ts +5 -0
  123. package/dist/icons.d.ts +4 -0
  124. package/dist/icons.js +4 -0
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +1 -1
  127. package/dist/io/ExportPane.svelte +11 -7
  128. package/dist/io/decompress.d.ts +4 -1
  129. package/dist/io/decompress.js +24 -36
  130. package/dist/io/export.d.ts +11 -4
  131. package/dist/io/export.js +75 -19
  132. package/dist/io/fetch.d.ts +0 -3
  133. package/dist/io/fetch.js +0 -11
  134. package/dist/io/file-drop.js +60 -35
  135. package/dist/io/index.d.ts +0 -1
  136. package/dist/io/index.js +2 -9
  137. package/dist/io/is-binary.d.ts +9 -0
  138. package/dist/io/is-binary.js +45 -1
  139. package/dist/io/url-drop.d.ts +2 -0
  140. package/dist/io/url-drop.js +40 -40
  141. package/dist/isosurface/Isosurface.svelte +700 -215
  142. package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
  143. package/dist/isosurface/IsosurfaceControls.svelte +590 -116
  144. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
  145. package/dist/isosurface/VolumeSlice.svelte +224 -0
  146. package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
  147. package/dist/isosurface/coloring.d.ts +20 -0
  148. package/dist/isosurface/coloring.js +118 -0
  149. package/dist/isosurface/geometry-worker-types.d.ts +38 -0
  150. package/dist/isosurface/geometry.worker.d.ts +1 -0
  151. package/dist/isosurface/geometry.worker.js +59 -0
  152. package/dist/isosurface/grid.d.ts +10 -0
  153. package/dist/isosurface/grid.js +31 -0
  154. package/dist/isosurface/index.d.ts +4 -0
  155. package/dist/isosurface/index.js +4 -0
  156. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  157. package/dist/isosurface/parse-vaspwave.js +138 -0
  158. package/dist/isosurface/parse.js +6 -6
  159. package/dist/isosurface/profile.d.ts +12 -0
  160. package/dist/isosurface/profile.js +19 -0
  161. package/dist/isosurface/sampling.d.ts +34 -0
  162. package/dist/isosurface/sampling.js +408 -0
  163. package/dist/isosurface/slice-rendering.d.ts +13 -0
  164. package/dist/isosurface/slice-rendering.js +79 -0
  165. package/dist/isosurface/slice.d.ts +22 -2
  166. package/dist/isosurface/slice.js +200 -116
  167. package/dist/isosurface/types.d.ts +24 -1
  168. package/dist/isosurface/types.js +120 -8
  169. package/dist/json-path.d.ts +4 -0
  170. package/dist/json-path.js +89 -0
  171. package/dist/labels.d.ts +6 -2
  172. package/dist/labels.js +44 -14
  173. package/dist/layout/FullscreenButton.svelte +2 -1
  174. package/dist/layout/FullscreenToggle.svelte +10 -4
  175. package/dist/layout/InfoCard.svelte +8 -21
  176. package/dist/layout/InfoTag.svelte +1 -3
  177. package/dist/layout/NumberRangeInput.svelte +46 -0
  178. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  179. package/dist/layout/PropertyFilter.svelte +2 -6
  180. package/dist/layout/SettingsSection.svelte +57 -62
  181. package/dist/layout/SettingsSection.svelte.d.ts +6 -7
  182. package/dist/layout/SubpageGrid.svelte +3 -1
  183. package/dist/layout/ViewerChrome.svelte +16 -11
  184. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  185. package/dist/layout/fullscreen.js +3 -5
  186. package/dist/layout/fullscreen.svelte.js +1 -2
  187. package/dist/layout/index.d.ts +1 -0
  188. package/dist/layout/index.js +1 -0
  189. package/dist/layout/json-tree/JsonNode.svelte +22 -59
  190. package/dist/layout/json-tree/JsonTree.svelte +101 -172
  191. package/dist/layout/json-tree/JsonValue.svelte +9 -32
  192. package/dist/layout/json-tree/utils.d.ts +0 -3
  193. package/dist/layout/json-tree/utils.js +50 -188
  194. package/dist/marching-cubes.d.ts +8 -1
  195. package/dist/marching-cubes.js +115 -48
  196. package/dist/math.d.ts +5 -2
  197. package/dist/math.js +48 -38
  198. package/dist/overlays/ContextMenu.svelte +19 -34
  199. package/dist/overlays/CopyButton.svelte +11 -5
  200. package/dist/overlays/DragControlTab.svelte +6 -1
  201. package/dist/overlays/DraggablePane.svelte +110 -74
  202. package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
  203. package/dist/overlays/GlassChip.svelte +32 -0
  204. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  205. package/dist/overlays/InfoPaneCards.svelte +11 -23
  206. package/dist/overlays/index.d.ts +7 -0
  207. package/dist/overlays/index.js +26 -0
  208. package/dist/overlays/portal.d.ts +2 -0
  209. package/dist/overlays/portal.js +14 -0
  210. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  211. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  212. package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
  213. package/dist/periodic-table/TableInset.svelte +9 -4
  214. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
  215. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  216. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  217. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  218. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  219. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  220. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  221. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  222. package/dist/phase-diagram/build-diagram.js +4 -9
  223. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  224. package/dist/phase-diagram/parse.js +15 -15
  225. package/dist/phase-diagram/svg-to-diagram.js +28 -27
  226. package/dist/phase-diagram/utils.js +2 -3
  227. package/dist/plot/bar/BarPlot.svelte +461 -426
  228. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  229. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  230. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  231. package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
  232. package/dist/plot/bar/data.d.ts +5 -4
  233. package/dist/plot/bar/data.js +2 -1
  234. package/dist/plot/box/BoxPlot.svelte +322 -226
  235. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  236. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  237. package/dist/plot/box/box-plot.js +1 -1
  238. package/dist/plot/core/auto-place.d.ts +1 -1
  239. package/dist/plot/core/auto-place.js +2 -2
  240. package/dist/plot/core/axis-utils.d.ts +12 -7
  241. package/dist/plot/core/axis-utils.js +48 -48
  242. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  243. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  244. package/dist/plot/core/components/ColorBar.svelte +101 -106
  245. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  246. package/dist/plot/core/components/FillArea.svelte +10 -17
  247. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  248. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  249. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  250. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  251. package/dist/plot/core/components/Line.svelte +18 -9
  252. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  253. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  254. package/dist/plot/core/components/PlotControls.svelte +65 -41
  255. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  256. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  257. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  258. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  259. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  260. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  261. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  262. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  263. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  264. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  265. package/dist/plot/core/components/index.d.ts +1 -0
  266. package/dist/plot/core/components/index.js +1 -0
  267. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  268. package/dist/plot/core/data-cleaning-signal.js +467 -0
  269. package/dist/plot/core/data-cleaning.d.ts +2 -42
  270. package/dist/plot/core/data-cleaning.js +27 -474
  271. package/dist/plot/core/data-transform.d.ts +1 -2
  272. package/dist/plot/core/data-transform.js +9 -15
  273. package/dist/plot/core/fill-utils.d.ts +3 -1
  274. package/dist/plot/core/fill-utils.js +28 -6
  275. package/dist/plot/core/index.d.ts +1 -0
  276. package/dist/plot/core/index.js +1 -0
  277. package/dist/plot/core/interactions.js +0 -2
  278. package/dist/plot/core/layout.d.ts +15 -6
  279. package/dist/plot/core/layout.js +57 -38
  280. package/dist/plot/core/marginals.d.ts +170 -0
  281. package/dist/plot/core/marginals.js +436 -0
  282. package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
  283. package/dist/plot/core/pan-zoom.svelte.js +34 -17
  284. package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -21
  286. package/dist/plot/core/reference-line.js +1 -1
  287. package/dist/plot/core/scales.d.ts +23 -0
  288. package/dist/plot/core/scales.js +39 -13
  289. package/dist/plot/core/svg.js +0 -1
  290. package/dist/plot/core/types/fills.d.ts +101 -0
  291. package/dist/plot/core/types/fills.js +15 -0
  292. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  293. package/dist/plot/core/types/plot-3d.js +4 -0
  294. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  295. package/dist/plot/core/types/reference-lines.js +9 -0
  296. package/dist/plot/core/types.d.ts +29 -324
  297. package/dist/plot/core/types.js +23 -20
  298. package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
  299. package/dist/plot/core/utils/hierarchy-chart.js +191 -0
  300. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  301. package/dist/plot/core/utils/hierarchy-labels.js +100 -0
  302. package/dist/plot/core/utils/label-placement.js +2 -2
  303. package/dist/plot/histogram/Histogram.svelte +314 -340
  304. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  305. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  306. package/dist/plot/histogram/histogram.d.ts +31 -0
  307. package/dist/plot/histogram/histogram.js +70 -0
  308. package/dist/plot/histogram/index.d.ts +1 -0
  309. package/dist/plot/histogram/index.js +1 -0
  310. package/dist/plot/index.d.ts +1 -0
  311. package/dist/plot/index.js +1 -0
  312. package/dist/plot/sankey/Sankey.svelte +78 -69
  313. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  314. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  315. package/dist/plot/sankey/sankey.js +13 -9
  316. package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
  317. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  318. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  319. package/dist/plot/scatter/ScatterPlot.svelte +517 -410
  320. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  321. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  322. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  323. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  324. package/dist/plot/scatter/adaptive-density.d.ts +1 -1
  325. package/dist/plot/scatter/adaptive-density.js +36 -20
  326. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  327. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  328. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  329. package/dist/plot/scatter/scatter-data.js +8 -7
  330. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  331. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  332. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  333. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  334. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  335. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  336. package/dist/plot/sunburst/Sunburst.svelte +269 -347
  337. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  338. package/dist/plot/sunburst/index.d.ts +1 -1
  339. package/dist/plot/sunburst/index.js +2 -1
  340. package/dist/plot/sunburst/render.d.ts +2 -2
  341. package/dist/plot/sunburst/render.js +47 -22
  342. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  343. package/dist/plot/sunburst/sunburst.js +10 -3
  344. package/dist/plot/treemap/Treemap.svelte +1022 -0
  345. package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
  346. package/dist/plot/treemap/index.d.ts +4 -0
  347. package/dist/plot/treemap/index.js +4 -0
  348. package/dist/plot/treemap/labels.d.ts +38 -0
  349. package/dist/plot/treemap/labels.js +80 -0
  350. package/dist/plot/treemap/treemap.d.ts +28 -0
  351. package/dist/plot/treemap/treemap.js +102 -0
  352. package/dist/rdf/RdfPlot.svelte +37 -59
  353. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  354. package/dist/rdf/calc-rdf.js +63 -52
  355. package/dist/rdf/index.d.ts +0 -1
  356. package/dist/sanitize.js +85 -27
  357. package/dist/scene/SceneCamera.svelte +1 -1
  358. package/dist/scene/SceneCamera.svelte.d.ts +1 -1
  359. package/dist/scene/bind-renderer.svelte.js +14 -6
  360. package/dist/scene/index.d.ts +1 -2
  361. package/dist/scene/index.js +1 -1
  362. package/dist/scene/{props.js → props.svelte.js} +15 -1
  363. package/dist/settings.d.ts +19 -9
  364. package/dist/settings.js +229 -525
  365. package/dist/spectral/Bands.svelte +207 -221
  366. package/dist/spectral/BandsAndDos.svelte +11 -9
  367. package/dist/spectral/BrillouinBandsDos.svelte +19 -42
  368. package/dist/spectral/Dos.svelte +92 -93
  369. package/dist/spectral/helpers.d.ts +3 -3
  370. package/dist/spectral/helpers.js +65 -140
  371. package/dist/state.svelte.js +5 -18
  372. package/dist/structure/Arrow.svelte +5 -18
  373. package/dist/structure/ArrowInstances.svelte +160 -0
  374. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  375. package/dist/structure/AtomLegend.svelte +120 -85
  376. package/dist/structure/AtomLegend.svelte.d.ts +2 -3
  377. package/dist/structure/Bond.svelte +31 -23
  378. package/dist/structure/CanvasTooltip.svelte +15 -3
  379. package/dist/structure/CellSelect.svelte +45 -35
  380. package/dist/structure/Cylinder.svelte +24 -40
  381. package/dist/structure/InstancedAtoms.svelte +114 -0
  382. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  383. package/dist/structure/Lattice.svelte +85 -149
  384. package/dist/structure/SiteLabels.svelte +122 -0
  385. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  386. package/dist/structure/Structure.svelte +636 -504
  387. package/dist/structure/Structure.svelte.d.ts +4 -2
  388. package/dist/structure/StructureCarousel.svelte +637 -0
  389. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  390. package/dist/structure/StructureControls.svelte +165 -425
  391. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  392. package/dist/structure/StructureExportPane.svelte +17 -21
  393. package/dist/structure/StructureInfoPane.svelte +128 -133
  394. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  395. package/dist/structure/StructureScene.svelte +535 -578
  396. package/dist/structure/StructureScene.svelte.d.ts +6 -2
  397. package/dist/structure/StructureViewport.svelte +451 -0
  398. package/dist/structure/StructureViewport.svelte.d.ts +65 -0
  399. package/dist/structure/atom-label-placement.d.ts +16 -12
  400. package/dist/structure/atom-label-placement.js +70 -37
  401. package/dist/structure/atom-properties.d.ts +2 -0
  402. package/dist/structure/atom-properties.js +105 -38
  403. package/dist/structure/bond-order-perception.js +3 -8
  404. package/dist/structure/bonding.d.ts +9 -3
  405. package/dist/structure/bonding.js +95 -46
  406. package/dist/structure/edit-history.d.ts +6 -0
  407. package/dist/structure/edit-history.js +27 -0
  408. package/dist/structure/export.d.ts +1 -0
  409. package/dist/structure/export.js +89 -105
  410. package/dist/structure/format-detect.d.ts +1 -0
  411. package/dist/structure/format-detect.js +20 -0
  412. package/dist/structure/geometry.d.ts +9 -0
  413. package/dist/structure/geometry.js +27 -0
  414. package/dist/structure/index.d.ts +16 -1
  415. package/dist/structure/index.js +15 -10
  416. package/dist/structure/measure.d.ts +1 -1
  417. package/dist/structure/measure.js +6 -12
  418. package/dist/structure/parse.d.ts +2 -1
  419. package/dist/structure/parse.js +272 -313
  420. package/dist/structure/partial-occupancy.js +10 -5
  421. package/dist/structure/pbc.js +85 -107
  422. package/dist/structure/polyhedra.d.ts +0 -1
  423. package/dist/structure/polyhedra.js +7 -21
  424. package/dist/structure/prop-groups.d.ts +85 -0
  425. package/dist/structure/prop-groups.js +18 -0
  426. package/dist/structure/supercell.d.ts +1 -2
  427. package/dist/structure/supercell.js +7 -13
  428. package/dist/symmetry/SymmetryElements.svelte +11 -15
  429. package/dist/symmetry/SymmetryStats.svelte +55 -71
  430. package/dist/symmetry/WyckoffTable.svelte +10 -28
  431. package/dist/symmetry/cell-transform.js +6 -14
  432. package/dist/symmetry/index.d.ts +1 -0
  433. package/dist/symmetry/index.js +13 -10
  434. package/dist/symmetry/spacegroups.js +3 -2
  435. package/dist/table/HeatmapTable.svelte +1142 -447
  436. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  437. package/dist/table/ToggleMenu.svelte +168 -53
  438. package/dist/table/ToggleMenu.svelte.d.ts +1 -1
  439. package/dist/table/index.d.ts +21 -6
  440. package/dist/table/index.js +34 -21
  441. package/dist/theme/ThemeControl.svelte +16 -8
  442. package/dist/theme/embedded.d.ts +18 -0
  443. package/dist/theme/embedded.js +206 -0
  444. package/dist/theme/index.d.ts +5 -5
  445. package/dist/theme/index.js +5 -12
  446. package/dist/theme/themes.mjs +44 -66
  447. package/dist/tooltip/KCoords.svelte +4 -1
  448. package/dist/tooltip/TooltipContent.svelte +3 -6
  449. package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
  450. package/dist/tooltip/index.d.ts +8 -1
  451. package/dist/trajectory/Trajectory.svelte +613 -386
  452. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  453. package/dist/trajectory/TrajectoryError.svelte +12 -74
  454. package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
  455. package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
  456. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
  457. package/dist/trajectory/extract.js +61 -49
  458. package/dist/trajectory/format-detect.d.ts +2 -0
  459. package/dist/trajectory/format-detect.js +17 -13
  460. package/dist/trajectory/frame-reader.d.ts +2 -0
  461. package/dist/trajectory/frame-reader.js +35 -32
  462. package/dist/trajectory/helpers.d.ts +2 -0
  463. package/dist/trajectory/helpers.js +34 -56
  464. package/dist/trajectory/index.d.ts +1 -0
  465. package/dist/trajectory/index.js +5 -8
  466. package/dist/trajectory/parse/ase.js +1 -1
  467. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  468. package/dist/trajectory/parse/h5-utils.js +109 -0
  469. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  470. package/dist/trajectory/parse/hdf5.js +116 -106
  471. package/dist/trajectory/parse/index.d.ts +6 -6
  472. package/dist/trajectory/parse/index.js +25 -33
  473. package/dist/trajectory/parse/lammps.js +8 -12
  474. package/dist/trajectory/parse/vasp.js +10 -7
  475. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  476. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  477. package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
  478. package/dist/trajectory/parse/vaspout-h5.js +281 -0
  479. package/dist/trajectory/parse/xyz.js +59 -9
  480. package/dist/trajectory/plotting.d.ts +8 -9
  481. package/dist/trajectory/plotting.js +113 -64
  482. package/dist/utils.d.ts +3 -0
  483. package/dist/utils.js +7 -0
  484. package/dist/xrd/XrdPlot.svelte +79 -118
  485. package/dist/xrd/broadening.js +2 -1
  486. package/dist/xrd/calc-xrd.js +24 -62
  487. package/dist/xrd/parse.d.ts +0 -1
  488. package/dist/xrd/parse.js +69 -95
  489. package/package.json +94 -34
  490. package/readme.md +6 -5
  491. package/dist/api/mp.d.ts +0 -6
  492. package/dist/api/mp.js +0 -22
  493. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  494. package/dist/scene/types.d.ts +0 -26
  495. package/dist/tooltip/types.d.ts +0 -8
  496. package/dist/trajectory/constants.d.ts +0 -6
  497. package/dist/trajectory/constants.js +0 -11
  498. /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
  499. /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
@@ -0,0 +1,4 @@
1
+ import type { ElementSymbol } from './types';
2
+ export declare const is_elem_symbol: (symbol: string) => symbol is ElementSymbol;
3
+ export declare const coerce_elem_symbol: (symbol: string) => ElementSymbol | undefined;
4
+ export declare const FALLBACK_ELEMENTS: readonly ["H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne"];
@@ -0,0 +1,18 @@
1
+ import { ELEM_SYMBOLS } from '../labels';
2
+ // Set-backed O(1) element-symbol guard shared by all parsers
3
+ const ELEM_SYMBOL_SET = new Set(ELEM_SYMBOLS);
4
+ export const is_elem_symbol = (symbol) => ELEM_SYMBOL_SET.has(symbol);
5
+ export const coerce_elem_symbol = (symbol) => is_elem_symbol(symbol) ? symbol : undefined;
6
+ // Default element symbols used when a file omits or mangles element info
7
+ export const FALLBACK_ELEMENTS = [
8
+ `H`,
9
+ `He`,
10
+ `Li`,
11
+ `Be`,
12
+ `B`,
13
+ `C`,
14
+ `N`,
15
+ `O`,
16
+ `F`,
17
+ `Ne`,
18
+ ];
@@ -1,12 +1,9 @@
1
- import type { ElementSymbol } from './types';
2
1
  export type * from './types';
3
2
  export { default as BohrAtom } from './BohrAtom.svelte';
4
- export { default as element_data } from './data';
3
+ export { default as element_data, element_by_symbol } from './data';
5
4
  export { default as ElementHeading } from './ElementHeading.svelte';
6
5
  export { default as ElementPhoto } from './ElementPhoto.svelte';
7
6
  export { default as ElementStats } from './ElementStats.svelte';
8
7
  export { default as ElementTile } from './ElementTile.svelte';
8
+ export * from './helpers';
9
9
  export { default as Nucleus } from './Nucleus.svelte';
10
- export declare const is_elem_symbol: (symbol: string) => symbol is ElementSymbol;
11
- export declare const coerce_elem_symbol: (symbol: string) => ElementSymbol | undefined;
12
- export declare const FALLBACK_ELEMENTS: readonly ["H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne"];
@@ -1,25 +1,10 @@
1
- import { ELEM_SYMBOLS } from '../labels';
2
1
  export { default as BohrAtom } from './BohrAtom.svelte';
3
- export { default as element_data } from './data';
2
+ export { default as element_data, element_by_symbol } from './data';
4
3
  export { default as ElementHeading } from './ElementHeading.svelte';
5
4
  export { default as ElementPhoto } from './ElementPhoto.svelte';
6
5
  export { default as ElementStats } from './ElementStats.svelte';
7
6
  export { default as ElementTile } from './ElementTile.svelte';
7
+ // Pure helpers live in ./helpers (no Svelte imports) so parser modules can use
8
+ // them inside Web Workers; re-exported here for everyone else.
9
+ export * from './helpers';
8
10
  export { default as Nucleus } from './Nucleus.svelte';
9
- // Set-backed O(1) element-symbol guard shared by all parsers
10
- const ELEM_SYMBOL_SET = new Set(ELEM_SYMBOLS);
11
- export const is_elem_symbol = (symbol) => ELEM_SYMBOL_SET.has(symbol);
12
- export const coerce_elem_symbol = (symbol) => is_elem_symbol(symbol) ? symbol : undefined;
13
- // Default element symbols used when a file omits or mangles element info
14
- export const FALLBACK_ELEMENTS = [
15
- `H`,
16
- `He`,
17
- `Li`,
18
- `Be`,
19
- `B`,
20
- `C`,
21
- `N`,
22
- `O`,
23
- `F`,
24
- `Ne`,
25
- ];
@@ -1,19 +1,19 @@
1
1
  <script lang="ts">
2
2
  import Icon from '../Icon.svelte'
3
+ import type { HTMLAttributes } from 'svelte/elements'
3
4
 
4
5
  let {
5
6
  visible = false,
6
- message = `Drop JSON file to load phase diagram data`,
7
- style = undefined,
7
+ message = `Drop file to load`,
8
+ ...rest
8
9
  }: {
9
10
  visible?: boolean
10
11
  message?: string
11
- style?: string
12
- } = $props()
12
+ } & HTMLAttributes<HTMLDivElement> = $props()
13
13
  </script>
14
14
 
15
15
  {#if visible}
16
- <div class="drag-overlay" {style}>
16
+ <div {...rest} class={[`drag-overlay`, rest.class]}>
17
17
  <div class="drag-message">
18
18
  <Icon icon="Info" />
19
19
  <span>{message}</span>
@@ -1,8 +1,8 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
1
2
  type $$ComponentProps = {
2
3
  visible?: boolean;
3
4
  message?: string;
4
- style?: string;
5
- };
5
+ } & HTMLAttributes<HTMLDivElement>;
6
6
  declare const DragOverlay: import("svelte").Component<$$ComponentProps, {}, "">;
7
7
  type DragOverlay = ReturnType<typeof DragOverlay>;
8
8
  export default DragOverlay;
@@ -1,7 +1,12 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLAttributes } from 'svelte/elements'
3
3
 
4
- let { message = $bindable(), type = `info`, dismissible = false, ...rest }: {
4
+ let {
5
+ message = $bindable(),
6
+ type = `info`,
7
+ dismissible = false,
8
+ ...rest
9
+ }: {
5
10
  message?: string
6
11
  type?: `info` | `error` | `warning`
7
12
  dismissible?: boolean
@@ -17,9 +22,7 @@
17
22
  >
18
23
  {message}
19
24
  {#if dismissible}
20
- <button onclick={() => (message = undefined)} aria-label="Dismiss message">
21
-
22
- </button>
25
+ <button onclick={() => (message = undefined)} aria-label="Dismiss message"> ✕ </button>
23
26
  {/if}
24
27
  </div>
25
28
  {/if}
@@ -86,7 +86,10 @@
86
86
  const isolines = slice_data?.isolines
87
87
  if (!isolines?.length) return { min: [-1, -1], max: [1, 1] }
88
88
 
89
- let xmin = Infinity, xmax = -Infinity, ymin = Infinity, ymax = -Infinity
89
+ let xmin = Infinity,
90
+ xmax = -Infinity,
91
+ ymin = Infinity,
92
+ ymax = -Infinity
90
93
  for (const iso of isolines) {
91
94
  for (const pt of iso.points_2d) {
92
95
  if (pt[0] < xmin) xmin = pt[0]
@@ -97,13 +100,14 @@
97
100
  }
98
101
  if (!isFinite(xmin)) return { min: [-1, -1], max: [1, 1] }
99
102
 
100
- const pad = 0.1, rx = xmax - xmin || 1, ry = ymax - ymin || 1
103
+ const pad = 0.1,
104
+ rx = xmax - xmin || 1,
105
+ ry = ymax - ymin || 1
101
106
  return {
102
107
  min: [xmin - rx * pad, ymin - ry * pad],
103
108
  max: [xmax + rx * pad, ymax + ry * pad],
104
109
  }
105
110
  })
106
-
107
111
  function toggle_band(series_idx: number) {
108
112
  const band = slice_data?.isolines[series_idx]?.band_index
109
113
  if (band === undefined) return
@@ -114,9 +118,7 @@
114
118
  function isolate_band(series_idx: number) {
115
119
  const band = slice_data?.isolines[series_idx]?.band_index
116
120
  if (band === undefined) return
117
- const all_bands = [
118
- ...new Set(slice_data?.isolines.map((iso) => iso.band_index)),
119
- ]
121
+ const all_bands = [...new Set(slice_data?.isolines.map((iso) => iso.band_index))]
120
122
  const is_solo = all_bands.every((bid) => bid === band || hidden_bands.has(bid))
121
123
  hidden_bands.clear()
122
124
  if (!is_solo) {
@@ -127,8 +129,7 @@
127
129
  }
128
130
 
129
131
  // Returns null if SVG not found, making export failures explicit
130
- const export_svg = (): string | null =>
131
- wrapper?.querySelector(`svg`)?.outerHTML ?? null
132
+ const export_svg = (): string | null => wrapper?.querySelector(`svg`)?.outerHTML ?? null
132
133
  </script>
133
134
 
134
135
  <ScatterPlot
@@ -143,16 +144,16 @@
143
144
  controls={{ show: false }}
144
145
  fullscreen_toggle={false}
145
146
  legend={show_legend && series.length > 0
146
- ? {
147
- on_toggle: toggle_band,
148
- on_double_click: isolate_band,
149
- draggable: false,
150
- // pin bottom-right so it clears the top-left title/controls overlay (e.g. in the demo)
151
- style: `left: auto; top: auto; right: 8px; bottom: 8px`,
152
- }
153
- : null}
147
+ ? {
148
+ on_toggle: toggle_band,
149
+ on_double_click: isolate_band,
150
+ draggable: false,
151
+ // pin bottom-right so it clears the top-left title/controls overlay (e.g. in the demo)
152
+ style: `left: auto; top: auto; right: 8px; bottom: 8px`,
153
+ }
154
+ : null}
154
155
  padding={{ t: 5, b: 5, l: 5, r: 5 }}
155
- class="fermi-slice {rest.class ?? ``}"
156
+ class={[`fermi-slice`, rest.class]}
156
157
  style={rest.style}
157
158
  >
158
159
  {#snippet user_content({ x_scale_fn, y_scale_fn, pad, width, height })}
@@ -192,6 +193,8 @@
192
193
  }
193
194
  .fermi-label {
194
195
  fill: var(--fermi-surface-axis-color, #888);
195
- font: 12px system-ui, sans-serif;
196
+ font:
197
+ 12px system-ui,
198
+ sans-serif;
196
199
  }
197
200
  </style>
@@ -5,7 +5,7 @@
5
5
  import EmptyState from '../EmptyState.svelte'
6
6
  import { StatusMessage } from '../feedback'
7
7
  import Spinner from '../feedback/Spinner.svelte'
8
- import { create_file_drop_handler, drag_over_handlers, load_from_url } from '../io'
8
+ import * as io from '../io'
9
9
  import { type FullscreenToggleProp, toggle_fullscreen, ViewerChrome } from '../layout'
10
10
  import { sync_fullscreen } from '../layout/fullscreen.svelte'
11
11
  import { PlotTooltip } from '../plot'
@@ -34,13 +34,9 @@
34
34
  RepresentationMode,
35
35
  } from './types'
36
36
 
37
- type FermiHandlerData = {
37
+ type FermiFullscreenData = {
38
38
  fermi_data?: FermiSurfaceData
39
- band_data?: BandGridData
40
39
  bz_data?: BrillouinZoneData
41
- filename?: string
42
- file_size?: number
43
- error_msg?: string
44
40
  fullscreen?: boolean
45
41
  }
46
42
 
@@ -136,13 +132,11 @@
136
132
  spinner_props?: ComponentProps<typeof Spinner>
137
133
  loading?: boolean
138
134
  error_msg?: string
139
- children?: Snippet<
140
- [{ fermi_data?: FermiSurfaceData; bz_data?: BrillouinZoneData }]
141
- >
135
+ children?: Snippet<[{ fermi_data?: FermiSurfaceData; bz_data?: BrillouinZoneData }]>
142
136
  on_file_drop?: (filename: string) => void
143
137
  on_file_load?: (data: FermiFileLoadData) => void
144
138
  on_error?: (data: FermiErrorData) => void
145
- on_fullscreen_change?: (data: FermiHandlerData) => void
139
+ on_fullscreen_change?: (data: FermiFullscreenData) => void
146
140
  on_mu_change?: (mu: number) => void
147
141
  tooltip_config?: Snippet<[{ hover_data: FermiHoverData }]> | FermiTooltipConfig
148
142
  on_point_hover?: (data: FermiHoverData | null) => void
@@ -173,17 +167,12 @@
173
167
  // Yield to browser so spinner can render before heavy computation
174
168
  const tick = () =>
175
169
  new Promise<void>((resolve) =>
176
- requestAnimationFrame(() => requestAnimationFrame(() => resolve()))
170
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve())),
177
171
  )
178
172
 
179
173
  // Parse and load Fermi surface from content (async for UI responsiveness)
180
- async function parse_fermi_content(
181
- content: string | ArrayBuffer,
182
- filename: string,
183
- ) {
184
- const text = content instanceof ArrayBuffer
185
- ? new TextDecoder().decode(content)
186
- : content
174
+ async function parse_fermi_content(content: string | ArrayBuffer, filename: string) {
175
+ const text = content instanceof ArrayBuffer ? new TextDecoder().decode(content) : content
187
176
 
188
177
  // parse_fermi_file throws a descriptive error when parsing fails
189
178
  const parsed = parse_fermi_file(text, filename)
@@ -208,9 +197,7 @@
208
197
  try {
209
198
  await parse_fermi_content(content, filename)
210
199
  } catch (err) {
211
- error_msg = `Failed to parse ${filename}: ${
212
- to_error(err).message
213
- }`
200
+ error_msg = `Failed to parse ${filename}: ${to_error(err).message}`
214
201
  on_error?.({ error_msg, filename })
215
202
  }
216
203
  }
@@ -277,11 +264,10 @@
277
264
  // Compute BZ when structure or fermi_data changes
278
265
  $effect(() => {
279
266
  // Get k_lattice from available sources (priority order)
280
- const k_lattice = fermi_data?.k_lattice ??
267
+ const k_lattice =
268
+ fermi_data?.k_lattice ??
281
269
  band_data?.k_lattice ??
282
- (structure?.lattice?.matrix
283
- ? reciprocal_lattice(structure.lattice.matrix)
284
- : null)
270
+ (structure?.lattice?.matrix ? reciprocal_lattice(structure.lattice.matrix) : null)
285
271
 
286
272
  if (!k_lattice) {
287
273
  bz_data = undefined
@@ -313,23 +299,26 @@
313
299
  // Load from URL (with race condition protection for rapid URL changes)
314
300
  let load_id = 0
315
301
  $effect(() => {
316
- if (data_url && !fermi_data && !band_data) {
317
- const current_load_id = ++load_id
318
- loading = true
319
- error_msg = undefined
320
- load_from_url(data_url, safe_parse)
321
- .catch((err) => {
322
- if (current_load_id !== load_id) return // stale request
323
- error_msg = to_error(err).message
324
- on_error?.({ error_msg, filename: data_url })
325
- })
326
- .finally(() => {
327
- if (current_load_id === load_id) loading = false
328
- })
329
- }
302
+ const requested_url = data_url
303
+ if (!requested_url || fermi_data || band_data) return
304
+ const current_load_id = ++load_id
305
+ loading = true
306
+ error_msg = undefined
307
+ io.load_from_url(requested_url, (content, filename) => {
308
+ if (current_load_id !== load_id) return
309
+ return safe_parse(content, filename)
310
+ })
311
+ .catch((err) => {
312
+ if (current_load_id !== load_id) return
313
+ error_msg = to_error(err).message
314
+ on_error?.({ error_msg, filename: io.basename_from_url(requested_url) })
315
+ })
316
+ .finally(() => {
317
+ if (current_load_id === load_id) loading = false
318
+ })
330
319
  })
331
320
 
332
- const handle_file_drop = create_file_drop_handler({
321
+ const handle_file_drop = io.create_file_drop_handler({
333
322
  allow: () => allow_file_drop,
334
323
  on_drop: async (content, filename) => {
335
324
  on_file_drop?.(filename)
@@ -361,8 +350,7 @@
361
350
  set_fullscreen: (val) => (fullscreen = val),
362
351
  bg_css_var: `--fermi-bg-fullscreen`,
363
352
  on_request_error: () => (fullscreen = false),
364
- on_change: (val) =>
365
- on_fullscreen_change?.({ fermi_data, bz_data, fullscreen: val }),
353
+ on_change: (val) => on_fullscreen_change?.({ fermi_data, bz_data, fullscreen: val }),
366
354
  })
367
355
  </script>
368
356
 
@@ -379,9 +367,12 @@
379
367
  onmouseenter={() => (hovered = true)}
380
368
  onmouseleave={() => (hovered = false)}
381
369
  ondrop={handle_file_drop}
382
- {...drag_over_handlers({ allow: () => allow_file_drop, set_dragover: (over) => dragover = over })}
370
+ {...io.drag_over_handlers({
371
+ allow: () => allow_file_drop,
372
+ set_dragover: (over) => (dragover = over),
373
+ })}
383
374
  {...rest}
384
- class="fermi-surface {rest.class ?? ``}"
375
+ class={[`fermi-surface`, rest.class]}
385
376
  >
386
377
  {@render children?.({ fermi_data, bz_data })}
387
378
  {#if loading}
@@ -7,13 +7,9 @@ import type { Crystal } from '../structure';
7
7
  import type { ComponentProps, Snippet } from 'svelte';
8
8
  import type { HTMLAttributes } from 'svelte/elements';
9
9
  import type { BandGridData, ColorProperty, FermiErrorData, FermiFileLoadData, FermiHoverData, FermiSurfaceData, FermiTooltipConfig, RepresentationMode } from './types';
10
- type FermiHandlerData = {
10
+ type FermiFullscreenData = {
11
11
  fermi_data?: FermiSurfaceData;
12
- band_data?: BandGridData;
13
12
  bz_data?: BrillouinZoneData;
14
- filename?: string;
15
- file_size?: number;
16
- error_msg?: string;
17
13
  fullscreen?: boolean;
18
14
  };
19
15
  type $$ComponentProps = {
@@ -52,16 +48,14 @@ type $$ComponentProps = {
52
48
  spinner_props?: ComponentProps<typeof Spinner>;
53
49
  loading?: boolean;
54
50
  error_msg?: string;
55
- children?: Snippet<[
56
- {
57
- fermi_data?: FermiSurfaceData;
58
- bz_data?: BrillouinZoneData;
59
- }
60
- ]>;
51
+ children?: Snippet<[{
52
+ fermi_data?: FermiSurfaceData;
53
+ bz_data?: BrillouinZoneData;
54
+ }]>;
61
55
  on_file_drop?: (filename: string) => void;
62
56
  on_file_load?: (data: FermiFileLoadData) => void;
63
57
  on_error?: (data: FermiErrorData) => void;
64
- on_fullscreen_change?: (data: FermiHandlerData) => void;
58
+ on_fullscreen_change?: (data: FermiFullscreenData) => void;
65
59
  on_mu_change?: (mu: number) => void;
66
60
  tooltip_config?: Snippet<[{
67
61
  hover_data: FermiHoverData;
@@ -69,6 +63,6 @@ type $$ComponentProps = {
69
63
  on_point_hover?: (data: FermiHoverData | null) => void;
70
64
  on_hover?: (data: FermiHoverData | null) => void;
71
65
  } & HTMLAttributes<HTMLDivElement>;
72
- declare const FermiSurface: import("svelte").Component<$$ComponentProps, {}, "height" | "width" | "dragover" | "fullscreen" | "wrapper" | "hovered" | "controls_open" | "color_scale" | "loading" | "camera_projection" | "error_msg" | "surface_opacity" | "show_vectors" | "bz_data" | "mu" | "selected_bands" | "interpolation_factor" | "fermi_data" | "band_data" | "color_property" | "representation" | "show_bz" | "bz_opacity" | "tile_bz" | "clip_enabled" | "clip_axis" | "clip_position" | "clip_flip">;
66
+ declare const FermiSurface: import("svelte").Component<$$ComponentProps, {}, "height" | "width" | "dragover" | "fullscreen" | "wrapper" | "hovered" | "controls_open" | "camera_projection" | "color_scale" | "loading" | "error_msg" | "surface_opacity" | "show_vectors" | "bz_data" | "mu" | "selected_bands" | "interpolation_factor" | "fermi_data" | "band_data" | "color_property" | "representation" | "show_bz" | "bz_opacity" | "tile_bz" | "clip_enabled" | "clip_axis" | "clip_position" | "clip_flip">;
73
67
  type FermiSurface = ReturnType<typeof FermiSurface>;
74
68
  export default FermiSurface;
@@ -2,7 +2,7 @@
2
2
  import SettingsSection from '../layout/SettingsSection.svelte'
3
3
  import DraggablePane from '../overlays/DraggablePane.svelte'
4
4
  import type { CameraProjection } from '../settings'
5
- import { make_change_detector } from '../utils'
5
+ import { make_change_detector, parse_num_token } from '../utils'
6
6
  import type { Snippet } from 'svelte'
7
7
  import type {
8
8
  BandGridData,
@@ -90,8 +90,8 @@
90
90
  let available_bands = $derived(
91
91
  fermi_data
92
92
  ? [...new Set(fermi_data.isosurfaces.map((iso) => iso.band_index))].toSorted(
93
- (a, b) => a - b,
94
- )
93
+ (a, b) => a - b,
94
+ )
95
95
  : [],
96
96
  )
97
97
  let available_bands_key = $derived(available_bands.join(`,`))
@@ -119,8 +119,7 @@
119
119
  }
120
120
 
121
121
  function handle_mu_change(event: Event & { currentTarget: HTMLInputElement }) {
122
- const trimmed = event.currentTarget.value.trim()
123
- const parsed = parseFloat(trimmed)
122
+ const parsed = parse_num_token(event.currentTarget.value)
124
123
  // Only update mu when input is valid; keep last valid value during transient
125
124
  // invalid states (e.g. empty string while user is typing a new value)
126
125
  if (Number.isFinite(parsed)) {
@@ -147,14 +146,7 @@
147
146
  >
148
147
  <label>
149
148
  <span>μ offset (eV):</span>
150
- <input
151
- type="range"
152
- min="-1"
153
- max="1"
154
- step="0.01"
155
- value={mu}
156
- oninput={handle_mu_change}
157
- />
149
+ <input type="range" min="-1" max="1" step="0.01" value={mu} oninput={handle_mu_change} />
158
150
  <input
159
151
  type="number"
160
152
  step="0.01"
@@ -300,13 +292,7 @@
300
292
  </label>
301
293
  <label>
302
294
  <span>Position:</span>
303
- <input
304
- type="range"
305
- min="-1"
306
- max="1"
307
- step="0.01"
308
- bind:value={clip_position}
309
- />
295
+ <input type="range" min="-1" max="1" step="0.01" bind:value={clip_position} />
310
296
  <span class="value">{clip_position.toFixed(2)}</span>
311
297
  </label>
312
298
  <label>
@@ -30,6 +30,6 @@ type $$ComponentProps = {
30
30
  band_data?: BandGridData;
31
31
  }]>;
32
32
  };
33
- declare const FermiSurfaceControls: import("svelte").Component<$$ComponentProps, {}, "controls_open" | "color_scale" | "camera_projection" | "surface_opacity" | "show_vectors" | "mu" | "selected_bands" | "interpolation_factor" | "color_property" | "representation" | "show_bz" | "bz_opacity" | "tile_bz" | "clip_enabled" | "clip_axis" | "clip_position" | "clip_flip">;
33
+ declare const FermiSurfaceControls: import("svelte").Component<$$ComponentProps, {}, "controls_open" | "camera_projection" | "color_scale" | "surface_opacity" | "show_vectors" | "mu" | "selected_bands" | "interpolation_factor" | "color_property" | "representation" | "show_bz" | "bz_opacity" | "tile_bz" | "clip_enabled" | "clip_axis" | "clip_position" | "clip_flip">;
34
34
  type FermiSurfaceControls = ReturnType<typeof FermiSurfaceControls>;
35
35
  export default FermiSurfaceControls;