matterviz 0.4.0 → 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 (527) 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 +132 -219
  7. package/dist/brillouin/BrillouinZone.svelte.d.ts +9 -20
  8. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  9. package/dist/brillouin/BrillouinZoneExportPane.svelte +47 -96
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +15 -42
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +2 -3
  13. package/dist/brillouin/BrillouinZoneScene.svelte +63 -230
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +3 -23
  15. package/dist/brillouin/ReciprocalVectors.svelte +39 -0
  16. package/dist/brillouin/ReciprocalVectors.svelte.d.ts +9 -0
  17. package/dist/brillouin/compute.d.ts +2 -0
  18. package/dist/brillouin/compute.js +80 -77
  19. package/dist/brillouin/geometry.d.ts +8 -0
  20. package/dist/brillouin/geometry.js +57 -0
  21. package/dist/brillouin/index.d.ts +2 -0
  22. package/dist/brillouin/index.js +2 -0
  23. package/dist/brillouin/types.d.ts +2 -2
  24. package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
  25. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +1 -1
  26. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +143 -246
  27. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +4 -1
  28. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +652 -976
  29. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +7 -1
  30. package/dist/chempot-diagram/async-compute.svelte.js +1 -1
  31. package/dist/chempot-diagram/color.d.ts +3 -6
  32. package/dist/chempot-diagram/color.js +5 -5
  33. package/dist/chempot-diagram/compute.d.ts +3 -3
  34. package/dist/chempot-diagram/compute.js +3 -1
  35. package/dist/chempot-diagram/controls-state.svelte.d.ts +10 -0
  36. package/dist/chempot-diagram/controls-state.svelte.js +42 -0
  37. package/dist/chempot-diagram/export.d.ts +47 -0
  38. package/dist/chempot-diagram/export.js +133 -0
  39. package/dist/chempot-diagram/index.d.ts +1 -0
  40. package/dist/chempot-diagram/index.js +1 -0
  41. package/dist/chempot-diagram/pointer.d.ts +0 -10
  42. package/dist/chempot-diagram/pointer.js +4 -4
  43. package/dist/chempot-diagram/types.d.ts +3 -3
  44. package/dist/colors/index.d.ts +0 -4
  45. package/dist/colors/index.js +21 -22
  46. package/dist/composition/BarChart.svelte +37 -31
  47. package/dist/composition/BubbleChart.svelte +17 -17
  48. package/dist/composition/Composition.svelte +7 -11
  49. package/dist/composition/Formula.svelte +18 -25
  50. package/dist/composition/FormulaFilter.svelte +96 -98
  51. package/dist/composition/PieChart.svelte +60 -46
  52. package/dist/composition/chem-sys.js +3 -2
  53. package/dist/composition/format.js +4 -3
  54. package/dist/composition/index.d.ts +2 -0
  55. package/dist/composition/index.js +14 -0
  56. package/dist/composition/parse.d.ts +2 -3
  57. package/dist/composition/parse.js +27 -28
  58. package/dist/constants.js +11 -9
  59. package/dist/controls.d.ts +1 -0
  60. package/dist/controls.js +0 -1
  61. package/dist/convex-hull/ConvexHull.svelte +20 -25
  62. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -4
  63. package/dist/convex-hull/ConvexHull2D.svelte +176 -256
  64. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  65. package/dist/convex-hull/ConvexHull3D.svelte +269 -804
  66. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  67. package/dist/convex-hull/ConvexHull4D.svelte +236 -755
  68. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  69. package/dist/convex-hull/ConvexHullChrome.svelte +264 -0
  70. package/dist/convex-hull/ConvexHullChrome.svelte.d.ts +30 -0
  71. package/dist/convex-hull/ConvexHullControls.svelte +128 -49
  72. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +7 -6
  73. package/dist/convex-hull/ConvexHullInfoPane.svelte +18 -5
  74. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +6 -5
  75. package/dist/convex-hull/ConvexHullStats.svelte +210 -351
  76. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +3 -1
  77. package/dist/convex-hull/ConvexHullTooltip.svelte +16 -14
  78. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +2 -1
  79. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  80. package/dist/convex-hull/StructurePopup.svelte +17 -21
  81. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  82. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  83. package/dist/convex-hull/barycentric-coords.d.ts +2 -4
  84. package/dist/convex-hull/barycentric-coords.js +6 -33
  85. package/dist/convex-hull/canvas-interactions.svelte.d.ts +79 -0
  86. package/dist/convex-hull/canvas-interactions.svelte.js +279 -0
  87. package/dist/convex-hull/helpers.d.ts +47 -17
  88. package/dist/convex-hull/helpers.js +186 -101
  89. package/dist/convex-hull/hull-state.svelte.d.ts +44 -0
  90. package/dist/convex-hull/hull-state.svelte.js +124 -0
  91. package/dist/convex-hull/index.d.ts +9 -7
  92. package/dist/convex-hull/index.js +7 -2
  93. package/dist/convex-hull/thermodynamics.js +109 -937
  94. package/dist/convex-hull/types.d.ts +12 -4
  95. package/dist/convex-hull/types.js +12 -0
  96. package/dist/coordination/CoordinationBarPlot.svelte +41 -43
  97. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  98. package/dist/coordination/calc-coordination.d.ts +1 -1
  99. package/dist/coordination/calc-coordination.js +28 -25
  100. package/dist/element/BohrAtom.svelte +6 -8
  101. package/dist/element/ElementHeading.svelte +4 -1
  102. package/dist/element/ElementPhoto.svelte +11 -9
  103. package/dist/element/ElementStats.svelte +12 -10
  104. package/dist/element/ElementTile.svelte +24 -29
  105. package/dist/element/ElementTile.svelte.d.ts +1 -1
  106. package/dist/element/Nucleus.svelte +4 -2
  107. package/dist/element/data.d.ts +1 -2
  108. package/dist/element/helpers.d.ts +4 -0
  109. package/dist/element/helpers.js +18 -0
  110. package/dist/element/index.d.ts +1 -0
  111. package/dist/element/index.js +3 -0
  112. package/dist/feedback/DragOverlay.svelte +5 -3
  113. package/dist/feedback/DragOverlay.svelte.d.ts +2 -1
  114. package/dist/feedback/StatusMessage.svelte +20 -7
  115. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  116. package/dist/fermi-surface/FermiSurface.svelte +78 -165
  117. package/dist/fermi-surface/FermiSurface.svelte.d.ts +9 -20
  118. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  119. package/dist/fermi-surface/FermiSurfaceScene.svelte +93 -272
  120. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +3 -23
  121. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  122. package/dist/fermi-surface/compute.js +14 -13
  123. package/dist/fermi-surface/export.js +4 -15
  124. package/dist/fermi-surface/index.d.ts +0 -1
  125. package/dist/fermi-surface/index.js +0 -1
  126. package/dist/fermi-surface/parse.d.ts +1 -1
  127. package/dist/fermi-surface/parse.js +84 -97
  128. package/dist/fermi-surface/types.d.ts +2 -2
  129. package/dist/heatmap-matrix/HeatmapMatrix.svelte +161 -185
  130. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +6 -5
  131. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +12 -9
  132. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +5 -5
  133. package/dist/heatmap-matrix/index.d.ts +8 -2
  134. package/dist/icons.d.ts +4 -0
  135. package/dist/icons.js +4 -0
  136. package/dist/index.d.ts +1 -0
  137. package/dist/index.js +1 -0
  138. package/dist/io/ExportPane.svelte +170 -0
  139. package/dist/io/ExportPane.svelte.d.ts +17 -0
  140. package/dist/io/decompress.d.ts +2 -1
  141. package/dist/io/decompress.js +22 -36
  142. package/dist/io/export.d.ts +9 -1
  143. package/dist/io/export.js +37 -29
  144. package/dist/io/fetch.d.ts +2 -4
  145. package/dist/io/fetch.js +0 -11
  146. package/dist/io/file-drop.d.ts +7 -0
  147. package/dist/io/file-drop.js +13 -0
  148. package/dist/io/index.d.ts +1 -0
  149. package/dist/io/index.js +3 -0
  150. package/dist/io/is-binary.d.ts +9 -0
  151. package/dist/io/is-binary.js +45 -1
  152. package/dist/io/types.d.ts +13 -0
  153. package/dist/io/url-drop.js +13 -25
  154. package/dist/isosurface/Isosurface.svelte +17 -23
  155. package/dist/isosurface/IsosurfaceControls.svelte +37 -42
  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 +50 -48
  159. package/dist/labels.d.ts +6 -2
  160. package/dist/labels.js +44 -14
  161. package/dist/layout/FullscreenButton.svelte +34 -0
  162. package/dist/layout/FullscreenButton.svelte.d.ts +10 -0
  163. package/dist/layout/FullscreenToggle.svelte +12 -12
  164. package/dist/layout/InfoCard.svelte +7 -18
  165. package/dist/layout/InfoTag.svelte +1 -3
  166. package/dist/layout/NumberRangeInput.svelte +46 -0
  167. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  168. package/dist/layout/PropertyFilter.svelte +2 -6
  169. package/dist/layout/SettingsSection.svelte +21 -17
  170. package/dist/layout/SubpageGrid.svelte +3 -1
  171. package/dist/layout/ViewerChrome.svelte +115 -0
  172. package/dist/layout/ViewerChrome.svelte.d.ts +18 -0
  173. package/dist/layout/fullscreen.d.ts +4 -0
  174. package/dist/layout/fullscreen.js +3 -5
  175. package/dist/layout/fullscreen.svelte.d.ts +8 -0
  176. package/dist/layout/fullscreen.svelte.js +36 -0
  177. package/dist/layout/index.d.ts +4 -0
  178. package/dist/layout/index.js +4 -0
  179. package/dist/layout/json-tree/JsonNode.svelte +8 -11
  180. package/dist/layout/json-tree/JsonTree.svelte +53 -77
  181. package/dist/layout/json-tree/JsonValue.svelte +7 -15
  182. package/dist/layout/json-tree/utils.js +14 -23
  183. package/dist/math.d.ts +9 -3
  184. package/dist/math.js +37 -21
  185. package/dist/overlays/ContextMenu.svelte +4 -2
  186. package/dist/overlays/CopyButton.svelte +11 -5
  187. package/dist/overlays/DragControlTab.svelte +6 -1
  188. package/dist/overlays/DraggablePane.svelte +81 -26
  189. package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
  190. package/dist/overlays/GlassChip.svelte +30 -0
  191. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  192. package/dist/overlays/InfoPaneCards.svelte +11 -23
  193. package/dist/overlays/index.d.ts +11 -0
  194. package/dist/overlays/index.js +26 -0
  195. package/dist/overlays/portal.d.ts +2 -0
  196. package/dist/overlays/portal.js +14 -0
  197. package/dist/periodic-table/PeriodicTable.svelte +115 -146
  198. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  199. package/dist/periodic-table/PeriodicTableControls.svelte +11 -63
  200. package/dist/periodic-table/TableInset.svelte +9 -4
  201. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
  202. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  203. package/dist/phase-diagram/PhaseDiagramControls.svelte +73 -96
  204. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +4 -3
  205. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +4 -2
  206. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +2 -3
  207. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +49 -134
  208. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +3 -4
  209. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  210. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  211. package/dist/phase-diagram/build-diagram.js +3 -3
  212. package/dist/phase-diagram/colors.js +1 -1
  213. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  214. package/dist/phase-diagram/parse.d.ts +2 -1
  215. package/dist/phase-diagram/parse.js +15 -15
  216. package/dist/phase-diagram/svg-to-diagram.js +21 -15
  217. package/dist/phase-diagram/utils.js +2 -3
  218. package/dist/plot/bar/BarPlot.svelte +494 -692
  219. package/dist/plot/bar/BarPlot.svelte.d.ts +9 -15
  220. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  221. package/dist/plot/bar/BarPlotControls.svelte.d.ts +5 -7
  222. package/dist/plot/bar/SpacegroupBarPlot.svelte +31 -37
  223. package/dist/plot/bar/data.d.ts +5 -4
  224. package/dist/plot/bar/data.js +2 -1
  225. package/dist/plot/box/BoxPlot.svelte +361 -439
  226. package/dist/plot/box/BoxPlot.svelte.d.ts +6 -3
  227. package/dist/plot/box/BoxPlotControls.svelte.d.ts +1 -1
  228. package/dist/plot/box/Violin.svelte.d.ts +2 -1
  229. package/dist/plot/box/box-plot.d.ts +3 -2
  230. package/dist/plot/box/box-plot.js +6 -3
  231. package/dist/plot/box/kde.d.ts +2 -1
  232. package/dist/plot/box/kde.js +4 -4
  233. package/dist/plot/core/auto-place.d.ts +1 -1
  234. package/dist/plot/core/auto-place.js +5 -2
  235. package/dist/plot/core/axis-utils.d.ts +12 -7
  236. package/dist/plot/core/axis-utils.js +48 -48
  237. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  238. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  239. package/dist/plot/core/components/ColorBar.svelte +106 -111
  240. package/dist/plot/core/components/ColorBar.svelte.d.ts +5 -4
  241. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  242. package/dist/plot/core/components/FillArea.svelte +10 -17
  243. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  244. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  245. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  246. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  247. package/dist/plot/core/components/Line.svelte +21 -11
  248. package/dist/plot/core/components/Line.svelte.d.ts +5 -2
  249. package/dist/plot/core/components/PlotAxis.svelte +42 -18
  250. package/dist/plot/core/components/PlotAxis.svelte.d.ts +2 -1
  251. package/dist/plot/core/components/PlotControls.svelte +65 -41
  252. package/dist/plot/core/components/PlotControls.svelte.d.ts +1 -1
  253. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  254. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  255. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  256. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  257. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  258. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  259. package/dist/plot/core/components/ReferenceLine3D.svelte +56 -59
  260. package/dist/plot/core/components/ReferenceLine3D.svelte.d.ts +4 -4
  261. package/dist/plot/core/components/ReferencePlane.svelte +9 -10
  262. package/dist/plot/core/components/ReferencePlane.svelte.d.ts +4 -4
  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 +29 -476
  271. package/dist/plot/core/data-transform.js +9 -5
  272. package/dist/plot/core/fill-utils.d.ts +7 -4
  273. package/dist/plot/core/fill-utils.js +34 -9
  274. package/dist/plot/core/index.d.ts +1 -0
  275. package/dist/plot/core/index.js +1 -0
  276. package/dist/plot/core/interactions.d.ts +5 -1
  277. package/dist/plot/core/interactions.js +14 -2
  278. package/dist/plot/core/layout.d.ts +3 -1
  279. package/dist/plot/core/layout.js +22 -13
  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 +35 -0
  283. package/dist/plot/core/pan-zoom.svelte.js +221 -0
  284. package/dist/plot/core/placed-tween.svelte.d.ts +21 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -0
  286. package/dist/plot/core/reference-line.d.ts +10 -10
  287. package/dist/plot/core/reference-line.js +7 -7
  288. package/dist/plot/core/scales.d.ts +40 -25
  289. package/dist/plot/core/scales.js +49 -21
  290. package/dist/plot/core/svg.d.ts +2 -1
  291. package/dist/plot/core/types/fills.d.ts +101 -0
  292. package/dist/plot/core/types/fills.js +15 -0
  293. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  294. package/dist/plot/core/types/plot-3d.js +4 -0
  295. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  296. package/dist/plot/core/types/reference-lines.js +9 -0
  297. package/dist/plot/core/types.d.ts +47 -331
  298. package/dist/plot/core/types.js +23 -20
  299. package/dist/plot/core/utils/hierarchy-chart.d.ts +51 -0
  300. package/dist/plot/core/utils/hierarchy-chart.js +179 -0
  301. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  302. package/dist/plot/core/utils/hierarchy-labels.js +99 -0
  303. package/dist/plot/core/utils/label-placement.d.ts +1 -1
  304. package/dist/plot/core/utils/label-placement.js +5 -5
  305. package/dist/plot/core/utils.d.ts +2 -1
  306. package/dist/plot/histogram/Histogram.svelte +373 -631
  307. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  308. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  309. package/dist/plot/histogram/HistogramControls.svelte.d.ts +1 -1
  310. package/dist/plot/histogram/histogram.d.ts +31 -0
  311. package/dist/plot/histogram/histogram.js +70 -0
  312. package/dist/plot/histogram/index.d.ts +1 -0
  313. package/dist/plot/histogram/index.js +1 -0
  314. package/dist/plot/index.d.ts +1 -0
  315. package/dist/plot/index.js +1 -0
  316. package/dist/plot/sankey/Sankey.svelte +79 -73
  317. package/dist/plot/sankey/Sankey.svelte.d.ts +3 -3
  318. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  319. package/dist/plot/sankey/sankey.js +3 -1
  320. package/dist/plot/scatter/BinnedScatterPlot.svelte +264 -112
  321. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +11 -4
  322. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  323. package/dist/plot/scatter/ScatterPlot.svelte +623 -821
  324. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +9 -15
  325. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  326. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  327. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  328. package/dist/plot/scatter/binned-scatter-types.d.ts +6 -12
  329. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  330. package/dist/plot/scatter/index.d.ts +1 -1
  331. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  332. package/dist/plot/scatter/scatter-data.js +8 -7
  333. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +40 -60
  334. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +6 -14
  335. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +17 -15
  336. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte.d.ts +5 -5
  337. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +232 -234
  338. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +5 -14
  339. package/dist/plot/scatter-3d/Surface3D.svelte +9 -17
  340. package/dist/plot/scatter-3d/Surface3D.svelte.d.ts +4 -3
  341. package/dist/plot/sunburst/Sunburst.svelte +256 -338
  342. package/dist/plot/sunburst/Sunburst.svelte.d.ts +4 -3
  343. package/dist/plot/sunburst/index.d.ts +1 -1
  344. package/dist/plot/sunburst/index.js +2 -1
  345. package/dist/plot/sunburst/render.d.ts +2 -2
  346. package/dist/plot/sunburst/render.js +47 -22
  347. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  348. package/dist/plot/sunburst/sunburst.js +14 -4
  349. package/dist/plot/treemap/Treemap.svelte +907 -0
  350. package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
  351. package/dist/plot/treemap/index.d.ts +3 -0
  352. package/dist/plot/treemap/index.js +4 -0
  353. package/dist/plot/treemap/treemap.d.ts +26 -0
  354. package/dist/plot/treemap/treemap.js +99 -0
  355. package/dist/rdf/RdfPlot.svelte +22 -26
  356. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  357. package/dist/rdf/calc-rdf.js +4 -8
  358. package/dist/sanitize.js +14 -3
  359. package/dist/scene/SceneCamera.svelte +62 -0
  360. package/dist/scene/SceneCamera.svelte.d.ts +19 -0
  361. package/dist/scene/bind-renderer.svelte.d.ts +2 -0
  362. package/dist/scene/bind-renderer.svelte.js +22 -0
  363. package/dist/scene/index.d.ts +4 -0
  364. package/dist/scene/index.js +5 -0
  365. package/dist/scene/props.js +52 -0
  366. package/dist/scene/types.d.ts +26 -0
  367. package/dist/scene/types.js +1 -0
  368. package/dist/settings.d.ts +33 -11
  369. package/dist/settings.js +136 -51
  370. package/dist/spectral/Bands.svelte +231 -237
  371. package/dist/spectral/Bands.svelte.d.ts +3 -2
  372. package/dist/spectral/BandsAndDos.svelte +29 -29
  373. package/dist/spectral/BrillouinBandsDos.svelte +21 -29
  374. package/dist/spectral/Dos.svelte +75 -77
  375. package/dist/spectral/Dos.svelte.d.ts +2 -1
  376. package/dist/spectral/helpers.d.ts +9 -9
  377. package/dist/spectral/helpers.js +66 -70
  378. package/dist/state.svelte.d.ts +0 -7
  379. package/dist/state.svelte.js +5 -24
  380. package/dist/structure/Arrow.svelte +6 -21
  381. package/dist/structure/ArrowInstances.svelte +160 -0
  382. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  383. package/dist/structure/AtomLegend.svelte +115 -75
  384. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  385. package/dist/structure/Bond.svelte +31 -23
  386. package/dist/structure/CanvasTooltip.svelte +16 -3
  387. package/dist/structure/CellSelect.svelte +22 -29
  388. package/dist/structure/CellSelect.svelte.d.ts +2 -1
  389. package/dist/structure/Cylinder.svelte +24 -40
  390. package/dist/structure/InstancedAtoms.svelte +114 -0
  391. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  392. package/dist/structure/Lattice.svelte +85 -149
  393. package/dist/structure/SiteLabels.svelte +122 -0
  394. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  395. package/dist/structure/Structure.svelte +725 -735
  396. package/dist/structure/Structure.svelte.d.ts +8 -16
  397. package/dist/structure/StructureCarousel.svelte +630 -0
  398. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  399. package/dist/structure/StructureControls.svelte +298 -325
  400. package/dist/structure/StructureControls.svelte.d.ts +5 -3
  401. package/dist/structure/StructureExportPane.svelte +62 -168
  402. package/dist/structure/StructureExportPane.svelte.d.ts +4 -5
  403. package/dist/structure/StructureInfoPane.svelte +77 -69
  404. package/dist/structure/StructureInfoPane.svelte.d.ts +6 -6
  405. package/dist/structure/StructureScene.svelte +758 -600
  406. package/dist/structure/StructureScene.svelte.d.ts +24 -20
  407. package/dist/structure/StructureViewport.svelte +386 -0
  408. package/dist/structure/StructureViewport.svelte.d.ts +63 -0
  409. package/dist/structure/atom-label-placement.d.ts +18 -0
  410. package/dist/structure/atom-label-placement.js +115 -0
  411. package/dist/structure/atom-properties.d.ts +3 -1
  412. package/dist/structure/atom-properties.js +115 -54
  413. package/dist/structure/bond-order-perception.js +2 -4
  414. package/dist/structure/bonding.d.ts +12 -2
  415. package/dist/structure/bonding.js +172 -73
  416. package/dist/structure/edit-history.d.ts +6 -0
  417. package/dist/structure/edit-history.js +27 -0
  418. package/dist/structure/export.d.ts +25 -4
  419. package/dist/structure/export.js +103 -153
  420. package/dist/structure/format-detect.d.ts +1 -0
  421. package/dist/structure/format-detect.js +22 -0
  422. package/dist/structure/geometry.d.ts +9 -0
  423. package/dist/structure/geometry.js +27 -0
  424. package/dist/structure/index.d.ts +18 -1
  425. package/dist/structure/index.js +15 -2
  426. package/dist/structure/measure.d.ts +1 -1
  427. package/dist/structure/measure.js +6 -12
  428. package/dist/structure/parse.d.ts +5 -3
  429. package/dist/structure/parse.js +551 -567
  430. package/dist/structure/partial-occupancy.d.ts +0 -1
  431. package/dist/structure/partial-occupancy.js +5 -3
  432. package/dist/structure/pbc.d.ts +1 -1
  433. package/dist/structure/pbc.js +204 -51
  434. package/dist/structure/polyhedra.d.ts +40 -0
  435. package/dist/structure/polyhedra.js +587 -0
  436. package/dist/structure/site.d.ts +4 -0
  437. package/dist/structure/site.js +1 -0
  438. package/dist/structure/supercell.d.ts +1 -2
  439. package/dist/structure/supercell.js +10 -15
  440. package/dist/structure/validation.js +5 -6
  441. package/dist/symmetry/SymmetryElementControls.svelte +69 -0
  442. package/dist/symmetry/SymmetryElementControls.svelte.d.ts +9 -0
  443. package/dist/symmetry/SymmetryElements.svelte +350 -0
  444. package/dist/symmetry/SymmetryElements.svelte.d.ts +24 -0
  445. package/dist/symmetry/SymmetryStats.svelte +142 -49
  446. package/dist/symmetry/WyckoffTable.svelte +58 -16
  447. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -0
  448. package/dist/symmetry/cell-transform.js +8 -14
  449. package/dist/symmetry/index.d.ts +15 -4
  450. package/dist/symmetry/index.js +308 -81
  451. package/dist/symmetry/spacegroups.d.ts +5 -1
  452. package/dist/symmetry/spacegroups.js +18 -3
  453. package/dist/symmetry/symmetry-elements.d.ts +33 -0
  454. package/dist/symmetry/symmetry-elements.js +521 -0
  455. package/dist/symmetry/wyckoff-db.d.ts +9 -0
  456. package/dist/symmetry/wyckoff-db.js +87 -0
  457. package/dist/table/HeatmapTable.svelte +1104 -378
  458. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  459. package/dist/table/ToggleMenu.svelte +5 -12
  460. package/dist/table/index.d.ts +21 -6
  461. package/dist/table/index.js +34 -21
  462. package/dist/theme/ThemeControl.svelte +16 -8
  463. package/dist/theme/index.d.ts +1 -5
  464. package/dist/theme/index.js +4 -10
  465. package/dist/theme/themes.mjs +14 -7
  466. package/dist/tooltip/KCoords.svelte +4 -1
  467. package/dist/tooltip/TooltipContent.svelte +2 -5
  468. package/dist/trajectory/Trajectory.svelte +556 -352
  469. package/dist/trajectory/Trajectory.svelte.d.ts +10 -22
  470. package/dist/trajectory/TrajectoryError.svelte +11 -8
  471. package/dist/trajectory/TrajectoryExportPane.svelte +28 -54
  472. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +4 -5
  473. package/dist/trajectory/TrajectoryInfoPane.svelte +88 -99
  474. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -2
  475. package/dist/trajectory/constants.js +6 -2
  476. package/dist/trajectory/extract.js +73 -71
  477. package/dist/trajectory/format-detect.d.ts +0 -1
  478. package/dist/trajectory/format-detect.js +13 -17
  479. package/dist/trajectory/frame-reader.d.ts +2 -1
  480. package/dist/trajectory/frame-reader.js +74 -136
  481. package/dist/trajectory/helpers.d.ts +12 -2
  482. package/dist/trajectory/helpers.js +68 -37
  483. package/dist/trajectory/index.d.ts +1 -0
  484. package/dist/trajectory/index.js +3 -0
  485. package/dist/trajectory/parse/ase.d.ts +9 -1
  486. package/dist/trajectory/parse/ase.js +47 -32
  487. package/dist/trajectory/parse/diagnostics.d.ts +3 -0
  488. package/dist/trajectory/parse/diagnostics.js +14 -0
  489. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  490. package/dist/trajectory/parse/h5-utils.js +109 -0
  491. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  492. package/dist/trajectory/parse/hdf5.js +116 -106
  493. package/dist/trajectory/parse/index.d.ts +3 -4
  494. package/dist/trajectory/parse/index.js +68 -119
  495. package/dist/trajectory/parse/lammps.d.ts +0 -2
  496. package/dist/trajectory/parse/lammps.js +14 -16
  497. package/dist/trajectory/parse/pymatgen.d.ts +2 -0
  498. package/dist/trajectory/parse/pymatgen.js +74 -0
  499. package/dist/trajectory/parse/vasp.js +13 -9
  500. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  501. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  502. package/dist/trajectory/parse/vaspout-h5.d.ts +5 -0
  503. package/dist/trajectory/parse/vaspout-h5.js +284 -0
  504. package/dist/trajectory/parse/xyz.d.ts +9 -21
  505. package/dist/trajectory/parse/xyz.js +38 -39
  506. package/dist/trajectory/plotting.d.ts +8 -10
  507. package/dist/trajectory/plotting.js +102 -127
  508. package/dist/utils.d.ts +4 -0
  509. package/dist/utils.js +8 -1
  510. package/dist/xrd/XrdPlot.svelte +56 -85
  511. package/dist/xrd/broadening.d.ts +2 -1
  512. package/dist/xrd/broadening.js +2 -1
  513. package/dist/xrd/calc-xrd.js +8 -15
  514. package/dist/xrd/index.d.ts +2 -2
  515. package/dist/xrd/parse.d.ts +0 -1
  516. package/dist/xrd/parse.js +56 -73
  517. package/package.json +77 -36
  518. package/dist/api/mp.d.ts +0 -6
  519. package/dist/api/mp.js +0 -22
  520. package/dist/element/data.json +0 -11864
  521. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  522. package/dist/fermi-surface/marching-cubes.js +0 -2
  523. package/dist/plot/core/hover-lock.svelte.d.ts +0 -14
  524. package/dist/plot/core/hover-lock.svelte.js +0 -45
  525. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  526. package/dist/structure/label-placement.d.ts +0 -14
  527. package/dist/structure/label-placement.js +0 -72
