matterviz 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/dist/EmptyState.svelte +10 -4
  2. package/dist/FilePicker.svelte +48 -60
  3. package/dist/Icon.svelte +7 -4
  4. package/dist/MillerIndexInput.svelte +2 -2
  5. package/dist/api/optimade.js +10 -7
  6. package/dist/app.css +68 -0
  7. package/dist/brillouin/BrillouinZone.svelte +90 -91
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
  9. package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
  11. package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
  12. package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  14. package/dist/brillouin/compute.js +10 -16
  15. package/dist/brillouin/geometry.js +2 -2
  16. package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
  17. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
  18. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
  19. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
  20. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
  21. package/dist/chempot-diagram/async-compute.svelte.js +13 -14
  22. package/dist/chempot-diagram/color.d.ts +21 -1
  23. package/dist/chempot-diagram/color.js +70 -1
  24. package/dist/chempot-diagram/compute.d.ts +7 -0
  25. package/dist/chempot-diagram/compute.js +85 -26
  26. package/dist/chempot-diagram/controls-state.svelte.js +1 -1
  27. package/dist/chempot-diagram/export.js +1 -6
  28. package/dist/chempot-diagram/temperature.js +9 -10
  29. package/dist/colors/index.d.ts +0 -4
  30. package/dist/colors/index.js +19 -20
  31. package/dist/composition/BarChart.svelte +30 -26
  32. package/dist/composition/BubbleChart.svelte +17 -17
  33. package/dist/composition/Composition.svelte +10 -19
  34. package/dist/composition/Formula.svelte +20 -27
  35. package/dist/composition/FormulaFilter.svelte +115 -184
  36. package/dist/composition/PieChart.svelte +55 -41
  37. package/dist/composition/format.js +7 -9
  38. package/dist/composition/index.d.ts +2 -0
  39. package/dist/composition/index.js +14 -0
  40. package/dist/composition/parse.d.ts +2 -2
  41. package/dist/composition/parse.js +61 -115
  42. package/dist/constants.d.ts +0 -1
  43. package/dist/constants.js +17 -26
  44. package/dist/convex-hull/ConvexHull.svelte +12 -15
  45. package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
  46. package/dist/convex-hull/ConvexHull2D.svelte +93 -94
  47. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
  48. package/dist/convex-hull/ConvexHull3D.svelte +127 -186
  49. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
  50. package/dist/convex-hull/ConvexHull4D.svelte +131 -180
  51. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
  52. package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
  53. package/dist/convex-hull/ConvexHullControls.svelte +46 -48
  54. package/dist/convex-hull/ConvexHullStats.svelte +193 -195
  55. package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
  56. package/dist/convex-hull/GasPressureControls.svelte +5 -12
  57. package/dist/convex-hull/StructurePopup.svelte +18 -22
  58. package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
  59. package/dist/convex-hull/TemperatureSlider.svelte +4 -10
  60. package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
  61. package/dist/convex-hull/gas-thermodynamics.js +21 -53
  62. package/dist/convex-hull/helpers.d.ts +8 -10
  63. package/dist/convex-hull/helpers.js +37 -43
  64. package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
  65. package/dist/convex-hull/thermodynamics.js +37 -44
  66. package/dist/coordination/CoordinationBarPlot.svelte +49 -53
  67. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
  68. package/dist/coordination/calc-coordination.d.ts +1 -1
  69. package/dist/coordination/calc-coordination.js +28 -25
  70. package/dist/element/BohrAtom.svelte +5 -9
  71. package/dist/element/ElementHeading.svelte +4 -1
  72. package/dist/element/ElementPhoto.svelte +11 -9
  73. package/dist/element/ElementStats.svelte +12 -10
  74. package/dist/element/ElementTile.svelte +44 -67
  75. package/dist/element/Nucleus.svelte +4 -2
  76. package/dist/element/data.d.ts +3 -2
  77. package/dist/element/data.js +5 -1
  78. package/dist/element/helpers.d.ts +4 -0
  79. package/dist/element/helpers.js +18 -0
  80. package/dist/element/index.d.ts +2 -5
  81. package/dist/element/index.js +4 -19
  82. package/dist/feedback/DragOverlay.svelte +5 -5
  83. package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
  84. package/dist/feedback/StatusMessage.svelte +7 -4
  85. package/dist/fermi-surface/FermiSlice.svelte +21 -18
  86. package/dist/fermi-surface/FermiSurface.svelte +35 -44
  87. package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
  88. package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
  89. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
  90. package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
  91. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  92. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
  93. package/dist/fermi-surface/compute.js +25 -58
  94. package/dist/fermi-surface/parse.js +54 -88
  95. package/dist/file-viewer/JsonBrowser.svelte +1043 -0
  96. package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
  97. package/dist/file-viewer/PlotPanel.svelte +350 -0
  98. package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
  99. package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
  100. package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
  101. package/dist/file-viewer/detect.d.ts +11 -0
  102. package/dist/file-viewer/detect.js +381 -0
  103. package/dist/file-viewer/eligibility.d.ts +4 -0
  104. package/dist/file-viewer/eligibility.js +53 -0
  105. package/dist/file-viewer/host-protocol.d.ts +50 -0
  106. package/dist/file-viewer/host-transfer.d.ts +25 -0
  107. package/dist/file-viewer/host-transfer.js +42 -0
  108. package/dist/file-viewer/index.d.ts +5 -0
  109. package/dist/file-viewer/index.js +5 -0
  110. package/dist/file-viewer/main.d.ts +44 -0
  111. package/dist/file-viewer/main.js +535 -0
  112. package/dist/file-viewer/parse.d.ts +9 -0
  113. package/dist/file-viewer/parse.js +170 -0
  114. package/dist/file-viewer/plot-utils.d.ts +24 -0
  115. package/dist/file-viewer/plot-utils.js +191 -0
  116. package/dist/file-viewer/types.d.ts +4 -0
  117. package/dist/file-viewer/types.js +5 -0
  118. package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
  119. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
  120. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
  121. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
  122. package/dist/heatmap-matrix/index.d.ts +5 -0
  123. package/dist/icons.d.ts +4 -0
  124. package/dist/icons.js +4 -0
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +1 -1
  127. package/dist/io/ExportPane.svelte +11 -7
  128. package/dist/io/decompress.d.ts +4 -1
  129. package/dist/io/decompress.js +24 -36
  130. package/dist/io/export.d.ts +11 -4
  131. package/dist/io/export.js +75 -19
  132. package/dist/io/fetch.d.ts +0 -3
  133. package/dist/io/fetch.js +0 -11
  134. package/dist/io/file-drop.js +60 -35
  135. package/dist/io/index.d.ts +0 -1
  136. package/dist/io/index.js +2 -9
  137. package/dist/io/is-binary.d.ts +9 -0
  138. package/dist/io/is-binary.js +45 -1
  139. package/dist/io/url-drop.d.ts +2 -0
  140. package/dist/io/url-drop.js +40 -40
  141. package/dist/isosurface/Isosurface.svelte +700 -215
  142. package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
  143. package/dist/isosurface/IsosurfaceControls.svelte +590 -116
  144. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
  145. package/dist/isosurface/VolumeSlice.svelte +224 -0
  146. package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
  147. package/dist/isosurface/coloring.d.ts +20 -0
  148. package/dist/isosurface/coloring.js +118 -0
  149. package/dist/isosurface/geometry-worker-types.d.ts +38 -0
  150. package/dist/isosurface/geometry.worker.d.ts +1 -0
  151. package/dist/isosurface/geometry.worker.js +59 -0
  152. package/dist/isosurface/grid.d.ts +10 -0
  153. package/dist/isosurface/grid.js +31 -0
  154. package/dist/isosurface/index.d.ts +4 -0
  155. package/dist/isosurface/index.js +4 -0
  156. package/dist/isosurface/parse-vaspwave.d.ts +3 -0
  157. package/dist/isosurface/parse-vaspwave.js +138 -0
  158. package/dist/isosurface/parse.js +6 -6
  159. package/dist/isosurface/profile.d.ts +12 -0
  160. package/dist/isosurface/profile.js +19 -0
  161. package/dist/isosurface/sampling.d.ts +34 -0
  162. package/dist/isosurface/sampling.js +408 -0
  163. package/dist/isosurface/slice-rendering.d.ts +13 -0
  164. package/dist/isosurface/slice-rendering.js +79 -0
  165. package/dist/isosurface/slice.d.ts +22 -2
  166. package/dist/isosurface/slice.js +200 -116
  167. package/dist/isosurface/types.d.ts +24 -1
  168. package/dist/isosurface/types.js +120 -8
  169. package/dist/json-path.d.ts +4 -0
  170. package/dist/json-path.js +89 -0
  171. package/dist/labels.d.ts +6 -2
  172. package/dist/labels.js +44 -14
  173. package/dist/layout/FullscreenButton.svelte +2 -1
  174. package/dist/layout/FullscreenToggle.svelte +10 -4
  175. package/dist/layout/InfoCard.svelte +8 -21
  176. package/dist/layout/InfoTag.svelte +1 -3
  177. package/dist/layout/NumberRangeInput.svelte +46 -0
  178. package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
  179. package/dist/layout/PropertyFilter.svelte +2 -6
  180. package/dist/layout/SettingsSection.svelte +57 -62
  181. package/dist/layout/SettingsSection.svelte.d.ts +6 -7
  182. package/dist/layout/SubpageGrid.svelte +3 -1
  183. package/dist/layout/ViewerChrome.svelte +16 -11
  184. package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
  185. package/dist/layout/fullscreen.js +3 -5
  186. package/dist/layout/fullscreen.svelte.js +1 -2
  187. package/dist/layout/index.d.ts +1 -0
  188. package/dist/layout/index.js +1 -0
  189. package/dist/layout/json-tree/JsonNode.svelte +22 -59
  190. package/dist/layout/json-tree/JsonTree.svelte +101 -172
  191. package/dist/layout/json-tree/JsonValue.svelte +9 -32
  192. package/dist/layout/json-tree/utils.d.ts +0 -3
  193. package/dist/layout/json-tree/utils.js +50 -188
  194. package/dist/marching-cubes.d.ts +8 -1
  195. package/dist/marching-cubes.js +115 -48
  196. package/dist/math.d.ts +5 -2
  197. package/dist/math.js +48 -38
  198. package/dist/overlays/ContextMenu.svelte +19 -34
  199. package/dist/overlays/CopyButton.svelte +11 -5
  200. package/dist/overlays/DragControlTab.svelte +6 -1
  201. package/dist/overlays/DraggablePane.svelte +110 -74
  202. package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
  203. package/dist/overlays/GlassChip.svelte +32 -0
  204. package/dist/overlays/GlassChip.svelte.d.ts +8 -0
  205. package/dist/overlays/InfoPaneCards.svelte +11 -23
  206. package/dist/overlays/index.d.ts +7 -0
  207. package/dist/overlays/index.js +26 -0
  208. package/dist/overlays/portal.d.ts +2 -0
  209. package/dist/overlays/portal.js +14 -0
  210. package/dist/periodic-table/PeriodicTable.svelte +113 -145
  211. package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
  212. package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
  213. package/dist/periodic-table/TableInset.svelte +9 -4
  214. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
  215. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
  216. package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
  217. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
  218. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
  219. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
  220. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
  221. package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
  222. package/dist/phase-diagram/build-diagram.js +4 -9
  223. package/dist/phase-diagram/diagram-input.d.ts +1 -2
  224. package/dist/phase-diagram/parse.js +15 -15
  225. package/dist/phase-diagram/svg-to-diagram.js +28 -27
  226. package/dist/phase-diagram/utils.js +2 -3
  227. package/dist/plot/bar/BarPlot.svelte +461 -426
  228. package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
  229. package/dist/plot/bar/BarPlotControls.svelte +1 -3
  230. package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
  231. package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
  232. package/dist/plot/bar/data.d.ts +5 -4
  233. package/dist/plot/bar/data.js +2 -1
  234. package/dist/plot/box/BoxPlot.svelte +322 -226
  235. package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
  236. package/dist/plot/box/Violin.svelte.d.ts +1 -0
  237. package/dist/plot/box/box-plot.js +1 -1
  238. package/dist/plot/core/auto-place.d.ts +1 -1
  239. package/dist/plot/core/auto-place.js +2 -2
  240. package/dist/plot/core/axis-utils.d.ts +12 -7
  241. package/dist/plot/core/axis-utils.js +48 -48
  242. package/dist/plot/core/components/AxisLabel.svelte +82 -20
  243. package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
  244. package/dist/plot/core/components/ColorBar.svelte +101 -106
  245. package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
  246. package/dist/plot/core/components/FillArea.svelte +10 -17
  247. package/dist/plot/core/components/HierarchyControls.svelte +249 -0
  248. package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
  249. package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
  250. package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
  251. package/dist/plot/core/components/Line.svelte +18 -9
  252. package/dist/plot/core/components/Line.svelte.d.ts +2 -0
  253. package/dist/plot/core/components/PlotAxis.svelte +40 -17
  254. package/dist/plot/core/components/PlotControls.svelte +65 -41
  255. package/dist/plot/core/components/PlotLegend.svelte +31 -35
  256. package/dist/plot/core/components/PlotMarginals.svelte +616 -0
  257. package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
  258. package/dist/plot/core/components/PlotTooltip.svelte +1 -1
  259. package/dist/plot/core/components/PortalSelect.svelte +4 -8
  260. package/dist/plot/core/components/ReferenceLine.svelte +27 -24
  261. package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
  262. package/dist/plot/core/components/ReferencePlane.svelte +7 -8
  263. package/dist/plot/core/components/ZeroLines.svelte +4 -8
  264. package/dist/plot/core/components/ZoomRect.svelte +1 -2
  265. package/dist/plot/core/components/index.d.ts +1 -0
  266. package/dist/plot/core/components/index.js +1 -0
  267. package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
  268. package/dist/plot/core/data-cleaning-signal.js +467 -0
  269. package/dist/plot/core/data-cleaning.d.ts +2 -42
  270. package/dist/plot/core/data-cleaning.js +27 -474
  271. package/dist/plot/core/data-transform.d.ts +1 -2
  272. package/dist/plot/core/data-transform.js +9 -15
  273. package/dist/plot/core/fill-utils.d.ts +3 -1
  274. package/dist/plot/core/fill-utils.js +28 -6
  275. package/dist/plot/core/index.d.ts +1 -0
  276. package/dist/plot/core/index.js +1 -0
  277. package/dist/plot/core/interactions.js +0 -2
  278. package/dist/plot/core/layout.d.ts +15 -6
  279. package/dist/plot/core/layout.js +57 -38
  280. package/dist/plot/core/marginals.d.ts +170 -0
  281. package/dist/plot/core/marginals.js +436 -0
  282. package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
  283. package/dist/plot/core/pan-zoom.svelte.js +34 -17
  284. package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
  285. package/dist/plot/core/placed-tween.svelte.js +68 -21
  286. package/dist/plot/core/reference-line.js +1 -1
  287. package/dist/plot/core/scales.d.ts +23 -0
  288. package/dist/plot/core/scales.js +39 -13
  289. package/dist/plot/core/svg.js +0 -1
  290. package/dist/plot/core/types/fills.d.ts +101 -0
  291. package/dist/plot/core/types/fills.js +15 -0
  292. package/dist/plot/core/types/plot-3d.d.ts +87 -0
  293. package/dist/plot/core/types/plot-3d.js +4 -0
  294. package/dist/plot/core/types/reference-lines.d.ts +140 -0
  295. package/dist/plot/core/types/reference-lines.js +9 -0
  296. package/dist/plot/core/types.d.ts +29 -324
  297. package/dist/plot/core/types.js +23 -20
  298. package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
  299. package/dist/plot/core/utils/hierarchy-chart.js +191 -0
  300. package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
  301. package/dist/plot/core/utils/hierarchy-labels.js +100 -0
  302. package/dist/plot/core/utils/label-placement.js +2 -2
  303. package/dist/plot/histogram/Histogram.svelte +314 -340
  304. package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
  305. package/dist/plot/histogram/HistogramControls.svelte +30 -28
  306. package/dist/plot/histogram/histogram.d.ts +31 -0
  307. package/dist/plot/histogram/histogram.js +70 -0
  308. package/dist/plot/histogram/index.d.ts +1 -0
  309. package/dist/plot/histogram/index.js +1 -0
  310. package/dist/plot/index.d.ts +1 -0
  311. package/dist/plot/index.js +1 -0
  312. package/dist/plot/sankey/Sankey.svelte +78 -69
  313. package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
  314. package/dist/plot/sankey/SankeyControls.svelte +22 -16
  315. package/dist/plot/sankey/sankey.js +13 -9
  316. package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
  317. package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
  318. package/dist/plot/scatter/ElementScatter.svelte +4 -1
  319. package/dist/plot/scatter/ScatterPlot.svelte +517 -410
  320. package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
  321. package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
  322. package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
  323. package/dist/plot/scatter/ScatterPoint.svelte +16 -9
  324. package/dist/plot/scatter/adaptive-density.d.ts +1 -1
  325. package/dist/plot/scatter/adaptive-density.js +36 -20
  326. package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
  327. package/dist/plot/scatter/binned-scatter-types.js +6 -1
  328. package/dist/plot/scatter/scatter-data.d.ts +1 -1
  329. package/dist/plot/scatter/scatter-data.js +8 -7
  330. package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
  331. package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
  332. package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
  333. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
  334. package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
  335. package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
  336. package/dist/plot/sunburst/Sunburst.svelte +269 -347
  337. package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
  338. package/dist/plot/sunburst/index.d.ts +1 -1
  339. package/dist/plot/sunburst/index.js +2 -1
  340. package/dist/plot/sunburst/render.d.ts +2 -2
  341. package/dist/plot/sunburst/render.js +47 -22
  342. package/dist/plot/sunburst/sunburst.d.ts +5 -1
  343. package/dist/plot/sunburst/sunburst.js +10 -3
  344. package/dist/plot/treemap/Treemap.svelte +1022 -0
  345. package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
  346. package/dist/plot/treemap/index.d.ts +4 -0
  347. package/dist/plot/treemap/index.js +4 -0
  348. package/dist/plot/treemap/labels.d.ts +38 -0
  349. package/dist/plot/treemap/labels.js +80 -0
  350. package/dist/plot/treemap/treemap.d.ts +28 -0
  351. package/dist/plot/treemap/treemap.js +102 -0
  352. package/dist/rdf/RdfPlot.svelte +37 -59
  353. package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
  354. package/dist/rdf/calc-rdf.js +63 -52
  355. package/dist/rdf/index.d.ts +0 -1
  356. package/dist/sanitize.js +85 -27
  357. package/dist/scene/SceneCamera.svelte +1 -1
  358. package/dist/scene/SceneCamera.svelte.d.ts +1 -1
  359. package/dist/scene/bind-renderer.svelte.js +14 -6
  360. package/dist/scene/index.d.ts +1 -2
  361. package/dist/scene/index.js +1 -1
  362. package/dist/scene/{props.js → props.svelte.js} +15 -1
  363. package/dist/settings.d.ts +19 -9
  364. package/dist/settings.js +229 -525
  365. package/dist/spectral/Bands.svelte +207 -221
  366. package/dist/spectral/BandsAndDos.svelte +11 -9
  367. package/dist/spectral/BrillouinBandsDos.svelte +19 -42
  368. package/dist/spectral/Dos.svelte +92 -93
  369. package/dist/spectral/helpers.d.ts +3 -3
  370. package/dist/spectral/helpers.js +65 -140
  371. package/dist/state.svelte.js +5 -18
  372. package/dist/structure/Arrow.svelte +5 -18
  373. package/dist/structure/ArrowInstances.svelte +160 -0
  374. package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
  375. package/dist/structure/AtomLegend.svelte +120 -85
  376. package/dist/structure/AtomLegend.svelte.d.ts +2 -3
  377. package/dist/structure/Bond.svelte +31 -23
  378. package/dist/structure/CanvasTooltip.svelte +15 -3
  379. package/dist/structure/CellSelect.svelte +45 -35
  380. package/dist/structure/Cylinder.svelte +24 -40
  381. package/dist/structure/InstancedAtoms.svelte +114 -0
  382. package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
  383. package/dist/structure/Lattice.svelte +85 -149
  384. package/dist/structure/SiteLabels.svelte +122 -0
  385. package/dist/structure/SiteLabels.svelte.d.ts +18 -0
  386. package/dist/structure/Structure.svelte +636 -504
  387. package/dist/structure/Structure.svelte.d.ts +4 -2
  388. package/dist/structure/StructureCarousel.svelte +637 -0
  389. package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
  390. package/dist/structure/StructureControls.svelte +165 -425
  391. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  392. package/dist/structure/StructureExportPane.svelte +17 -21
  393. package/dist/structure/StructureInfoPane.svelte +128 -133
  394. package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
  395. package/dist/structure/StructureScene.svelte +535 -578
  396. package/dist/structure/StructureScene.svelte.d.ts +6 -2
  397. package/dist/structure/StructureViewport.svelte +451 -0
  398. package/dist/structure/StructureViewport.svelte.d.ts +65 -0
  399. package/dist/structure/atom-label-placement.d.ts +16 -12
  400. package/dist/structure/atom-label-placement.js +70 -37
  401. package/dist/structure/atom-properties.d.ts +2 -0
  402. package/dist/structure/atom-properties.js +105 -38
  403. package/dist/structure/bond-order-perception.js +3 -8
  404. package/dist/structure/bonding.d.ts +9 -3
  405. package/dist/structure/bonding.js +95 -46
  406. package/dist/structure/edit-history.d.ts +6 -0
  407. package/dist/structure/edit-history.js +27 -0
  408. package/dist/structure/export.d.ts +1 -0
  409. package/dist/structure/export.js +89 -105
  410. package/dist/structure/format-detect.d.ts +1 -0
  411. package/dist/structure/format-detect.js +20 -0
  412. package/dist/structure/geometry.d.ts +9 -0
  413. package/dist/structure/geometry.js +27 -0
  414. package/dist/structure/index.d.ts +16 -1
  415. package/dist/structure/index.js +15 -10
  416. package/dist/structure/measure.d.ts +1 -1
  417. package/dist/structure/measure.js +6 -12
  418. package/dist/structure/parse.d.ts +2 -1
  419. package/dist/structure/parse.js +272 -313
  420. package/dist/structure/partial-occupancy.js +10 -5
  421. package/dist/structure/pbc.js +85 -107
  422. package/dist/structure/polyhedra.d.ts +0 -1
  423. package/dist/structure/polyhedra.js +7 -21
  424. package/dist/structure/prop-groups.d.ts +85 -0
  425. package/dist/structure/prop-groups.js +18 -0
  426. package/dist/structure/supercell.d.ts +1 -2
  427. package/dist/structure/supercell.js +7 -13
  428. package/dist/symmetry/SymmetryElements.svelte +11 -15
  429. package/dist/symmetry/SymmetryStats.svelte +55 -71
  430. package/dist/symmetry/WyckoffTable.svelte +10 -28
  431. package/dist/symmetry/cell-transform.js +6 -14
  432. package/dist/symmetry/index.d.ts +1 -0
  433. package/dist/symmetry/index.js +13 -10
  434. package/dist/symmetry/spacegroups.js +3 -2
  435. package/dist/table/HeatmapTable.svelte +1142 -447
  436. package/dist/table/HeatmapTable.svelte.d.ts +12 -2
  437. package/dist/table/ToggleMenu.svelte +168 -53
  438. package/dist/table/ToggleMenu.svelte.d.ts +1 -1
  439. package/dist/table/index.d.ts +21 -6
  440. package/dist/table/index.js +34 -21
  441. package/dist/theme/ThemeControl.svelte +16 -8
  442. package/dist/theme/embedded.d.ts +18 -0
  443. package/dist/theme/embedded.js +206 -0
  444. package/dist/theme/index.d.ts +5 -5
  445. package/dist/theme/index.js +5 -12
  446. package/dist/theme/themes.mjs +44 -66
  447. package/dist/tooltip/KCoords.svelte +4 -1
  448. package/dist/tooltip/TooltipContent.svelte +3 -6
  449. package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
  450. package/dist/tooltip/index.d.ts +8 -1
  451. package/dist/trajectory/Trajectory.svelte +613 -386
  452. package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
  453. package/dist/trajectory/TrajectoryError.svelte +12 -74
  454. package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
  455. package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
  456. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
  457. package/dist/trajectory/extract.js +61 -49
  458. package/dist/trajectory/format-detect.d.ts +2 -0
  459. package/dist/trajectory/format-detect.js +17 -13
  460. package/dist/trajectory/frame-reader.d.ts +2 -0
  461. package/dist/trajectory/frame-reader.js +35 -32
  462. package/dist/trajectory/helpers.d.ts +2 -0
  463. package/dist/trajectory/helpers.js +34 -56
  464. package/dist/trajectory/index.d.ts +1 -0
  465. package/dist/trajectory/index.js +5 -8
  466. package/dist/trajectory/parse/ase.js +1 -1
  467. package/dist/trajectory/parse/h5-utils.d.ts +13 -0
  468. package/dist/trajectory/parse/h5-utils.js +109 -0
  469. package/dist/trajectory/parse/hdf5.d.ts +1 -1
  470. package/dist/trajectory/parse/hdf5.js +116 -106
  471. package/dist/trajectory/parse/index.d.ts +6 -6
  472. package/dist/trajectory/parse/index.js +25 -33
  473. package/dist/trajectory/parse/lammps.js +8 -12
  474. package/dist/trajectory/parse/vasp.js +10 -7
  475. package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
  476. package/dist/trajectory/parse/vaspout-electronic.js +207 -0
  477. package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
  478. package/dist/trajectory/parse/vaspout-h5.js +281 -0
  479. package/dist/trajectory/parse/xyz.js +59 -9
  480. package/dist/trajectory/plotting.d.ts +8 -9
  481. package/dist/trajectory/plotting.js +113 -64
  482. package/dist/utils.d.ts +3 -0
  483. package/dist/utils.js +7 -0
  484. package/dist/xrd/XrdPlot.svelte +79 -118
  485. package/dist/xrd/broadening.js +2 -1
  486. package/dist/xrd/calc-xrd.js +24 -62
  487. package/dist/xrd/parse.d.ts +0 -1
  488. package/dist/xrd/parse.js +69 -95
  489. package/package.json +94 -34
  490. package/readme.md +6 -5
  491. package/dist/api/mp.d.ts +0 -6
  492. package/dist/api/mp.js +0 -22
  493. package/dist/plot/sunburst/SunburstControls.svelte +0 -200
  494. package/dist/scene/types.d.ts +0 -26
  495. package/dist/tooltip/types.d.ts +0 -8
  496. package/dist/trajectory/constants.d.ts +0 -6
  497. package/dist/trajectory/constants.js +0 -11
  498. /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
  499. /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
