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,8 +1,9 @@
1
1
  <script lang="ts">
2
- import { luminance } from '../../../colors'
2
+ import { get_d3_interpolator, luminance } from '../../../colors'
3
3
  import Spinner from '../../../feedback/Spinner.svelte'
4
4
  import { format_num } from '../../../labels'
5
5
  import { sanitize_html } from '../../../sanitize'
6
+ import { clamp01 } from '../../../utils'
6
7
  import type { Vec2 } from '../../../math'
7
8
  import * as math from '../../../math'
8
9
  import { format } from 'd3-format'
@@ -20,11 +21,15 @@
20
21
  Orientation,
21
22
  ScaleType,
22
23
  } from '../types'
23
- import { get_arcsinh_threshold, get_scale_type_name } from '../types'
24
+ import {
25
+ get_arcsinh_threshold,
26
+ get_scale_type_name,
27
+ SCALE_DEFAULTS,
28
+ } from '../types'
24
29
 
25
30
  let {
26
31
  title = $bindable(),
27
- color_scale = $bindable(`interpolateViridis`),
32
+ color_scale = $bindable(SCALE_DEFAULTS.scheme),
28
33
  bar_style = undefined,
29
34
  title_style = undefined,
30
35
  wrapper_style = undefined,
@@ -59,7 +64,7 @@
59
64
  wrapper_style?: string
60
65
  tick_labels?: (string | number)[] | number
61
66
  tick_format?: string
62
- range?: [number, number]
67
+ range?: Vec2
63
68
  // tick_side determines tick placement relative to orientation:
64
69
  // 'primary' = bottom (horizontal) / right (vertical), outside bar
65
70
  // 'secondary' = top (horizontal) / left (vertical), outside bar
@@ -72,18 +77,18 @@
72
77
  steps?: number
73
78
  // computed "nice" range resulting from snapping ticks
74
79
  // https://github.com/d3/d3-scale/issues/86
75
- nice_range?: [number, number]
80
+ nice_range?: Vec2
76
81
  // type of scale to use for ticks and potentially color (if color_scale_fn not provided)
77
82
  scale_type?: ScaleType
78
83
  // Optional pre-configured d3 color scale function
79
84
  color_scale_fn?: (value: number) => string
80
85
  // Optional domain for pre-configured color scale function
81
- color_scale_domain?: [number, number]
86
+ color_scale_domain?: Vec2
82
87
  // Property selection options (makes title interactive)
83
88
  property_options?: AxisOption[]
84
89
  selected_property_key?: string
85
90
  data_loader?: ColorBarDataLoaderFn
86
- on_property_change?: (key: string, range: [number, number]) => void
91
+ on_property_change?: (key: string, range: Vec2) => void
87
92
  // Color scale selection options
88
93
  color_scale_options?: ColorScaleOption[]
89
94
  selected_color_scale_key?: string
@@ -104,10 +109,9 @@
104
109
  if (orientation === `horizontal`) {
105
110
  return tick_side === `primary` ? `top` : `bottom`
106
111
  } // orientation === `vertical`
107
- // If ticks are primary (right), default label to left
108
- // If ticks are secondary (left), default label to right
109
- return tick_side === `primary` ? `left` : `right`
110
-
112
+ // If ticks are primary (right), default label to left
113
+ // If ticks are secondary (left), default label to right
114
+ return tick_side === `primary` ? `left` : `right`
111
115
  })
112
116
 
113
117
  // Number of ticks to generate
@@ -115,29 +119,43 @@
115
119
  Array.isArray(tick_labels)
116
120
  ? tick_labels.length
117
121
  : typeof tick_labels === `number`
118
- ? tick_labels
119
- : 5,
122
+ ? tick_labels
123
+ : 5,
120
124
  )
121
125
 