@@ -1,12 +1,11 @@
1
1
  <script lang="ts">
2
- import type { ShowControlsProp } from '../controls'
3
- import { normalize_show_controls } from '../controls'
2
+ import { normalize_show_controls, type ShowControlsProp } from '../controls'
4
3
  import EmptyState from '../EmptyState.svelte'
5
4
  import { StatusMessage } from '../feedback'
6
5
  import Spinner from '../feedback/Spinner.svelte'
7
- import Icon from '../Icon.svelte'
8
- import { create_file_drop_handler, load_from_url } from '../io'
9
- import { set_fullscreen_bg, toggle_fullscreen } from '../layout'
6
+ import { create_file_drop_handler, drag_over_handlers, load_from_url } from '../io'
7
+ import { type FullscreenToggleProp, toggle_fullscreen, ViewerChrome } from '../layout'
8
+ import { sync_fullscreen } from '../layout/fullscreen.svelte'
10
9
  import type { Vec3 } from '../math'
11
10
  import { PlotTooltip } from '../plot'
12
11
  import { type CameraProjection, DEFAULTS } from '../settings'
@@ -16,7 +15,6 @@
16
15
  import { Canvas } from '@threlte/core'
17
16
  import type { ComponentProps, Snippet } from 'svelte'
18
17
  import { untrack } from 'svelte'