@@ -1,18 +1,14 @@
1
1
  <script lang="ts">
2
2
  import Icon from '../../Icon.svelte'
3
3
  import { download } from '../../io/fetch'
4
+ import { parse_path } from '../../json-path'
4
5
  import { make_change_detector } from '../../utils'
5
6
  import { setContext, tick } from 'svelte'
6
7
  import { highlight_matches, tooltip } from 'svelte-multiselect/attachments'
7
8
  import type { HTMLAttributes } from 'svelte/elements'
8
9
  import { SvelteSet } from 'svelte/reactivity'
9
10
  import JsonNode from './JsonNode.svelte'
10
- import type {
11
- CopyEventPosition,
12
- DiffEntry,
13
- JsonTreeContext,
14
- JsonTreeProps,
15
- } from './types'
11
+ import type { CopyEventPosition, DiffEntry, JsonTreeContext, JsonTreeProps } from './types'
16
12
  import { JSON_TREE_CONTEXT_KEY } from './types'
17
13
  import {
18
14
  build_ghost_map,
@@ -21,7 +17,6 @@
21
17
  find_matching_paths,
22
18
  format_preview,
23
19
  get_ancestor_paths,
24
- parse_path,
25
20
  serialize_for_copy,
26
21
  } from './utils'
27
22
 
