@jax-data-science/sci-image-visualizer 0.8.2 → 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 +361 -4184
- 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 -34430
- 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 -878
- 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
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import type { Layer, Viewer } from 'napari-js';
|
|
2
2
|
import type { Rgb } from '../../contracts/colormap-lut';
|
|
3
|
-
import {
|
|
3
|
+
import type { SpatialDataPort } from '../../contracts/ports/spatial-data.port';
|
|
4
4
|
import type { SpatialViewState } from '../../contracts/display-types';
|
|
5
|
-
import { SpatialDataset
|
|
6
|
-
import { SpatialSelectionMask } from '../../spatial/spatial-selection';
|
|
7
|
-
import { DataRect } from '../../spatial/
|
|
5
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
6
|
+
import type { SpatialSelectionMask } from '../../spatial/spatial-selection';
|
|
7
|
+
import { DataRect } from '../../spatial/lod';
|
|
8
|
+
import { DensityStats, TranscriptEstimate } from './spatial-tiles/density-layer';
|
|
9
|
+
export type { TranscriptEstimate } from './spatial-tiles/density-layer';
|
|
10
|
+
/** What the tile layers read from, and report to, the visualizer service. */
|
|
11
|
+
export interface SpatialTileHost {
|
|
12
|
+
/** Latest dataset/view/selection, as the spatial subscription saw them. */
|
|
13
|
+
latest(): [SpatialDataset | null, SpatialViewState, SpatialSelectionMask] | null;
|
|
14
|
+
/** Canvas size in CSS pixels. */
|
|
15
|
+
canvasSize(): [number, number];
|
|
16
|
+
/** The continuous LUT the view is using (so cells coloured by a gene match the markers). */
|
|
17
|
+
continuousLut(view: SpatialViewState): Rgb[];
|
|
18
|
+
/** Outlines appeared or disappeared: the markers' visibility follows. */
|
|
19
|
+
polygonsShownChanged(shown: boolean): void;
|
|
20
|
+
/** The density window changed (auto-derived or set). */
|
|
21
|
+
densityChanged?(stats: DensityStats): void;
|
|
22
|
+
/** Estimated transcripts in view for the current selection, against the budget. */
|
|
23
|
+
estimateChanged?(estimate: TranscriptEstimate | null): void;
|
|
24
|
+
/** Transcripts of each selected gene inside the view, or null when not known. */
|
|
25
|
+
geneCountsChanged?(counts: Record<string, number> | null): void;
|
|
26
|
+
/** The layers whose data is in flight now ("Transcripts", "Cells"…); empty when none. */
|
|
27
|
+
loadingChanged?(layers: string[]): void;
|
|
28
|
+
}
|
|
8
29
|
/**
|
|
9
30
|
* Level-of-detail cell outlines, transcripts and transcript density for the 2D spatial view.
|
|
10
31
|
*
|
|
@@ -15,11 +36,19 @@ import { DataRect } from '../../spatial/spatial-tiles';
|
|
|
15
36
|
* and which level of detail the zoom calls for. Keeping that loop — plan on camera idle,
|
|
16
37
|
* fetch tiles, merge, draw — out of the visualizer service keeps both readable.
|
|
17
38
|
*
|
|
39
|
+
* COLLABORATORS (spatial-tiles/)
|
|
40
|
+
* ------------------------------
|
|
41
|
+
* This class is the coordinator: it debounces camera moves, runs one plan per idle camera
|
|
42
|
+
* (a {@link PlanContext}) and retries an incomplete one. The work is done by
|
|
43
|
+
* {@link CellLayers}, {@link TranscriptLayers} (with {@link TranscriptJobPlanner} deciding what
|
|
44
|
+
* to fetch), {@link DensityLayer} and {@link TranscriptEstimator}; {@link TranscriptHover}
|
|
45
|
+
* names the drawn markers, and {@link OrderedLayerGroups} keeps their layers in order.
|
|
46
|
+
*
|
|
18
47
|
* LAYER ORDER
|
|
19
48
|
* -----------
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* The service's observation markers sit under all of them; while outlines are drawn the
|
|
49
|
+
* Cell fill, cell outline, nucleus outline, the transcript density, then transcripts on top
|
|
50
|
+
* ({@link TILE_LAYER_ORDER}); a plan restores the order once, after all its groups are in
|
|
51
|
+
* place. The service's observation markers sit under all of them; while outlines are drawn the
|
|
23
52
|
* markers are hidden (a cell is its outline then, not a dot), so the cells never have to
|
|
24
53
|
* be ordered against them. The density goes OVER the markers on purpose: under 10^5
|
|
25
54
|
* dots it would only show in the gaps between cells. {@link afterObservations} restores
|
|
@@ -31,285 +60,49 @@ import { DataRect } from '../../spatial/spatial-tiles';
|
|
|
31
60
|
* level changes. Recolouring (a new cell-type column, a selection) only rewrites the
|
|
32
61
|
* per-shape values — the geometry is not re-expanded.
|
|
33
62
|
*/
|
|
34
|
-
export interface SpatialTileHost {
|
|
35
|
-
/** Latest dataset/view/selection, as the spatial subscription saw them. */
|
|
36
|
-
latest(): [SpatialDataset | null, SpatialViewState, SpatialSelectionMask] | null;
|
|
37
|
-
/** Canvas size in CSS pixels. */
|
|
38
|
-
canvasSize(): [number, number];
|
|
39
|
-
/** The continuous LUT the view is using (so cells coloured by a gene match the markers). */
|
|
40
|
-
continuousLut(view: SpatialViewState): Rgb[];
|
|
41
|
-
/** Outlines appeared or disappeared: the markers' visibility follows. */
|
|
42
|
-
polygonsShownChanged(shown: boolean): void;
|
|
43
|
-
/** The density window changed (auto-derived or set). */
|
|
44
|
-
densityChanged?(stats: {
|
|
45
|
-
lo: number;
|
|
46
|
-
hi: number;
|
|
47
|
-
max: number;
|
|
48
|
-
}): void;
|
|
49
|
-
/** Estimated transcripts in view for the current selection, against the budget. */
|
|
50
|
-
estimateChanged?(estimate: TranscriptEstimate | null): void;
|
|
51
|
-
/** Transcripts of each selected gene inside the view, or null when not known. */
|
|
52
|
-
geneCountsChanged?(counts: Record<string, number> | null): void;
|
|
53
|
-
/** The layers whose data is in flight now ("Transcripts", "Cells"…); empty when none. */
|
|
54
|
-
loadingChanged?(layers: string[]): void;
|
|
55
|
-
}
|
|
56
|
-
/** Xenium Explorer's "Estimated Transcript Points". */
|
|
57
|
-
export interface TranscriptEstimate {
|
|
58
|
-
/** Transcripts of the visible genes estimated to be in view. */
|
|
59
|
-
points: number;
|
|
60
|
-
/** The marker budget. */
|
|
61
|
-
max: number;
|
|
62
|
-
}
|
|
63
|
-
/** A transcript fetch the planner can key before running. */
|
|
64
|
-
interface TranscriptJob {
|
|
65
|
-
/** What one entry is — decides what hovering it says. */
|
|
66
|
-
kind: 'genes' | 'individual' | 'bins';
|
|
67
|
-
/** For bins: their size and grid origin, so a hovered bin's square can be recovered. */
|
|
68
|
-
bin?: {
|
|
69
|
-
size: number;
|
|
70
|
-
origin: [number, number];
|
|
71
|
-
};
|
|
72
|
-
/** Identifies what will be drawn, so an unchanged plan is a no-op. */
|
|
73
|
-
key: string;
|
|
74
|
-
/** Fetch and merge; `px` is each entry's marker diameter in screen pixels. A job may
|
|
75
|
-
* switch to another kind once it sees the data (individual → bins); it then says so. */
|
|
76
|
-
load(): Promise<TranscriptLoad>;
|
|
77
|
-
}
|
|
78
|
-
interface TranscriptLoad {
|
|
79
|
-
merged: SpatialTranscriptTile;
|
|
80
|
-
px: Float32Array;
|
|
81
|
-
/** For a gene selection: group it on this bin ladder once hidden genes are dropped. */
|
|
82
|
-
ladder?: {
|
|
83
|
-
baseBin: number;
|
|
84
|
-
levels: number;
|
|
85
|
-
start: number | null;
|
|
86
|
-
};
|
|
87
|
-
/** Already one marker per cluster per bin (zoomed out, from the density grids): no cells. */
|
|
88
|
-
clustered?: {
|
|
89
|
-
group: Int32Array;
|
|
90
|
-
names: string[];
|
|
91
|
-
genes: string[][];
|
|
92
|
-
bin: number;
|
|
93
|
-
origin: [number, number];
|
|
94
|
-
};
|
|
95
|
-
kind?: TranscriptJob['kind'];
|
|
96
|
-
bin?: TranscriptJob['bin'];
|
|
97
|
-
}
|
|
98
63
|
export declare class NapariSpatialTileLayers {
|
|
99
|
-
private readonly port;
|
|
100
64
|
private readonly host;
|
|
101
65
|
private viewer;
|
|
102
66
|
private cameraOff;
|
|
103
67
|
private timer;
|
|
104
|
-
/** Set when a tile of the current plan failed to load (see fetchAll). */
|
|
105
|
-
private planIncomplete;
|
|
106
68
|
/** Consecutive retries of an incomplete view. */
|
|
107
69
|
private tileRetries;
|
|
108
70
|
private token;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
private
|
|
113
|
-
|
|
114
|
-
private
|
|
115
|
-
private
|
|
116
|
-
private
|
|
117
|
-
private
|
|
118
|
-
|
|
119
|
-
private
|
|
120
|
-
private selectionRevision;
|
|
71
|
+
/** The overlays' layers, one per group, in their fixed order. */
|
|
72
|
+
private readonly groups;
|
|
73
|
+
/** Loads in flight, per layer label, for the loading badge. */
|
|
74
|
+
private readonly loads;
|
|
75
|
+
private readonly lookup;
|
|
76
|
+
private readonly jobs;
|
|
77
|
+
private readonly density;
|
|
78
|
+
private readonly cells;
|
|
79
|
+
private readonly estimator;
|
|
80
|
+
private readonly hover;
|
|
81
|
+
private readonly transcripts;
|
|
121
82
|
constructor(port: SpatialDataPort, host: SpatialTileHost);
|
|
122
83
|
attach(viewer: Viewer): void;
|
|
123
|
-
/**
|
|
124
|
-
|
|
125
|
-
* cluster is its own) per bin of the pyramid ladder, starting at the finest bin whose
|
|
126
|
-
* markers are 14 px apart and stepping up while the markers would exceed the budget.
|
|
127
|
-
* Null to draw every transcript: zoomed in, with the selection within the budget.
|
|
128
|
-
*/
|
|
129
|
-
private groupSelection;
|
|
130
|
-
/** µm per observation unit of the drawn dataset, for describing a grouped marker's area. */
|
|
131
|
-
private micronsPerUnit;
|
|
132
|
-
/** Loads in flight, per layer label, for the loading badge. */
|
|
133
|
-
private readonly loading;
|
|
134
|
-
/** Report `label` loading while `work` is in flight. */
|
|
135
|
-
private track;
|
|
136
|
-
/** The loaded per-gene transcripts the in-view counts are taken from. */
|
|
137
|
-
private countSource;
|
|
84
|
+
/** Stop following the camera and remove every overlay layer from the viewer. */
|
|
85
|
+
detach(): void;
|
|
138
86
|
/**
|
|
139
87
|
* Transcripts of each selected gene inside `rect`: each entry counts for the transcripts it
|
|
140
88
|
* stands for (an aggregate at a coarse level holds several). Null without per-gene data.
|
|
141
89
|
*/
|
|
142
90
|
geneCountsIn(rect: DataRect): Record<string, number> | null;
|
|
91
|
+
/**
|
|
92
|
+
* Tooltip lines for the transcript marker under world point `(wx, wy)`, or null; the
|
|
93
|
+
* server's details arrive through `onDetails` once the pointer rests (see TranscriptHover).
|
|
94
|
+
*/
|
|
95
|
+
hoverAt(wx: number, wy: number, radiusWorld: number, onDetails: (lines: string[]) => void): string[] | null;
|
|
143
96
|
/** Whether `layer` is one of the overlays drawn here (density, cells, transcripts). */
|
|
144
97
|
owns(layer: Layer): boolean;
|
|
145
|
-
detach(): void;
|
|
146
98
|
/** True while outlines are on screen — the service hides its dots then. */
|
|
147
99
|
get outlinesShown(): boolean;
|
|
100
|
+
/** The density window in use and the densest bin, for the panel's threshold control. */
|
|
101
|
+
get densityStats(): DensityStats | null;
|
|
148
102
|
/** Dataset, view or selection changed: re-plan now rather than on camera idle. */
|
|
149
103
|
refresh(): void;
|
|
150
104
|
/** Called right after the service adds its marker layer: everything goes back on top. */
|
|
151
105
|
afterObservations(): void;
|
|
152
106
|
private schedule;
|
|
153
107
|
private plan;
|
|
154
|
-
private planCells;
|
|
155
|
-
private selectionRev;
|
|
156
|
-
/** Per-shape values + colormap for the rings' owners. */
|
|
157
|
-
/**
|
|
158
|
-
* Per-shape values + colormap for the rings' owners, by the view's cell-colour mode
|
|
159
|
-
* (Xenium Explorer's "Cell Color"). A selection mutes what it leaves out.
|
|
160
|
-
*/
|
|
161
|
-
private cellColors;
|
|
162
|
-
/** Codes of the group column that are switched off, or null when none are. */
|
|
163
|
-
private hiddenCodes;
|
|
164
|
-
private cellTypeColumnName;
|
|
165
|
-
private categoricalCodes;
|
|
166
|
-
private categoricalColormap;
|
|
167
|
-
/**
|
|
168
|
-
* The cell rings (and, for "both", the nucleus rings) covering `rect` at `level`, minus
|
|
169
|
-
* the hidden groups — reused when nothing that decides them changed. Null when the
|
|
170
|
-
* view went stale or the dataset has no set to draw.
|
|
171
|
-
*/
|
|
172
|
-
private cellGeometry;
|
|
173
|
-
private planTranscripts;
|
|
174
|
-
/** One sized circle per entry, the size saying how many transcripts it stands for. */
|
|
175
|
-
private drawTranscriptCircles;
|
|
176
|
-
private drawTranscriptGlyphs;
|
|
177
|
-
private drawn;
|
|
178
|
-
private hoverTypes;
|
|
179
|
-
/** Details already fetched, by hovered entry. */
|
|
180
|
-
private readonly hoverCache;
|
|
181
|
-
private hoverKey;
|
|
182
|
-
private hoverTimer;
|
|
183
|
-
/**
|
|
184
|
-
* Tooltip lines for the transcript marker under world point `(wx, wy)`, or null.
|
|
185
|
-
*
|
|
186
|
-
* Returns what is known at once (gene, count, cell type); anything that needs the
|
|
187
|
-
* server — distinct genes in a group, its top genes and cells, the cell's display id —
|
|
188
|
-
* arrives through `onDetails` once the pointer has rested on the marker briefly.
|
|
189
|
-
*/
|
|
190
|
-
hoverAt(wx: number, wy: number, radiusWorld: number, onDetails: (lines: string[]) => void): string[] | null;
|
|
191
|
-
private fetchDetails;
|
|
192
|
-
/** The tooltip text for entry `i`, with the server's details when they have arrived. */
|
|
193
|
-
private describe;
|
|
194
|
-
/** Physical marker size needs µm; null when the dataset's unit is unknown. */
|
|
195
|
-
private pxPerMicron;
|
|
196
|
-
/**
|
|
197
|
-
* The chosen genes, at the level the zoom calls for — or coarser, while the markers in
|
|
198
|
-
* view would exceed the budget.
|
|
199
|
-
*/
|
|
200
|
-
private geneJob;
|
|
201
|
-
/**
|
|
202
|
-
* A gene selection from the pyramid's per-gene levels: starting at the level whose bins are
|
|
203
|
-
* `startBin`, fetch the view's tiles for the selected genes and step to a coarser level while
|
|
204
|
-
* one marker per cluster per bin would exceed the max. Hidden genes are fetched too (their
|
|
205
|
-
* counts in view still show) and dropped before drawing; grouping by cluster happens there.
|
|
206
|
-
*/
|
|
207
|
-
private geneBinsJob;
|
|
208
|
-
/** The selection's clusters: each gene-tree group's visible genes, then each ungrouped gene. */
|
|
209
|
-
private selectionClusters;
|
|
210
|
-
/**
|
|
211
|
-
* Per-gene density grids summed for `genes`, cached (a cluster is asked for once per bin).
|
|
212
|
-
* Keyed by dataset too: this manager outlives a dataset, and another may share gene names.
|
|
213
|
-
*/
|
|
214
|
-
private densityFor;
|
|
215
|
-
private readonly densityCache;
|
|
216
|
-
/**
|
|
217
|
-
* A gene selection zoomed out: one marker per cluster per bin, from the per-gene density
|
|
218
|
-
* grids. The bin starts where markers are 14 px apart and doubles until the markers fit the
|
|
219
|
-
* max; each marker sits at the count-weighted centre of the finer grid inside it, so markers
|
|
220
|
-
* follow the tissue rather than a lattice.
|
|
221
|
-
*/
|
|
222
|
-
private clusterDensityJob;
|
|
223
|
-
/**
|
|
224
|
-
* Every gene: the transcripts themselves once they fit the budget, else bins of the
|
|
225
|
-
* all-gene pyramid sized by how many transcripts each holds.
|
|
226
|
-
*/
|
|
227
|
-
private allGenesJob;
|
|
228
|
-
/** Bins of the all-gene pyramid at `level`, sized by how many transcripts each holds. */
|
|
229
|
-
private binsJob;
|
|
230
|
-
/** Per-entry colours both as RGBA (points) and as colormap values (glyph shapes). */
|
|
231
|
-
private transcriptColors;
|
|
232
|
-
private planDensity;
|
|
233
|
-
private countsCache;
|
|
234
|
-
/**
|
|
235
|
-
* Transcripts in view for the visible genes: each gene's dataset total times the share
|
|
236
|
-
* of the tissue on screen. An estimate — expression is not uniform — which is also what
|
|
237
|
-
* Xenium Explorer shows; it tells the user whether the budget will force grouping.
|
|
238
|
-
*/
|
|
239
|
-
private planEstimate;
|
|
240
|
-
/** The density window in use and the densest bin, for the panel's threshold control. */
|
|
241
|
-
densityStats: {
|
|
242
|
-
lo: number;
|
|
243
|
-
hi: number;
|
|
244
|
-
max: number;
|
|
245
|
-
} | null;
|
|
246
|
-
/**
|
|
247
|
-
* Fetch every tile, drawing what arrived. A failure does not fail the view, but it marks the
|
|
248
|
-
* plan incomplete: the caller must not cache it as done, and `plan()` retries it.
|
|
249
|
-
*/
|
|
250
|
-
private fetchAll;
|
|
251
|
-
/**
|
|
252
|
-
* Put a shapes layer in place for `group`: a geometry change builds a new layer, a
|
|
253
|
-
* colour-only change mutates values/colormap on the existing one.
|
|
254
|
-
*/
|
|
255
|
-
private upsertShapes;
|
|
256
|
-
/**
|
|
257
|
-
* Install `layer` as `group`'s layer and restore the order of the groups above it.
|
|
258
|
-
* The layer was just added by the caller (so it is on top); groups that belong above
|
|
259
|
-
* it are removed and re-added.
|
|
260
|
-
*/
|
|
261
|
-
private replace;
|
|
262
|
-
private drop;
|
|
263
|
-
private dropCells;
|
|
264
|
-
private setPolygonsShown;
|
|
265
|
-
}
|
|
266
|
-
/** What the transcript layer currently shows — what hovering needs to name a marker. */
|
|
267
|
-
interface DrawnTranscripts {
|
|
268
|
-
kind: TranscriptJob['kind'];
|
|
269
|
-
bin?: TranscriptJob['bin'];
|
|
270
|
-
merged: SpatialTranscriptTile;
|
|
271
|
-
/** Marker radius per entry, in observation units. */
|
|
272
|
-
radius: Float32Array;
|
|
273
|
-
genes: string[];
|
|
274
|
-
ref: SpatialImageRef | null;
|
|
275
|
-
/** For a grouped gene selection: each entry's group, and the groups' names. */
|
|
276
|
-
entryGroup?: Int32Array;
|
|
277
|
-
groupNames?: string[];
|
|
278
|
-
/** Each group's genes, when the markers came from the density grids (for the hover). */
|
|
279
|
-
groupGenes?: string[][];
|
|
280
|
-
/** Lazily built spatial index: bucket → entry indices. */
|
|
281
|
-
grid: {
|
|
282
|
-
size: number;
|
|
283
|
-
buckets: Map<number, number[]>;
|
|
284
|
-
} | null;
|
|
285
108
|
}
|
|
286
|
-
/** Index of the entry under `(x, y)` — within its own radius or `tolerance` — or -1. */
|
|
287
|
-
export declare function pickNearest(d: Pick<DrawnTranscripts, 'merged' | 'radius' | 'grid'>, x: number, y: number, tolerance: number): number;
|
|
288
|
-
/** Rings whose owning cell is in a switched-off group removed. */
|
|
289
|
-
export declare function filterRings(rings: SpatialPolygonTile, hidden: {
|
|
290
|
-
codes: Uint16Array;
|
|
291
|
-
hidden: Uint8Array;
|
|
292
|
-
} | null): SpatialPolygonTile;
|
|
293
|
-
/** Entries in a hidden group's cell, or of a hidden gene, removed (with their sizes). */
|
|
294
|
-
export declare function filterTranscripts(t: SpatialTranscriptTile, px: Float32Array, hidden: {
|
|
295
|
-
codes: Uint16Array;
|
|
296
|
-
hidden: Uint8Array;
|
|
297
|
-
} | null, hiddenGenes: Uint8Array | null): {
|
|
298
|
-
merged: SpatialTranscriptTile;
|
|
299
|
-
px: Float32Array;
|
|
300
|
-
};
|
|
301
|
-
/** Concatenate tiles' rings into one set, dropping rings already seen (a cell straddling
|
|
302
|
-
* two tiles may be listed by both). */
|
|
303
|
-
export declare function mergePolygonTiles(tiles: SpatialPolygonTile[]): SpatialPolygonTile;
|
|
304
|
-
/** Concatenate transcript tiles, stopping at `limit` entries. */
|
|
305
|
-
export declare function mergeTranscriptTiles(tiles: SpatialTranscriptTile[], limit?: number): SpatialTranscriptTile;
|
|
306
|
-
/**
|
|
307
|
-
* One marker per (cluster, `bin` square) from per-cluster density grids: the counts of the grid
|
|
308
|
-
* cells inside `area` summed per square, at their count-weighted centre. `slots[c]` is the gene
|
|
309
|
-
* slot whose icon cluster c's markers take.
|
|
310
|
-
*/
|
|
311
|
-
export declare function clusterMarkers(rasters: SpatialDensityRaster[], slots: number[], bin: number, area: DataRect): {
|
|
312
|
-
tile: SpatialTranscriptTile;
|
|
313
|
-
group: Int32Array;
|
|
314
|
-
};
|
|
315
|
-
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cursor tooltip naming the observation under the pointer, for the spatial-omics
|
|
3
|
-
* views — the same overlay-in-the-host pattern as
|
|
3
|
+
* views — the same overlay-in-the-host pattern as napari-js's `ScaleBarOverlay`.
|
|
4
4
|
*
|
|
5
5
|
* A 34-entry legend cannot be read back from a dot: several classes get similar
|
|
6
6
|
* colours, and matching one to a swatch by eye is the job a tooltip removes. It
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { SurfaceLayer } from 'napari-js';
|
|
2
|
+
import { IHistogram } from '../../contracts/channel-histogram-api.contract';
|
|
3
|
+
import { ISurface3dControls } from '../../contracts/visualizer.contract';
|
|
4
|
+
import { LumaPlane } from './napari-helpers';
|
|
5
|
+
import type { NapariScene, SceneContext } from './napari-scene';
|
|
6
|
+
/**
|
|
7
|
+
* NAPARI_SURFACE (review Appendix B, cluster G): the slice as a height field. A height field is
|
|
8
|
+
* single-scalar, so for a multichannel image the surface follows ONE band — the pane-selected
|
|
9
|
+
* channel — coloured by that channel's window/colormap (like the Plotly SURFACE, which is
|
|
10
|
+
* grayscale-only). Every slice's plane is pre-loaded with a progress bar (as the volume does) so
|
|
11
|
+
* the stack slider re-slices instantly. All mesh + GPU work lives in napari-js (`heightField` +
|
|
12
|
+
* `Viewer.addSurface`); this scene supplies scalar slices.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SurfaceScene implements NapariScene {
|
|
15
|
+
private readonly ctx;
|
|
16
|
+
/** The height-field mesh (null until the first build). */
|
|
17
|
+
layer: SurfaceLayer | null;
|
|
18
|
+
/** Which band the surface samples (a channel index for multichannel, else the composite). */
|
|
19
|
+
private channel;
|
|
20
|
+
/** True when the surface follows one band of a multichannel image. */
|
|
21
|
+
private multichannel;
|
|
22
|
+
/** Pre-loaded per-slice luminance planes (already decimated to the surface grid), keyed by z,
|
|
23
|
+
* so the stack slider rebuilds the surface instantly. Filled by {@link preloadPlanes}. */
|
|
24
|
+
readonly planes: Map<number, LumaPlane>;
|
|
25
|
+
/** The preload in flight; a newer one (a channel switch) aborts it. */
|
|
26
|
+
private preload;
|
|
27
|
+
/** In-plane grid cap for this load (full grid ÷ the decimate factor). */
|
|
28
|
+
private maxGrid;
|
|
29
|
+
/** Contrast window [min,max] the current mesh was built with. A change reshapes the mesh (pixel
|
|
30
|
+
* height = intensity within [min,max]), so it triggers a geometry rebuild. */
|
|
31
|
+
private window;
|
|
32
|
+
/** The current slice's plane, for the intensity histogram. */
|
|
33
|
+
private histogramPlane;
|
|
34
|
+
private gizmo;
|
|
35
|
+
private displaySub;
|
|
36
|
+
constructor(ctx: SceneContext);
|
|
37
|
+
mount(): Promise<void>;
|
|
38
|
+
/** One slice → one mesh: re-build the height field for the new slice. Not built yet → nothing to
|
|
39
|
+
* do; the build at the end of the mount reads the current slice. */
|
|
40
|
+
setZ(z: number): void;
|
|
41
|
+
/** The current slice's intensity histogram (the plane the mesh was built from). */
|
|
42
|
+
histogram(_channel: number, bins: number): IHistogram | null;
|
|
43
|
+
surface3dControls(): ISurface3dControls | null;
|
|
44
|
+
dispose(): void;
|
|
45
|
+
/** Add the axes gizmo + labels around the (origin-centered) mesh, matching the volume. The box
|
|
46
|
+
* tracks the mesh bounds, X/Y show the physical (or pixel) extent, and Z is the intensity axis. */
|
|
47
|
+
private installAxes;
|
|
48
|
+
/** X/Y/Z end-labels for the gizmo: X/Y are the physical (µm) or pixel extent of the FULL image;
|
|
49
|
+
* Z is the intensity/height axis. Anchors are in the centered box (matching AxesLayer). */
|
|
50
|
+
private axesLabels;
|
|
51
|
+
/**
|
|
52
|
+
* Pre-fetch every stack slice's luminance plane (decimated to the surface grid) into
|
|
53
|
+
* {@link planes}, driving the stack progress — the same load-with-progress UX as the volume, but
|
|
54
|
+
* keeping one 2D plane per slice rather than packing a 3D volume. Bounded concurrency keeps the
|
|
55
|
+
* connection pool busy without flooding it on a deep stack.
|
|
56
|
+
*/
|
|
57
|
+
preloadPlanes(): Promise<void>;
|
|
58
|
+
/** Slice `z` as a whole-image luminance plane of the surface's band, decimated to `maxGrid`. */
|
|
59
|
+
fetchPlane(z: number, maxGrid: number): Promise<LumaPlane>;
|
|
60
|
+
/** The channel state driving the surface: the chosen band for multichannel (matched by index),
|
|
61
|
+
* else the single grayscale channel. */
|
|
62
|
+
private channelState;
|
|
63
|
+
/**
|
|
64
|
+
* (Re)build the mesh for slice `z` from the pre-loaded plane cache (instant — this is what the
|
|
65
|
+
* stack slider calls); a slice missing from the cache is fetched on demand. napari-js's pure
|
|
66
|
+
* `heightField` builds the triangle grid (z = normalized intensity), then `addSurface` renders
|
|
67
|
+
* it. The slice plane also feeds the intensity histogram.
|
|
68
|
+
*/
|
|
69
|
+
private build;
|
|
70
|
+
/** The store colormap / reverse / invert / channel window → the surface, so histogram & channel
|
|
71
|
+
* dialog edits update it live without a re-fetch. **min/max reshapes the surface's height** (a
|
|
72
|
+
* pixel's height = its intensity within [min,max]), so a window change rebuilds the mesh
|
|
73
|
+
* geometry (from the cached slice); colour-only edits (colormap/LUT, gamma, reverse, invert)
|
|
74
|
+
* just update the layer's uniforms. */
|
|
75
|
+
private followDisplayState;
|
|
76
|
+
}
|