matterviz 0.3.1 → 0.3.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 (358) hide show
  1. package/dist/EmptyState.svelte +10 -2
  2. package/dist/FilePicker.svelte +154 -96
  3. package/dist/Icon.svelte +20 -14
  4. package/dist/MillerIndexInput.svelte +27 -21
  5. package/dist/api/optimade.js +6 -6
  6. package/dist/app.css +216 -178
  7. package/dist/brillouin/BrillouinZone.svelte +299 -198
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +74 -55
  11. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte +277 -165
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  15. package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
  16. package/dist/brillouin/compute.js +11 -6
  17. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  18. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  19. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +847 -0
  20. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  21. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3194 -0
  22. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  23. package/dist/chempot-diagram/ChemPotScene3D.svelte +11 -0
  24. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  25. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  26. package/dist/chempot-diagram/async-compute.svelte.js +77 -0
  27. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  28. package/dist/chempot-diagram/chempot-worker.js +11 -0
  29. package/dist/chempot-diagram/color.d.ts +10 -0
  30. package/dist/chempot-diagram/color.js +32 -0
  31. package/dist/chempot-diagram/compute.d.ts +48 -0
  32. package/dist/chempot-diagram/compute.js +812 -0
  33. package/dist/chempot-diagram/index.d.ts +6 -0
  34. package/dist/chempot-diagram/index.js +6 -0
  35. package/dist/chempot-diagram/pointer.d.ts +16 -0
  36. package/dist/chempot-diagram/pointer.js +40 -0
  37. package/dist/chempot-diagram/temperature.d.ts +15 -0
  38. package/dist/chempot-diagram/temperature.js +36 -0
  39. package/dist/chempot-diagram/types.d.ts +86 -0
  40. package/dist/chempot-diagram/types.js +28 -0
  41. package/dist/colors/index.d.ts +3 -1
  42. package/dist/colors/index.js +9 -3
  43. package/dist/composition/BarChart.svelte +141 -77
  44. package/dist/composition/BubbleChart.svelte +107 -52
  45. package/dist/composition/Composition.svelte +100 -79
  46. package/dist/composition/Formula.svelte +108 -62
  47. package/dist/composition/FormulaFilter.svelte +973 -353
  48. package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
  49. package/dist/composition/PieChart.svelte +199 -99
  50. package/dist/composition/PieChart.svelte.d.ts +1 -1
  51. package/dist/composition/format.d.ts +5 -0
  52. package/dist/composition/format.js +20 -3
  53. package/dist/composition/parse.js +14 -9
  54. package/dist/convex-hull/ConvexHull.svelte +93 -38
  55. package/dist/convex-hull/ConvexHull2D.svelte +551 -393
  56. package/dist/convex-hull/ConvexHull3D.svelte +1303 -825
  57. package/dist/convex-hull/ConvexHull4D.svelte +1012 -686
  58. package/dist/convex-hull/ConvexHullControls.svelte +115 -28
  59. package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
  60. package/dist/convex-hull/ConvexHullStats.svelte +821 -249
  61. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
  62. package/dist/convex-hull/ConvexHullTooltip.svelte +41 -16
  63. package/dist/convex-hull/GasPressureControls.svelte +104 -61
  64. package/dist/convex-hull/StructurePopup.svelte +25 -4
  65. package/dist/convex-hull/TemperatureSlider.svelte +45 -25
  66. package/dist/convex-hull/barycentric-coords.js +13 -7
  67. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  68. package/dist/convex-hull/demo-temperature.js +40 -0
  69. package/dist/convex-hull/gas-thermodynamics.js +17 -12
  70. package/dist/convex-hull/helpers.d.ts +10 -1
  71. package/dist/convex-hull/helpers.js +79 -38
  72. package/dist/convex-hull/index.d.ts +1 -0
  73. package/dist/convex-hull/index.js +1 -0
  74. package/dist/convex-hull/thermodynamics.d.ts +8 -21
  75. package/dist/convex-hull/thermodynamics.js +163 -69
  76. package/dist/convex-hull/types.d.ts +12 -12
  77. package/dist/convex-hull/types.js +0 -12
  78. package/dist/coordination/CoordinationBarPlot.svelte +232 -176
  79. package/dist/element/BohrAtom.svelte +56 -13
  80. package/dist/element/ElementHeading.svelte +7 -2
  81. package/dist/element/ElementPhoto.svelte +15 -9
  82. package/dist/element/ElementStats.svelte +10 -4
  83. package/dist/element/ElementTile.svelte +137 -73
  84. package/dist/element/Nucleus.svelte +39 -11
  85. package/dist/element/data.js +2 -14
  86. package/dist/element/data.json.gz +0 -0
  87. package/dist/element/types.d.ts +1 -0
  88. package/dist/feedback/ClickFeedback.svelte +16 -5
  89. package/dist/feedback/DragOverlay.svelte +10 -2
  90. package/dist/feedback/Spinner.svelte +4 -2
  91. package/dist/feedback/StatusMessage.svelte +8 -2
  92. package/dist/fermi-surface/FermiSlice.svelte +118 -88
  93. package/dist/fermi-surface/FermiSurface.svelte +336 -239
  94. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  95. package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
  96. package/dist/fermi-surface/FermiSurfaceScene.svelte +536 -343
  97. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  98. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
  99. package/dist/fermi-surface/compute.js +16 -20
  100. package/dist/fermi-surface/parse.js +37 -33
  101. package/dist/fermi-surface/symmetry.js +2 -7
  102. package/dist/fermi-surface/types.d.ts +3 -5
  103. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1527 -0
  104. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  105. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  106. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  107. package/dist/heatmap-matrix/index.d.ts +53 -0
  108. package/dist/heatmap-matrix/index.js +100 -0
  109. package/dist/heatmap-matrix/shared.d.ts +2 -0
  110. package/dist/heatmap-matrix/shared.js +4 -0
  111. package/dist/icons.d.ts +111 -0
  112. package/dist/icons.js +158 -0
  113. package/dist/index.d.ts +5 -2
  114. package/dist/index.js +5 -2
  115. package/dist/io/decompress.js +1 -1
  116. package/dist/io/export.d.ts +3 -0
  117. package/dist/io/export.js +138 -140
  118. package/dist/io/file-drop.d.ts +7 -0
  119. package/dist/io/file-drop.js +43 -0
  120. package/dist/io/index.d.ts +2 -2
  121. package/dist/io/index.js +2 -112
  122. package/dist/io/is-binary.js +2 -3
  123. package/dist/io/types.d.ts +1 -0
  124. package/dist/io/url-drop.d.ts +2 -0
  125. package/dist/io/url-drop.js +117 -0
  126. package/dist/isosurface/Isosurface.svelte +220 -110
  127. package/dist/isosurface/IsosurfaceControls.svelte +65 -28
  128. package/dist/isosurface/parse.js +104 -56
  129. package/dist/isosurface/slice.d.ts +2 -1
  130. package/dist/isosurface/slice.js +8 -13
  131. package/dist/isosurface/types.d.ts +14 -1
  132. package/dist/isosurface/types.js +152 -5
  133. package/dist/labels.d.ts +2 -1
  134. package/dist/labels.js +12 -8
  135. package/dist/layout/FullscreenToggle.svelte +11 -2
  136. package/dist/layout/InfoCard.svelte +38 -6
  137. package/dist/layout/InfoTag.svelte +125 -94
  138. package/dist/layout/PropertyFilter.svelte +82 -37
  139. package/dist/layout/SettingsSection.svelte +85 -55
  140. package/dist/layout/SubpageGrid.svelte +82 -0
  141. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  142. package/dist/layout/index.d.ts +1 -0
  143. package/dist/layout/index.js +1 -0
  144. package/dist/layout/json-tree/JsonNode.svelte +266 -223
  145. package/dist/layout/json-tree/JsonTree.svelte +516 -429
  146. package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
  147. package/dist/layout/json-tree/JsonValue.svelte +281 -173
  148. package/dist/layout/json-tree/types.d.ts +10 -2
  149. package/dist/layout/json-tree/utils.d.ts +2 -0
  150. package/dist/layout/json-tree/utils.js +37 -2
  151. package/dist/marching-cubes.js +25 -2
  152. package/dist/math.d.ts +20 -17
  153. package/dist/math.js +474 -57
  154. package/dist/overlays/ContextMenu.svelte +66 -40
  155. package/dist/overlays/DraggablePane.svelte +331 -154
  156. package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
  157. package/dist/periodic-table/PeriodicTable.svelte +278 -145
  158. package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
  159. package/dist/periodic-table/PropertySelect.svelte +25 -7
  160. package/dist/periodic-table/TableInset.svelte +8 -3
  161. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +559 -267
  162. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
  163. package/dist/phase-diagram/PhaseDiagramControls.svelte +131 -51
  164. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
  165. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  166. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  167. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +160 -110
  168. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +8 -1
  169. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +217 -86
  170. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
  171. package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
  172. package/dist/phase-diagram/build-diagram.js +9 -9
  173. package/dist/phase-diagram/colors.js +1 -3
  174. package/dist/phase-diagram/index.d.ts +2 -0
  175. package/dist/phase-diagram/index.js +2 -0
  176. package/dist/phase-diagram/parse.js +10 -9
  177. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  178. package/dist/phase-diagram/svg-to-diagram.js +869 -0
  179. package/dist/phase-diagram/types.d.ts +10 -0
  180. package/dist/phase-diagram/utils.d.ts +8 -4
  181. package/dist/phase-diagram/utils.js +219 -74
  182. package/dist/plot/AxisLabel.svelte +51 -0
  183. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  184. package/dist/plot/BarPlot.svelte +1461 -768
  185. package/dist/plot/BarPlot.svelte.d.ts +3 -3
  186. package/dist/plot/BarPlotControls.svelte +33 -6
  187. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  188. package/dist/plot/ColorBar.svelte +533 -383
  189. package/dist/plot/ColorBar.svelte.d.ts +1 -1
  190. package/dist/plot/ColorScaleSelect.svelte +28 -7
  191. package/dist/plot/ElementScatter.svelte +38 -16
  192. package/dist/plot/FillArea.svelte +152 -92
  193. package/dist/plot/Histogram.svelte +1162 -709
  194. package/dist/plot/Histogram.svelte.d.ts +1 -1
  195. package/dist/plot/HistogramControls.svelte +81 -18
  196. package/dist/plot/HistogramControls.svelte.d.ts +6 -2
  197. package/dist/plot/InteractiveAxisLabel.svelte +34 -11
  198. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
  199. package/dist/plot/Line.svelte +63 -28
  200. package/dist/plot/PlotControls.svelte +221 -96
  201. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  202. package/dist/plot/PlotLegend.svelte +174 -91
  203. package/dist/plot/PlotTooltip.svelte +45 -6
  204. package/dist/plot/PortalSelect.svelte +175 -146
  205. package/dist/plot/ReferenceLine.svelte +77 -22
  206. package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
  207. package/dist/plot/ReferenceLine3D.svelte +132 -107
  208. package/dist/plot/ReferencePlane.svelte +146 -123
  209. package/dist/plot/ScatterPlot.svelte +1880 -1156
  210. package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
  211. package/dist/plot/ScatterPlot3D.svelte +256 -131
  212. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  213. package/dist/plot/ScatterPlot3DControls.svelte +300 -297
  214. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
  215. package/dist/plot/ScatterPlot3DScene.svelte +608 -406
  216. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  217. package/dist/plot/ScatterPlotControls.svelte +150 -70
  218. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  219. package/dist/plot/ScatterPoint.svelte +98 -26
  220. package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
  221. package/dist/plot/SpacegroupBarPlot.svelte +142 -85
  222. package/dist/plot/Surface3D.svelte +159 -108
  223. package/dist/plot/ZeroLines.svelte +96 -0
  224. package/dist/plot/ZeroLines.svelte.d.ts +32 -0
  225. package/dist/plot/ZoomRect.svelte +23 -0
  226. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  227. package/dist/plot/axis-utils.d.ts +1 -1
  228. package/dist/plot/axis-utils.js +1 -3
  229. package/dist/plot/data-cleaning.js +12 -28
  230. package/dist/plot/data-transform.js +2 -1
  231. package/dist/plot/fill-utils.js +2 -0
  232. package/dist/plot/index.d.ts +6 -2
  233. package/dist/plot/index.js +6 -2
  234. package/dist/plot/interactions.d.ts +8 -10
  235. package/dist/plot/interactions.js +2 -3
  236. package/dist/plot/layout.d.ts +11 -2
  237. package/dist/plot/layout.js +44 -17
  238. package/dist/plot/reference-line.d.ts +5 -22
  239. package/dist/plot/reference-line.js +12 -84
  240. package/dist/plot/scales.js +24 -36
  241. package/dist/plot/types.d.ts +53 -40
  242. package/dist/plot/types.js +12 -7
  243. package/dist/plot/utils/label-placement.d.ts +32 -15
  244. package/dist/plot/utils/label-placement.js +227 -63
  245. package/dist/plot/utils/series-visibility.js +2 -3
  246. package/dist/plot/utils.d.ts +1 -0
  247. package/dist/plot/utils.js +14 -0
  248. package/dist/rdf/RdfPlot.svelte +173 -132
  249. package/dist/rdf/calc-rdf.js +4 -5
  250. package/dist/sanitize.d.ts +4 -0
  251. package/dist/sanitize.js +107 -0
  252. package/dist/settings.d.ts +21 -6
  253. package/dist/settings.js +63 -19
  254. package/dist/spectral/Bands.svelte +963 -412
  255. package/dist/spectral/Bands.svelte.d.ts +22 -2
  256. package/dist/spectral/BandsAndDos.svelte +90 -49
  257. package/dist/spectral/BrillouinBandsDos.svelte +151 -93
  258. package/dist/spectral/Dos.svelte +389 -258
  259. package/dist/spectral/helpers.d.ts +23 -1
  260. package/dist/spectral/helpers.js +119 -51
  261. package/dist/spectral/types.d.ts +2 -0
  262. package/dist/state.svelte.d.ts +1 -1
  263. package/dist/state.svelte.js +3 -2
  264. package/dist/structure/Arrow.svelte +59 -20
  265. package/dist/structure/AtomLegend.svelte +231 -129
  266. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  267. package/dist/structure/Bond.svelte +73 -47
  268. package/dist/structure/CanvasTooltip.svelte +10 -2
  269. package/dist/structure/CellSelect.svelte +148 -51
  270. package/dist/structure/Cylinder.svelte +33 -17
  271. package/dist/structure/Lattice.svelte +88 -33
  272. package/dist/structure/Structure.svelte +1077 -821
  273. package/dist/structure/Structure.svelte.d.ts +1 -1
  274. package/dist/structure/StructureControls.svelte +373 -139
  275. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  276. package/dist/structure/StructureExportPane.svelte +124 -89
  277. package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
  278. package/dist/structure/StructureInfoPane.svelte +304 -231
  279. package/dist/structure/StructureScene.svelte +919 -445
  280. package/dist/structure/StructureScene.svelte.d.ts +16 -7
  281. package/dist/structure/atom-properties.d.ts +6 -2
  282. package/dist/structure/atom-properties.js +42 -29
  283. package/dist/structure/bonding.js +6 -7
  284. package/dist/structure/export.js +22 -34
  285. package/dist/structure/ferrox-wasm-types.d.ts +3 -2
  286. package/dist/structure/ferrox-wasm-types.js +0 -3
  287. package/dist/structure/ferrox-wasm.d.ts +3 -2
  288. package/dist/structure/ferrox-wasm.js +2 -3
  289. package/dist/structure/index.d.ts +16 -0
  290. package/dist/structure/index.js +88 -6
  291. package/dist/structure/measure.d.ts +2 -2
  292. package/dist/structure/measure.js +4 -44
  293. package/dist/structure/parse.js +130 -155
  294. package/dist/structure/partial-occupancy.d.ts +25 -0
  295. package/dist/structure/partial-occupancy.js +99 -0
  296. package/dist/structure/pbc.d.ts +1 -0
  297. package/dist/structure/pbc.js +16 -6
  298. package/dist/structure/supercell.d.ts +2 -2
  299. package/dist/structure/supercell.js +12 -22
  300. package/dist/structure/validation.js +5 -3
  301. package/dist/symmetry/SymmetryStats.svelte +94 -37
  302. package/dist/symmetry/WyckoffTable.svelte +42 -14
  303. package/dist/symmetry/cell-transform.js +5 -3
  304. package/dist/symmetry/index.d.ts +7 -4
  305. package/dist/symmetry/index.js +87 -21
  306. package/dist/symmetry/spacegroups.js +148 -148
  307. package/dist/table/HeatmapTable.svelte +1112 -516
  308. package/dist/table/HeatmapTable.svelte.d.ts +12 -1
  309. package/dist/table/ToggleMenu.svelte +125 -90
  310. package/dist/table/index.d.ts +2 -0
  311. package/dist/table/index.js +2 -4
  312. package/dist/theme/ThemeControl.svelte +21 -12
  313. package/dist/time.js +4 -1
  314. package/dist/tooltip/TooltipContent.svelte +33 -8
  315. package/dist/trajectory/Trajectory.svelte +889 -687
  316. package/dist/trajectory/TrajectoryError.svelte +14 -3
  317. package/dist/trajectory/TrajectoryExportPane.svelte +148 -90
  318. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
  319. package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
  320. package/dist/trajectory/constants.d.ts +6 -0
  321. package/dist/trajectory/constants.js +7 -0
  322. package/dist/trajectory/extract.js +13 -31
  323. package/dist/trajectory/format-detect.d.ts +9 -0
  324. package/dist/trajectory/format-detect.js +76 -0
  325. package/dist/trajectory/frame-reader.d.ts +17 -0
  326. package/dist/trajectory/frame-reader.js +332 -0
  327. package/dist/trajectory/helpers.d.ts +14 -0
  328. package/dist/trajectory/helpers.js +172 -0
  329. package/dist/trajectory/index.d.ts +1 -0
  330. package/dist/trajectory/index.js +23 -14
  331. package/dist/trajectory/parse/ase.d.ts +2 -0
  332. package/dist/trajectory/parse/ase.js +77 -0
  333. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  334. package/dist/trajectory/parse/hdf5.js +129 -0
  335. package/dist/trajectory/parse/index.d.ts +12 -0
  336. package/dist/trajectory/parse/index.js +299 -0
  337. package/dist/trajectory/parse/lammps.d.ts +5 -0
  338. package/dist/trajectory/parse/lammps.js +179 -0
  339. package/dist/trajectory/parse/vasp.d.ts +2 -0
  340. package/dist/trajectory/parse/vasp.js +68 -0
  341. package/dist/trajectory/parse/xyz.d.ts +2 -0
  342. package/dist/trajectory/parse/xyz.js +110 -0
  343. package/dist/trajectory/plotting.js +13 -8
  344. package/dist/trajectory/types.d.ts +11 -0
  345. package/dist/trajectory/types.js +1 -0
  346. package/dist/utils.d.ts +3 -0
  347. package/dist/utils.js +17 -0
  348. package/dist/xrd/XrdPlot.svelte +337 -245
  349. package/dist/xrd/broadening.js +14 -9
  350. package/dist/xrd/calc-xrd.js +12 -19
  351. package/dist/xrd/parse.d.ts +1 -1
  352. package/dist/xrd/parse.js +17 -17
  353. package/package.json +103 -101
  354. package/readme.md +4 -4
  355. package/dist/trajectory/parse.d.ts +0 -42
  356. package/dist/trajectory/parse.js +0 -1267
  357. /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
  358. /package/dist/theme/{themes.js → themes.mjs} +0 -0