@@ -50,15 +45,14 @@
50
45
  editable = false,
51
46
  onchange,
52
47
  ...rest
53
- }: JsonTreeProps & Omit<HTMLAttributes<HTMLDivElement>, `onselect` | `onchange`> =
54
- $props()
48
+ }: JsonTreeProps & Omit<HTMLAttributes<HTMLDivElement>, `onselect` | `onchange`> = $props()
55
49
 
56
50
  // Internal state
57
51
  let search_query = $state(``)
58
52
  let search_input_value = $state(``)
59
53
  let focused_path = $state<string | null>(null)
60
54
  // Use Set for O(1) lookup/add/delete instead of O(n) array operations
61
- let registered_paths_set = $state(new Set<string>())
55
+ const registered_paths_set = new SvelteSet<string>()
62
56
  let registered_paths_list = $state<string[]>([]) // ordered list for keyboard nav
63
57
  let copy_feedback_path = $state<string | null>(null)
64
58
  let copy_feedback_error = $state(false)
@@ -72,16 +66,14 @@
72
66
  // Reference to the search input for focus management
73
67
  let search_input_element: HTMLInputElement | undefined = $state()
74
68
  // Context menu state (null when closed)
75
- let context_menu_state = $state<
76
- {
77
- x: number
78
- y: number
79
- path: string
80
- value: unknown
81
- expandable: boolean
82
- is_collapsed: boolean
83
- } | null
84
- >(null)
69
+ let context_menu_state = $state<{
70
+ x: number
71
+ y: number
72
+ path: string
73
+ value: unknown
74
+ expandable: boolean
75
+ is_collapsed: boolean
76
+ } | null>(null)
85
77
  // Pinned paths for quick reference
