matterviz 0.4.1 → 0.4.2
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 +12 -14
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/app.css +53 -0
- package/dist/brillouin/BrillouinZone.svelte +75 -85
- 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 +26 -39
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +62 -74
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +511 -547
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +1 -1
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +37 -31
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +7 -11
- package/dist/composition/Formula.svelte +18 -25
- package/dist/composition/FormulaFilter.svelte +92 -95
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +1 -1
- 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 +11 -10
- package/dist/constants.js +11 -9
- 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 -92
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +109 -140
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +75 -94
- 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 +17 -21
- 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/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +36 -36
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +18 -17
- package/dist/coordination/CoordinationBarPlot.svelte +38 -33
- 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 -8
- 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 +24 -29
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +1 -2
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +1 -4
- package/dist/element/index.js +3 -18
- 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 +14 -22
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -7
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +37 -64
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +3 -3
- package/dist/fermi-surface/parse.js +22 -24
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +109 -148
- 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/io/ExportPane.svelte +10 -6
- package/dist/io/decompress.d.ts +2 -1
- package/dist/io/decompress.js +22 -35
- package/dist/io/export.d.ts +4 -0
- package/dist/io/export.js +5 -1
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- 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.js +13 -25
- package/dist/isosurface/Isosurface.svelte +17 -23
- package/dist/isosurface/IsosurfaceControls.svelte +37 -42
- 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/labels.d.ts +6 -2
- package/dist/labels.js +43 -13
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +7 -18
- 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 +21 -17
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +9 -10
- 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 +8 -11
- package/dist/layout/json-tree/JsonTree.svelte +53 -77
- package/dist/layout/json-tree/JsonValue.svelte +7 -15
- package/dist/layout/json-tree/utils.js +14 -23
- package/dist/math.d.ts +2 -0
- package/dist/math.js +19 -0
- package/dist/overlays/ContextMenu.svelte +4 -2
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +81 -26
- package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
- package/dist/overlays/GlassChip.svelte +30 -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 +11 -63
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
- 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 +3 -3
- 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 +21 -15
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +430 -391
- 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 +29 -36
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +301 -209
- 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.js +1 -1
- 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.js +9 -5
- 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 +3 -1
- package/dist/plot/core/layout.js +22 -13
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- 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/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 +51 -0
- package/dist/plot/core/utils/hierarchy-chart.js +179 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +99 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +304 -325
- 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/scatter/BinnedScatterPlot.svelte +263 -109
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +477 -385
- 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/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 +251 -329
- 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 +907 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
- package/dist/plot/treemap/index.d.ts +3 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/treemap.d.ts +26 -0
- package/dist/plot/treemap/treemap.js +99 -0
- package/dist/rdf/RdfPlot.svelte +22 -26
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +4 -8
- package/dist/sanitize.js +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +77 -50
- package/dist/spectral/Bands.svelte +223 -230
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -27
- package/dist/spectral/Dos.svelte +70 -73
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +25 -35
- 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 +115 -75
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +11 -26
- 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 +473 -419
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +630 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +157 -399
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +72 -66
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +467 -476
- package/dist/structure/StructureScene.svelte.d.ts +3 -1
- package/dist/structure/StructureViewport.svelte +386 -0
- package/dist/structure/StructureViewport.svelte.d.ts +63 -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 +104 -38
- package/dist/structure/bonding.d.ts +10 -3
- package/dist/structure/bonding.js +84 -28
- 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 +39 -31
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +22 -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 +13 -2
- 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 +243 -222
- package/dist/structure/partial-occupancy.js +4 -2
- package/dist/structure/pbc.js +78 -98
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +3 -18
- 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 +56 -68
- package/dist/symmetry/WyckoffTable.svelte +5 -24
- package/dist/symmetry/cell-transform.js +1 -0
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +8 -2
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1102 -365
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +5 -12
- 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/index.d.ts +1 -5
- package/dist/theme/index.js +4 -10
- package/dist/theme/themes.mjs +14 -7
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +2 -5
- package/dist/trajectory/Trajectory.svelte +515 -308
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +11 -8
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -31
- package/dist/trajectory/TrajectoryInfoPane.svelte +85 -97
- package/dist/trajectory/extract.js +56 -34
- package/dist/trajectory/format-detect.js +11 -9
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +33 -29
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +18 -7
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +3 -0
- 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 +2 -3
- package/dist/trajectory/parse/index.js +17 -20
- 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 +5 -0
- package/dist/trajectory/parse/vaspout-h5.js +284 -0
- package/dist/trajectory/parse/xyz.js +11 -7
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +99 -27
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +47 -61
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +2 -4
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +56 -73
- package/package.json +61 -33
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
|
@@ -25,16 +25,19 @@
|
|
|
25
25
|
has_been_dragged = $bindable(false),
|
|
26
26
|
currently_dragging = $bindable(false),
|
|
27
27
|
resizable = `none`,
|
|
28
|
+
position = `absolute`,
|
|
28
29
|
}: {
|
|
29
30
|
show?: boolean
|
|
30
31
|
show_pane?: boolean
|
|
31
32
|
children: Snippet<
|
|
32
|
-
[
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
[
|
|
34
|
+
{
|
|
35
|
+
show: boolean
|
|
36
|
+
show_control_buttons: boolean
|
|
37
|
+
has_been_dragged: boolean
|
|
38
|
+
currently_dragging: boolean
|
|
39
|
+
},
|
|
40
|
+
]
|
|
38
41
|
>
|
|
39
42
|
// Toggle button
|
|
40
43
|
toggle_props?: HTMLAttributes<HTMLButtonElement>
|
|
@@ -49,6 +52,10 @@
|
|
|
49
52
|
persistent?: boolean
|
|
50
53
|
// Resize mode: 'both' | 'width' | 'height' | 'none'
|
|
51
54
|
resizable?: `both` | `width` | `height` | `none`
|
|
55
|
+
// 'fixed' renders the pane relative to the viewport so it escapes
|
|
56
|
+
// overflow-clipping ancestors (e.g. cards/tables with overflow: hidden)
|
|
57
|
+
// and clamps its max-height to the space below the toggle button.
|
|
58
|
+
position?: `absolute` | `fixed`
|
|
52
59
|
// Callbacks
|
|
53
60
|
onclose?: () => void
|
|
54
61
|
on_drag_start?: () => void
|
|
@@ -63,6 +70,8 @@
|
|
|
63
70
|
let show_control_buttons = $state(false)
|
|
64
71
|
let resizing = $state(false)
|
|
65
72
|
let resize_end_time = 0
|
|
73
|
+
const viewport_margin_px = 8
|
|
74
|
+
const min_reachable_pane_height_px = 180
|
|
66
75
|
|
|
67
76
|
// Resize via bottom-right grip
|
|
68
77
|
function handle_resize_start(event: PointerEvent) {
|
|
@@ -83,9 +92,7 @@
|
|
|
83
92
|
pane_div.style.width = `${Math.max(200, start_w + evt.clientX - start_x)}px`
|
|
84
93
|
}
|
|
85
94
|
if (resizable !== `width`) {
|
|
86
|
-
pane_div.style.maxHeight = `${
|
|
87
|
-
Math.max(100, start_h + evt.clientY - start_y)
|
|
88
|
-
}px`
|
|
95
|
+
pane_div.style.maxHeight = `${Math.max(100, start_h + evt.clientY - start_y)}px`
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
98
|
function on_up() {
|
|
@@ -124,6 +131,10 @@
|
|
|
124
131
|
width: ``,
|
|
125
132
|
maxHeight: ``,
|
|
126
133
|
})
|
|
134
|
+
// Refresh --pane-viewport-clamp for the new position (matches
|
|
135
|
+
// handle_resize and the mount effect; without this a reset after a
|
|
136
|
+
// drag + window resize keeps a stale bottom-edge cap)
|
|
137
|
+
apply_viewport_clamp()
|
|
127
138
|
}
|
|
128
139
|
}
|
|
129
140
|
// Hide the control buttons after reset
|
|
@@ -147,10 +158,31 @@
|
|
|
147
158
|
const pane_width = pane_div?.getBoundingClientRect().width || 450
|
|
148
159
|
const ox = offset.x ?? 5
|
|
149
160
|
const oy = offset.y ?? 5
|
|
161
|
+
|
|
162
|
+
if (position === `fixed`) {
|
|
163
|
+
// Viewport-relative: keep the pane reachable within the screen.
|
|
164
|
+
const left = Math.max(
|
|
165
|
+
viewport_margin_px,
|
|
166
|
+
Math.min(
|
|
167
|
+
toggle_rect.right - pane_width + ox,
|
|
168
|
+
window.innerWidth - pane_width - viewport_margin_px,
|
|
169
|
+
),
|
|
170
|
+
)
|
|
171
|
+
const top = Math.max(
|
|
172
|
+
viewport_margin_px,
|
|
173
|
+
Math.min(
|
|
174
|
+
toggle_rect.bottom + oy,
|
|
175
|
+
window.innerHeight - min_reachable_pane_height_px - viewport_margin_px,
|
|
176
|
+
),
|
|
177
|
+
)
|
|
178
|
+
return { left: `${left}px`, top: `${top}px` }
|
|
179
|
+
}
|
|
180
|
+
|
|
150
181
|
const positioned_ancestor = toggle_pane_btn.offsetParent
|
|
151
182
|
const ancestor_rect = positioned_ancestor?.getBoundingClientRect()
|
|
152
183
|
|
|
153
|
-
if (!ancestor_rect) {
|
|
184
|
+
if (!ancestor_rect) {
|
|
185
|
+
// Fallback to document positioning
|
|
154
186
|
const scroll_x = window.scrollX || document.documentElement.scrollLeft
|
|
155
187
|
const scroll_y = window.scrollY || document.documentElement.scrollTop
|
|
156
188
|
return {
|
|
@@ -173,10 +205,11 @@
|
|
|
173
205
|
if (Date.now() - resize_end_time < 200) return
|
|
174
206
|
|
|
175
207
|
const target = event.target
|
|
176
|
-
const is_toggle_button =
|
|
208
|
+
const is_toggle_button =
|
|
209
|
+
target instanceof Node &&
|
|
177
210
|
(target === toggle_pane_btn || (toggle_pane_btn?.contains(target) ?? false))
|
|
178
|
-
const is_inside_pane =
|
|
179
|
-
(target === pane_div || (pane_div?.contains(target) ?? false))
|
|
211
|
+
const is_inside_pane =
|
|
212
|
+
target instanceof Node && (target === pane_div || (pane_div?.contains(target) ?? false))
|
|
180
213
|
|
|
181
214
|
if (!is_toggle_button && !is_inside_pane && !currently_dragging && !resizing) {
|
|
182
215
|
close_pane()
|
|
@@ -186,7 +219,8 @@
|
|
|
186
219
|
// Debounced resize handler for better performance
|
|
187
220
|
let resize_timeout: ReturnType<typeof setTimeout> | undefined = $state(undefined)
|
|
188
221
|
|
|
189
|
-
function handle_resize() {
|
|
222
|
+
function handle_resize() {
|
|
223
|
+
// Only reposition if pane is visible and hasn't been manually dragged
|
|
190
224
|
if (!show || has_been_dragged || currently_dragging) return
|
|
191
225
|
|
|
192
226
|
if (resize_timeout) clearTimeout(resize_timeout)
|
|
@@ -197,11 +231,30 @@
|
|
|
197
231
|
initial_position = pos
|
|
198
232
|
pane_div.style.left = pos.left
|
|
199
233
|
pane_div.style.top = pos.top
|
|
234
|
+
apply_viewport_clamp()
|
|
200
235
|
}
|
|
201
236
|
}, 50) // Debounce resize events
|
|
202
237
|
resize_timeout = current_timeout
|
|
203
238
|
}
|
|
204
239
|
|
|
240
|
+
// Fixed panes must never extend past the bottom viewport edge: cap the
|
|
241
|
+
// --pane-viewport-clamp var (combined with --pane-max-height via min() in
|
|
242
|
+
// CSS) to the space below the pane's top edge. No minimum here — usability
|
|
243
|
+
// is handled by calculate_position, which clamps the top so at least
|
|
244
|
+
// min_reachable_pane_height_px of space remains below.
|
|
245
|
+
function apply_viewport_clamp(): void {
|
|
246
|
+
if (position !== `fixed` || !pane_div || !toggle_pane_btn) return
|
|
247
|
+
// style.top is a `${n}px` string when set; "0px" is a valid position, so only
|
|
248
|
+
// fall back to the live rect when the inline style is unset or non-numeric
|
|
249
|
+
const parsed_top = Number(pane_div.style.top.replace(/px$/, ``))
|
|
250
|
+
const pane_top =
|
|
251
|
+
pane_div.style.top && !Number.isNaN(parsed_top)
|
|
252
|
+
? parsed_top
|
|
253
|
+
: pane_div.getBoundingClientRect().top
|
|
254
|
+
const available = window.innerHeight - pane_top - viewport_margin_px
|
|
255
|
+
pane_div.style.setProperty(`--pane-viewport-clamp`, `${Math.max(0, available)}px`)
|
|
256
|
+
}
|
|
257
|
+
|
|
205
258
|
// Position pane when shown
|
|
206
259
|
$effect(() => {
|
|
207
260
|
if (show && toggle_pane_btn && !has_been_dragged) {
|
|
@@ -216,6 +269,7 @@
|
|
|
216
269
|
width: ``,
|
|
217
270
|
maxHeight: ``,
|
|
218
271
|
})
|
|
272
|
+
apply_viewport_clamp()
|
|
219
273
|
}
|
|
220
274
|
}
|
|
221
275
|
})
|
|
@@ -240,7 +294,7 @@
|
|
|
240
294
|
{...toggle_props}
|
|
241
295
|
style={toggle_props.style ?? ``}
|
|
242
296
|
onclick={toggle_pane}
|
|
243
|
-
class=
|
|
297
|
+
class={[`pane-toggle`, toggle_props.class]}
|
|
244
298
|
{@attach tooltip({ content: toggle_props.title ?? (show ? `Close pane` : `Open pane`) })}
|
|
245
299
|
>
|
|
246
300
|
<Icon icon={show ? open_icon : closed_icon} style={icon_style} />
|
|
@@ -256,12 +310,13 @@
|
|
|
256
310
|
role="dialog"
|
|
257
311
|
aria-label="Draggable pane"
|
|
258
312
|
aria-modal="false"
|
|
313
|
+
style:position
|
|
259
314
|
style:max-width={max_width}
|
|
260
315
|
style:top={initial_position.top}
|
|
261
316
|
style:left={initial_position.left}
|
|
262
317
|
style:display={show ? `grid` : `none`}
|
|
263
318
|
{...pane_props}
|
|
264
|
-
class=
|
|
319
|
+
class={[`draggable-pane toc-exclude`, show && `pane-open`, pane_props.class]}
|
|
265
320
|
>
|
|
266
321
|
<DragControlTab
|
|
267
322
|
show_controls={show_control_buttons}
|
|
@@ -329,21 +384,24 @@
|
|
|
329
384
|
box-sizing: border-box;
|
|
330
385
|
box-shadow: var(
|
|
331
386
|
--pane-box-shadow,
|
|
332
|
-
light-dark(
|
|
333
|
-
0 4px 20px -4px rgba(0, 0, 0, 0.15),
|
|
334
|
-
0 8px 16px -4px rgba(0, 0, 0, 0.3)
|
|
335
|
-
)
|
|
387
|
+
light-dark(0 4px 20px -4px rgba(0, 0, 0, 0.15), 0 8px 16px -4px rgba(0, 0, 0, 0.3))
|
|
336
388
|
);
|
|
337
389
|
z-index: var(--pane-z-index, 10);
|
|
338
390
|
display: grid;
|
|
339
391
|
text-align: left;
|
|
340
392
|
/* Exclude position from being transitioned to prevent sluggish dragging */
|
|
341
|
-
transition:
|
|
393
|
+
transition:
|
|
394
|
+
opacity 0.3s,
|
|
395
|
+
background-color 0.3s,
|
|
396
|
+
border-color 0.3s,
|
|
397
|
+
box-shadow 0.3s;
|
|
342
398
|
width: 28em;
|
|
343
399
|
max-width: var(--pane-max-width, 80cqw);
|
|
344
400
|
overflow: visible; /* Allow control-tab to protrude above the pane border */
|
|
345
401
|
min-height: var(--pane-min-height, auto);
|
|
346
|
-
|
|
402
|
+
/* --pane-viewport-clamp (set for position="fixed" panes) keeps the pane
|
|
403
|
+
above the bottom viewport edge even when the toggle sits low on screen */
|
|
404
|
+
max-height: min(var(--pane-max-height, 80vh), var(--pane-viewport-clamp, 200vh));
|
|
347
405
|
}
|
|
348
406
|
.draggable-pane .pane-content {
|
|
349
407
|
padding: var(--pane-padding, 1ex);
|
|
@@ -368,10 +426,7 @@
|
|
|
368
426
|
}
|
|
369
427
|
.draggable-pane :global(hr) {
|
|
370
428
|
border: none;
|
|
371
|
-
background: var(
|
|
372
|
-
--pane-hr-bg,
|
|
373
|
-
light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.1))
|
|
374
|
-
);
|
|
429
|
+
background: var(--pane-hr-bg, light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.1)));
|
|
375
430
|
margin: var(--pane-hr-margin, 4pt 0);
|
|
376
431
|
height: 1px;
|
|
377
432
|
}
|
|
@@ -24,6 +24,7 @@ type $$ComponentProps = {
|
|
|
24
24
|
pane_props?: HTMLAttributes<HTMLDivElement>;
|
|
25
25
|
persistent?: boolean;
|
|
26
26
|
resizable?: `both` | `width` | `height` | `none`;
|
|
27
|
+
position?: `absolute` | `fixed`;
|
|
27
28
|
onclose?: () => void;
|
|
28
29
|
on_drag_start?: () => void;
|
|
29
30
|
toggle_pane_btn?: HTMLButtonElement;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<!-- Small text overlay with a frosted-glass backdrop, for annotating visual
|
|
2
|
+
content (3D structure viewers, plots) without fully obscuring it. Shared by
|
|
3
|
+
StructurePopup's stats block and StructureCarousel's card headers so both
|
|
4
|
+
render identically. Position/size via --glass-chip-* custom properties. -->
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import type { Snippet } from 'svelte'
|
|
7
|
+
import type { HTMLAttributes } from 'svelte/elements'
|
|
8
|
+
|
|
9
|
+
let { children, ...rest }: HTMLAttributes<HTMLDivElement> & { children: Snippet } = $props()
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<div {...rest} class={[`glass-chip`, rest.class]}>
|
|
13
|
+
{@render children()}
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<style>
|
|
17
|
+
.glass-chip {
|
|
18
|
+
position: absolute;
|
|
19
|
+
top: var(--glass-chip-top, 10px);
|
|
20
|
+
left: var(--glass-chip-left, 10px);
|
|
21
|
+
z-index: var(--glass-chip-z, 2);
|
|
22
|
+
max-width: var(--glass-chip-max-width, calc(100% - 20px));
|
|
23
|
+
padding: 4px 8px;
|
|
24
|
+
border-radius: 6px;
|
|
25
|
+
background: var(--glass-chip-bg, transparent);
|
|
26
|
+
backdrop-filter: blur(8px);
|
|
27
|
+
color: var(--text-color);
|
|
28
|
+
font-size: var(--glass-chip-font-size, 0.85em);
|
|
29
|
+
}
|
|
30
|
+
</style>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
children: Snippet;
|
|
5
|
+
};
|
|
6
|
+
declare const GlassChip: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type GlassChip = ReturnType<typeof GlassChip>;
|
|
8
|
+
export default GlassChip;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { sanitize_html } from '../sanitize'
|
|
3
3
|
import type { HTMLAttributes } from 'svelte/elements'
|
|
4
|
-
import {
|
|
4
|
+
import { create_clipboard_feedback } from './'
|
|
5
5
|
import CopyButton from './CopyButton.svelte'
|
|
6
6
|
|
|
7
7
|
type InfoPaneRow = {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
} = $props()
|
|
34
34
|
|
|
35
35
|
let info_filter = $state(``)
|
|
36
|
-
const
|
|
36
|
+
const { copied, copy } = create_clipboard_feedback()
|
|
37
37
|
const row_key = (card_title: string, row: InfoPaneRow, row_idx: number): string =>
|
|
38
38
|
row.key ?? `${card_title}:${row.label}:${row.value}:${row_idx}`
|
|
39
39
|
|
|
@@ -44,27 +44,16 @@
|
|
|
44
44
|
.map((card) => ({
|
|
45
45
|
...card,
|
|
46
46
|
rows: card.rows.filter(({ label, value }) =>
|
|
47
|
-
`${card.title} ${label} ${value}`.toLowerCase().includes(filter)
|
|
47
|
+
`${card.title} ${label} ${value}`.toLowerCase().includes(filter),
|
|
48
48
|
),
|
|
49
49
|
}))
|
|
50
50
|
.filter(({ rows }) => rows.length > 0)
|
|
51
51
|
})
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
row: InfoPaneRow,
|
|
56
|
-
row_idx: number,
|
|
57
|
-
): Promise<void> {
|
|
58
|
-
const key = row_key(card_title, row, row_idx)
|
|
59
|
-
try {
|
|
60
|
-
await navigator.clipboard.writeText(`${row.label}: ${row.value}`)
|
|
61
|
-
copied_items.add(key)
|
|
62
|
-
setTimeout(() => copied_items.delete(key), 1000)
|
|
63
|
-
} catch (error) {
|
|
64
|
-
console.error(`Failed to copy to clipboard:`, error)
|
|
65
|
-
}
|
|
66
|
-
}
|
|
53
|
+
const copy_row = (card_title: string, row: InfoPaneRow, row_idx: number): Promise<void> =>
|
|
54
|
+
copy(`${row.label}: ${row.value}`, row_key(card_title, row, row_idx))
|
|
67
55
|
</script>
|
|
56
|
+
|
|
68
57
|
{#if show_filter}
|
|
69
58
|
<input
|
|
70
59
|
class="info-filter"
|
|
@@ -78,7 +67,7 @@
|
|
|
78
67
|
{#if filtered_cards.length === 0}
|
|
79
68
|
<p class="empty-filter">No {empty_label} matches "{info_filter}".</p>
|
|
80
69
|
{:else}
|
|
81
|
-
<div {...rest} class=
|
|
70
|
+
<div {...rest} class={[`info-cards`, rest.class]} style:--row-label-min={row_label_min}>
|
|
82
71
|
{#each filtered_cards as card (card.title)}
|
|
83
72
|
<section class="info-card">
|
|
84
73
|
<svelte:element this={`h${heading_level}`}>{card.title}</svelte:element>
|
|
@@ -89,7 +78,7 @@
|
|
|
89
78
|
<CopyButton
|
|
90
79
|
label="Copy {row.label}: {row.value}"
|
|
91
80
|
title="Copy {row.label}"
|
|
92
|
-
copied={
|
|
81
|
+
copied={copied.has(row_key(card.title, row, row_idx))}
|
|
93
82
|
onclick={() => copy_row(card.title, row, row_idx)}
|
|
94
83
|
/>
|
|
95
84
|
</div>
|
|
@@ -129,10 +118,9 @@
|
|
|
129
118
|
}
|
|
130
119
|
.info-row {
|
|
131
120
|
display: grid;
|
|
132
|
-
grid-template-columns:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
) auto;
|
|
121
|
+
grid-template-columns:
|
|
122
|
+
minmax(var(--row-label-min), var(--row-label-max, 0.8fr)) minmax(0, 1fr)
|
|
123
|
+
auto;
|
|
136
124
|
align-items: center;
|
|
137
125
|
gap: 5pt;
|
|
138
126
|
padding: var(--info-row-padding, 1pt 0);
|
package/dist/overlays/index.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type { ComponentProps } from 'svelte';
|
|
2
|
+
import { SvelteSet } from 'svelte/reactivity';
|
|
2
3
|
import type DraggablePane from './DraggablePane.svelte';
|
|
3
4
|
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
4
5
|
export { default as DraggablePane } from './DraggablePane.svelte';
|
|
5
6
|
export { default as DragControlTab } from './DragControlTab.svelte';
|
|
7
|
+
export { default as GlassChip } from './GlassChip.svelte';
|
|
8
|
+
export * from './portal';
|
|
6
9
|
export type PaneToggleProps = ComponentProps<typeof DraggablePane>[`toggle_props`];
|
|
7
10
|
export type PaneProps = ComponentProps<typeof DraggablePane>[`pane_props`];
|
|
11
|
+
export declare function create_clipboard_feedback(duration?: number): {
|
|
12
|
+
copied: SvelteSet<string>;
|
|
13
|
+
copy: (text: string, key: string) => Promise<void>;
|
|
14
|
+
};
|
package/dist/overlays/index.js
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
import { SvelteMap, SvelteSet } from 'svelte/reactivity';
|
|
1
2
|
export { default as ContextMenu } from './ContextMenu.svelte';
|
|
2
3
|
export { default as DraggablePane } from './DraggablePane.svelte';
|
|
3
4
|
export { default as DragControlTab } from './DragControlTab.svelte';
|
|
5
|
+
export { default as GlassChip } from './GlassChip.svelte';
|
|
6
|
+
export * from './portal';
|
|
7
|
+
// Reactive clipboard-copy feedback shared by info panes. `copy(text, key)` writes
|
|
8
|
+
// `text` to the clipboard and flags `key` as recently-copied in the returned reactive
|
|
9
|
+
// `copied` set for `duration` ms, so UIs can show a transient "copied" checkmark.
|
|
10
|
+
export function create_clipboard_feedback(duration = 1000) {
|
|
11
|
+
const copied = new SvelteSet();
|
|
12
|
+
const timers = new SvelteMap();
|
|
13
|
+
const copy = async (text, key) => {
|
|
14
|
+
try {
|
|
15
|
+
await navigator.clipboard.writeText(text);
|
|
16
|
+
copied.add(key);
|
|
17
|
+
// reset any in-flight timer so a re-copy gets the full feedback duration
|
|
18
|
+
clearTimeout(timers.get(key));
|
|
19
|
+
timers.set(key, setTimeout(() => {
|
|
20
|
+
copied.delete(key);
|
|
21
|
+
timers.delete(key);
|
|
22
|
+
}, duration));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error(`Failed to copy to clipboard:`, error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return { copied, copy };
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Attachment that moves its element into `target` (e.g. a host panel's toolbar),
|
|
2
|
+
// so components can offer optional external placement of their chrome (search/
|
|
3
|
+
// export/settings buttons etc.) without duplicating markup: pass nothing and the
|
|
4
|
+
// element renders inline where declared; pass a target and it teleports there.
|
|
5
|
+
// A comment anchor marks the original position so the element is restored when
|
|
6
|
+
// the target changes or unmounts, keeping Svelte's teardown sound.
|
|
7
|
+
export const portal = (target) => (element) => {
|
|
8
|
+
if (!target)
|
|
9
|
+
return undefined;
|
|
10
|
+
const anchor = document.createComment(`portal`);
|
|
11
|
+
element.before(anchor);
|
|
12
|
+
target.append(element);
|
|
13
|
+
return () => anchor.replaceWith(element);
|
|
14
|
+
};
|