@jax-data-science/sci-image-visualizer 0.8.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -460
- package/esm2022/index.mjs +28 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +3 -4
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +66 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +157 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +263 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +344 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +358 -4218
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +439 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +153 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +185 -718
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +118 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +373 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +99 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +402 -651
- package/esm2022/lib/region-editor/region-metrics.mjs +68 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +134 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +153 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +459 -411
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +46 -3
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +140 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-store.service.mjs +279 -675
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +49 -71
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +114 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +81 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +68 -117
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +60 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer.component.mjs +480 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs +41083 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +13 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +1 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +221 -54
- package/lib/contracts/viz-config.d.ts +1 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +0 -1
- package/lib/implementations/napari-js/napari-loading-state.d.ts +30 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +62 -70
- package/lib/implementations/napari-js/napari-scene.d.ts +93 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +89 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +121 -883
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +104 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +37 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +36 -48
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +80 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +18 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +40 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +17 -0
- package/lib/models/region.d.ts +40 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +56 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +166 -199
- package/lib/region-editor/region-metrics.d.ts +26 -0
- package/lib/region-editor/region-persistence.service.d.ts +69 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +83 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +157 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +110 -58
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +35 -1
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +63 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-store.service.d.ts +104 -112
- package/lib/store/visualizer-store.service.d.ts +22 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +60 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +40 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +47 -83
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +27 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer.component.d.ts +201 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import type { TiledSource } from 'napari-js';
|
|
3
|
+
import { IImageInfo } from '../../contracts/image.contract';
|
|
4
|
+
import { IChannelState, IHistogram } from '../../contracts/channel-histogram-api.contract';
|
|
5
|
+
import { TileAccessPort } from '../../contracts/ports/tile-access.port';
|
|
6
|
+
import { SimpleSliceAccessService } from '../simple-slice-access.service';
|
|
7
|
+
import { TileDescriptor } from '../tile-server';
|
|
8
|
+
import { LumaPlane } from './napari-helpers';
|
|
9
|
+
/** What the navigator draws: a whole-slice picture (a canvas read from the pyramid, or a bitmap). */
|
|
10
|
+
export type OverviewImage = ImageBitmap | HTMLCanvasElement | OffscreenCanvas;
|
|
11
|
+
/** An assembled uint8 (luminance) volume, x-fastest then y then z. */
|
|
12
|
+
export interface AssembledVolume {
|
|
13
|
+
data: Uint8Array;
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
depth: number;
|
|
17
|
+
}
|
|
18
|
+
/** Decode an `ImageBitmap` to a single-channel uint8 luminance plane with napari-js's
|
|
19
|
+
* `bitmapToScalar` (server bands are grey, R=G=B, and decode exactly; a colour composite
|
|
20
|
+
* becomes its BT.601 luminance). `maxSide` caps the longest side (downscaling on the canvas
|
|
21
|
+
* draw) — used to keep pre-loaded surface slice planes small. Closes the bitmap. */
|
|
22
|
+
export declare function bitmapToLuminance(bmp: ImageBitmap, maxSide?: number): LumaPlane;
|
|
23
|
+
/**
|
|
24
|
+
* The napari-js backend's client of the jit-service tile server (review Appendix B, step 2), on
|
|
25
|
+
* the shared `tile-server/` protocol: the `/tiles/info` descriptor (polled, cached per source,
|
|
26
|
+
* shared between concurrent callers), whole-slice reads from the pyramid (napari-js `readLevel`), the pyramidal
|
|
27
|
+
* {@link TiledSource}s the 2D image draws, volume assembly, surface planes, the native `/histogram`
|
|
28
|
+
* and the `/export/tiff` download.
|
|
29
|
+
*
|
|
30
|
+
* The image is always passed in — the client never reads which image the service has loaded —
|
|
31
|
+
* so a descriptor can only ever describe the image a caller asked about (NAPARI-SVC-2).
|
|
32
|
+
*
|
|
33
|
+
* Scene-scoped state (the poll in flight, the sources that answered "no", the native histograms)
|
|
34
|
+
* lives until {@link startScene}; the descriptor cache itself survives scenes, keyed by source.
|
|
35
|
+
*/
|
|
36
|
+
export declare class NapariTileClient {
|
|
37
|
+
private readonly tiles;
|
|
38
|
+
private readonly simpleStack;
|
|
39
|
+
private readonly api;
|
|
40
|
+
/** Cached `/tiles/info` pyramid descriptor + the infoB64 it was fetched for. */
|
|
41
|
+
private descriptor;
|
|
42
|
+
private descriptorKey;
|
|
43
|
+
/** The poll in flight, shared by every caller asking for the same `infoB64`. */
|
|
44
|
+
private descriptorPoll;
|
|
45
|
+
/** `infoB64`s this scene's poll got no descriptor for (non-202 status, empty body, timeout).
|
|
46
|
+
* Scene-scoped, so a re-plot retries a slow or flaky server once. */
|
|
47
|
+
private readonly descriptorMisses;
|
|
48
|
+
/** Native-bit-depth histograms from `/histogram`, keyed `${z}|${channel}` (>8-bit images). */
|
|
49
|
+
private readonly nativeHistograms;
|
|
50
|
+
/** The current scene's lifetime: a poll started under it ends when it is aborted. */
|
|
51
|
+
private scene;
|
|
52
|
+
constructor(tiles: TileAccessPort, simpleStack: SimpleSliceAccessService, api: string);
|
|
53
|
+
/** Whether `info` is a self-contained stack (`tiled:false`: each slice its own file, no
|
|
54
|
+
* server pyramid). */
|
|
55
|
+
isSimple(info: IImageInfo | undefined): boolean;
|
|
56
|
+
/** A new scene: forget the scene-scoped state and poll under `signal` from now on. */
|
|
57
|
+
startScene(signal: AbortSignal): void;
|
|
58
|
+
/**
|
|
59
|
+
* Fetch + cache the server pyramid descriptor (`GET /tiles/info`): the REAL per-level tile grid,
|
|
60
|
+
* tile size, channel metadata and physical pixel size. The backend returns 202 while the source
|
|
61
|
+
* is still caching, so we poll ({@link pollDescriptor}). Cached per `infoB64`; returns null if it
|
|
62
|
+
* never becomes ready, or the server will not describe the source (callers fall back to a
|
|
63
|
+
* single-tile fetch). Read it back through {@link currentDescriptor}. This is the authoritative
|
|
64
|
+
* grid — guessing level dims from `trueImageSize` overshoots the real grid and the server 400s
|
|
65
|
+
* out-of-range tiles.
|
|
66
|
+
*/
|
|
67
|
+
ensureDescriptor(info: IImageInfo | undefined): Promise<TileDescriptor | null>;
|
|
68
|
+
/**
|
|
69
|
+
* The `/tiles/info` loop behind {@link ensureDescriptor}: the shared jit-service poll
|
|
70
|
+
* (`tile-server/pollDescriptor`). Re-polls only on 202 (the server is still caching the source);
|
|
71
|
+
* any other status means this server will not describe it, so the answer is null at once. Each
|
|
72
|
+
* request gives up after its own timeout — a hung request would otherwise never reach the
|
|
73
|
+
* deadline check — and the whole poll ends (null) as soon as `scene` is aborted.
|
|
74
|
+
*/
|
|
75
|
+
private pollDescriptor;
|
|
76
|
+
/**
|
|
77
|
+
* The pyramid descriptor of `info`, or null when it has none.
|
|
78
|
+
*
|
|
79
|
+
* The cache is keyed by `infoB64` and survives image switches and failed polls, so reading it
|
|
80
|
+
* directly would hand a `tiled:false` stack (or an image whose poll never answered) the
|
|
81
|
+
* PREVIOUS image's size, µm/pixel, tile size and bit depth. Every read site goes through here.
|
|
82
|
+
*/
|
|
83
|
+
currentDescriptor(info: IImageInfo | undefined): TileDescriptor | null;
|
|
84
|
+
/** µm per pixel along x for `info`: the descriptor's, else the image metadata's; 0 when
|
|
85
|
+
* neither declares it. */
|
|
86
|
+
mppX(info: IImageInfo | undefined): number;
|
|
87
|
+
/**
|
|
88
|
+
* Slice `z` as ONE image, for a source with no pyramid to read: a `tiled:false` stack's own
|
|
89
|
+
* file for `z`, else (no descriptor) the server's single top-left tile — correct for
|
|
90
|
+
* small/simple images.
|
|
91
|
+
*
|
|
92
|
+
* A self-contained multi-slice stack's `z` indexes a completely different file's own preview
|
|
93
|
+
* URL, not an internal slice of one server-tiled file, so it is resolved and fetched via
|
|
94
|
+
* SimpleSliceAccessService (shared with OSD; see its docs for why this can't be a bare fetch())
|
|
95
|
+
* rather than as a /tile?info=...&z= request against whichever single file
|
|
96
|
+
* getSelectedInfoB64() points at (which would 400/mismatch for any z beyond that one file's own
|
|
97
|
+
* extent). `channel` selects a band: a serverless multichannel stack's own plane
|
|
98
|
+
* (`channelUrls[z][channel]`, the client-side analog of the server's per-channel
|
|
99
|
+
* `/tile?channel=c`), else the server's.
|
|
100
|
+
*/
|
|
101
|
+
fetchImage(info: IImageInfo | undefined, z: number, channel?: number): Promise<ImageBitmap>;
|
|
102
|
+
/**
|
|
103
|
+
* Slice `z` as a single-channel uint8 luminance plane. With a pyramid, napari-js's `readLevel`
|
|
104
|
+
* reads it from the same {@link tiledSource} the 2D view draws: the finest level whose tile grid
|
|
105
|
+
* fits `maxTiles` and whose longest side fits the GPU texture limit (no finer than `maxSide`
|
|
106
|
+
* needs, when given), stitched with bounded concurrency and area-averaged down to `maxSide`.
|
|
107
|
+
* Without one, the single image of {@link fetchImage}. `channel` selects a band (real levels
|
|
108
|
+
* only); omit it for the composite, whose overview levels let a large image read a small level.
|
|
109
|
+
* `compositeFallback`: see {@link planeSource}. `signal` cancels the read (it rejects).
|
|
110
|
+
*/
|
|
111
|
+
readPlane(info: IImageInfo | undefined, z: number, channel: number | undefined, opts: {
|
|
112
|
+
maxTiles: number;
|
|
113
|
+
maxSide?: number;
|
|
114
|
+
compositeFallback?: boolean;
|
|
115
|
+
signal?: AbortSignal;
|
|
116
|
+
}): Promise<LumaPlane>;
|
|
117
|
+
/**
|
|
118
|
+
* The scalar source for one decimated plane of band `channel`. A band has tiles only at the
|
|
119
|
+
* (few, large) real Bio-Formats levels; when none of them fits the budget — e.g. the coarsest
|
|
120
|
+
* real level is still 14982×18670, ~1100 full-res tiles — stitching it per slice floods the
|
|
121
|
+
* server (504s) and stalls the load. The composite pyramid has small overview levels, so the
|
|
122
|
+
* plane is read from the composite instead (its luminance). Only for a caller that wants one
|
|
123
|
+
* decimated plane (the surface height): for a multichannel VOLUME every channel would then read
|
|
124
|
+
* the same composite and the channels would collapse into one, so volumes keep each band.
|
|
125
|
+
*/
|
|
126
|
+
private planeSource;
|
|
127
|
+
/**
|
|
128
|
+
* A small picture of the whole slice for the navigator: the composite (or band `channel`) at the
|
|
129
|
+
* finest level a single tile holds, else the coarsest level, as an RGBA canvas. Without a
|
|
130
|
+
* pyramid, the single image of {@link fetchImage}.
|
|
131
|
+
*/
|
|
132
|
+
overviewImage(info: IImageInfo | undefined, z: number, channel?: number): Promise<OverviewImage>;
|
|
133
|
+
/**
|
|
134
|
+
* Slice `z`'s R, G and B bands, as three uint8 planes: the composite read as RGBA at the
|
|
135
|
+
* finest level within `maxTiles` (as {@link readPlane} picks it; 1 for a cheap overview
|
|
136
|
+
* sample), else the single image of {@link fetchImage}. The raw bands of an RGB image, for the
|
|
137
|
+
* per-band layers and their histograms.
|
|
138
|
+
*/
|
|
139
|
+
readRgbBands(info: IImageInfo | undefined, z: number, maxTiles?: number): Promise<LumaPlane[]>;
|
|
140
|
+
/** Fetch slice `z` and read it back as a single-channel uint8 plane (see {@link readPlane}),
|
|
141
|
+
* within `budgetTiles`: the 2D stitch fallback reads at the full budget, the histogram samples
|
|
142
|
+
* at 1 for a cheap overview tile. */
|
|
143
|
+
fetchChannelData(info: IImageInfo | undefined, z: number, channel?: number, budgetTiles?: number): Promise<LumaPlane>;
|
|
144
|
+
/** Tile budget to stitch a whole slice at ~`targetPx` resolution from the pyramid. Shared by the
|
|
145
|
+
* surface plane fetch and the volume assembly, so both cap their reads by the decimate factor. */
|
|
146
|
+
tileBudgetFor(info: IImageInfo | undefined, targetPx: number): number;
|
|
147
|
+
/**
|
|
148
|
+
* Build a pyramidal TiledSource backed by the server `/tile` endpoint. `channel` selects a band
|
|
149
|
+
* (grayscale luminance, real levels only); omit it for the composite (RGBA, all levels).
|
|
150
|
+
*
|
|
151
|
+
* For the 2D view, `scene` is the signal of the render that asked for it, taken before that
|
|
152
|
+
* render's awaits, and `onTile` is told of each tile request and handed back the tile's end. A
|
|
153
|
+
* request issued once `scene` is aborted (a disposed source still fetching after a reset) is not
|
|
154
|
+
* reported, and one that settles after it does not end, so it can never count toward the next
|
|
155
|
+
* scene. A tile request's own `signal` (napari-js aborts a read it no longer needs) aborts the
|
|
156
|
+
* HTTP request.
|
|
157
|
+
*/
|
|
158
|
+
tiledSource(desc: TileDescriptor, channel: number | undefined, channels: 1 | 4, scene?: AbortSignal, onTile?: () => () => void): TiledSource;
|
|
159
|
+
/**
|
|
160
|
+
* The composite pyramid's R, G and B bands as three scalar {@link TiledSource}s — one per
|
|
161
|
+
* additive layer, so each band takes its own window, gamma, invert, tint and visibility — that
|
|
162
|
+
* share ONE `/tile` request per tile. The three layers ask for a tile in the same frame: the
|
|
163
|
+
* first fetches the RGBA tile and splits it, the other two take their band from the same
|
|
164
|
+
* promise, and the split tile is dropped once all three have it. A band that asks later (one
|
|
165
|
+
* shown again after being hidden) finds it in a small LRU, else fetches it again. `scene` and
|
|
166
|
+
* `onTile` as {@link tiledSource}: the loading badge counts the one request.
|
|
167
|
+
*/
|
|
168
|
+
rgbBandSources(desc: TileDescriptor, scene?: AbortSignal, onTile?: () => () => void): TiledSource[];
|
|
169
|
+
/**
|
|
170
|
+
* Assemble a downsampled uint8 volume (luminance) of `info`'s stack with napari-js's
|
|
171
|
+
* `assembleVolume`: every `sliceStep`th slice, read from the band's (or composite's) pyramid at
|
|
172
|
+
* the level that `maxSlice` needs, within its tile budget, and area-averaged to `maxSlice` on
|
|
173
|
+
* the longest side. Slices are read with bounded concurrency (the connection pool stays full
|
|
174
|
+
* without flooding it on a deep stack), each reporting `progress` (0–100) as it lands so the host
|
|
175
|
+
* shows a determinate progress bar. Null when `signal` aborts (a Cancel or a new plot), which
|
|
176
|
+
* also aborts the tile requests in flight — a partial volume is never returned.
|
|
177
|
+
*/
|
|
178
|
+
assembleVolume(info: IImageInfo | undefined, opts: {
|
|
179
|
+
maxSlice?: number;
|
|
180
|
+
sliceStep?: number;
|
|
181
|
+
}, channel: number | undefined, hooks: {
|
|
182
|
+
signal: AbortSignal;
|
|
183
|
+
progress(percent: number): void;
|
|
184
|
+
}): Promise<AssembledVolume | null>;
|
|
185
|
+
/**
|
|
186
|
+
* The scalar source a volume reads: the band's (or composite's) pyramid; without one, one whole
|
|
187
|
+
* image per slice ({@link fetchImage}) as a single-tile level sized by the first slice, which is
|
|
188
|
+
* fetched here and served again as that slice's tile.
|
|
189
|
+
*/
|
|
190
|
+
private volumeSource;
|
|
191
|
+
/**
|
|
192
|
+
* Slice `z` as a single WHOLE-image luminance plane (decimated to `maxGrid`), for the surface.
|
|
193
|
+
* Prefers the server pyramid, read at the level the grid needs ({@link readPlane}, which may
|
|
194
|
+
* drop a band to the composite overview); without a descriptor, the app's complete per-slice
|
|
195
|
+
* image (`urls`/`smallUrls`, as the Plotly surface) — never a lone top-left tile, which would be
|
|
196
|
+
* a corner of the slice — and only as a last resort the single-tile fetch.
|
|
197
|
+
*/
|
|
198
|
+
fetchPlane(info: IImageInfo | undefined, z: number, channel: number | undefined, maxGrid: number): Promise<LumaPlane>;
|
|
199
|
+
/**
|
|
200
|
+
* Channel `channel`'s native-bit-depth histogram at slice `z` when `info` is a >8-bit image —
|
|
201
|
+
* the displayed pixels are 8-bit, so a client histogram would be clipped — cached per
|
|
202
|
+
* `(z, channel)`; null for an 8-bit channel, which the caller bins from the client data.
|
|
203
|
+
*/
|
|
204
|
+
nativeHistogram$(info: IImageInfo | undefined, z: number, channel: number, bins: number): Observable<IHistogram | null> | null;
|
|
205
|
+
/** Fetch + cache one channel's native-bit-depth histogram from `GET /histogram` (>8-bit),
|
|
206
|
+
* through the shared jit-service client — whose URL carries the per-app-load cache-buster
|
|
207
|
+
* this backend used to omit, so a reload showed the server's 24 h-cached histogram. */
|
|
208
|
+
fetchNativeHistogram(channel: number, bins: number, z: number, key: string): Promise<IHistogram | null>;
|
|
209
|
+
/** Native-bit-depth (16/32-bit) multi-band TIFF export of slice `z` via the server
|
|
210
|
+
* `/export/tiff` endpoint — the displayed PNG is an 8-bit figure, this preserves the true pixel
|
|
211
|
+
* values. Visible channels only (omitted when all are visible → server default). Mirrors the
|
|
212
|
+
* OSD backend. */
|
|
213
|
+
exportTiff(z: number, states: IChannelState[], fileName: string | undefined): Promise<void>;
|
|
214
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import type { Viewer } from 'napari-js';
|
|
2
|
+
import { CanvasToolId } from '../../contracts/display-types';
|
|
3
|
+
import { ICoordinateTransform } from '../../contracts/coordinate-transform.contract';
|
|
4
|
+
import { PixelData } from '../../contracts/visualizer.contract';
|
|
5
|
+
import { ICellSegmenter } from '../../contracts/cell-segmenter.contract';
|
|
6
|
+
import { RegionStore } from '../../store/region-store.service';
|
|
7
|
+
import { CachedImageData, CanvasToolHost } from '../../toolbar/tool-kit/canvas-tool';
|
|
8
|
+
import { CanvasToolManager } from '../../toolbar/tool-kit/canvas-tool-manager';
|
|
9
|
+
import { WandService } from '../../toolbar/wand/wand.service';
|
|
10
|
+
import { SamToolService } from '../../toolbar/segmentation/sam-tool.service';
|
|
11
|
+
import { SamPointToolService } from '../../toolbar/segmentation/sam-point-tool.service';
|
|
12
|
+
import { CellSegmentToolService } from '../../toolbar/segmentation/cell-segment-tool.service';
|
|
13
|
+
import { NapariRegionOverlay, OverlayViewer } from './napari-region-overlay';
|
|
14
|
+
/** A world-space rectangle (x, y = top-left). */
|
|
15
|
+
export interface WorldRect {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
}
|
|
21
|
+
/** ICoordinateTransform over the napari camera: pointer client coords ↔ image/world coords. */
|
|
22
|
+
export declare class NapariCoordinateTransform implements ICoordinateTransform {
|
|
23
|
+
private readonly viewer;
|
|
24
|
+
private readonly ready;
|
|
25
|
+
constructor(viewer: {
|
|
26
|
+
canvasToWorld(clientX: number, clientY: number): [number, number];
|
|
27
|
+
readonly camera: {
|
|
28
|
+
zoom: number;
|
|
29
|
+
};
|
|
30
|
+
}, ready: () => boolean);
|
|
31
|
+
clientToData(clientX: number, clientY: number): {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
};
|
|
35
|
+
dataLengthToScreen(dataLength: number): number;
|
|
36
|
+
isReady(): boolean;
|
|
37
|
+
}
|
|
38
|
+
/** What the bridge reads from the service: the live viewer and its DOM, the image on screen, and
|
|
39
|
+
* where the viewport and zone-crossing output go. */
|
|
40
|
+
export interface ToolBridgeHost {
|
|
41
|
+
viewer(): Viewer | null;
|
|
42
|
+
host(): HTMLElement | null;
|
|
43
|
+
canvas(): HTMLCanvasElement | null;
|
|
44
|
+
/** The image's full-resolution size, or null before one is drawn. */
|
|
45
|
+
imageSize(): {
|
|
46
|
+
width: number;
|
|
47
|
+
height: number;
|
|
48
|
+
} | null;
|
|
49
|
+
frameIndex(): number;
|
|
50
|
+
fileName(): string | undefined;
|
|
51
|
+
/** The visible region changed (clamped to the image); called outside the Angular zone. */
|
|
52
|
+
viewportChanged(rect: WorldRect): void;
|
|
53
|
+
/** Run `fn` outside / inside the Angular zone. */
|
|
54
|
+
outsideZone<T>(fn: () => T): T;
|
|
55
|
+
inZone<T>(fn: () => T): T;
|
|
56
|
+
}
|
|
57
|
+
/** The services the pixel tools and segmentation runs need. */
|
|
58
|
+
export interface ToolBridgeDeps {
|
|
59
|
+
regionStore: RegionStore;
|
|
60
|
+
wandService: WandService;
|
|
61
|
+
samTool: SamToolService;
|
|
62
|
+
samPointTool: SamPointToolService;
|
|
63
|
+
cellSegmentTool: CellSegmentToolService;
|
|
64
|
+
cellSegmenter: ICellSegmenter | null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The napari backend's side of the shared canvas tools (review Appendix B, step 4): the region
|
|
68
|
+
* overlay, the {@link CanvasToolManager} and its host, the coordinate transform, and the
|
|
69
|
+
* displayed-pixel readback the wand, brush, eraser and SAM/cellpose read — kept current as the
|
|
70
|
+
* camera moves, but only paid for while a pixel tool needs it (NAPARI-SVC-26).
|
|
71
|
+
*
|
|
72
|
+
* One per service; {@link teardown} ends a scene's interaction (overlay, camera hook, timers,
|
|
73
|
+
* pixels) and an `install…Interaction` starts the next one's.
|
|
74
|
+
*/
|
|
75
|
+
export declare class NapariToolBridge {
|
|
76
|
+
private readonly host;
|
|
77
|
+
private readonly deps;
|
|
78
|
+
/** What this backend's canvas tools read and write (one host for every tool). */
|
|
79
|
+
readonly toolHost: CanvasToolHost;
|
|
80
|
+
/** This backend's own wand, brush, eraser, zoom-to-box and SAM point tools. */
|
|
81
|
+
readonly canvasTools: CanvasToolManager;
|
|
82
|
+
/** SVG region-drawing overlay (null until a 2D/3D interaction is installed). */
|
|
83
|
+
regionOverlay: NapariRegionOverlay | null;
|
|
84
|
+
/** The pixel tools' pointer ↔ world transform for the current viewer. */
|
|
85
|
+
coordTransform: ICoordinateTransform | null;
|
|
86
|
+
/** The last readback of the displayed composite (the pixel tools' source). */
|
|
87
|
+
lastPixels: PixelData | null;
|
|
88
|
+
/** Visible world rect captured AT the last readback — must pair with `lastPixels` so the pixel
|
|
89
|
+
* tools' ratios/origin match the matrix's camera (using the live rect after a pan/zoom would
|
|
90
|
+
* mis-scale the region). */
|
|
91
|
+
lastPixelsRect: WorldRect | null;
|
|
92
|
+
/** Active tools that read the displayed pixels; a pan/zoom re-reads them only while non-empty. */
|
|
93
|
+
readonly pixelTools: Set<CanvasToolId>;
|
|
94
|
+
/** The camera moved since {@link lastPixels} was read. */
|
|
95
|
+
pixelsStale: boolean;
|
|
96
|
+
/** Cached CachedImageData built from the last readback (rebuilt when lastPixels changes). */
|
|
97
|
+
private cachedImage;
|
|
98
|
+
private cachedImageSource;
|
|
99
|
+
/** Debounced readback timer + camera-change unsubscribe (keep lastPixels current for tools). */
|
|
100
|
+
private readbackTimer;
|
|
101
|
+
/** Debounced viewport emission for a camera change that needs no pixels. */
|
|
102
|
+
private viewportTimer;
|
|
103
|
+
private cameraOff;
|
|
104
|
+
constructor(host: ToolBridgeHost, deps: ToolBridgeDeps);
|
|
105
|
+
/**
|
|
106
|
+
* The interaction stack every 2D mode needs: the region overlay (draw/select/edit), the pixel
|
|
107
|
+
* tools that read back displayed pixels (wand, brush, vertex eraser, zoom-to-box, SAM/cellpose),
|
|
108
|
+
* and a camera hook that keeps that readback current as the view pans/zooms and tiled levels
|
|
109
|
+
* load.
|
|
110
|
+
*
|
|
111
|
+
* One call for all of it because forgetting it is invisible: the toolbar gates its region buttons
|
|
112
|
+
* on 2D-vs-3D rather than on plot type, so a 2D mode that skips this shows every tool and silently
|
|
113
|
+
* does nothing. That is exactly what happened to the spatial and region-centroid scatter modes.
|
|
114
|
+
*/
|
|
115
|
+
install2dInteraction(viewer: Viewer, host: HTMLElement): void;
|
|
116
|
+
/**
|
|
117
|
+
* Region drawing for the 3D cloud.
|
|
118
|
+
*
|
|
119
|
+
* Reuses {@link NapariRegionOverlay} verbatim by handing it a SCREEN-SPACE viewer: the drawn
|
|
120
|
+
* shape is a lasso in canvas pixels, so "world" is the canvas and both transforms are identity
|
|
121
|
+
* (bar the client→canvas offset). Every existing tool — rectangle, polygon, freehand — therefore
|
|
122
|
+
* works in 3D with no new drawing code.
|
|
123
|
+
*
|
|
124
|
+
* A screen-space shape stops meaning anything the moment the camera moves, so an orbit clears
|
|
125
|
+
* the regions drawn in this view (and only those). The SELECTION they produced is kept: that is
|
|
126
|
+
* the durable artefact, and the highlighted points stay highlighted from every angle.
|
|
127
|
+
*/
|
|
128
|
+
install3dInteraction(viewer: Viewer, host: HTMLElement): void;
|
|
129
|
+
/**
|
|
130
|
+
* The {@link OverlayViewer} the 3D region overlay draws through: "world" is the canvas, in
|
|
131
|
+
* canvas-local CSS pixels. A pointer arrives in CLIENT pixels, so `canvasToWorld` subtracts the
|
|
132
|
+
* canvas's client offset (without it the lasso was drawn offset from the cursor whenever the
|
|
133
|
+
* canvas was not at the page origin); drawing is then the identity, with no layout read.
|
|
134
|
+
*/
|
|
135
|
+
screenSpaceViewer(viewer: Viewer): OverlayViewer;
|
|
136
|
+
/** End the scene's interaction: the overlay, the camera hook, the pending timers and the
|
|
137
|
+
* pixels read from the old canvas. The armed tool and the pixel-tool set persist. */
|
|
138
|
+
teardown(): void;
|
|
139
|
+
/** Read the displayed composite into `lastPixels` (the pixel-tools' source) + emit the clamped
|
|
140
|
+
* visible region. A fresh PixelData object means cachedImageData() rebuilds automatically. */
|
|
141
|
+
runReadback(): Promise<void>;
|
|
142
|
+
/** A readback on the next frame — after a plot or a scene change drew something new. */
|
|
143
|
+
scheduleReadback(): void;
|
|
144
|
+
/** Debounced readback — armed on camera changes while a pixel tool is active, so `lastPixels`
|
|
145
|
+
* tracks the current view after a pan/zoom settles, which the on-canvas pixel tools
|
|
146
|
+
* (wand/brush/SAM) read synchronously. Coalesces rapid changes. */
|
|
147
|
+
armReadback(delayMs?: number): void;
|
|
148
|
+
/** Emit the visible region, clamped to the image. */
|
|
149
|
+
private emitViewport;
|
|
150
|
+
/**
|
|
151
|
+
* A 2D pan/zoom. The full-canvas GPU readback is paid for only while a pixel tool reads it
|
|
152
|
+
* ({@link pixelTools}); otherwise only the viewport rect is emitted (debounced), and the pixels
|
|
153
|
+
* are marked stale for whoever next needs them (a tool arms a fresh readback as it activates).
|
|
154
|
+
*/
|
|
155
|
+
private onViewChanged;
|
|
156
|
+
/** Build the pixel tools' coordinate transform for the current viewer. */
|
|
157
|
+
private buildCoordinateTransform;
|
|
158
|
+
/** Zoom/pan the camera to fit a data-space rectangle `[xMin, xMax, yMax, yMin]`. */
|
|
159
|
+
private applyZoomToBox;
|
|
160
|
+
/** Build CachedImageData from the most recent readback — its RGBA device pixels are the frame
|
|
161
|
+
* as-is (packed, no per-pixel arrays: NAPARI-SVC-23) — with ratios/origin mapping image coords
|
|
162
|
+
* ↔ readback pixels. Cached until the readback changes. */
|
|
163
|
+
cachedImageData(): CachedImageData | null;
|
|
164
|
+
/**
|
|
165
|
+
* The service's `beforeToolChange`: track the pixel-reading tool (see {@link onViewChanged}),
|
|
166
|
+
* gate the camera, and arm a fresh readback for a pixel tool. Nothing is armed without a
|
|
167
|
+
* viewer, nor a pixel tool before a plot built its coordinate transform.
|
|
168
|
+
*
|
|
169
|
+
* Control gating: a tool that ACTIVATES disables the camera controls; deactivation is a no-op
|
|
170
|
+
* because the host always calls the region overlay's setMode FIRST in each toggle (which sets
|
|
171
|
+
* the baseline enabled/disabled), so re-enabling here would fight a freshly-activated draw mode.
|
|
172
|
+
*/
|
|
173
|
+
beforeToolChange(next: CanvasToolId | null): boolean;
|
|
174
|
+
/** SAM over the drawn rectangles — a server round-trip that reads the rectangles from the
|
|
175
|
+
* RegionStore and the image from a fresh readback. Returns the regions added. */
|
|
176
|
+
segmentRectangles(): Promise<number>;
|
|
177
|
+
/** Cellpose over the drawn rectangles (see {@link segmentRectangles}). */
|
|
178
|
+
segmentRectanglesCellpose(): Promise<number>;
|
|
179
|
+
}
|