19
- import { tooltip } from 'svelte-multiselect/attachments'
20
18
  import type { HTMLAttributes } from 'svelte/elements'
21
19
  import BrillouinZoneControls from './BrillouinZoneControls.svelte'
22
20
  import BrillouinZoneExportPane from './BrillouinZoneExportPane.svelte'
@@ -55,7 +53,7 @@
55
53
  surface_color = $bindable(`#4488ff`),
56
54
  surface_opacity = $bindable(0.3),
57
55
  edge_color = $bindable(`#000000`),
58
- edge_width = $bindable(0.05),
56
+ edge_width = $bindable(0.002),
59
57
  show_vectors = $bindable(true),
60
58
  vector_scale = $bindable(1.0),
61
59
  camera_projection = $bindable(`perspective`),
@@ -90,74 +88,71 @@
90
88
  on_file_load,
91
89
  on_error,
92
90
  on_fullscreen_change,
91
+ on_point_hover,
93
92
  on_hover,
94
93
  ...rest
95
- }:
96
- & {
97
- structure?: Crystal
98
- bz_order?: number
99
- bz_data?: BrillouinZoneData
100
- controls_open?: boolean
101
- info_pane_open?: boolean
102
- surface_color?: string
103
- surface_opacity?: number
104
- edge_color?: string
105
- edge_width?: number
106
- show_vectors?: boolean
107
- vector_scale?: number
108
- camera_projection?: CameraProjection
109
- // Irreducible BZ options
110
- show_ibz?: boolean
111
- ibz_color?: string
112
- ibz_opacity?: number
113
- ibz_data?: IrreducibleBZData | null
114
- /**
115
- * Controls visibility configuration.
116
- * - 'always': controls always visible
117
- * - 'hover': controls visible on component hover (default)
118
- * - 'never': controls never visible
119
- * - object: { mode, hidden, style } for fine-grained control
120
- *
121
- * Control names: 'filename', 'fullscreen', 'info-pane', 'export-pane', 'controls'
122
- */
123
- show_controls?: ShowControlsProp
124
- fullscreen?: boolean
125
- width?: number
126
- height?: number
127
- wrapper?: HTMLDivElement
128
- png_dpi?: number
129
- hovered?: boolean
130
- dragover?: boolean
131
- allow_file_drop?: boolean
132
- fullscreen_toggle?: Snippet<[{ fullscreen: boolean }]> | boolean
133
- data_url?: string
134
- on_file_drop?: (content: string | ArrayBuffer, filename: string) => void
135
- spinner_props?: ComponentProps<typeof Spinner>
136
- loading?: boolean
137
- error_msg?: string
138
- structure_string?: string
139
- // K-path points in Cartesian reciprocal space coordinates (not fractional coords)
140
- // Should be computed using the reciprocal lattice matrix (includes 2π factor)
141
- k_path_points?: Vec3[]
142
- // K-path labels with positions in Cartesian reciprocal space coordinates
143
- // Each position should match a corresponding point in k_path_points
144
- k_path_labels?: { position: Vec3; label: string | null }[]
145
- // Currently hovered k-point in Cartesian reciprocal space coordinates
146
- hovered_k_point?: Vec3 | null
147
- // Index of the currently hovered q-point in the band structure
148
- hovered_qpoint_index?: number | null
149
- // Called with the q-point index when the user hovers the k-path in the BZ (null on leave)
150
- on_kpath_hover?: (qpoint_index: number | null) => void
151
- children?: Snippet<
152
- [{ structure?: Crystal; bz_data?: BrillouinZoneData }]
153
- >
154
- tooltip_config?: BZTooltipProp
155
- on_file_load?: (data: BZHandlerData) => void
156
- on_error?: (data: BZHandlerData) => void
157
- on_fullscreen_change?: (data: BZHandlerData) => void
158
- on_hover?: (data: BZHoverData | null) => void
159
- }
160
- & HTMLAttributes<HTMLDivElement> = $props()
94
+ }: {
95
+ structure?: Crystal
96
+ bz_order?: number
97
+ bz_data?: BrillouinZoneData
98
+ controls_open?: boolean
99
+ info_pane_open?: boolean
100
+ surface_color?: string
101
+ surface_opacity?: number
102
+ edge_color?: string
103
+ edge_width?: number
104
+ show_vectors?: boolean
105
+ vector_scale?: number
106
+ camera_projection?: CameraProjection
107
+ // Irreducible BZ options
108
+ show_ibz?: boolean
109
+ ibz_color?: string
110
+ ibz_opacity?: number
111
+ ibz_data?: IrreducibleBZData | null
112
+ // Controls visibility configuration.
113
+ // - 'always': controls always visible
114
+ // - 'hover': controls visible on component hover (default)
115
+ // - 'never': controls never visible
116
+ // - object: { mode, hidden, style } for fine-grained control
117
+ //
118
+ // Control names: 'filename', 'fullscreen', 'info-pane', 'export-pane', 'controls'
119
+ show_controls?: ShowControlsProp
120
+ fullscreen?: boolean
121
+ width?: number
122
+ height?: number
123
+ wrapper?: HTMLDivElement
124
+ png_dpi?: number
125
+ hovered?: boolean
126
+ dragover?: boolean
127
+ allow_file_drop?: boolean
128
+ fullscreen_toggle?: FullscreenToggleProp
129
+ data_url?: string
130
+ on_file_drop?: (content: string | ArrayBuffer, filename: string) => void
131
+ spinner_props?: ComponentProps<typeof Spinner>
132
+ loading?: boolean
133
+ error_msg?: string
134
+ structure_string?: string
135
+ // K-path points in Cartesian reciprocal space coordinates (not fractional coords)
136
+ // Should be computed using the reciprocal lattice matrix (includes 2π factor)
137
+ k_path_points?: Vec3[]
138
+ // K-path labels with positions in Cartesian reciprocal space coordinates
139
+ // Each position should match a corresponding point in k_path_points
140
+ k_path_labels?: { position: Vec3; label: string | null }[]
141
+ // Currently hovered k-point in Cartesian reciprocal space coordinates
142
+ hovered_k_point?: Vec3 | null
143
+ // Index of the currently hovered q-point in the band structure
144
+ hovered_qpoint_index?: number | null
145
+ // Called with the q-point index when the user hovers the k-path in the BZ (null on leave)
146
+ on_kpath_hover?: (qpoint_index: number | null) => void
147
+ children?: Snippet<[{ structure?: Crystal; bz_data?: BrillouinZoneData }]>
148
+ tooltip_config?: BZTooltipProp
149
+ on_file_load?: (data: BZHandlerData) => void
150
+ on_error?: (data: BZHandlerData) => void
151
+ on_fullscreen_change?: (data: BZHandlerData) => void
152
+ on_point_hover?: (data: BZHoverData | null) => void
153
+ // Deprecated alias for on_point_hover (honored when on_point_hover is unset)
154
+ on_hover?: (data: BZHoverData | null) => void
155
+ } & HTMLAttributes<HTMLDivElement> = $props()
161
156
 