126
+ // Log scales need positive bounds: a non-positive max falls back to linear
127
+ // (with a warning), a non-positive min is clamped to LOG_EPS.
128
+ const prepare_log_domain = (
129
+ min: number,
130
+ max: number,
131
+ context: string,
132
+ ): { min: number; use_log: boolean } => {
133
+ if (max <= 0) {
134
+ console.warn(
135
+ `Log scale requires a positive max value ${context}. Received max=${max}. Falling back to linear.`,
136
+ )
137
+ return { min, use_log: false }
138
+ }
139
+ if (min <= 0) {
140
+ console.warn(
141
+ `Log scale received non-positive min value (${min}) ${context}. Using epsilon=${math.LOG_EPS} instead.`,
142
+ )
143
+ return { min: math.LOG_EPS, use_log: true }
144
+ }
145
+ return { min, use_log: true }
146
+ }
147
+
122
148
  // Scale for ticks - based *only* on 'range' prop and 'scale_type' for ticks
123
149
  let scale_for_ticks = $derived.by(() => {
124
150
  const type_name = get_scale_type_name(scale_type)
125
- let use_log_for_ticks = type_name === `log`
126
151
  let [scale_min, scale_max] = range
127
-
128
- // Validate range for log scale ticks and apply epsilon if needed
152
+ let use_log_for_ticks = type_name === `log`
129
153
  if (use_log_for_ticks) {
130
- if (scale_max <= 0) {
131
- console.warn(
132
- `Log scale requires a positive max value for ticks. Received max=${scale_max}. Using linear scale for ticks instead.`,
133
- )
134
- use_log_for_ticks = false
135
- } else if (scale_min <= 0) {
136
- console.warn(
137
- `Log scale received non-positive min value (${scale_min}) for ticks. Using epsilon=${math.LOG_EPS} instead.`,
138
- )
139
- scale_min = math.LOG_EPS // Substitute with epsilon
140
- }
154
+ ;({ min: scale_min, use_log: use_log_for_ticks } = prepare_log_domain(
155
+ scale_min,
156
+ scale_max,
157
+ `for ticks`,
158
+ ))
141
159
  }
142
160
 
143
161
  // For arcsinh, use our custom scale
@@ -208,11 +226,13 @@
208
226
  if (
209
227
  Math.abs(Math.log10(nice_min) % 1) < FRACTIONAL_TOL &&
210
228
  !power_of_10_ticks.includes(nice_min)
211
- ) power_of_10_ticks.unshift(nice_min)
229
+ )
230
+ power_of_10_ticks.unshift(nice_min)
212
231
  if (
213
232
  Math.abs(Math.log10(nice_max) % 1) < FRACTIONAL_TOL &&
214
233
  !power_of_10_ticks.includes(nice_max)
215
- ) power_of_10_ticks.push(nice_max)
234
+ )
235
+ power_of_10_ticks.push(nice_max)
216
236
 
217
237
  // If no powers of 10 are within range (e.g. [0.1, 0.9]), fall back to D3 ticks?
218
238
  // Or just return filtered list which might be empty?
@@ -242,7 +262,6 @@
242
262
  const fraction = idx / (n_ticks - 1)
243
263
  return scale_min + fraction * (scale_max - scale_min)
244
264
  })
245
-
246
265
  })
247
266
 
248
267
  // Update nice_range binding when snapping ticks
@@ -261,7 +280,7 @@
261
280
  if (color_scale_fn) return color_scale_fn // Prioritize passed function
262
281
 
263
282
  // Fallback: create function from scheme name/function in 'color_scale' prop
