@jax-data-science/sci-image-visualizer 0.8.3 → 0.10.0
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/README.md +201 -460
- package/esm2022/index.mjs +34 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +134 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +411 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
- package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +858 -414
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +53 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +144 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-source-scope.mjs +171 -0
- package/esm2022/lib/store/region-store.service.mjs +986 -670
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +123 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +602 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/region-source.worker.js +1067 -0
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +19 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +85 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +231 -54
- package/lib/contracts/viz-config.d.ts +9 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
- package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
- package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +25 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +45 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +57 -0
- package/lib/models/region.d.ts +59 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +283 -200
- package/lib/region-editor/region-metrics.d.ts +34 -0
- package/lib/region-editor/region-persistence.service.d.ts +77 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +158 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +248 -59
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +39 -2
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +65 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-source-scope.d.ts +68 -0
- package/lib/store/region-store.service.d.ts +312 -116
- package/lib/store/visualizer-store.service.d.ts +32 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +55 -84
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +46 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +232 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/assets/slice.svg +23 -0
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript grouping and marker sizing: how many transcripts one marker stands for at the
|
|
3
|
+
* current zoom, how big it is drawn, and which colour each gene-tree cluster takes. Pure, so
|
|
4
|
+
* the budget policy is testable without a viewer.
|
|
5
|
+
*/
|
|
6
|
+
import type { SpatialBounds, SpatialTranscriptTile } from '../contracts/spatial-dataset.contract';
|
|
7
|
+
import { DataRect } from './lod';
|
|
8
|
+
/** Smallest on-screen spacing between groups, in px — below it groups read as noise. */
|
|
9
|
+
export declare const GROUP_MIN_SPACING_PX = 14;
|
|
10
|
+
/**
|
|
11
|
+
* The bin a selection of genes is grouped into at this zoom, in observation units, or null
|
|
12
|
+
* to draw every transcript. Bins follow the all-gene pyramid's ladder (`baseBin` × 2^m) so a
|
|
13
|
+
* gene selection and "all genes" group alike: the finest bin whose markers land at least
|
|
14
|
+
* `spacingPx` apart on screen. Once the finest bin is that wide, transcripts are drawn as
|
|
15
|
+
* themselves.
|
|
16
|
+
*/
|
|
17
|
+
export declare function geneBinSize(pxPerUnit: number, baseBin: number, levels?: number, spacingPx?: number): number | null;
|
|
18
|
+
/** The entries of `t` inside `rect` (observation units). */
|
|
19
|
+
export declare function clipTranscripts(t: SpatialTranscriptTile, rect: DataRect): SpatialTranscriptTile;
|
|
20
|
+
/**
|
|
21
|
+
* Group transcripts into `bin`-wide squares of a grid anchored at the origin (so a pan does
|
|
22
|
+
* not move them), one entry per (group, square): `groupOf(gene slot)` says which group a gene
|
|
23
|
+
* is in — its cluster in the gene tree, or itself. Each entry sits at its transcripts'
|
|
24
|
+
* centroid, weighted by how many each stands for; it takes the gene and the cell holding most
|
|
25
|
+
* of them, each summed over all its transcripts in the entry. `group[i]` is entry i's group.
|
|
26
|
+
*/
|
|
27
|
+
export declare function groupTranscripts(t: SpatialTranscriptTile, bin: number, groupOf?: (geneSlot: number) => number): {
|
|
28
|
+
tile: SpatialTranscriptTile;
|
|
29
|
+
group: Int32Array;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The colour of each gene-tree cluster of a selection, for colouring transcripts by cluster: a
|
|
33
|
+
* cluster named like a group of the cells' grouping takes that group's colour (its cells and its
|
|
34
|
+
* transcripts agree); the others take palette colours in tree order. Clusters are the tree's
|
|
35
|
+
* groups holding a selected gene, then each ungrouped selected gene on its own. Every gene of a
|
|
36
|
+
* cluster gets the same colour — the tree's swatches and the markers use this one map.
|
|
37
|
+
*/
|
|
38
|
+
export declare function clusterColorMap(genes: readonly string[], groups: readonly {
|
|
39
|
+
name: string;
|
|
40
|
+
genes: readonly string[];
|
|
41
|
+
}[], cellColors: ReadonlyMap<string, string>, palette: readonly string[]): Map<string, string>;
|
|
42
|
+
/** The cluster a selected gene is in: its first gene-tree group holding it, else itself. */
|
|
43
|
+
export declare function clusterOfGene(gene: string, groups: readonly {
|
|
44
|
+
name: string;
|
|
45
|
+
genes: readonly string[];
|
|
46
|
+
}[]): string;
|
|
47
|
+
/** Smallest transcript marker, in canvas pixels. */
|
|
48
|
+
export declare const TRANSCRIPT_MIN_PX = 4;
|
|
49
|
+
/** Largest transcript marker, in canvas pixels. */
|
|
50
|
+
export declare const TRANSCRIPT_MAX_PX = 32;
|
|
51
|
+
/**
|
|
52
|
+
* Physical diameter a single transcript is drawn at, in µm — clearly larger than the
|
|
53
|
+
* imaged spot (~0.3 µm) so it stays legible, and small enough that neighbouring
|
|
54
|
+
* molecules inside one cell stay apart.
|
|
55
|
+
*/
|
|
56
|
+
export declare const TRANSCRIPT_PHYSICAL_UM = 1.2;
|
|
57
|
+
/**
|
|
58
|
+
* Marker diameter in canvas pixels for an entry standing for `weight` transcripts.
|
|
59
|
+
*
|
|
60
|
+
* The convention spatial viewers share (deck.gl's `radiusMinPixels`/`radiusMaxPixels`,
|
|
61
|
+
* Xenium Explorer's transcript size): a PHYSICAL size, clamped to a screen-pixel range.
|
|
62
|
+
* Zoomed out, markers sit at the minimum and never vanish; zoomed in, they grow with the
|
|
63
|
+
* tissue instead of shrinking to specks next to cells hundreds of pixels wide. A fixed
|
|
64
|
+
* screen size does the opposite at high zoom, which is what made transcripts disappear
|
|
65
|
+
* at pixel-level zoom.
|
|
66
|
+
*
|
|
67
|
+
* Aggregates grow with the cube root of their count: area ∝ count would let one dense
|
|
68
|
+
* aggregate swallow its neighbours, the cube root keeps a 1000-transcript cluster clearly
|
|
69
|
+
* larger than a 10-transcript one without covering the tile.
|
|
70
|
+
*
|
|
71
|
+
* `pxPerMicron` is omitted for data with no known physical unit; the marker is then
|
|
72
|
+
* screen-sized only.
|
|
73
|
+
*/
|
|
74
|
+
export declare function transcriptMarkerPx(weight: number, scale?: number, pxPerMicron?: number): number;
|
|
75
|
+
/**
|
|
76
|
+
* How "all genes" is drawn at the current zoom: individual transcripts, a bin level, or nothing.
|
|
77
|
+
*/
|
|
78
|
+
export type AllGenesPlan = {
|
|
79
|
+
kind: 'individual';
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'bins';
|
|
82
|
+
level: number;
|
|
83
|
+
} | {
|
|
84
|
+
kind: 'none';
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* How to draw every transcript in view without exceeding `budget` markers.
|
|
88
|
+
*
|
|
89
|
+
* - The transcripts themselves, once the estimated count in view fits the budget.
|
|
90
|
+
* - Otherwise the finest pyramid level whose bins are at least `minSpacingPx` apart on
|
|
91
|
+
* screen and number no more than the budget — groups big enough to read, few enough
|
|
92
|
+
* to draw.
|
|
93
|
+
*
|
|
94
|
+
* The count in view is estimated from the average density, which over- or under-shoots
|
|
95
|
+
* locally; the renderer still caps what it draws, so an estimate is enough to choose.
|
|
96
|
+
*/
|
|
97
|
+
export declare function allGenesPlan(o: {
|
|
98
|
+
rect: DataRect;
|
|
99
|
+
bounds: SpatialBounds;
|
|
100
|
+
total: number;
|
|
101
|
+
pxPerUnit: number;
|
|
102
|
+
levels: readonly {
|
|
103
|
+
binSize: number;
|
|
104
|
+
}[];
|
|
105
|
+
budget: number;
|
|
106
|
+
canIndividual: boolean;
|
|
107
|
+
minSpacingPx?: number;
|
|
108
|
+
}): AllGenesPlan;
|
|
109
|
+
/**
|
|
110
|
+
* Diameter in px of a group of `count` transcripts in a bin `binPx` wide, where
|
|
111
|
+
* `refCount` is a typical busy bin in view (its 95th percentile).
|
|
112
|
+
*
|
|
113
|
+
* Area grows with the count — a bin with a quarter of the transcripts gets half the
|
|
114
|
+
* diameter — between a third of the bin (so a sparse bin is still visible) and a little
|
|
115
|
+
* over the full bin (so dense neighbours just touch rather than pile up).
|
|
116
|
+
*/
|
|
117
|
+
export declare function groupedMarkerPx(count: number, refCount: number, binPx: number, scale?: number): number;
|
|
118
|
+
/** The `p` quantile (0..1) of a count vector — a sample of it for large vectors. */
|
|
119
|
+
export declare function quantileOf(values: ArrayLike<number>, p: number): number;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { SpatialViewState } from '../../contracts/display-types';
|
|
5
|
+
import { PanelOption } from '../../spatial/spatial-panel-model';
|
|
6
|
+
import type { GenePickerModel } from '../spatial-gene-picker';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* The Cells section, as Xenium Explorer's: the outlines' on/off switch, which boundary set
|
|
10
|
+
* is drawn, how cells are coloured (with the gene, the colour, or the colour bar that
|
|
11
|
+
* goes with it), the {@link SpatialGroupsPanelComponent groups}, and how cells are drawn.
|
|
12
|
+
*
|
|
13
|
+
* Writes only through `controls.setViewState`.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SpatialCellsPanelComponent implements OnChanges {
|
|
16
|
+
/** The spatial controls this panel reads and writes through; null without a `SPATIAL_DATA_PORT`. */
|
|
17
|
+
controls: ISpatialControls | null;
|
|
18
|
+
/** The dataset on offer, or null. */
|
|
19
|
+
dataset: SpatialDataset | null;
|
|
20
|
+
/** The current spatial view state: what is drawn, and how. */
|
|
21
|
+
view: SpatialViewState;
|
|
22
|
+
/** The gene list the "Gene Expression" colouring picks from, shared with the other
|
|
23
|
+
* gene dropdowns. */
|
|
24
|
+
genes: GenePickerModel | null;
|
|
25
|
+
/** The observations' continuous colour bar, shown for the gene colouring while it has one. */
|
|
26
|
+
colorBarCss: string | null;
|
|
27
|
+
/** Whether the section is expanded. */
|
|
28
|
+
open: boolean;
|
|
29
|
+
/** Asks to open or close it; two-way with `open`. */
|
|
30
|
+
readonly openChange: EventEmitter<boolean>;
|
|
31
|
+
/** Virtual-scrolled only past this many options: the scroller earns its complexity for
|
|
32
|
+
* a few thousand names, and for eight it adds only overhead — a virtual viewport that
|
|
33
|
+
* short swallows the clicks it is meant to forward. */
|
|
34
|
+
protected readonly geneVirtualScrollFrom = 200;
|
|
35
|
+
protected readonly cellDrawOptions: PanelOption<SpatialViewState['cellDraw']>[];
|
|
36
|
+
/**
|
|
37
|
+
* Option lists for the cell controls. Built once per dataset rather than in getters: a
|
|
38
|
+
* getter returns a fresh array on every change-detection pass, and PrimeNG re-renders
|
|
39
|
+
* its buttons whenever the array identity changes — which made them impossible to click.
|
|
40
|
+
*/
|
|
41
|
+
protected cellSetOptions: PanelOption<string>[];
|
|
42
|
+
/** Cell colour modes on offer (Xenium Explorer's "Cell Color"). */
|
|
43
|
+
protected cellColorOptions: PanelOption<SpatialViewState['cellColorMode']>[];
|
|
44
|
+
/** The density colour bar, rebuilt only when its colormap changes (a 256-entry LUT). */
|
|
45
|
+
protected densityColorBarCss: string;
|
|
46
|
+
private densityBarFor;
|
|
47
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
48
|
+
/** Whether outlines are on — the explicit choice, or automatically for data that has them. */
|
|
49
|
+
protected get cellsOn(): boolean;
|
|
50
|
+
/** The boundary set drawn: the view's choice, else the dataset's default, else its first. */
|
|
51
|
+
protected get activeCellSet(): string | null;
|
|
52
|
+
/** Fill opacity as a 0–100 number, for the box beside the slider. */
|
|
53
|
+
protected get cellOpacityPercent(): number;
|
|
54
|
+
protected onShowCells(on: boolean): void;
|
|
55
|
+
protected onCellSet(set: string): void;
|
|
56
|
+
protected onCellDraw(draw: SpatialViewState['cellDraw']): void;
|
|
57
|
+
protected onCellOpacity(value: number | undefined): void;
|
|
58
|
+
protected onCellOpacityPercent(v: number | null): void;
|
|
59
|
+
protected onCellColorMode(mode: SpatialViewState['cellColorMode']): void;
|
|
60
|
+
protected onCellColorGene(gene: string | null): void;
|
|
61
|
+
protected onCellSingleColor(hex: string): void;
|
|
62
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialCellsPanelComponent, never>;
|
|
63
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialCellsPanelComponent, "spatial-cells-panel", never, { "controls": { "alias": "controls"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "view": { "alias": "view"; "required": false; }; "genes": { "alias": "genes"; "required": false; }; "colorBarCss": { "alias": "colorBarCss"; "required": false; }; "open": { "alias": "open"; "required": false; }; }, { "openChange": "openChange"; }, never, never, true, never>;
|
|
64
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
2
|
+
import type { SpatialDataset, SpatialEmbedding, SpatialEmbeddingMeta } from '../../contracts/spatial-dataset.contract';
|
|
3
|
+
import type { SpatialColorBy } from '../../contracts/display-types';
|
|
4
|
+
import type { OmicsGrouping } from '../../implementations/plotly/omics-trace-builders';
|
|
5
|
+
/** What a colour-source load came to. */
|
|
6
|
+
export type ValueLoad =
|
|
7
|
+
/** Nothing to chart: no colour source, or no port. */
|
|
8
|
+
'none'
|
|
9
|
+
/** A categorical column: its counts per category are loaded. */
|
|
10
|
+
| 'categorical'
|
|
11
|
+
/** A gene or numeric column: its values are loaded. */
|
|
12
|
+
| 'continuous'
|
|
13
|
+
/** The load failed; {@link ChartDataModel.notice} says why. */
|
|
14
|
+
| 'failed'
|
|
15
|
+
/** A newer load (or a dataset switch) overtook this one: nothing to do. */
|
|
16
|
+
| 'superseded';
|
|
17
|
+
/** What the renderer draws from: everything loaded for the current dataset. */
|
|
18
|
+
export interface ChartData {
|
|
19
|
+
/** The colour source's values, when it is continuous. */
|
|
20
|
+
values: Float32Array | null;
|
|
21
|
+
/** The colour source's categories, when it is a categorical column. */
|
|
22
|
+
categorical: OmicsGrouping | null;
|
|
23
|
+
/** The grouping column the violin, box and heatmap split by. */
|
|
24
|
+
grouping: OmicsGrouping | null;
|
|
25
|
+
groupBy: string | null;
|
|
26
|
+
/** The heatmap's genes that have their vectors, in row order. */
|
|
27
|
+
heatmapRows: {
|
|
28
|
+
name: string;
|
|
29
|
+
values: Float32Array;
|
|
30
|
+
}[];
|
|
31
|
+
/** The drawn embedding's coordinates, once loaded. */
|
|
32
|
+
embeddingCoords: SpatialEmbedding | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The data the spatial charts draw, and its loading: the colour source's vector (or its
|
|
36
|
+
* categories), the grouping column, the heatmap's gene vectors, and the embedding's
|
|
37
|
+
* coordinates.
|
|
38
|
+
*
|
|
39
|
+
* Each load has its OWN {@link Supersede}: on one shared counter a redraw for a selection
|
|
40
|
+
* change dropped a pending colour-source load (SPATIAL-2), and a busy flag per load, since
|
|
41
|
+
* a shared one was left set by whichever load lost its race. A dataset switch
|
|
42
|
+
* ({@link onDatasetChanged}) cancels all of them together and drops every vector, because
|
|
43
|
+
* each is indexed by the previous dataset's observations (SPATIAL-1).
|
|
44
|
+
*
|
|
45
|
+
* Plain class: the component asks it to load, then renders {@link snapshot}.
|
|
46
|
+
*/
|
|
47
|
+
export declare class ChartDataModel {
|
|
48
|
+
/** Categorical column the violin/box (and heatmap) split by; null = one trace for all. */
|
|
49
|
+
groupBy: string | null;
|
|
50
|
+
groupOptions: {
|
|
51
|
+
label: string;
|
|
52
|
+
value: string | null;
|
|
53
|
+
}[];
|
|
54
|
+
/**
|
|
55
|
+
* Genes the heatmap's rows are. Local rather than in `SpatialViewState`, as the chart
|
|
56
|
+
* kind is: this is what the panel is charting, not what the map is drawing.
|
|
57
|
+
*/
|
|
58
|
+
heatmapGenes: string[];
|
|
59
|
+
geneOptions: {
|
|
60
|
+
label: string;
|
|
61
|
+
value: string;
|
|
62
|
+
}[];
|
|
63
|
+
/** Embeddings to offer, and which of them is drawn. */
|
|
64
|
+
embeddings: SpatialEmbeddingMeta[];
|
|
65
|
+
embedding: SpatialEmbeddingMeta | null;
|
|
66
|
+
embeddingCoords: SpatialEmbedding | null;
|
|
67
|
+
/** Set when something cannot be charted, for an inline hint. */
|
|
68
|
+
notice: string | null;
|
|
69
|
+
private values;
|
|
70
|
+
/** Set instead of `values` when the colour source is a categorical column: its
|
|
71
|
+
* distribution is counts per category, not a histogram of its codes. */
|
|
72
|
+
private categorical;
|
|
73
|
+
private grouping;
|
|
74
|
+
/** Every gene the dataset inlined. `geneOptions` is only ever the best few hundred of
|
|
75
|
+
* these — see `gene-search.ts` for why a whole-transcriptome list cannot be handed to
|
|
76
|
+
* the control whole. */
|
|
77
|
+
private geneNames;
|
|
78
|
+
/** What is typed in the picker's filter box, so the options can be rebuilt when the
|
|
79
|
+
* selection changes without losing the query. */
|
|
80
|
+
private geneQuery;
|
|
81
|
+
/** Fetched vectors by gene name, so adding a fourth gene does not refetch the first
|
|
82
|
+
* three — each is a full per-observation Float32Array. */
|
|
83
|
+
private readonly geneCache;
|
|
84
|
+
private valueBusy;
|
|
85
|
+
private heatmapBusy;
|
|
86
|
+
private embeddingBusy;
|
|
87
|
+
/** Guards the colour-source fetch: a fast colour-source change can resolve out of order,
|
|
88
|
+
* and a stale vector would be charted against the new label. */
|
|
89
|
+
private readonly valueLoad;
|
|
90
|
+
/** The same for the grouping, which the user can change as fast. */
|
|
91
|
+
private readonly groupLoad;
|
|
92
|
+
private readonly heatmapLoad;
|
|
93
|
+
private readonly embeddingLoad;
|
|
94
|
+
/** The dataset the loaded vectors belong to; `undefined` before the first. */
|
|
95
|
+
private datasetId;
|
|
96
|
+
/** A load is in flight. */
|
|
97
|
+
get busy(): boolean;
|
|
98
|
+
/** Whether the colour source is a categorical column (with its categories loaded). */
|
|
99
|
+
get isCategorical(): boolean;
|
|
100
|
+
/** Whether a grouping column's categories are loaded. */
|
|
101
|
+
get hasGrouping(): boolean;
|
|
102
|
+
/** What the renderer draws from. */
|
|
103
|
+
snapshot(): ChartData;
|
|
104
|
+
/**
|
|
105
|
+
* A dataset emission: its grouping columns, gene names and the embeddings to offer.
|
|
106
|
+
*
|
|
107
|
+
* @returns true when this is a SWITCH from another dataset. Every vector loaded so far is
|
|
108
|
+
* then dropped and every load still running for the old dataset cancelled; the caller
|
|
109
|
+
* must reload the colour source (and the grouping), because a port may go straight from
|
|
110
|
+
* one dataset to the next with a colour source of the same name, so the view need not
|
|
111
|
+
* re-emit.
|
|
112
|
+
*/
|
|
113
|
+
onDatasetChanged(dataset: SpatialDataset | null, categoricalColumns: readonly string[], embeddings: SpatialEmbeddingMeta[]): boolean;
|
|
114
|
+
/** Fetch the colour source's vector — or, for a categorical column, its categories. */
|
|
115
|
+
loadValues(controls: ISpatialControls | null, source: SpatialColorBy | null): Promise<ValueLoad>;
|
|
116
|
+
/**
|
|
117
|
+
* Group by `name` (null for none), fetching its categories.
|
|
118
|
+
*
|
|
119
|
+
* @returns false when a later choice overtook this one — sequenced, because picking A
|
|
120
|
+
* then B with a slower A would otherwise chart A's categories under a dropdown that
|
|
121
|
+
* says B. A failure falls back to no grouping.
|
|
122
|
+
*/
|
|
123
|
+
loadGrouping(controls: ISpatialControls | null, name: string | null): Promise<boolean>;
|
|
124
|
+
/** The heatmap's rows. Chosen genes stay among the options, or the control cannot label
|
|
125
|
+
* its chips. */
|
|
126
|
+
setHeatmapGenes(names: string[] | null): void;
|
|
127
|
+
/** The gene picker's filter box changed: search the resident names, show the best. */
|
|
128
|
+
filterGenes(query: string | null): void;
|
|
129
|
+
/**
|
|
130
|
+
* Fetch any gene the heatmap needs and does not already hold.
|
|
131
|
+
*
|
|
132
|
+
* Sequenced: each vector is a separate request, and a slower one must not paint rows
|
|
133
|
+
* for a gene list the user has already moved on from — nor land in the cache of a
|
|
134
|
+
* dataset it was not fetched for.
|
|
135
|
+
*/
|
|
136
|
+
loadHeatmapGenes(controls: ISpatialControls | null): Promise<void>;
|
|
137
|
+
/** Draw `name` next, when the dataset offers it. @returns whether the choice changed. */
|
|
138
|
+
selectEmbedding(name: string): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* The coordinates for `meta`: kept when already loaded, else fetched — sequenced, as a
|
|
141
|
+
* slower round-trip must not paint over an embedding the user has already moved on from.
|
|
142
|
+
*
|
|
143
|
+
* @returns whether they are ready to draw ('failed' has set {@link notice}).
|
|
144
|
+
*/
|
|
145
|
+
loadEmbedding(getEmbedding: (name: string) => Promise<SpatialEmbedding>, meta: SpatialEmbeddingMeta): Promise<'ready' | 'failed' | 'superseded'>;
|
|
146
|
+
/**
|
|
147
|
+
* Supersede any embedding load in flight without starting one — for a draw that needs
|
|
148
|
+
* no fetch (computed here, or still to be computed), which a slower fetch must not
|
|
149
|
+
* overwrite.
|
|
150
|
+
*/
|
|
151
|
+
supersedeEmbeddingLoad(): void;
|
|
152
|
+
private refreshGeneOptions;
|
|
153
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { SpatialEmbeddingMeta } from '../../contracts/spatial-dataset.contract';
|
|
2
|
+
import type { OmicsChartKind } from '../../implementations/plotly/omics-trace-builders';
|
|
3
|
+
/**
|
|
4
|
+
* The spatial charts' kind catalogue and the prose that explains each chart: pure
|
|
5
|
+
* functions of what is charted, so none of the ~150 lines of text sit in the component and
|
|
6
|
+
* each sentence is testable on its own.
|
|
7
|
+
*/
|
|
8
|
+
/** A chart kind as the kind picker offers it. */
|
|
9
|
+
export interface ChartKindOption {
|
|
10
|
+
label: string;
|
|
11
|
+
value: OmicsChartKind;
|
|
12
|
+
}
|
|
13
|
+
/** What a continuous value can be drawn as. */
|
|
14
|
+
export declare const CONTINUOUS_KINDS: readonly ChartKindOption[];
|
|
15
|
+
/** What a categorical column can be drawn as: a category code is a label, not a magnitude,
|
|
16
|
+
* so a histogram of it would be meaningless — what it has is a frequency distribution. */
|
|
17
|
+
export declare const CATEGORICAL_KINDS: readonly ChartKindOption[];
|
|
18
|
+
/** Available whatever the map is coloured by: the heatmap's subject is a GENE LIST crossed
|
|
19
|
+
* with a grouping, not the active colour source. */
|
|
20
|
+
export declare const ALWAYS_KINDS: readonly ChartKindOption[];
|
|
21
|
+
/**
|
|
22
|
+
* Offered only when the dataset publishes an embedding to draw. Labelled for what it is
|
|
23
|
+
* rather than for one instance of it: this view draws whatever embedding the dataset
|
|
24
|
+
* publishes — a UMAP, a PCA, a t-SNE — and calling the tab "UMAP" while it showed a PCA
|
|
25
|
+
* would be a lie the picker beneath it immediately contradicts.
|
|
26
|
+
*/
|
|
27
|
+
export declare const EMBEDDING_KINDS: readonly ChartKindOption[];
|
|
28
|
+
/**
|
|
29
|
+
* The kinds the active subject can be drawn as. An embedding is a property of the DATASET,
|
|
30
|
+
* not of the colour source, so it is offered whenever one is published and never
|
|
31
|
+
* otherwise — a tab that draws nothing is worse than an absent one.
|
|
32
|
+
*/
|
|
33
|
+
export declare function chartKindOptions(categorical: boolean, hasEmbeddings: boolean): ChartKindOption[];
|
|
34
|
+
/**
|
|
35
|
+
* What the chart on screen actually shows, and what it cannot be read for.
|
|
36
|
+
*
|
|
37
|
+
* Shown on hover from a `?` beside the tabs. Each of these plots answers a different
|
|
38
|
+
* question and two of them are routinely over-read — a UMAP's distances and a heatmap's
|
|
39
|
+
* unscaled colours — so the caveat is part of the explanation rather than a footnote.
|
|
40
|
+
*
|
|
41
|
+
* HTML, because the tooltip renders with `[escape]="false"`: a paragraph and a caveat read
|
|
42
|
+
* as two thoughts, and a single run-on line is skipped rather than read.
|
|
43
|
+
*/
|
|
44
|
+
export declare function kindHelp(kind: OmicsChartKind, embedding: Pick<SpatialEmbeddingMeta, 'name' | 'label'> | null): string;
|
|
45
|
+
/**
|
|
46
|
+
* What the embedding on screen is, and how far its geometry can be trusted.
|
|
47
|
+
*
|
|
48
|
+
* Per METHOD, because that is the part people get wrong: a PCA's axes are ordered and
|
|
49
|
+
* measurable while a UMAP's are neither, and the same picture read the two ways supports
|
|
50
|
+
* opposite conclusions.
|
|
51
|
+
*/
|
|
52
|
+
export declare function embeddingHelp(embedding: Pick<SpatialEmbeddingMeta, 'name' | 'label'> | null): string;
|
|
53
|
+
/** What the embedding view is showing, said plainly. */
|
|
54
|
+
export declare function embeddingNote(meta: Pick<SpatialEmbeddingMeta, 'name' | 'label' | 'derived' | 'params'> | null, coloured: boolean, selectionCount: number): string;
|
|
55
|
+
/** What the heatmap is showing, as {@link heatmapNote} says it. */
|
|
56
|
+
export interface HeatmapNoteState {
|
|
57
|
+
geneCount: number;
|
|
58
|
+
selectionCount: number;
|
|
59
|
+
zScore: boolean;
|
|
60
|
+
/** Columns the cap dropped from the last render. */
|
|
61
|
+
hidden: number;
|
|
62
|
+
groupBy: string | null;
|
|
63
|
+
/** The grouped view's column cap. */
|
|
64
|
+
maxColumns: number;
|
|
65
|
+
/** Up to this many selected cells, each is its own column. */
|
|
66
|
+
cellColumns: number;
|
|
67
|
+
}
|
|
68
|
+
/** What the heatmap is currently showing, said plainly. */
|
|
69
|
+
export declare function heatmapNote(s: HeatmapNoteState): string;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/** Plotly config: a static-ish analysis chart, not an editable figure. */
|
|
2
|
+
export declare const CHART_CONFIG: {
|
|
3
|
+
displaylogo: boolean;
|
|
4
|
+
responsive: boolean;
|
|
5
|
+
modeBarButtonsToRemove: string[];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Config for the embedding, which unlike the distributions is a plot you SELECT in.
|
|
9
|
+
*
|
|
10
|
+
* The lasso and box-select are kept — drawing round a cluster is how a population gets
|
|
11
|
+
* picked out of a UMAP — and the wheel zooms, because exploring an embedding means zooming
|
|
12
|
+
* into a cluster and reaching for a toolbar button to do it breaks that.
|
|
13
|
+
*/
|
|
14
|
+
export declare const EMBEDDING_CONFIG: {
|
|
15
|
+
displaylogo: boolean;
|
|
16
|
+
responsive: boolean;
|
|
17
|
+
scrollZoom: boolean;
|
|
18
|
+
modeBarButtonsToRemove: string[];
|
|
19
|
+
};
|
|
20
|
+
/** What a lasso or box selection in a plot reports. */
|
|
21
|
+
export interface PlotSelectionHandlers {
|
|
22
|
+
/** The observation indices selected (empty for a selection that caught nothing). */
|
|
23
|
+
selected(indices: number[]): void;
|
|
24
|
+
/** The modebar's deselect, or a plain click on empty space. */
|
|
25
|
+
deselected(): void;
|
|
26
|
+
}
|
|
27
|
+
/** The view the user has set up on a live plot: a 3D camera, or a zoomed 2D range. */
|
|
28
|
+
export interface LivePlotView {
|
|
29
|
+
camera?: unknown;
|
|
30
|
+
ranges?: {
|
|
31
|
+
x: unknown;
|
|
32
|
+
y: unknown;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Plotly I/O for the spatial charts, keyed by the id of the div drawn into: drawing,
|
|
37
|
+
* purging, re-fitting to the container, binding a selection, and reading back the view
|
|
38
|
+
* the user has set up. The only place the charts import Plotly.
|
|
39
|
+
*
|
|
40
|
+
* Remembers whether the last drawn layout fixed its own height, because re-fitting depends
|
|
41
|
+
* on it (see {@link refit}).
|
|
42
|
+
*/
|
|
43
|
+
export declare class PlotlyChartHost {
|
|
44
|
+
/**
|
|
45
|
+
* The height the drawn layout asked for, or null where it autosizes. The counts and
|
|
46
|
+
* heatmap layouts size their height to their content — one band per bar, per gene row —
|
|
47
|
+
* while the distribution kinds want to fill whatever height they are given.
|
|
48
|
+
*/
|
|
49
|
+
private drawnHeight;
|
|
50
|
+
/** Whether the plot on screen fixed its own height. */
|
|
51
|
+
get hasFixedHeight(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Draw into `div`, remembering whether this layout fixed its own height.
|
|
54
|
+
*
|
|
55
|
+
* The layout builders return `unknown` on purpose — they keep Plotly's layout types out
|
|
56
|
+
* of the pure module — so the height is read back by narrowing rather than declared.
|
|
57
|
+
* `height` is Plotly's own key, not ours.
|
|
58
|
+
*/
|
|
59
|
+
draw(div: string, traces: unknown, layout: unknown, config?: unknown): Promise<void>;
|
|
60
|
+
/** Purge `div`, freeing its plot (and WebGL context); a div with no plot is fine. */
|
|
61
|
+
purge(div: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Re-fit whatever is plotted in `div` to its container.
|
|
64
|
+
*
|
|
65
|
+
* Plotly does not notice a container resize on its own — its `responsive` option listens
|
|
66
|
+
* for WINDOW resizes only. And `autosize` takes BOTH dimensions from the container, which
|
|
67
|
+
* is right only where the layout did not fix its own height. Measured: autosizing a layout
|
|
68
|
+
* with an explicit height of 500 replaced it with the container's 400. The counts and
|
|
69
|
+
* heatmap layouts size themselves to their row count, so for them the width is set ALONE
|
|
70
|
+
* and the height left to stand.
|
|
71
|
+
*/
|
|
72
|
+
refit(div: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Turn a lasso or box selection in `div` into observation indices.
|
|
75
|
+
*
|
|
76
|
+
* Bound after each draw, and the previous listeners removed first: `Plotly.react`
|
|
77
|
+
* preserves handlers, so re-binding without removing would fire the selection once per
|
|
78
|
+
* redraw the plot had ever had.
|
|
79
|
+
*/
|
|
80
|
+
bindSelection(div: string, handlers: PlotSelectionHandlers): void;
|
|
81
|
+
/**
|
|
82
|
+
* Drop the selection handlers from a div another chart is about to use.
|
|
83
|
+
*
|
|
84
|
+
* `plotly_deselect` fires on a plain click in ANY Plotly chart, so handlers left bound
|
|
85
|
+
* for an embedding would make the first click on a bar clear the map's selection.
|
|
86
|
+
*/
|
|
87
|
+
unbindSelection(div: string): void;
|
|
88
|
+
/**
|
|
89
|
+
* The view the user has set up on the live plot in `div`, to carry across a redraw.
|
|
90
|
+
*
|
|
91
|
+
* `Plotly.react` resets a 3D scene camera and any zoomed 2D range unless the layout
|
|
92
|
+
* carries them, so selecting a category or recolouring would throw away an orientation
|
|
93
|
+
* that took work to find. Null where nothing is drawn yet, or a 2D plot is not zoomed:
|
|
94
|
+
* passing an autoranged range back would freeze the axes and stop the plot re-fitting
|
|
95
|
+
* when the data changes.
|
|
96
|
+
*/
|
|
97
|
+
liveView(div: string): LivePlotView | null;
|
|
98
|
+
}
|
package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* The detached chart window: a non-modal, draggable, resizable dialog beside the
|
|
5
|
+
* spatial-omics dialog, holding the plot div (by {@link divId}) and whatever is projected
|
|
6
|
+
* under it (the chart's hints).
|
|
7
|
+
*
|
|
8
|
+
* Presentational: the charts panel draws into the div, and decides what closing,
|
|
9
|
+
* showing and resizing the window mean.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SpatialChartWindowComponent {
|
|
12
|
+
/** The window's header — what it is showing. */
|
|
13
|
+
title: string;
|
|
14
|
+
/** The id of the div the chart is drawn into. */
|
|
15
|
+
divId: string;
|
|
16
|
+
/** Whether the drawn layout fixed its own height (and so the window scrolls). */
|
|
17
|
+
fixedHeight: boolean;
|
|
18
|
+
/** The window was closed: put the chart back. */
|
|
19
|
+
readonly closed: EventEmitter<void>;
|
|
20
|
+
/** The window is up and its div exists: the chart can be drawn into it. */
|
|
21
|
+
readonly shown: EventEmitter<void>;
|
|
22
|
+
/** The window was resized: re-fit the chart. */
|
|
23
|
+
readonly resizeEnd: EventEmitter<void>;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialChartWindowComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialChartWindowComponent, "spatial-chart-window", never, { "title": { "alias": "title"; "required": false; }; "divId": { "alias": "divId"; "required": false; }; "fixedHeight": { "alias": "fixedHeight"; "required": false; }; }, { "closed": "closed"; "shown": "shown"; "resizeEnd": "resizeEnd"; }, never, ["*"], true, never>;
|
|
26
|
+
}
|