@@ -0,0 +1,6 @@
1
+ export { default as ChemPotDiagram } from './ChemPotDiagram.svelte';
2
+ export { default as ChemPotDiagram2D } from './ChemPotDiagram2D.svelte';
3
+ export { default as ChemPotDiagram3D } from './ChemPotDiagram3D.svelte';
4
+ export { compute_chempot_async } from './async-compute.svelte';
5
+ export { compute_chempot_diagram, get_ternary_combinations } from './compute';
6
+ export * from './types';
@@ -0,0 +1,6 @@
1
+ export { default as ChemPotDiagram } from './ChemPotDiagram.svelte';
2
+ export { default as ChemPotDiagram2D } from './ChemPotDiagram2D.svelte';
3
+ export { default as ChemPotDiagram3D } from './ChemPotDiagram3D.svelte';
4
+ export { compute_chempot_async } from './async-compute.svelte';
5
+ export { compute_chempot_diagram, get_ternary_combinations } from './compute';
6
+ export * from './types';
@@ -0,0 +1,16 @@
1
+ export declare function get_pointer_coords(raw_event: unknown): {
2
+ clientX: number;
3
+ clientY: number;
4
+ } | null;
5
+ /** Convert pointer event to container-relative coords for tooltip placement. */
6
+ export declare function get_hover_pointer(raw_event: unknown, container_rect: DOMRect | null | undefined): {
7
+ x: number;
8
+ y: number;
9
+ } | null;
10
+ /** Add hover pointer to an info object for tooltip placement. */
11
+ export declare function with_hover_pointer<T extends {
12
+ pointer?: {
13
+ x: number;
14
+ y: number;
15
+ };
16
+ }>(info: Omit<T, `pointer`>, raw_event: unknown, container_rect: DOMRect | null | undefined): T;
@@ -0,0 +1,40 @@
1
+ // Event/pointer normalization for hover tooltips.
2
+ // Handles DOM events and Threlte/Three.js event wrappers (nativeEvent, srcEvent).
3
+ const is_pointer_like_event = (event_val) => (typeof PointerEvent !== `undefined` && event_val instanceof PointerEvent) ||
4
+ (typeof MouseEvent !== `undefined` && event_val instanceof MouseEvent);
5
+ export function get_pointer_coords(raw_event) {
6
+ if (is_pointer_like_event(raw_event)) {
7
+ return raw_event;
8
+ }
9
+ if (!raw_event || typeof raw_event !== `object`)
10
+ return null;
11
+ const event_obj = raw_event;
12
+ if (is_pointer_like_event(event_obj.nativeEvent)) {
13
+ return event_obj.nativeEvent;
14
+ }
15
+ if (is_pointer_like_event(event_obj.srcEvent)) {
16
+ return event_obj.srcEvent;
17
+ }
18
+ const client_x = event_obj.clientX;
19
+ const client_y = event_obj.clientY;
20
+ if (typeof client_x === `number` && typeof client_y === `number`) {
21
+ return { clientX: client_x, clientY: client_y };
22
+ }
23
+ return null;
24
+ }
25
+ /** Convert pointer event to container-relative coords for tooltip placement. */
26
+ export function get_hover_pointer(raw_event, container_rect) {
27
+ const pointer_event = get_pointer_coords(raw_event);
28
+ if (!pointer_event)
29
+ return null;
30
+ const offset_x = container_rect?.left ?? 0;
31
+ const offset_y = container_rect?.top ?? 0;
32
+ const x = pointer_event.clientX - offset_x + 4;
33
+ const y = pointer_event.clientY - offset_y + 4;
34
+ return { x, y };
35
+ }
36
+ /** Add hover pointer to an info object for tooltip placement. */
37
+ export function with_hover_pointer(info, raw_event, container_rect) {
38
+ const pointer = get_hover_pointer(raw_event, container_rect);
39
+ return { ...info, pointer: pointer ?? undefined };
40
+ }
@@ -0,0 +1,15 @@
1
+ import type { PhaseData } from '../convex-hull/types';
2
+ import type { ChemPotDiagramConfig } from './types';
3
+ interface TempFilterProps {
4
+ interpolate_temperature?: boolean;
5
+ max_interpolation_gap?: number;
6
+ }
7
+ export interface TempFilterPayload {
8
+ has_temp_data: boolean;
9
+ available_temperatures: number[];
10
+ temp_filtered_entries: PhaseData[];
11
+ }
12
+ export declare function get_projection_source_entries(entries: PhaseData[], temp_filtered_entries: PhaseData[]): PhaseData[];
13
+ export declare function get_temp_filter_payload(entries: PhaseData[], temperature: number | undefined, config: ChemPotDiagramConfig, props: TempFilterProps): TempFilterPayload;
14
+ export declare function get_valid_temperature(temperature: number | undefined, has_temp_data: boolean, available_temperatures: number[]): number | undefined;
15
+ export {};
@@ -0,0 +1,36 @@
1
+ import { analyze_temperature_data, filter_entries_at_temperature, } from '../convex-hull/helpers';
2
+ import { CHEMPOT_DEFAULTS } from './types';
3
+ export function get_projection_source_entries(entries, temp_filtered_entries) {
4
+ return temp_filtered_entries.length > 0 ? temp_filtered_entries : entries;
5
+ }
6
+ const resolve_temp_filter_options = (config, props) => ({
7
+ interpolate: config.interpolate_temperature ??
8
+ props.interpolate_temperature ??
9
+ CHEMPOT_DEFAULTS.interpolate_temperature,
10
+ max_interpolation_gap: config.max_interpolation_gap ??
11
+ props.max_interpolation_gap ??
12
+ CHEMPOT_DEFAULTS.max_interpolation_gap,
13
+ });
14
+ export function get_temp_filter_payload(entries, temperature, config, props) {
15
+ const { has_temp_data, available_temperatures } = analyze_temperature_data(entries);
16
+ if (!has_temp_data || temperature === undefined) {
17
+ return { has_temp_data, available_temperatures, temp_filtered_entries: entries };
18
+ }
19
+ const filter_options = resolve_temp_filter_options(config, props);
20
+ const temp_filtered_entries = filter_entries_at_temperature(entries, temperature, filter_options);
21
+ return { has_temp_data, available_temperatures, temp_filtered_entries };
22
+ }
23
+ export function get_valid_temperature(temperature, has_temp_data, available_temperatures) {
24
+ if (!has_temp_data || available_temperatures.length === 0)
25
+ return temperature;
26
+ const min_temperature = available_temperatures[0];
27
+ const max_temperature = available_temperatures.at(-1) ?? min_temperature;
28
+ if (temperature === undefined)
29
+ return min_temperature;
30
+ if (available_temperatures.includes(temperature))
31
+ return temperature;
32
+ if (temperature >= min_temperature && temperature <= max_temperature) {
33
+ return temperature;
34
+ }
35
+ return min_temperature;
36
+ }
@@ -0,0 +1,86 @@
1
+ import type { D3InterpolateName } from '../colors';
2
+ import type { PhaseData } from '../convex-hull/types';
3
+ export type ChemPotLimits = Partial<Record<string, [number, number]>>;
4
+ export type ChemPotColorMode = `none` | `energy` | `formation_energy` | `arity` | `entries`;
5
+ export type ChemPotProjectionMode = `single` | `grid`;
6
+ export interface ChemPotDiagramConfig {
7
+ formal_chempots?: boolean;
8
+ default_min_limit?: number;
9
+ element_padding?: number;
10
+ label_stable?: boolean;
11
+ elements?: string[];
12
+ limits?: ChemPotLimits;
13
+ formulas_to_draw?: string[];
14
+ draw_formula_meshes?: boolean;
15
+ draw_formula_lines?: boolean;
16
+ formula_colors?: string[];
17
+ show_tooltip?: boolean;
18
+ tooltip_detail_level?: `compact` | `detailed`;
19
+ color_mode?: ChemPotColorMode;
20
+ color_scale?: D3InterpolateName;
21
+ reverse_color_scale?: boolean;
22
+ interpolate_temperature?: boolean;
23
+ max_interpolation_gap?: number;
24
+ projection_mode?: ChemPotProjectionMode;
25
+ }
26
+ export interface ChemPotDiagramData {
27
+ domains: Record<string, number[][]>;
28
+ elements: string[];
29
+ el_refs: Record<string, PhaseData>;
30
+ min_entries: PhaseData[];
31
+ hyperplanes: number[][];
32
+ hyperplane_entries: PhaseData[];
33
+ lims: [number, number][];
34
+ }
35
+ export interface ChemPotHoverPointer {
36
+ x: number;
37
+ y: number;
38
+ }
39
+ export interface ChemPotHoverInfoBase {
40
+ formula: string;
41
+ view: `2d` | `3d`;
42
+ pointer?: ChemPotHoverPointer;
43
+ }
44
+ export interface AxisRangeData {
45
+ element: string;
46
+ min_val: number;
47
+ max_val: number;
48
+ }
49
+ export interface ChemPotHoverInfo2D extends ChemPotHoverInfoBase {
50
+ view: `2d`;
51
+ n_points: number;
52
+ axis_ranges: AxisRangeData[];
53
+ }
54
+ export interface ChemPotHoverInfo3D extends ChemPotHoverInfoBase {
55
+ view: `3d`;
56
+ n_vertices: number;
57
+ n_edges: number;
58
+ n_points: number;
59
+ ann_loc: number[];
60
+ axis_ranges: AxisRangeData[];
61
+ touches_limits: string[];
62
+ is_elemental: boolean;
63
+ is_draw_formula: boolean;
64
+ matching_entry_count: number;
65
+ min_energy_per_atom: number | null;
66
+ max_energy_per_atom: number | null;
67
+ neighbors: string[];
68
+ }
69
+ export type ChemPotHoverInfo = ChemPotHoverInfo2D | ChemPotHoverInfo3D;
70
+ export declare const CHEMPOT_DEFAULTS: {
71
+ readonly formal_chempots: true;
72
+ readonly default_min_limit: -50;
73
+ readonly element_padding: 1;
74
+ readonly label_stable: true;
75
+ readonly draw_formula_meshes: true;
76
+ readonly draw_formula_lines: true;
77
+ readonly show_tooltip: true;
78
+ readonly tooltip_detail_level: "detailed";
79
+ readonly color_mode: ChemPotColorMode;
80
+ readonly color_scale: D3InterpolateName;
81
+ readonly reverse_color_scale: true;
82
+ readonly interpolate_temperature: true;
83
+ readonly max_interpolation_gap: 500;
84
+ readonly projection_mode: ChemPotProjectionMode;
85
+ readonly formula_colors: readonly ["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02", "#a6761d", "#666666"];
86
+ };
@@ -0,0 +1,28 @@
1
+ // Default configuration values
2
+ export const CHEMPOT_DEFAULTS = {
3
+ formal_chempots: true,
4
+ default_min_limit: -50,
5
+ element_padding: 1.0,
6
+ label_stable: true,
7
+ draw_formula_meshes: true,
8
+ draw_formula_lines: true,
9
+ show_tooltip: true,
10
+ tooltip_detail_level: `detailed`,
11
+ color_mode: `formation_energy`,
12
+ color_scale: `interpolateSpectral`,
13
+ reverse_color_scale: true,
14
+ interpolate_temperature: true,
15
+ max_interpolation_gap: 500,
16
+ projection_mode: `single`,
17
+ // Dark2 qualitative palette (same as pymatgen/plotly default)
18
+ formula_colors: [
19
+ `#1b9e77`,
20
+ `#d95f02`,
21
+ `#7570b3`,
22
+ `#e7298a`,
23
+ `#66a61e`,
24
+ `#e6ab02`,
25
+ `#a6761d`,
26
+ `#666666`,
27
+ ],
28
+ };
@@ -1,13 +1,15 @@
1
1
  import * as d3_sc from 'd3-scale-chromatic';
