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,7 +4,7 @@ import type { AxisConfig } from '../plot';
|
|
|
4
4
|
import { type ComponentProps, type Snippet } from 'svelte';
|
|
5
5
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
6
6
|
import HeatmapMatrixControls from './HeatmapMatrixControls.svelte';
|
|
7
|
-
import type { AxisItem, CellContext, DomainMode, HeatmapExportFormat, HeatmapTooltipProp, LegendPosition, NormalizeMode, SymmetricMode } from './index';
|
|
7
|
+
import type { AxisItem, CellContext, DomainMode, HeatmapExportFormat, HeatmapTooltipProp, LegendPosition, MissingCellStyle, NormalizeMode, SymmetricMode } from './index';
|
|
8
8
|
type CellValue = number | string | null;
|
|
9
9
|
type SelectionMode = `single` | `multi` | `range`;
|
|
10
10
|
type AxisOrderKey = `label` | `key` | `sort_value`;
|
|
@@ -20,7 +20,7 @@ type $$ComponentProps = Omit<HTMLAttributes<HTMLDivElement>, `onclick` | `ondblc
|
|
|
20
20
|
color_scale?: D3InterpolateName | ((val: number) => string);
|
|
21
21
|
color_scale_range?: [number | null, number | null];
|
|
22
22
|
color_overrides?: Record<string, string>;
|
|
23
|
-
|
|
23
|
+
missing?: MissingCellStyle;
|
|
24
24
|
log?: boolean;
|
|
25
25
|
value_transform?: (value: number, ctx: {
|
|
26
26
|
x_item: AxisItem;
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
import type { PaneProps, PaneToggleProps } from '../overlays'
|
|
3
3
|
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
4
4
|
import type { ComponentProps, Snippet } from 'svelte'
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { ELEMENT_ORDERINGS, ORDERING_LABELS } from './index'
|
|
6
|
+
import type {
|
|
7
|
+
ElementAxisOrderingKey,
|
|
8
|
+
DomainMode,
|
|
9
|
+
HeatmapExportFormat,
|
|
10
|
+
LegendPosition,
|
|
11
|
+
NormalizeMode,
|
|
12
|
+
SymmetricMode,
|
|
8
13
|
} from './index'
|
|
9
|
-
import type { ElementAxisOrderingKey, DomainMode, HeatmapExportFormat, LegendPosition, NormalizeMode, SymmetricMode } from './index'
|
|
10
14
|
|
|
11
15
|
let {
|
|
12
16
|
ordering = $bindable(`atomic_number`),
|
|
@@ -53,9 +57,7 @@
|
|
|
53
57
|
} = $props()
|
|
54
58
|
|
|
55
59
|
function merge_styles(base_style: string, override_style: unknown): string {
|
|
56
|
-
const override_style_str = typeof override_style === `string`
|
|
57
|
-
? override_style
|
|
58
|
-
: ``
|
|
60
|
+
const override_style_str = typeof override_style === `string` ? override_style : ``
|
|
59
61
|
return override_style_str ? `${base_style}; ${override_style_str}` : base_style
|
|
60
62
|
}
|
|
61
63
|
|
|
@@ -25,6 +25,6 @@ type $$ComponentProps = {
|
|
|
25
25
|
controls_open: boolean;
|
|
26
26
|
}]>;
|
|
27
27
|
};
|
|
28
|
-
declare const HeatmapMatrixControls: import("svelte").Component<$$ComponentProps, {}, "normalize" | "
|
|
28
|
+
declare const HeatmapMatrixControls: import("svelte").Component<$$ComponentProps, {}, "normalize" | "theme" | "show_values" | "show_legend" | "controls_open" | "ordering" | "symmetric" | "search_query" | "toggle_visible" | "domain_mode" | "legend_position" | "show_row_summaries" | "show_col_summaries">;
|
|
29
29
|
type HeatmapMatrixControls = ReturnType<typeof HeatmapMatrixControls>;
|
|
30
30
|
export default HeatmapMatrixControls;
|
|
@@ -17,6 +17,11 @@ export type CellContext = {
|
|
|
17
17
|
value: number | string | null;
|
|
18
18
|
bg_color: string | null;
|
|
19
19
|
};
|
|
20
|
+
export interface MissingCellStyle {
|
|
21
|
+
color?: `element-category` | (string & {});
|
|
22
|
+
label?: string;
|
|
23
|
+
style?: string;
|
|
24
|
+
}
|
|
20
25
|
export declare const ORDERING_LABELS: {
|
|
21
26
|
readonly atomic_number: "Atomic Number";
|
|
22
27
|
readonly mendeleev_number: "Pettifor Chemical Similarity";
|
package/dist/icons.d.ts
CHANGED
|
@@ -540,6 +540,10 @@ export declare const ICON_DATA: {
|
|
|
540
540
|
readonly viewBox: "0 0 24 24";
|
|
541
541
|
readonly path: "<path fill=\"currentColor\" d=\"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M4 4h5v16H4zm7 0h9v8h-9zm0 10h9v6h-9z\"/>";
|
|
542
542
|
};
|
|
543
|
+
readonly Grid2x2: {
|
|
544
|
+
readonly viewBox: "0 0 24 24";
|
|
545
|
+
readonly path: "<path fill=\"currentColor\" d=\"M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M4 4h7v7H4zm0 9h7v7H4zm9-9h7v7h-7zm0 9h7v7h-7z\"/>";
|
|
546
|
+
};
|
|
543
547
|
readonly FermiSurface: {
|
|
544
548
|
readonly viewBox: "0 0 24 24";
|
|
545
549
|
readonly stroke: "currentColor";
|
package/dist/icons.js
CHANGED
|
@@ -620,6 +620,10 @@ export const ICON_DATA = {
|
|
|
620
620
|
viewBox: `0 0 24 24`,
|
|
621
621
|
path: `<path fill="currentColor" d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M4 4h5v16H4zm7 0h9v8h-9zm0 10h9v6h-9z"/>`,
|
|
622
622
|
},
|
|
623
|
+
Grid2x2: {
|
|
624
|
+
viewBox: `0 0 24 24`,
|
|
625
|
+
path: `<path fill="currentColor" d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M4 4h7v7H4zm0 9h7v7H4zm9-9h7v7h-7zm0 9h7v7h-7z"/>`,
|
|
626
|
+
},
|
|
623
627
|
FermiSurface: {
|
|
624
628
|
viewBox: `0 0 24 24`,
|
|
625
629
|
stroke: `currentColor`,
|
package/dist/index.d.ts
CHANGED
|
@@ -16,8 +16,8 @@ export { default as Icon } from './Icon.svelte';
|
|
|
16
16
|
export * from './icons';
|
|
17
17
|
export * from './io';
|
|
18
18
|
export { default as MillerIndexInput } from './MillerIndexInput.svelte';
|
|
19
|
-
export { auto_isosurface_settings, DEFAULT_ISOSURFACE_SETTINGS, generate_layers, grid_data_range, Isosurface as VolumetricIsosurface, IsosurfaceControls, LAYER_COLORS, parse_chgcar, parse_cube, parse_volumetric_file, sample_hkl_slice, tile_volumetric_data, trilinear_interpolate, } from './isosurface';
|
|
20
|
-
export type { DataRange, IsosurfaceLayer, IsosurfaceSettings, SliceResult, VolumetricData, VolumetricFileData, } from './isosurface';
|
|
19
|
+
export { auto_color_config, auto_isosurface_settings, auto_volume_layer, compare_volume_grids, compute_scalar_range, create_volume_sampler, DEFAULT_ISO_COLORMAP, DEFAULT_ISOSURFACE_SETTINGS, extract_volume_range, generate_layers, grid_data_range, is_signed_range, ISO_COLORMAPS, Isosurface as VolumetricIsosurface, IsosurfaceControls, label_file_volumes, lattices_match, LAYER_COLORS, materialize_layers, merge_imported_volumes, parse_chgcar, parse_cube, parse_volumetric_file, remove_volume, resolve_contour_thresholds, resolve_slice_color_range, resolve_volume_display_range, sample_hkl_slice, sample_plane_slice, sample_volume_at_positions, sanitize_display_range, scalars_to_vertex_colors, slice_to_rgba, tile_volumetric_data, trilinear_interpolate, VolumeSlice, } from './isosurface';
|
|
20
|
+
export type { CartesianPlane, DataRange, DisplayRange, GridCompatibility, IsoColormap, IsosurfaceLayer, IsosurfaceSettings, OutOfBoundsPolicy, PlaneSliceOptions, SliceResult, VolumeSliceMode, VolumeMergeResult, VolumeDisplayRangeOptions, VolumeSamplerOptions, VolumetricData, VolumetricFileData, } from './isosurface';
|
|
21
21
|
export * from './labels';
|
|
22
22
|
export * from './layout';
|
|
23
23
|
export * from './math';
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ export * from './icons';
|
|
|
17
17
|
export * from './io';
|
|
18
18
|
export { default as MillerIndexInput } from './MillerIndexInput.svelte';
|
|
19
19
|
// Explicit exports to avoid name clash with fermi-surface's Isosurface type
|
|
20
|
-
export { auto_isosurface_settings, DEFAULT_ISOSURFACE_SETTINGS, generate_layers, grid_data_range, Isosurface as VolumetricIsosurface, IsosurfaceControls, LAYER_COLORS, parse_chgcar, parse_cube, parse_volumetric_file, sample_hkl_slice, tile_volumetric_data, trilinear_interpolate, } from './isosurface';
|
|
20
|
+
export { auto_color_config, auto_isosurface_settings, auto_volume_layer, compare_volume_grids, compute_scalar_range, create_volume_sampler, DEFAULT_ISO_COLORMAP, DEFAULT_ISOSURFACE_SETTINGS, extract_volume_range, generate_layers, grid_data_range, is_signed_range, ISO_COLORMAPS, Isosurface as VolumetricIsosurface, IsosurfaceControls, label_file_volumes, lattices_match, LAYER_COLORS, materialize_layers, merge_imported_volumes, parse_chgcar, parse_cube, parse_volumetric_file, remove_volume, resolve_contour_thresholds, resolve_slice_color_range, resolve_volume_display_range, sample_hkl_slice, sample_plane_slice, sample_volume_at_positions, sanitize_display_range, scalars_to_vertex_colors, slice_to_rgba, tile_volumetric_data, trilinear_interpolate, VolumeSlice, } from './isosurface';
|
|
21
21
|
export * from './labels';
|
|
22
22
|
export * from './layout';
|
|
23
23
|
export * from './math';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import type { ExportItem, ExportSection } from './types'
|
|
4
4
|
import DraggablePane from '../overlays/DraggablePane.svelte'
|
|
5
5
|
import { sanitize_html } from '../sanitize'
|
|
6
|
-
import {
|
|
6
|
+
import { onDestroy, type Snippet } from 'svelte'
|
|
7
7
|
import { tooltip } from 'svelte-multiselect/attachments'
|
|
8
8
|
import type { HTMLAttributes } from 'svelte/elements'
|
|
9
9
|
|
|
@@ -73,7 +73,9 @@
|
|
|
73
73
|
{@attach section.tooltip
|
|
74
74
|
? tooltip({ allow_html: true, content: sanitize_html(section.tooltip) })
|
|
75
75
|
: () => {}}
|
|
76
|
-
>
|
|
76
|
+
>
|
|
77
|
+
{section.title}
|
|
78
|
+
</h4>
|
|
77
79
|
{/if}
|
|
78
80
|
<div class="export-grid">
|
|
79
81
|
{#each section.items as item, item_idx (item.label)}
|
|
@@ -81,9 +83,9 @@
|
|
|
81
83
|
<!-- not a <label>: it would forward label-text clicks to the first (download) button -->
|
|
82
84
|
<span class="export-item">
|
|
83
85
|
{#if item.hint}
|
|
84
|
-
<span
|
|
85
|
-
{
|
|
86
|
-
>
|
|
86
|
+
<span {@attach tooltip({ allow_html: true, content: sanitize_html(item.hint) })}
|
|
87
|
+
>{item.label}</span
|
|
88
|
+
>
|
|
87
89
|
{:else}
|
|
88
90
|
{item.label}
|
|
89
91
|
{/if}
|
|
@@ -110,14 +112,16 @@
|
|
|
110
112
|
</button>
|
|
111
113
|
{/if}
|
|
112
114
|
{#if item.show_dpi}
|
|
113
|
-
<span class="dpi-input"
|
|
115
|
+
<span class="dpi-input"
|
|
116
|
+
>(DPI: <input
|
|
114
117
|
type="number"
|
|
115
118
|
min={dpi_range[0]}
|
|
116
119
|
max={dpi_range[1]}
|
|
117
120
|
bind:value={png_dpi}
|
|
118
121
|
onchange={clamp_dpi}
|
|
119
122
|
title="Export resolution in dots per inch"
|
|
120
|
-
/>)</span
|
|
123
|
+
/>)</span
|
|
124
|
+
>
|
|
121
125
|
{/if}
|
|
122
126
|
</span>
|
|
123
127
|
{/each}
|
package/dist/io/decompress.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { COMPRESSION_EXTENSIONS } from '../constants';
|
|
2
2
|
import { COMPRESSION_FORMATS } from '../constants';
|
|
3
|
+
export declare function strip_compression_extensions(filename: string): string;
|
|
3
4
|
export type CompressionFormat = keyof typeof COMPRESSION_FORMATS;
|
|
4
5
|
export type CompressionExtension = (typeof COMPRESSION_EXTENSIONS)[number];
|
|
6
|
+
export type BrowserCompressionFormat = Exclude<CompressionFormat, `zip` | `xz` | `bz2`>;
|
|
7
|
+
export declare const is_browser_decompressible_format: (format: CompressionFormat | null) => format is BrowserCompressionFormat;
|
|
5
8
|
export declare function detect_compression_format(filename: string): CompressionFormat | null;
|
|
6
9
|
export declare function decompress_data(data: ArrayBuffer | ReadableStream<Uint8Array> | null, format: CompressionFormat): Promise<string>;
|
|
7
10
|
export declare function decompress_data_binary(data: ArrayBuffer | ReadableStream<Uint8Array> | null, format: CompressionFormat): Promise<ArrayBuffer>;
|
|
8
11
|
export declare function decompress_file(file: File): Promise<{
|
|
9
|
-
content: string;
|
|
12
|
+
content: string | ArrayBuffer;
|
|
10
13
|
filename: string;
|
|
11
14
|
}>;
|
package/dist/io/decompress.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { COMPRESSION_EXTENSIONS_REGEX, COMPRESSION_FORMATS } from '../constants';
|
|
2
|
-
import {
|
|
2
|
+
import { is_binary_payload } from './is-binary';
|
|
3
|
+
// Lowercase a filename and strip all trailing compression extensions (.gz, .zip, ...)
|
|
4
|
+
export function strip_compression_extensions(filename) {
|
|
5
|
+
let base_name = filename.toLowerCase();
|
|
6
|
+
while (COMPRESSION_EXTENSIONS_REGEX.test(base_name)) {
|
|
7
|
+
base_name = base_name.replace(COMPRESSION_EXTENSIONS_REGEX, ``);
|
|
8
|
+
}
|
|
9
|
+
return base_name;
|
|
10
|
+
}
|
|
11
|
+
export const is_browser_decompressible_format = (format) => format !== null && format !== `zip` && format !== `xz` && format !== `bz2`;
|
|
3
12
|
export function detect_compression_format(filename) {
|
|
4
13
|
const lower = filename.toLowerCase();
|
|
5
14
|
for (const [format, extensions] of Object.entries(COMPRESSION_FORMATS)) {
|
|
@@ -16,7 +25,7 @@ export async function decompress_data(data, format) {
|
|
|
16
25
|
// Decompress data and return as ArrayBuffer (for binary files like .brml.gz)
|
|
17
26
|
export async function decompress_data_binary(data, format) {
|
|
18
27
|
try {
|
|
19
|
-
if (format
|
|
28
|
+
if (!is_browser_decompressible_format(format)) {
|
|
20
29
|
throw new Error(`${format.toUpperCase()} decompression is not supported in the browser. ` +
|
|
21
30
|
`Please extract the ${format.toUpperCase()} file first.`);
|
|
22
31
|
}
|
|
@@ -37,39 +46,18 @@ export async function decompress_data_binary(data, format) {
|
|
|
37
46
|
throw new Error(`Failed to decompress ${format} file: ${error}`, { cause: error });
|
|
38
47
|
}
|
|
39
48
|
}
|
|
40
|
-
|
|
49
|
+
const to_content = (filename, buffer) => is_binary_payload(filename, buffer) ? buffer : new TextDecoder().decode(buffer);
|
|
50
|
+
// Read a dropped file, decompressing supported formats. Binary payloads (by extension or
|
|
51
|
+
// magic bytes) return as ArrayBuffer so parsers get raw bytes; text decodes to string.
|
|
52
|
+
export async function decompress_file(file) {
|
|
41
53
|
const format = detect_compression_format(file.name);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (is_supported && format) {
|
|
52
|
-
if (!(result instanceof ArrayBuffer))
|
|
53
|
-
throw new Error(`Expected binary file data`);
|
|
54
|
-
decompress_data(result, format).then((content) => {
|
|
55
|
-
const filename = file.name.replace(COMPRESSION_EXTENSIONS_REGEX, ``);
|
|
56
|
-
resolve({ content, filename });
|
|
57
|
-
}, reject);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
if (typeof result !== `string`)
|
|
61
|
-
throw new Error(`Expected text file data`);
|
|
62
|
-
resolve({ content: result, filename: file.name });
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
reject(to_error(error));
|
|
67
|
-
}
|
|
68
|
-
}, { once: true });
|
|
69
|
-
reader.addEventListener(`error`, () => reject(new Error(`Failed to read file ${file.name}`)));
|
|
70
|
-
if (is_supported)
|
|
71
|
-
reader.readAsArrayBuffer(file);
|
|
72
|
-
else
|
|
73
|
-
reader.readAsText(file);
|
|
74
|
-
});
|
|
54
|
+
// zip/xz/bz2 are handled by their own code paths; null = not compressed
|
|
55
|
+
const decompressible = is_browser_decompressible_format(format) ? format : null;
|
|
56
|
+
const buffer = await file.arrayBuffer();
|
|
57
|
+
if (decompressible) {
|
|
58
|
+
const filename = file.name.replace(COMPRESSION_EXTENSIONS_REGEX, ``);
|
|
59
|
+
const decompressed = await decompress_data_binary(buffer, decompressible);
|
|
60
|
+
return { content: to_content(filename, decompressed), filename };
|
|
61
|
+
}
|
|
62
|
+
return { content: to_content(file.name, buffer), filename: file.name };
|
|
75
63
|
}
|
package/dist/io/export.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import type { AnyStructure } from '../structure';
|
|
2
2
|
import { type Camera, type Scene, type WebGLRenderer } from 'three';
|
|
3
3
|
export declare const renderer_registry: WeakMap<HTMLCanvasElement, WebGLRenderer>;
|
|
4
|
+
export declare const scene_registry: WeakMap<HTMLCanvasElement, {
|
|
5
|
+
scene: Scene;
|
|
6
|
+
camera: Camera;
|
|
7
|
+
}>;
|
|
4
8
|
export declare const dpi_to_scale: (png_dpi: number) => number;
|
|
5
9
|
export declare function canvas_to_png_blob(canvas: HTMLCanvasElement, png_dpi?: number, scene?: Scene | null, camera?: Camera | null): Promise<Blob>;
|
|
6
10
|
export declare function export_canvas_as_png(canvas: HTMLCanvasElement | null, structure_or_filename: AnyStructure | string | undefined, png_dpi?: number, scene?: Scene | null, camera?: Camera | null): void;
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export declare function
|
|
11
|
+
export interface SvgExportOptions {
|
|
12
|
+
viewbox_padding?: number | `stroke`;
|
|
13
|
+
}
|
|
14
|
+
export declare function svg_to_svg_string(svg_element: SVGElement, inline_styles?: readonly string[], options?: SvgExportOptions): string;
|
|
15
|
+
export declare function export_svg_as_svg(svg_element: SVGElement | null, filename: string, inline_styles?: readonly string[], options?: SvgExportOptions): void;
|
|
16
|
+
export declare function svg_to_png_blob(svg_element: SVGElement, png_dpi?: number, inline_styles?: readonly string[], options?: SvgExportOptions): Promise<Blob>;
|
|
17
|
+
export declare function export_svg_as_png(svg_element: SVGElement | null, filename: string, png_dpi?: number, inline_styles?: readonly string[], options?: SvgExportOptions): void;
|
|
11
18
|
export declare function observe_canvas_presence(wrapper: HTMLElement | undefined, set: (has_canvas: boolean) => void): (() => void) | undefined;
|
|
12
19
|
export declare const estimate_video_bitrate: (pixel_count: number, fps: number) => number;
|
|
13
20
|
export declare function get_ffmpeg_conversion_command(input_filename: string): string;
|
package/dist/io/export.js
CHANGED
|
@@ -5,6 +5,10 @@ import { Vector2 } from 'three';
|
|
|
5
5
|
// Maps a Threlte canvas to its WebGLRenderer so PNG export can look up the renderer for a
|
|
6
6
|
// given canvas without mutating the DOM element. Populated by bind_renderer (scene/).
|
|
7
7
|
export const renderer_registry = new WeakMap();
|
|
8
|
+
// Companion scene+camera mapping: WebGL buffers are cleared after present
|
|
9
|
+
// (preserveDrawingBuffer is off), so any capture of a live canvas must
|
|
10
|
+
// re-render synchronously first — which needs the scene and active camera.
|
|
11
|
+
export const scene_registry = new WeakMap();
|
|
8
12
|
// PNG DPI -> render scale relative to the 72 DPI baseline, capped at 10x. DPI floors
|
|
9
13
|
// at 1 (non-finite -> 72) so bad inputs can't yield 0x0 canvases or NaN pixel ratios.
|
|
10
14
|
export const dpi_to_scale = (png_dpi) => Math.min(Math.max(1, Number.isFinite(png_dpi) ? png_dpi : 72) / 72, 10);
|
|
@@ -90,6 +94,54 @@ function set_svg_font_family(svg) {
|
|
|
90
94
|
// Also set as attribute for extra robustness
|
|
91
95
|
svg.setAttribute(`font-family`, `sans-serif`);
|
|
92
96
|
}
|
|
97
|
+
function svg_viewbox(svg, padding = 0) {
|
|
98
|
+
const parts = svg
|
|
99
|
+
.getAttribute(`viewBox`)
|
|
100
|
+
?.trim()
|
|
101
|
+
.split(/[\s,]+/)
|
|
102
|
+
.map(Number);
|
|
103
|
+
if (parts?.length !== 4 || !parts.every(Number.isFinite))
|
|
104
|
+
return null;
|
|
105
|
+
const [x, y, width, height] = parts;
|
|
106
|
+
if (width <= 0 || height <= 0)
|
|
107
|
+
return null;
|
|
108
|
+
const padded = [
|
|
109
|
+
x - padding,
|
|
110
|
+
y - padding,
|
|
111
|
+
width + 2 * padding,
|
|
112
|
+
height + 2 * padding,
|
|
113
|
+
];
|
|
114
|
+
return padded.every(Number.isFinite) && padded[2] > 0 && padded[3] > 0 ? padded : null;
|
|
115
|
+
}
|
|
116
|
+
function resolve_viewbox_padding(svg, options) {
|
|
117
|
+
if (options.viewbox_padding !== `stroke`) {
|
|
118
|
+
return Number.isFinite(options.viewbox_padding)
|
|
119
|
+
? Math.max(0, options.viewbox_padding ?? 0)
|
|
120
|
+
: 0;
|
|
121
|
+
}
|
|
122
|
+
let max_stroke_width = 0;
|
|
123
|
+
for (const element of [svg, ...svg.querySelectorAll(`*`)]) {
|
|
124
|
+
const computed = getComputedStyle(element);
|
|
125
|
+
const inline_style = element.style;
|
|
126
|
+
const stroke = [
|
|
127
|
+
inline_style.stroke,
|
|
128
|
+
computed.getPropertyValue(`stroke`),
|
|
129
|
+
element.getAttribute(`stroke`),
|
|
130
|
+
].find(Boolean) ?? ``;
|
|
131
|
+
if (!stroke || stroke === `none` || stroke === `transparent`)
|
|
132
|
+
continue;
|
|
133
|
+
// oxlint-disable-next-line unicorn/prefer-number-coercion -- CSS lengths include units
|
|
134
|
+
const stroke_width = Number.parseFloat([
|
|
135
|
+
inline_style.strokeWidth,
|
|
136
|
+
computed.getPropertyValue(`stroke-width`),
|
|
137
|
+
element.getAttribute(`stroke-width`),
|
|
138
|
+
].find(Boolean) ?? ``);
|
|
139
|
+
if (Number.isFinite(stroke_width)) {
|
|
140
|
+
max_stroke_width = Math.max(max_stroke_width, stroke_width);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return max_stroke_width / 2;
|
|
144
|
+
}
|
|
93
145
|
// Copy the given computed-style props from each live SVG element to its clone counterpart;
|
|
94
146
|
// identical structure lets querySelectorAll(`*`) walk both in lockstep. Writes clone-only.
|
|
95
147
|
function inline_computed_styles(live, clone, properties) {
|
|
@@ -106,10 +158,17 @@ function inline_computed_styles(live, clone, properties) {
|
|
|
106
158
|
}
|
|
107
159
|
// Clone, inline the given computed-style props, ensure font-family + xmlns, then serialize
|
|
108
160
|
// to a standalone SVG string. Never mutates the live element.
|
|
109
|
-
function serialize_svg_for_export(svg_element, inline_styles = []) {
|
|
161
|
+
function serialize_svg_for_export(svg_element, inline_styles = [], viewbox_padding = 0, strip_dimensions = false) {
|
|
110
162
|
const clone = svg_element.cloneNode(true);
|
|
111
163
|
if (inline_styles.length)
|
|
112
164
|
inline_computed_styles(svg_element, clone, inline_styles);
|
|
165
|
+
const padded_viewbox = viewbox_padding > 0 ? svg_viewbox(clone, viewbox_padding) : null;
|
|
166
|
+
if (padded_viewbox)
|
|
167
|
+
clone.setAttribute(`viewBox`, padded_viewbox.join(` `));
|
|
168
|
+
if (strip_dimensions) {
|
|
169
|
+
clone.removeAttribute(`width`);
|
|
170
|
+
clone.removeAttribute(`height`);
|
|
171
|
+
}
|
|
113
172
|
set_svg_font_family(clone);
|
|
114
173
|
if (!clone.hasAttribute(`xmlns`)) {
|
|
115
174
|
clone.setAttribute(`xmlns`, `http://www.w3.org/2000/svg`);
|
|
@@ -121,18 +180,19 @@ function serialize_svg_for_export(svg_element, inline_styles = []) {
|
|
|
121
180
|
export function svg_to_svg_string(svg_element,
|
|
122
181
|
// CSS props to inline from computed styles as presentation attributes; a standalone SVG
|
|
123
182
|
// drops page stylesheets (e.g. Svelte component styles), so class-based styling is lost.
|
|
124
|
-
inline_styles = []) {
|
|
125
|
-
const
|
|
183
|
+
inline_styles = [], options = {}) {
|
|
184
|
+
const viewbox_padding = resolve_viewbox_padding(svg_element, options);
|
|
185
|
+
const svg_string = serialize_svg_for_export(svg_element, inline_styles, viewbox_padding);
|
|
126
186
|
return `<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n${svg_string}`;
|
|
127
187
|
}
|
|
128
188
|
// Export SVG element as SVG file (triggers browser download)
|
|
129
|
-
export function export_svg_as_svg(svg_element, filename, inline_styles = []) {
|
|
189
|
+
export function export_svg_as_svg(svg_element, filename, inline_styles = [], options = {}) {
|
|
130
190
|
if (!svg_element) {
|
|
131
191
|
console.warn(`SVG element not found for export`);
|
|
132
192
|
return;
|
|
133
193
|
}
|
|
134
194
|
try {
|
|
135
|
-
const svg_content = svg_to_svg_string(svg_element, inline_styles);
|
|
195
|
+
const svg_content = svg_to_svg_string(svg_element, inline_styles, options);
|
|
136
196
|
download(svg_content, filename, `image/svg+xml;charset=utf-8`);
|
|
137
197
|
}
|
|
138
198
|
catch (error) {
|
|
@@ -144,18 +204,14 @@ export function export_svg_as_svg(svg_element, filename, inline_styles = []) {
|
|
|
144
204
|
// Image element, and returns the resulting PNG Blob. Rejects if viewBox is
|
|
145
205
|
// missing or dimensions are invalid (zero width/height).
|
|
146
206
|
// DPI is converted to a resolution multiplier relative to 72 DPI baseline, capped at 10x.
|
|
147
|
-
export function svg_to_png_blob(svg_element, png_dpi = 150, inline_styles = []) {
|
|
148
|
-
|
|
149
|
-
if (!viewBox)
|
|
207
|
+
export function svg_to_png_blob(svg_element, png_dpi = 150, inline_styles = [], options = {}) {
|
|
208
|
+
if (!svg_element.getAttribute(`viewBox`)?.trim())
|
|
150
209
|
return Promise.reject(new Error(`SVG viewBox not found for PNG export`));
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
const [, , width, height] = parts;
|
|
156
|
-
if (!(width > 0) || !(height > 0)) {
|
|
210
|
+
const padding = resolve_viewbox_padding(svg_element, options);
|
|
211
|
+
const padded_viewbox = svg_viewbox(svg_element, padding);
|
|
212
|
+
if (!padded_viewbox)
|
|
157
213
|
return Promise.reject(new Error(`Invalid SVG dimensions for PNG export`));
|
|
158
|
-
|
|
214
|
+
const [, , width, height] = padded_viewbox;
|
|
159
215
|
if (!Number.isFinite(png_dpi) || png_dpi <= 0) {
|
|
160
216
|
return Promise.reject(new Error(`Invalid PNG DPI for export`));
|
|
161
217
|
}
|
|
@@ -169,7 +225,7 @@ export function svg_to_png_blob(svg_element, png_dpi = 150, inline_styles = [])
|
|
|
169
225
|
return Promise.reject(new Error(`Canvas 2D context not available`));
|
|
170
226
|
canvas.width = pixel_width;
|
|
171
227
|
canvas.height = pixel_height;
|
|
172
|
-
const serialized = serialize_svg_for_export(svg_element, inline_styles);
|
|
228
|
+
const serialized = serialize_svg_for_export(svg_element, inline_styles, padding, padding > 0);
|
|
173
229
|
const svg_blob = new Blob([serialized], { type: `image/svg+xml;charset=utf-8` });
|
|
174
230
|
const svg_data_url = URL.createObjectURL(svg_blob);
|
|
175
231
|
return new Promise((resolve, reject) => {
|
|
@@ -200,12 +256,12 @@ export function svg_to_png_blob(svg_element, png_dpi = 150, inline_styles = [])
|
|
|
200
256
|
});
|
|
201
257
|
}
|
|
202
258
|
// Export SVG element as PNG (triggers browser download)
|
|
203
|
-
export function export_svg_as_png(svg_element, filename, png_dpi = 150, inline_styles = []) {
|
|
259
|
+
export function export_svg_as_png(svg_element, filename, png_dpi = 150, inline_styles = [], options = {}) {
|
|
204
260
|
if (!svg_element) {
|
|
205
261
|
console.warn(`SVG element not found for PNG export`);
|
|
206
262
|
return;
|
|
207
263
|
}
|
|
208
|
-
svg_to_png_blob(svg_element, png_dpi, inline_styles)
|
|
264
|
+
svg_to_png_blob(svg_element, png_dpi, inline_styles, options)
|
|
209
265
|
.then((blob) => download(blob, filename, `image/png`))
|
|
210
266
|
.catch((error) => console.error(`Error exporting PNG:`, error));
|
|
211
267
|
}
|
|
@@ -303,7 +359,7 @@ export async function export_trajectory_video(canvas, filename, options = {}) {
|
|
|
303
359
|
is_resolved = true;
|
|
304
360
|
try {
|
|
305
361
|
const blob = new Blob(chunks, { type: `video/webm` });
|
|
306
|
-
const webm_filename = filename.replace(/\.(mp4|webm)$/i, `.webm`);
|
|
362
|
+
const webm_filename = filename.replace(/\.(?:mp4|webm)$/i, `.webm`);
|
|
307
363
|
download(blob, webm_filename, `video/webm`);
|
|
308
364
|
on_progress?.(100);
|
|
309
365
|
resolve();
|
package/dist/io/fetch.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
export declare const to_query: (params: Record<string, string | number | undefined>) => string;
|
|
2
|
-
export declare function fetch_zipped<T>(url: string, { unzip }?: {
|
|
3
|
-
unzip?: boolean | undefined;
|
|
4
|
-
}): Promise<T | null>;
|
|
5
2
|
export type DownloadData = string | Blob | ArrayBuffer | ArrayBufferView<ArrayBuffer>;
|
|
6
3
|
export declare function download(data: DownloadData, filename: string, type: string): void;
|
package/dist/io/fetch.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import { decompress_data } from './decompress';
|
|
2
1
|
// Convert params object to URL query string, omitting empty/undefined values.
|
|
3
2
|
// Example: {foo: "bar", baz: 42, empty: ""} → "foo=bar&baz=42"
|
|
4
3
|
export const to_query = (params) => new URLSearchParams(Object.entries(params)
|
|
5
4
|
.filter(([, val]) => val !== `` && val !== undefined)
|
|
6
5
|
.map(([key, val]) => [key, String(val)])).toString();
|
|
7
|
-
export async function fetch_zipped(url, { unzip = true } = {}) {
|
|
8
|
-
const response = await fetch(url);
|
|
9
|
-
if (!response.ok) {
|
|
10
|
-
console.error(`${response.status} ${response.statusText} for ${response.url}`);
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
if (!unzip)
|
|
14
|
-
return (await response.blob());
|
|
15
|
-
return JSON.parse(await decompress_data(response.body, `gzip`));
|
|
16
|
-
}
|
|
17
6
|
// Original download implementation
|
|
18
7
|
function default_download(data, filename, type) {
|
|
19
8
|
const file = new Blob([data], { type });
|
package/dist/io/file-drop.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Shared file-drop handler composable for drag-and-drop file loading.
|
|
2
2
|
import { decompress_file } from './decompress';
|
|
3
|
-
import {
|
|
3
|
+
import { dropped_file_url, load_from_url } from './url-drop';
|
|
4
4
|
import { to_error } from '../utils';
|
|
5
5
|
// Drag-over visual-state handlers for file-drop zones; spread onto the drop target
|
|
6
6
|
// alongside `ondrop` from create_file_drop_handler
|
|
@@ -16,40 +16,65 @@ export const drag_over_handlers = (opts) => ({
|
|
|
16
16
|
ondragleave: () => opts.set_dragover(false),
|
|
17
17
|
});
|
|
18
18
|
// Handles URL drops (from FilePicker), direct file drops with decompression,
|
|
19
|
-
// loading state, and error reporting.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
19
|
+
// loading state, and error reporting. Multiple dropped files are processed
|
|
20
|
+
// sequentially in drop order so e.g. several cube files can be imported at once.
|
|
21
|
+
// Overlapping drops are queued: a batch starting while a previous one is still
|
|
22
|
+
// processing would interleave on_drop state mutations (e.g. torn volume lists).
|
|
23
|
+
export const create_file_drop_handler = (opts) => {
|
|
24
|
+
async function process_batch(url, files) {
|
|
25
|
+
opts.set_loading?.(true);
|
|
26
|
+
try {
|
|
27
|
+
// One failing item must not abort the rest of the batch
|
|
28
|
+
const failures = [];
|
|
29
|
+
if (url) {
|
|
30
|
+
try {
|
|
31
|
+
await load_from_url(url, opts.on_drop);
|
|
32
|
+
}
|
|
33
|
+
catch (exc) {
|
|
34
|
+
// URL failed; if plain files were also dropped, still process them
|
|
35
|
+
// and fold the URL failure into the aggregate report
|
|
36
|
+
if (files.length === 0) {
|
|
37
|
+
opts.on_error?.(`Failed to load from URL: ${to_error(exc).message}`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
failures.push(`URL ${url}: ${to_error(exc).message}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (files.length === 0)
|
|
44
|
+
return;
|
|
45
|
+
for (const file of files) {
|
|
46
|
+
try {
|
|
47
|
+
const { content, filename } = await decompress_file(file);
|
|
48
|
+
if (content)
|
|
49
|
+
await opts.on_drop(content, filename);
|
|
50
|
+
else
|
|
51
|
+
failures.push(`${file.name}: file is empty`);
|
|
52
|
+
}
|
|
53
|
+
catch (exc) {
|
|
54
|
+
failures.push(`${file.name}: ${to_error(exc).message}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (failures.length > 0) {
|
|
58
|
+
opts.on_error?.(`Failed to load ${failures.length} file${failures.length > 1 ? `s` : ``} — ${failures.join(`; `)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (exc) {
|
|
62
|
+
opts.on_error?.(`Failed to load file: ${to_error(exc).message}`);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
opts.set_loading?.(false);
|
|
39
66
|
}
|
|
40
|
-
drop_filename = file.name;
|
|
41
|
-
const { content, filename } = await decompress_file(file);
|
|
42
|
-
if (content)
|
|
43
|
-
await opts.on_drop(content, filename);
|
|
44
|
-
}
|
|
45
|
-
catch (exc) {
|
|
46
|
-
const detail = to_error(exc).message;
|
|
47
|
-
const msg = drop_filename
|
|
48
|
-
? `Failed to load file ${drop_filename}: ${detail}`
|
|
49
|
-
: `Failed to load file: ${detail}`;
|
|
50
|
-
opts.on_error?.(msg);
|
|
51
|
-
}
|
|
52
|
-
finally {
|
|
53
|
-
opts.set_loading?.(false);
|
|
54
67
|
}
|
|
68
|
+
let queue = Promise.resolve();
|
|
69
|
+
return (event) => {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
if (!opts.allow())
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
// DataTransfer contents are only readable during drop-event dispatch, so
|
|
74
|
+
// capture them before deferring to the queue
|
|
75
|
+
const url = dropped_file_url(event);
|
|
76
|
+
const files = Array.from(event.dataTransfer?.files ?? []);
|
|
77
|
+
queue = queue.then(() => process_batch(url, files)).catch(() => undefined);
|
|
78
|
+
return queue;
|
|
79
|
+
};
|
|
55
80
|
};
|
package/dist/io/index.d.ts
CHANGED
package/dist/io/index.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import { COMPRESSION_EXTENSIONS_REGEX } from '../constants';
|
|
2
1
|
export { default as ExportPane } from './ExportPane.svelte';
|
|
2
|
+
// strip_compression_extensions lives in ./decompress (Svelte-free) so parser
|
|
3
|
+
// modules can import it inside Web Workers; re-exported here.
|
|
3
4
|
export * from './decompress';
|
|
4
5
|
export * from './export';
|
|
5
6
|
export * from './fetch';
|
|
6
7
|
export * from './file-drop';
|
|
7
8
|
export * from './is-binary';
|
|
8
9
|
export * from './url-drop';
|
|
9
|
-
// Lowercase a filename and strip all trailing compression extensions (.gz, .zip, ...)
|
|
10
|
-
export function strip_compression_extensions(filename) {
|
|
11
|
-
let base_name = filename.toLowerCase();
|
|
12
|
-
while (COMPRESSION_EXTENSIONS_REGEX.test(base_name)) {
|
|
13
|
-
base_name = base_name.replace(COMPRESSION_EXTENSIONS_REGEX, ``);
|
|
14
|
-
}
|
|
15
|
-
return base_name;
|
|
16
|
-
}
|
package/dist/io/is-binary.d.ts
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
1
|
export declare const is_binary: (content: string) => boolean;
|
|
2
|
+
export declare const has_gzip_magic: (bytes: Uint8Array) => boolean;
|
|
3
|
+
export declare const has_hdf5_magic: (bytes: Uint8Array) => boolean;
|
|
4
|
+
export declare const has_binary_magic: (bytes: Uint8Array) => boolean;
|
|
5
|
+
export declare const ext_of: (name: string) => string;
|
|
6
|
+
export declare const BINARY_EXTENSIONS: Set<string>;
|
|
7
|
+
export declare const is_known_text_file: (basename: string) => boolean;
|
|
8
|
+
export declare const strip_gz_ext: (filename: string) => string;
|
|
9
|
+
export declare const has_binary_inner_ext: (filename: string) => boolean;
|
|
10
|
+
export declare const is_binary_payload: (filename: string, buffer: ArrayBuffer) => boolean;
|