86
78
  let pinned_paths = $state(new SvelteSet<string>())
87
79
  // Selection state for bulk operations
@@ -94,14 +86,16 @@
94
86
  $effect.pre(() => {
95
87
  if (!value_changed(value)) return
96
88
  focused_path = null
97
- registered_paths_set = new Set()
89
+ registered_paths_set.clear()
98
90
  registered_paths_list = []
99
91
  copy_feedback_path = null
100
92
  copy_feedback_error = false
101
93
  context_menu_state = null
102
94
  force_expanded = new SvelteSet()
103
95
  const valid_paths = new SvelteSet(collect_all_paths(value, root_label ?? ``))
104
- collapsed_paths = new SvelteSet([...collapsed_paths].filter((path) => valid_paths.has(path)))
96
+ collapsed_paths = new SvelteSet(
97
+ [...collapsed_paths].filter((path) => valid_paths.has(path)),
98
+ )
105
99
  pinned_paths = new SvelteSet()
106
100
  selected_paths = new SvelteSet()
107
101
  last_selected_path = null
@@ -153,31 +147,10 @@
153
147
  current_match_index = -1
154
148
  return
155
149
  }
156
- const paths_to_expand = new Set<string>()
157
- for (const match of search_matches) {
158
- for (const ancestor of get_ancestor_paths(match)) {
159
- paths_to_expand.add(ancestor)
160
- }
161
- }
162
- let collapsed_changed = false
163
- let force_expanded_changed = false
164
- for (const path_to_expand of paths_to_expand) {
165
- if (collapsed_paths.has(path_to_expand)) {
166
- collapsed_paths.delete(path_to_expand)
167
- collapsed_changed = true
168
- }
169
- // Also add to force_expanded to override auto-fold thresholds (depth/size)
170
- if (!force_expanded.has(path_to_expand)) {
171
- force_expanded.add(path_to_expand)
172
- force_expanded_changed = true
173
- }
174
- }
175
- if (collapsed_changed) {
176
- collapsed_paths = new SvelteSet(collapsed_paths)
177
- }
178
- if (force_expanded_changed) {
179
- force_expanded = new SvelteSet(force_expanded)
180
- }
150
+ const paths_to_expand = new Set([...search_matches].flatMap(get_ancestor_paths))
151
+ // Also add to force_expanded to override auto-fold thresholds (depth/size)
152
+ // Only reassign (which rerenders every node) the sets that actually changed
153
+ set_collapsed(paths_to_expand, () => false)
181
154
  // Wait for DOM to update before scrolling to match
182
155
  await tick()
183
156
  if (sorted_matches.length > 0) {
@@ -211,53 +184,57 @@
211
184
  // Navigate to previous match
212
185
  function go_to_prev_match(): void {
213
186
  if (sorted_matches.length === 0) return
214
- current_match_index = (current_match_index - 1 + sorted_matches.length) %
215
- sorted_matches.length
187
+ current_match_index =
188
+ (current_match_index - 1 + sorted_matches.length) % sorted_matches.length
216
189
  scroll_to_current_match()
217
190
  }
218
191
 
219
192
  // Previous values map for change detection
220
193
  const prev_values = new Map<string, unknown>()
221
194
 
222
- // Toggle collapse - tracks force_expanded to override auto-fold thresholds
223
- function toggle_collapse(path: string, is_currently_collapsed: boolean): void {
224
- if (is_currently_collapsed) {
225
- collapsed_paths.delete(path)
226
- force_expanded.add(path)
227
- } else {
228
- force_expanded.delete(path)
229
- collapsed_paths.add(path)
195
+ // Move each path into collapsed or force_expanded (which overrides auto-fold
196
+ // thresholds), then reassign only the sets that changed (reassignment rerenders
197
+ // every node subscribed to the set's identity)
198
+ function set_collapsed(paths: Iterable<string>, collapse: (path: string) => boolean) {
199
+ let collapsed_changed = false
200
+ let force_expanded_changed = false
201
+ for (const path of paths) {
202
+ if (collapse(path)) {
203
+ force_expanded_changed = force_expanded.delete(path) || force_expanded_changed
204
+ collapsed_changed = !collapsed_paths.has(path) || collapsed_changed
205
+ collapsed_paths.add(path)
206
+ } else {
207
+ collapsed_changed = collapsed_paths.delete(path) || collapsed_changed
208
+ force_expanded_changed = !force_expanded.has(path) || force_expanded_changed
209
+ force_expanded.add(path)
210
+ }
230
211
  }
231
- collapsed_paths = new SvelteSet(collapsed_paths)
232
- force_expanded = new SvelteSet(force_expanded)
212
+ if (collapsed_changed) collapsed_paths = new SvelteSet(collapsed_paths)
213
+ if (force_expanded_changed) force_expanded = new SvelteSet(force_expanded)
214
+ }
215
+
216
+ function toggle_collapse(path: string, is_currently_collapsed: boolean): void {
217
+ set_collapsed([path], () => !is_currently_collapsed)
233
218
  }
234
219
 
235
220
  // Toggle collapse recursively for all descendants
236
221
  function toggle_collapse_recursive(path: string, collapse: boolean): void {
237
- for (const desc of get_descendants(path)) {
238
- if (collapse) {
239
- force_expanded.delete(desc)
240
- collapsed_paths.add(desc)
241
- } else {
242
- collapsed_paths.delete(desc)
243
- force_expanded.add(desc)
244
- }
245
- }
246
- collapsed_paths = new SvelteSet(collapsed_paths)
247
- force_expanded = new SvelteSet(force_expanded)
222
+ set_collapsed(get_descendants(path), () => collapse)
248
223
  }
249
224
 
250
225
  // Get all descendant paths of a given path (including the path itself)
251
226
  function get_descendants(target_path: string): string[] {
252
227
  const all_paths = collect_all_paths(value, root_path)
253
- const descendants = target_path === `` ? all_paths : all_paths.filter(
254
- (entry) =>
255
- entry === target_path || entry.startsWith(`${target_path}.`) ||
256
- entry.startsWith(`${target_path}[`),
257
- )
258
- return descendants.includes(target_path)
259
- ? descendants
260
- : [target_path, ...descendants]
228
+ const descendants =
229
+ target_path === ``
230
+ ? all_paths
231
+ : all_paths.filter(
232
+ (entry) =>
233
+ entry === target_path ||
234
+ entry.startsWith(`${target_path}.`) ||
235
+ entry.startsWith(`${target_path}[`),
236
+ )
237
+ return descendants.includes(target_path) ? descendants : [target_path, ...descendants]
261
238
  }
262
239
 
263
240
  function expand_all(): void {
@@ -277,9 +254,8 @@
277
254
 
278
255
  for (const path of all_paths) {
279
256
  const segments = parse_path(path)
280
- const depth = root_label && segments[0] === root_label
281
- ? segments.length - 1
282
- : segments.length
257
+ const depth =
258
+ root_label && segments[0] === root_label ? segments.length - 1 : segments.length
283
259
  ;(depth >= level ? new_collapsed : new_expanded).add(path)
284
260
  }
285
261
 
@@ -303,7 +279,8 @@
303
279
  await navigator.clipboard.writeText(text)
304
280
  copy_feedback_error = false
305
281
  oncopy?.(path, text)
306
- } catch { // Clipboard API failed - still show feedback but as error
282
+ } catch {
283
+ // Clipboard API failed - still show feedback but as error
307
284
  copy_feedback_error = true
308
285
  }
309
286
  copy_feedback_path = path // Show feedback regardless of success/failure
@@ -362,19 +339,9 @@
362
339
  // Pre-compute ghost children map for O(1) lookup per node
363
340
  let ghost_map = $derived(diff_map ? build_ghost_map(diff_map) : new Map())
364
341
 
365
- // Collapse all descendants but keep the given node expanded (single batch)
342
+ // Collapse all descendants but keep the given node expanded
366
343
  function collapse_children_only(target_path: string): void {
367
- for (const desc of get_descendants(target_path)) {
368
- if (desc === target_path) {
369
- collapsed_paths.delete(desc)
370
- force_expanded.add(desc)
371
- } else {
372
- force_expanded.delete(desc)
373
- collapsed_paths.add(desc)
374
- }
375
- }
376
- collapsed_paths = new SvelteSet(collapsed_paths)
377
- force_expanded = new SvelteSet(force_expanded)
344
+ set_collapsed(get_descendants(target_path), (desc) => desc !== target_path)
378
345
  }
379
346
 
380
347
  // Context menu handlers
@@ -421,9 +388,7 @@
421
388
  const start_idx = registered_paths_list.indexOf(last_selected_path)
422
389
  const end_idx = registered_paths_list.indexOf(select_path)
423
390
  if (start_idx !== -1 && end_idx !== -1) {
424
- const [from, to] = start_idx < end_idx
425
- ? [start_idx, end_idx]
426
- : [end_idx, start_idx]
391
+ const [from, to] = start_idx < end_idx ? [start_idx, end_idx] : [end_idx, start_idx]
427
392
  for (let idx = from; idx <= to; idx++) {
428
393
  selected_paths.add(registered_paths_list[idx])
429
394
  }
@@ -518,6 +483,13 @@
518
483
 
519
484
  // Keyboard navigation at tree level
520
485
  function handle_tree_keydown(event: KeyboardEvent) {
486
+ // F3 navigates search matches (search input handles its own F3/Enter)
487
+ if (event.key === `F3`) {
488
+ event.preventDefault()
489
+ if (event.shiftKey) go_to_prev_match()
490
+ else go_to_next_match()
491
+ return
492
+ }
521
493
  // Escape closes context menu first, then clears selection
522
494
  if (event.key === `Escape`) {
523
495
  if (context_menu_state) {
@@ -606,15 +578,7 @@
606
578
  role="tree"
607
579
  aria-label="JSON tree viewer"
608
580
  {...rest}
609
- onkeydown={(event) => {
610
- handle_tree_keydown(event)
611
- // F3 at tree level for match navigation
612
- if (event.key === `F3`) {
613
- event.preventDefault()
614
- if (event.shiftKey) go_to_prev_match()
615
- else go_to_next_match()
616
- }
617
- }}
581
+ onkeydown={handle_tree_keydown}
618
582
  >
619
583
  {#if show_header}
620
584
  <header class="json-tree-header">
@@ -661,9 +625,7 @@
661
625
  >
662
626
  <Icon icon="ArrowDown" style="width: 12px; height: 12px" />
663
627
  </button>
664
- <span class="match-count">{current_match_index + 1} of {
665
- sorted_matches.length
666
- }</span>
628
+ <span class="match-count">{current_match_index + 1} of {sorted_matches.length}</span>
667
629
  </div>
668
630
  {/if}
669
631
  <div class="controls">
@@ -691,38 +653,19 @@
691
653
  <button type="button" onclick={expand_all} title="Expand all" {@attach tooltip()}>
692
654
  <Icon icon="Expand" style="width: 14px; height: 14px" />
693
655
  </button>
694
- <button
695
- type="button"
696
- onclick={collapse_all}
697
- title="Collapse all"
698
- {@attach tooltip()}
699
- >
656
+ <button type="button" onclick={collapse_all} title="Collapse all" {@attach tooltip()}>
700
657
  <Icon icon="Collapse" style="width: 14px; height: 14px" />
701
658
  </button>
702
- <button
703
- type="button"
704
- onclick={() => collapse_to_level(1)}
705
- title="Collapse to level 1"
706
- {@attach tooltip()}
707
- >
708
- 1
709
- </button>
710
- <button
711
- type="button"
712
- onclick={() => collapse_to_level(2)}
713
- title="Collapse to level 2"
714
- {@attach tooltip()}
715
- >
716
- 2
717
- </button>
718
- <button
719
- type="button"
720
- onclick={() => collapse_to_level(3)}
721
- title="Collapse to level 3"
722
- {@attach tooltip()}
723
- >
724
- 3
725
- </button>
659
+ {#each [1, 2, 3] as level (level)}
660
+ <button
661
+ type="button"
662
+ onclick={() => collapse_to_level(level)}
663
+ title="Collapse to level {level}"
664
+ {@attach tooltip()}
665
+ >
666
+ {level}
667
+ </button>
668
+ {/each}
726
669
  </div>
727
670
  <div class="divider"></div>
728
671
  <div class="controls">
@@ -780,18 +723,16 @@
780
723
  type="button"
781
724
  class="pinned-path"
782
725
  onclick={() =>
783
- copy_to_clipboard(
784
- pinned_path,
785
- serialize_for_copy(get_value_at_path(pinned_path)),
786
- )}
726
+ copy_to_clipboard(
727
+ pinned_path,
728
+ serialize_for_copy(get_value_at_path(pinned_path)),
729
+ )}
787
730
  title="Click to copy value"
788
731
  {@attach tooltip()}
789
732
  >
790
733
  {pinned_path}
791
734
  </button>
792
- <span class="pinned-value">{
793
- format_preview(get_value_at_path(pinned_path))
794
- }</span>
735
+ <span class="pinned-value">{format_preview(get_value_at_path(pinned_path))}</span>
795
736
  <button
796
737
  type="button"
797
738
  class="unpin-btn"
@@ -821,8 +762,8 @@
821
762
  class="copy-feedback"
822
763
  class:error={copy_feedback_error}
823
764
  style={copy_feedback_pos
824
- ? `left: ${copy_feedback_pos.x}px; top: ${copy_feedback_pos.y - 24}px`
825
- : `right: 8px; top: 8px`}
765
+ ? `left: ${copy_feedback_pos.x}px; top: ${copy_feedback_pos.y - 24}px`
766
+ : `right: 8px; top: 8px`}
826
767
  >
827
768
  {copy_feedback_error ? `Copy failed` : `Copied!`}
828
769
  </div>
@@ -850,9 +791,7 @@
850
791
  <button
851
792
  type="button"
852
793
  onclick={() =>
853
- ctx_menu_action((st) =>
854
- copy_to_clipboard(st.path, serialize_for_copy(st.value))
855
- )}
794
+ ctx_menu_action((st) => copy_to_clipboard(st.path, serialize_for_copy(st.value)))}
856
795
  >
857
796
  <Icon icon="Copy" style="width: 12px; height: 12px" /> Copy value
858
797
  </button>
@@ -871,11 +810,11 @@
871
810
  <button
872
811
  type="button"
873
812
  onclick={() =>
874
- ctx_menu_action((st) =>
875
- st.is_collapsed
876
- ? toggle_collapse_recursive(st.path, false)
877
- : collapse_children_only(st.path)
878
- )}
813
+ ctx_menu_action((st) =>
814
+ st.is_collapsed
815
+ ? toggle_collapse_recursive(st.path, false)
816
+ : collapse_children_only(st.path),
817
+ )}
879
818
  >
880
819
  {context_menu_state.is_collapsed ? `Expand` : `Collapse`} all children
881
820
  </button>
@@ -883,10 +822,7 @@
883
822
  <li class="separator"></li>
884
823
  {/if}
885
824
  <li>
886
- <button
887
- type="button"
888
- onclick={() => ctx_menu_action((st) => toggle_pin(st.path))}
889
- >
825
+ <button type="button" onclick={() => ctx_menu_action((st) => toggle_pin(st.path))}>
890
826
  {pinned_paths.has(context_menu_state.path) ? `Unpin` : `Pin`} this path
891
827
  </button>
892
828
  </li>
@@ -930,9 +866,6 @@
930
866
  border-radius: var(--jt-border-radius, 4px);
931
867
  overflow: hidden;
932
868
  }
933
- /* --jt-header-bg, --jt-header-border, --jt-btn-bg, --jt-btn-hover-bg, --jt-btn-active-bg
934
- intentionally removed in favor of transparent/opacity-based button styling.
935
- Use --jt-hover-bg to customize the button hover background. */
936
869
  .json-tree-header {
937
870
  display: flex;
938
871
  align-items: center;
@@ -1006,7 +939,9 @@
1006
939
  font-weight: 500;
1007
940
  color: inherit;
1008
941
  opacity: 0.6;
1009
- transition: opacity 0.15s, background 0.15s;
942
+ transition:
943
+ opacity 0.15s,
944
+ background 0.15s;
1010
945
  }
1011
946
  .controls button:hover {
1012
947
  opacity: 1;
@@ -1144,18 +1079,12 @@
1144
1079
  font: inherit;
1145
1080
  }
1146
1081
  .context-menu button:hover {
1147
- background: var(
1148
- --jt-ctx-hover,
1149
- light-dark(rgba(0, 0, 0, 0.06), rgba(255, 255, 255, 0.1))
1150
- );
1082
+ background: var(--jt-ctx-hover, light-dark(rgba(0, 0, 0, 0.06), rgba(255, 255, 255, 0.1)));
1151
1083
  }
1152
1084
  .context-menu .separator {
1153
1085
  height: 1px;
1154
1086
  margin: 4px 8px;
1155
- background: var(
1156
- --jt-ctx-border,
1157
- light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1))
1158
- );
1087
+ background: var(--jt-ctx-border, light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1)));
1159
1088
  }
1160
1089
  .pinned-panel :where(button) {
1161
1090
  background: none;
@@ -28,12 +28,8 @@
28
28
 
29
29
  // Expanded state for long strings
30
30
  let is_expanded = $state(false)
31
-
32
- // Extract max_string_length threshold for reuse
33
31
  let max_len = $derived(ctx?.settings.max_string_length ?? 200)
34
- let is_long_string = $derived(
35
- value_type === `string` && (value as string).length > max_len,
36
- )
32
+ let is_long_string = $derived(value_type === `string` && (value as string).length > max_len)
37
33
 
38
34
  // Check for changes on mount and when value changes
39
35
  $effect(() => {
@@ -86,20 +82,13 @@
86
82
 
87
83
  // Format display value - strings use custom truncation, others use format_preview
88
84
  let display_value = $derived.by(() => {
89
- if (value_type === `circular`) return `[Circular]`
90
85
  if (value_type === `string`) {
91
86
  const str = value as string
92
- return is_long_string && !is_expanded
93
- ? `"${str.slice(0, max_len)}..."`
94
- : `"${str}"`
87
+ return is_long_string && !is_expanded ? `"${str.slice(0, max_len)}..."` : `"${str}"`
95
88
  }
96
89
  return format_preview(value)
97
90
  })
98
91
 
99
- // Check if string is truncated
100
- let is_truncated = $derived(is_long_string && !is_expanded)
101
-
102
- // Toggle string expansion
103
92
  function toggle_expand(event: MouseEvent) {
104
93
  event.stopPropagation()
105
94
  is_expanded = !is_expanded
@@ -190,27 +179,17 @@
190
179
  {:else}
191
180
  {display_value}
192
181
  {/if}
193
- {#if is_truncated}
182
+ {#if is_long_string}
194
183
  <button
195
184
  type="button"
196
185
  class="expand-btn"
197
186
  onclick={toggle_expand}
198
- title="Show full string"
187
+ title={is_expanded ? `Collapse string` : `Show full string`}
199
188
  >
200
- ...
201
- </button>
202
- {:else if is_long_string && is_expanded}
203
- <button
204
- type="button"
205
- class="expand-btn"
206
- onclick={toggle_expand}
207
- title="Collapse string"
208
- >
209
-
189
+ {is_expanded ? `▲` : `...`}
210
190
  </button>
211
191
  {/if}
212
- {#if ctx?.settings.show_data_types && value_type !== `null` &&
213
- value_type !== `undefined`}
192
+ {#if ctx?.settings.show_data_types && value_type !== `null` && value_type !== `undefined`}
214
193
  <span class="type-annotation">{value_type}</span>
215
194
  {/if}
216
195
  </span>
@@ -235,7 +214,9 @@
235
214
  .json-value {
236
215
  cursor: pointer;
237
216
  border-radius: 2px;
238
- transition: background-color 0.15s, color 0.15s;
217
+ transition:
218
+ background-color 0.15s,
219
+ color 0.15s;
239
220
  &:hover {
240
221
  background: var(
241
222
  --jt-hover-bg,
@@ -267,10 +248,6 @@
267
248
  &.error {
268
249
  color: var(--jt-error, light-dark(#a31515, #f48771));
269
250
  }
270
- &.circular {
271
- color: var(--jt-circular, light-dark(#808080, #808080));
272
- font-style: italic;
273
- }
274
251
  &.changed {
275
252
  animation: value-change 1s ease-out;
276
253
  }
@@ -4,15 +4,12 @@ export declare const is_expandable_type: (value_type: JsonValueType) => boolean;
4
4
  export declare const is_primitive_type: (value_type: JsonValueType) => boolean;
5
5
  export declare const is_expandable: (value: unknown) => boolean;
6
6
  export declare function get_child_count(value: unknown): number;
7
- export declare function format_path(segments: (string | number)[]): string;
8
- export declare function build_path(parent_path: string, key: string | number): string;
9
7
  export declare function serialize_for_copy(value: unknown): string;
10
8
  export declare function format_preview(value: unknown, max_length?: number): string;
11
9
  export declare function matches_search(path: string, key: string | number | null, value: unknown, query: string): boolean;
12
10
  export declare function collect_all_paths(value: unknown, current_path?: string, max_depth?: number, current_depth?: number, seen?: WeakSet<object>): string[];
13
11
  export declare function find_matching_paths(value: unknown, query: string, current_path?: string, current_key?: string | number | null, seen?: WeakSet<object>): Set<string>;
14
12
  export declare function get_ancestor_paths(path: string): string[];
15
- export declare function parse_path(path: string): (string | number)[];
16
13
  export declare function values_equal(val_a: unknown, val_b: unknown): boolean;
17
14
  export declare function parse_edited_value(text: string): unknown;
18
15
  export declare function set_at_path(root: unknown, path_str: string, new_value: unknown, root_label?: string): unknown;