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.
- package/dist/EmptyState.svelte +10 -4
- package/dist/FilePicker.svelte +48 -60
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/api/optimade.js +10 -7
- package/dist/app.css +68 -0
- package/dist/brillouin/BrillouinZone.svelte +90 -91
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
- package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
- package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
- package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/compute.js +10 -16
- package/dist/brillouin/geometry.js +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +13 -14
- package/dist/chempot-diagram/color.d.ts +21 -1
- package/dist/chempot-diagram/color.js +70 -1
- package/dist/chempot-diagram/compute.d.ts +7 -0
- package/dist/chempot-diagram/compute.js +85 -26
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/chempot-diagram/export.js +1 -6
- package/dist/chempot-diagram/temperature.js +9 -10
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +30 -26
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +10 -19
- package/dist/composition/Formula.svelte +20 -27
- package/dist/composition/FormulaFilter.svelte +115 -184
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +7 -9
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/parse.d.ts +2 -2
- package/dist/composition/parse.js +61 -115
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +17 -26
- package/dist/convex-hull/ConvexHull.svelte +12 -15
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +93 -94
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +127 -186
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +131 -180
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
- package/dist/convex-hull/ConvexHullControls.svelte +46 -48
- package/dist/convex-hull/ConvexHullStats.svelte +193 -195
- package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
- package/dist/convex-hull/GasPressureControls.svelte +5 -12
- package/dist/convex-hull/StructurePopup.svelte +18 -22
- package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
- package/dist/convex-hull/TemperatureSlider.svelte +4 -10
- package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
- package/dist/convex-hull/gas-thermodynamics.js +21 -53
- package/dist/convex-hull/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +37 -43
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +37 -44
- package/dist/coordination/CoordinationBarPlot.svelte +49 -53
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/coordination/calc-coordination.d.ts +1 -1
- package/dist/coordination/calc-coordination.js +28 -25
- package/dist/element/BohrAtom.svelte +5 -9
- package/dist/element/ElementHeading.svelte +4 -1
- package/dist/element/ElementPhoto.svelte +11 -9
- package/dist/element/ElementStats.svelte +12 -10
- package/dist/element/ElementTile.svelte +44 -67
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +3 -2
- package/dist/element/data.js +5 -1
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +2 -5
- package/dist/element/index.js +4 -19
- package/dist/feedback/DragOverlay.svelte +5 -5
- package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
- package/dist/feedback/StatusMessage.svelte +7 -4
- package/dist/fermi-surface/FermiSlice.svelte +21 -18
- package/dist/fermi-surface/FermiSurface.svelte +35 -44
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +25 -58
- package/dist/fermi-surface/parse.js +54 -88
- package/dist/file-viewer/JsonBrowser.svelte +1043 -0
- package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
- package/dist/file-viewer/PlotPanel.svelte +350 -0
- package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
- package/dist/file-viewer/detect.d.ts +11 -0
- package/dist/file-viewer/detect.js +381 -0
- package/dist/file-viewer/eligibility.d.ts +4 -0
- package/dist/file-viewer/eligibility.js +53 -0
- package/dist/file-viewer/host-protocol.d.ts +50 -0
- package/dist/file-viewer/host-transfer.d.ts +25 -0
- package/dist/file-viewer/host-transfer.js +42 -0
- package/dist/file-viewer/index.d.ts +5 -0
- package/dist/file-viewer/index.js +5 -0
- package/dist/file-viewer/main.d.ts +44 -0
- package/dist/file-viewer/main.js +535 -0
- package/dist/file-viewer/parse.d.ts +9 -0
- package/dist/file-viewer/parse.js +170 -0
- package/dist/file-viewer/plot-utils.d.ts +24 -0
- package/dist/file-viewer/plot-utils.js +191 -0
- package/dist/file-viewer/types.d.ts +4 -0
- package/dist/file-viewer/types.js +5 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/index.d.ts +5 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/io/ExportPane.svelte +11 -7
- package/dist/io/decompress.d.ts +4 -1
- package/dist/io/decompress.js +24 -36
- package/dist/io/export.d.ts +11 -4
- package/dist/io/export.js +75 -19
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- package/dist/io/file-drop.js +60 -35
- package/dist/io/index.d.ts +0 -1
- package/dist/io/index.js +2 -9
- package/dist/io/is-binary.d.ts +9 -0
- package/dist/io/is-binary.js +45 -1
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +40 -40
- package/dist/isosurface/Isosurface.svelte +700 -215
- package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
- package/dist/isosurface/IsosurfaceControls.svelte +590 -116
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
- package/dist/isosurface/VolumeSlice.svelte +224 -0
- package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
- package/dist/isosurface/coloring.d.ts +20 -0
- package/dist/isosurface/coloring.js +118 -0
- package/dist/isosurface/geometry-worker-types.d.ts +38 -0
- package/dist/isosurface/geometry.worker.d.ts +1 -0
- package/dist/isosurface/geometry.worker.js +59 -0
- package/dist/isosurface/grid.d.ts +10 -0
- package/dist/isosurface/grid.js +31 -0
- package/dist/isosurface/index.d.ts +4 -0
- package/dist/isosurface/index.js +4 -0
- package/dist/isosurface/parse-vaspwave.d.ts +3 -0
- package/dist/isosurface/parse-vaspwave.js +138 -0
- package/dist/isosurface/parse.js +6 -6
- package/dist/isosurface/profile.d.ts +12 -0
- package/dist/isosurface/profile.js +19 -0
- package/dist/isosurface/sampling.d.ts +34 -0
- package/dist/isosurface/sampling.js +408 -0
- package/dist/isosurface/slice-rendering.d.ts +13 -0
- package/dist/isosurface/slice-rendering.js +79 -0
- package/dist/isosurface/slice.d.ts +22 -2
- package/dist/isosurface/slice.js +200 -116
- package/dist/isosurface/types.d.ts +24 -1
- package/dist/isosurface/types.js +120 -8
- package/dist/json-path.d.ts +4 -0
- package/dist/json-path.js +89 -0
- package/dist/labels.d.ts +6 -2
- package/dist/labels.js +44 -14
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +8 -21
- package/dist/layout/InfoTag.svelte +1 -3
- package/dist/layout/NumberRangeInput.svelte +46 -0
- package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
- package/dist/layout/PropertyFilter.svelte +2 -6
- package/dist/layout/SettingsSection.svelte +57 -62
- package/dist/layout/SettingsSection.svelte.d.ts +6 -7
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +16 -11
- package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
- package/dist/layout/fullscreen.js +3 -5
- package/dist/layout/fullscreen.svelte.js +1 -2
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +22 -59
- package/dist/layout/json-tree/JsonTree.svelte +101 -172
- package/dist/layout/json-tree/JsonValue.svelte +9 -32
- package/dist/layout/json-tree/utils.d.ts +0 -3
- package/dist/layout/json-tree/utils.js +50 -188
- package/dist/marching-cubes.d.ts +8 -1
- package/dist/marching-cubes.js +115 -48
- package/dist/math.d.ts +5 -2
- package/dist/math.js +48 -38
- package/dist/overlays/ContextMenu.svelte +19 -34
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +110 -74
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
- package/dist/overlays/GlassChip.svelte +32 -0
- package/dist/overlays/GlassChip.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +11 -23
- package/dist/overlays/index.d.ts +7 -0
- package/dist/overlays/index.js +26 -0
- package/dist/overlays/portal.d.ts +2 -0
- package/dist/overlays/portal.js +14 -0
- package/dist/periodic-table/PeriodicTable.svelte +113 -145
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
- package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
- package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
- package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
- package/dist/phase-diagram/build-diagram.js +4 -9
- package/dist/phase-diagram/diagram-input.d.ts +1 -2
- package/dist/phase-diagram/parse.js +15 -15
- package/dist/phase-diagram/svg-to-diagram.js +28 -27
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +461 -426
- package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
- package/dist/plot/bar/BarPlotControls.svelte +1 -3
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
- package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +322 -226
- package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
- package/dist/plot/box/Violin.svelte.d.ts +1 -0
- package/dist/plot/box/box-plot.js +1 -1
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +2 -2
- package/dist/plot/core/axis-utils.d.ts +12 -7
- package/dist/plot/core/axis-utils.js +48 -48
- package/dist/plot/core/components/AxisLabel.svelte +82 -20
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
- package/dist/plot/core/components/ColorBar.svelte +101 -106
- package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
- package/dist/plot/core/components/FillArea.svelte +10 -17
- package/dist/plot/core/components/HierarchyControls.svelte +249 -0
- package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/core/components/Line.svelte +18 -9
- package/dist/plot/core/components/Line.svelte.d.ts +2 -0
- package/dist/plot/core/components/PlotAxis.svelte +40 -17
- package/dist/plot/core/components/PlotControls.svelte +65 -41
- package/dist/plot/core/components/PlotLegend.svelte +31 -35
- package/dist/plot/core/components/PlotMarginals.svelte +616 -0
- package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotTooltip.svelte +1 -1
- package/dist/plot/core/components/PortalSelect.svelte +4 -8
- package/dist/plot/core/components/ReferenceLine.svelte +27 -24
- package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
- package/dist/plot/core/components/ReferencePlane.svelte +7 -8
- package/dist/plot/core/components/ZeroLines.svelte +4 -8
- package/dist/plot/core/components/ZoomRect.svelte +1 -2
- package/dist/plot/core/components/index.d.ts +1 -0
- package/dist/plot/core/components/index.js +1 -0
- package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
- package/dist/plot/core/data-cleaning-signal.js +467 -0
- package/dist/plot/core/data-cleaning.d.ts +2 -42
- package/dist/plot/core/data-cleaning.js +27 -474
- package/dist/plot/core/data-transform.d.ts +1 -2
- package/dist/plot/core/data-transform.js +9 -15
- package/dist/plot/core/fill-utils.d.ts +3 -1
- package/dist/plot/core/fill-utils.js +28 -6
- package/dist/plot/core/index.d.ts +1 -0
- package/dist/plot/core/index.js +1 -0
- package/dist/plot/core/interactions.js +0 -2
- package/dist/plot/core/layout.d.ts +15 -6
- package/dist/plot/core/layout.js +57 -38
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
- package/dist/plot/core/pan-zoom.svelte.js +34 -17
- package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -21
- package/dist/plot/core/reference-line.js +1 -1
- package/dist/plot/core/scales.d.ts +23 -0
- package/dist/plot/core/scales.js +39 -13
- package/dist/plot/core/svg.js +0 -1
- package/dist/plot/core/types/fills.d.ts +101 -0
- package/dist/plot/core/types/fills.js +15 -0
- package/dist/plot/core/types/plot-3d.d.ts +87 -0
- package/dist/plot/core/types/plot-3d.js +4 -0
- package/dist/plot/core/types/reference-lines.d.ts +140 -0
- package/dist/plot/core/types/reference-lines.js +9 -0
- package/dist/plot/core/types.d.ts +29 -324
- package/dist/plot/core/types.js +23 -20
- package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
- package/dist/plot/core/utils/hierarchy-chart.js +191 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +100 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +314 -340
- package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
- package/dist/plot/histogram/HistogramControls.svelte +30 -28
- package/dist/plot/histogram/histogram.d.ts +31 -0
- package/dist/plot/histogram/histogram.js +70 -0
- package/dist/plot/histogram/index.d.ts +1 -0
- package/dist/plot/histogram/index.js +1 -0
- package/dist/plot/index.d.ts +1 -0
- package/dist/plot/index.js +1 -0
- package/dist/plot/sankey/Sankey.svelte +78 -69
- package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
- package/dist/plot/sankey/SankeyControls.svelte +22 -16
- package/dist/plot/sankey/sankey.js +13 -9
- package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +517 -410
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/ScatterPoint.svelte +16 -9
- package/dist/plot/scatter/adaptive-density.d.ts +1 -1
- package/dist/plot/scatter/adaptive-density.js +36 -20
- package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
- package/dist/plot/scatter/binned-scatter-types.js +6 -1
- package/dist/plot/scatter/scatter-data.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.js +8 -7
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
- package/dist/plot/sunburst/Sunburst.svelte +269 -347
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
- package/dist/plot/sunburst/index.d.ts +1 -1
- package/dist/plot/sunburst/index.js +2 -1
- package/dist/plot/sunburst/render.d.ts +2 -2
- package/dist/plot/sunburst/render.js +47 -22
- package/dist/plot/sunburst/sunburst.d.ts +5 -1
- package/dist/plot/sunburst/sunburst.js +10 -3
- package/dist/plot/treemap/Treemap.svelte +1022 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
- package/dist/plot/treemap/index.d.ts +4 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/labels.d.ts +38 -0
- package/dist/plot/treemap/labels.js +80 -0
- package/dist/plot/treemap/treemap.d.ts +28 -0
- package/dist/plot/treemap/treemap.js +102 -0
- package/dist/rdf/RdfPlot.svelte +37 -59
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +63 -52
- package/dist/rdf/index.d.ts +0 -1
- package/dist/sanitize.js +85 -27
- package/dist/scene/SceneCamera.svelte +1 -1
- package/dist/scene/SceneCamera.svelte.d.ts +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/scene/index.d.ts +1 -2
- package/dist/scene/index.js +1 -1
- package/dist/scene/{props.js → props.svelte.js} +15 -1
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +229 -525
- package/dist/spectral/Bands.svelte +207 -221
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -42
- package/dist/spectral/Dos.svelte +92 -93
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +65 -140
- package/dist/state.svelte.js +5 -18
- package/dist/structure/Arrow.svelte +5 -18
- package/dist/structure/ArrowInstances.svelte +160 -0
- package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
- package/dist/structure/AtomLegend.svelte +120 -85
- package/dist/structure/AtomLegend.svelte.d.ts +2 -3
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +45 -35
- package/dist/structure/Cylinder.svelte +24 -40
- package/dist/structure/InstancedAtoms.svelte +114 -0
- package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
- package/dist/structure/Lattice.svelte +85 -149
- package/dist/structure/SiteLabels.svelte +122 -0
- package/dist/structure/SiteLabels.svelte.d.ts +18 -0
- package/dist/structure/Structure.svelte +636 -504
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +637 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +165 -425
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +128 -133
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +535 -578
- package/dist/structure/StructureScene.svelte.d.ts +6 -2
- package/dist/structure/StructureViewport.svelte +451 -0
- package/dist/structure/StructureViewport.svelte.d.ts +65 -0
- package/dist/structure/atom-label-placement.d.ts +16 -12
- package/dist/structure/atom-label-placement.js +70 -37
- package/dist/structure/atom-properties.d.ts +2 -0
- package/dist/structure/atom-properties.js +105 -38
- package/dist/structure/bond-order-perception.js +3 -8
- package/dist/structure/bonding.d.ts +9 -3
- package/dist/structure/bonding.js +95 -46
- package/dist/structure/edit-history.d.ts +6 -0
- package/dist/structure/edit-history.js +27 -0
- package/dist/structure/export.d.ts +1 -0
- package/dist/structure/export.js +89 -105
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +20 -0
- package/dist/structure/geometry.d.ts +9 -0
- package/dist/structure/geometry.js +27 -0
- package/dist/structure/index.d.ts +16 -1
- package/dist/structure/index.js +15 -10
- package/dist/structure/measure.d.ts +1 -1
- package/dist/structure/measure.js +6 -12
- package/dist/structure/parse.d.ts +2 -1
- package/dist/structure/parse.js +272 -313
- package/dist/structure/partial-occupancy.js +10 -5
- package/dist/structure/pbc.js +85 -107
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +7 -21
- package/dist/structure/prop-groups.d.ts +85 -0
- package/dist/structure/prop-groups.js +18 -0
- package/dist/structure/supercell.d.ts +1 -2
- package/dist/structure/supercell.js +7 -13
- package/dist/symmetry/SymmetryElements.svelte +11 -15
- package/dist/symmetry/SymmetryStats.svelte +55 -71
- package/dist/symmetry/WyckoffTable.svelte +10 -28
- package/dist/symmetry/cell-transform.js +6 -14
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +13 -10
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1142 -447
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +168 -53
- package/dist/table/ToggleMenu.svelte.d.ts +1 -1
- package/dist/table/index.d.ts +21 -6
- package/dist/table/index.js +34 -21
- package/dist/theme/ThemeControl.svelte +16 -8
- package/dist/theme/embedded.d.ts +18 -0
- package/dist/theme/embedded.js +206 -0
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +5 -12
- package/dist/theme/themes.mjs +44 -66
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +3 -6
- package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
- package/dist/tooltip/index.d.ts +8 -1
- package/dist/trajectory/Trajectory.svelte +613 -386
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +12 -74
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
- package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
- package/dist/trajectory/extract.js +61 -49
- package/dist/trajectory/format-detect.d.ts +2 -0
- package/dist/trajectory/format-detect.js +17 -13
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +35 -32
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +34 -56
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +5 -8
- package/dist/trajectory/parse/ase.js +1 -1
- package/dist/trajectory/parse/h5-utils.d.ts +13 -0
- package/dist/trajectory/parse/h5-utils.js +109 -0
- package/dist/trajectory/parse/hdf5.d.ts +1 -1
- package/dist/trajectory/parse/hdf5.js +116 -106
- package/dist/trajectory/parse/index.d.ts +6 -6
- package/dist/trajectory/parse/index.js +25 -33
- package/dist/trajectory/parse/lammps.js +8 -12
- package/dist/trajectory/parse/vasp.js +10 -7
- package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
- package/dist/trajectory/parse/vaspout-electronic.js +207 -0
- package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
- package/dist/trajectory/parse/vaspout-h5.js +281 -0
- package/dist/trajectory/parse/xyz.js +59 -9
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +113 -64
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +79 -118
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +24 -62
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +69 -95
- package/package.json +94 -34
- package/readme.md +6 -5
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
- package/dist/scene/types.d.ts +0 -26
- package/dist/tooltip/types.d.ts +0 -8
- package/dist/trajectory/constants.d.ts +0 -6
- package/dist/trajectory/constants.js +0 -11
- /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
- /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
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
|
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(
|
|
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
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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 =
|
|
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
|
-
//
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
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 =
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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 =
|
|
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 {
|
|
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
|
|
342
|
+
// Collapse all descendants but keep the given node expanded
|
|
366
343
|
function collapse_children_only(target_path: string): void {
|
|
367
|
-
|
|
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={
|
|
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
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
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
|
-
|
|
784
|
-
|
|
785
|
-
|
|
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
|
-
|
|
825
|
-
|
|
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
|
-
|
|
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
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
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:
|
|
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
|
|
182
|
+
{#if is_long_string}
|
|
194
183
|
<button
|
|
195
184
|
type="button"
|
|
196
185
|
class="expand-btn"
|
|
197
186
|
onclick={toggle_expand}
|
|
198
|
-
title=
|
|
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:
|
|
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;
|