162
157
  let scene = $state(undefined)
163
158
  let camera = $state(undefined)
@@ -165,9 +160,16 @@
165
160
  let current_filename = $state<string | undefined>(undefined)
166
161
  let hover_data = $state<BZHoverData | null>(null)
167
162
 
168
- // Call on_hover callback when hover_data changes
163
+ // Call on_point_hover callback when hover_data changes (on_hover is a deprecated alias)
164
+ let warned_deprecated_on_hover = false
169
165
  $effect(() => {
170
- on_hover?.(hover_data)
166
+ if (on_hover && !on_point_hover && !warned_deprecated_on_hover) {
167
+ warned_deprecated_on_hover = true
168
+ console.warn(
169
+ `BrillouinZone: the on_hover prop was renamed to on_point_hover; the alias will be removed in a future release`,
170
+ )
171
+ }
172
+ ;(on_point_hover ?? on_hover)?.(hover_data)
171
173
  })
172
174
 
173
175
  // Normalize show_controls prop into consistent config
@@ -175,9 +177,7 @@
175
177
 
176
178
  // Parse and load structure from content
177
179
  function parse_structure(content: string | ArrayBuffer, filename: string) {
178
- const text = content instanceof ArrayBuffer
179
- ? new TextDecoder().decode(content)
180
- : content
180
+ const text = content instanceof ArrayBuffer ? new TextDecoder().decode(content) : content
181
181
  const parsed = parse_any_structure(text, filename)
182
182
  if (!parsed) throw new Error(`Failed to parse structure from ${filename}`)
183
183
 
@@ -192,9 +192,7 @@
192
192
  try {
193
193
  parse_structure(content, filename)
194
194
  } catch (err) {
195
- error_msg = `Failed to parse ${filename}: ${
196
- to_error(err).message
197
- }`
195
+ error_msg = `Failed to parse ${filename}: ${to_error(err).message}`
198
196
  on_error?.({ error_msg, filename })
199
197
  }
200
198
  }
