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
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
bz_color = `#888888`,
|
|
58
58
|
bz_opacity = 0.1,
|
|
59
59
|
bz_edge_color = `#333333`,
|
|
60
|
-
bz_edge_width = 0.
|
|
60
|
+
bz_edge_width = 0.002,
|
|
61
61
|
show_vectors = true,
|
|
62
62
|
tile_bz = false,
|
|
63
63
|
// Clipping plane
|
|
@@ -153,8 +153,8 @@
|
|
|
153
153
|
|
|
154
154
|
// Filter surfaces based on selected bands
|
|
155
155
|
let visible_surfaces = $derived(
|
|
156
|
-
fermi_data?.isosurfaces.filter(
|
|
157
|
-
selected_bands === undefined || selected_bands.includes(surface.band_index)
|
|
156
|
+
fermi_data?.isosurfaces.filter(
|
|
157
|
+
(surface) => selected_bands === undefined || selected_bands.includes(surface.band_index),
|
|
158
158
|
) ?? [],
|
|
159
159
|
)
|
|
160
160
|
|
|
@@ -172,21 +172,11 @@
|
|
|
172
172
|
|
|
173
173
|
// Map from surface to its render order based on size (inner surfaces first)
|
|
174
174
|
let surface_render_orders = $derived.by((): Map<Isosurface, number> => {
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
surface,
|
|
181
|
-
radius: compute_surface_radius(surface),
|
|
182
|
-
}))
|
|
183
|
-
surfaces_with_radius.sort((a, b) => a.radius - b.radius)
|
|
184
|
-
|
|
185
|
-
// Assign render order: smaller radius (inner) = lower order = rendered first
|
|
186
|
-
for (let idx = 0; idx < surfaces_with_radius.length; idx++) {
|
|
187
|
-
order_map.set(surfaces_with_radius[idx].surface, idx)
|
|
188
|
-
}
|
|
189
|
-
return order_map
|
|
175
|
+
const by_radius = visible_surfaces
|
|
176
|
+
.map((surface) => ({ surface, radius: compute_surface_radius(surface) }))
|
|
177
|
+
.toSorted((surf_a, surf_b) => surf_a.radius - surf_b.radius)
|
|
178
|
+
// Smaller radius (inner) = lower order = rendered first
|
|
179
|
+
return new SvelteMap(by_radius.map(({ surface }, idx) => [surface, idx]))
|
|
190
180
|
})
|
|
191
181
|
|
|
192
182
|
// Compute property range for color scaling
|
|
@@ -208,9 +198,6 @@
|
|
|
208
198
|
|
|
209
199
|
// Get color for a surface/vertex
|
|
210
200
|
function get_surface_color(surface: Isosurface, vertex_idx?: number): string {
|
|
211
|
-
if (color_property === `band`) {
|
|
212
|
-
return constants.BAND_COLORS[surface.band_index % constants.BAND_COLORS.length]
|
|
213
|
-
}
|
|
214
201
|
if (
|
|
215
202
|
(color_property === `velocity` || color_property === `custom`) &&
|
|
216
203
|
surface.properties &&
|
|
@@ -218,9 +205,7 @@
|
|
|
218
205
|
) {
|
|
219
206
|
const prop = surface.properties[vertex_idx]
|
|
220
207
|
const [min_val, max_val] = property_range
|
|
221
|
-
const normalized = max_val > min_val
|
|
222
|
-
? (prop - min_val) / (max_val - min_val)
|
|
223
|
-
: 0.5
|
|
208
|
+
const normalized = max_val > min_val ? (prop - min_val) / (max_val - min_val) : 0.5
|
|
224
209
|
return get_d3_interpolator(color_scale as D3InterpolateName)(normalized)
|
|
225
210
|
}
|
|
226
211
|
// Spin coloring
|
|
@@ -240,8 +225,7 @@
|
|
|
240
225
|
const normals: number[] = []
|
|
241
226
|
const colors: number[] = []
|
|
242
227
|
|
|
243
|
-
const use_vertex_colors = color_property === `velocity` ||
|
|
244
|
-
color_property === `custom`
|
|
228
|
+
const use_vertex_colors = color_property === `velocity` || color_property === `custom`
|
|
245
229
|
|
|
246
230
|
const n_vertices = surface.vertices.length
|
|
247
231
|
|
|
@@ -257,9 +241,12 @@
|
|
|
257
241
|
|
|
258
242
|
// Validate face indices are within bounds (protects against malformed JSON files)
|
|
259
243
|
if (
|
|
260
|
-
idx0 < 0 ||
|
|
261
|
-
|
|
262
|
-
|
|
244
|
+
idx0 < 0 ||
|
|
245
|
+
idx0 >= n_vertices ||
|
|
246
|
+
idx1 < 0 ||
|
|
247
|
+
idx1 >= n_vertices ||
|
|
248
|
+
idx2 < 0 ||
|
|
249
|
+
idx2 >= n_vertices
|
|
263
250
|
) {
|
|
264
251
|
continue
|
|
265
252
|
}
|
|
@@ -297,10 +284,7 @@
|
|
|
297
284
|
}
|
|
298
285
|
|
|
299
286
|
const geometry = new BufferGeometry()
|
|
300
|
-
geometry.setAttribute(
|
|
301
|
-
`position`,
|
|
302
|
-
new BufferAttribute(new Float32Array(positions), 3),
|
|
303
|
-
)
|
|
287
|
+
geometry.setAttribute(`position`, new BufferAttribute(new Float32Array(positions), 3))
|
|
304
288
|
geometry.setAttribute(`normal`, new BufferAttribute(new Float32Array(normals), 3))
|
|
305
289
|
|
|
306
290
|
if (use_vertex_colors) {
|
|
@@ -358,18 +342,20 @@
|
|
|
358
342
|
camera_position || default_camera_position(scene_size),
|
|
359
343
|
)
|
|
360
344
|
|
|
361
|
-
const orbit_controls_props = $derived(
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
345
|
+
const orbit_controls_props = $derived(
|
|
346
|
+
build_orbit_props({
|
|
347
|
+
camera_projection,
|
|
348
|
+
target: rotation_target,
|
|
349
|
+
rotate_speed,
|
|
350
|
+
zoom_speed,
|
|
351
|
+
zoom_to_cursor,
|
|
352
|
+
pan_speed,
|
|
353
|
+
max_zoom,
|
|
354
|
+
min_zoom,
|
|
355
|
+
auto_rotate,
|
|
356
|
+
rotation_damping,
|
|
357
|
+
}),
|
|
358
|
+
)
|
|
373
359
|
|
|
374
360
|
// Create BZ geometry
|
|
375
361
|
const bz_geometry = $derived(
|
|
@@ -423,11 +409,7 @@
|
|
|
423
409
|
let [min_dist, nearest_idx] = [Infinity, 0]
|
|
424
410
|
for (let idx = 0; idx < surface.vertices.length; idx++) {
|
|
425
411
|
const vertex = surface.vertices[idx]
|
|
426
|
-
const dist = Math.hypot(
|
|
427
|
-
point[0] - vertex[0],
|
|
428
|
-
point[1] - vertex[1],
|
|
429
|
-
point[2] - vertex[2],
|
|
430
|
-
)
|
|
412
|
+
const dist = Math.hypot(point[0] - vertex[0], point[1] - vertex[1], point[2] - vertex[2])
|
|
431
413
|
if (dist < min_dist) {
|
|
432
414
|
min_dist = dist
|
|
433
415
|
nearest_idx = idx
|
|
@@ -459,9 +441,8 @@
|
|
|
459
441
|
const nearest_idx = find_nearest_vertex(surface, local_position)
|
|
460
442
|
const property_value = surface.properties?.[nearest_idx]
|
|
461
443
|
const has_velocities = fermi_data?.metadata?.has_velocities
|
|
462
|
-
const property_name =
|
|
463
|
-
? (has_velocities ? `velocity` : `custom`)
|
|
464
|
-
: undefined
|
|
444
|
+
const property_name =
|
|
445
|
+
property_value != null ? (has_velocities ? `velocity` : `custom`) : undefined
|
|
465
446
|
|
|
466
447
|
const { clientX, clientY } = event.nativeEvent
|
|
467
448
|
return {
|
|
@@ -533,19 +514,11 @@
|
|
|
533
514
|
|
|
534
515
|
<!-- Reciprocal lattice vectors -->
|
|
535
516
|
{#if show_vectors && fermi_data?.k_lattice}
|
|
536
|
-
<ReciprocalVectors
|
|
537
|
-
k_lattice={fermi_data.k_lattice}
|
|
538
|
-
{vector_scale}
|
|
539
|
-
size={scene_size}
|
|
540
|
-
/>
|
|
517
|
+
<ReciprocalVectors k_lattice={fermi_data.k_lattice} {vector_scale} size={scene_size} />
|
|
541
518
|
{/if}
|
|
542
519
|
|
|
543
520
|
<!-- Fermi surfaces (with optional symmetry tiling) -->
|
|
544
|
-
{#each visible_surfaces as
|
|
545
|
-
surface,
|
|
546
|
-
surface_idx
|
|
547
|
-
(`surface-${surface.band_index}-${surface.spin}-${surface_idx}`)
|
|
548
|
-
}
|
|
521
|
+
{#each visible_surfaces as surface, surface_idx (`surface-${surface.band_index}-${surface.spin}-${surface_idx}`)}
|
|
549
522
|
{@const geo_key = `${surface.band_index}-${surface.spin}-${surface_idx}`}
|
|
550
523
|
{@const geo_data = geometry_cache.get(geo_key)}
|
|
551
524
|
{@const surface_color = get_surface_color(surface)}
|
|
@@ -555,89 +528,44 @@
|
|
|
555
528
|
|
|
556
529
|
{#if geo_data}
|
|
557
530
|
{#each symmetry_ops as sym_matrix, sym_idx (`sym-${sym_idx}`)}
|
|
558
|
-
{#
|
|
531
|
+
{#snippet mesh_pass(order: number, pass: `wireframe` | `front` | `back`)}
|
|
559
532
|
<T.Mesh
|
|
560
533
|
geometry={geo_data.geometry}
|
|
561
534
|
matrix={sym_matrix}
|
|
562
535
|
matrixAutoUpdate={false}
|
|
563
|
-
{
|
|
536
|
+
renderOrder={order}
|
|
564
537
|
onpointermove={(event: ThreltePointerEvent) =>
|
|
565
|
-
|
|
538
|
+
handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
|
|
566
539
|
onpointerleave={clear_hover}
|
|
567
540
|
>
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
541
|
+
{#if pass === `wireframe`}
|
|
542
|
+
<T.MeshBasicMaterial
|
|
543
|
+
color={surface_color}
|
|
544
|
+
wireframe
|
|
545
|
+
transparent={surface_opacity < 1}
|
|
546
|
+
opacity={surface_opacity}
|
|
547
|
+
depthWrite={true}
|
|
548
|
+
depthTest={true}
|
|
549
|
+
/>
|
|
550
|
+
{:else}
|
|
551
|
+
<T.MeshStandardMaterial
|
|
552
|
+
{...get_material_props(surface_color, use_vertex_colors, surface_idx, pass)}
|
|
553
|
+
metalness={0.1}
|
|
554
|
+
roughness={0.6}
|
|
555
|
+
flatShading={false}
|
|
556
|
+
/>
|
|
557
|
+
{/if}
|
|
576
558
|
</T.Mesh>
|
|
559
|
+
{/snippet}
|
|
560
|
+
|
|
561
|
+
{#if representation === `wireframe`}
|
|
562
|
+
{@render mesh_pass(renderOrder, `wireframe`)}
|
|
577
563
|
{:else if surface_opacity < 1}
|
|
578
|
-
<!-- Two-pass rendering
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
geometry={geo_data.geometry}
|
|
582
|
-
matrix={sym_matrix}
|
|
583
|
-
matrixAutoUpdate={false}
|
|
584
|
-
renderOrder={renderOrder * 2}
|
|
585
|
-
onpointermove={(event: ThreltePointerEvent) =>
|
|
586
|
-
handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
|
|
587
|
-
onpointerleave={clear_hover}
|
|
588
|
-
>
|
|
589
|
-
<T.MeshStandardMaterial
|
|
590
|
-
{...get_material_props(surface_color, use_vertex_colors, surface_idx, `back`)}
|
|
591
|
-
metalness={0.1}
|
|
592
|
-
roughness={0.6}
|
|
593
|
-
flatShading={false}
|
|
594
|
-
/>
|
|
595
|
-
</T.Mesh>
|
|
596
|
-
<!-- Pass 2: Front faces (rendered second, higher renderOrder) -->
|
|
597
|
-
<T.Mesh
|
|
598
|
-
geometry={geo_data.geometry}
|
|
599
|
-
matrix={sym_matrix}
|
|
600
|
-
matrixAutoUpdate={false}
|
|
601
|
-
renderOrder={renderOrder * 2 + 1}
|
|
602
|
-
onpointermove={(event: ThreltePointerEvent) =>
|
|
603
|
-
handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
|
|
604
|
-
onpointerleave={clear_hover}
|
|
605
|
-
>
|
|
606
|
-
<T.MeshStandardMaterial
|
|
607
|
-
{...get_material_props(
|
|
608
|
-
surface_color,
|
|
609
|
-
use_vertex_colors,
|
|
610
|
-
surface_idx,
|
|
611
|
-
`front`,
|
|
612
|
-
)}
|
|
613
|
-
metalness={0.1}
|
|
614
|
-
roughness={0.6}
|
|
615
|
-
flatShading={false}
|
|
616
|
-
/>
|
|
617
|
-
</T.Mesh>
|
|
564
|
+
<!-- Two-pass transparent rendering: back faces first, front faces on top -->
|
|
565
|
+
{@render mesh_pass(renderOrder * 2, `back`)}
|
|
566
|
+
{@render mesh_pass(renderOrder * 2 + 1, `front`)}
|
|
618
567
|
{:else}
|
|
619
|
-
|
|
620
|
-
<T.Mesh
|
|
621
|
-
geometry={geo_data.geometry}
|
|
622
|
-
matrix={sym_matrix}
|
|
623
|
-
matrixAutoUpdate={false}
|
|
624
|
-
{renderOrder}
|
|
625
|
-
onpointermove={(event: ThreltePointerEvent) =>
|
|
626
|
-
handle_pointer_move(event, surface, surface_color, sym_idx, sym_matrix)}
|
|
627
|
-
onpointerleave={clear_hover}
|
|
628
|
-
>
|
|
629
|
-
<T.MeshStandardMaterial
|
|
630
|
-
{...get_material_props(
|
|
631
|
-
surface_color,
|
|
632
|
-
use_vertex_colors,
|
|
633
|
-
surface_idx,
|
|
634
|
-
`front`,
|
|
635
|
-
)}
|
|
636
|
-
metalness={0.1}
|
|
637
|
-
roughness={0.6}
|
|
638
|
-
flatShading={false}
|
|
639
|
-
/>
|
|
640
|
-
</T.Mesh>
|
|
568
|
+
{@render mesh_pass(renderOrder, `front`)}
|
|
641
569
|
{/if}
|
|
642
570
|
{/each}
|
|
643
571
|
{/if}
|
|
@@ -25,6 +25,6 @@ type $$ComponentProps = SceneControlProps & {
|
|
|
25
25
|
vector_scale?: number;
|
|
26
26
|
hover_data?: FermiHoverData | null;
|
|
27
27
|
};
|
|
28
|
-
declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "
|
|
28
|
+
declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "camera" | "camera_projection" | "camera_position" | "scene" | "surface_opacity" | "bz_data" | "hover_data" | "fermi_data">;
|
|
29
29
|
type FermiSurfaceScene = ReturnType<typeof FermiSurfaceScene>;
|
|
30
30
|
export default FermiSurfaceScene;
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
import { KCoords, TooltipContent } from '../tooltip'
|
|
6
6
|
import type { FermiHoverData, FermiTooltipProp } from './types'
|
|
7
7
|
|
|
8
|
-
let {
|
|
8
|
+
let {
|
|
9
|
+
hover_data,
|
|
10
|
+
tooltip,
|
|
11
|
+
}: {
|
|
9
12
|
hover_data: FermiHoverData
|
|
10
13
|
tooltip?: FermiTooltipProp
|
|
11
14
|
} = $props()
|
|
@@ -27,15 +30,15 @@
|
|
|
27
30
|
|
|
28
31
|
{#if hover_data.property_value != null}
|
|
29
32
|
<div class="property-row">
|
|
30
|
-
{hover_data.property_name || `Property`}: {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
{hover_data.property_name || `Property`}: {format_num(
|
|
34
|
+
hover_data.property_value,
|
|
35
|
+
`.4~`,
|
|
36
|
+
)}
|
|
33
37
|
<span class="nearest-note">(nearest)</span>
|
|
34
38
|
</div>
|
|
35
39
|
{/if}
|
|
36
40
|
|
|
37
|
-
{#if hover_data.is_tiled && hover_data.symmetry_index != null &&
|
|
38
|
-
hover_data.symmetry_index > 0}
|
|
41
|
+
{#if hover_data.is_tiled && hover_data.symmetry_index != null && hover_data.symmetry_index > 0}
|
|
39
42
|
<div class="tiling-info">
|
|
40
43
|
Symmetry copy #{hover_data.symmetry_index + 1}/48
|
|
41
44
|
</div>
|
|
@@ -3,6 +3,8 @@ import * as math from '../math';
|
|
|
3
3
|
import { EPS } from '../math';
|
|
4
4
|
import { CLOSED_CONTOUR_TOLERANCE, IRREDUCIBLE_BZ_MIN_VERTICES, IRREDUCIBLE_BZ_TOLERANCE, SPANNING_THRESHOLD, } from './constants';
|
|
5
5
|
import { marching_cubes } from '../marching-cubes';
|
|
6
|
+
// clamp01 guards float jitter at the cell boundary
|
|
7
|
+
import { clamp01 } from '../utils';
|
|
6
8
|
const safe_mod = (val, dim) => ((val % dim) + dim) % dim;
|
|
7
9
|
// Precompute Catmull-Rom coefficients for a given t value
|
|
8
10
|
// Returns [c0, c1, c2, c3] where result = c0*p0 + c1*p1 + c2*p2 + c3*p3
|
|
@@ -24,18 +26,15 @@ function tricubic_interpolate(grid, fx, fy, fz, px, py, pz) {
|
|
|
24
26
|
const iy = Math.floor(fy);
|
|
25
27
|
const iz = Math.floor(fz);
|
|
26
28
|
// Precompute Catmull-Rom coefficients
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
29
|
+
const cx = catmull_rom_coeffs(fx - ix);
|
|
30
|
+
const cy = catmull_rom_coeffs(fy - iy);
|
|
31
|
+
const cz = catmull_rom_coeffs(fz - iz);
|
|
30
32
|
// Wrapped stencil indices (modulo hoisted out of the inner loop); a zero period
|
|
31
33
|
// (single-point axis) has no neighbours, so collapse the stencil onto index 0
|
|
32
34
|
const stencil = (idx, period) => [idx - 1, idx, idx + 1, idx + 2].map((stencil_idx) => period > 0 ? ((stencil_idx % period) + period) % period : 0);
|
|
33
35
|
const [wx, wy, wz] = [stencil(ix, px), stencil(iy, py), stencil(iz, pz)];
|
|
34
36
|
// Interpolate along z, then y, then x (fully inlined)
|
|
35
37
|
let result = 0;
|
|
36
|
-
const cx = [cx0, cx1, cx2, cx3];
|
|
37
|
-
const cy = [cy0, cy1, cy2, cy3];
|
|
38
|
-
const cz = [cz0, cz1, cz2, cz3];
|
|
39
38
|
for (let xi = 0; xi < 4; xi++) {
|
|
40
39
|
const row = grid[wx[xi]];
|
|
41
40
|
let y_sum = 0;
|
|
@@ -204,7 +203,7 @@ export function compute_surface_area(surface) {
|
|
|
204
203
|
const cy = e1z * e2x - e1x * e2z;
|
|
205
204
|
const cz = e1x * e2y - e1y * e2x;
|
|
206
205
|
// Area is half the magnitude of cross product
|
|
207
|
-
total_area += Math.
|
|
206
|
+
total_area += Math.hypot(cx, cy, cz) * 0.5;
|
|
208
207
|
}
|
|
209
208
|
return total_area;
|
|
210
209
|
}
|
|
@@ -218,8 +217,6 @@ function compute_fermi_velocities(surface, velocity_grid, k_lattice, k_grid, per
|
|
|
218
217
|
const k_inv = math.matrix_inverse_3x3(math.transpose_3x3_matrix(k_lattice));
|
|
219
218
|
// Grid point i sits at frac i/(n−1) (endpoint-inclusive BXSF) or i/n (periodic)
|
|
220
219
|
const [sx, sy, sz] = periodic ? [nx, ny, nz] : [nx - 1, ny - 1, nz - 1];
|
|
221
|
-
// Clamp guards float jitter at the cell boundary
|
|
222
|
-
const clamp01 = (val) => Math.min(Math.max(val, 0), 1);
|
|
223
220
|
for (const vertex of surface.vertices) {
|
|
224
221
|
const frac = math.mat3x3_vec3_multiply(k_inv, vertex); // centered, in [-0.5, 0.5]
|
|
225
222
|
const gx = clamp01(frac[0] + 0.5) * sx;
|
|
@@ -286,36 +283,26 @@ function analyze_surface_topology(surface, k_lattice) {
|
|
|
286
283
|
spans[axis_idx] = surface_size > SPANNING_THRESHOLD * bz_size;
|
|
287
284
|
}
|
|
288
285
|
const n_spanning = spans.filter(Boolean).length;
|
|
289
|
-
|
|
290
|
-
|
|
286
|
+
// 0 spanning = closed 3D pocket; 3 spanning = complex warped network
|
|
287
|
+
if (n_spanning === 0)
|
|
291
288
|
return { dimensionality: `3D`, orientation: null };
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
else if (n_spanning === 2) {
|
|
301
|
-
// 1D noodle-like (tube spanning 2 directions, bounded in 1)
|
|
302
|
-
const axis_idx = spans.indexOf(false);
|
|
303
|
-
const orientation = [0, 0, 0];
|
|
304
|
-
orientation[axis_idx] = 1;
|
|
305
|
-
return { dimensionality: `1D`, orientation };
|
|
306
|
-
}
|
|
307
|
-
// Spans all 3 directions - complex warped network
|
|
308
|
-
return { dimensionality: `quasi-2D`, orientation: null };
|
|
289
|
+
if (n_spanning === 3)
|
|
290
|
+
return { dimensionality: `quasi-2D`, orientation: null };
|
|
291
|
+
// 1 spanning = 2D sheet (oriented along the spanning axis);
|
|
292
|
+
// 2 spanning = 1D noodle-like tube (oriented along the bounded axis)
|
|
293
|
+
const axis_idx = n_spanning === 1 ? spans.indexOf(true) : spans.indexOf(false);
|
|
294
|
+
const orientation = [0, 0, 0];
|
|
295
|
+
orientation[axis_idx] = 1;
|
|
296
|
+
return { dimensionality: n_spanning === 1 ? `2D` : `1D`, orientation };
|
|
309
297
|
}
|
|
310
298
|
// Compute 2D Fermi slice along a specified plane
|
|
311
299
|
export function compute_fermi_slice(fermi_data, options = {}) {
|
|
312
300
|
const { miller_indices = [0, 0, 1], distance = 0 } = options;
|
|
313
|
-
|
|
314
|
-
if (miller_indices[0] === 0 && miller_indices[1] === 0 && miller_indices[2] === 0) {
|
|
301
|
+
if (miller_indices.every((miller_idx) => miller_idx === 0)) {
|
|
315
302
|
throw new Error(`Invalid miller indices [0, 0, 0]: at least one index must be non-zero to define a plane`);
|
|
316
303
|
}
|
|
317
304
|
// Compute plane normal in Cartesian coordinates
|
|
318
|
-
const plane_normal = math.add(math.
|
|
305
|
+
const plane_normal = math.add(math.scale(fermi_data.k_lattice[0], miller_indices[0]), math.scale(fermi_data.k_lattice[1], miller_indices[1]), math.scale(fermi_data.k_lattice[2], miller_indices[2]));
|
|
319
306
|
const normal_len = Math.hypot(...plane_normal);
|
|
320
307
|
if (normal_len < EPS) {
|
|
321
308
|
throw new Error(`Degenerate plane normal: k_lattice vectors produce a zero-length normal for miller indices [${miller_indices.join(`, `)}]`);
|
|
@@ -324,11 +311,7 @@ export function compute_fermi_slice(fermi_data, options = {}) {
|
|
|
324
311
|
// Compute in-plane basis vectors
|
|
325
312
|
const [in_plane_u, in_plane_v] = math.compute_in_plane_basis(unit_normal);
|
|
326
313
|
// Slice each isosurface
|
|
327
|
-
const isolines =
|
|
328
|
-
for (const surface of fermi_data.isosurfaces) {
|
|
329
|
-
const lines = slice_surface_with_plane(surface, unit_normal, distance, in_plane_u, in_plane_v);
|
|
330
|
-
isolines.push(...lines);
|
|
331
|
-
}
|
|
314
|
+
const isolines = fermi_data.isosurfaces.flatMap((surface) => slice_surface_with_plane(surface, unit_normal, distance, in_plane_u, in_plane_v));
|
|
332
315
|
return {
|
|
333
316
|
isolines,
|
|
334
317
|
plane_normal: unit_normal,
|
|
@@ -340,8 +323,6 @@ export function compute_fermi_slice(fermi_data, options = {}) {
|
|
|
340
323
|
},
|
|
341
324
|
};
|
|
342
325
|
}
|
|
343
|
-
// Helper to create edge key (sorted vertex indices)
|
|
344
|
-
const make_edge_key = (v0_idx, v1_idx) => `${Math.min(v0_idx, v1_idx)},${Math.max(v0_idx, v1_idx)}`;
|
|
345
326
|
// Compute intersection point on an edge
|
|
346
327
|
function compute_edge_intersection(surface, vertex_distances, v0_idx, v1_idx) {
|
|
347
328
|
const d0 = vertex_distances[v0_idx];
|
|
@@ -383,7 +364,7 @@ function slice_surface_with_plane(surface, plane_normal, plane_distance, in_plan
|
|
|
383
364
|
for (let edge_idx = 0; edge_idx < face.length; edge_idx++) {
|
|
384
365
|
const v0_idx = face[edge_idx];
|
|
385
366
|
const v1_idx = face[(edge_idx + 1) % face.length];
|
|
386
|
-
const edge_key =
|
|
367
|
+
const edge_key = `${Math.min(v0_idx, v1_idx)},${Math.max(v0_idx, v1_idx)}`;
|
|
387
368
|
const intersection = compute_edge_intersection(surface, vertex_distances, v0_idx, v1_idx);
|
|
388
369
|
if (intersection) {
|
|
389
370
|
crossing_edges.push({ edge_key, intersection });
|
|
@@ -516,24 +497,10 @@ function slice_surface_with_plane(surface, plane_normal, plane_distance, in_plan
|
|
|
516
497
|
// For cubic Oh symmetry, this is the region where all vertices are in the first octant
|
|
517
498
|
// (x >= 0, y >= 0, z >= 0) with some tolerance. Such data needs tiling to show the full BZ.
|
|
518
499
|
export function detect_irreducible_bz(fermi_data) {
|
|
519
|
-
|
|
500
|
+
const vertex_count = fermi_data.isosurfaces.reduce((sum, surface) => sum + surface.vertices.length, 0);
|
|
501
|
+
// Only consider it irreducible if we have significant data and all vertices are
|
|
502
|
+
// in the positive octant (with small tolerance for numerical error)
|
|
503
|
+
if (vertex_count <= IRREDUCIBLE_BZ_MIN_VERTICES)
|
|
520
504
|
return false;
|
|
521
|
-
|
|
522
|
-
let all_positive = true;
|
|
523
|
-
let vertex_count = 0;
|
|
524
|
-
for (const surface of fermi_data.isosurfaces) {
|
|
525
|
-
for (const vertex of surface.vertices) {
|
|
526
|
-
vertex_count++;
|
|
527
|
-
if (vertex[0] < -IRREDUCIBLE_BZ_TOLERANCE ||
|
|
528
|
-
vertex[1] < -IRREDUCIBLE_BZ_TOLERANCE ||
|
|
529
|
-
vertex[2] < -IRREDUCIBLE_BZ_TOLERANCE) {
|
|
530
|
-
all_positive = false;
|
|
531
|
-
break;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
if (!all_positive)
|
|
535
|
-
break;
|
|
536
|
-
}
|
|
537
|
-
// Only consider it irreducible if we have significant data and all positive
|
|
538
|
-
return all_positive && vertex_count > IRREDUCIBLE_BZ_MIN_VERTICES;
|
|
505
|
+
return fermi_data.isosurfaces.every((surface) => surface.vertices.every((vertex) => vertex.every((coord) => coord >= -IRREDUCIBLE_BZ_TOLERANCE)));
|
|
539
506
|
}
|