264
- let interpolator = d3_sc.interpolateViridis // Default interpolator
283
+ let interpolator = get_d3_interpolator(SCALE_DEFAULTS.scheme) // Default interpolator
265
284
  if (typeof color_scale === `string`) {
266
285
  const func_name = color_scale.startsWith(`interpolate`)
267
286
  ? color_scale
@@ -269,9 +288,7 @@
269
288
  if (func_name in d3_sc) {
270
289
  interpolator = d3_sc[func_name as D3InterpolateName]
271
290
  } else {
272
- console.error(
273
- `Color scale '${color_scale}' not found. Falling back on 'Viridis'.`,
274
- )
291
+ console.error(`Color scale '${color_scale}' not found. Falling back on 'Viridis'.`)
275
292
  }
276
293
  } else if (typeof color_scale === `function`) {
277
294
  // User passed a function (assumed interpolator [0,1] -> color)
@@ -285,23 +302,17 @@
285
302
  // Use scale_type for fallback scale creation too. Validate domain for log.
286
303
  let use_log_fallback = type_name === `log`
287
304
  if (use_log_fallback) {
288
- if (max_val <= 0) {
289
- console.warn(
290
- `Log scale requires a positive max value for fallback scale. Received max=${max_val}. Using linear scale for colors.`,
291
- )
292
- use_log_fallback = false
293
- } else if (min_val <= 0) {
294
- console.warn(
295
- `Log scale received non-positive min value (${min_val}) for fallback scale. Using epsilon=${math.LOG_EPS} instead.`,
296
- )
297
- min_val = math.LOG_EPS // Substitute with epsilon
298
- }
305
+ ;({ min: min_val, use_log: use_log_fallback } = prepare_log_domain(
306
+ min_val,
307
+ max_val,
308
+ `for fallback scale`,
309
+ ))
299
310
  }
300
311
 
301
312
  // Use potentially adjusted min/max for domain (ascending)
302
313
  const lo = Math.min(min_val, max_val)
303
314
  const hi = Math.max(min_val, max_val)
304
- const domain_for_scale: [number, number] = [lo, hi]
315
+ const domain_for_scale: Vec2 = [lo, hi]
305
316
 
306
317
  // For arcsinh, create a custom color scale
307
318
  if (type_name === `arcsinh`) {
@@ -312,7 +323,7 @@
312
323
  return (value: number): string => {
313
324
  const t_val = Math.asinh(value / threshold)
314
325
  const normalized = t_max === t_min ? 0.5 : (t_val - t_min) / (t_max - t_min)
315
- return interpolator(Math.max(0, Math.min(1, normalized)))
326
+ return interpolator(clamp01(normalized))
316
327
  }
317
328
  }
318
329
 
@@ -335,27 +346,25 @@
335
346
  // Validate domain for log interpolation and apply epsilon if needed
336
347
  let use_log_interp = type_name === `log`
337
348
  let adjusted_min_ramp = min_ramp_domain
338
- let adjusted_max_ramp = max_ramp_domain
339
-
349
+ const adjusted_max_ramp = max_ramp_domain
340
350
  if (use_log_interp) {
341
- if (max_ramp_domain <= 0) {
342
- console.warn(
343
- `Log scale specified for gradient, but max domain value (${max_ramp_domain}) is not positive. Using linear interpolation.`,
344
- )
345
- use_log_interp = false
346
- } else if (min_ramp_domain <= 0) {
347
- console.warn(
348
- `Log scale specified for gradient, but min domain value (${min_ramp_domain}) is not positive. Using epsilon=${math.LOG_EPS} instead.`,
349
- )
350
- adjusted_min_ramp = math.LOG_EPS // Substitute with epsilon
351
- }
351
+ ;({ min: adjusted_min_ramp, use_log: use_log_interp } = prepare_log_domain(
352
+ min_ramp_domain,
353
+ max_ramp_domain,
354
+ `for gradient`,
355
+ ))
352
356
  }
353
357
 
354
358
  const n_steps = Math.max(2, Math.floor(steps)) // guard against steps <= 1 to avoid NaN/degenerate gradients
355
359
 
356
360
  // Pre-compute loop-invariant values for each scale type
357
- let log_min = 0, log_max = 0, log_span = 0
358
- let asinh_threshold = 1, asinh_min = 0, asinh_max = 0, asinh_span = 0
361
+ let log_min = 0,
362
+ log_max = 0,
363
+ log_span = 0
364
+ let asinh_threshold = 1,
365
+ asinh_min = 0,
366
+ asinh_max = 0,
367
+ asinh_span = 0
359
368
  const linear_span = max_ramp_domain - min_ramp_domain
360
369
 
361
370
  if (use_log_interp) {
@@ -375,13 +384,12 @@
375
384
  let data_value: number
376
385
 
377
386
  if (use_log_interp) {
378
- data_value = log_span === 0
379
- ? adjusted_min_ramp
380
- : 10 ** (log_min + fraction * log_span)
387
+ data_value = log_span === 0 ? adjusted_min_ramp : 10 ** (log_min + fraction * log_span)
381
388
  } else if (type_name === `arcsinh`) {
382
- data_value = asinh_span === 0
383
- ? min_ramp_domain
384
- : Math.sinh(asinh_min + fraction * asinh_span) * asinh_threshold
389
+ data_value =
390
+ asinh_span === 0
391
+ ? min_ramp_domain
392
+ : Math.sinh(asinh_min + fraction * asinh_span) * asinh_threshold
385
393
  } else {
386
394
  data_value = min_ramp_domain + fraction * linear_span
387
395
  }
@@ -398,15 +406,9 @@
398
406
 
399
407
  // CSS variables for bar width/height based on orientation
400
408
  let final_bar_style = $derived(
401
- `--cbar-width: ${
402
- orientation === `horizontal` ? `100%` : `var(--cbar-thickness, 10px)`
403
- };
404
- --cbar-height: ${
405
- orientation === `vertical` ? `100%` : `var(--cbar-thickness, 10px)`
406
- };
407
- background: linear-gradient(${grad_dir}, ${ramped.join(`, `)}); ${
408
- bar_style ?? ``
409
- }`,
409
+ `--cbar-width: ${orientation === `horizontal` ? `100%` : `var(--cbar-thickness, 10px)`};
410
+ --cbar-height: ${orientation === `vertical` ? `100%` : `var(--cbar-thickness, 10px)`};
411
+ background: linear-gradient(${grad_dir}, ${ramped.join(`, `)}); ${bar_style ?? ``}`,
410
412
  )
411
413
 
412
414
  // Calculate additional margin for main label if it overlaps with ticks
@@ -415,11 +417,14 @@
415
417
  if (tick_side === `inside`) return ``
416
418
 
417
419
  // Determine concrete side outside ticks are on
418
- const concrete_outside_tick_side = orientation === `horizontal`
419
- ? tick_side === `primary` ? `bottom` : `top`
420
- : tick_side === `primary`
421
- ? `right`
422
- : `left`
420
+ const concrete_outside_tick_side =
421
+ orientation === `horizontal`
422
+ ? tick_side === `primary`
423
+ ? `bottom`
424
+ : `top`
425
+ : tick_side === `primary`
426
+ ? `right`
427
+ : `left`
423
428
 
424
429
  if (actual_title_side !== concrete_outside_tick_side) return ``
425
430
 
@@ -443,8 +448,7 @@
443
448
  ? `max-width: var(--cbar-label-max-width, 2em);`
444
449
  : ``
445
450
 
446
- return `${size_constraint} ${label_overlap_margin_style} ${title_style ?? ``}`
447
- .trim()
451
+ return `${size_constraint} ${label_overlap_margin_style} ${title_style ?? ``}`.trim()
448
452
  })