@@ -235,9 +233,7 @@
235
233
  analyze_structure_symmetry(structure, {})
236
234
  .then((sym_data) => {
237
235
  if (stale) return
238
- const point_group_ops = extract_point_group_from_operations(
239
- sym_data.operations,
240
- )
236
+ const point_group_ops = extract_point_group_from_operations(sym_data.operations)
241
237
  ibz_data = compute_irreducible_bz(captured_bz, point_group_ops)
242
238
  })
243
239
  .catch((err) => {
@@ -261,12 +257,8 @@
261
257
  if (data_url && !structure) {
262
258
  loading = true
263
259
  error_msg = undefined
264
- load_from_url(
265
- data_url,
266
- (content, filename) =>
267
- on_file_drop
268
- ? on_file_drop(content, filename)
269
- : safe_parse(content, filename),
260
+ load_from_url(data_url, (content, filename) =>
261
+ on_file_drop ? on_file_drop(content, filename) : safe_parse(content, filename),
270
262
  )
271
263
  .catch((err) => handle_error(err, data_url))
272
264
  .finally(() => (loading = false))
@@ -301,7 +293,8 @@
301
293
  if (
302
294
  target instanceof HTMLElement &&
303
295
  (target.tagName === `INPUT` || target.tagName === `TEXTAREA`)
304
- ) return
296
+ )
297
+ return
305
298
 
306
299
  if (event.key === `f` && fullscreen_toggle) toggle_fullscreen(wrapper)
307
300
  else if (event.key === `i`) info_pane_open = !info_pane_open
@@ -311,23 +304,16 @@
311
304
  }
312
305
  }
313
306
 
314
- $effect(() => { // fullscreen and background
315
- if (typeof window === `undefined`) return
316
- const fs_el = document.fullscreenElement
317
- if (fullscreen && fs_el !== wrapper && wrapper) {
318
- wrapper.requestFullscreen().catch(console.error)
319
- } else if (!fullscreen && fs_el === wrapper) document.exitFullscreen()
320
- set_fullscreen_bg(wrapper, fullscreen, `--bz-bg-fullscreen`)
307
+ sync_fullscreen({
308
+ get_wrapper: () => wrapper,
309
+ get_fullscreen: () => fullscreen,
310
+ set_fullscreen: (val) => (fullscreen = val),
311
+ bg_css_var: `--bz-bg-fullscreen`,
312
+ on_change: (val) =>
313
+ on_fullscreen_change?.({ structure, bz_data, bz_order, fullscreen: val }),
321
314
  })
322
315
  </script>
323
316
 
324
- <svelte:document
325
- onfullscreenchange={() => {
326
- fullscreen = Boolean(document.fullscreenElement)
327
- on_fullscreen_change?.({ structure, bz_data, bz_order, fullscreen })
328
- }}
329
- />
330
-
331
317
  <div
332
318
  class:dragover
333
319
  class:active={info_pane_open || controls_open || export_pane_open}
@@ -339,18 +325,13 @@
339
325
  onmouseenter={() => (hovered = true)}
340
326
  onmouseleave={() => (hovered = false)}
341
327
  ondrop={handle_file_drop}
342
- ondragover={(event) => {
343
- event.preventDefault()
344
- if (!allow_file_drop) return
345
- dragover = true
346
- }}
347
- ondragleave={(event) => {
348
- event.preventDefault()
349
- dragover = false
350
- }}
328
+ {...drag_over_handlers({
329
+ allow: () => allow_file_drop,
330
+ set_dragover: (over) => (dragover = over),
331
+ })}
351
332
  {onkeydown}
352
333
  {...rest}
353
- class="brillouin-zone {rest.class ?? ``}"
334
+ class={[`brillouin-zone`, rest.class]}
354
335
  >
355
336
  {@render children?.({ structure, bz_data })}
356
337
  {#if loading}
@@ -358,65 +339,45 @@
358
339
  {:else if error_msg}
359
340
  <StatusMessage bind:message={error_msg} type="error" dismissible />
360
341
  {:else if structure && `lattice` in structure}
361
- <section
362
- class="control-buttons {controls_config.class}"
363
- style={controls_config.style}
342
+ <ViewerChrome
343
+ {controls_config}
344
+ filename={current_filename}
345
+ {fullscreen}
346
+ {fullscreen_toggle}
347
+ {wrapper}
364
348
  >
365
- {#if controls_config.mode !== `never`}
366
- {#if current_filename && controls_config.visible(`filename`)}
367
- <span class="filename">{current_filename}</span>
368
- {/if}
369
-
370
- {#if fullscreen_toggle && controls_config.visible(`fullscreen`)}
371
- <button
372
- type="button"
373
- onclick={() => fullscreen_toggle && toggle_fullscreen(wrapper)}
374
- title="{fullscreen ? `Exit` : `Enter`} fullscreen"
375
- aria-pressed={fullscreen}
376
- class="fullscreen-toggle"
377
- {@attach tooltip()}
378
- >
379
- {#if typeof fullscreen_toggle === `function`}
380
- {@render fullscreen_toggle({ fullscreen })}
381
- {:else}
382
- <Icon icon="{fullscreen ? `Exit` : ``}Fullscreen" />
383
- {/if}
384
- </button>
385
- {/if}
386
-
387
- {#if controls_config.visible(`info-pane`)}
388
- <BrillouinZoneInfoPane {structure} {bz_data} bind:pane_open={info_pane_open} />
389
- {/if}
349
+ {#if controls_config.visible(`info-pane`)}
350
+ <BrillouinZoneInfoPane {structure} {bz_data} bind:pane_open={info_pane_open} />
351
+ {/if}
390
352
 
391
- {#if controls_config.visible(`export-pane`)}
392
- <BrillouinZoneExportPane
393
- bind:export_pane_open
394
- {bz_data}
395
- {wrapper}
396
- {scene}
397
- {camera}
398
- bind:png_dpi
399
- filename={current_filename || `brillouin-zone`}
400
- />
401
- {/if}
353
+ {#if controls_config.visible(`export-pane`)}
354
+ <BrillouinZoneExportPane
355
+ bind:export_pane_open
356
+ {bz_data}
357
+ {wrapper}
358
+ {scene}
359
+ {camera}
360
+ bind:png_dpi
361
+ filename={current_filename || `brillouin-zone`}
362
+ />
363
+ {/if}
402
364
 
403
- {#if controls_config.visible(`controls`)}
404
- <BrillouinZoneControls
405
- bind:controls_open
406
- bind:bz_order
407
- bind:surface_color
408
- bind:surface_opacity
409
- bind:edge_color
410
- bind:edge_width
411
- bind:show_vectors
412
- bind:camera_projection
413
- bind:show_ibz
414
- bind:ibz_color
415
- bind:ibz_opacity
416
- />
417
- {/if}
365
+ {#if controls_config.visible(`controls`)}
366
+ <BrillouinZoneControls
367
+ bind:controls_open
368
+ bind:bz_order
369
+ bind:surface_color
370
+ bind:surface_opacity
371
+ bind:edge_color
372
+ bind:edge_width
373
+ bind:show_vectors
374
+ bind:camera_projection
375
+ bind:show_ibz
376
+ bind:ibz_color
377
+ bind:ibz_opacity
378
+ />
418
379
  {/if}
419
- </section>
380
+ </ViewerChrome>
420
381
 
421
382
  {#if typeof WebGLRenderingContext !== `undefined`}
422
383
  <div style="overflow: hidden; height: 100%">
@@ -452,7 +413,7 @@
452
413
  y={hover_data.screen_position.y}
453
414
  bg_color={hover_data.is_ibz ? ibz_color : surface_color}
454
415
  fixed
455
- style="z-index: calc(var(--bz-buttons-z-index, var(--z-index-overlay-controls, 100000000)) + 1); backdrop-filter: blur(4px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3)"
416
+ style="z-index: calc(var(--z-index-overlay-controls, 100000000) + 1); backdrop-filter: blur(4px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3)"
456
417
  >
457
418
  <BrillouinZoneTooltip {hover_data} tooltip={tooltip_config} />
458
419
  </PlotTooltip>
@@ -499,54 +460,6 @@
499
460
  .brillouin-zone :global(canvas) {
500
461
  user-select: none;
501
462
  }
502
- section.control-buttons {
503
- position: absolute;
504
- display: flex;
505
- top: var(--bz-buttons-top, var(--ctrl-btn-top, 1ex));
506
- right: var(--bz-buttons-right, var(--ctrl-btn-right, 1ex));
507
- gap: clamp(6pt, 1cqmin, 9pt);
508
- z-index: var(
509
- --bz-buttons-z-index,
510
- var(--z-index-overlay-controls, 100000000)
511
- );
512
- opacity: 0;
513
- pointer-events: none;
514
- transition: opacity 0.2s ease;
515
- align-items: center;
516
- }
517
- /* Mode: always - controls always visible */
518
- section.control-buttons.always-visible {
519
- opacity: 1;
520
- pointer-events: auto;
521
- }
522
- /* Mode: hover - controls visible on component hover */
523
- .brillouin-zone:hover section.control-buttons.hover-visible,
524
- .brillouin-zone:focus-within section.control-buttons.hover-visible {
525
- opacity: 1;
526
- pointer-events: auto;
527
- }
528
- /* Mode: never - stays hidden (default state, no additional CSS needed) */
529
- section.control-buttons > :global(button) {
530
- background-color: transparent;
531
- display: flex;
532
- padding: 4px;
533
- border-radius: var(--border-radius, 3pt);
534
- font-size: clamp(0.85em, 2cqmin, 1.3em);
535
- }
536
- section.control-buttons :global(button:hover) {
537
- background-color: color-mix(in srgb, currentColor 8%, transparent);
538
- }
539
- .filename {
540
- font-family: monospace;
541
- font-size: 0.9em;
542
- background: var(--code-bg, rgba(0, 0, 0, 0.1));
543
- padding: 3pt 6pt;
544
- border-radius: 3pt;
545
- max-width: 200px;
546
- overflow: hidden;
547
- text-overflow: ellipsis;
548
- white-space: nowrap;
549
- }
550
463
  p.warn {
551
464
  text-align: center;
552
465
  padding: 2rem;
@@ -1,5 +1,6 @@
1
- import type { ShowControlsProp } from '../controls';
1
+ import { type ShowControlsProp } from '../controls';
2
2
  import Spinner from '../feedback/Spinner.svelte';
3
+ import { type FullscreenToggleProp } from '../layout';
3
4
  import type { Vec3 } from '../math';
4
5
  import { type CameraProjection } from '../settings';
5
6
  import type { Crystal } from '../structure';
@@ -32,15 +33,6 @@ type $$ComponentProps = {
32
33
  ibz_color?: string;
33
34
  ibz_opacity?: number;
34
35
  ibz_data?: IrreducibleBZData | null;
35
- /**
36
- * Controls visibility configuration.
37
- * - 'always': controls always visible
38
- * - 'hover': controls visible on component hover (default)
39
- * - 'never': controls never visible
40
- * - object: { mode, hidden, style } for fine-grained control
41
- *
42
- * Control names: 'filename', 'fullscreen', 'info-pane', 'export-pane', 'controls'
43
- */
44
36
  show_controls?: ShowControlsProp;
45
37
  fullscreen?: boolean;
46
38
  width?: number;
@@ -50,9 +42,7 @@ type $$ComponentProps = {
50
42
  hovered?: boolean;
51
43
  dragover?: boolean;
52
44
  allow_file_drop?: boolean;
53
- fullscreen_toggle?: Snippet<[{
54
- fullscreen: boolean;
55
- }]> | boolean;
45
+ fullscreen_toggle?: FullscreenToggleProp;
56
46
  data_url?: string;
57
47
  on_file_drop?: (content: string | ArrayBuffer, filename: string) => void;
58
48
  spinner_props?: ComponentProps<typeof Spinner>;
@@ -67,18 +57,17 @@ type $$ComponentProps = {
67
57
  hovered_k_point?: Vec3 | null;
68
58
  hovered_qpoint_index?: number | null;
69
59
  on_kpath_hover?: (qpoint_index: number | null) => void;
70
- children?: Snippet<[
71
- {
72
- structure?: Crystal;
73
- bz_data?: BrillouinZoneData;
74
- }
75
- ]>;
60
+ children?: Snippet<[{
61
+ structure?: Crystal;
62
+ bz_data?: BrillouinZoneData;
63
+ }]>;
76
64
  tooltip_config?: BZTooltipProp;
77
65
  on_file_load?: (data: BZHandlerData) => void;
78
66
  on_error?: (data: BZHandlerData) => void;
79
67
  on_fullscreen_change?: (data: BZHandlerData) => void;
68
+ on_point_hover?: (data: BZHoverData | null) => void;
80
69
  on_hover?: (data: BZHoverData | null) => void;
81
70
  } & HTMLAttributes<HTMLDivElement>;
82
- declare const BrillouinZone: import("svelte").Component<$$ComponentProps, {}, "structure" | "dragover" | "height" | "width" | "fullscreen" | "hovered" | "controls_open" | "loading" | "png_dpi" | "camera_projection" | "vector_scale" | "info_pane_open" | "wrapper" | "error_msg" | "bz_order" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "show_ibz" | "ibz_color" | "ibz_opacity" | "bz_data" | "ibz_data">;
71
+ declare const BrillouinZone: import("svelte").Component<$$ComponentProps, {}, "height" | "width" | "dragover" | "fullscreen" | "wrapper" | "hovered" | "controls_open" | "structure" | "camera_projection" | "vector_scale" | "loading" | "png_dpi" | "info_pane_open" | "error_msg" | "bz_order" | "surface_color" | "surface_opacity" | "edge_color" | "edge_width" | "show_vectors" | "show_ibz" | "ibz_color" | "ibz_opacity" | "bz_data" | "ibz_data">;
83
72
  type BrillouinZone = ReturnType<typeof BrillouinZone>;
84
73
  export default BrillouinZone;
@@ -9,7 +9,7 @@
9
9
  surface_color = $bindable(`#4488ff`),
10
10
  surface_opacity = $bindable(0.3),
11
11
  edge_color = $bindable(`#000000`),
12
- edge_width = $bindable(0.05),
12
+ edge_width = $bindable(0.002),
13
13
  show_vectors = $bindable(true),
14
14
  camera_projection = $bindable(`perspective`),
15
15
  // Irreducible BZ options
@@ -84,10 +84,7 @@
84
84
  <SettingsSection
85
85
  title="Edges"
86
86
  current_values={{ edge_color, edge_width }}
87
- on_reset={() => {
88
- edge_color = `#000000`
89
- edge_width = 0.05
90
- }}
87
+ on_reset={() => ([edge_color, edge_width] = [`#000000`, 0.002])}
91
88
  >
92
89
  <label>
93
90
  <span>Color:</span>
@@ -95,7 +92,7 @@
95
92
  </label>
96
93
  <label>
97
94
  <span>Width:</span>
98
- <input type="range" min="0.01" max="0.2" step="0.01" bind:value={edge_width} />
95
+ <input type="range" min="0.002" max="0.02" step="0.001" bind:value={edge_width} />
99
96
  <span class="value">{edge_width.toFixed(2)}</span>
100
97
  </label>
101
98
  </SettingsSection>