@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,46 @@
|
|
|
1
|
+
import type { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { IImageInfo } from '../contracts/image.contract';
|
|
3
|
+
import { IRegionStore } from '../contracts/visualizer.contract';
|
|
4
|
+
import { RegionSource } from '../region-source/region-source';
|
|
5
|
+
import type { RegionSourceOpener, RegionSourceSlices } from '../store/region-source-scope';
|
|
6
|
+
/** The region-store members {@link applyImageRois} writes through. A target without
|
|
7
|
+
* `attachRegionSource` loads every ROI file as regions. */
|
|
8
|
+
export type RegionLoadTarget = Pick<IRegionStore, 'importRegions' | 'enterStackMode' | 'setRegions' | 'resetUndoHistory'> & {
|
|
9
|
+
attachRegionSource?(source: RegionSource | RegionSourceOpener, slices?: RegionSourceSlices): void;
|
|
10
|
+
/** The slice shown now (what a stack's source, laid out once it opens, makes live). */
|
|
11
|
+
getDisplaySlice?(): number;
|
|
12
|
+
/** Record the slice shown (outside stack mode it only records it): see {@link applyImageRois}. */
|
|
13
|
+
setDisplaySlice?(z: number): void;
|
|
14
|
+
isStackMode?(): boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Apply an image's saved ROIs once its render has landed, choosing the region
|
|
18
|
+
* layout from the image's shape:
|
|
19
|
+
*
|
|
20
|
+
* - **Folder stack** (`isStack && tiled === false`, see loadSeriesAsStack): a stack
|
|
21
|
+
* of self-contained per-slice files. Each slice-file may carry its own sibling
|
|
22
|
+
* `<stem>.geojson` (`roiJsonStrs[z]`), but a fresh folder with none yet leaves
|
|
23
|
+
* `roiJsonStrs` undefined — so this keys off `tiled === false`, NOT `roiJsonStrs`,
|
|
24
|
+
* and an unannotated folder stack still enters the per-slice-file layout (saving
|
|
25
|
+
* back one geojson per slice-file) rather than the combined one (jit-ui#93).
|
|
26
|
+
* - **Single-file z-stack**: one sibling geojson holding every slice's regions,
|
|
27
|
+
* indexed by QuPath's `geometry.plane.z`. Per-slice (combined) mode is entered when
|
|
28
|
+
* the geojson actually carries slice indices, or when there is nothing yet to
|
|
29
|
+
* author against. A legacy geojson whose regions are all on the default plane
|
|
30
|
+
* stays global (shown on every slice), so existing single-plane annotations are
|
|
31
|
+
* not confined to slice 0.
|
|
32
|
+
* - **Single plane** (or that legacy global stack): one region set for the image.
|
|
33
|
+
* Loading saved ROIs is not a user edit, so the undo history starts fresh and the
|
|
34
|
+
* first undo cannot wipe them (jit-ui#85).
|
|
35
|
+
*
|
|
36
|
+
* Large ROI files (`minSourceChars` and up) and a server-side source (`regionSourceUrl`)
|
|
37
|
+
* become tiled region sources instead of regions; a z-indexed one serves each slice its own
|
|
38
|
+
* plane. On a single-file stack the source is opened first, to tell which: one on the default
|
|
39
|
+
* plane only stays global, as its regions would. A folder stack's sources open lazily, the first
|
|
40
|
+
* time their slice is shown.
|
|
41
|
+
*
|
|
42
|
+
* `z` is the slice shown now; entering stack mode makes it live and resets undo. `http`, the
|
|
43
|
+
* host's `HttpClient`, carries a server-side source's requests, so the host's interceptors (its
|
|
44
|
+
* auth) apply to them as to the image tiles.
|
|
45
|
+
*/
|
|
46
|
+
export declare function applyImageRois(info: IImageInfo, target: RegionLoadTarget, z: number, minSourceChars?: number, http?: HttpClient): void;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { IImageInfo } from '../contracts/image.contract';
|
|
3
|
+
import { PlotType, PlotTypeId } from '../contracts/plot-type';
|
|
4
|
+
import { SpatialDataPort } from '../contracts/ports/spatial-data.port';
|
|
5
|
+
import { SpatialDataset } from '../contracts/spatial-dataset.contract';
|
|
6
|
+
import { SpatialGates } from '../plot-mode/plot-type-menu';
|
|
7
|
+
/** What a dataset switch asks of the viewer. */
|
|
8
|
+
export interface SpatialBinderHost {
|
|
9
|
+
/** The plot-type gates changed: recompute the selector. */
|
|
10
|
+
gatesChanged(): void;
|
|
11
|
+
/** The selector's current id, and the built-in type rendered for it. */
|
|
12
|
+
selectedId(): PlotTypeId;
|
|
13
|
+
basePlotType(): PlotType;
|
|
14
|
+
/** Whether an image is loaded. */
|
|
15
|
+
hasImage(): boolean;
|
|
16
|
+
selectPlotType(type: PlotType): void;
|
|
17
|
+
/** Re-plot the current mode. */
|
|
18
|
+
replot(): void;
|
|
19
|
+
/** Publish an image as the host's current one. */
|
|
20
|
+
publishImage(info: IImageInfo): void;
|
|
21
|
+
setImageLoading(loading: boolean): void;
|
|
22
|
+
/** The switch is handled: reconcile the selection with the new gates and re-render. */
|
|
23
|
+
settled(): void;
|
|
24
|
+
detectChanges(): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Binds the viewer to the spatial-omics dataset on `SPATIAL_DATA_PORT`: the gates it
|
|
28
|
+
* puts on the plot-type selector ({@link gates}), the mode an image-less dataset opens
|
|
29
|
+
* on, and publishing a dataset's registered volume AS the image.
|
|
30
|
+
*
|
|
31
|
+
* No-op when the host provides no port — the spatial types then stay hidden.
|
|
32
|
+
*/
|
|
33
|
+
export declare class SpatialDatasetBinder implements SpatialGates {
|
|
34
|
+
private readonly port;
|
|
35
|
+
private readonly host;
|
|
36
|
+
/** The dataset on offer, for drawing one that brings no image. */
|
|
37
|
+
dataset: SpatialDataset | null;
|
|
38
|
+
/** A dataset is published — gates the spatial plot types; the toolbar binds it too. */
|
|
39
|
+
hasDataset: boolean;
|
|
40
|
+
/** Its observations carry a z, gating the 3D spatial mode. */
|
|
41
|
+
has3d: boolean;
|
|
42
|
+
/** It brings pixels of its own (see {@link SpatialGates.hasPixels}). */
|
|
43
|
+
hasPixels: boolean;
|
|
44
|
+
/** Dataset identity + capability shape the last emission was handled at, so a
|
|
45
|
+
* switch between two datasets of the same shape is not mistaken for a repeat. */
|
|
46
|
+
private key;
|
|
47
|
+
/** Dataset + geometry the published volume image was built from, so a re-emitted
|
|
48
|
+
* dataset doesn't re-fetch megabytes or reset the user's scrub. */
|
|
49
|
+
private volumeImageKey;
|
|
50
|
+
/** Blob URLs backing that image — ours to revoke. */
|
|
51
|
+
private volumeImageUrls;
|
|
52
|
+
constructor(port: SpatialDataPort | undefined, host: SpatialBinderHost);
|
|
53
|
+
/** Follow the port's dataset until `until$` emits. */
|
|
54
|
+
bind(until$: Observable<unknown>): void;
|
|
55
|
+
/** Revoke the published volume image's blob URLs (teardown). */
|
|
56
|
+
dispose(): void;
|
|
57
|
+
private onDataset;
|
|
58
|
+
/**
|
|
59
|
+
* Publish a dataset's reference volume AS the image, and open the 2D Image view on it:
|
|
60
|
+
* the slice bar scrubs z, and the contrast window, colormaps and region tools all work
|
|
61
|
+
* because the volume genuinely is the image now. The 3D cloud stays one pick away.
|
|
62
|
+
*
|
|
63
|
+
* Keyed by dataset + geometry: the dataset stream re-emits on things like a
|
|
64
|
+
* colour-column change, and rebuilding then would re-fetch the voxels and throw the
|
|
65
|
+
* user back to the middle slice.
|
|
66
|
+
*/
|
|
67
|
+
private showVolumeAsImage;
|
|
68
|
+
/** Forget the published volume image so re-selecting the dataset rebuilds it. The
|
|
69
|
+
* URLs deliberately stay alive: the host may still be displaying that image, and
|
|
70
|
+
* revoking under it would break every later tile read. They are freed when the next
|
|
71
|
+
* volume replaces them, or on {@link dispose}. */
|
|
72
|
+
private dropVolumeImage;
|
|
73
|
+
private revokeVolumeImageUrls;
|
|
74
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { NgZone } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { PlotModeTools } from '../contracts/plot-type-contribution.contract';
|
|
4
|
+
import { IVisualizer } from '../contracts/visualizer.contract';
|
|
5
|
+
/** The backend members tool arming drives. */
|
|
6
|
+
export type ToolModesTarget = Pick<IVisualizer, 'getRegionOverlay' | 'setDragMode' | 'setActiveTool' | 'setWandOptions' | 'setBrushOptions' | 'setVertexEraserRadius'>;
|
|
7
|
+
/** Where the armed tool is recorded for everyone else (the shared session store). */
|
|
8
|
+
export interface ActiveToolRecord {
|
|
9
|
+
setActiveTool(id: string | null): void;
|
|
10
|
+
getActiveTool$(): Observable<string | null>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The armed tool mode (one at a time across the region overlay, the viewport drag
|
|
14
|
+
* modes and the on-canvas tools) and the toolbar's tool settings it arms them with.
|
|
15
|
+
*/
|
|
16
|
+
export declare class ToolModes {
|
|
17
|
+
private readonly target;
|
|
18
|
+
private readonly record;
|
|
19
|
+
/** Runs after every arm/disarm with the newly armed mode. */
|
|
20
|
+
private readonly armed;
|
|
21
|
+
/** The armed mode, or null. */
|
|
22
|
+
active: string | null;
|
|
23
|
+
/** Wand sensitivity — higher = stricter (smaller selection). Matches QuPath default. */
|
|
24
|
+
wandSensitivity: number;
|
|
25
|
+
/** Brush diameter in image-pixel coordinates (drives the painted disc size). */
|
|
26
|
+
brushSize: number;
|
|
27
|
+
/** Vertex eraser radius in image-pixel coordinates. */
|
|
28
|
+
vertexEraserRadius: number;
|
|
29
|
+
/** The toolbar tools a contributed plot mode may arm. Calls can come from outside
|
|
30
|
+
* Angular, hence the zone. */
|
|
31
|
+
readonly plotModeTools: PlotModeTools;
|
|
32
|
+
/** Class the brush paints while a plot mode armed it; null = plain brush. */
|
|
33
|
+
private brushClass;
|
|
34
|
+
constructor(target: ToolModesTarget, record: ActiveToolRecord, zone: NgZone,
|
|
35
|
+
/** Runs after every arm/disarm with the newly armed mode. */
|
|
36
|
+
armed: (mode: string | null) => void, markForCheck: () => void);
|
|
37
|
+
/** A tool picked by the user (always the plain tool, never a plot mode's brush class);
|
|
38
|
+
* re-picking the armed one disarms it. */
|
|
39
|
+
toggle(mode: string): void;
|
|
40
|
+
/** Arm `mode` (or nothing) across every tool. */
|
|
41
|
+
apply(mode: string | null): void;
|
|
42
|
+
/** Disarm whatever is armed and clear every tool mode (a plot-type switch). */
|
|
43
|
+
deactivate(): void;
|
|
44
|
+
setWandSensitivity(value: number | undefined): void;
|
|
45
|
+
setBrushSize(value: number | undefined): void;
|
|
46
|
+
setVertexEraserRadius(value: number | undefined): void;
|
|
47
|
+
/** The options a canvas tool is armed with, from the toolbar's settings. */
|
|
48
|
+
private options;
|
|
49
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { NgZone } from '@angular/core';
|
|
2
|
+
/** What the shortcuts drive: the viewer's actions and the state they gate on. */
|
|
3
|
+
export interface ShortcutHost {
|
|
4
|
+
/** Id of the plot div; the wheel and the context menu act only over it. */
|
|
5
|
+
readonly plotDivName: string;
|
|
6
|
+
/** The viewer's own element (toolbar + plot); its keys are scoped to it. Falls back
|
|
7
|
+
* to the plot div when absent. */
|
|
8
|
+
readonly hostElement?: HTMLElement | null;
|
|
9
|
+
/** The armed tool — SAM point mode takes Enter / Escape. */
|
|
10
|
+
activeDragMode(): string | null;
|
|
11
|
+
/** ←/→ step the slice: a loaded stack in the Image view. */
|
|
12
|
+
canStepSlice(): boolean;
|
|
13
|
+
/** The wheel steps the zoom: a 2D view whose renderer does not read the wheel itself. */
|
|
14
|
+
wheelZooms(): boolean;
|
|
15
|
+
stepSlice(delta: number): void;
|
|
16
|
+
/** SAM point mode: commit (Enter) or discard (Escape) the prompt. */
|
|
17
|
+
resolveSamPrompt(commit: boolean): void;
|
|
18
|
+
undo(): void;
|
|
19
|
+
redo(): void;
|
|
20
|
+
deleteRegion(): void;
|
|
21
|
+
zoomIn(): void;
|
|
22
|
+
zoomOut(): void;
|
|
23
|
+
toggleDragMode(mode: string): void;
|
|
24
|
+
openContextMenu(event: MouseEvent): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The viewer's keyboard, wheel and context-menu handling: one window listener each,
|
|
28
|
+
* registered OUTSIDE the Angular zone (zone-patched, every event anywhere in the host
|
|
29
|
+
* app ran app-wide change detection) and re-entering it only to act.
|
|
30
|
+
*
|
|
31
|
+
* Keys: ←/→ step the slice; Enter/Escape resolve a SAM point prompt; Ctrl/Cmd+Z undo,
|
|
32
|
+
* Ctrl/Cmd+Shift+Z or +Y redo; bare Delete/Backspace/d delete the selected region,
|
|
33
|
+
* +/= and -/_ zoom, and single letters toggle tools (`TOOL_KEYS`). Any other
|
|
34
|
+
* modified key is left to the browser (Cmd/Ctrl+D must not delete a region).
|
|
35
|
+
*
|
|
36
|
+
* Keys are per viewer: with two live viewers (a main view and a pipeline preview)
|
|
37
|
+
* one Delete must not delete in both. A key goes to the viewer that holds focus, or
|
|
38
|
+
* — focus elsewhere — to the viewer the pointer last moved over; any other viewer
|
|
39
|
+
* ignores it (review CORE-2).
|
|
40
|
+
*/
|
|
41
|
+
export declare class ViewerShortcuts {
|
|
42
|
+
private readonly host;
|
|
43
|
+
private readonly zone;
|
|
44
|
+
/** Every attached instance, to find the one holding focus. */
|
|
45
|
+
private static readonly live;
|
|
46
|
+
/** The viewer the pointer last moved over. */
|
|
47
|
+
private static lastHovered;
|
|
48
|
+
private readonly listeners;
|
|
49
|
+
constructor(host: ShortcutHost, zone: NgZone);
|
|
50
|
+
/** Register the window listeners (outside the zone). */
|
|
51
|
+
attach(): void;
|
|
52
|
+
/** Remove every listener {@link attach} added. */
|
|
53
|
+
detach(): void;
|
|
54
|
+
private listen;
|
|
55
|
+
private contains;
|
|
56
|
+
/** Whether this viewer takes keys now: it holds focus, or nothing does and the
|
|
57
|
+
* pointer was last over it. */
|
|
58
|
+
private ownsKeys;
|
|
59
|
+
private overPlot;
|
|
60
|
+
private run;
|
|
61
|
+
private onContextMenu;
|
|
62
|
+
private onWheel;
|
|
63
|
+
private onKeydown;
|
|
64
|
+
/**
|
|
65
|
+
* ←/→ step the slice in the Image view, the same way the slider does — only for a
|
|
66
|
+
* loaded stack, and not while a form field or the slider itself has focus (it
|
|
67
|
+
* handles arrows natively; stepping here too would double-step). Up/Down are left
|
|
68
|
+
* to OpenSeadragon (panning).
|
|
69
|
+
*/
|
|
70
|
+
private isSliceStepKey;
|
|
71
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { MenuItem } from 'primeng/api';
|
|
2
|
+
import { PlotType } from '../contracts/plot-type';
|
|
3
|
+
import { Region } from '../models/region';
|
|
4
|
+
/** What the right-click menu is built from: the view, the armed modes and the regions. */
|
|
5
|
+
export interface ContextMenuState {
|
|
6
|
+
/** 2D view (region tools, step zoom) vs a 3D scene (camera modes). */
|
|
7
|
+
isHeatmap: boolean;
|
|
8
|
+
/** The built-in type on screen; the Image view adds the vertex and Bézier items. */
|
|
9
|
+
basePlotType: PlotType;
|
|
10
|
+
activeDragMode: string | null;
|
|
11
|
+
activeSurface3dMode: string;
|
|
12
|
+
/** Every region on the image (intensity-profile lines included). */
|
|
13
|
+
regions: Region[];
|
|
14
|
+
/** The selection, as indices into {@link regions}. */
|
|
15
|
+
selectedIndices: number[];
|
|
16
|
+
/** Whether a region is a multi-part region that can be split back into parts. */
|
|
17
|
+
canUngroup(region: Region): boolean;
|
|
18
|
+
}
|
|
19
|
+
/** What the menu's items do (the viewer's own toolbar handlers). */
|
|
20
|
+
export interface ContextMenuActions {
|
|
21
|
+
autoscaleImage(): void;
|
|
22
|
+
zoomIn(): void;
|
|
23
|
+
zoomOut(): void;
|
|
24
|
+
toggleDragMode(mode: string): void;
|
|
25
|
+
toggleSurface3dMode(mode: string): void;
|
|
26
|
+
resetSurfaceCamera(): void;
|
|
27
|
+
selectAllRegions(): void;
|
|
28
|
+
mergeRegions(): void;
|
|
29
|
+
ungroupRegions(): void;
|
|
30
|
+
inverseRegions(): void;
|
|
31
|
+
simplifyRegions(thresholdPx: number): void;
|
|
32
|
+
openSimplifyDialog(): void;
|
|
33
|
+
toBezierRegion(): void;
|
|
34
|
+
toPolygonRegion(): void;
|
|
35
|
+
deleteRegion(): void;
|
|
36
|
+
}
|
|
37
|
+
/** The live regions at `indices` (stale indices dropped). */
|
|
38
|
+
export declare function regionsAt(regions: Region[], indices: number[]): Region[];
|
|
39
|
+
/** Regions eligible for set-ops: closed areas (rect / closed polygon / multi-polygon),
|
|
40
|
+
* excluding intensity-profile lines. */
|
|
41
|
+
export declare function opEligible(regions: Region[]): Region[];
|
|
42
|
+
/**
|
|
43
|
+
* The right-click menu: the selected-region actions lead (2D only), then the
|
|
44
|
+
* viewport and tool toggles for a 2D view, or the camera modes for a 3D scene. The
|
|
45
|
+
* armed mode is highlighted.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildContextMenu(state: ContextMenuState, actions: ContextMenuActions): MenuItem[];
|
|
48
|
+
/**
|
|
49
|
+
* Immediate region actions on the current selection (jit-ui#85): merge, ungroup,
|
|
50
|
+
* inverse, simplify, the Bézier conversions, and delete — the one-shot geometry
|
|
51
|
+
* transforms, grouped apart from the tool/mode toggles and shown only when something
|
|
52
|
+
* is selected. Each item is gated on what the selection supports. "Select all" leads
|
|
53
|
+
* whenever the image has regions.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildRegionActionItems(state: ContextMenuState, actions: ContextMenuActions): MenuItem[];
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import type { IChannelState } from '../contracts/channel-histogram-api.contract';
|
|
3
|
+
import type { Colormap } from 'napari-js';
|
|
4
|
+
import type { SectionAxis, SectionViews } from '../contracts/section-view.contract';
|
|
5
|
+
import type { SliceOutlines } from '../geometry/reconstruct';
|
|
6
|
+
import type { VolumeVoxelsOnScreen } from '../implementations/napari-js/napari-scene';
|
|
7
|
+
import type { SlicePlanes } from '../implementations/napari-js/napari-volume-slice-planes';
|
|
8
|
+
/** What the sections are cut from and shown with. */
|
|
9
|
+
export interface VolumeSectionsDeps {
|
|
10
|
+
/** The volume on screen as assembled, or null (not a volume view, or not assembled yet). */
|
|
11
|
+
volume(): VolumeVoxelsOnScreen | null;
|
|
12
|
+
/** The image the volume is of: another one drops the outlines read and puts the planes back. */
|
|
13
|
+
image(): string | undefined;
|
|
14
|
+
/** Show the planes in the volume (null: hide one). */
|
|
15
|
+
showPlanes(planes: SlicePlanes): void;
|
|
16
|
+
/** Every class's outlines on every slice (see RegionStore.outlinesByClass). */
|
|
17
|
+
outlinesByClass(level: number): Promise<Map<string, SliceOutlines[]>>;
|
|
18
|
+
isClassHidden(label: string): boolean;
|
|
19
|
+
colorOf(label: string): string;
|
|
20
|
+
channelStates(): IChannelState[];
|
|
21
|
+
/** The colormap the 3D view draws a channel with: its tint in a multichannel volume, else the volume's. */
|
|
22
|
+
colormap(channel: IChannelState | undefined, multichannel: boolean): Colormap;
|
|
23
|
+
invert(): boolean;
|
|
24
|
+
/** The slice shown and edited. */
|
|
25
|
+
slice(): number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The sections beside a split volume view: the planes x = const and y = const (image px), each cut
|
|
29
|
+
* from the assembled volume as an image, displayed like the 2D view displays a slice (the channel
|
|
30
|
+
* windows, tints and invert), with every class's outlines cut by the same plane and the other two
|
|
31
|
+
* planes as a crosshair. Recut when a plane moves, the slice changes, the regions or their
|
|
32
|
+
* visibility change, the display changes or the volume is assembled again — once per frame at most.
|
|
33
|
+
*/
|
|
34
|
+
export declare class VolumeSections {
|
|
35
|
+
private readonly deps;
|
|
36
|
+
private readonly views$;
|
|
37
|
+
private open;
|
|
38
|
+
private planes;
|
|
39
|
+
/** The image the planes and outlines are of. */
|
|
40
|
+
private image;
|
|
41
|
+
/** Every class's outlines at a level, read and indexed once until the regions change. */
|
|
42
|
+
private outlines;
|
|
43
|
+
private scheduled;
|
|
44
|
+
/** Bumped per cut, so a cut that waited on the outlines is dropped when a newer one starts. */
|
|
45
|
+
private request;
|
|
46
|
+
constructor(deps: VolumeSectionsDeps);
|
|
47
|
+
/** Both sections as they are cut; nulls while closed. */
|
|
48
|
+
getViews$(): Observable<SectionViews>;
|
|
49
|
+
/** Show the sections (their planes through the middle of the image at first). */
|
|
50
|
+
start(): void;
|
|
51
|
+
stop(): void;
|
|
52
|
+
/** Move a section's plane to `at` (image px; clamped into the image). */
|
|
53
|
+
setPlane(axis: SectionAxis, at: number): void;
|
|
54
|
+
/** The planes as they are (image px), the z plane being the slice. */
|
|
55
|
+
getPlanes(): SlicePlanes;
|
|
56
|
+
/** The regions changed (an edit): their outlines are read again, once the edits pause. */
|
|
57
|
+
regionsChanged(): void;
|
|
58
|
+
/** Something the sections show changed (the slice, the display, the visible classes, the volume). */
|
|
59
|
+
schedule(): void;
|
|
60
|
+
private cut;
|
|
61
|
+
private view;
|
|
62
|
+
/** The volume's channels as displayed now. */
|
|
63
|
+
private voxels;
|
|
64
|
+
}
|