449
453
 
450
454
  function get_tick_text_color(tick_value: number): string | null {
@@ -462,9 +466,7 @@
462
466
  }
463
467
 
464
468
  let has_property_select = $derived(property_options && property_options.length > 0)
465
- let has_color_scale_select = $derived(
466
- color_scale_options && color_scale_options.length > 0,
467
- )
469
+ let has_color_scale_select = $derived(color_scale_options && color_scale_options.length > 0)
468
470
  let has_any_select = $derived(has_property_select || has_color_scale_select)
469
471
 
470
472
  // Keep bindable selected keys valid so state matches the select's first-option fallback.
@@ -522,35 +524,31 @@
522
524
  // Align items based on orientation and title position
523
525
  let div_style = $derived(`
524
526
  --cbar-wrapper-align-items: ${
525
- orientation === `vertical` &&
526
- (actual_title_side === `left` || actual_title_side === `right`)
527
- ? `stretch`
528
- : `center`
529
- };
527
+ orientation === `vertical` &&
528
+ (actual_title_side === `left` || actual_title_side === `right`)
529
+ ? `stretch`
530
+ : `center`
531
+ };
530
532
  --cbar-label-display: ${
531
- orientation === `vertical` &&
532
- (actual_title_side === `left` || actual_title_side === `right`)
533
- ? `flex`
534
- : `inline-block`
535
- };
533
+ orientation === `vertical` &&
534
+ (actual_title_side === `left` || actual_title_side === `right`)
535
+ ? `flex`
536
+ : `inline-block`
537
+ };
536
538
  height: ${
537
- orientation === `vertical`
538
- ? `var(--cbar-height, 100%)`
539
- : `var(--cbar-height, auto)`
540
- };
541
- min-height: ${
542
- orientation === `vertical` ? `var(--cbar-min-height, 150px)` : `auto`
543
- };
539
+ orientation === `vertical` ? `var(--cbar-height, 100%)` : `var(--cbar-height, auto)`
540
+ };
541
+ min-height: ${orientation === `vertical` ? `var(--cbar-min-height, 150px)` : `auto`};
544
542
  max-height: ${
545
- orientation === `vertical` ? `var(--cbar-max-height, 1000px)` : `none`
546
- }; ${wrapper_style ?? ``}`)
543
+ orientation === `vertical` ? `var(--cbar-max-height, 1000px)` : `none`
544
+ }; ${wrapper_style ?? ``}`)
547
545
  </script>
548
546
 
549
547
  <div
550
548
  style:flex-direction={wrapper_flex_dir}
551
549
  {...rest}
552
550
  style={div_style + (rest.style ?? ``)}
553
- class="colorbar {rest.class ?? ``}"
551
+ class={[`colorbar`, rest.class]}
554
552
  >
555
553
  {#if title || has_any_select}
556
554
  <div class="title-row {actual_title_side} {orientation}" style={actual_title_style}>
@@ -583,10 +581,7 @@
583
581
  </div>
584
582
  {/if}
585
583
  <div style={final_bar_style} class="bar">
586
- {#each tick_side === `inside` ? ticks_array.slice(1, -1) : ticks_array as
587
- tick_label
588
- (tick_label)
589
- }
584
+ {#each tick_side === `inside` ? ticks_array.slice(1, -1) : ticks_array as tick_label (tick_label)}
590
585
  {@const position_percent =
591
586
  // Use derived scale's mapping function to get position percent
592
587
  scale_for_ticks(tick_label)}
@@ -1,3 +1,4 @@
1
+ import type { Vec2 } from '../../../math';
1
2
  import type { HTMLAttributes } from 'svelte/elements';
2
3
  import type { AxisOption, ColorBarDataLoaderFn, ColorScaleOption, Orientation, ScaleType } from '../types';
3
4
  type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
@@ -9,19 +10,19 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
9
10
  wrapper_style?: string;
10
11
  tick_labels?: (string | number)[] | number;
11
12
  tick_format?: string;
12
- range?: [number, number];
13
+ range?: Vec2;
13
14
  tick_side?: `primary` | `secondary` | `inside`;
14
15
  orientation?: Orientation;
15
16
  snap_ticks?: boolean;
16
17
  steps?: number;
17
- nice_range?: [number, number];
18
+ nice_range?: Vec2;
18
19
  scale_type?: ScaleType;
19
20
  color_scale_fn?: (value: number) => string;
20
- color_scale_domain?: [number, number];
21
+ color_scale_domain?: Vec2;
21
22
  property_options?: AxisOption[];
22
23
  selected_property_key?: string;
23
24
  data_loader?: ColorBarDataLoaderFn;
24
- on_property_change?: (key: string, range: [number, number]) => void;
25
+ on_property_change?: (key: string, range: Vec2) => void;
25
26
  color_scale_options?: ColorScaleOption[];
26
27
  selected_color_scale_key?: string;
27
28
  on_color_scale_change?: (key: string) => void;
@@ -7,7 +7,7 @@
7
7
 
8
8
  let {
9
9
  options = Object.keys(d3_sc).filter((key) =>
10
- key.startsWith(`interpolate`)
10
+ key.startsWith(`interpolate`),
11
11
  ) as D3InterpolateName[],
12
12
  value = $bindable(options[0]),
13
13
  selected = $bindable([]),
@@ -4,11 +4,7 @@
4
4
  import { interpolatePath } from 'd3-interpolate-path'
5
5
  import { untrack } from 'svelte'
6
6
  import { Tween, type TweenOptions } from 'svelte/motion'
7
- import type {
8
- FillGradient,
9
- FillHandlerEvent,
10
- FillRegion,
11
- } from '../types'
7
+ import type { FillGradient, FillHandlerEvent, FillRegion } from '../types'
12
8
  import { unique_id } from '../utils'
13
9
 
14
10
  let {
@@ -37,22 +33,20 @@
37
33
 
38
34
  // Stable instance ID for gradient uniqueness (generated once per component instance)
39
35
  const instance_id = unique_id()
40
- let gradient_id = $derived(
41
- `fill-gradient-${region.id ?? region_idx}-${instance_id}`,
42
- )
36
+ let gradient_id = $derived(`fill-gradient-${region.id ?? region_idx}-${instance_id}`)
43
37
 
44
38
  // On hover (without an explicit hover_style), noticeably raise opacity. A faint fill (e.g. a
45
39
  // low-alpha rgba color at the default 0.3 fill-opacity) is otherwise nearly invisible, so a mere
46
40
  // brightness filter reads as "no change". An explicit hover_style.fill_opacity always wins.
47
41
  let effective_opacity = $derived(
48
42
  is_hovered
49
- ? region.hover_style?.fill_opacity ?? Math.min(1, (region.fill_opacity ?? 0.3) + 0.4)
50
- : region.fill_opacity ?? 0.3,
43
+ ? (region.hover_style?.fill_opacity ?? Math.min(1, (region.fill_opacity ?? 0.3) + 0.4))
44
+ : (region.fill_opacity ?? 0.3),
51
45
  )
52
46
  let effective_fill = $derived(
53
47
  is_hovered && region.hover_style?.fill
54
48
  ? region.hover_style.fill
55
- : region.fill ?? `steelblue`,
49
+ : (region.fill ?? `steelblue`),
56
50
  )
57
51
  let path_fill = $derived(
58
52
  typeof effective_fill === `object` ? `url(#${gradient_id})` : effective_fill,
@@ -137,8 +131,9 @@
137
131
  // Construct FillHandlerEvent from MouseEvent
138
132
  function construct_event(event: MouseEvent): FillHandlerEvent {
139
133
  const current = event.currentTarget
140
- const rect = (current instanceof SVGElement ? current.ownerSVGElement : null)
141
- ?.getBoundingClientRect()
134
+ const rect = (
135
+ current instanceof SVGElement ? current.ownerSVGElement : null
136
+ )?.getBoundingClientRect()
142
137
  const px = event.clientX - (rect?.left ?? 0)
143
138
  const py = event.clientY - (rect?.top ?? 0)
144
139
  const raw_x = x_scale_fn.invert?.(px) ?? 0
@@ -159,9 +154,7 @@
159
154
  }
160
155
 
161
156
  // Type guard for gradient fill
162
- const is_gradient = (
163
- fill: string | FillGradient | undefined,
164
- ): fill is FillGradient =>
157
+ const is_gradient = (fill: string | FillGradient | undefined): fill is FillGradient =>
165
158
  typeof fill === `object` && fill !== null && `type` in fill
166
159
  </script>
167
160
 
@@ -220,7 +213,7 @@
220
213
  fill={path_fill}
221
214
  fill-opacity={effective_opacity}
222
215
  stroke={hover_stroke ?? `none`}
223
- stroke-width={hover_stroke ? region.hover_style?.stroke_width ?? 1.5 : 0}
216
+ stroke-width={hover_stroke ? (region.hover_style?.stroke_width ?? 1.5) : 0}
224
217
  />
225
218
  </g>
226
219