matterviz 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EmptyState.svelte +10 -4
- package/dist/FilePicker.svelte +48 -60
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/api/optimade.js +10 -7
- package/dist/app.css +68 -0
- package/dist/brillouin/BrillouinZone.svelte +90 -91
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
- package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
- package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
- package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/compute.js +10 -16
- package/dist/brillouin/geometry.js +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +13 -14
- package/dist/chempot-diagram/color.d.ts +21 -1
- package/dist/chempot-diagram/color.js +70 -1
- package/dist/chempot-diagram/compute.d.ts +7 -0
- package/dist/chempot-diagram/compute.js +85 -26
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/chempot-diagram/export.js +1 -6
- package/dist/chempot-diagram/temperature.js +9 -10
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +30 -26
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +10 -19
- package/dist/composition/Formula.svelte +20 -27
- package/dist/composition/FormulaFilter.svelte +115 -184
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +7 -9
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/parse.d.ts +2 -2
- package/dist/composition/parse.js +61 -115
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +17 -26
- package/dist/convex-hull/ConvexHull.svelte +12 -15
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +93 -94
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +127 -186
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +131 -180
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
- package/dist/convex-hull/ConvexHullControls.svelte +46 -48
- package/dist/convex-hull/ConvexHullStats.svelte +193 -195
- package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
- package/dist/convex-hull/GasPressureControls.svelte +5 -12
- package/dist/convex-hull/StructurePopup.svelte +18 -22
- package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
- package/dist/convex-hull/TemperatureSlider.svelte +4 -10
- package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
- package/dist/convex-hull/gas-thermodynamics.js +21 -53
- package/dist/convex-hull/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +37 -43
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +37 -44
- package/dist/coordination/CoordinationBarPlot.svelte +49 -53
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/coordination/calc-coordination.d.ts +1 -1
- package/dist/coordination/calc-coordination.js +28 -25
- package/dist/element/BohrAtom.svelte +5 -9
- package/dist/element/ElementHeading.svelte +4 -1
- package/dist/element/ElementPhoto.svelte +11 -9
- package/dist/element/ElementStats.svelte +12 -10
- package/dist/element/ElementTile.svelte +44 -67
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +3 -2
- package/dist/element/data.js +5 -1
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +2 -5
- package/dist/element/index.js +4 -19
- package/dist/feedback/DragOverlay.svelte +5 -5
- package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
- package/dist/feedback/StatusMessage.svelte +7 -4
- package/dist/fermi-surface/FermiSlice.svelte +21 -18
- package/dist/fermi-surface/FermiSurface.svelte +35 -44
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +25 -58
- package/dist/fermi-surface/parse.js +54 -88
- package/dist/file-viewer/JsonBrowser.svelte +1043 -0
- package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
- package/dist/file-viewer/PlotPanel.svelte +350 -0
- package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
- package/dist/file-viewer/detect.d.ts +11 -0
- package/dist/file-viewer/detect.js +381 -0
- package/dist/file-viewer/eligibility.d.ts +4 -0
- package/dist/file-viewer/eligibility.js +53 -0
- package/dist/file-viewer/host-protocol.d.ts +50 -0
- package/dist/file-viewer/host-transfer.d.ts +25 -0
- package/dist/file-viewer/host-transfer.js +42 -0
- package/dist/file-viewer/index.d.ts +5 -0
- package/dist/file-viewer/index.js +5 -0
- package/dist/file-viewer/main.d.ts +44 -0
- package/dist/file-viewer/main.js +535 -0
- package/dist/file-viewer/parse.d.ts +9 -0
- package/dist/file-viewer/parse.js +170 -0
- package/dist/file-viewer/plot-utils.d.ts +24 -0
- package/dist/file-viewer/plot-utils.js +191 -0
- package/dist/file-viewer/types.d.ts +4 -0
- package/dist/file-viewer/types.js +5 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/index.d.ts +5 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/io/ExportPane.svelte +11 -7
- package/dist/io/decompress.d.ts +4 -1
- package/dist/io/decompress.js +24 -36
- package/dist/io/export.d.ts +11 -4
- package/dist/io/export.js +75 -19
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- package/dist/io/file-drop.js +60 -35
- package/dist/io/index.d.ts +0 -1
- package/dist/io/index.js +2 -9
- package/dist/io/is-binary.d.ts +9 -0
- package/dist/io/is-binary.js +45 -1
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +40 -40
- package/dist/isosurface/Isosurface.svelte +700 -215
- package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
- package/dist/isosurface/IsosurfaceControls.svelte +590 -116
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
- package/dist/isosurface/VolumeSlice.svelte +224 -0
- package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
- package/dist/isosurface/coloring.d.ts +20 -0
- package/dist/isosurface/coloring.js +118 -0
- package/dist/isosurface/geometry-worker-types.d.ts +38 -0
- package/dist/isosurface/geometry.worker.d.ts +1 -0
- package/dist/isosurface/geometry.worker.js +59 -0
- package/dist/isosurface/grid.d.ts +10 -0
- package/dist/isosurface/grid.js +31 -0
- package/dist/isosurface/index.d.ts +4 -0
- package/dist/isosurface/index.js +4 -0
- package/dist/isosurface/parse-vaspwave.d.ts +3 -0
- package/dist/isosurface/parse-vaspwave.js +138 -0
- package/dist/isosurface/parse.js +6 -6
- package/dist/isosurface/profile.d.ts +12 -0
- package/dist/isosurface/profile.js +19 -0
- package/dist/isosurface/sampling.d.ts +34 -0
- package/dist/isosurface/sampling.js +408 -0
- package/dist/isosurface/slice-rendering.d.ts +13 -0
- package/dist/isosurface/slice-rendering.js +79 -0
- package/dist/isosurface/slice.d.ts +22 -2
- package/dist/isosurface/slice.js +200 -116
- package/dist/isosurface/types.d.ts +24 -1
- package/dist/isosurface/types.js +120 -8
- package/dist/json-path.d.ts +4 -0
- package/dist/json-path.js +89 -0
- package/dist/labels.d.ts +6 -2
- package/dist/labels.js +44 -14
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +8 -21
- package/dist/layout/InfoTag.svelte +1 -3
- package/dist/layout/NumberRangeInput.svelte +46 -0
- package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
- package/dist/layout/PropertyFilter.svelte +2 -6
- package/dist/layout/SettingsSection.svelte +57 -62
- package/dist/layout/SettingsSection.svelte.d.ts +6 -7
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +16 -11
- package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
- package/dist/layout/fullscreen.js +3 -5
- package/dist/layout/fullscreen.svelte.js +1 -2
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +22 -59
- package/dist/layout/json-tree/JsonTree.svelte +101 -172
- package/dist/layout/json-tree/JsonValue.svelte +9 -32
- package/dist/layout/json-tree/utils.d.ts +0 -3
- package/dist/layout/json-tree/utils.js +50 -188
- package/dist/marching-cubes.d.ts +8 -1
- package/dist/marching-cubes.js +115 -48
- package/dist/math.d.ts +5 -2
- package/dist/math.js +48 -38
- package/dist/overlays/ContextMenu.svelte +19 -34
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +110 -74
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
- package/dist/overlays/GlassChip.svelte +32 -0
- package/dist/overlays/GlassChip.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +11 -23
- package/dist/overlays/index.d.ts +7 -0
- package/dist/overlays/index.js +26 -0
- package/dist/overlays/portal.d.ts +2 -0
- package/dist/overlays/portal.js +14 -0
- package/dist/periodic-table/PeriodicTable.svelte +113 -145
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
- package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
- package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
- package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
- package/dist/phase-diagram/build-diagram.js +4 -9
- package/dist/phase-diagram/diagram-input.d.ts +1 -2
- package/dist/phase-diagram/parse.js +15 -15
- package/dist/phase-diagram/svg-to-diagram.js +28 -27
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +461 -426
- package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
- package/dist/plot/bar/BarPlotControls.svelte +1 -3
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
- package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +322 -226
- package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
- package/dist/plot/box/Violin.svelte.d.ts +1 -0
- package/dist/plot/box/box-plot.js +1 -1
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +2 -2
- package/dist/plot/core/axis-utils.d.ts +12 -7
- package/dist/plot/core/axis-utils.js +48 -48
- package/dist/plot/core/components/AxisLabel.svelte +82 -20
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
- package/dist/plot/core/components/ColorBar.svelte +101 -106
- package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
- package/dist/plot/core/components/FillArea.svelte +10 -17
- package/dist/plot/core/components/HierarchyControls.svelte +249 -0
- package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/core/components/Line.svelte +18 -9
- package/dist/plot/core/components/Line.svelte.d.ts +2 -0
- package/dist/plot/core/components/PlotAxis.svelte +40 -17
- package/dist/plot/core/components/PlotControls.svelte +65 -41
- package/dist/plot/core/components/PlotLegend.svelte +31 -35
- package/dist/plot/core/components/PlotMarginals.svelte +616 -0
- package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotTooltip.svelte +1 -1
- package/dist/plot/core/components/PortalSelect.svelte +4 -8
- package/dist/plot/core/components/ReferenceLine.svelte +27 -24
- package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
- package/dist/plot/core/components/ReferencePlane.svelte +7 -8
- package/dist/plot/core/components/ZeroLines.svelte +4 -8
- package/dist/plot/core/components/ZoomRect.svelte +1 -2
- package/dist/plot/core/components/index.d.ts +1 -0
- package/dist/plot/core/components/index.js +1 -0
- package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
- package/dist/plot/core/data-cleaning-signal.js +467 -0
- package/dist/plot/core/data-cleaning.d.ts +2 -42
- package/dist/plot/core/data-cleaning.js +27 -474
- package/dist/plot/core/data-transform.d.ts +1 -2
- package/dist/plot/core/data-transform.js +9 -15
- package/dist/plot/core/fill-utils.d.ts +3 -1
- package/dist/plot/core/fill-utils.js +28 -6
- package/dist/plot/core/index.d.ts +1 -0
- package/dist/plot/core/index.js +1 -0
- package/dist/plot/core/interactions.js +0 -2
- package/dist/plot/core/layout.d.ts +15 -6
- package/dist/plot/core/layout.js +57 -38
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
- package/dist/plot/core/pan-zoom.svelte.js +34 -17
- package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -21
- package/dist/plot/core/reference-line.js +1 -1
- package/dist/plot/core/scales.d.ts +23 -0
- package/dist/plot/core/scales.js +39 -13
- package/dist/plot/core/svg.js +0 -1
- package/dist/plot/core/types/fills.d.ts +101 -0
- package/dist/plot/core/types/fills.js +15 -0
- package/dist/plot/core/types/plot-3d.d.ts +87 -0
- package/dist/plot/core/types/plot-3d.js +4 -0
- package/dist/plot/core/types/reference-lines.d.ts +140 -0
- package/dist/plot/core/types/reference-lines.js +9 -0
- package/dist/plot/core/types.d.ts +29 -324
- package/dist/plot/core/types.js +23 -20
- package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
- package/dist/plot/core/utils/hierarchy-chart.js +191 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +100 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +314 -340
- package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
- package/dist/plot/histogram/HistogramControls.svelte +30 -28
- package/dist/plot/histogram/histogram.d.ts +31 -0
- package/dist/plot/histogram/histogram.js +70 -0
- package/dist/plot/histogram/index.d.ts +1 -0
- package/dist/plot/histogram/index.js +1 -0
- package/dist/plot/index.d.ts +1 -0
- package/dist/plot/index.js +1 -0
- package/dist/plot/sankey/Sankey.svelte +78 -69
- package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
- package/dist/plot/sankey/SankeyControls.svelte +22 -16
- package/dist/plot/sankey/sankey.js +13 -9
- package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +517 -410
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/ScatterPoint.svelte +16 -9
- package/dist/plot/scatter/adaptive-density.d.ts +1 -1
- package/dist/plot/scatter/adaptive-density.js +36 -20
- package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
- package/dist/plot/scatter/binned-scatter-types.js +6 -1
- package/dist/plot/scatter/scatter-data.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.js +8 -7
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
- package/dist/plot/sunburst/Sunburst.svelte +269 -347
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
- package/dist/plot/sunburst/index.d.ts +1 -1
- package/dist/plot/sunburst/index.js +2 -1
- package/dist/plot/sunburst/render.d.ts +2 -2
- package/dist/plot/sunburst/render.js +47 -22
- package/dist/plot/sunburst/sunburst.d.ts +5 -1
- package/dist/plot/sunburst/sunburst.js +10 -3
- package/dist/plot/treemap/Treemap.svelte +1022 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
- package/dist/plot/treemap/index.d.ts +4 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/labels.d.ts +38 -0
- package/dist/plot/treemap/labels.js +80 -0
- package/dist/plot/treemap/treemap.d.ts +28 -0
- package/dist/plot/treemap/treemap.js +102 -0
- package/dist/rdf/RdfPlot.svelte +37 -59
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +63 -52
- package/dist/rdf/index.d.ts +0 -1
- package/dist/sanitize.js +85 -27
- package/dist/scene/SceneCamera.svelte +1 -1
- package/dist/scene/SceneCamera.svelte.d.ts +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/scene/index.d.ts +1 -2
- package/dist/scene/index.js +1 -1
- package/dist/scene/{props.js → props.svelte.js} +15 -1
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +229 -525
- package/dist/spectral/Bands.svelte +207 -221
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -42
- package/dist/spectral/Dos.svelte +92 -93
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +65 -140
- package/dist/state.svelte.js +5 -18
- package/dist/structure/Arrow.svelte +5 -18
- package/dist/structure/ArrowInstances.svelte +160 -0
- package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
- package/dist/structure/AtomLegend.svelte +120 -85
- package/dist/structure/AtomLegend.svelte.d.ts +2 -3
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +45 -35
- package/dist/structure/Cylinder.svelte +24 -40
- package/dist/structure/InstancedAtoms.svelte +114 -0
- package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
- package/dist/structure/Lattice.svelte +85 -149
- package/dist/structure/SiteLabels.svelte +122 -0
- package/dist/structure/SiteLabels.svelte.d.ts +18 -0
- package/dist/structure/Structure.svelte +636 -504
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +637 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +165 -425
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +128 -133
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +535 -578
- package/dist/structure/StructureScene.svelte.d.ts +6 -2
- package/dist/structure/StructureViewport.svelte +451 -0
- package/dist/structure/StructureViewport.svelte.d.ts +65 -0
- package/dist/structure/atom-label-placement.d.ts +16 -12
- package/dist/structure/atom-label-placement.js +70 -37
- package/dist/structure/atom-properties.d.ts +2 -0
- package/dist/structure/atom-properties.js +105 -38
- package/dist/structure/bond-order-perception.js +3 -8
- package/dist/structure/bonding.d.ts +9 -3
- package/dist/structure/bonding.js +95 -46
- package/dist/structure/edit-history.d.ts +6 -0
- package/dist/structure/edit-history.js +27 -0
- package/dist/structure/export.d.ts +1 -0
- package/dist/structure/export.js +89 -105
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +20 -0
- package/dist/structure/geometry.d.ts +9 -0
- package/dist/structure/geometry.js +27 -0
- package/dist/structure/index.d.ts +16 -1
- package/dist/structure/index.js +15 -10
- package/dist/structure/measure.d.ts +1 -1
- package/dist/structure/measure.js +6 -12
- package/dist/structure/parse.d.ts +2 -1
- package/dist/structure/parse.js +272 -313
- package/dist/structure/partial-occupancy.js +10 -5
- package/dist/structure/pbc.js +85 -107
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +7 -21
- package/dist/structure/prop-groups.d.ts +85 -0
- package/dist/structure/prop-groups.js +18 -0
- package/dist/structure/supercell.d.ts +1 -2
- package/dist/structure/supercell.js +7 -13
- package/dist/symmetry/SymmetryElements.svelte +11 -15
- package/dist/symmetry/SymmetryStats.svelte +55 -71
- package/dist/symmetry/WyckoffTable.svelte +10 -28
- package/dist/symmetry/cell-transform.js +6 -14
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +13 -10
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1142 -447
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +168 -53
- package/dist/table/ToggleMenu.svelte.d.ts +1 -1
- package/dist/table/index.d.ts +21 -6
- package/dist/table/index.js +34 -21
- package/dist/theme/ThemeControl.svelte +16 -8
- package/dist/theme/embedded.d.ts +18 -0
- package/dist/theme/embedded.js +206 -0
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +5 -12
- package/dist/theme/themes.mjs +44 -66
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +3 -6
- package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
- package/dist/tooltip/index.d.ts +8 -1
- package/dist/trajectory/Trajectory.svelte +613 -386
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +12 -74
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
- package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
- package/dist/trajectory/extract.js +61 -49
- package/dist/trajectory/format-detect.d.ts +2 -0
- package/dist/trajectory/format-detect.js +17 -13
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +35 -32
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +34 -56
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +5 -8
- package/dist/trajectory/parse/ase.js +1 -1
- package/dist/trajectory/parse/h5-utils.d.ts +13 -0
- package/dist/trajectory/parse/h5-utils.js +109 -0
- package/dist/trajectory/parse/hdf5.d.ts +1 -1
- package/dist/trajectory/parse/hdf5.js +116 -106
- package/dist/trajectory/parse/index.d.ts +6 -6
- package/dist/trajectory/parse/index.js +25 -33
- package/dist/trajectory/parse/lammps.js +8 -12
- package/dist/trajectory/parse/vasp.js +10 -7
- package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
- package/dist/trajectory/parse/vaspout-electronic.js +207 -0
- package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
- package/dist/trajectory/parse/vaspout-h5.js +281 -0
- package/dist/trajectory/parse/xyz.js +59 -9
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +113 -64
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +79 -118
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +24 -62
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +69 -95
- package/package.json +94 -34
- package/readme.md +6 -5
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
- package/dist/scene/types.d.ts +0 -26
- package/dist/tooltip/types.d.ts +0 -8
- package/dist/trajectory/constants.d.ts +0 -6
- package/dist/trajectory/constants.js +0 -11
- /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
- /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CellSnippet, ExportData, InitialSort, Label, Pagination, RowData, Search, SortHint, SpecialCells } from './';
|
|
1
|
+
import type { CellSnippet, ExportData, InitialSort, Label, Pagination, VirtualScroll, RowData, Search, SortHint, SpecialCells } from './';
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
4
|
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
@@ -17,14 +17,24 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
17
17
|
default_num_format?: string;
|
|
18
18
|
show_heatmap?: boolean;
|
|
19
19
|
heatmap_class?: string;
|
|
20
|
+
onrowpointerdown?: (event: PointerEvent, row: RowData) => void;
|
|
20
21
|
onrowclick?: (event: MouseEvent | KeyboardEvent, row: RowData) => void;
|
|
21
22
|
onrowdblclick?: (event: MouseEvent, row: RowData) => void;
|
|
23
|
+
row_title?: (row: RowData) => string | null | undefined;
|
|
22
24
|
column_order?: string[];
|
|
23
25
|
export_data?: ExportData;
|
|
24
26
|
show_column_toggle?: boolean;
|
|
25
27
|
search?: Search;
|
|
28
|
+
search_query?: string;
|
|
26
29
|
show_row_select?: boolean;
|
|
27
30
|
pagination?: Pagination;
|
|
31
|
+
virtual?: VirtualScroll;
|
|
32
|
+
on_visible_range?: (range: {
|
|
33
|
+
start: number;
|
|
34
|
+
end: number;
|
|
35
|
+
total: number;
|
|
36
|
+
}) => void;
|
|
37
|
+
controls_target?: HTMLElement | null;
|
|
28
38
|
selected_rows?: RowData[];
|
|
29
39
|
hidden_columns?: string[];
|
|
30
40
|
scroll_style?: string;
|
|
@@ -44,6 +54,6 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
44
54
|
}]>;
|
|
45
55
|
footer?: Snippet;
|
|
46
56
|
};
|
|
47
|
-
declare const HeatmapTable: import("svelte").Component<$$ComponentProps, {}, "sort" | "
|
|
57
|
+
declare const HeatmapTable: import("svelte").Component<$$ComponentProps, {}, "sort" | "show_controls" | "data" | "controls_open" | "loading" | "show_heatmap" | "column_order" | "search_query" | "selected_rows" | "hidden_columns" | "heatmap_opacity">;
|
|
48
58
|
type HeatmapTable = ReturnType<typeof HeatmapTable>;
|
|
49
59
|
export default HeatmapTable;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import Icon from '../Icon.svelte'
|
|
3
|
+
import { portal } from '../overlays/portal'
|
|
3
4
|
import { sanitize_html } from '../sanitize'
|
|
4
|
-
import type
|
|
5
|
+
import { type Label, strip_html } from './'
|
|
5
6
|
import { click_outside, tooltip } from 'svelte-multiselect/attachments'
|
|
6
7
|
import { slide } from 'svelte/transition'
|
|
7
8
|
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
}: {
|
|
15
16
|
columns: Label[]
|
|
16
17
|
column_panel_open?: boolean
|
|
17
|
-
//
|
|
18
|
+
// Maximum number of grid columns for toggle layout
|
|
18
19
|
n_columns?: number
|
|
19
20
|
collapsed_sections?: string[]
|
|
20
21
|
// Called after reset with the section name (or undefined for global reset)
|
|
@@ -22,6 +23,24 @@
|
|
|
22
23
|
} = $props()
|
|
23
24
|
|
|
24
25
|
const col_id = (col: Label) => col.key ?? col.label
|
|
26
|
+
const toggle_menu_id = $props.id()
|
|
27
|
+
const dropdown_selector = `[data-toggle-menu-id="${toggle_menu_id}"]`
|
|
28
|
+
const COLUMN_FILTER_THRESHOLD = 20
|
|
29
|
+
const DEFAULT_MAX_MENU_COLUMNS = 3
|
|
30
|
+
const PREFERRED_MAX_MENU_ROWS = 10
|
|
31
|
+
let column_filter = $state(``)
|
|
32
|
+
let show_column_filter = $derived(columns.length > COLUMN_FILTER_THRESHOLD)
|
|
33
|
+
let normalized_column_filter = $derived(
|
|
34
|
+
show_column_filter ? column_filter.trim().toLowerCase() : ``,
|
|
35
|
+
)
|
|
36
|
+
const column_matches_filter = (col: Label): boolean =>
|
|
37
|
+
!normalized_column_filter ||
|
|
38
|
+
[col.key, strip_html(col.label), col.description, col.group]
|
|
39
|
+
.filter(Boolean)
|
|
40
|
+
.join(` `)
|
|
41
|
+
.toLowerCase()
|
|
42
|
+
.includes(normalized_column_filter)
|
|
43
|
+
let filtered_columns = $derived(columns.filter(column_matches_filter))
|
|
25
44
|
|
|
26
45
|
// Snapshot default visibility when column set changes (new dataset).
|
|
27
46
|
// Compare by keys and visibility defaults. Internal updates opt out below.
|
|
@@ -96,6 +115,14 @@
|
|
|
96
115
|
if (ungrouped.length > 0) result.push({ name: ``, items: ungrouped })
|
|
97
116
|
return result
|
|
98
117
|
})
|
|
118
|
+
let filtered_sections = $derived(
|
|
119
|
+
sections
|
|
120
|
+
.map((section) => ({
|
|
121
|
+
...section,
|
|
122
|
+
items: section.items.filter(column_matches_filter),
|
|
123
|
+
}))
|
|
124
|
+
.filter((section) => section.items.length > 0),
|
|
125
|
+
)
|
|
99
126
|
|
|
100
127
|
// Check if any column defines a group (to decide whether to show sections)
|
|
101
128
|
let has_sections = $derived(columns.some((col) => col.group))
|
|
@@ -113,35 +140,56 @@
|
|
|
113
140
|
columns = [...columns] // trigger reactivity on parent binding
|
|
114
141
|
}
|
|
115
142
|
|
|
116
|
-
//
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
:
|
|
121
|
-
|
|
143
|
+
// Prefer two tall columns, adding more only when the item count would make them unwieldy.
|
|
144
|
+
// n_columns caps large menus rather than forcing sparse menus to fill every column.
|
|
145
|
+
const grid_column_count = (item_count: number): number => {
|
|
146
|
+
const preferred_column_count =
|
|
147
|
+
item_count <= 1 ? 1 : Math.max(2, Math.ceil(item_count / PREFERRED_MAX_MENU_ROWS))
|
|
148
|
+
return Math.min(Math.max(1, n_columns ?? DEFAULT_MAX_MENU_COLUMNS), preferred_column_count)
|
|
149
|
+
}
|
|
150
|
+
const grid_template = (item_count: number): string =>
|
|
151
|
+
`repeat(${grid_column_count(item_count)}, max-content)`
|
|
122
152
|
|
|
123
|
-
//
|
|
124
|
-
|
|
153
|
+
// Portal the dropdown to <body> so ancestor overflow/stacking contexts cannot clip it.
|
|
154
|
+
const dropdown_target = typeof document === `undefined` ? undefined : document.body
|
|
155
|
+
let details_el = $state<HTMLElement>()
|
|
156
|
+
let dropdown_el = $state<HTMLElement>()
|
|
157
|
+
const position_dropdown = (): void => {
|
|
158
|
+
const trigger = details_el?.querySelector(`summary`)
|
|
159
|
+
if (!column_panel_open || !trigger || !dropdown_el) return
|
|
160
|
+
const trigger_rect = trigger.getBoundingClientRect()
|
|
161
|
+
const dropdown_rect = dropdown_el.getBoundingClientRect()
|
|
162
|
+
const viewport_padding = 8
|
|
163
|
+
const gap = 4
|
|
164
|
+
const max_left = Math.max(
|
|
165
|
+
viewport_padding,
|
|
166
|
+
globalThis.innerWidth - dropdown_rect.width - viewport_padding,
|
|
167
|
+
)
|
|
168
|
+
const left = Math.min(
|
|
169
|
+
Math.max(viewport_padding, trigger_rect.right - dropdown_rect.width),
|
|
170
|
+
max_left,
|
|
171
|
+
)
|
|
172
|
+
const below = trigger_rect.bottom + gap
|
|
173
|
+
const top =
|
|
174
|
+
below + dropdown_rect.height <= globalThis.innerHeight - viewport_padding
|
|
175
|
+
? below
|
|
176
|
+
: Math.max(viewport_padding, trigger_rect.top - dropdown_rect.height - gap)
|
|
177
|
+
Object.assign(dropdown_el.style, {
|
|
178
|
+
left: `${left}px`,
|
|
179
|
+
right: `auto`,
|
|
180
|
+
top: `${top}px`,
|
|
181
|
+
visibility: `visible`,
|
|
182
|
+
})
|
|
183
|
+
}
|
|
125
184
|
$effect(() => {
|
|
126
|
-
if (!column_panel_open || !details_el) return
|
|
185
|
+
if (!column_panel_open || !details_el || !dropdown_el) return
|
|
127
186
|
// Re-run when section state changes while open
|
|
128
187
|
void n_columns
|
|
129
188
|
void collapsed_sections
|
|
130
|
-
void
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
)
|
|
134
|
-
if (!dropdown) return
|
|
135
|
-
// Reset to left-aligned
|
|
136
|
-
dropdown.style.left = `0`
|
|
137
|
-
dropdown.style.right = `auto`
|
|
138
|
-
requestAnimationFrame(() => {
|
|
139
|
-
const rect = dropdown.getBoundingClientRect()
|
|
140
|
-
if (rect.right > window.innerWidth) {
|
|
141
|
-
dropdown.style.left = `auto`
|
|
142
|
-
dropdown.style.right = `0`
|
|
143
|
-
}
|
|
144
|
-
})
|
|
189
|
+
void filtered_columns
|
|
190
|
+
void filtered_sections
|
|
191
|
+
const frame = requestAnimationFrame(position_dropdown)
|
|
192
|
+
return () => cancelAnimationFrame(frame)
|
|
145
193
|
})
|
|
146
194
|
</script>
|
|
147
195
|
|
|
@@ -173,10 +221,19 @@
|
|
|
173
221
|
<details
|
|
174
222
|
class="column-toggles"
|
|
175
223
|
bind:this={details_el}
|
|
176
|
-
|
|
177
|
-
{@attach click_outside({
|
|
224
|
+
open={column_panel_open}
|
|
225
|
+
{@attach click_outside({
|
|
226
|
+
callback: () => (column_panel_open = false),
|
|
227
|
+
exclude: [dropdown_selector],
|
|
228
|
+
})}
|
|
178
229
|
>
|
|
179
|
-
<summary
|
|
230
|
+
<summary
|
|
231
|
+
aria-expanded={column_panel_open}
|
|
232
|
+
onclick={(event) => {
|
|
233
|
+
event.preventDefault()
|
|
234
|
+
column_panel_open = !column_panel_open
|
|
235
|
+
}}
|
|
236
|
+
>
|
|
180
237
|
Columns <Icon icon="Columns" />
|
|
181
238
|
{#if has_any_changes}
|
|
182
239
|
<button
|
|
@@ -195,11 +252,32 @@
|
|
|
195
252
|
{/if}
|
|
196
253
|
</summary>
|
|
197
254
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
255
|
+
<div
|
|
256
|
+
bind:this={dropdown_el}
|
|
257
|
+
class={has_sections ? `sections-container` : `column-menu`}
|
|
258
|
+
data-toggle-menu-id={toggle_menu_id}
|
|
259
|
+
hidden={!column_panel_open}
|
|
260
|
+
role="group"
|
|
261
|
+
style:grid-template-columns={has_sections
|
|
262
|
+
? undefined
|
|
263
|
+
: grid_template(filtered_columns.length)}
|
|
264
|
+
{@attach portal(dropdown_target)}
|
|
265
|
+
>
|
|
266
|
+
{#if show_column_filter}
|
|
267
|
+
<input
|
|
268
|
+
aria-label="Filter columns"
|
|
269
|
+
bind:value={column_filter}
|
|
270
|
+
class="column-filter"
|
|
271
|
+
placeholder="Filter columns…"
|
|
272
|
+
type="search"
|
|
273
|
+
/>
|
|
274
|
+
{/if}
|
|
275
|
+
{#if has_sections}
|
|
276
|
+
{#each filtered_sections as section (section.name)}
|
|
277
|
+
{@const is_collapsed =
|
|
278
|
+
!normalized_column_filter &&
|
|
279
|
+
section.name !== `` &&
|
|
280
|
+
collapsed_sections.includes(section.name)}
|
|
203
281
|
<div class="section">
|
|
204
282
|
{#if section.name}
|
|
205
283
|
<div class="section-header-row">
|
|
@@ -228,7 +306,7 @@
|
|
|
228
306
|
{#if !is_collapsed}
|
|
229
307
|
<div
|
|
230
308
|
class="section-items"
|
|
231
|
-
style:grid-template-columns={grid_template}
|
|
309
|
+
style:grid-template-columns={grid_template(section.items.length)}
|
|
232
310
|
transition:slide={{ duration: 200 }}
|
|
233
311
|
>
|
|
234
312
|
{#each section.items as col, idx (col.key ?? col.label ?? idx)}
|
|
@@ -238,14 +316,15 @@
|
|
|
238
316
|
{/if}
|
|
239
317
|
</div>
|
|
240
318
|
{/each}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
<div class="column-menu" role="group" style:grid-template-columns={grid_template}>
|
|
244
|
-
{#each columns as col, idx (col.key ?? col.label ?? idx)}
|
|
319
|
+
{:else}
|
|
320
|
+
{#each filtered_columns as col, idx (col.key ?? col.label ?? idx)}
|
|
245
321
|
{@render toggle_item(col)}
|
|
246
322
|
{/each}
|
|
247
|
-
|
|
248
|
-
|
|
323
|
+
{/if}
|
|
324
|
+
{#if filtered_columns.length === 0}
|
|
325
|
+
<span class="no-matching-columns">No matching columns</span>
|
|
326
|
+
{/if}
|
|
327
|
+
</div>
|
|
249
328
|
</details>
|
|
250
329
|
|
|
251
330
|
<style>
|
|
@@ -272,9 +351,12 @@
|
|
|
272
351
|
.column-menu,
|
|
273
352
|
.sections-container {
|
|
274
353
|
font-size: var(--tgl-font-size, 1.1em);
|
|
275
|
-
position:
|
|
354
|
+
position: fixed;
|
|
276
355
|
left: 0;
|
|
277
|
-
top:
|
|
356
|
+
top: 0;
|
|
357
|
+
visibility: hidden;
|
|
358
|
+
box-sizing: border-box;
|
|
359
|
+
width: max-content;
|
|
278
360
|
background: var(--tgl-dropdown-bg, var(--page-bg));
|
|
279
361
|
border: 1px solid
|
|
280
362
|
var(--tgl-dropdown-border, color-mix(in srgb, currentColor 10%, transparent));
|
|
@@ -284,13 +366,18 @@
|
|
|
284
366
|
0 4px 12px color-mix(in srgb, currentColor 8%, transparent)
|
|
285
367
|
);
|
|
286
368
|
min-width: 150px;
|
|
369
|
+
max-width: calc(100vw - 16px);
|
|
287
370
|
max-height: var(--tgl-dropdown-max-height, min(70vh, 600px));
|
|
288
|
-
overflow
|
|
289
|
-
z-index:
|
|
371
|
+
overflow: auto;
|
|
372
|
+
z-index: var(--tgl-dropdown-z-index, 10000);
|
|
373
|
+
}
|
|
374
|
+
.column-menu,
|
|
375
|
+
.section-items {
|
|
376
|
+
display: grid;
|
|
377
|
+
column-gap: var(--tgl-column-gap, 8px);
|
|
290
378
|
}
|
|
291
379
|
.column-menu {
|
|
292
380
|
padding: 3pt 5pt;
|
|
293
|
-
display: grid;
|
|
294
381
|
}
|
|
295
382
|
.sections-container {
|
|
296
383
|
padding: 6pt 8pt;
|
|
@@ -298,6 +385,40 @@
|
|
|
298
385
|
flex-direction: column;
|
|
299
386
|
gap: 8px;
|
|
300
387
|
}
|
|
388
|
+
.column-menu[hidden],
|
|
389
|
+
.sections-container[hidden] {
|
|
390
|
+
display: none;
|
|
391
|
+
}
|
|
392
|
+
.column-filter {
|
|
393
|
+
position: sticky;
|
|
394
|
+
z-index: 2;
|
|
395
|
+
top: 0;
|
|
396
|
+
grid-column: 1 / -1;
|
|
397
|
+
box-sizing: border-box;
|
|
398
|
+
width: 100%;
|
|
399
|
+
height: 1.35rem;
|
|
400
|
+
min-height: 0;
|
|
401
|
+
margin: 0 0 4px;
|
|
402
|
+
padding: 0 0.35rem;
|
|
403
|
+
border: 1px solid
|
|
404
|
+
var(--tgl-dropdown-border, color-mix(in srgb, currentColor 18%, transparent));
|
|
405
|
+
border-radius: var(--tgl-border-radius, 4pt);
|
|
406
|
+
outline: none;
|
|
407
|
+
background: var(--tgl-dropdown-bg, var(--page-bg));
|
|
408
|
+
color: inherit;
|
|
409
|
+
font: inherit;
|
|
410
|
+
font-size: 0.72rem;
|
|
411
|
+
line-height: 1.2;
|
|
412
|
+
&:focus {
|
|
413
|
+
border-color: var(--active-color, #6ea8ff);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
.no-matching-columns {
|
|
417
|
+
grid-column: 1 / -1;
|
|
418
|
+
padding: 4px;
|
|
419
|
+
color: color-mix(in srgb, currentColor 65%, transparent);
|
|
420
|
+
font-size: 0.9em;
|
|
421
|
+
}
|
|
301
422
|
.reset-btn {
|
|
302
423
|
display: flex;
|
|
303
424
|
align-items: center;
|
|
@@ -325,10 +446,7 @@
|
|
|
325
446
|
margin-bottom: 4pt;
|
|
326
447
|
padding: 2pt 4pt;
|
|
327
448
|
border-radius: var(--tgl-border-radius, 3pt);
|
|
328
|
-
background: var(
|
|
329
|
-
--tgl-section-header-bg,
|
|
330
|
-
color-mix(in srgb, currentColor 5%, transparent)
|
|
331
|
-
);
|
|
449
|
+
background: var(--tgl-section-header-bg, color-mix(in srgb, currentColor 5%, transparent));
|
|
332
450
|
&:hover {
|
|
333
451
|
background: var(
|
|
334
452
|
--tgl-section-header-hover-bg,
|
|
@@ -355,9 +473,6 @@
|
|
|
355
473
|
width: 1em;
|
|
356
474
|
flex-shrink: 0;
|
|
357
475
|
}
|
|
358
|
-
.section-items {
|
|
359
|
-
display: grid;
|
|
360
|
-
}
|
|
361
476
|
.toggle-label {
|
|
362
477
|
display: inline-block;
|
|
363
478
|
margin: 1px 2px;
|
package/dist/table/index.d.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import * as d3sc from 'd3-scale-chromatic';
|
|
1
|
+
import type * as d3sc from 'd3-scale-chromatic';
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
export { default as HeatmapTable } from './HeatmapTable.svelte';
|
|
4
4
|
export { default as ToggleMenu } from './ToggleMenu.svelte';
|
|
5
|
-
export type CellVal = string | number | boolean | undefined | null | Record<string, unknown> | Record<string, string | number | null | undefined | boolean>[];
|
|
5
|
+
export type CellVal = string | number | boolean | Date | undefined | null | Record<string, unknown> | Record<string, string | number | null | undefined | boolean>[];
|
|
6
6
|
export type RowData = {
|
|
7
7
|
style?: string;
|
|
8
8
|
class?: string;
|
|
9
9
|
[key: string]: CellVal;
|
|
10
10
|
};
|
|
11
|
+
export type DateTimeFormatMode = `date` | `time` | `datetime` | `iso` | `relative`;
|
|
11
12
|
export type Label = {
|
|
12
13
|
label: string;
|
|
13
14
|
key?: string;
|
|
14
15
|
group?: string;
|
|
15
16
|
description?: string;
|
|
16
17
|
format?: string;
|
|
18
|
+
format_type?: `datetime`;
|
|
19
|
+
datetime_format?: DateTimeFormatMode;
|
|
17
20
|
better?: `higher` | `lower`;
|
|
18
21
|
color_scale?: keyof typeof d3sc | null;
|
|
19
22
|
scale_type?: `linear` | `log`;
|
|
@@ -51,10 +54,17 @@ export type InitialSort = string | {
|
|
|
51
54
|
export type Pagination = boolean | {
|
|
52
55
|
page_size?: number;
|
|
53
56
|
page_sizes?: number[];
|
|
57
|
+
on_page_size_change?: (page_size: number) => void;
|
|
58
|
+
};
|
|
59
|
+
export type VirtualScroll = boolean | {
|
|
60
|
+
overscan?: number;
|
|
61
|
+
min_window?: number;
|
|
54
62
|
};
|
|
55
63
|
export type Search = boolean | {
|
|
56
64
|
placeholder?: string;
|
|
57
65
|
expanded?: boolean;
|
|
66
|
+
keys?: string[];
|
|
67
|
+
fuzzy?: boolean;
|
|
58
68
|
};
|
|
59
69
|
export type ExportData = boolean | {
|
|
60
70
|
formats?: (`csv` | `json`)[];
|
|
@@ -62,11 +72,16 @@ export type ExportData = boolean | {
|
|
|
62
72
|
};
|
|
63
73
|
export type OnSortCallback = (column: string, dir: `asc` | `desc`) => Promise<RowData[]>;
|
|
64
74
|
export declare const strip_html: (str: string) => string;
|
|
75
|
+
export type CellColor = {
|
|
76
|
+
bg: string | null;
|
|
77
|
+
text: string | null;
|
|
78
|
+
};
|
|
79
|
+
export declare function make_cell_color_scale(all_values: CellVal[], // all values in the column
|
|
80
|
+
better: `higher` | `lower` | undefined, // sort direction
|
|
81
|
+
color_scale?: keyof typeof d3sc | null, // color scale name
|
|
82
|
+
scale_type?: `linear` | `log`): (val: number | null | undefined) => CellColor;
|
|
65
83
|
export declare function calc_cell_color(val: number | null | undefined, // cell value
|
|
66
84
|
all_values: CellVal[], // all values in the column
|
|
67
85
|
better: `higher` | `lower` | undefined, // sort direction
|
|
68
86
|
color_scale?: keyof typeof d3sc | null, // color scale name
|
|
69
|
-
scale_type?: `linear` | `log`):
|
|
70
|
-
bg: string | null;
|
|
71
|
-
text: string | null;
|
|
72
|
-
};
|
|
87
|
+
scale_type?: `linear` | `log`): CellColor;
|
package/dist/table/index.js
CHANGED
|
@@ -1,38 +1,51 @@
|
|
|
1
|
-
import { pick_contrast_color } from '../colors';
|
|
1
|
+
import { get_d3_interpolator, pick_contrast_color } from '../colors';
|
|
2
2
|
import { max, min } from 'd3-array';
|
|
3
3
|
import { scaleLog, scaleSequential } from 'd3-scale';
|
|
4
|
-
import * as d3sc from 'd3-scale-chromatic';
|
|
5
4
|
export { default as HeatmapTable } from './HeatmapTable.svelte';
|
|
6
5
|
export { default as ToggleMenu } from './ToggleMenu.svelte';
|
|
7
6
|
// Strip HTML tags from a string (for search, export, etc.)
|
|
8
7
|
export const strip_html = (str) => str.replaceAll(/<[^>]*>/g, ``);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const NULL_CELL_COLOR = { bg: null, text: null };
|
|
9
|
+
// Build a memoized value→color mapper for one column. The O(column-length)
|
|
10
|
+
// work (numeric filter + min/max) and d3 scale construction happen ONCE here;
|
|
11
|
+
// the returned function is O(1) per cell. HeatmapTable derives one mapper per
|
|
12
|
+
// colored column instead of rescanning the full column for every cell render.
|
|
13
|
+
export function make_cell_color_scale(all_values, // all values in the column
|
|
12
14
|
better, // sort direction
|
|
13
15
|
color_scale = `interpolateViridis`, // color scale name
|
|
14
16
|
scale_type = `linear`) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return { bg: null, text: null };
|
|
18
|
-
}
|
|
19
|
-
// Log scale cannot handle non-positive values, return null colors
|
|
20
|
-
if (scale_type === `log` && val <= 0) {
|
|
21
|
-
return { bg: null, text: null };
|
|
22
|
-
}
|
|
17
|
+
if (color_scale === null)
|
|
18
|
+
return () => NULL_CELL_COLOR;
|
|
23
19
|
const numeric_vals = all_values.filter((v) => typeof v === `number` && !Number.isNaN(v) && (scale_type === `log` ? v > 0 : true));
|
|
24
20
|
if (numeric_vals.length === 0)
|
|
25
|
-
return
|
|
21
|
+
return () => NULL_CELL_COLOR;
|
|
26
22
|
const range = [min(numeric_vals) ?? 0, max(numeric_vals) ?? 1];
|
|
27
23
|
// Reverse the range if lower values are better
|
|
28
24
|
if (better === `lower`)
|
|
29
25
|
range.reverse();
|
|
30
|
-
|
|
31
|
-
const scale_fn = d3sc[color_scale];
|
|
32
|
-
const interpolator = (typeof scale_fn === `function` ? scale_fn : d3sc.interpolateViridis);
|
|
26
|
+
const interpolator = get_d3_interpolator(color_scale);
|
|
33
27
|
// Use log scale for positive values, otherwise linear/sequential scale
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return
|
|
28
|
+
const use_log = scale_type === `log` && range[0] > 0 && range[1] > 0;
|
|
29
|
+
const log_scale = use_log ? scaleLog().domain(range).range([0, 1]).clamp(true) : null;
|
|
30
|
+
const seq_scale = scaleSequential().domain(range).interpolator(interpolator);
|
|
31
|
+
return (val) => {
|
|
32
|
+
// Skip color calculation for null/undefined/NaN values
|
|
33
|
+
if (val == null || Number.isNaN(val))
|
|
34
|
+
return NULL_CELL_COLOR;
|
|
35
|
+
// Log scale cannot handle non-positive values, return null colors
|
|
36
|
+
if (scale_type === `log` && val <= 0)
|
|
37
|
+
return NULL_CELL_COLOR;
|
|
38
|
+
const bg = log_scale ? interpolator(log_scale(val)) : seq_scale(val);
|
|
39
|
+
return { bg, text: pick_contrast_color({ bg_color: bg }) };
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Calculate table cell background color based on its value and column config.
|
|
43
|
+
// One-shot convenience wrapper around make_cell_color_scale — prefer the
|
|
44
|
+
// factory when coloring many cells of the same column.
|
|
45
|
+
export function calc_cell_color(val, // cell value
|
|
46
|
+
all_values, // all values in the column
|
|
47
|
+
better, // sort direction
|
|
48
|
+
color_scale = `interpolateViridis`, // color scale name
|
|
49
|
+
scale_type = `linear`) {
|
|
50
|
+
return make_cell_color_scale(all_values, better, color_scale, scale_type)(val);
|
|
38
51
|
}
|
|
@@ -4,14 +4,17 @@
|
|
|
4
4
|
import type { ThemeMode } from './index'
|
|
5
5
|
import { apply_theme_to_dom, save_theme_preference, THEME_OPTIONS } from './index'
|
|
6
6
|
|
|
7
|
-
let {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
let {
|
|
8
|
+
theme_mode = $bindable(theme_state.mode),
|
|
9
|
+
onchange = () => {},
|
|
10
|
+
...rest
|
|
11
|
+
}: Omit<HTMLAttributes<HTMLSelectElement>, `onchange`> & {
|
|
12
|
+
theme_mode?: ThemeMode // Current theme mode (now bindable to global state)
|
|
13
|
+
onchange?: (mode: ThemeMode) => void // Callback when theme changes
|
|
14
|
+
} = $props()
|
|
13
15
|
|
|
14
|
-
$effect(() => {
|
|
16
|
+
$effect(() => {
|
|
17
|
+
// Sync and save to local storage when theme changes
|
|
15
18
|
const prev = theme_state.mode
|
|
16
19
|
if (prev === theme_mode) return
|
|
17
20
|
theme_state.mode = theme_mode
|
|
@@ -21,7 +24,12 @@
|
|
|
21
24
|
})
|
|
22
25
|
</script>
|
|
23
26
|
|
|
24
|
-
<select
|
|
27
|
+
<select
|
|
28
|
+
aria-label="Color theme"
|
|
29
|
+
bind:value={theme_mode}
|
|
30
|
+
{...rest}
|
|
31
|
+
class={[`theme-control`, rest.class]}
|
|
32
|
+
>
|
|
25
33
|
{#each THEME_OPTIONS as { label, icon, value } (value)}
|
|
26
34
|
<option {value}>{icon} {label}</option>
|
|
27
35
|
{/each}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ThemeType } from './';
|
|
2
|
+
import './themes.mjs';
|
|
3
|
+
declare global {
|
|
4
|
+
var jupyterlab: {
|
|
5
|
+
application?: {
|
|
6
|
+
shell?: {
|
|
7
|
+
dataset?: {
|
|
8
|
+
theme?: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
} | undefined;
|
|
13
|
+
}
|
|
14
|
+
type ThemeCallback = (theme_type: ThemeType) => void;
|
|
15
|
+
export declare function detect_parent_theme(target_element?: HTMLElement): ThemeType;
|
|
16
|
+
export declare function watch_theme(target_element: HTMLElement, callback: ThemeCallback): () => void;
|
|
17
|
+
export declare function get_theme_css(theme_type: ThemeType, is_shadow_dom?: boolean): string;
|
|
18
|
+
export {};
|