@jax-data-science/sci-image-visualizer 0.8.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -460
- package/esm2022/index.mjs +34 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +134 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +411 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
- package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +858 -414
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +53 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +144 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-source-scope.mjs +171 -0
- package/esm2022/lib/store/region-store.service.mjs +986 -670
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +123 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +602 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/region-source.worker.js +1067 -0
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +19 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +85 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +231 -54
- package/lib/contracts/viz-config.d.ts +9 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
- package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
- package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +25 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +45 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +57 -0
- package/lib/models/region.d.ts +59 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +283 -200
- package/lib/region-editor/region-metrics.d.ts +34 -0
- package/lib/region-editor/region-persistence.service.d.ts +77 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +158 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +248 -59
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +39 -2
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +65 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-source-scope.d.ts +68 -0
- package/lib/store/region-store.service.d.ts +312 -116
- package/lib/store/visualizer-store.service.d.ts +32 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +55 -84
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +46 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +232 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/assets/slice.svg +23 -0
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A {@link RegionSource} over a GeoJSON string, parsed and tiled in the region-source Web Worker.
|
|
3
|
+
*
|
|
4
|
+
* One worker serves every open source. Where no worker can start (jsdom, SSR, a blocked worker
|
|
5
|
+
* URL) the same tables run on the main thread; if the worker dies, each source re-opens itself
|
|
6
|
+
* there from its text (which the host holds anyway: it handed it over) and carries on — whether
|
|
7
|
+
* it had a call in flight then or not (see {@link RegionSourceWorkerClient.generation}).
|
|
8
|
+
*/
|
|
9
|
+
import { RegionSource } from './region-source';
|
|
10
|
+
import { RegionSourceRequest, RegionSourceResults } from './region-source-ops';
|
|
11
|
+
import type { ReconstructOptions, SliceOutlines } from '../geometry/reconstruct';
|
|
12
|
+
import type { Mesh } from 'napari-js/geometry';
|
|
13
|
+
/** Makes the worker; may be async, as the default one is (it imports the factory on demand). */
|
|
14
|
+
export type RegionSourceWorkerFactory = () => Worker | Promise<Worker>;
|
|
15
|
+
/** Owns the region-source worker and the calls in flight on it. */
|
|
16
|
+
export declare class RegionSourceWorkerClient {
|
|
17
|
+
private readonly factory?;
|
|
18
|
+
private worker;
|
|
19
|
+
private starting;
|
|
20
|
+
private unavailable;
|
|
21
|
+
private nextId;
|
|
22
|
+
private readonly pending;
|
|
23
|
+
/** The main-thread tables, once anything runs here. */
|
|
24
|
+
private local;
|
|
25
|
+
private tables;
|
|
26
|
+
/**
|
|
27
|
+
* `factory` is optional: without one the real worker module is imported on demand —
|
|
28
|
+
* dynamically, because it holds an `import.meta.url` that ts-jest's CommonJS compile
|
|
29
|
+
* rejects.
|
|
30
|
+
*/
|
|
31
|
+
constructor(factory?: RegionSourceWorkerFactory | undefined);
|
|
32
|
+
/** Whether calls now run on the main thread. */
|
|
33
|
+
get inThread(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Which table set calls run on: bumped when the worker is lost. A handle opened under another
|
|
36
|
+
* names a table that is gone (or, here, another source's), so its source must open again.
|
|
37
|
+
*/
|
|
38
|
+
get generation(): number;
|
|
39
|
+
/** Run `request` in the worker, or here when there is none. */
|
|
40
|
+
call<R extends RegionSourceRequest>(request: R): Promise<RegionSourceResults[R['op']]>;
|
|
41
|
+
/** {@link call}, with the {@link generation} the request ran on. */
|
|
42
|
+
run<R extends RegionSourceRequest>(request: R): Promise<{
|
|
43
|
+
result: RegionSourceResults[R['op']];
|
|
44
|
+
generation: number;
|
|
45
|
+
}>;
|
|
46
|
+
/** Terminate the worker; calls in flight reject. */
|
|
47
|
+
dispose(): void;
|
|
48
|
+
private ensureWorker;
|
|
49
|
+
private startWorker;
|
|
50
|
+
private onReply;
|
|
51
|
+
/** Stop the worker for good: every later call runs here, every call in flight is lost. */
|
|
52
|
+
private lose;
|
|
53
|
+
}
|
|
54
|
+
/** The worker client every GeoJSON source shares. */
|
|
55
|
+
export declare function sharedRegionSourceClient(): RegionSourceWorkerClient;
|
|
56
|
+
/**
|
|
57
|
+
* Open a GeoJSON FeatureCollection string as a tiled region source. Rejects on invalid JSON or
|
|
58
|
+
* a collection without `features`.
|
|
59
|
+
*/
|
|
60
|
+
export declare function openGeoJsonRegionSource(text: string, client?: RegionSourceWorkerClient): Promise<RegionSource>;
|
|
61
|
+
/**
|
|
62
|
+
* The 3D reconstruction of a region from its outlines on a stack (see `geometry/reconstruct`),
|
|
63
|
+
* meshed in the region-source worker (on the main thread where there is none).
|
|
64
|
+
*/
|
|
65
|
+
export declare function reconstructInWorker(slices: readonly SliceOutlines[], options?: ReconstructOptions, client?: RegionSourceWorkerClient): Promise<Mesh>;
|
|
@@ -16,7 +16,8 @@ import { IImageInfo } from './contracts/image.contract';
|
|
|
16
16
|
export interface TwoPassRenderHost {
|
|
17
17
|
/** Load + plot one phase (the component owns div/screen/plot-type/z and the
|
|
18
18
|
* newer-click filename guard). `inPlace` updates the existing render so the
|
|
19
|
-
* canvas doesn't blank during the small→large swap.
|
|
19
|
+
* canvas doesn't blank during the small→large swap. Rejects when the phase
|
|
20
|
+
* could not be drawn (including a backend's `plot()` resolving false). */
|
|
20
21
|
renderPhase(info: IImageInfo, inPlace: boolean): Promise<unknown>;
|
|
21
22
|
/** The small tier is on screen — drop the full loading overlay so the user
|
|
22
23
|
* sees the blurry preview, and show the sharpening spinner. */
|
|
@@ -26,10 +27,13 @@ export interface TwoPassRenderHost {
|
|
|
26
27
|
/** Rendering finished. `viaSmall` = the overlay was already released by the
|
|
27
28
|
* small tier (so only release the running guard + apply the ROI); otherwise
|
|
28
29
|
* do the full finalize (overlay + running + ROI). */
|
|
29
|
-
finished(viaSmall: boolean
|
|
30
|
+
finished(viaSmall: boolean): void;
|
|
30
31
|
/** Both large-tier attempts failed; the small tier stays on screen as the
|
|
31
32
|
* fallback. Surface it to the user and release the running guard + ROI. */
|
|
32
33
|
sharpenFailed(err: unknown): void;
|
|
34
|
+
/** Nothing could be drawn: the single pass failed, or both tiers did. Called
|
|
35
|
+
* after {@link finished} (which releases the overlay), to tell the user. */
|
|
36
|
+
renderFailed(err: unknown): void;
|
|
33
37
|
}
|
|
34
38
|
export declare class RenderOrchestrator {
|
|
35
39
|
private host;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { IImageInfo } from './contracts/image.contract';
|
|
2
|
+
import { PlotType } from './contracts/plot-type';
|
|
3
|
+
import { SpatialDataset } from './contracts/spatial-dataset.contract';
|
|
4
|
+
import { IVisualizer } from './contracts/visualizer.contract';
|
|
5
|
+
/** A user-facing message for a failure: an HttpErrorResponse's server message, an
|
|
6
|
+
* Error's message, or the status text, else the value itself. */
|
|
7
|
+
export declare function errorMessage(err: unknown): string;
|
|
8
|
+
/** The viewer a render session draws into, and what it tells the viewer. */
|
|
9
|
+
export interface RenderSessionHost {
|
|
10
|
+
readonly plotDivName: string;
|
|
11
|
+
readonly visualizer: IVisualizer;
|
|
12
|
+
/** The slice to load, read when each phase starts. */
|
|
13
|
+
zIndex(): number;
|
|
14
|
+
plotType(): PlotType;
|
|
15
|
+
/** A 2D view: only it renders the small tier first (the in-place sharpen pass does
|
|
16
|
+
* not rebuild a 3D scene, so it blanked one). */
|
|
17
|
+
isHeatmap(): boolean;
|
|
18
|
+
/** A server-side cache fill is in progress (keeps the full overlay up). */
|
|
19
|
+
isCaching(): boolean;
|
|
20
|
+
/** The view is about to be torn down: end what was bound to it (contributed sessions). */
|
|
21
|
+
beforeReset(): void;
|
|
22
|
+
/** Lay the new image out (stack flag, slice bounds, initial slice) once the old view is gone. */
|
|
23
|
+
prepare(info: IImageInfo): void;
|
|
24
|
+
/** Drop the loading overlay the render owns (once per render). */
|
|
25
|
+
releaseOverlay(info: IImageInfo): void;
|
|
26
|
+
/** The render landed, sharp or as a fallback: apply ROIs, start sessions. */
|
|
27
|
+
landed(info: IImageInfo): void;
|
|
28
|
+
setImageLoading(loading: boolean): void;
|
|
29
|
+
alert(severity: 'warn' | 'error', summary: string, detail: string): void;
|
|
30
|
+
detectChanges(): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The viewer's render pipeline: one image (or image-less dataset) at a time, the newest
|
|
34
|
+
* always winning.
|
|
35
|
+
*
|
|
36
|
+
* Every render takes a task from a {@link Supersede}: a newer render, a Cancel or
|
|
37
|
+
* teardown makes the older one stale — its callbacks return early instead of painting,
|
|
38
|
+
* releasing the newer render's overlay or applying its ROIs — and aborts the signal its
|
|
39
|
+
* loads were given, so superseded network work stops at the source. Sequencing of the
|
|
40
|
+
* small→large tiers lives in {@link RenderOrchestrator}; this owns the UI flags it
|
|
41
|
+
* drives ({@link running}, {@link sharpening}).
|
|
42
|
+
*/
|
|
43
|
+
export declare class ImageRenderSession {
|
|
44
|
+
private readonly host;
|
|
45
|
+
/** A render is in flight. */
|
|
46
|
+
running: boolean;
|
|
47
|
+
/** The small tier is on screen and the large one is still loading. */
|
|
48
|
+
sharpening: boolean;
|
|
49
|
+
/** Set once the plot div exists; an image-less draw before then waits for it. */
|
|
50
|
+
private viewReady;
|
|
51
|
+
private pendingDraw;
|
|
52
|
+
private readonly supersede;
|
|
53
|
+
constructor(host: RenderSessionHost);
|
|
54
|
+
/**
|
|
55
|
+
* Render `info` (which has urls), preempting whatever is in flight. A newer image
|
|
56
|
+
* ALWAYS preempts: dropping it while the old one finished reported image B as loaded
|
|
57
|
+
* while image A stayed on screen, and a cold image held the slot for its whole
|
|
58
|
+
* server-side cache fill.
|
|
59
|
+
*/
|
|
60
|
+
render(info: IImageInfo): void;
|
|
61
|
+
/**
|
|
62
|
+
* Draw a spatial mode with no image behind it: the observations alone, framed on their
|
|
63
|
+
* own extent. The image info is a placeholder naming the dataset, so regions drawn here
|
|
64
|
+
* are kept per dataset like any image's. Supersedes (and is superseded by) image renders.
|
|
65
|
+
*/
|
|
66
|
+
plotWithoutImage(dataset: SpatialDataset): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* The plot div exists now: run an image-less draw that arrived before it did — only if
|
|
69
|
+
* its dataset is still the one on offer (by id: the port may re-emit the same dataset
|
|
70
|
+
* as a new object, and the current object is the one to draw) and no image has arrived.
|
|
71
|
+
*/
|
|
72
|
+
viewIsReady(current: SpatialDataset | null, hasImage: boolean): void;
|
|
73
|
+
/** Cancel the render in flight: abort its loads and make its callbacks inert. */
|
|
74
|
+
cancel(): void;
|
|
75
|
+
}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
1
2
|
import { Observable } from 'rxjs';
|
|
2
3
|
import { Image } from 'image-js';
|
|
3
4
|
import { IImageInfo, IImageMetadata } from './contracts/image.contract';
|
|
4
|
-
import { Region } from './models/region';
|
|
5
|
+
import { Polygon, Region } from './models/region';
|
|
5
6
|
import { ClassPreset, PresetSet } from './models/class-preset';
|
|
6
7
|
import { PlotlyService } from './implementations/plotly/plotly.service';
|
|
7
8
|
import { OpenSeadragonVisualizerService } from './implementations/osd/openseadragon-visualizer.service';
|
|
8
9
|
import { PlotType, PlotTypeDescriptor } from './contracts/plot-type';
|
|
9
|
-
import { IVisualizer, PixelData, IntensityProfile, IIsosurfaceControls, IIntensityControls, ISurface3dControls, ISpatialControls } from './contracts/visualizer.contract';
|
|
10
|
+
import { IVisualizer, LoadedImage, PixelData, IntensityProfile, IIsosurfaceControls, IIntensityControls, ISurface3dControls, ISpatialControls, IIntensitySampling, IOsdViewOptions, IVolumeResolution } from './contracts/visualizer.contract';
|
|
10
11
|
import { SpatialDataPort } from './contracts/ports/spatial-data.port';
|
|
12
|
+
import { CanvasToolOptions, ColormapNode, IBrushOptions, IWandOptions } from './contracts/display-types';
|
|
11
13
|
import { RegionStore } from './store/region-store.service';
|
|
14
|
+
import { RegionSource, RegionSourceView } from './region-source/region-source';
|
|
15
|
+
import type { RegionIndexPage, RegionIndexQuery } from './region-source/region-tiles';
|
|
16
|
+
import type { RegionStyle } from './region-overlay/region-style';
|
|
17
|
+
import type { RegionSourceOpener, RegionSourceSlices } from './store/region-source-scope';
|
|
12
18
|
import { SpatialSelectionStore } from './store/spatial-selection.service';
|
|
13
19
|
import { ViewerCapabilities } from './contracts/capabilities.contract';
|
|
14
20
|
import { IRegionOverlay } from './contracts/region-overlay.contract';
|
|
@@ -18,8 +24,33 @@ import { VisualizerStore } from './store/visualizer-store.service';
|
|
|
18
24
|
import { NapariVisualizerService } from './implementations/napari-js/napari-visualizer.service';
|
|
19
25
|
import { VizConfig } from './contracts/viz-config';
|
|
20
26
|
import { PlotModeViewport } from './contracts/plot-type-contribution.contract';
|
|
27
|
+
import { IntensityProfileService } from './intensity/intensity-profile.service';
|
|
28
|
+
import type { SectionAxis, SectionViews } from './contracts/section-view.contract';
|
|
21
29
|
import * as i0 from "@angular/core";
|
|
22
|
-
|
|
30
|
+
/** How long after the last edit the surfaces of the classes it touched are rebuilt (ms). */
|
|
31
|
+
export declare const REGION_SURFACE_REBUILD_MS = 600;
|
|
32
|
+
/**
|
|
33
|
+
* The visualizer chain's front door: implements `IVisualizer`, `IRegionEditorApi`
|
|
34
|
+
* and `IChannelHistogramApi` (bound to the `VISUALIZER` / `REGION_EDITOR_API` /
|
|
35
|
+
* `CHANNEL_HISTOGRAM_API` tokens) over three rendering backends, chosen per plot type:
|
|
36
|
+
* - **Image** renders through OpenSeadragon (natively tiled, region tools,
|
|
37
|
+
* client-side colormap), or through napari-js when `VizConfig.useNapariRenderer`
|
|
38
|
+
* opts in; the napari image types and the 2D spatial-omics mode render through
|
|
39
|
+
* napari-js. A failed load falls back napari-js → OSD → Plotly for that image only
|
|
40
|
+
* (see `napariFellBack` / `osdFellBack`, cleared by `reset()`).
|
|
41
|
+
* - the napari 3D types (volume, isosurface, surface, 3D scatter, the 3D spatial
|
|
42
|
+
* cloud) render through napari-js, falling back to Plotly.
|
|
43
|
+
* - every other plot type (heatmap, contour, surface, scatter, line, …) renders
|
|
44
|
+
* through Plotly.
|
|
45
|
+
*
|
|
46
|
+
* Only rendering and the viewport are routed to the backend on screen. Region state
|
|
47
|
+
* lives in the shared `RegionStore` and display state (colormap, channels, presets,
|
|
48
|
+
* spatial view) in the shared `VisualizerStore`, so every backend sees the same
|
|
49
|
+
* values; the backends subscribe to them to redraw.
|
|
50
|
+
*
|
|
51
|
+
* Package-internal: hosts depend on the tokens, not on this class.
|
|
52
|
+
*/
|
|
53
|
+
export declare class RoutingVisualizerService implements IVisualizer, IRegionEditorApi, IChannelHistogramApi, OnDestroy {
|
|
23
54
|
private plotly;
|
|
24
55
|
private osd;
|
|
25
56
|
private napari;
|
|
@@ -27,6 +58,7 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
27
58
|
private config;
|
|
28
59
|
private regionStore;
|
|
29
60
|
private selectionStore;
|
|
61
|
+
private intensity;
|
|
30
62
|
private spatialData;
|
|
31
63
|
private currentPlotType;
|
|
32
64
|
private lastRendered;
|
|
@@ -39,7 +71,59 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
39
71
|
/** napari-js failed for the current render cycle → fall back to OSD (then Plotly).
|
|
40
72
|
* Reset by reset() at the start of every cycle, like {@link osdFellBack}. */
|
|
41
73
|
private napariFellBack;
|
|
42
|
-
|
|
74
|
+
/** The file name of the image last plotted (names a GeoJSON export). */
|
|
75
|
+
private plottedFileName;
|
|
76
|
+
/** The div the backends render into (every backend shares it); '' before the first plot. */
|
|
77
|
+
private plotDiv;
|
|
78
|
+
/** Whether a napari volume view is the current plot type. */
|
|
79
|
+
private readonly volumeView$;
|
|
80
|
+
/** Whether the volume view's slice pane is wanted (see {@link setSliceEditor}). */
|
|
81
|
+
private readonly sliceEditor$;
|
|
82
|
+
/** Whether the volume view draws the region reconstructions through the volume. */
|
|
83
|
+
private readonly regionsThroughVolume$;
|
|
84
|
+
/** Region reconstructions built so far, by image, resolution and classes (with those classes). */
|
|
85
|
+
private readonly meshCache;
|
|
86
|
+
/** Bumped per {@link showRegionClasses3d} (and per new image), so only the latest one shows. */
|
|
87
|
+
private meshRequest;
|
|
88
|
+
/** The class groups shown in 3D, and the image they belong to. */
|
|
89
|
+
private readonly classes3d$;
|
|
90
|
+
private classes3dImage;
|
|
91
|
+
/** The groups last asked for in 3D, with their colours: what an edit's rebuild shows again. */
|
|
92
|
+
private shown3d;
|
|
93
|
+
/**
|
|
94
|
+
* Each class's fingerprint on the live slice (see classSignatures), which image and slice, and
|
|
95
|
+
* what the region sources hold (see RegionStore.getSourceStateKey). Null while nothing follows
|
|
96
|
+
* the edits (no surface built, no sections).
|
|
97
|
+
*/
|
|
98
|
+
private liveClasses;
|
|
99
|
+
/** The pending rebuild of the surfaces an edit touched. */
|
|
100
|
+
private rebuildTimer;
|
|
101
|
+
private readonly regionUpdates;
|
|
102
|
+
/** The div the slice pane renders into while it is wanted (null: no split). */
|
|
103
|
+
private sliceDiv;
|
|
104
|
+
/** Whether OSD is mounted in the slice pane: region, tool and overlay calls go to it. */
|
|
105
|
+
private sliceMounted;
|
|
106
|
+
/** The image the slice pane shows. */
|
|
107
|
+
private sliceFile;
|
|
108
|
+
/** Bumped per slice-pane mount or teardown, so only the latest one lands. */
|
|
109
|
+
private sliceRequest;
|
|
110
|
+
/** The sections beside the split volume view (the planes x and y through the stack). */
|
|
111
|
+
private readonly sections;
|
|
112
|
+
/** The z plane dragged in the volume: the slice to show (see {@link getSliceDrag$}). */
|
|
113
|
+
private readonly sliceDrag$;
|
|
114
|
+
private readonly sectionSubs;
|
|
115
|
+
/** The image info and screen height of the last plot (what the slice pane mounts). */
|
|
116
|
+
private plottedInfo;
|
|
117
|
+
private plottedHeight;
|
|
118
|
+
constructor(plotly: PlotlyService, osd: OpenSeadragonVisualizerService, napari: NapariVisualizerService, store: VisualizerStore, config: VizConfig, regionStore: RegionStore, selectionStore: SpatialSelectionStore, intensity: IntensityProfileService, spatialData?: SpatialDataPort | null);
|
|
119
|
+
/** A class's colour: its classification colour, else its region source's, else a default. */
|
|
120
|
+
private classColor;
|
|
121
|
+
/** The sections beside the split volume view (nulls while it is not split). */
|
|
122
|
+
getSectionViews$(): Observable<SectionViews>;
|
|
123
|
+
/** Move a section's plane to `at` (image px). */
|
|
124
|
+
setSectionPlane(axis: SectionAxis, at: number): void;
|
|
125
|
+
/** The slice picked by dragging the z plane in the volume: the host shows it (its slider). */
|
|
126
|
+
getSliceDrag$(): Observable<number>;
|
|
43
127
|
private isImageType;
|
|
44
128
|
/** The 2D napari types (image, region-centroid scatter, spatial omics) — a 2D fallback chain
|
|
45
129
|
* (OSD, then Plotly).
|
|
@@ -63,20 +147,50 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
63
147
|
private imageBackend;
|
|
64
148
|
/** Backend currently on screen — what ongoing zoom/tool/region ops act on. */
|
|
65
149
|
private renderer;
|
|
150
|
+
/**
|
|
151
|
+
* Backend region, tool and overlay calls act on: the slice pane's OSD while the volume view is
|
|
152
|
+
* split (regions are edited there), else the backend on screen. View calls (zoom, fit, colour,
|
|
153
|
+
* export) stay with {@link renderer}.
|
|
154
|
+
*/
|
|
155
|
+
private regionBackend;
|
|
66
156
|
get capabilities(): ViewerCapabilities;
|
|
67
|
-
load(imageInfo: IImageInfo, zIndex: number): Promise<
|
|
157
|
+
load(imageInfo: IImageInfo, zIndex: number, signal?: AbortSignal): Promise<LoadedImage>;
|
|
68
158
|
/** Try OSD; on failure fall back to Plotly for this image (not permanent — see reset()). */
|
|
69
159
|
private loadViaOsdThenPlotly;
|
|
70
|
-
plot(plotDiv: string, imageLoaded:
|
|
160
|
+
plot(plotDiv: string, imageLoaded: unknown, imageInfo: IImageInfo, screenHeight: number, plotType: PlotType, inPlace?: boolean): Promise<boolean>;
|
|
161
|
+
/**
|
|
162
|
+
* Split the volume view: show the slice being edited in `div` (OpenSeadragon, with every region
|
|
163
|
+
* tool) beside the 3D view, or stop (null). Kept across re-plots of a volume view; another plot
|
|
164
|
+
* type takes the pane down and a volume view brings it back. Resolves whether the pane shows.
|
|
165
|
+
*/
|
|
166
|
+
setSliceEditor(div: string | null): Promise<boolean>;
|
|
167
|
+
/** Mount (or refresh in place) OSD in the slice pane on the displayed slice. */
|
|
168
|
+
private mountSlice;
|
|
169
|
+
/** Take the slice pane's viewer down (the split stays wanted while {@link sliceDiv} is set). */
|
|
170
|
+
private unmountSlice;
|
|
71
171
|
reloadAndPlot(): void;
|
|
72
172
|
reset(): void;
|
|
73
173
|
relayout(trueImageSize?: number[]): void;
|
|
74
174
|
resetAxes(): void;
|
|
175
|
+
fitToView(): void;
|
|
176
|
+
/** @deprecated Use {@link fitToView}. */
|
|
75
177
|
autoscale(): void;
|
|
76
178
|
zoomIn(): void;
|
|
77
179
|
zoomOut(): void;
|
|
78
180
|
setDragMode(mode: string | false): void;
|
|
181
|
+
/** Every backend, on screen or not. */
|
|
182
|
+
private backends;
|
|
183
|
+
/**
|
|
184
|
+
* The navigator / smoothing options, applied to EVERY backend that has them (not
|
|
185
|
+
* just the active renderer): consumers set them before the first render, when
|
|
186
|
+
* `renderer()` is still the Plotly default, and OSD/napari-js must receive them
|
|
187
|
+
* to honour them at viewer creation.
|
|
188
|
+
*/
|
|
189
|
+
getOsdViewOptions(): IOsdViewOptions;
|
|
190
|
+
private readonly viewOptions;
|
|
191
|
+
/** @deprecated Use `getOsdViewOptions().setNavigatorVisible()`. */
|
|
79
192
|
setNavigatorVisible(visible: boolean): void;
|
|
193
|
+
/** @deprecated Use `getOsdViewOptions().setImageSmoothingEnabled()`. */
|
|
80
194
|
setImageSmoothingEnabled(enabled: boolean): void;
|
|
81
195
|
setShowStack(showstack: boolean): void;
|
|
82
196
|
setZIndex(zIndex: number): void;
|
|
@@ -95,9 +209,15 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
95
209
|
downloadImage(): void;
|
|
96
210
|
exportComposite(): void;
|
|
97
211
|
setPlotType(plotType: PlotType): void;
|
|
212
|
+
/** @deprecated Use `getSurface3dControls()`. */
|
|
98
213
|
setSurfaceDragMode(mode: string): void;
|
|
214
|
+
/** @deprecated Use `getSurface3dControls()`. */
|
|
99
215
|
resetSurfaceCamera(): void;
|
|
216
|
+
/** The 3D decimate factor of the backend on screen (napari-js), else null. */
|
|
217
|
+
getVolumeResolution(): IVolumeResolution | null;
|
|
218
|
+
/** @deprecated Use `getVolumeResolution()?.set()`. */
|
|
100
219
|
setResolutionScale(scale: number): void;
|
|
220
|
+
/** @deprecated Use `getVolumeResolution()?.get()`. */
|
|
101
221
|
getResolutionScale(): number;
|
|
102
222
|
/** The viewport of the backend on screen, for a contributed plot mode. Null
|
|
103
223
|
* when that backend cannot provide one (e.g. OSD fell back to Plotly). */
|
|
@@ -107,13 +227,14 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
107
227
|
cancelLoading(): void;
|
|
108
228
|
isStackLoading(): Observable<boolean>;
|
|
109
229
|
getStackLoadingProgress(): Observable<number>;
|
|
110
|
-
getAutoscaleEvent(): Observable<
|
|
230
|
+
getAutoscaleEvent(): Observable<void>;
|
|
231
|
+
/** The line-ROI profiles: sampled by the backend-neutral IntensityProfileService. */
|
|
111
232
|
getIntensityProfile$(): Observable<IntensityProfile[]>;
|
|
112
233
|
renderIntensityInset(divId: string, profiles: IntensityProfile[]): void;
|
|
113
234
|
setRegions(regions: Region[], showRegionLabel?: boolean, isRegionSaveOn?: boolean, fillColor?: string, append?: boolean): void;
|
|
114
235
|
getRegions(): Region[];
|
|
115
|
-
getRegionPolygons():
|
|
116
|
-
getRegionUpdateEvent(): Observable<
|
|
236
|
+
getRegionPolygons(): Polygon[];
|
|
237
|
+
getRegionUpdateEvent(): Observable<Region[]>;
|
|
117
238
|
setSelectedShapeIndices(indices: number[]): void;
|
|
118
239
|
selectRegion(region: Region): void;
|
|
119
240
|
getSelectedShapeIndices$(): Observable<number[]>;
|
|
@@ -129,9 +250,6 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
129
250
|
upsertClass(preset: ClassPreset): void;
|
|
130
251
|
removeClass(name: string): void;
|
|
131
252
|
resetPresets(): void;
|
|
132
|
-
plotPreviousShapes(): void;
|
|
133
|
-
setPreviousShapes(shapes: any[]): void;
|
|
134
|
-
getPreviousShapes(): any[];
|
|
135
253
|
undo(): void;
|
|
136
254
|
redo(): void;
|
|
137
255
|
canUndo(): boolean;
|
|
@@ -140,11 +258,77 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
140
258
|
getCanRedo$(): Observable<boolean>;
|
|
141
259
|
resetUndoHistory(): void;
|
|
142
260
|
importRegions(geoJsonStr: string): Region[];
|
|
261
|
+
/** Download `regions` as GeoJSON, named after the image last plotted. */
|
|
143
262
|
exportRegions(regions: Region[]): void;
|
|
144
263
|
getGeoJsonString(regions: Region[]): string;
|
|
264
|
+
/** Hold a large region set as a tiled region source (see RegionStore.attachRegionSource). */
|
|
265
|
+
attachRegionSource(source: RegionSource | RegionSourceOpener, slices?: RegionSourceSlices): void;
|
|
266
|
+
importRegionSource(geoJsonStr: string): Promise<boolean>;
|
|
267
|
+
dropRegionSource(): Promise<void>;
|
|
268
|
+
getRegionSourceView$(): Observable<RegionSourceView | null>;
|
|
269
|
+
getRegionSourceIndex(query: Omit<RegionIndexQuery, 'exclude'>): Promise<RegionIndexPage>;
|
|
270
|
+
selectSourceFeatures(ids: readonly string[], additive?: boolean): Promise<number[]>;
|
|
271
|
+
deleteSourceFeatures(ids: readonly string[]): void;
|
|
272
|
+
getRegionStyle$(): Observable<RegionStyle>;
|
|
273
|
+
setRegionStyle(patch: Partial<RegionStyle>): void;
|
|
274
|
+
/** Whether a napari volume (or isosurface) view is on screen: regions can be shown in 3D. */
|
|
275
|
+
getVolumeView$(): Observable<boolean>;
|
|
276
|
+
/** Whether the volume view's slice pane is wanted (it shows while a volume view is on screen). */
|
|
277
|
+
getSliceEditor$(): Observable<boolean>;
|
|
278
|
+
/** Whether the volume view draws the region reconstructions through the volume. */
|
|
279
|
+
getRegionsThroughVolume$(): Observable<boolean>;
|
|
280
|
+
/**
|
|
281
|
+
* Draw the region reconstructions through the volume (it hides none of them: surfaces inside its
|
|
282
|
+
* bright structures, an OCT's layer boundaries) or hidden behind what it shows (the default).
|
|
283
|
+
*/
|
|
284
|
+
setRegionsThroughVolume(through: boolean): void;
|
|
285
|
+
/** The class groups shown in 3D on this image ([] after a switch to another image). */
|
|
286
|
+
getRegionClasses3d$(): Observable<ReadonlyArray<{
|
|
287
|
+
key: string;
|
|
288
|
+
classes: readonly string[];
|
|
289
|
+
}>>;
|
|
290
|
+
/** Hide every region surface and forget them (a build still running is dropped). */
|
|
291
|
+
private clearRegionClasses3d;
|
|
292
|
+
/** Highlight the surfaces of these group keys in the volume view (none: all as usual). */
|
|
293
|
+
highlightRegionClasses3d(keys: readonly string[]): void;
|
|
294
|
+
/** A surface clicked in the volume view with the selection tool (its group key), or none (null). */
|
|
295
|
+
getRegionPicked3d$(): Observable<{
|
|
296
|
+
key: string | null;
|
|
297
|
+
additive: boolean;
|
|
298
|
+
}>;
|
|
299
|
+
/**
|
|
300
|
+
* Show these groups of classes in the volume view as 3D reconstructions (each group one surface
|
|
301
|
+
* in its colour: an atlas structure with its substructures), and only these; [] hides them.
|
|
302
|
+
* Reconstructed from every slice's outlines at the volume's resolution, cached per image.
|
|
303
|
+
*/
|
|
304
|
+
showRegionClasses3d(groups: ReadonlyArray<{
|
|
305
|
+
key: string;
|
|
306
|
+
classes: readonly string[];
|
|
307
|
+
color: string;
|
|
308
|
+
label?: string;
|
|
309
|
+
}>): Promise<void>;
|
|
310
|
+
/**
|
|
311
|
+
* The regions changed: when the live slice's regions of some classes did (an edit, an undo, not
|
|
312
|
+
* a slice or image switch), their reconstructions are stale. They are dropped, and those shown
|
|
313
|
+
* in 3D are rebuilt once the edits pause.
|
|
314
|
+
*/
|
|
315
|
+
private onRegionsChanged;
|
|
316
|
+
/** Fingerprint the live slice's classes, unless already: what the next edit is compared with. */
|
|
317
|
+
private trackLiveClasses;
|
|
318
|
+
/** Which slice of which image the live regions are. */
|
|
319
|
+
private liveSliceKey;
|
|
320
|
+
/** Each class's volume over the whole stack, in px² × slices (see RegionStore.classVolumes). */
|
|
321
|
+
getClassVolumes(classes: readonly string[]): Promise<Record<string, number>>;
|
|
322
|
+
getRegionSourceClassCounts(stack?: boolean): Promise<Record<string, number>>;
|
|
323
|
+
getHiddenClasses$(): Observable<ReadonlySet<string>>;
|
|
324
|
+
setClassesHidden(classes: readonly string[], hidden: boolean): void;
|
|
325
|
+
selectRegionClasses(classes: readonly string[], additive?: boolean): Promise<void>;
|
|
326
|
+
getGeoJsonStringWithSource(regions: Region[], slice?: number): Promise<string>;
|
|
145
327
|
enterStackMode(slices: Map<number, Region[]>, initialZ?: number, saveLayout?: 'combined' | 'per-slice-file'): void;
|
|
146
328
|
exitStackMode(): void;
|
|
147
329
|
isStackMode(): boolean;
|
|
330
|
+
/** The slice the regions are shown for (recorded outside stack mode too). */
|
|
331
|
+
getDisplaySlice(): number;
|
|
148
332
|
getStackSaveLayout(): 'combined' | 'per-slice-file';
|
|
149
333
|
setDisplaySlice(z: number): void;
|
|
150
334
|
getSliceRegions(): Region[];
|
|
@@ -170,26 +354,32 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
170
354
|
setAnnotationRegions(regions: Region[], showRegionLabel?: boolean, isRegionSaveOn?: boolean, fillColor?: string): void;
|
|
171
355
|
getSelectedRegions$(): Observable<Region[]>;
|
|
172
356
|
setSelectedRegions(regions: Region[]): void;
|
|
173
|
-
|
|
174
|
-
|
|
357
|
+
setActiveTool(id: string | null, options?: CanvasToolOptions): void;
|
|
358
|
+
/** @deprecated Use {@link setActiveTool}. */
|
|
359
|
+
setWandMode(active: boolean, options?: IWandOptions): void;
|
|
360
|
+
setWandOptions(options: IWandOptions): void;
|
|
175
361
|
clearActiveWandRegion(): void;
|
|
176
|
-
|
|
177
|
-
|
|
362
|
+
/** @deprecated Use {@link setActiveTool}. */
|
|
363
|
+
setBrushMode(active: boolean, options?: IBrushOptions): void;
|
|
364
|
+
setBrushOptions(options: IBrushOptions): void;
|
|
365
|
+
/** @deprecated Use {@link setActiveTool}. */
|
|
178
366
|
setVertexEraserMode(active: boolean): void;
|
|
179
367
|
setVertexEraserRadius(radius: number): void;
|
|
368
|
+
/** @deprecated Use {@link setActiveTool}. */
|
|
180
369
|
setZoomToBoxMode(active: boolean): void;
|
|
181
370
|
segmentRectangles(): Promise<number>;
|
|
182
371
|
segmentRectanglesCellpose(): Promise<number>;
|
|
183
372
|
setSamModel(id: string): void;
|
|
373
|
+
/** @deprecated Use {@link setActiveTool}. */
|
|
184
374
|
setSamPointMode(active: boolean): void;
|
|
185
375
|
commitSamPoints(): void;
|
|
186
376
|
clearSamPoints(): void;
|
|
187
|
-
getColormap(): Observable<
|
|
188
|
-
setColormap(colormap:
|
|
189
|
-
getColormapOptions():
|
|
377
|
+
getColormap(): Observable<ColormapNode | null>;
|
|
378
|
+
setColormap(colormap: ColormapNode): void;
|
|
379
|
+
getColormapOptions(): ColormapNode[];
|
|
190
380
|
getReverseScale(): Observable<boolean>;
|
|
191
|
-
setReverseScale(
|
|
192
|
-
setImageMeta(imageMeta: IImageMetadata[]): void;
|
|
381
|
+
setReverseScale(reverse: boolean): void;
|
|
382
|
+
setImageMeta(imageMeta: IImageMetadata[], imageKey?: string): void;
|
|
193
383
|
getImageMeta(): Observable<IImageMetadata[]>;
|
|
194
384
|
getHistogram(channelIndex: number, bins: number): IHistogram | null;
|
|
195
385
|
getHistogram$(channelIndex: number, bins: number): Observable<IHistogram | null>;
|
|
@@ -207,65 +397,64 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
|
|
|
207
397
|
getInvert$(): Observable<boolean>;
|
|
208
398
|
setInvert(on: boolean): void;
|
|
209
399
|
/**
|
|
210
|
-
* The active backend's region overlay
|
|
400
|
+
* The active backend's region overlay (the slice pane's while the volume view is split). Falls
|
|
401
|
+
* back to Plotly's when the active backend
|
|
211
402
|
* (OSD or napari-js) is selected but a plot isn't mounted yet, so callers always get a
|
|
212
403
|
* usable overlay.
|
|
213
404
|
*/
|
|
214
405
|
getRegionOverlay(): IRegionOverlay;
|
|
215
|
-
/**
|
|
216
|
-
* Isosurface controls when available — always Plotly's, since the isosurface
|
|
217
|
-
* plot type renders on Plotly (OSD only handles the image type).
|
|
218
|
-
*/
|
|
406
|
+
/** Isosurface controls of the backend on screen, when it renders isosurfaces. */
|
|
219
407
|
getIsosurfaceControls(): IIsosurfaceControls | null;
|
|
220
|
-
/** 3D scene controls
|
|
221
|
-
*
|
|
408
|
+
/** 3D scene controls of the backend on screen (Plotly or napari-js), or null on a
|
|
409
|
+
* 2D-only one. */
|
|
222
410
|
getSurface3dControls(): ISurface3dControls | null;
|
|
223
|
-
/** Intensity (line-ROI) controls
|
|
224
|
-
*
|
|
411
|
+
/** Intensity (line-ROI) controls, whichever backend draws the image: the
|
|
412
|
+
* IntensityProfileService adds the line to the store, and every backend
|
|
413
|
+
* (Plotly included) draws it from the store's update event. */
|
|
225
414
|
getIntensityControls(): IIntensityControls | null;
|
|
226
415
|
/**
|
|
227
|
-
* Spatial-omics controls, or null when no `SPATIAL_DATA_PORT` is bound.
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
* backend-neutral: the view state lives in the shared `VisualizerStore` (like
|
|
231
|
-
* the colormap), so the controls keep working across a plot-type switch and a
|
|
232
|
-
* host can drive them before any backend has mounted.
|
|
416
|
+
* Spatial-omics controls, or null when no `SPATIAL_DATA_PORT` is bound. Served by a
|
|
417
|
+
* backend-neutral {@link SpatialControlsFacade} (state in the shared stores), so the
|
|
418
|
+
* controls work across a plot-type switch and before any backend has mounted.
|
|
233
419
|
*/
|
|
234
420
|
getSpatialControls(): ISpatialControls | null;
|
|
235
|
-
/**
|
|
236
|
-
|
|
237
|
-
*
|
|
238
|
-
* A column is checkable against the declared list. A gene is checkable only when
|
|
239
|
-
* the dataset inlines its feature names — a dataset too wide to inline them
|
|
240
|
-
* (typeahead-only) keeps the source, and a name that turns out not to exist
|
|
241
|
-
* surfaces as the chart's "could not be charted" rather than as a silent reset.
|
|
242
|
-
*/
|
|
243
|
-
private canColorBy;
|
|
244
|
-
/** Memoised so consumers can hold the object across calls. */
|
|
245
|
-
private spatialControls;
|
|
246
|
-
/** Latest dataset, mirrored so `selectFromRegions()` can answer synchronously
|
|
247
|
-
* — it runs from a button click and must not await a round-trip. */
|
|
248
|
-
private currentSpatialDataset;
|
|
421
|
+
/** Created on first use; owns the dataset subscription. */
|
|
422
|
+
private spatialFacade;
|
|
249
423
|
/** Displayed slice. Only a volume-backed spatial dataset reads it, to keep a
|
|
250
424
|
* region drawn over one section from selecting the whole depth behind it. */
|
|
251
425
|
private currentZIndex;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
*
|
|
426
|
+
/** Angular calls this when the injector providing the router is destroyed — the host
|
|
427
|
+
* component for a `provideVisualization()` chain. The dataset subscription would
|
|
428
|
+
* otherwise keep the whole isolated chain reachable from the root data port. */
|
|
429
|
+
ngOnDestroy(): void;
|
|
430
|
+
/**
|
|
431
|
+
* Intensity-profile sampling, whichever backend is on screen: the sampling is the
|
|
432
|
+
* backend-neutral IntensityProfileService's; the viewport changes come from every
|
|
433
|
+
* backend that reports them (OpenSeadragon, napari-js), merged into one stable
|
|
434
|
+
* stream the inset subscribes to once.
|
|
435
|
+
*/
|
|
436
|
+
getIntensitySampling(): IIntensitySampling;
|
|
437
|
+
private readonly intensitySampling;
|
|
438
|
+
/** @deprecated Use `getIntensitySampling().ensureIntensitySampling()`. */
|
|
255
439
|
ensureIntensitySampling(imageInfo: IImageInfo, zIndex: number): Promise<void>;
|
|
256
|
-
/**
|
|
257
|
-
|
|
258
|
-
|
|
440
|
+
/** Crops for sampling are sized from the plot div (whichever backend renders into it). */
|
|
441
|
+
private pointSamplingAtPlot;
|
|
442
|
+
/** @deprecated Use `getIntensitySampling().getViewportChange$()`. */
|
|
259
443
|
getViewportChange$(): Observable<{
|
|
260
444
|
x: number;
|
|
261
445
|
y: number;
|
|
262
446
|
width: number;
|
|
263
447
|
height: number;
|
|
264
448
|
}>;
|
|
265
|
-
/**
|
|
266
|
-
* ROI at display resolution (sampling always lives in Plotly). */
|
|
449
|
+
/** @deprecated Use `getIntensitySampling().refreshIntensitySamplingForRoi()`. */
|
|
267
450
|
refreshIntensitySamplingForRoi(x: number, y: number, width: number, height: number, zIndex: number): void;
|
|
451
|
+
/** The visualizer view is going away: detach every backend — dropping their view-bound
|
|
452
|
+
* subscriptions and disposing the napari-js viewer, whose canvas, render loop and GPU
|
|
453
|
+
* buffers would otherwise outlive the view (for a component-scoped chain, forever).
|
|
454
|
+
* Nothing is on screen afterwards, so the next plot starts from the default backend. */
|
|
455
|
+
detach(): void;
|
|
456
|
+
/** @deprecated Use {@link detach}. */
|
|
268
457
|
unsubscribe(): void;
|
|
269
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<RoutingVisualizerService, [null, null, null, null, null, null, null, { optional: true; }]>;
|
|
458
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RoutingVisualizerService, [null, null, null, null, null, null, null, null, { optional: true; }]>;
|
|
270
459
|
static ɵprov: i0.ɵɵInjectableDeclaration<RoutingVisualizerService>;
|
|
271
460
|
}
|