2
+ import type { Vec3 } from '../math';
2
3
  import type { ELEM_SYMBOLS } from '../labels';
3
4
  export type D3InterpolateName = keyof typeof d3_sc & `interpolate${string}`;
4
5
  export type D3ColorSchemeName = D3InterpolateName extends `interpolate${infer Name}` ? Name : never;
6
+ export declare const get_d3_interpolator: (name: D3InterpolateName) => ((t: number) => string);
5
7
  export declare const COLOR_SCALE_TYPES: readonly ["continuous", "categorical"];
6
8
  export type ColorScaleType = (typeof COLOR_SCALE_TYPES)[number];
7
9
  export declare const DEFAULT_CATEGORY_COLORS: Record<string, string>;
8
10
  export declare const AXIS_COLORS: readonly [readonly ["x", "#d75555", "#e66666"], readonly ["y", "#55b855", "#66c966"], readonly ["z", "#5555d7", "#6666e6"]];
9
11
  export declare const NEG_AXIS_COLORS: readonly [readonly ["nx", "#b84444", "#cc5555"], readonly ["ny", "#44a044", "#55b155"], readonly ["nz", "#4444b8", "#5555c9"]];
10
- export type RGBColor = [number, number, number];
12
+ export type RGBColor = Vec3;
11
13
  export type ElementColorScheme = Record<(typeof ELEM_SYMBOLS)[number], RGBColor>;
