@jax-data-science/sci-image-visualizer 0.8.3 → 0.9.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 +28 -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/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/sam.contract.mjs +1 -1
- 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/raster.mjs +98 -0
- package/esm2022/lib/geometry/ring.mjs +201 -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 +3 -4
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +66 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +157 -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 +263 -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 +344 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +358 -4218
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +439 -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 +182 -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 +153 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +185 -718
- 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 +118 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +373 -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/classes-panel/classes-panel.component.mjs +99 -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 +402 -651
- package/esm2022/lib/region-editor/region-metrics.mjs +68 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +134 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +153 -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/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +459 -411
- 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 +46 -3
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +140 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-store.service.mjs +279 -675
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +49 -71
- 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 +114 -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 +81 -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 +68 -117
- 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 +60 -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.component.mjs +480 -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-Csxlnq7I.mjs +41083 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.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/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +13 -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/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 +1 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/sam.contract.d.ts +7 -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 +221 -54
- package/lib/contracts/viz-config.d.ts +1 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/ring.d.ts +67 -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 +0 -1
- package/lib/implementations/napari-js/napari-loading-state.d.ts +30 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +62 -70
- package/lib/implementations/napari-js/napari-scene.d.ts +93 -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 +89 -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 +121 -883
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +104 -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 +37 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +36 -48
- 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 +80 -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 +18 -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 +40 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +17 -0
- package/lib/models/region.d.ts +40 -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/classes-panel/classes-panel.component.d.ts +56 -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 +166 -199
- package/lib/region-editor/region-metrics.d.ts +26 -0
- package/lib/region-editor/region-persistence.service.d.ts +69 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +83 -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 +157 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +110 -58
- 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 +35 -1
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +63 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-store.service.d.ts +104 -112
- package/lib/store/visualizer-store.service.d.ts +22 -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 +60 -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 +40 -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 +47 -83
- 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 +27 -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.component.d.ts +201 -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/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,30 @@
|
|
|
1
|
+
/** What the service itself counts on the badge; the spatial tile layers report their own names. */
|
|
2
|
+
export type LoadingSource = 'Image' | 'Observations';
|
|
3
|
+
/**
|
|
4
|
+
* "x reloading…" at the bottom of the canvas, aggregated over everything that loads into one
|
|
5
|
+
* scene: image tiles (the tile client), observation colourings (the spatial scenes) and the
|
|
6
|
+
* spatial tile layers' own loads (which report a list of layer names).
|
|
7
|
+
*
|
|
8
|
+
* Each load is a {@link begin} that hands back its own `end`. {@link reset} starts a new scene:
|
|
9
|
+
* the counts are dropped, and an `end` from a load that began before it is a no-op, so a load
|
|
10
|
+
* that settles after a re-plot can neither un-count the new scene's work nor drive a count below
|
|
11
|
+
* zero (which hid the next scene's "Observations reloading…" until a second load overlapped it).
|
|
12
|
+
*/
|
|
13
|
+
export declare class LoadingBadgeState {
|
|
14
|
+
private host;
|
|
15
|
+
private badge;
|
|
16
|
+
private readonly counts;
|
|
17
|
+
private tileLayers;
|
|
18
|
+
private generation;
|
|
19
|
+
/** The element the badge is drawn into (the plot host); set per plot. */
|
|
20
|
+
attach(host: HTMLElement): void;
|
|
21
|
+
/** One load of `source` started; call the returned function once it settles. */
|
|
22
|
+
begin(source: LoadingSource): () => void;
|
|
23
|
+
/** The spatial tile layers still loading (their own names, in their order). */
|
|
24
|
+
setTileLayers(layers: readonly string[]): void;
|
|
25
|
+
/** The text the badge has set (shown, or about to be once the show delay passes). */
|
|
26
|
+
get text(): string;
|
|
27
|
+
/** A new scene: forget every count and remove the badge. */
|
|
28
|
+
reset(): void;
|
|
29
|
+
private show;
|
|
30
|
+
}
|
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import { IRegionOverlay, RegionToolMode } from '../../contracts/region-overlay.contract';
|
|
2
2
|
import { RegionStore } from '../../store/region-store.service';
|
|
3
|
+
import type { Affine } from '../../region-overlay/svg-region-renderer';
|
|
3
4
|
/**
|
|
4
5
|
* The slice of the napari Viewer the overlay needs (coord transforms + control gating).
|
|
5
6
|
*
|
|
7
|
+
* COORDINATE SPACES: `canvasToWorld` takes CLIENT pixels (viewport coordinates, as a pointer
|
|
8
|
+
* event's `clientX/Y`), exactly as napari-js `Viewer.canvasToWorld` does. `canvasTransform` is
|
|
9
|
+
* the camera's world → CANVAS-LOCAL CSS-pixel affine, napari-js `Viewer.canvasTransform`, which
|
|
10
|
+
* reads no layout: drawing and following the camera use it, so a camera frame costs one
|
|
11
|
+
* `matrix(...)` and no `getBoundingClientRect()` (review NAPARI-BOUNDARY-10). The svg covers the
|
|
12
|
+
* plot host and the canvas is the host's in-flow child at its top-left, so canvas-local and
|
|
13
|
+
* svg-local pixels are the same; a pointer's client pixels are mapped into the svg by the
|
|
14
|
+
* overlay itself.
|
|
15
|
+
*
|
|
6
16
|
* Exported because the 3D spatial mode supplies a SCREEN-SPACE implementation of it: there the
|
|
7
17
|
* drawn shape is a lasso in canvas pixels, not a rectangle in image space, so "world" is the
|
|
8
|
-
* canvas itself
|
|
9
|
-
* overlay — every tool, the handles, the store
|
|
18
|
+
* canvas itself — `canvasToWorld` is the client → canvas offset and `canvasTransform` the
|
|
19
|
+
* identity. That lets the 3D view reuse this whole overlay — every tool, the handles, the store
|
|
20
|
+
* round-trip — with no 3D-specific drawing code.
|
|
10
21
|
*/
|
|
11
22
|
export interface OverlayViewer {
|
|
23
|
+
/** Client px → world. */
|
|
12
24
|
canvasToWorld(clientX: number, clientY: number): [number, number];
|
|
13
|
-
|
|
25
|
+
/** World → canvas-local (= svg-local) CSS px, as an SVG affine `[a, b, c, d, e, f]`. */
|
|
26
|
+
canvasTransform(): Affine;
|
|
14
27
|
setControlsEnabled(enabled: boolean): void;
|
|
15
28
|
readonly camera: {
|
|
16
29
|
readonly changed: {
|
|
@@ -20,22 +33,31 @@ export interface OverlayViewer {
|
|
|
20
33
|
}
|
|
21
34
|
/**
|
|
22
35
|
* SVG region overlay for the napari-js WebGPU image view (jit-ui#102), mirroring the OSD backend's
|
|
23
|
-
* {@link OsdRegionOverlay} but driven by napari's `canvasToWorld`/`
|
|
36
|
+
* {@link OsdRegionOverlay} but driven by napari's `canvasToWorld`/`canvasTransform` transforms
|
|
37
|
+
* (see {@link OverlayViewer} for their coordinate spaces).
|
|
24
38
|
* Vector shapes are drawn in an absolutely-positioned `<svg>` over the canvas (no need to push
|
|
25
|
-
* them through WebGPU)
|
|
26
|
-
*
|
|
27
|
-
*
|
|
39
|
+
* them through WebGPU) by {@link NapariRegionSvgRenderer} over the shared `SvgRegionRenderer`:
|
|
40
|
+
* in world coordinates inside one transformed group, rebuilt on a region or selection change,
|
|
41
|
+
* while a camera move only rewrites the transform (napari-js's `canvasTransform`, the camera
|
|
42
|
+
* centre/zoom) and the few screen-space handles and labels. This class is
|
|
43
|
+
* the gesture controller: pointer handlers, the tool mode, and the edit/draft/marquee state.
|
|
44
|
+
* It writes completed shapes to the shared {@link RegionStore} (so save / undo / export work
|
|
45
|
+
* identically to OSD).
|
|
28
46
|
*
|
|
29
47
|
* Supports (jit-ui#102): rectangle / polygon / freehand path drawing, click-select and rubber-band
|
|
30
48
|
* marquee select, pan/zoom gating via `setControlsEnabled`, body move, vertex move/add/delete,
|
|
31
|
-
* bezier handle editing, and donut holes (including hole vertex + hole-bezier-handle editing)
|
|
32
|
-
*
|
|
49
|
+
* bezier handle editing, and donut holes (including hole vertex + hole-bezier-handle editing).
|
|
50
|
+
* Hit-testing shares `region-overlay/region-geometry` with the OSD overlay, so both follow
|
|
51
|
+
* the same rules (multi-part regions, holes, open polylines, handle-less bezier curves).
|
|
33
52
|
*/
|
|
34
53
|
export declare class NapariRegionOverlay implements IRegionOverlay {
|
|
35
54
|
private readonly host;
|
|
36
55
|
private readonly viewer;
|
|
37
56
|
private readonly store;
|
|
38
57
|
private readonly svg;
|
|
58
|
+
private readonly renderer;
|
|
59
|
+
/** Client ↔ svg-local ↔ world conversions, with the svg origin read once per gesture/redraw. */
|
|
60
|
+
private readonly projection;
|
|
39
61
|
private readonly subs;
|
|
40
62
|
private readonly disconnectCamera;
|
|
41
63
|
private mode;
|
|
@@ -44,8 +66,6 @@ export declare class NapariRegionOverlay implements IRegionOverlay {
|
|
|
44
66
|
private draftRect;
|
|
45
67
|
/** In-progress rubber-band selection marquee (select mode), image-space. */
|
|
46
68
|
private marquee;
|
|
47
|
-
/** Dedicated marquee rect element, updated directly during the drag (no full region redraw). */
|
|
48
|
-
private marqueeEl;
|
|
49
69
|
private draftPath;
|
|
50
70
|
private drawing;
|
|
51
71
|
private regionsVisible;
|
|
@@ -65,88 +85,60 @@ export declare class NapariRegionOverlay implements IRegionOverlay {
|
|
|
65
85
|
setMode(mode: RegionToolMode): void;
|
|
66
86
|
setSelectedBezier(bezier: boolean): void;
|
|
67
87
|
/**
|
|
68
|
-
* How finely a drawn vertex may be placed, in world units
|
|
69
|
-
*
|
|
70
|
-
* One by default, because for an image the world IS pixels and a region should align to
|
|
71
|
-
* them. A dataset whose coordinates are not pixels sets it finer — seqFISH's whole
|
|
72
|
-
* sample spans about 5 x 7 units, where whole-unit vertices leave roughly six by eight
|
|
73
|
-
* placeable positions and no ROI can be drawn at all.
|
|
88
|
+
* How finely a drawn vertex may be placed, in world units: one (an image's pixels) by
|
|
89
|
+
* default, finer for a dataset whose coordinates are not pixels (see OverlayProjection).
|
|
74
90
|
*/
|
|
75
|
-
private worldQuantum;
|
|
76
91
|
setWorldQuantum(quantum: number): void;
|
|
77
92
|
destroy(): void;
|
|
78
|
-
/** Pointer client coords → world coords, snapped to {@link worldQuantum}. */
|
|
79
|
-
private toImage;
|
|
80
|
-
/**
|
|
81
|
-
* World units spanned by one screen pixel, measured through the viewer's own transform.
|
|
82
|
-
*
|
|
83
|
-
* Read from the transform rather than from the camera, so it holds for both the 2D and
|
|
84
|
-
* the 3D screen-space adapters without either having to expose a zoom. Falls back to 1
|
|
85
|
-
* if the transform gives nothing usable, which keeps the established pixel behaviour
|
|
86
|
-
* rather than collapsing the threshold to zero and recording a point per event.
|
|
87
|
-
*/
|
|
88
|
-
private worldPerCanvasPixel;
|
|
89
|
-
/** Image coords → SVG-local px (the svg overlays the canvas at the same client rect). */
|
|
90
|
-
private toLocal;
|
|
91
93
|
private readonly onPointerDown;
|
|
94
|
+
private pointerDown;
|
|
92
95
|
private readonly onPointerMove;
|
|
93
96
|
private readonly onPointerUp;
|
|
97
|
+
/**
|
|
98
|
+
* The pointer gesture ended without a pointerup (the browser cancelled it, or capture was
|
|
99
|
+
* lost): end it without committing. Also fires after every normal release, when nothing
|
|
100
|
+
* is live any more.
|
|
101
|
+
*/
|
|
102
|
+
private readonly onPointerCancel;
|
|
103
|
+
/**
|
|
104
|
+
* End whatever pointer gesture is live without committing it: close the store batch a drag
|
|
105
|
+
* opened (so later edits are emitted again) and forget the drag (so a bare hover no longer
|
|
106
|
+
* moves the region), and drop the marquee and a rectangle/freehand draft. A click-placed
|
|
107
|
+
* polygon is not a pointer gesture and survives.
|
|
108
|
+
*/
|
|
109
|
+
private endGesture;
|
|
94
110
|
/** Click-to-place polygon: add a vertex, or close when clicking near the first one. */
|
|
95
111
|
private handlePolygonClick;
|
|
96
112
|
private readonly onDblClick;
|
|
97
113
|
/** The currently-selected region (single selection), or null. */
|
|
98
114
|
private selectedRegion;
|
|
99
|
-
/** Screen distance (px) between a client point and an image coord. */
|
|
100
|
-
private screenDist;
|
|
101
115
|
/**
|
|
102
116
|
* Start a select/move interaction: grab a handle (rectangle corner) or vertex of the already-
|
|
103
117
|
* selected region first; otherwise select the topmost region under the cursor and drag its body.
|
|
104
118
|
*/
|
|
105
119
|
private beginManipulation;
|
|
106
|
-
/**
|
|
120
|
+
/** Show the marquee where it is now (only the marquee element: no full region redraw). */
|
|
107
121
|
private updateMarqueeEl;
|
|
108
|
-
/**
|
|
109
|
-
|
|
110
|
-
/** Test whether a client point grabs a rectangle corner or a polygon vertex of `region`. */
|
|
111
|
-
private hitHandle;
|
|
112
|
-
/** Apply the live drag for the active manipulation (image coords `ix,iy`). */
|
|
113
|
-
private applyManipulation;
|
|
114
|
-
/** addpoint mode: insert a vertex on the selected polygon's nearest edge at the click. */
|
|
122
|
+
/** addpoint mode: insert a vertex at the click on the selected polygon's nearest edge
|
|
123
|
+
* (exterior or a hole ring). */
|
|
115
124
|
private handleAddPoint;
|
|
116
|
-
/** deletepoint mode: remove the selected polygon's vertex nearest the click
|
|
125
|
+
/** deletepoint mode: remove the selected polygon's vertex nearest the click (exterior or a
|
|
126
|
+
* hole ring). */
|
|
117
127
|
private handleDeletePoint;
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
/** Finalize a rubber-band marquee: select every region whose bounding box it overlaps (a tiny
|
|
121
|
-
* marquee is treated as a click on empty space → clear the selection). */
|
|
128
|
+
/** Finalize a rubber-band marquee: select every region whose bounding box it overlaps (a
|
|
129
|
+
* marquee under {@link MIN_MARQUEE_PX} is a click on empty space → clear the selection). */
|
|
122
130
|
private finishMarquee;
|
|
123
|
-
/** A region's bounding box in image coords (rectangle, polygon, or multipolygon), or null. */
|
|
124
|
-
private regionBBox;
|
|
125
131
|
private commitRectangle;
|
|
126
132
|
private commitPolygon;
|
|
127
|
-
private hitTest;
|
|
128
133
|
/** Show or hide the drawn regions. A region being drawn stays visible either way. */
|
|
129
134
|
setRegionsVisible(visible: boolean): void;
|
|
135
|
+
/** Follow a camera move: one transform attribute plus the screen-space elements. */
|
|
136
|
+
private updateCamera;
|
|
137
|
+
/**
|
|
138
|
+
* Rebuild every element from the store: the regions in world coordinates (one transformed
|
|
139
|
+
* group), their labels, and the overlay. Reads no layout: the camera affine is the viewer's.
|
|
140
|
+
*/
|
|
130
141
|
redraw(): void;
|
|
131
|
-
/**
|
|
132
|
-
private
|
|
133
|
-
/** Draw grab handles for the selected region: rectangle corners or polygon vertices. */
|
|
134
|
-
private drawHandles;
|
|
135
|
-
/** Draw one bezier control point (anchor + handle offset) as a small circle connected to its
|
|
136
|
-
* anchor by a tangent line. `handle` is the [dx,dy] offset from the anchor in image space. */
|
|
137
|
-
private drawBezierHandle;
|
|
138
|
-
private buildRegionEl;
|
|
139
|
-
/** Path data for a polygon: the exterior ring (bezier or straight) plus any holes (bezier when
|
|
140
|
-
* the donut carries hole handles, else straight) as sub-paths — even-odd fill cuts them out. */
|
|
141
|
-
private polygonPathData;
|
|
142
|
-
/** SVG path data for a straight ring/polyline in image coords (closed appends `Z`). */
|
|
143
|
-
private straightPath;
|
|
144
|
-
/** SVG cubic-bezier path data for any ring (exterior or hole): anchors joined by cubic segments
|
|
145
|
-
* whose control points are `anchor + handleOut` (leaving) and `nextAnchor + handleIn` (arriving),
|
|
146
|
-
* in image space. Used for both the exterior and (donut) hole rings. */
|
|
147
|
-
private ringBezierPath;
|
|
148
|
-
private style;
|
|
149
|
-
/** Draw the in-progress rectangle / path preview. */
|
|
150
|
-
private drawDraft;
|
|
151
|
-
private styleDraft;
|
|
142
|
+
/** Rebuild the screen-space overlay only: the selected regions' handles and the draft. */
|
|
143
|
+
private renderOverlay;
|
|
152
144
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { Viewer } from 'napari-js';
|
|
2
|
+
import { IImageInfo } from '../../contracts/image.contract';
|
|
3
|
+
import { IHistogram } from '../../contracts/channel-histogram-api.contract';
|
|
4
|
+
import { IIsosurfaceControls, ISurface3dControls } from '../../contracts/visualizer.contract';
|
|
5
|
+
import { SpatialObservations } from '../../contracts/spatial-dataset.contract';
|
|
6
|
+
import { VisualizerStore } from '../../store/visualizer-store.service';
|
|
7
|
+
import { RegionStore } from '../../store/region-store.service';
|
|
8
|
+
import { NapariTileClient } from './napari-tile-client';
|
|
9
|
+
import { NapariDisplayState } from './napari-display-state';
|
|
10
|
+
import { LoadingBadgeState } from './napari-loading-state';
|
|
11
|
+
import { NapariToolBridge } from './napari-tool-bridge';
|
|
12
|
+
/**
|
|
13
|
+
* What one `plot()` mounts into the viewer (review Appendix B): the 2D image (alone, under the
|
|
14
|
+
* region-centroid scatter, or under the spatial markers), a volume, a surface, a 3D scatter or the
|
|
15
|
+
* spatial 3D cloud. The service picks one per plot type and talks to it through this interface
|
|
16
|
+
* instead of asking which layer handle happens to be non-null; a scene owns every layer, key,
|
|
17
|
+
* subscription and listener it creates, and {@link dispose} drops them all — so a re-plot can no
|
|
18
|
+
* longer inherit a stale "already built" key from the previous one (NAPARI-SVC-1, -8).
|
|
19
|
+
*/
|
|
20
|
+
export interface NapariScene {
|
|
21
|
+
/** Build the scene into the viewer. Resolves once the first frame's data is in. */
|
|
22
|
+
mount(): Promise<void>;
|
|
23
|
+
/** The stack slider moved to `z` (already recorded as the image's slice). */
|
|
24
|
+
setZ(z: number): void;
|
|
25
|
+
/** The histogram pane's distribution for `channel`, or null when there is none (yet). */
|
|
26
|
+
histogram(channel: number, bins: number): IHistogram | null;
|
|
27
|
+
/** The isosurface threshold controls (volume scenes only). */
|
|
28
|
+
isoControls?(): IIsosurfaceControls | null;
|
|
29
|
+
/** The 3D camera/axes/wireframe controls (3D scenes only). */
|
|
30
|
+
surface3dControls?(): ISurface3dControls | null;
|
|
31
|
+
/** Bilinear vs nearest-neighbour image sampling changed (2D image scenes). */
|
|
32
|
+
setImageSmoothing?(enabled: boolean): void;
|
|
33
|
+
/** The overview navigator was shown or hidden (2D image scenes). */
|
|
34
|
+
setNavigatorVisible?(visible: boolean): void;
|
|
35
|
+
/** Observations projected to canvas pixels (the spatial 3D cloud), or null. */
|
|
36
|
+
screenProjection?(obs: SpatialObservations): Float32Array | null;
|
|
37
|
+
/** Remove everything the scene added; called before the viewer is disposed. */
|
|
38
|
+
dispose(): void;
|
|
39
|
+
}
|
|
40
|
+
/** Viewer settings that outlive a scene: a re-plot keeps them. */
|
|
41
|
+
export interface NapariSettings {
|
|
42
|
+
/** Decimate factor for the 3D types (1 = Full, 2 = ½, 4 = ¼ default, 8 = ⅛). */
|
|
43
|
+
resolutionScale: number;
|
|
44
|
+
/** Whether the 2D overview navigator is shown (the same host setting OSD's navigator honours). */
|
|
45
|
+
navigatorVisible: boolean;
|
|
46
|
+
/** Image smoothing (bilinear) vs nearest-neighbour (crisp pixels, the default). */
|
|
47
|
+
imageSmoothing: boolean;
|
|
48
|
+
/** The 3D axes gizmo's on/off choice. */
|
|
49
|
+
axesVisible: boolean;
|
|
50
|
+
/** The surface's wireframe choice. */
|
|
51
|
+
surfaceWireframe: boolean;
|
|
52
|
+
/** The volume's user Z-height factor (1 = the volume's natural proportions). */
|
|
53
|
+
volumeZScale: number;
|
|
54
|
+
}
|
|
55
|
+
/** The stack-loading flag and progress the host shows while frames load. */
|
|
56
|
+
export interface StackProgress {
|
|
57
|
+
loading(on: boolean): void;
|
|
58
|
+
progress(percent: number): void;
|
|
59
|
+
}
|
|
60
|
+
/** Everything a scene is built from: the viewer and its DOM, the service's collaborators, and the
|
|
61
|
+
* service state a scene reads live. */
|
|
62
|
+
export interface SceneContext {
|
|
63
|
+
readonly viewer: Viewer;
|
|
64
|
+
readonly host: HTMLElement;
|
|
65
|
+
readonly canvas: HTMLCanvasElement;
|
|
66
|
+
/** The scene's lifetime: aborted when the service resets into the next scene. */
|
|
67
|
+
readonly signal: AbortSignal;
|
|
68
|
+
/** Frame loading (volume assembly, surface preload): aborted by a reset AND by
|
|
69
|
+
* `cancelLoading()`, which renews it — so read it when a load starts. */
|
|
70
|
+
loading(): AbortSignal;
|
|
71
|
+
/** The image on screen and its current slice, as `load()`/`setZIndex()` recorded them. */
|
|
72
|
+
info(): IImageInfo | undefined;
|
|
73
|
+
z(): number;
|
|
74
|
+
readonly tiles: NapariTileClient;
|
|
75
|
+
readonly display: NapariDisplayState;
|
|
76
|
+
readonly badge: LoadingBadgeState;
|
|
77
|
+
readonly tools: NapariToolBridge;
|
|
78
|
+
readonly store: VisualizerStore;
|
|
79
|
+
readonly regionStore: RegionStore;
|
|
80
|
+
readonly settings: NapariSettings;
|
|
81
|
+
readonly stack: StackProgress;
|
|
82
|
+
/** The image's full-resolution size as the scene drew it — read by the readback, the camera
|
|
83
|
+
* fit and `getTrueImageSize()`; it outlives the scene. */
|
|
84
|
+
imageSize(): {
|
|
85
|
+
width: number;
|
|
86
|
+
height: number;
|
|
87
|
+
};
|
|
88
|
+
setImageSize(width: number, height: number): void;
|
|
89
|
+
/** Fit the 2D camera to the image on the next frame. */
|
|
90
|
+
fitCameraSoon(): void;
|
|
91
|
+
outsideZone<T>(fn: () => T): T;
|
|
92
|
+
inZone<T>(fn: () => T): T;
|
|
93
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { ImageLayer, Viewer } from 'napari-js';
|
|
2
|
+
import { IHistogram } from '../../contracts/channel-histogram-api.contract';
|
|
3
|
+
import { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { SpatialViewState } from '../../contracts/display-types';
|
|
5
|
+
import { SpatialSelectionMask } from '../../spatial/spatial-selection';
|
|
6
|
+
import { NapariSpatialTileLayers } from './napari-spatial-tiles';
|
|
7
|
+
import { Image2dScene } from './napari-image-2d-scene';
|
|
8
|
+
import { SpatialSceneBase, SpatialSession, SpatialTileOwner } from './napari-spatial-scene';
|
|
9
|
+
import type { NapariScene, SceneContext } from './napari-scene';
|
|
10
|
+
/**
|
|
11
|
+
* SPATIAL_OMICS (review Appendix B, cluster J): the tissue image (an {@link Image2dScene}) with one
|
|
12
|
+
* marker per observation, coloured by an annotation column or a gene, the gene map under the
|
|
13
|
+
* cells, and the level-of-detail tile layers (outlines, transcripts, density) over them. The
|
|
14
|
+
* markers rebuild whenever the dataset or the view state changes, so switching the colour-by
|
|
15
|
+
* column does not remount the scene.
|
|
16
|
+
*
|
|
17
|
+
* Sets up the full 2D interaction stack — region overlay, pixel tools, readback currency — exactly
|
|
18
|
+
* as the plain image view does. That is NOT optional here: this mode's selection is driven by
|
|
19
|
+
* drawn ROIs, so without the overlay there is no way to make a selection at all.
|
|
20
|
+
*/
|
|
21
|
+
export declare class Spatial2dScene extends SpatialSceneBase implements NapariScene, SpatialTileOwner {
|
|
22
|
+
readonly image: Image2dScene;
|
|
23
|
+
/** The observation markers, and which dataset/plane they were built for — so a display-only
|
|
24
|
+
* change (size, colour, opacity, selection) can update them in place. */
|
|
25
|
+
private points;
|
|
26
|
+
private layerKey;
|
|
27
|
+
/** The observation each marker is, in draw order; null when every observation is drawn. */
|
|
28
|
+
private drawn;
|
|
29
|
+
/** The gene map's layer and the inputs it was coloured for (its field is cached in the session,
|
|
30
|
+
* on a clock of its own). */
|
|
31
|
+
geneMapLayer: ImageLayer | null;
|
|
32
|
+
private geneMapKey;
|
|
33
|
+
/** The dataset the camera has been framed on — see {@link frameOnce}. */
|
|
34
|
+
private framed;
|
|
35
|
+
/** The gene-map estimate in flight (off the main thread past the worker threshold,
|
|
36
|
+
* SPATIAL-19): a new field key supersedes — and aborts — it; a rebuild that leaves the key
|
|
37
|
+
* alone lets it finish. */
|
|
38
|
+
private readonly geneMapLoads;
|
|
39
|
+
/** `noImage`: an image-less dataset opened before any image — the observations alone. */
|
|
40
|
+
constructor(ctx: SceneContext, session: SpatialSession, noImage?: boolean);
|
|
41
|
+
mount(): Promise<void>;
|
|
42
|
+
setZ(z: number): void;
|
|
43
|
+
histogram(channel: number, bins: number): IHistogram | null;
|
|
44
|
+
setImageSmoothing(enabled: boolean): void;
|
|
45
|
+
setNavigatorVisible(visible: boolean): void;
|
|
46
|
+
dispose(): void;
|
|
47
|
+
canvasSize(): [number, number];
|
|
48
|
+
polygonsShownChanged(): void;
|
|
49
|
+
protected afterChange(): void;
|
|
50
|
+
protected hoverTiles(): NapariSpatialTileLayers | null;
|
|
51
|
+
/**
|
|
52
|
+
* The observation under a client position: napari-js's pick on the marker layer itself (a grid
|
|
53
|
+
* over its positions, rebuilt only when they change), so the tooltip cannot name a cell that is
|
|
54
|
+
* not drawn, then the drawn index mapped back to the observation.
|
|
55
|
+
*
|
|
56
|
+
* A marker is hit anywhere on its drawn disc, or within `slackPx` screen pixels of its centre
|
|
57
|
+
* when it is smaller than that (a 1.5 px dot still has to be hoverable), and of several hits the
|
|
58
|
+
* NEAREST centre wins (an exact tie goes to the one drawn on top). Not napari's `'topmost'`: the
|
|
59
|
+
* slack is wider than most markers, and over a dense field of small ones "the last drawn within
|
|
60
|
+
* 10 px" names a neighbour rather than the cell under the cursor.
|
|
61
|
+
*/
|
|
62
|
+
protected pickObservation(clientX: number, clientY: number, slackPx: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* Whether the markers are drawn: when the user wants them, and not while cell outlines are on
|
|
65
|
+
* screen — then a cell IS its outline, and a circle on top of it is noise. Zoomed out past the
|
|
66
|
+
* outline threshold, the circles stand in for the cells.
|
|
67
|
+
*/
|
|
68
|
+
private pointsVisible;
|
|
69
|
+
/**
|
|
70
|
+
* Redraw the markers over a freshly rendered image. Two reasons, both invisible from the
|
|
71
|
+
* spatial store — which is why a scrub or a re-render never reached the markers on its own:
|
|
72
|
+
* - the image render CLEARS the layer list, taking the markers with it;
|
|
73
|
+
* - over a volume-backed dataset the displayed plane decides which observations belong on
|
|
74
|
+
* screen at all, so the cells have to move with the section rather than hang over another.
|
|
75
|
+
*/
|
|
76
|
+
private redrawMarkers;
|
|
77
|
+
/** (Re)build the observation marker layer for the current dataset + view state. */
|
|
78
|
+
protected rebuild(dataset: SpatialDataset | null, view: SpatialViewState, selection?: SpatialSelectionMask): Promise<void>;
|
|
79
|
+
/** Nothing to draw: drop the markers and the gene map. */
|
|
80
|
+
private removeLayers;
|
|
81
|
+
/**
|
|
82
|
+
* Draw the observation markers over the image (and the gene map): restyled in place for a
|
|
83
|
+
* display-only change, else a new layer.
|
|
84
|
+
*/
|
|
85
|
+
private drawMarkers;
|
|
86
|
+
/**
|
|
87
|
+
* Tell the region overlay how finely a drawn vertex may be placed.
|
|
88
|
+
*
|
|
89
|
+
* Region geometry is stored in whole world units, which is right when the world IS
|
|
90
|
+
* pixels — a region should align to them. It is wrong for a dataset that registers onto
|
|
91
|
+
* no image: seqFISH's observations span about 5 x 7 units in total, so whole-unit
|
|
92
|
+
* vertices leave roughly six by eight placeable positions across the entire sample and
|
|
93
|
+
* an ROI cannot be drawn at any zoom. Nothing errors; the tool just cannot express the
|
|
94
|
+
* shape.
|
|
95
|
+
*
|
|
96
|
+
* Keyed on whether the dataset brings PIXELS rather than on the extent, because the
|
|
97
|
+
* extent cannot tell the two apart — 2,000 units is a small slide or a large section
|
|
98
|
+
* depending only on what the units are, and only the dataset knows.
|
|
99
|
+
*/
|
|
100
|
+
private setRegionGridFor;
|
|
101
|
+
/**
|
|
102
|
+
* Hide the image layer for a dataset that brings no image of its own.
|
|
103
|
+
*
|
|
104
|
+
* The host's viewer keeps whatever image was last loaded, and for a dataset that
|
|
105
|
+
* registers onto none that picture belongs to something else entirely — the example's
|
|
106
|
+
* default slide, say. It is not merely irrelevant: the two live in different coordinate
|
|
107
|
+
* spaces (image pixels against the embedding's own units), so the leftover is magnified
|
|
108
|
+
* roughly a hundredfold. At the fitted zoom the camera sits inside its corner, where it
|
|
109
|
+
* reads as blank background, and it appears only once you zoom out far enough to find
|
|
110
|
+
* it — which is exactly how it gets noticed.
|
|
111
|
+
*
|
|
112
|
+
* Hidden rather than removed, and hidden HERE rather than by clearing the host's image
|
|
113
|
+
* state: that state drives the whole render pipeline, including a Plotly backend whose
|
|
114
|
+
* fields are declared with definite-assignment assertions, so emptying it throws from
|
|
115
|
+
* whichever field the next path happens to read. This touches one layer's visibility
|
|
116
|
+
* and nothing else.
|
|
117
|
+
*/
|
|
118
|
+
hideForeignImage(viewer: Pick<Viewer, 'layers' | 'requestRender'>, datasetHasPixels: boolean): void;
|
|
119
|
+
/**
|
|
120
|
+
* Frame the camera on the observations, for a dataset that brings no image.
|
|
121
|
+
*
|
|
122
|
+
* The 2D camera is normally fitted to the IMAGE, because the observations are in that
|
|
123
|
+
* image's pixel space and framing the image frames them too. A dataset with no
|
|
124
|
+
* reference image has coordinates in its own units instead — seqFISH's span about
|
|
125
|
+
* 5x7 — so the image framing left over from whatever was on screen before puts the
|
|
126
|
+
* whole cloud offscreen: measured at 9.7 x 13.4 PIXELS, centred 256px from where the
|
|
127
|
+
* camera was looking. The points are all there and drawn; they are a speck. Which
|
|
128
|
+
* looks exactly like the dataset having failed to load.
|
|
129
|
+
*
|
|
130
|
+
* Once per dataset, as napari-js's `fit3d: 'once'` does for the cloud: re-colouring,
|
|
131
|
+
* slicing or picking a gene re-adds this layer, and re-framing on those would move
|
|
132
|
+
* the camera under the user — the camera tools and the canvas drag are meant to be
|
|
133
|
+
* the only things that do.
|
|
134
|
+
*/
|
|
135
|
+
private frameOnce;
|
|
136
|
+
/**
|
|
137
|
+
* The **gene map**: the active gene's expression as a continuous field drawn under
|
|
138
|
+
* the cells.
|
|
139
|
+
*
|
|
140
|
+
* A scatter coloured by a gene says which cells express it; it cannot say where,
|
|
141
|
+
* because the eye will not integrate thousands of dots into a territory. The field
|
|
142
|
+
* is a kernel-weighted MEAN per cell (see `spatial-expression.ts`), so a dense
|
|
143
|
+
* region does not glow merely for being dense, and it is transparent wherever no
|
|
144
|
+
* cell was measured — an unsampled gap must not read as "not expressed".
|
|
145
|
+
*
|
|
146
|
+
* It shares the points' LUT, percentile window and log flag, so the layer under
|
|
147
|
+
* the cells and the cells themselves cannot disagree about what a colour means.
|
|
148
|
+
*
|
|
149
|
+
* Estimated on the DISPLAYED image's pixel grid, coarsened so the long side is at
|
|
150
|
+
* most `GENE_MAP_MAX_SIDE`: a smooth field gains nothing from a slide's full
|
|
151
|
+
* resolution. For a volume-backed dataset that grid is the current slice, and only
|
|
152
|
+
* that plane's observations are included — the same rule the markers follow.
|
|
153
|
+
*/
|
|
154
|
+
private ensureGeneMap;
|
|
155
|
+
/**
|
|
156
|
+
* Per-observation colours for the current view state, or a single flat colour when nothing is
|
|
157
|
+
* selected to colour by. Categorical columns use the column's own palette; continuous columns
|
|
158
|
+
* and gene vectors go through the active colormap with a percentile-clipped window.
|
|
159
|
+
*/
|
|
160
|
+
private faceColors;
|
|
161
|
+
/** Continuous values → RGBA through the active colormap and a clipped window. */
|
|
162
|
+
encodeContinuous(values: Float32Array, view: SpatialViewState, muted?: Uint8Array | null): Float32Array;
|
|
163
|
+
}
|