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
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
import { untrack } from 'svelte'
|
|
5
5
|
import type { HTMLAttributes } from 'svelte/elements'
|
|
6
6
|
|
|
7
|
+
type SettingsSectionContext = {
|
|
8
|
+
current_values: Record<string, unknown>
|
|
9
|
+
has_changes: boolean
|
|
10
|
+
reference_values: Record<string, unknown>
|
|
11
|
+
}
|
|
12
|
+
|
|
7
13
|
let {
|
|
8
14
|
title,
|
|
9
15
|
current_values,
|
|
@@ -13,13 +19,7 @@
|
|
|
13
19
|
}: HTMLAttributes<HTMLElementTagNameMap[`section`]> & {
|
|
14
20
|
title: string
|
|
15
21
|
current_values: Record<string, unknown>
|
|
16
|
-
children: Snippet<
|
|
17
|
-
[{
|
|
18
|
-
current_values: Record<string, unknown>
|
|
19
|
-
has_changes: boolean
|
|
20
|
-
reference_values: Record<string, unknown>
|
|
21
|
-
}]
|
|
22
|
-
>
|
|
22
|
+
children: Snippet<[SettingsSectionContext]>
|
|
23
23
|
on_reset?: () => void
|
|
24
24
|
} = $props()
|
|
25
25
|
|
|
@@ -28,62 +28,62 @@
|
|
|
28
28
|
if (obj === null || typeof obj !== `object`) return obj
|
|
29
29
|
if (obj instanceof Date) return new Date(obj)
|
|
30
30
|
if (obj instanceof RegExp) return new RegExp(obj)
|
|
31
|
-
if (Array.isArray(obj))
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const copy: Record<string, unknown> = {}
|
|
38
|
-
for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {
|
|
39
|
-
copy[key] = typeof value === `object` && value !== null
|
|
40
|
-
? deep_copy(value)
|
|
41
|
-
: value
|
|
42
|
-
}
|
|
43
|
-
return copy
|
|
31
|
+
if (Array.isArray(obj)) return obj.map(deep_copy)
|
|
32
|
+
return Object.fromEntries(
|
|
33
|
+
Object.entries(obj).map(([key, value]) => [key, deep_copy(value)]),
|
|
34
|
+
)
|
|
44
35
|
}
|
|
45
36
|
|
|
46
37
|
// Capture initial values once at mount - must NOT be $derived or it tracks changes
|
|
47
|
-
const reference_values = untrack(() =>
|
|
48
|
-
deep_copy(current_values) as Record<string, unknown>
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
// Check if any values have changed from reference values
|
|
52
|
-
let has_changes = $derived.by(() => {
|
|
53
|
-
for (const [key, reference_value] of Object.entries(reference_values)) {
|
|
54
|
-
const current_value = current_values[key]
|
|
38
|
+
const reference_values = untrack(() => deep_copy(current_values) as Record<string, unknown>)
|
|
55
39
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (reference_value.length !== current_value.length) return true
|
|
59
|
-
if (
|
|
60
|
-
reference_value.some((val, idx) => {
|
|
61
|
-
const curr_val = current_value[idx]
|
|
62
|
-
// Handle nested objects/arrays in arrays
|
|
63
|
-
if (
|
|
64
|
-
typeof val === `object` && val !== null &&
|
|
65
|
-
typeof curr_val === `object` && curr_val !== null
|
|
66
|
-
) return JSON.stringify(val) !== JSON.stringify(curr_val) // Quick deep comparison fallback
|
|
67
|
-
return val !== curr_val
|
|
68
|
-
})
|
|
69
|
-
) {
|
|
70
|
-
return true
|
|
71
|
-
}
|
|
72
|
-
continue
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Handle undefined/null comparisons properly
|
|
76
|
-
if (reference_value === undefined && current_value === undefined) continue
|
|
77
|
-
if (reference_value === null && current_value === null) continue
|
|
40
|
+
// unique per-instance id so aria-labelledby stays valid with multiple sections on a page
|
|
41
|
+
const title_id = `settings-section-title-${crypto.randomUUID()}`
|
|
78
42
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
43
|
+
// Order-independent deep equality for setting values
|
|
44
|
+
const setting_equal = (left: unknown, right: unknown): boolean => {
|
|
45
|
+
if (Object.is(left, right)) return true
|
|
46
|
+
if (left == null || right == null) return false
|
|
47
|
+
if (typeof left !== `object` || typeof right !== `object`) return false
|
|
48
|
+
if (left instanceof Date || right instanceof Date) {
|
|
49
|
+
return (
|
|
50
|
+
left instanceof Date && right instanceof Date && left.getTime() === right.getTime()
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
if (left instanceof RegExp || right instanceof RegExp) {
|
|
54
|
+
return (
|
|
55
|
+
left instanceof RegExp &&
|
|
56
|
+
right instanceof RegExp &&
|
|
57
|
+
left.toString() === right.toString()
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
61
|
+
if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {
|
|
62
|
+
return false
|
|
82
63
|
}
|
|
64
|
+
return left.every((item, idx) => setting_equal(item, right[idx]))
|
|
83
65
|
}
|
|
84
|
-
|
|
85
|
-
|
|
66
|
+
const left_obj = left as Record<string, unknown>
|
|
67
|
+
const right_obj = right as Record<string, unknown>
|
|
68
|
+
const left_keys = Object.keys(left_obj)
|
|
69
|
+
if (left_keys.length !== Object.keys(right_obj).length) return false
|
|
70
|
+
return left_keys.every(
|
|
71
|
+
(key) => Object.hasOwn(right_obj, key) && setting_equal(left_obj[key], right_obj[key]),
|
|
72
|
+
)
|
|
73
|
+
}
|
|
86
74
|
|
|
75
|
+
// Key presence is independent of value: additions/removals count even when the
|
|
76
|
+
// value is undefined. Only compare values when both sides own the key.
|
|
77
|
+
let has_changes = $derived(
|
|
78
|
+
[...new Set([...Object.keys(reference_values), ...Object.keys(current_values)])].some(
|
|
79
|
+
(key) => {
|
|
80
|
+
const in_reference = Object.hasOwn(reference_values, key)
|
|
81
|
+
const in_current = Object.hasOwn(current_values, key)
|
|
82
|
+
if (in_reference !== in_current) return true
|
|
83
|
+
return !setting_equal(reference_values[key], current_values[key])
|
|
84
|
+
},
|
|
85
|
+
),
|
|
86
|
+
)
|
|
87
87
|
function handle_reset(event: MouseEvent) {
|
|
88
88
|
event.stopPropagation()
|
|
89
89
|
event.preventDefault()
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
}
|
|
92
92
|
</script>
|
|
93
93
|
|
|
94
|
-
<h4 id=
|
|
94
|
+
<h4 id={title_id}>
|
|
95
95
|
{title}
|
|
96
96
|
|
|
97
97
|
{#if has_changes}
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
</button>
|
|
107
107
|
{/if}
|
|
108
108
|
</h4>
|
|
109
|
-
<section {...rest} aria-labelledby=
|
|
109
|
+
<section {...rest} aria-labelledby={title_id}>
|
|
110
110
|
{@render children?.({ current_values, has_changes, reference_values })}
|
|
111
111
|
</section>
|
|
112
112
|
|
|
@@ -140,9 +140,4 @@
|
|
|
140
140
|
opacity: 1;
|
|
141
141
|
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
|
|
142
142
|
}
|
|
143
|
-
.reset-button.standalone {
|
|
144
|
-
position: absolute;
|
|
145
|
-
top: -8pt;
|
|
146
|
-
right: -8pt;
|
|
147
|
-
}
|
|
148
143
|
</style>
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type SettingsSectionContext = {
|
|
4
|
+
current_values: Record<string, unknown>;
|
|
5
|
+
has_changes: boolean;
|
|
6
|
+
reference_values: Record<string, unknown>;
|
|
7
|
+
};
|
|
3
8
|
type $$ComponentProps = HTMLAttributes<HTMLElementTagNameMap[`section`]> & {
|
|
4
9
|
title: string;
|
|
5
10
|
current_values: Record<string, unknown>;
|
|
6
|
-
children: Snippet<[
|
|
7
|
-
{
|
|
8
|
-
current_values: Record<string, unknown>;
|
|
9
|
-
has_changes: boolean;
|
|
10
|
-
reference_values: Record<string, unknown>;
|
|
11
|
-
}
|
|
12
|
-
]>;
|
|
11
|
+
children: Snippet<[SettingsSectionContext]>;
|
|
13
12
|
on_reset?: () => void;
|
|
14
13
|
};
|
|
15
14
|
declare const SettingsSection: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
@@ -52,7 +52,9 @@
|
|
|
52
52
|
border: 1px solid color-mix(in srgb, currentColor 15%, transparent);
|
|
53
53
|
text-decoration: none;
|
|
54
54
|
color: inherit;
|
|
55
|
-
transition:
|
|
55
|
+
transition:
|
|
56
|
+
border-color 0.15s,
|
|
57
|
+
box-shadow 0.15s;
|
|
56
58
|
&:hover {
|
|
57
59
|
border-color: color-mix(in srgb, currentColor 35%, transparent);
|
|
58
60
|
box-shadow: 0 2px 12px color-mix(in srgb, currentColor 8%, transparent);
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
import type { FullscreenToggleProp } from './fullscreen'
|
|
3
3
|
import type { ShowControlsState } from '../controls'
|
|
4
4
|
// Shared control-buttons row (filename chip + fullscreen toggle + snippet buttons/panes) for BrillouinZone/FermiSurface/Structure viewers; themed via neutral --viewer-* CSS vars
|
|
5
|
-
//
|
|
5
|
+
// NOTE Trajectory.svelte intentionally keeps its own controls: its bar is a full playback strip (nav/step/FPS/info+export panes/view-mode) rather than this floating top-right cluster. It already shares FullscreenButton + sync_fullscreen.
|
|
6
6
|
import type { Snippet } from 'svelte'
|
|
7
7
|
import { createAttachmentKey } from 'svelte/attachments'
|
|
8
8
|
import { tooltip } from 'svelte-multiselect/attachments'
|
|
9
9
|
import FullscreenButton from './FullscreenButton.svelte'
|
|
10
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
10
11
|
|
|
11
12
|
let {
|
|
12
13
|
controls_config,
|
|
@@ -15,10 +16,10 @@
|
|
|
15
16
|
fullscreen_toggle = true,
|
|
16
17
|
fullscreen_btn_style = undefined,
|
|
17
18
|
wrapper = undefined,
|
|
18
|
-
style = undefined,
|
|
19
19
|
before = undefined,
|
|
20
20
|
children = undefined,
|
|
21
|
-
|
|
21
|
+
...rest
|
|
22
|
+
}: HTMLAttributes<HTMLElement> & {
|
|
22
23
|
controls_config: ShowControlsState
|
|
23
24
|
filename?: string
|
|
24
25
|
fullscreen?: boolean
|
|
@@ -35,8 +36,9 @@
|
|
|
35
36
|
</script>
|
|
36
37
|
|
|
37
38
|
<section
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
{...rest}
|
|
40
|
+
class={[`control-buttons`, controls_config.class, rest.class]}
|
|
41
|
+
style={[rest.style, controls_config.style].filter(Boolean).join(`; `)}
|
|
40
42
|
>
|
|
41
43
|
{#if controls_config.mode !== `never`}
|
|
42
44
|
{@render before?.()}
|
|
@@ -67,10 +69,9 @@
|
|
|
67
69
|
top: var(--viewer-buttons-top, var(--ctrl-btn-top, 1ex));
|
|
68
70
|
right: var(--viewer-buttons-right, var(--ctrl-btn-right, 1ex));
|
|
69
71
|
gap: var(--viewer-buttons-gap, clamp(6pt, 1cqmin, 9pt));
|
|
70
|
-
z-index: var(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
);
|
|
72
|
+
z-index: var(--viewer-buttons-z-index, var(--z-index-overlay-controls, 100000000));
|
|
73
|
+
/* own compositing layer, or WKWebView paints the canvas over this (see app.css) */
|
|
74
|
+
will-change: transform;
|
|
74
75
|
opacity: 0;
|
|
75
76
|
pointer-events: none;
|
|
76
77
|
transition: opacity 0.2s ease;
|
|
@@ -97,10 +98,14 @@
|
|
|
97
98
|
display: flex;
|
|
98
99
|
padding: var(--viewer-buttons-btn-padding, 4px);
|
|
99
100
|
border-radius: var(--border-radius, 3pt);
|
|
100
|
-
font-size: clamp(0.
|
|
101
|
+
font-size: var(--ctrl-btn-icon-size, clamp(0.7rem, 2cqmin, 0.85rem));
|
|
101
102
|
}
|
|
102
103
|
section.control-buttons :global(button:hover) {
|
|
103
|
-
background-color:
|
|
104
|
+
background-color: var(
|
|
105
|
+
--viewer-buttons-hover-bg,
|
|
106
|
+
color-mix(in srgb, currentColor 8%, transparent)
|
|
107
|
+
);
|
|
108
|
+
color: var(--viewer-buttons-hover-color, currentColor);
|
|
104
109
|
}
|
|
105
110
|
.filename {
|
|
106
111
|
font-family: monospace;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { FullscreenToggleProp } from './fullscreen';
|
|
2
2
|
import type { ShowControlsState } from '../controls';
|
|
3
3
|
import type { Snippet } from 'svelte';
|
|
4
|
-
type
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
type $$ComponentProps = HTMLAttributes<HTMLElement> & {
|
|
5
6
|
controls_config: ShowControlsState;
|
|
6
7
|
filename?: string;
|
|
7
8
|
fullscreen?: boolean;
|
|
@@ -4,14 +4,12 @@ export async function toggle_fullscreen(wrapper) {
|
|
|
4
4
|
if (!wrapper || !wrapper.isConnected)
|
|
5
5
|
return;
|
|
6
6
|
try {
|
|
7
|
-
if (
|
|
8
|
-
await wrapper.requestFullscreen();
|
|
9
|
-
}
|
|
10
|
-
else if (document.fullscreenElement === wrapper) {
|
|
7
|
+
if (document.fullscreenElement === wrapper) {
|
|
11
8
|
await document.exitFullscreen();
|
|
12
9
|
}
|
|
13
10
|
else {
|
|
14
|
-
|
|
11
|
+
if (document.fullscreenElement)
|
|
12
|
+
await document.exitFullscreen();
|
|
15
13
|
await wrapper.requestFullscreen();
|
|
16
14
|
}
|
|
17
15
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { set_fullscreen_bg } from './fullscreen';
|
|
2
|
-
// Two-way sync between a bindable `fullscreen` flag, the browser fullscreen state of a wrapper, and the fullscreen background CSS var. Creates $effects (call during component init). Shared by BrillouinZone/FermiSurface/Structure viewers.
|
|
3
|
-
// TODO Trajectory.svelte still has its own fullscreen variant — migrate it here.
|
|
2
|
+
// Two-way sync between a bindable `fullscreen` flag, the browser fullscreen state of a wrapper, and the fullscreen background CSS var. Creates $effects (call during component init). Shared by BrillouinZone/FermiSurface/Structure/Trajectory viewers.
|
|
4
3
|
export function sync_fullscreen(opts) {
|
|
5
4
|
// Flag -> browser: enter/exit fullscreen when the bound flag changes
|
|
6
5
|
$effect(() => {
|
package/dist/layout/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { default as FullscreenButton } from './FullscreenButton.svelte';
|
|
|
4
4
|
export { default as FullscreenToggle } from './FullscreenToggle.svelte';
|
|
5
5
|
export { default as InfoCard } from './InfoCard.svelte';
|
|
6
6
|
export { default as InfoTag } from './InfoTag.svelte';
|
|
7
|
+
export { default as NumberRangeInput } from './NumberRangeInput.svelte';
|
|
7
8
|
export * from './json-tree';
|
|
8
9
|
export { default as PropertyFilter } from './PropertyFilter.svelte';
|
|
9
10
|
export { default as SettingsSection } from './SettingsSection.svelte';
|
package/dist/layout/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { default as FullscreenButton } from './FullscreenButton.svelte';
|
|
|
4
4
|
export { default as FullscreenToggle } from './FullscreenToggle.svelte';
|
|
5
5
|
export { default as InfoCard } from './InfoCard.svelte';
|
|
6
6
|
export { default as InfoTag } from './InfoTag.svelte';
|
|
7
|
+
export { default as NumberRangeInput } from './NumberRangeInput.svelte';
|
|
7
8
|
export * from './json-tree';
|
|
8
9
|
export { default as PropertyFilter } from './PropertyFilter.svelte';
|
|
9
10
|
export { default as SettingsSection } from './SettingsSection.svelte';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import Icon from '../../Icon.svelte'
|
|
3
|
+
import { build_path } from '../../json-path'
|
|
3
4
|
import { getContext, onMount } from 'svelte'
|
|
4
5
|
// oxlint-disable-next-line import/no-self-import -- recursive Svelte component
|
|
5
6
|
import JsonNode from './JsonNode.svelte'
|
|
@@ -7,7 +8,6 @@
|
|
|
7
8
|
import type { JsonTreeContext } from './types'
|
|
8
9
|
import { JSON_TREE_CONTEXT_KEY } from './types'
|
|
9
10
|
import {
|
|
10
|
-
build_path,
|
|
11
11
|
estimate_byte_size,
|
|
12
12
|
format_byte_size,
|
|
13
13
|
format_preview,
|
|
@@ -40,13 +40,8 @@
|
|
|
40
40
|
}
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
-
// Determine value type
|
|
44
43
|
let value_type = $derived(get_value_type(value))
|
|
45
|
-
|
|
46
|
-
// Check if this node is expandable
|
|
47
44
|
let expandable = $derived(is_expandable(value))
|
|
48
|
-
|
|
49
|
-
// Get child count for preview
|
|
50
45
|
let child_count = $derived(expandable ? get_child_count(value) : 0)
|
|
51
46
|
|
|
52
47
|
// Determine if this node should be collapsed
|
|
@@ -77,14 +72,9 @@
|
|
|
77
72
|
})
|
|
78
73
|
|
|
79
74
|
// Note: Search highlighting is handled by CSS Highlight API in JsonTree.svelte
|
|
80
|
-
|
|
81
|
-
// Check if this node is focused
|
|
82
75
|
let is_focused = $derived(ctx?.focused_path === path)
|
|
83
|
-
|
|
84
|
-
// Check if this is the current search match being navigated
|
|
76
|
+
// Current search match being navigated
|
|
85
77
|
let is_current_match = $derived(ctx?.current_match_path === path)
|
|
86
|
-
|
|
87
|
-
// Check if this node is selected
|
|
88
78
|
let is_selected = $derived(ctx?.selected_paths.has(path) ?? false)
|
|
89
79
|
|
|
90
80
|
// Diff status for this node (null if no diff or unchanged)
|
|
@@ -103,58 +93,34 @@
|
|
|
103
93
|
}
|
|
104
94
|
}
|
|
105
95
|
|
|
106
|
-
// Toggle collapse recursively on double-click
|
|
96
|
+
// Toggle collapse recursively on double-click (collapsed expands all, and vice versa)
|
|
107
97
|
function toggle_collapse_recursive(event: MouseEvent) {
|
|
108
98
|
event.stopPropagation()
|
|
109
|
-
if (ctx && expandable)
|
|
110
|
-
// If collapsed, expand all; if expanded, collapse all
|
|
111
|
-
ctx.toggle_collapse_recursive(path, !is_collapsed)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Focus this node
|
|
116
|
-
function focus_node() {
|
|
117
|
-
ctx?.set_focused(path)
|
|
99
|
+
if (ctx && expandable) ctx.toggle_collapse_recursive(path, !is_collapsed)
|
|
118
100
|
}
|
|
119
101
|
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
102
|
+
// Children as { key, value } pairs based on value type (Map entries are wrapped so
|
|
103
|
+
// key and value render as an expandable pair; Set values get numeric keys)
|
|
104
|
+
let children = $derived.by((): { key: string | number; value: unknown }[] => {
|
|
124
105
|
if (value_type === `array`) {
|
|
125
106
|
return (value as unknown[]).map((val, idx) => ({ key: idx, value: val }))
|
|
126
107
|
}
|
|
127
|
-
|
|
128
108
|
if (value_type === `object`) {
|
|
129
|
-
|
|
130
|
-
if (ctx?.settings.sort_keys)
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
return keys.map((key) => ({
|
|
134
|
-
key,
|
|
135
|
-
value: (value as Record<string, unknown>)[key],
|
|
136
|
-
}))
|
|
109
|
+
const keys = Object.keys(value as Record<string, unknown>)
|
|
110
|
+
if (ctx?.settings.sort_keys) keys.sort()
|
|
111
|
+
return keys.map((key) => ({ key, value: (value as Record<string, unknown>)[key] }))
|
|
137
112
|
}
|
|
138
|
-
|
|
139
113
|
if (value_type === `map`) {
|
|
140
|
-
|
|
141
|
-
return Array.from(map.entries()).map(([key, val], idx) => ({
|
|
114
|
+
return Array.from(value as Map<unknown, unknown>, ([key, val], idx) => ({
|
|
142
115
|
key: idx,
|
|
143
116
|
value: { key, value: val },
|
|
144
117
|
}))
|
|
145
118
|
}
|
|
146
|
-
|
|
147
119
|
if (value_type === `set`) {
|
|
148
|
-
return Array.from(value as Set<unknown
|
|
149
|
-
key: idx,
|
|
150
|
-
value: val,
|
|
151
|
-
}))
|
|
120
|
+
return Array.from(value as Set<unknown>, (val, idx) => ({ key: idx, value: val }))
|
|
152
121
|
}
|
|
153
|
-
|
|
154
122
|
return []
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
let children = $derived(get_children())
|
|
123
|
+
})
|
|
158
124
|
|
|
159
125
|
// Ghost children: removed entries from diff (pre-computed in JsonTree for O(1) lookup)
|
|
160
126
|
let ghost_children = $derived.by(() => {
|
|
@@ -191,9 +157,7 @@
|
|
|
191
157
|
if (expandable && !is_collapsed) {
|
|
192
158
|
toggle_collapse()
|
|
193
159
|
}
|
|
194
|
-
} else if (
|
|
195
|
-
(event.key === `c` || event.key === `C`) && (event.ctrlKey || event.metaKey)
|
|
196
|
-
) {
|
|
160
|
+
} else if ((event.key === `c` || event.key === `C`) && (event.ctrlKey || event.metaKey)) {
|
|
197
161
|
// When nodes are selected, let the tree-level handler do bulk copy
|
|
198
162
|
if (ctx?.selected_paths.size) return
|
|
199
163
|
event.preventDefault()
|
|
@@ -235,7 +199,7 @@
|
|
|
235
199
|
event.stopPropagation()
|
|
236
200
|
ctx?.toggle_select(path, event.shiftKey)
|
|
237
201
|
} else {
|
|
238
|
-
|
|
202
|
+
ctx?.set_focused(path)
|
|
239
203
|
}
|
|
240
204
|
}}
|
|
241
205
|
onauxclick={(event) => {
|
|
@@ -299,10 +263,7 @@
|
|
|
299
263
|
{#if expandable && is_collapsed}
|
|
300
264
|
▸
|
|
301
265
|
{:else}
|
|
302
|
-
<Icon
|
|
303
|
-
icon="Copy"
|
|
304
|
-
style="width: 10px; height: 10px; vertical-align: baseline"
|
|
305
|
-
/>
|
|
266
|
+
<Icon icon="Copy" style="width: 10px; height: 10px; vertical-align: baseline" />
|
|
306
267
|
{/if}
|
|
307
268
|
</span>
|
|
308
269
|
</button>
|
|
@@ -371,9 +332,9 @@
|
|
|
371
332
|
{/if}
|
|
372
333
|
</span>
|
|
373
334
|
<span class="colon">:</span>
|
|
374
|
-
<span style="color: var(--jt-preview); font-style: italic"
|
|
375
|
-
format_preview(ghost.value)
|
|
376
|
-
|
|
335
|
+
<span style="color: var(--jt-preview); font-style: italic"
|
|
336
|
+
>{format_preview(ghost.value)}</span
|
|
337
|
+
>
|
|
377
338
|
</span>
|
|
378
339
|
</div>
|
|
379
340
|
{/each}
|
|
@@ -497,7 +458,9 @@
|
|
|
497
458
|
color: var(--jt-number, light-dark(#098658, #b5cea8));
|
|
498
459
|
}
|
|
499
460
|
}
|
|
500
|
-
.colon,
|
|
461
|
+
.colon,
|
|
462
|
+
.comma,
|
|
463
|
+
.bracket {
|
|
501
464
|
color: var(--jt-punctuation, light-dark(#000, #d4d4d4));
|
|
502
465
|
}
|
|
503
466
|
.colon {
|