12
14
  export declare const vesta_hex: Record<string, string>;
13
15
  export declare const jmol_hex: Record<string, string>;
@@ -6,6 +6,10 @@ import jmol_colors from './jmol-colors.json' with { type: 'json' };
6
6
  import muted_colors from './muted-colors.json' with { type: 'json' };
7
7
  import pastel_colors from './pastel-colors.json' with { type: 'json' };
8
8
  import vesta_colors from './vesta-colors.json' with { type: 'json' };
9
+ export const get_d3_interpolator = (name) => {
10
+ const candidate = d3_sc[name];
11
+ return typeof candidate === `function` ? candidate : d3_sc.interpolateViridis;
12
+ };
9
13
  export const COLOR_SCALE_TYPES = [`continuous`, `categorical`];
10
14
  // color values have to be in hex format since that's the only format
11
15
  // <input type="color"> supports
@@ -57,10 +61,10 @@ export const is_color = (val) => {
57
61
  return false;
58
62
  // Check for hex colors, rgb/rgba, hsl/hsla, color(), var(), and named colors
59
63
  // Exclude incomplete function prefixes like 'rgb', 'hsl', 'var', 'color'
60
- return /^(#[0-9a-f]{3,8}|rgba?\([^)]+\)|hsla?\([^)]+\)|color\([^)]+\)|var\([^)]+\)|(?!rgb$|hsl$|var$|color$)[a-z]+)$/i
61
- .test(val.toString().trim());
64
+ return /^(#[0-9a-f]{3,8}|rgba?\([^)]+\)|hsla?\([^)]+\)|color\([^)]+\)|var\([^)]+\)|(?!rgb$|hsl$|var$|color$)[a-z]+)$/i.test(val.trim());
62
65
  };
63
66
  export const PLOT_COLORS = [
67
+ // Color series for e.g. line plots
64
68
  `#63b3ed`,
65
69
  `#68d391`,
66
70
  `#fbd38d`,
@@ -129,7 +133,9 @@ export function is_dark_mode() {
129
133
  if (stored === `dark` || stored === `light`)
130
134
  return stored === `dark`;
131
135
  }
132
- catch { /* localStorage throws in private browsing mode */ }
136
+ catch {
137
+ /* localStorage throws in private browsing mode */
138
+ }
133
139
  return globalThis.matchMedia?.(`(prefers-color-scheme: dark)`).matches ?? false;
134
140
  }
135
141
  // Watch for dark mode changes and call callback on each change. Returns cleanup function.
@@ -1,73 +1,143 @@
1
- <script lang="ts">import { ELEMENT_COLOR_SCHEMES, pick_contrast_color } from '../colors';
2
- import { format_num } from '../labels';
3
- import { get_chart_font_scale } from './index';
4
- import { fractional_composition } from './parse';
5
- let { composition, size = 200, bar_height = 30, label_height = 20, gap = 2, min_segment_size_for_label = 15, thin_segment_threshold = 0.2, external_label_size_threshold = 5, outer_corners_only = true, show_labels = true, show_percentages = false, show_amounts = true, color_scheme = `Vesta`, segment_content, interactive = true, svg_node = $bindable(null), children, ...rest } = $props();
6
- let element_colors = $derived(ELEMENT_COLOR_SCHEMES[color_scheme] || ELEMENT_COLOR_SCHEMES.Vesta);
7
- let fractions = $derived(fractional_composition(composition));
8
- let svg_height = $derived(label_height + gap + bar_height + gap + label_height);
9
- let bar_y = $derived(label_height + gap);
10
- let above_labels_y = $derived(label_height / 2);
11
- let below_labels_y = $derived(label_height + gap + bar_height + gap + label_height / 2);
12
- let segments = $derived.by(() => {
13
- const element_entries = Object.entries(composition).filter(([_, amount]) => amount && amount > 0);
14
- if (element_entries.length === 0)
15
- return [];
16
- let [current_x, above_labels, below_labels] = [0, 0, 0];
1
+ <script lang="ts">
2
+ import type { ColorSchemeName } from '../colors'
3
+ import { ELEMENT_COLOR_SCHEMES, pick_contrast_color } from '../colors'
4
+ import type { CompositionType } from './'
5
+ import type { ElementSymbol } from '../element'
6
+ import { format_num } from '../labels'
7
+ import type { Snippet } from 'svelte'
8
+ import type { SVGAttributes } from 'svelte/elements'
9
+ import { type ChartSegmentData, get_chart_font_scale } from './index'
10
+ import { fractional_composition } from './parse'
11
+
12
+ type BarSegmentData = ChartSegmentData & {
13
+ x: number
14
+ width: number
15
+ can_show_label: boolean
16
+ needs_external_label: boolean
17
+ external_label_position: `above` | `below` | null
18
+ label_x: number
19
+ label_y: number
20
+ }
21
+
22
+ let {
23
+ composition,
24
+ size = 200,
25
+ bar_height = 30,
26
+ label_height = 20,
27
+ gap = 2,
28
+ min_segment_size_for_label = 15,
29
+ thin_segment_threshold = 0.2,
30
+ external_label_size_threshold = 5,
31
+ outer_corners_only = true,
32
+ show_labels = true,
33
+ show_percentages = false,
34
+ show_amounts = true,
35
+ color_scheme = `Vesta`,
36
+ segment_content,
37
+ interactive = true,
38
+ svg_node = $bindable(null),
39
+ children,
40
+ ...rest
41
+ }: SVGAttributes<SVGSVGElement> & {
42
+ composition: CompositionType
43
+ size?: number
44
+ bar_height?: number
45
+ label_height?: number
46
+ gap?: number
47
+ min_segment_size_for_label?: number
48
+ thin_segment_threshold?: number
49
+ external_label_size_threshold?: number
50
+ outer_corners_only?: boolean
51
+ show_labels?: boolean
52
+ show_percentages?: boolean
53
+ show_amounts?: boolean
54
+ color_scheme?: ColorSchemeName
55
+ segment_content?: Snippet<[BarSegmentData]>
56
+ interactive?: boolean
57
+ svg_node?: SVGSVGElement | null
58
+ children?: Snippet<[{ hovered_element: ElementSymbol | null }]>
59
+ } = $props()
60
+
61
+ let element_colors = $derived(
62
+ ELEMENT_COLOR_SCHEMES[color_scheme] || ELEMENT_COLOR_SCHEMES.Vesta,
63
+ )
64
+ let fractions = $derived(fractional_composition(composition))
65
+
66
+ let svg_height = $derived(label_height + gap + bar_height + gap + label_height)
67
+ let bar_y = $derived(label_height + gap)
68
+ let above_labels_y = $derived(label_height / 2)
69
+ let below_labels_y = $derived(
70
+ label_height + gap + bar_height + gap + label_height / 2,
71
+ )
72
+
73
+ let segments = $derived.by(() => {
74
+ const element_entries = Object.entries(composition).filter(([_, amount]) =>
75
+ amount && amount > 0
76
+ ) as [ElementSymbol, number][]
77
+ if (element_entries.length === 0) return []
78
+
79
+ let [current_x, above_labels, below_labels] = [0, 0, 0]
80
+
17
81
  return element_entries.map(([element, amount]) => {
18
- const fraction = fractions[element] || 0;
19
- const color = element_colors[element] || `#cccccc`;
20
- const width = fraction * size;
21
- const x = current_x;
22
- current_x += width;
23
- const segment_size = Math.min(width, size);
24
- const base_scale = Math.min(2, Math.max(1, segment_size / 40));
25
- const label_text = element + (show_amounts ? amount.toString() : ``) +
26
- (show_percentages ? `${format_num(fraction, `.1~%`)}` : ``);
27
- const font_scale = get_chart_font_scale(base_scale, label_text, segment_size * 0.9, 0.6, 12);
28
- // Label positioning
29
- const can_show_label = segment_size >= min_segment_size_for_label;
30
- const is_thin = fraction < thin_segment_threshold;
31
- const can_show_external_label = segment_size >= external_label_size_threshold;
32
- const needs_external_label = is_thin && can_show_external_label;
33
- let external_label_position = null;
34
- if (needs_external_label) {
35
- external_label_position = above_labels <= below_labels ? `above` : `below`;
36
- if (external_label_position === `above`)
37
- above_labels++;
38
- else
39
- below_labels++;
40
- }
41
- const text_color = pick_contrast_color({ bg_color: color });
42
- const label_props = {
43
- font_scale,
44
- text_color,
45
- can_show_label,
46
- needs_external_label,
47
- external_label_position,
48
- label_x: x + width / 2,
49
- label_y: bar_y + bar_height / 2,
50
- };
51
- return { element, amount, fraction, color, x, width, ...label_props };
52
- });
53
- });
54
- let hovered_element = $state(null);
55
- // Generate unique ID for clipPath to avoid collisions across BarCharts
56
- let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
82
+ const fraction = fractions[element] || 0
83
+ const color = element_colors[element] || `#cccccc`
84
+ const width = fraction * size
85
+ const x = current_x
86
+ current_x += width
87
+
88
+ const segment_size = Math.min(width, size)
89
+ const base_scale = Math.min(2, Math.max(1, segment_size / 40))
90
+ const label_text = element + (show_amounts ? amount?.toString() ?? `` : ``) +
91
+ (show_percentages ? `${format_num(fraction, `.1~%`)}` : ``)
92
+ const font_scale = get_chart_font_scale(
93
+ base_scale,
94
+ label_text,
95
+ segment_size * 0.9,
96
+ 0.6,
97
+ 12,
98
+ )
99
+
100
+ // Label positioning
101
+ const can_show_label = segment_size >= min_segment_size_for_label
102
+ const is_thin = fraction < thin_segment_threshold
103
+ const can_show_external_label = segment_size >= external_label_size_threshold
104
+ const needs_external_label = is_thin && can_show_external_label
105
+
106
+ let external_label_position: `above` | `below` | null = null
107
+ if (needs_external_label) {
108
+ external_label_position = above_labels <= below_labels ? `above` : `below`
109
+ if (external_label_position === `above`) above_labels++
110
+ else below_labels++
111
+ }
112
+
113
+ const text_color = pick_contrast_color({ bg_color: color })
114
+ const label_props = {
115
+ font_scale,
116
+ text_color,
117
+ can_show_label,
118
+ needs_external_label,
119
+ external_label_position,
120
+ label_x: x + width / 2,
121
+ label_y: bar_y + bar_height / 2,
122
+ }
123
+ return { element, amount, fraction, color, x, width, ...label_props }
124
+ })
125
+ })
126
+
127
+ let hovered_element: ElementSymbol | null = $state(null)
128
+ // Generate unique ID for clipPath to avoid collisions across BarCharts
129
+ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`)
57
130
  </script>
58
131
 
59
132
  {#snippet label_content(segment: BarSegmentData)}
60
133
  <tspan class="element-symbol" style:font-size="{10 * segment.font_scale}px">
61
134
  {segment.element}
62
135
  </tspan>
63
- {#if show_amounts}
64
- <tspan class="amount" style:font-size="{8 * segment.font_scale}px" dx="1" dy="5">
65
- {segment.amount}
66
- </tspan>
67
- {/if}
68
- {#if show_percentages}
69
- <tspan class="percentage" style:font-size="{8 * segment.font_scale}px" dx="1" dy="5">
70
- {format_num(segment.fraction, `.1~%`)}
136
+ {#if show_amounts || show_percentages}
137
+ <tspan class="amount" style:font-size="{6.5 * segment.font_scale}px" dx="1" dy="5">
138
+ {show_amounts ? segment.amount : ``}{show_amounts && show_percentages ? `=` : ``}{
139
+ show_percentages ? format_num(segment.fraction, `.1~%`) : ``
140
+ }
71
141
  </tspan>
72
142
  {/if}
73
143
  {/snippet}
@@ -76,9 +146,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
76
146
  viewBox="0 0 {size} {svg_height}"
77
147
  {...rest}
78
148
  class="bar-chart {rest.class ?? ``}"
79
- style={`--bar-height: ${bar_height}px; --label-height: ${label_height}px; --gap: ${gap}px; --border-radius: ${
80
- outer_corners_only ? 4 : 0
81
- }px; ${rest.style ?? ``}`}
149
+ style:max-width="{size}px"
82
150
  bind:this={svg_node}
83
151
  >
84
152
  <!-- Background and border -->
@@ -87,11 +155,8 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
87
155
  y={bar_y}
88
156
  width={size}
89
157
  height={bar_height}
90
- rx={outer_corners_only ? 4 : 0}
91
- ry={outer_corners_only ? 4 : 0}
92
- fill="var(--bar-bg, #fff)"
93
- stroke="var(--bar-border, #ccc)"
94
- stroke-width="1"
158
+ fill="var(--bar-bg)"
159
+ stroke="var(--bar-border, none)"
95
160
  />
96
161
 
97
162
  <!-- External labels above -->
@@ -119,8 +184,8 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
119
184
  y={bar_y}
120
185
  width={size}
121
186
  height={bar_height}
122
- rx={outer_corners_only ? 4 : 0}
123
- ry={outer_corners_only ? 4 : 0}
187
+ rx={outer_corners_only ? 2 : 0}
188
+ ry={outer_corners_only ? 2 : 0}
124
189
  />
125
190
  </clipPath>
126
191
  </defs>
@@ -169,7 +234,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
169
234
  x={segment.label_x}
170
235
  y={segment.label_y}
171
236
  text-anchor="middle"
172
- dominant-baseline="middle"
237
+ dominant-baseline={show_amounts || show_percentages ? `middle` : `central`}
173
238
  class="bar-label"
174
239
  style:fill={segment.text_color}
175
240
  >
@@ -201,8 +266,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
201
266
  <style>
202
267
  .bar-chart {
203
268
  display: inline-block;
204
- width: 100%;
205
- max-width: var(--bar-max-width, 100%);
269
+ --bar-bg: light-dark(#fff, #333);
206
270
  }
207
271
  .bar-segment {
208
272
  transition: all 0.2s ease;
@@ -227,7 +291,7 @@ let clip_path_id = $derived(`bar-clip-${crypto.randomUUID()}`);
227
291
  .element-symbol {
228
292
  font-weight: 700;
229
293
  }
230
- .amount, .percentage {
294
+ .amount {
231
295
  font-weight: 500;
232
296
  }
233
297
  </style>