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,206 @@
1
+ // Theme Detection for Embedded MatterViz Views
2
+ import { luminance } from '../colors';
3
+ import { COLOR_THEMES } from './';
4
+ // oxlint-disable-next-line import/no-unassigned-import -- registers built-in themes
5
+ import './themes.mjs';
6
+ // Per-element watcher (callback + last-seen theme for dedup + the element's own
7
+ // Shadow-host observer). Widgets can mount in different roots with different
8
+ // themes, so each is tracked and torn down independently.
9
+ const element_watchers = new Map();
10
+ // Shared document observer + media-query listener, created with the first widget
11
+ // and disconnected with the last (counted via element_watchers.size).
12
+ let doc_observer = null;
13
+ let media_query_listener = null;
14
+ // Pending debounce timer shared across all mutation sources; cleared before each
15
+ // reschedule so bursts of mutations collapse into a single notify_theme_change.
16
+ let notify_timer = null;
17
+ const observe_opts = { attributes: true, attributeFilter: [`class`, `data-theme`] };
18
+ export function detect_parent_theme(target_element) {
19
+ try {
20
+ // Check Shadow DOM context
21
+ if (target_element) {
22
+ const root_node = target_element.getRootNode();
23
+ if (root_node !== document && root_node instanceof ShadowRoot) {
24
+ const theme = check_element_hierarchy(root_node.host);
25
+ if (theme)
26
+ return theme;
27
+ }
28
+ }
29
+ // Check document theme indicators
30
+ const theme_classes = [
31
+ `dark-theme`,
32
+ `light-theme`,
33
+ `vscode-dark`,
34
+ `vscode-light`,
35
+ `dark`,
36
+ `light`,
37
+ ];
38
+ for (const cls of theme_classes) {
39
+ if (document.body.classList.contains(cls)) {
40
+ return cls.includes(`dark`) ? `dark` : `light`;
41
+ }
42
+ }
43
+ // System preference
44
+ if (globalThis.matchMedia) {
45
+ if (globalThis.matchMedia(`(prefers-color-scheme: dark)`).matches)
46
+ return `dark`;
47
+ if (globalThis.matchMedia(`(prefers-color-scheme: light)`).matches)
48
+ return `light`;
49
+ }
50
+ // Jupyter Lab theme API
51
+ const jupyter_theme = globalThis.jupyterlab?.application?.shell?.dataset?.theme;
52
+ if (jupyter_theme) {
53
+ return jupyter_theme.includes(`dark`) ? `dark` : `light`;
54
+ }
55
+ // Jupyter CSS custom properties
56
+ const jp_bg = getComputedStyle(document.documentElement).getPropertyValue(`--jp-layout-color0`);
57
+ if (jp_bg) {
58
+ const is_dark = is_dark_color(jp_bg);
59
+ if (is_dark !== null)
60
+ return is_dark ? `dark` : `light`;
61
+ }
62
+ // Analyze background colors
63
+ const backgrounds = [
64
+ getComputedStyle(document.body).backgroundColor,
65
+ getComputedStyle(document.documentElement).backgroundColor,
66
+ ];
67
+ for (const bg of backgrounds) {
68
+ const is_dark = is_dark_color(bg);
69
+ if (is_dark !== null)
70
+ return is_dark ? `dark` : `light`;
71
+ }
72
+ return `light`;
73
+ }
74
+ catch (error) {
75
+ console.warn(`Theme detection failed, defaulting to light:`, error);
76
+ return `light`;
77
+ }
78
+ }
79
+ function check_element_hierarchy(element) {
80
+ let current_element = element;
81
+ while (current_element) {
82
+ // Check classes
83
+ const class_list = current_element.classList;
84
+ if (class_list.contains(`dark-theme`) ||
85
+ class_list.contains(`vscode-dark`) ||
86
+ class_list.contains(`dark`))
87
+ return `dark`;
88
+ if (class_list.contains(`light-theme`) ||
89
+ class_list.contains(`vscode-light`) ||
90
+ class_list.contains(`light`))
91
+ return `light`;
92
+ // Check data attributes
93
+ const data_theme = current_element.getAttribute(`data-theme`);
94
+ if (data_theme === `dark`)
95
+ return `dark`;
96
+ if (data_theme === `light`)
97
+ return `light`;
98
+ // Check computed styles
99
+ const computed_style = getComputedStyle(current_element);
100
+ const bg_color = computed_style.backgroundColor;
101
+ const text_color = computed_style.color;
102
+ const is_dark = is_dark_color(bg_color);
103
+ if (is_dark !== null)
104
+ return is_dark ? `dark` : `light`;
105
+ const text_is_dark = is_dark_color(text_color);
106
+ if (text_is_dark !== null)
107
+ return text_is_dark ? `light` : `dark`;
108
+ current_element = current_element.parentElement;
109
+ }
110
+ return null;
111
+ }
112
+ function is_dark_color(color) {
113
+ if (!color || [`transparent`, `rgba(0, 0, 0, 0)`, `initial`, `inherit`].includes(color)) {
114
+ return null;
115
+ }
116
+ return luminance(color) < 0.5;
117
+ }
118
+ function notify_theme_change() {
119
+ notify_timer = null;
120
+ // Re-detect every element's theme; notify only those whose theme changed.
121
+ for (const [element, watcher] of element_watchers) {
122
+ const new_theme = detect_parent_theme(element);
123
+ if (new_theme !== watcher.theme) {
124
+ watcher.theme = new_theme;
125
+ watcher.callback(new_theme);
126
+ }
127
+ }
128
+ }
129
+ const schedule_notify = () => {
130
+ // Debounce: cancel any pending notify so only the latest mutation burst fires.
131
+ if (notify_timer)
132
+ clearTimeout(notify_timer);
133
+ notify_timer = setTimeout(notify_theme_change, 10);
134
+ };
135
+ function on_dom_mutation(mutations) {
136
+ if (mutations.some((mut) => mut.type === `attributes` &&
137
+ (mut.attributeName === `class` || mut.attributeName === `data-theme`)))
138
+ schedule_notify();
139
+ }
140
+ // Register a widget element + its theme-change callback. Returns a disposer that
141
+ // removes this element's subscriber and Shadow-host observer and, once the last
142
+ // widget is gone, disconnects the shared document/media-query watchers (fixing a
143
+ // leak where observers stayed attached for the page's lifetime).
144
+ export function watch_theme(target_element, callback) {
145
+ try {
146
+ // Shared document-level + system-preference watchers (created once for all).
147
+ if (!doc_observer) {
148
+ doc_observer = new MutationObserver(on_dom_mutation);
149
+ doc_observer.observe(document.documentElement, observe_opts);
150
+ if (document.body)
151
+ doc_observer.observe(document.body, observe_opts);
152
+ }
153
+ if (!media_query_listener && globalThis.matchMedia) {
154
+ media_query_listener = globalThis.matchMedia(`(prefers-color-scheme: dark)`);
155
+ media_query_listener.addEventListener(`change`, schedule_notify);
156
+ }
157
+ // Shadow DOM hosts (e.g. marimo cells) carry the theme class/data-theme but
158
+ // aren't reachable from document, so observe each widget's host individually
159
+ // (not just the first widget's).
160
+ let shadow_observer = null;
161
+ const root_node = target_element.getRootNode();
162
+ if (root_node instanceof ShadowRoot) {
163
+ shadow_observer = new MutationObserver(on_dom_mutation);
164
+ shadow_observer.observe(root_node.host, observe_opts);
165
+ }
166
+ element_watchers.set(target_element, {
167
+ callback,
168
+ theme: detect_parent_theme(target_element),
169
+ shadow_observer,
170
+ });
171
+ }
172
+ catch (error) {
173
+ console.warn(`Failed to setup theme watchers:`, error);
174
+ }
175
+ return () => {
176
+ element_watchers.get(target_element)?.shadow_observer?.disconnect();
177
+ element_watchers.delete(target_element);
178
+ if (element_watchers.size > 0)
179
+ return; // other widgets still need shared watchers
180
+ if (notify_timer) {
181
+ clearTimeout(notify_timer); // drop a pending notify; no widgets left to update
182
+ notify_timer = null;
183
+ }
184
+ doc_observer?.disconnect();
185
+ doc_observer = null;
186
+ media_query_listener?.removeEventListener(`change`, schedule_notify);
187
+ media_query_listener = null;
188
+ };
189
+ }
190
+ export function get_theme_css(theme_type, is_shadow_dom = false) {
191
+ const theme_name = COLOR_THEMES[theme_type];
192
+ // Get theme data (matterviz/themes.js sets this)
193
+ const theme = globalThis.MATTERVIZ_THEMES?.[theme_name];
194
+ const css_map = globalThis.MATTERVIZ_CSS_MAP;
195
+ if (!theme || !css_map) {
196
+ console.warn(`Theme data not available, skipping theme application`);
197
+ return ``;
198
+ }
199
+ const css_vars = Object.entries(theme)
200
+ .map(([key, value]) => (css_map[key] ? `${css_map[key]}: ${value};` : ``))
201
+ .filter(Boolean)
202
+ .join(`\n\t`);
203
+ // Use :host for Shadow DOM, :root for regular DOM
204
+ const selector = is_shadow_dom ? `:host` : `:root`;
205
+ return `${selector} {\n\t${css_vars}\n}`;
206
+ }
@@ -1,3 +1,8 @@
1
+ declare global {
2
+ var MATTERVIZ_THEMES: Record<string, Record<string, string>> | undefined;
3
+ var MATTERVIZ_CSS_MAP: Record<string, string> | undefined;
4
+ }
5
+ export declare const THEME_STORAGE_KEY = "matterviz-theme";
1
6
  export declare const COLOR_THEMES: {
2
7
  readonly light: "light";
3
8
  readonly dark: "dark";
@@ -22,8 +27,3 @@ export declare const get_theme_preference: () => ThemeMode;
22
27
  export declare const save_theme_preference: (mode: ThemeMode) => void;
23
28
  export declare const get_system_mode: () => ThemeType;
24
29
  export declare const apply_theme_to_dom: (mode: ThemeMode) => void;
25
- export declare const light_theme: () => any;
26
- export declare const dark_theme: () => any;
27
- export declare const white_theme: () => any;
28
- export declare const black_theme: () => any;
29
- export declare const get_theme_by_name: (name: ThemeName) => any;
@@ -1,6 +1,6 @@
1
1
  // Theme System for MatterViz
2
2
  const is_browser = typeof window !== `undefined`;
3
- const storage_key = `matterviz-theme`;
3
+ export const THEME_STORAGE_KEY = `matterviz-theme`;
4
4
  // Core theme constants
5
5
  export const COLOR_THEMES = {
6
6
  light: `light`,
@@ -32,7 +32,7 @@ export const get_theme_preference = () => {
32
32
  if (!is_browser)
33
33
  return AUTO_THEME;
34
34
  try {
35
- const saved = localStorage[storage_key];
35
+ const saved = localStorage[THEME_STORAGE_KEY];
36
36
  return is_valid_theme_mode(saved ?? ``) ? saved : AUTO_THEME;
37
37
  }
38
38
  catch {
@@ -41,13 +41,13 @@ export const get_theme_preference = () => {
41
41
  };
42
42
  export const save_theme_preference = (mode) => {
43
43
  try {
44
- localStorage[storage_key] = mode;
44
+ localStorage[THEME_STORAGE_KEY] = mode;
45
45
  }
46
46
  catch {
47
47
  // Silently fail if localStorage is unavailable
48
48
  }
49
49
  };
50
- export const get_system_mode = () => is_browser && matchMedia(`(prefers-color-scheme: dark)`).matches
50
+ export const get_system_mode = () => is_browser && globalThis.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches
51
51
  ? COLOR_THEMES.dark
52
52
  : COLOR_THEMES.light;
53
53
  export const apply_theme_to_dom = (mode) => {
@@ -68,12 +68,5 @@ export const apply_theme_to_dom = (mode) => {
68
68
  });
69
69
  root.setAttribute(`data-theme`, resolved);
70
70
  // Set color-scheme to ensure form elements respect the theme
71
- const color_scheme = THEME_TYPE[resolved];
72
- root.style.setProperty(`color-scheme`, color_scheme);
71
+ root.style.setProperty(`color-scheme`, THEME_TYPE[resolved]);
73
72
  };
74
- // Theme getters
75
- export const light_theme = () => globalThis.MATTERVIZ_THEMES?.[COLOR_THEMES.light] ?? {};
76
- export const dark_theme = () => globalThis.MATTERVIZ_THEMES?.[COLOR_THEMES.dark] ?? {};
77
- export const white_theme = () => globalThis.MATTERVIZ_THEMES?.[COLOR_THEMES.white] ?? {};
78
- export const black_theme = () => globalThis.MATTERVIZ_THEMES?.[COLOR_THEMES.black] ?? {};
79
- export const get_theme_by_name = (name) => globalThis.MATTERVIZ_THEMES?.[name] ?? {};
@@ -2,23 +2,21 @@
2
2
  // Note: This file needs to be symlinked into static/ to be importable by app.html before initial page render to prevent flashing colors before client-side JS kicks in. It also needs to be in src/lib so it gets packaged and shipped to NPM for use by the anywidgets in pymatviz.
3
3
  // Can't use exports in this file as would then require type="module" in app.html to import which would defer until after HTML is ready (module files are always deferred).
4
4
 
5
- // Text colors
6
- const txt_light = `#374151` // Dark gray
7
- const txt_dark = `#eee` // Light gray
8
- const txt_white = `#000000` // Black
9
- const txt_black = `#f5f5f5` // Off-white
10
-
11
- // Page backgrounds
12
- const page_bg_light = `#f1f3f5` // Light gray
13
- const page_bg_dark = `#18171c` // Very dark blue
14
- const page_bg_white = `#ffffff` // Pure white
15
- const page_bg_black = `#000000` // Pure black
5
+ // Text colors (also GitHub corner bg + plot legend item color)
6
+ const txt = {
7
+ light: `#374151`, // Dark gray
8
+ dark: `#eee`, // Light gray
9
+ white: `#000000`, // Black
10
+ black: `#f5f5f5`, // Off-white
11
+ }
16
12
 
17
- // Borders
18
- const border_light = `#d1d5db` // Gray border
19
- const border_dark = `#404040` // Dark gray border
20
- const border_white = `#d1d5db` // Light border
21
- const border_black = `#404040` // Dark border
13
+ // Page backgrounds (also fullscreen structure bg + GitHub corner fg)
14
+ const page_bg = {
15
+ light: `#f1f3f5`, // Light gray
16
+ dark: `#18171c`, // Very dark blue
17
+ white: `#ffffff`, // Pure white
18
+ black: `#000000`, // Pure black
19
+ }
22
20
 
23
21
  // Accents
24
22
  const acc_light = `#4f46e5` // Indigo
@@ -26,7 +24,7 @@ const acc_dark = `cornflowerblue` // Light blue
26
24
  const acc_white = `#2563eb` // Blue
27
25
  const acc_black = `cornflowerblue`
28
26
 
29
- // Helper functions for common patterns
27
+ // Helper for common button-like background patterns
30
28
  const btn_bg = (dark_op, light_op) => ({
31
29
  light: `rgba(0, 0, 0, ${light_op})`,
32
30
  dark: `rgba(255, 255, 255, ${dark_op})`,
@@ -34,22 +32,21 @@ const btn_bg = (dark_op, light_op) => ({
34
32
  black: `rgba(255, 255, 255, ${dark_op})`,
35
33
  })
36
34
 
37
- const tooltip_bg = (light_bg, dark_bg, light_op = 0.95, dark_op = 0.95) => ({
38
- light: `rgba(${light_bg}, ${light_op})`,
39
- dark: `rgba(${dark_bg}, ${dark_op})`,
40
- white: `rgba(255, 255, 255, 0.98)`,
41
- black: `rgba(20, 20, 20, 0.98)`,
42
- })
35
+ // Slight contrast shading drawn behind plot SVGs and structure canvases so they read
36
+ // as panels sitting on top of the page background. Shared so a plot and a structure
37
+ // shown side by side (e.g. trajectory view) get an identical tint. Kept subtle; light
38
+ // modes darken, dark modes lighten.
39
+ const canvas_bg = {
40
+ light: `rgba(0, 0, 0, 0.03)`,
41
+ dark: `rgba(255, 255, 255, 0.07)`,
42
+ white: `rgba(0, 0, 0, 0.025)`,
43
+ black: `rgba(255, 255, 255, 0.1)`,
44
+ }
43
45
 
44
46
  const themes = {
45
47
  // Core colors
46
- 'page-bg': {
47
- light: page_bg_light,
48
- dark: page_bg_dark,
49
- white: page_bg_white,
50
- black: page_bg_black,
51
- },
52
- 'text-color': { light: txt_light, dark: txt_dark, white: txt_white, black: txt_black },
48
+ 'page-bg': page_bg,
49
+ 'text-color': txt,
53
50
  'surface-bg': {
54
51
  light: `rgb(237, 238, 239)`,
55
52
  dark: `rgb(33, 36, 43)`,
@@ -57,10 +54,10 @@ const themes = {
57
54
  black: `rgb(19, 19, 19)`,
58
55
  },
59
56
  'border-color': {
60
- light: border_light,
61
- dark: border_dark,
62
- white: border_white,
63
- black: border_black,
57
+ light: `#d1d5db`, // Gray border
58
+ dark: `#404040`, // Dark gray border
59
+ white: `#d1d5db`,
60
+ black: `#404040`,
64
61
  },
65
62
  'accent-color': {
66
63
  light: acc_light,
@@ -147,7 +144,12 @@ const themes = {
147
144
  'btn-disabled-bg': btn_bg(0.1, 0.05),
148
145
 
149
146
  // Tooltips
150
- 'tooltip-bg': tooltip_bg(`243, 244, 246`, `0, 40, 60`),
147
+ 'tooltip-bg': {
148
+ light: `rgba(243, 244, 246, 0.95)`,
149
+ dark: `rgba(0, 40, 60, 0.95)`,
150
+ white: `rgba(255, 255, 255, 0.98)`,
151
+ black: `rgba(20, 20, 20, 0.98)`,
152
+ },
151
153
  'canvas-tooltip-bg': {
152
154
  light: `rgba(226, 232, 240, 0.96)`,
153
155
  dark: `rgba(15, 23, 42, 0.96)`,
@@ -167,19 +169,10 @@ const themes = {
167
169
  black: `1px solid rgba(255, 255, 255, 0.075)`,
168
170
  },
169
171
 
170
- // Structure-specific
171
- 'struct-bg': {
172
- light: `rgba(0, 0, 0, 0.02)`,
173
- dark: `rgba(255, 255, 255, 0.07)`,
174
- white: `rgba(0, 0, 0, 0.01)`,
175
- black: `rgba(255, 255, 255, 0.1)`,
176
- },
177
- 'struct-bg-fullscreen': {
178
- light: page_bg_light,
179
- dark: page_bg_dark,
180
- white: page_bg_white,
181
- black: page_bg_black,
182
- },
172
+ // Plot & structure canvas backgrounds (shared subtle panel shading)
173
+ 'plot-bg': canvas_bg,
174
+ 'struct-bg': canvas_bg,
175
+ 'struct-bg-fullscreen': page_bg,
183
176
 
184
177
  // Pane backgrounds (DraggablePane, etc.)
185
178
  'pane-bg': {
@@ -250,26 +243,11 @@ const themes = {
250
243
  white: `1px solid rgba(0, 0, 0, 0.1)`,
251
244
  black: `1px solid rgba(255, 255, 255, 0.1)`,
252
245
  },
253
- 'plot-legend-item-color': {
254
- light: txt_light,
255
- dark: txt_dark,
256
- white: txt_white,
257
- black: txt_black,
258
- },
246
+ 'plot-legend-item-color': txt,
259
247
  'plot-legend-item-hover-bg-color': btn_bg(0.1, 0.1),
260
248
 
261
- 'github-corner-color': {
262
- light: page_bg_light,
263
- dark: page_bg_dark,
264
- white: page_bg_white,
265
- black: page_bg_black,
266
- },
267
- 'github-corner-bg': {
268
- light: txt_light,
269
- dark: txt_dark,
270
- white: txt_white,
271
- black: txt_black,
272
- },
249
+ 'github-corner-color': page_bg,
250
+ 'github-corner-bg': txt,
273
251
  'github-corner-bg-hover': {
274
252
  light: `#1e40af`, // Darker, more modest blue for light mode
275
253
  dark: `#60a5fa`, // Lighter blue for dark mode
@@ -3,7 +3,10 @@
3
3
  import { format_vec3 } from '../labels'
4
4
  import type { Vec3 } from '../math'
5
5
 
6
- let { cartesian, fractional = null }: {
6
+ let {
7
+ cartesian,
8
+ fractional = null,
9
+ }: {
7
10
  cartesian: Vec3
8
11
  fractional?: Vec3 | null
9
12
  } = $props()
@@ -4,8 +4,8 @@
4
4
  // - If tooltip is a config object, render prefix/suffix around the default content
5
5
  // - Otherwise, render just the default content
6
6
  import { sanitize_html } from '../sanitize'
7
+ import type { TooltipConfig } from './'
7
8
  import type { Snippet } from 'svelte'
8
- import type { TooltipConfig } from './types'
9
9
 
10
10
  let {
11
11
  data,
@@ -20,9 +20,7 @@
20
20
  } = $props()
21
21
 
22
22
  const is_snippet = $derived(typeof tooltip === `function`)
23
- const config = $derived(
24
- !is_snippet && tooltip ? (tooltip as TooltipConfig<T>) : null,
25
- )
23
+ const config = $derived(!is_snippet && tooltip ? (tooltip as TooltipConfig<T>) : null)
26
24
  const prefix = $derived(
27
25
  typeof config?.prefix === `function` ? config.prefix(data) : config?.prefix,
28
26
  )
@@ -47,8 +45,7 @@
47
45
  .tooltip-prefix {
48
46
  margin-bottom: 6px;
49
47
  padding-bottom: 6px;
50
- border-bottom: 1px solid
51
- var(--tooltip-border, var(--border, rgba(128, 128, 128, 0.3)));
48
+ border-bottom: 1px solid var(--tooltip-border, var(--border, rgba(128, 128, 128, 0.3)));
52
49
  }
53
50
  .tooltip-suffix {
54
51
  margin-top: 6px;
@@ -1,5 +1,5 @@
1
+ import type { TooltipConfig } from './';
1
2
  import type { Snippet } from 'svelte';
2
- import type { TooltipConfig } from './types';
3
3
  declare function $$render<T, SnippetArg = T>(): {
4
4
  props: {
5
5
  data: T;
@@ -1,3 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ export type TooltipConfig<T> = {
3
+ prefix?: string | ((data: T) => string);
4
+ suffix?: string | ((data: T) => string);
5
+ };
6
+ export type TooltipProp<T, SnippetArgs extends unknown[] = [{
7
+ hover_data: T;
8
+ }]> = Snippet<SnippetArgs> | TooltipConfig<T>;
1
9
  export { default as KCoords } from './KCoords.svelte';
2
10
  export { default as TooltipContent } from './TooltipContent.svelte';
3
- export type * from './types';