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
@@ -1,5 +1,5 @@
1
1
  import * as math from '../math';
2
- import { get_arcsinh_threshold, get_scale_type_name, is_time_scale, } from './types';
2
+ import { get_arcsinh_threshold, get_scale_type_name, is_time_scale } from './types';
3
3
  import { extent, range } from 'd3-array';
4
4
  import { scaleLinear, scaleLog, scaleSequential, scaleSequentialLog, scaleTime, } from 'd3-scale';
5
5
  import * as d3_sc from 'd3-scale-chromatic';
@@ -98,8 +98,8 @@ export function generate_arcsinh_ticks(min, max, threshold = 1, count = 10) {
98
98
  if (hi <= 0) {
99
99
  // Negative range: mirror the positive logic
100
100
  return generate_positive_arcsinh_ticks(-hi, -lo, safe_threshold, count)
101
- .map((t) => -t)
102
- .reverse();
101
+ .map((tick) => -tick)
102
+ .toReversed();
103
103
  }
104
104
  // Mixed range: symmetric ticks around zero (includes_zero is always true here)
105
105
  // For very small counts, we prioritize zero as the most meaningful tick
@@ -110,7 +110,7 @@ export function generate_arcsinh_ticks(min, max, threshold = 1, count = 10) {
110
110
  ticks.push(...pos_ticks.filter((t) => t > 0));
111
111
  // Add negative ticks (mirror of positive)
112
112
  const neg_ticks = generate_positive_arcsinh_ticks(0, -lo, safe_threshold, half_count);
113
- ticks.push(...neg_ticks.filter((t) => t > 0).map((t) => -t));
113
+ ticks.push(...neg_ticks.filter((tick) => tick > 0).map((tick) => -tick));
114
114
  // For small counts where half_count is 0 or 1, ensure at least some boundary coverage
115
115
  if (half_count <= 1 && count >= 2) {
116
116
  // Add boundaries if not already present and we have room
@@ -185,7 +185,9 @@ export function create_scale(scale_type, domain, range) {
185
185
  const [min_val, max_val] = domain;
186
186
  const type_name = get_scale_type_name(scale_type);
187
187
  if (type_name === `log`) {
188
- return scaleLog().domain([Math.max(min_val, math.LOG_EPS), max_val]).range(range);
188
+ return scaleLog()
189
+ .domain([Math.max(min_val, math.LOG_EPS), max_val])
190
+ .range(range);
189
191
  }
190
192
  if (type_name === `arcsinh`) {
191
193
  const threshold = get_arcsinh_threshold(scale_type);
@@ -221,9 +223,10 @@ options = {}) {
221
223
  const time_scale = scaleTime().domain([new Date(min_val), new Date(max_val)]);
222
224
  let count = 10; // default
223
225
  if (typeof ticks_option === `number`) {
224
- count = ticks_option < 0
225
- ? Math.ceil((max_val - min_val) / Math.abs(ticks_option) / 86_400_000) // milliseconds per day
226
- : ticks_option;
226
+ count =
227
+ ticks_option < 0
228
+ ? Math.ceil((max_val - min_val) / Math.abs(ticks_option) / 86_400_000) // milliseconds per day
229
+ : ticks_option;
227
230
  }
228
231
  else if (typeof ticks_option === `string`) {
229
232
  count = ticks_option === `day` ? 30 : ticks_option === `month` ? 12 : 10;
@@ -248,9 +251,7 @@ options = {}) {
248
251
  // Arcsinh scale ticks
249
252
  if (type_name === `arcsinh`) {
250
253
  const threshold = get_arcsinh_threshold(scale_type);
251
- const tick_count = typeof ticks_option === `number` && ticks_option > 0
252
- ? ticks_option
253
- : default_count;
254
+ const tick_count = typeof ticks_option === `number` && ticks_option > 0 ? ticks_option : default_count;
254
255
  return generate_arcsinh_ticks(min_val, max_val, threshold, tick_count);
255
256
  }
256
257
  // Linear scale with interval (negative number indicates interval)
@@ -260,9 +261,7 @@ options = {}) {
260
261
  return range(start, max_val + interval * interval_padding, interval);
261
262
  }
262
263
  // Default ticks using scale function
263
- const tick_count = typeof ticks_option === `number` && ticks_option > 0
264
- ? ticks_option
265
- : default_count;
264
+ const tick_count = typeof ticks_option === `number` && ticks_option > 0 ? ticks_option : default_count;
266
265
  const ticks = scale_fn.ticks(tick_count);
267
266
  return ticks.map(Number);
268
267
  }
@@ -274,9 +273,7 @@ export function calculate_domain(values, scale_type = `linear`) {
274
273
  const type_name = get_scale_type_name(scale_type);
275
274
  // Only log scale needs domain clamping to positive values
276
275
  // Arcsinh and linear can handle any values
277
- return type_name === `log`
278
- ? [Math.max(min_val, math.LOG_EPS), max_val]
279
- : [min_val, max_val];
276
+ return type_name === `log` ? [Math.max(min_val, math.LOG_EPS), max_val] : [min_val, max_val];
280
277
  }
281
278
  // Advanced domain calculation with padding and nice boundaries (from ScatterPlot)
282
279
  export function get_nice_data_range(points, get_value, range, scale_type, padding_factor, is_time = false) {
@@ -376,15 +373,11 @@ export function generate_log_ticks(min, max, ticks_option) {
376
373
  const max_power = Math.ceil(Math.log10(max));
377
374
  // For very wide ranges, extend the range to include more ticks
378
375
  const range_size = max_power - min_power;
379
- const extended_min_power = range_size <= 2
380
- ? min_power - 1
381
- : min_power - Math.max(1, Math.floor(range_size / 4));
376
+ const extended_min_power = range_size <= 2 ? min_power - 1 : min_power - Math.max(1, Math.floor(range_size / 4));
382
377
  const extended_max_power = range_size <= 2 ? max_power + 1 : max_power;
383
- const powers = range(extended_min_power, extended_max_power + 1).map((p) => Math.pow(10, p));
378
+ const powers = range(extended_min_power, extended_max_power + 1).map((power) => Math.pow(10, power));
384
379
  // For narrow ranges, include intermediate values
385
- if (max_power - min_power < 3 &&
386
- typeof ticks_option === `number` &&
387
- ticks_option > 5) {
380
+ if (max_power - min_power < 3 && typeof ticks_option === `number` && ticks_option > 5) {
388
381
  const detailed_ticks = [];
389
382
  powers.forEach((power) => {
390
383
  detailed_ticks.push(power);
@@ -393,9 +386,9 @@ export function generate_log_ticks(min, max, ticks_option) {
393
386
  if (power * 5 <= Math.pow(10, extended_max_power))
394
387
  detailed_ticks.push(power * 5);
395
388
  });
396
- return detailed_ticks.filter((t) => t >= min && t <= max);
389
+ return detailed_ticks.filter((tick) => tick >= min && tick <= max);
397
390
  }
398
- return powers.filter((p) => p >= min && p <= max);
391
+ return powers.filter((power) => power >= min && power <= max);
399
392
  }
400
393
  // Get custom label for a tick value if provided, otherwise return null
401
394
  export function get_tick_label(tick_value, ticks_option) {
@@ -406,18 +399,13 @@ export function get_tick_label(tick_value, ticks_option) {
406
399
  }
407
400
  // Create a color scale function from configuration
408
401
  export function create_color_scale(color_scale_config, auto_color_range) {
409
- const scheme = typeof color_scale_config === `string`
410
- ? color_scale_config
411
- : color_scale_config.scheme;
402
+ const scheme = typeof color_scale_config === `string` ? color_scale_config : color_scale_config.scheme;
412
403
  const interpolator = (typeof d3_sc[scheme] === `function`
413
404
  ? d3_sc[scheme]
414
405
  : d3_sc.interpolateViridis);
415
- const [min_val, max_val] = (typeof color_scale_config === `string`
416
- ? undefined
417
- : color_scale_config.value_range) ?? auto_color_range;
418
- const scale_type = typeof color_scale_config === `string`
419
- ? undefined
420
- : color_scale_config.type;
406
+ const [min_val, max_val] = (typeof color_scale_config === `string` ? undefined : color_scale_config.value_range) ??
407
+ auto_color_range;
408
+ const scale_type = typeof color_scale_config === `string` ? undefined : color_scale_config.type;
421
409
  const type_name = get_scale_type_name(scale_type);
422
410
  if (type_name === `log`) {
423
411
  return scaleSequentialLog(interpolator).domain([
@@ -465,7 +453,7 @@ function create_arcsinh_color_scale(interpolator, initial_domain, threshold) {
465
453
  export function create_size_scale(config, all_size_values) {
466
454
  const [min_radius, max_radius] = config.radius_range ?? [2, 10];
467
455
  const auto_range = all_size_values.length > 0
468
- ? extent(all_size_values.filter((v) => v !== null))
456
+ ? extent(all_size_values.filter((val) => val !== null))
469
457
  : [0, 1];
470
458
  const [min_val, max_val] = config.value_range ?? auto_range;
471
459
  const safe_min = min_val ?? 0;
@@ -1,10 +1,8 @@
1
1
  import type { D3SymbolName } from '../labels';
2
- import type { Vec3 } from '../math';
2
+ import type { Vec2, Vec3 } from '../math';
3
3
  import type DraggablePane from '../overlays/DraggablePane.svelte';
4
- import type { SimulationNodeDatum } from 'd3-force';
5
4
  import type { ComponentProps, Snippet } from 'svelte';
6
5
  import type { HTMLAttributes } from 'svelte/elements';
7
- import type ColorBar from './ColorBar.svelte';
8
6
  import type PlotLegend from './PlotLegend.svelte';
9
7
  import type { TicksOption } from './scales';
10
8
  export interface TweenedOptions<T> {
@@ -27,6 +25,12 @@ export type Sides = {
27
25
  l?: number;
28
26
  r?: number;
29
27
  };
28
+ export type InitialRanges = {
29
+ initial_x_range: Vec2;
30
+ initial_x2_range: Vec2;
31
+ initial_y_range: Vec2;
32
+ initial_y2_range: Vec2;
33
+ };
30
34
  export type Point<Metadata = Record<string, unknown>> = {
31
35
  x: number;
32
36
  y: number;
@@ -93,6 +97,7 @@ export interface DataSeries<Metadata = Record<string, unknown>> {
93
97
  x: readonly number[];
94
98
  y: readonly number[];
95
99
  markers?: Markers;
100
+ x_axis?: `x1` | `x2`;
96
101
  y_axis?: `y1` | `y2`;
97
102
  color_values?: (number | null)[] | null;
98
103
  size_values?: readonly (number | null)[] | null;
@@ -138,6 +143,7 @@ export interface HandlerProps<Metadata = Record<string, unknown>> {
138
143
  label?: string | null;
139
144
  series_idx: number;
140
145
  x_axis: AxisConfig;
146
+ x2_axis?: AxisConfig;
141
147
  y_axis: AxisConfig;
142
148
  y2_axis?: AxisConfig;
143
149
  fullscreen?: boolean;
@@ -164,13 +170,16 @@ export interface BarHandlerProps<Metadata = Record<string, unknown>> extends Han
164
170
  orient_x: number;
165
171
  orient_y: number;
166
172
  active_y_axis: `y1` | `y2`;
173
+ active_x_axis: `x1` | `x2`;
167
174
  color: string;
175
+ category_label?: string;
168
176
  }
169
177
  export interface HistogramHandlerProps<Metadata = Record<string, unknown>> extends HandlerProps<Metadata> {
170
178
  value: number;
171
179
  count: number;
172
180
  property: string;
173
181
  active_y_axis: `y1` | `y2`;
182
+ active_x_axis: `x1` | `x2`;
174
183
  }
175
184
  export type TimeInterval = `day` | `month` | `year`;
176
185
  export type ScaleTypeName = `linear` | `log` | `arcsinh` | `time`;
@@ -179,6 +188,7 @@ export interface ArcsinhScaleConfig {
179
188
  threshold?: number;
180
189
  }
181
190
  export type ScaleType = `linear` | `log` | `arcsinh` | `time` | ArcsinhScaleConfig;
191
+ export declare function is_scale_type_name(val: string): val is ScaleTypeName;
182
192
  export declare function get_scale_type_name(scale_type: ScaleType | undefined): ScaleTypeName;
183
193
  export declare function get_arcsinh_threshold(scale_type: ScaleType | undefined): number;
184
194
  export declare function is_time_scale(scale_type: ScaleType | undefined, format: string | undefined): boolean;
@@ -188,33 +198,23 @@ export type QuadrantCounts = {
188
198
  bottom_left: number;
189
199
  bottom_right: number;
190
200
  };
191
- export interface LabelNode<Metadata = Record<string, unknown>> extends SimulationNodeDatum {
192
- id: string;
193
- anchor_x: number;
194
- anchor_y: number;
195
- point_node: InternalPoint<Metadata>;
196
- label_width: number;
197
- label_height: number;
201
+ export interface LabelPlacementWeights {
202
+ overlap?: number;
203
+ marker?: number;
204
+ leader_cross?: number;
205
+ leader_text?: number;
206
+ distance?: number;
207
+ bounds?: number;
198
208
  }
199
209
  export interface LabelPlacementConfig {
200
- collision_strength: number;
201
- link_strength: number;
202
- link_distance: number;
203
- placement_ticks: number;
204
- link_distance_range?: [number | null, number | null];
210
+ sa_iterations?: number;
211
+ weights?: LabelPlacementWeights;
212
+ leader_line_threshold?: number;
213
+ max_labels?: number;
205
214
  }
206
215
  export type HoverConfig = {
207
216
  threshold_px: number;
208
217
  };
209
- export interface AnchorNode extends SimulationNodeDatum {
210
- id: string;
211
- fx: number;
212
- fy: number;
213
- point_radius: number;
214
- show_color_bar?: boolean;
215
- color_bar?: ComponentProps<typeof ColorBar> | null;
216
- label_placement_config?: Partial<LabelPlacementConfig>;
217
- }
218
218
  export type LegendConfig = Omit<ComponentProps<typeof PlotLegend>, `series_data` | `on_drag_start` | `on_drag` | `on_drag_end`> & {
219
219
  margin?: number | Sides;
220
220
  tween?: TweenedOptions<XyObj>;
@@ -246,19 +246,21 @@ export type UserContentProps = {
246
246
  height: number;
247
247
  width: number;
248
248
  x_scale_fn: (x: number) => number;
249
+ x2_scale_fn?: (x: number) => number;
249
250
  y_scale_fn: (y: number) => number;
250
251
  y2_scale_fn?: (y: number) => number;
251
252
  pad: Required<Sides>;
252
- x_range: [number, number];
253
- y_range: [number, number];
254
- y2_range?: [number, number];
253
+ x_range: Vec2;
254
+ x2_range?: Vec2;
255
+ y_range: Vec2;
256
+ y2_range?: Vec2;
255
257
  fullscreen: boolean;
256
258
  };
257
259
  export type Orientation = `vertical` | `horizontal`;
258
260
  export type BarMode = `overlay` | `stacked` | `grouped`;
259
261
  export interface BarSeries<Metadata = Record<string, unknown>> {
260
262
  id?: string | number;
261
- x: readonly number[];
263
+ x: readonly (number | string)[];
262
264
  y: readonly number[];
263
265
  label?: string;
264
266
  legend_group?: string;
@@ -268,6 +270,7 @@ export interface BarSeries<Metadata = Record<string, unknown>> {
268
270
  metadata?: Metadata[] | Metadata;
269
271
  labels?: readonly (string | null | undefined)[];
270
272
  render_mode?: `bar` | `line`;
273
+ x_axis?: `x1` | `x2`;
271
274
  y_axis?: `y1` | `y2`;
272
275
  line_style?: {
273
276
  stroke_width?: number;
@@ -295,6 +298,7 @@ export interface AxisOption {
295
298
  unit?: string;
296
299
  }
297
300
  export type Y2SyncMode = `none` | `synced` | `align`;
301
+ export declare function is_y2_sync_mode(val: string): val is Y2SyncMode;
298
302
  export interface Y2SyncConfig {
299
303
  mode: Y2SyncMode;
300
304
  align_value?: number;
@@ -313,6 +317,7 @@ export interface AxisConfig {
313
317
  options?: AxisOption[];
314
318
  selected_key?: string;
315
319
  sync?: Y2SyncConfig | Y2SyncMode;
320
+ categories?: readonly string[];
316
321
  }
317
322
  export interface DataLoaderResult<Metadata = Record<string, unknown>, SeriesType = DataSeries<Metadata>> {
318
323
  series: SeriesType[];
@@ -331,15 +336,18 @@ export interface ColorScaleOption {
331
336
  scale: string | ((t: number) => string);
332
337
  }
333
338
  export type ColorBarDataLoaderFn = (property_key: string) => Promise<{
334
- range: [number, number];
339
+ range: Vec2;
335
340
  title?: string;
336
341
  }>;
337
342
  export interface DisplayConfig {
338
343
  x_grid?: boolean;
344
+ x2_grid?: boolean;
339
345
  y_grid?: boolean;
340
346
  y2_grid?: boolean;
341
347
  x_zero_line?: boolean;
348
+ x2_zero_line?: boolean;
342
349
  y_zero_line?: boolean;
350
+ y2_zero_line?: boolean;
343
351
  }
344
352
  export interface StyleOverrides {
345
353
  point?: {
@@ -359,9 +367,10 @@ export interface StyleOverrides {
359
367
  show_points?: boolean;
360
368
  show_lines?: boolean;
361
369
  }
362
- export type AxisKey = `x` | `y` | `y2`;
370
+ export type AxisKey = `x` | `x2` | `y` | `y2`;
363
371
  export interface PlotConfig {
364
372
  x_axis?: AxisConfig;
373
+ x2_axis?: AxisConfig;
365
374
  y_axis?: AxisConfig;
366
375
  y2_axis?: AxisConfig;
367
376
  display?: DisplayConfig;
@@ -388,9 +397,11 @@ export interface PlotControlsProps extends PlotConfig {
388
397
  controls_open?: boolean;
389
398
  children?: Snippet<[ControlsState]>;
390
399
  post_children?: Snippet<[ControlsState]>;
391
- auto_x_range?: [number, number];
392
- auto_y_range?: [number, number];
393
- auto_y2_range?: [number, number];
400
+ auto_x_range?: Vec2;
401
+ auto_x2_range?: Vec2;
402
+ auto_y_range?: Vec2;
403
+ auto_y2_range?: Vec2;
404
+ has_x2_points?: boolean;
394
405
  has_y2_points?: boolean;
395
406
  show_ticks?: boolean;
396
407
  controls_title?: string;
@@ -400,6 +411,7 @@ export interface PlotControlsProps extends PlotConfig {
400
411
  }
401
412
  export interface BasePlotProps {
402
413
  x_range?: [number | null, number | null];
414
+ x2_range?: [number | null, number | null];
403
415
  y_range?: [number | null, number | null];
404
416
  y2_range?: [number | null, number | null];
405
417
  range_padding?: number;
@@ -457,12 +469,12 @@ export type SurfaceType = `grid` | `parametric` | `triangulated`;
457
469
  export interface Surface3DConfig {
458
470
  id?: string | number;
459
471
  type: SurfaceType;
460
- x_range?: [number, number];
461
- y_range?: [number, number];
462
- resolution?: number | [number, number];
472
+ x_range?: Vec2;
473
+ y_range?: Vec2;
474
+ resolution?: number | Vec2;
463
475
  z_fn?: (x: number, y: number) => number;
464
- u_range?: [number, number];
465
- v_range?: [number, number];
476
+ u_range?: Vec2;
477
+ v_range?: Vec2;
466
478
  parametric_fn?: (u: number, v: number) => XyzObj;
467
479
  points?: XyzObj[];
468
480
  triangles?: Vec3[];
@@ -541,7 +553,7 @@ export type FillBoundary = {
541
553
  value: number;
542
554
  } | {
543
555
  type: `axis`;
544
- axis: `x` | `y` | `y2`;
556
+ axis: `x` | `x2` | `y` | `y2`;
545
557
  value?: number;
546
558
  } | {
547
559
  type: `function`;
@@ -664,6 +676,7 @@ export interface RefLineBase {
664
676
  x_span?: [number | null, number | null];
665
677
  y_span?: [number | null, number | null];
666
678
  coord_mode?: `data` | `relative`;
679
+ x_axis?: `x1` | `x2`;
667
680
  y_axis?: `y1` | `y2`;
668
681
  style?: RefLineStyle;
669
682
  annotation?: RefLineAnnotation;
@@ -830,7 +843,7 @@ export interface CleaningQuality {
830
843
  oscillation_score?: number;
831
844
  bounds_violations: number;
832
845
  outliers_removed?: number;
833
- stable_range?: [number, number];
846
+ stable_range?: Vec2;
834
847
  truncated_at_x?: number;
835
848
  }
836
849
  export interface CleaningResult<T = DataSeries> {
@@ -1,3 +1,8 @@
1
+ // Type guard for select value narrowing (avoids unsafe casts)
2
+ const SCALE_TYPE_NAMES = new Set([`linear`, `log`, `arcsinh`, `time`]);
3
+ export function is_scale_type_name(val) {
4
+ return SCALE_TYPE_NAMES.has(val);
5
+ }
1
6
  // Helper to normalize ScaleType to base type name
2
7
  export function get_scale_type_name(scale_type) {
3
8
  if (!scale_type)
@@ -27,6 +32,11 @@ export function is_time_scale(scale_type, format) {
27
32
  // Fallback: d3 time format strings start with '%'
28
33
  return format?.startsWith(`%`) ?? false;
29
34
  }
35
+ // Type guard for select value narrowing (avoids unsafe casts)
36
+ const Y2_SYNC_MODES = new Set([`none`, `synced`, `align`]);
37
+ export function is_y2_sync_mode(val) {
38
+ return Y2_SYNC_MODES.has(val);
39
+ }
30
40
  export const LINE_TYPES = [`solid`, `dashed`, `dotted`];
31
41
  // Define grid cell identifiers
32
42
  export const CELLS_3X3 = [
@@ -40,15 +50,10 @@ export const CELLS_3X3 = [
40
50
  `bottom-center`,
41
51
  `bottom-right`,
42
52
  ];
43
- export const CORNER_CELLS = [
44
- `top-left`,
45
- `top-right`,
46
- `bottom-left`,
47
- `bottom-right`,
48
- ];
53
+ export const CORNER_CELLS = [`top-left`, `top-right`, `bottom-left`, `bottom-right`];
49
54
  // Default grid line style (SSOT for all plot components)
50
55
  export const DEFAULT_GRID_STYLE = {
51
- 'stroke': `var(--border-color, gray)`,
56
+ stroke: `var(--border-color, gray)`,
52
57
  'stroke-dasharray': `4`,
53
58
  'stroke-width': `1`,
54
59
  };
@@ -1,21 +1,38 @@
1
1
  import type { AxisConfig, DataSeries, XyObj } from '..';
2
2
  import type { PlotScaleFn } from '../scales';
3
- import type { LabelPlacementConfig } from '../types';
4
- type ScaleFn = PlotScaleFn;
5
- export interface AnchorNode {
6
- id: string;
7
- fx: number;
8
- fy: number;
9
- point_radius: number;
3
+ import type { LabelPlacementConfig, LabelPlacementWeights } from '../types';
4
+ export interface Rect {
5
+ x: number;
6
+ y: number;
7
+ w: number;
8
+ h: number;
10
9
  }
11
- export declare function compute_label_positions(filtered_series: DataSeries[], config: LabelPlacementConfig & {
12
- max_labels?: number;
13
- charge_strength?: number;
14
- charge_distance_max?: number;
15
- }, scales: {
16
- x_scale_fn: ScaleFn;
17
- y_scale_fn: ScaleFn;
18
- y2_scale_fn: ScaleFn;
10
+ export interface PlotBounds {
11
+ min_x: number;
12
+ min_y: number;
13
+ max_x: number;
14
+ max_y: number;
15
+ }
16
+ interface AnchorInfo {
17
+ x: number;
18
+ y: number;
19
+ radius: number;
20
+ }
21
+ interface LabelState extends Rect {
22
+ anchor_idx: number;
23
+ }
24
+ export declare function parse_font_size(size_str?: string): number;
25
+ export declare function rect_overlap_area(a: Rect, b: Rect): number;
26
+ export declare function rect_circle_overlap(rect: Rect, cx: number, cy: number, radius: number): number;
27
+ export declare function segments_intersect(ax1: number, ay1: number, ax2: number, ay2: number, bx1: number, by1: number, bx2: number, by2: number): boolean;
28
+ export declare function segment_rect_intersects(sx1: number, sy1: number, sx2: number, sy2: number, rect: Rect): boolean;
29
+ export declare function rect_out_of_bounds_area(rect: Rect, bounds: PlotBounds): number;
30
+ export declare function generate_candidates(ax: number, ay: number, point_radius: number, label_w: number, label_h: number, gap: number): XyObj[];
31
+ export declare function compute_delta_energy(labels: LabelState[], anchors: AnchorInfo[], changed_idx: number, old_state: LabelState, new_state: LabelState, weights: Required<LabelPlacementWeights>, bounds: PlotBounds): number;
32
+ export declare function compute_label_positions(filtered_series: DataSeries[], config: LabelPlacementConfig, scales: {
33
+ x_scale_fn: PlotScaleFn;
34
+ y_scale_fn: PlotScaleFn;
35
+ y2_scale_fn: PlotScaleFn;
19
36
  x_axis: AxisConfig;
20
37
  }, bounds: {
21
38
  width: number;