@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
|
@@ -1,25 +1,46 @@
|
|
|
1
|
-
import { ChangeDetectorRef,
|
|
2
|
-
import {
|
|
3
|
-
import { MenuItem, MessageService, TreeNode } from 'primeng/api';
|
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, DestroyRef, ElementRef, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { MenuItem, MessageService } from 'primeng/api';
|
|
4
3
|
import { ContextMenu } from 'primeng/contextmenu';
|
|
5
4
|
import { IImageInfo } from './contracts/image.contract';
|
|
6
5
|
import { ImageStatePort } from './contracts/ports/image-state.port';
|
|
7
6
|
import { Polygon } from './models/region';
|
|
8
7
|
import { RegionOpsService } from './region-ops.service';
|
|
9
8
|
import { VisualizerStore } from './store/visualizer-store.service';
|
|
9
|
+
import { ImageRenderSession } from './render-session';
|
|
10
10
|
import { PlotType, PlotTypeDescriptor, PlotTypeId } from './contracts/plot-type';
|
|
11
11
|
import { PlotTypeContribution, PlotTypeOption } from './contracts/plot-type-contribution.contract';
|
|
12
12
|
import { PlotModeController } from './plot-mode/plot-mode-controller';
|
|
13
|
+
import { ToolParamsModel } from './plot-mode/tool-params-model';
|
|
14
|
+
import { ContributionHost, PlotModePanelView, ToolDialogView } from './plot-mode/contribution-host';
|
|
13
15
|
import { IVisualizer } from './contracts/visualizer.contract';
|
|
14
16
|
import { SamToolService } from './toolbar/segmentation/sam-tool.service';
|
|
15
17
|
import { SamPointToolService } from './toolbar/segmentation/sam-point-tool.service';
|
|
16
18
|
import { CellSegmentToolService } from './toolbar/segmentation/cell-segment-tool.service';
|
|
17
|
-
import {
|
|
19
|
+
import { SegmentationRunner } from './toolbar/segmentation/segmentation-runner';
|
|
20
|
+
import { ToolbarContribution, ToolbarDialogToolContribution, ToolbarToolContribution } from './contracts/toolbar-tool.contract';
|
|
18
21
|
import { ToolbarToolVisibility } from './contracts/toolbar-config';
|
|
19
22
|
import { VizConfig } from './contracts/viz-config';
|
|
20
23
|
import { SpatialDataPort } from './contracts/ports/spatial-data.port';
|
|
24
|
+
import { ContextMenuActions } from './visualizer/visualizer-context-menu';
|
|
25
|
+
import { RegionActions } from './visualizer/region-actions';
|
|
26
|
+
import { ToolModes } from './visualizer/tool-modes';
|
|
27
|
+
import { FloatingPos } from './visualizer/floating-drag.directive';
|
|
28
|
+
import { IntensityInsetComponent } from './intensity-inset/intensity-inset.component';
|
|
29
|
+
import type { SectionAxis, SectionViews } from './contracts/section-view.contract';
|
|
30
|
+
import { SpatialDatasetBinder } from './visualizer/spatial-dataset-binder';
|
|
21
31
|
import * as i0 from "@angular/core";
|
|
22
|
-
|
|
32
|
+
/**
|
|
33
|
+
* The viewer (`<visualizer>`): the plot surface, its toolbar, the loading overlay and
|
|
34
|
+
* the dialogs it opens (Channels & Histogram, spatial-omics controls, Region Editor,
|
|
35
|
+
* contributed modes and tools). It orchestrates rendering through the `VISUALIZER`
|
|
36
|
+
* contract and reads the image from the host's `IMAGE_STATE_PORT`.
|
|
37
|
+
*
|
|
38
|
+
* OnPush. Template events re-render it; state that lands asynchronously goes through
|
|
39
|
+
* {@link changed} (or a signal: the loading overlay), and the collaborators that must
|
|
40
|
+
* render synchronously (the render session's overlay, a contributed panel's slot, the
|
|
41
|
+
* context menu before it opens) still call `detectChanges()`.
|
|
42
|
+
*/
|
|
43
|
+
export declare class VisualizerComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy, ContextMenuActions {
|
|
23
44
|
private state;
|
|
24
45
|
plotService: IVisualizer;
|
|
25
46
|
messageService: MessageService;
|
|
@@ -33,6 +54,8 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
|
|
|
33
54
|
private vizConfig?;
|
|
34
55
|
private spatialData?;
|
|
35
56
|
private injector?;
|
|
57
|
+
private hostRef?;
|
|
58
|
+
private readonly destroyRef;
|
|
36
59
|
/** Per-instance toast key. MessageService is a global singleton, so two live
|
|
37
60
|
* `<visualizer>` instances (main viewer + pipeline-dialog preview) sharing
|
|
38
61
|
* one key would each render the same message — a duplicate toast. A unique
|
|
@@ -51,8 +74,8 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
|
|
|
51
74
|
* releases on destroy, so the surviving viewer picks them up.
|
|
52
75
|
*/
|
|
53
76
|
private static readonly liveInstances;
|
|
54
|
-
readonly vizToastKey = "sci-viz-notice";
|
|
55
|
-
readonly vizAlertToastKey = "sci-viz-alert";
|
|
77
|
+
protected readonly vizToastKey = "sci-viz-notice";
|
|
78
|
+
protected readonly vizAlertToastKey = "sci-viz-alert";
|
|
56
79
|
/**
|
|
57
80
|
* Whether this instance renders the shared outlets. The owner is simply the
|
|
58
81
|
* oldest live visualizer — a `Set` iterates in insertion order, so when the
|
|
@@ -62,8 +85,10 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
|
|
|
62
85
|
* initialised would leave nobody rendering the outlets, and every notice from
|
|
63
86
|
* the root service would silently vanish again.
|
|
64
87
|
*/
|
|
65
|
-
get ownsSharedToasts(): boolean;
|
|
88
|
+
protected get ownsSharedToasts(): boolean;
|
|
89
|
+
/** Each new image: whether it is a z-stack. */
|
|
66
90
|
isStackEvent: EventEmitter<any>;
|
|
91
|
+
/** Each new image: whether it is single-channel (grayscale). */
|
|
67
92
|
isGrayscaleEvent: EventEmitter<any>;
|
|
68
93
|
/** Which toolbar groups to show. A partial override merges over the full set,
|
|
69
94
|
* so `{ specialTools: false }` hides only that group. Defaults to everything. */
|
|
@@ -76,327 +101,205 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
|
|
|
76
101
|
testMode: boolean;
|
|
77
102
|
/** Image-smoothing state for the toolbar's Smoothen toggle (OSD only).
|
|
78
103
|
* Defaults to `false` so OSD shows raw pixels (nearest-neighbour). */
|
|
79
|
-
imageSmoothingEnabled: boolean;
|
|
80
|
-
loadingMessage: string;
|
|
81
|
-
zoom: boolean;
|
|
104
|
+
protected imageSmoothingEnabled: boolean;
|
|
82
105
|
fileName: string | undefined;
|
|
83
106
|
private loadedFileName;
|
|
84
|
-
imageInfo: IImageInfo | undefined;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
107
|
+
protected imageInfo: IImageInfo | undefined;
|
|
108
|
+
protected readonly loadingMessage: import("@angular/core").WritableSignal<string>;
|
|
109
|
+
/** The host is loading at zoom (the overlay message moves out of the way). */
|
|
110
|
+
protected readonly zoom: import("@angular/core").WritableSignal<boolean>;
|
|
111
|
+
protected readonly stackLoading: import("@angular/core").WritableSignal<boolean>;
|
|
112
|
+
protected readonly imgLoading: import("@angular/core").WritableSignal<boolean>;
|
|
113
|
+
protected readonly loadingPercentage: import("@angular/core").WritableSignal<number>;
|
|
114
|
+
protected readonly cacheProgress: import("@angular/core").WritableSignal<number | null>;
|
|
92
115
|
/** A jit-service cache copy is actively in progress (determinate 0..99). Drives the cache
|
|
93
116
|
* progress bar independently of `imgLoading` so the bar can't be dropped — or masked by the
|
|
94
117
|
* "Sharpening preview..." overlay — mid-download if the loading flag flips early. */
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
*/
|
|
103
|
-
private renderToken;
|
|
104
|
-
/** Set once the template, and with it the plot div, exists (see ngAfterViewInit). */
|
|
105
|
-
private viewReady;
|
|
106
|
-
/** An image-less dataset whose draw waits for the view: see plotSpatialWithoutImage. */
|
|
107
|
-
private pendingSpatialDraw;
|
|
108
|
-
zIndex: number;
|
|
109
|
-
maxIndex: number;
|
|
118
|
+
protected readonly isCaching: import("@angular/core").Signal<boolean>;
|
|
119
|
+
/** Emits once when this view is destroyed; the collaborators end their subscriptions on it. */
|
|
120
|
+
private readonly destroyed$;
|
|
121
|
+
/** Host image-info objects whose one-shot `initialZIndex` was already applied. */
|
|
122
|
+
private readonly consumedSliceHints;
|
|
123
|
+
protected zIndex: number;
|
|
124
|
+
protected maxIndex: number;
|
|
110
125
|
contextMenu: ContextMenu;
|
|
111
|
-
contextMenuItems: MenuItem[];
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
/** Brush diameter in image-pixel coordinates (drives the painted disc size). */
|
|
127
|
-
brushSize: number;
|
|
128
|
-
/** Class the brush paints while a plot mode armed it (PlotModeTools.armBrush); null = plain brush. */
|
|
129
|
-
private brushClass;
|
|
126
|
+
protected contextMenuItems: MenuItem[];
|
|
127
|
+
/** The armed tool mode and the toolbar's tool settings. */
|
|
128
|
+
protected readonly tools: ToolModes;
|
|
129
|
+
protected get activeDragMode(): string | null;
|
|
130
|
+
protected set activeDragMode(mode: string | null);
|
|
131
|
+
protected get wandSensitivity(): number;
|
|
132
|
+
protected set wandSensitivity(v: number);
|
|
133
|
+
protected get brushSize(): number;
|
|
134
|
+
protected get vertexEraserRadius(): number;
|
|
135
|
+
protected set vertexEraserRadius(v: number);
|
|
136
|
+
/** Region set-operations on the selection, and the store mirrors they read (jit-ui#85). */
|
|
137
|
+
protected readonly regionActions: RegionActions;
|
|
138
|
+
/** Custom-threshold Simplify dialog visibility (see {@link RegionActions}). */
|
|
139
|
+
protected get displaySimplifyDialog(): boolean;
|
|
140
|
+
protected set displaySimplifyDialog(v: boolean);
|
|
130
141
|
/** SAM model picker options + current selection (jit-ui#90 P1). Only models
|
|
131
142
|
* with a hosted ONNX pair (configured via setSamModelUrls at app init) are
|
|
132
143
|
* offered, so the picker can't select a model that can't run. */
|
|
133
|
-
samModels: {
|
|
144
|
+
protected samModels: {
|
|
134
145
|
id: string;
|
|
135
146
|
label: string;
|
|
136
147
|
}[];
|
|
137
|
-
samModelId: string;
|
|
148
|
+
protected samModelId: string;
|
|
138
149
|
/**
|
|
139
150
|
* No-prompt tools registered through {@link TOOLBAR_TOOLS}, filtered to those
|
|
140
151
|
* with configured models and sorted. This library registers none — a host
|
|
141
152
|
* supplies them — so an open build has an empty array here and the toolbar
|
|
142
153
|
* and help dialog simply omit that group.
|
|
143
154
|
*/
|
|
144
|
-
contributedTools: ToolbarToolContribution[];
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
dialogTools: ToolbarDialogToolContribution[];
|
|
155
|
+
protected contributedTools: ToolbarToolContribution[];
|
|
156
|
+
/** Checkpoints and parameter values of {@link contributedTools}, and their dialog. */
|
|
157
|
+
protected readonly toolParams: ToolParamsModel;
|
|
158
|
+
/** Contributed plot modes and dialog tools, and their live sessions. */
|
|
159
|
+
readonly contributions: ContributionHost;
|
|
160
|
+
/** Dialog tools registered through {@link TOOLBAR_TOOLS} (`kind: 'dialog'`). */
|
|
161
|
+
protected get dialogTools(): ToolbarDialogToolContribution[];
|
|
151
162
|
/** The dialog tool the user has open (its session may be between renders). */
|
|
152
|
-
openDialogToolId: string | null;
|
|
163
|
+
protected get openDialogToolId(): string | null;
|
|
153
164
|
/** The open dialog tool's live dialog, as the template renders it. */
|
|
154
|
-
toolDialog:
|
|
155
|
-
|
|
156
|
-
width: string;
|
|
157
|
-
host: HTMLElement;
|
|
158
|
-
} | null;
|
|
159
|
-
/** Dialog-tool sessions: the same lifecycle and isolation as contributed plot modes. */
|
|
160
|
-
private readonly toolDialogs;
|
|
161
|
-
/** Active checkpoint per contributed tool. */
|
|
162
|
-
toolModelIds: Record<string, string>;
|
|
165
|
+
protected get toolDialog(): ToolDialogView | null;
|
|
166
|
+
protected readonly samToastKey: string;
|
|
163
167
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
168
|
+
* Outlet for the library's own result/error notices, keyed to this instance so they
|
|
169
|
+
* do not depend on the host mounting a keyless `<p-toast>` (most hosts don't, and a
|
|
170
|
+
* failed segmentation then looked like a dead button). Deliberately NOT the sticky
|
|
171
|
+
* toast's key: that is cleared when a run settles, which would wipe the result.
|
|
166
172
|
*/
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
|
|
170
|
-
/** SAM download/segment toast state (bound by the `sam` p-toast template). */
|
|
171
|
-
samStatus: string;
|
|
172
|
-
samProgress: number;
|
|
173
|
-
samDownloading: boolean;
|
|
174
|
-
samBusy: boolean;
|
|
175
|
-
/** Whether the shared `sam` toast is currently shown (avoids stacking it on
|
|
176
|
-
* every point click, which re-runs inference). */
|
|
177
|
-
private samToastShown;
|
|
178
|
-
readonly samToastKey: string;
|
|
179
|
-
/**
|
|
180
|
-
* Outlet for the library's own result/error notices.
|
|
181
|
-
*
|
|
182
|
-
* PrimeNG routes a message to a `<p-toast>` only when the keys match — a
|
|
183
|
-
* keyless message reaches a keyless toast and nothing else. These notices used
|
|
184
|
-
* to be emitted with no key, so they rendered only in hosts that happen to
|
|
185
|
-
* mount a bare `<p-toast>` (jit-ui does, in its file-tree component). Every
|
|
186
|
-
* other host — including this repo's own browser example — dropped them
|
|
187
|
-
* silently, which made a failed or no-op segmentation look like a dead button:
|
|
188
|
-
* the sticky progress toast is cleared in the same tick by hideSamToast, and
|
|
189
|
-
* the message explaining why never appeared anywhere.
|
|
190
|
-
*
|
|
191
|
-
* Keyed to this component instance so the library renders its own outlet and
|
|
192
|
-
* is not dependent on host markup. Deliberately NOT the sticky toast's key:
|
|
193
|
-
* {@link hideSamToast} clears that key in the `finally`, which would wipe the
|
|
194
|
-
* result the moment it was posted, and the sticky toast's custom template is
|
|
195
|
-
* built for the live status + progress bar.
|
|
196
|
-
*/
|
|
197
|
-
readonly resultToastKey: string;
|
|
198
|
-
/** Subscriptions to the point tool's live feeds (status/busy/download). */
|
|
199
|
-
private samPointSub;
|
|
200
|
-
/** Vertex eraser radius in image-pixel coordinates. */
|
|
201
|
-
vertexEraserRadius: number;
|
|
202
|
-
colormapsOptions: any;
|
|
203
|
-
reversescale: boolean;
|
|
204
|
-
selectedColormap: any;
|
|
173
|
+
protected readonly resultToastKey: string;
|
|
174
|
+
/** Segmentation runs and their sticky progress toast. */
|
|
175
|
+
protected readonly segmentation: SegmentationRunner;
|
|
205
176
|
/** Channels & Histogram dialog visibility (opened from the toolbar). */
|
|
206
|
-
showChannelHistogram: boolean;
|
|
177
|
+
protected showChannelHistogram: boolean;
|
|
207
178
|
/** Spatial-omics controls dialog visibility (toolbar button). */
|
|
208
|
-
showSpatialControls: boolean;
|
|
179
|
+
protected showSpatialControls: boolean;
|
|
209
180
|
/** Region Editor dialog visibility (opened from the toolbar). */
|
|
210
|
-
showRegionEditor: boolean;
|
|
181
|
+
protected showRegionEditor: boolean;
|
|
211
182
|
/** Region Editor dialog width. On open it is set to the configured host
|
|
212
183
|
* element's current width, or — when no selector is configured / the element
|
|
213
184
|
* isn't found — to a quarter of the page (see openRegionEditor). */
|
|
214
|
-
regionEditorWidth: string;
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}[];
|
|
219
|
-
selectedStackOption: {
|
|
220
|
-
name: string;
|
|
221
|
-
val: string;
|
|
222
|
-
} | undefined;
|
|
223
|
-
readonly plotDivName: string;
|
|
185
|
+
protected regionEditorWidth: string;
|
|
186
|
+
protected readonly plotDivName: string;
|
|
187
|
+
/** The render pipeline: the newest image (or image-less dataset) always wins. */
|
|
188
|
+
protected readonly render: ImageRenderSession;
|
|
224
189
|
plotType: PlotType;
|
|
225
|
-
isHeatmap: boolean;
|
|
226
|
-
activeSurface3dMode: string;
|
|
190
|
+
protected isHeatmap: boolean;
|
|
191
|
+
protected activeSurface3dMode: string;
|
|
227
192
|
/** Whether the napari 3D coordinate-axes / scale gizmo is shown (volume/isosurface). */
|
|
228
|
-
axesVisible: boolean;
|
|
229
|
-
wireframeActive: boolean;
|
|
193
|
+
protected axesVisible: boolean;
|
|
194
|
+
protected wireframeActive: boolean;
|
|
230
195
|
/** napari 3D decimate factor (1 = Full … 8 = ⅛; default ½); changing it re-plots. */
|
|
231
|
-
resolutionScale: number;
|
|
196
|
+
protected resolutionScale: number;
|
|
232
197
|
/** The selector's entries: the built-in plot types the active backend
|
|
233
198
|
* advertises (3D gated by capability), then any contributed modes
|
|
234
199
|
* ({@link PLOT_TYPE_CONTRIBUTIONS}). */
|
|
235
|
-
plotTypeMenu: PlotTypeOption[];
|
|
200
|
+
protected plotTypeMenu: PlotTypeOption[];
|
|
236
201
|
/**
|
|
237
202
|
* The built-in plot types on offer — {@link plotTypeMenu} without contributed
|
|
238
203
|
* modes. Kept with its original type so existing readers are unaffected.
|
|
239
204
|
*/
|
|
240
|
-
plotTypeOptions: PlotTypeDescriptor[];
|
|
205
|
+
protected plotTypeOptions: PlotTypeDescriptor[];
|
|
241
206
|
/**
|
|
242
207
|
* What the selector shows: a built-in type or a contributed mode's id. Every
|
|
243
208
|
* rendering and tool decision goes through {@link basePlotType} instead, so a
|
|
244
209
|
* contributed mode behaves exactly like the built-in type it rides on.
|
|
245
210
|
*/
|
|
246
|
-
selectedPlotTypeId: PlotTypeId;
|
|
211
|
+
protected selectedPlotTypeId: PlotTypeId;
|
|
247
212
|
/**
|
|
248
213
|
* The built-in plot type being rendered. With no contributed mode active this
|
|
249
214
|
* is the selection itself; during one it is the mode's `baseType`. Kept with its
|
|
250
215
|
* original `PlotType` type for existing readers — use {@link selectedPlotTypeId}
|
|
251
216
|
* for the selector's id. Assigning selects that built-in type.
|
|
252
217
|
*/
|
|
253
|
-
get selectedPlotType(): PlotType;
|
|
254
|
-
set selectedPlotType(type: PlotType);
|
|
218
|
+
protected get selectedPlotType(): PlotType;
|
|
219
|
+
protected set selectedPlotType(type: PlotType);
|
|
255
220
|
/** Contributed plot modes and their single live session. */
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
|
|
259
|
-
* Angular component with its own injector, or a plain host element a `mount`
|
|
260
|
-
* panel rendered into. Null while no contributed session is live.
|
|
261
|
-
*/
|
|
262
|
-
plotModePanel: {
|
|
263
|
-
title: string;
|
|
264
|
-
component: Type<unknown> | null;
|
|
265
|
-
injector: Injector | null;
|
|
266
|
-
host: HTMLElement | null;
|
|
267
|
-
} | null;
|
|
268
|
-
private destroying;
|
|
221
|
+
get plotModes(): PlotModeController;
|
|
222
|
+
/** The live contributed mode's side panel; null while no contributed session is live. */
|
|
223
|
+
protected get plotModePanel(): PlotModePanelView | null;
|
|
269
224
|
/** Where a `mount` panel's host element is attached once the dialog renders. */
|
|
270
225
|
set plotModePanelSlot(ref: ElementRef<HTMLElement> | undefined);
|
|
271
226
|
/** The built-in type actually rendered for {@link selectedPlotTypeId}: itself
|
|
272
227
|
* for a built-in type, `baseType` for a contributed mode. */
|
|
273
|
-
get basePlotType(): PlotType;
|
|
274
|
-
/**
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
y: number;
|
|
279
|
-
};
|
|
280
|
-
private profilePanelDragging;
|
|
281
|
-
private profilePanelStart;
|
|
228
|
+
protected get basePlotType(): PlotType;
|
|
229
|
+
/** Div the floating intensity-profile inset is charted into. Per instance, like
|
|
230
|
+
* {@link plotDivName}: the backend resolves it by id, so a fixed id made two live
|
|
231
|
+
* viewers draw both insets into whichever div came first in the document. */
|
|
232
|
+
protected readonly intensityInsetDiv: string;
|
|
282
233
|
/** Toolbar docking: docked across the top by default; dragging its handle
|
|
283
234
|
* detaches it into a floating, movable window (frees the top row for the
|
|
284
235
|
* visualization). */
|
|
285
|
-
toolbarFloating: boolean;
|
|
286
|
-
toolbarPos: {
|
|
236
|
+
protected toolbarFloating: boolean;
|
|
237
|
+
protected toolbarPos: {
|
|
287
238
|
x: number;
|
|
288
239
|
y: number;
|
|
289
240
|
};
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
* intensity-profile line exists (independent of the current plot type). */
|
|
295
|
-
hasProfiles: boolean;
|
|
296
|
-
private intensityProfileSub?;
|
|
297
|
-
private viewportChangeSub?;
|
|
298
|
-
private profileDragMoveListener?;
|
|
299
|
-
private profileDragUpListener?;
|
|
300
|
-
private profileResizeListener?;
|
|
241
|
+
/** Where a toolbar-handle drag starts from: grabbing the docked toolbar floats it. */
|
|
242
|
+
protected readonly toolbarDragOrigin: () => FloatingPos;
|
|
243
|
+
/** The floating intensity-profile inset (always mounted; shows itself while lines exist). */
|
|
244
|
+
inset?: IntensityInsetComponent;
|
|
301
245
|
/** True while the 3D spatial cloud is the active mode. The controls drop the ROI
|
|
302
246
|
* selection there: region tools are screen-space, and against an orbiting
|
|
303
247
|
* camera a drawn rectangle has no fixed meaning in the data. */
|
|
304
|
-
get isSpatial3dMode(): boolean;
|
|
305
|
-
/**
|
|
306
|
-
get
|
|
248
|
+
protected get isSpatial3dMode(): boolean;
|
|
249
|
+
/** True in a napari volume or isosurface view, where the Region Editor shows regions in 3D. */
|
|
250
|
+
protected get isVolumeView(): boolean;
|
|
251
|
+
/** Whether the user split the volume view with the slice editor (off by default; kept while
|
|
252
|
+
* the view shows other plot types, so a volume view opens split again). */
|
|
253
|
+
protected sliceEditor: boolean;
|
|
254
|
+
/** The slice editor's pane: the displayed slice, with every region tool, top right. */
|
|
255
|
+
protected readonly sliceDivName: string;
|
|
256
|
+
/** The left column's and the top row's shares of the slice editor (%). */
|
|
257
|
+
protected splitX: number;
|
|
258
|
+
protected splitY: number;
|
|
259
|
+
/** The sections through x and y shown below (nulls until the volume is cut). */
|
|
260
|
+
protected sections: SectionViews;
|
|
261
|
+
protected get sliceEditorShown(): boolean;
|
|
262
|
+
/**
|
|
263
|
+
* Split the volume view with the slice editor, or close it. The editor opens on the displayed
|
|
264
|
+
* slice and takes the drawing tools; closing it leaves the selection tool armed (it picks the
|
|
265
|
+
* surfaces in 3D) and disarms any other.
|
|
266
|
+
*/
|
|
267
|
+
protected toggleSliceEditor(): Promise<void>;
|
|
268
|
+
/** A point picked in a section: the slice and the other section's plane move there. */
|
|
269
|
+
protected onSectionPick(axis: SectionAxis, at: {
|
|
270
|
+
u: number;
|
|
271
|
+
v: number;
|
|
272
|
+
}): void;
|
|
273
|
+
/** Drag a divider of the slice editor: the vertical one sets the columns, the horizontal one the rows. */
|
|
274
|
+
protected startPaneResize(event: PointerEvent, axis: 'x' | 'y'): void;
|
|
275
|
+
/** A divider's keyboard: ← → move the vertical one, ↑ ↓ the horizontal one, by 5%. */
|
|
276
|
+
protected nudgePaneSize(event: KeyboardEvent, axis: 'x' | 'y'): void;
|
|
277
|
+
private setSplit;
|
|
278
|
+
private relayoutFrame;
|
|
307
279
|
/** True for the Image plot type, which renders as a natively pan/zoom-able
|
|
308
280
|
* raster — so the backend-agnostic zoom/pan toolbar tools are hidden. The
|
|
309
281
|
* component drives this off the plot type, not the active backend. */
|
|
310
|
-
get isImageView(): boolean;
|
|
282
|
+
protected get isImageView(): boolean;
|
|
311
283
|
/** Isosurface band as a 0–255 slider position, mapped onto the volume's real
|
|
312
284
|
* intensity range by the renderer. Defaults to the full range. */
|
|
313
|
-
isoRange: number[];
|
|
314
|
-
/**
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
private hasSpatial3dDataset;
|
|
322
|
-
/** Whether it carries a registered volume. Change detection only: a volume
|
|
323
|
-
* appearing is what publishes it as the image, and the plot-type gates then
|
|
324
|
-
* see an ordinary grayscale stack. */
|
|
325
|
-
private hasSpatialVolume;
|
|
326
|
-
/** Dataset identity + capability shape the last emission was handled at, so a
|
|
327
|
-
* switch between two datasets of the same shape is not mistaken for a repeat. */
|
|
328
|
-
private spatialDatasetKey;
|
|
329
|
-
/** Dataset + geometry the currently published volume image was built from, so a
|
|
330
|
-
* re-emitted dataset doesn't re-fetch megabytes or reset the user's scrub. */
|
|
331
|
-
private volumeImageKey;
|
|
332
|
-
/** Blob URLs backing that image — ours to revoke. */
|
|
333
|
-
private volumeImageUrls;
|
|
334
|
-
private spatialDatasetSubscription?;
|
|
335
|
-
plotWidthSubscription?: Subscription;
|
|
336
|
-
imageLoadingSubscription?: Subscription;
|
|
337
|
-
imgLoadingMessageSubscription?: Subscription;
|
|
338
|
-
isZoomSubscription?: Subscription;
|
|
339
|
-
filenameSubscription?: Subscription;
|
|
340
|
-
autoscaleSubscription?: Subscription;
|
|
341
|
-
private plotContextMenuListener?;
|
|
342
|
-
private keydownListener?;
|
|
343
|
-
private wheelListener?;
|
|
285
|
+
protected isoRange: number[];
|
|
286
|
+
/** The spatial-omics dataset on offer and the gates it puts on the selector. */
|
|
287
|
+
protected readonly spatial: SpatialDatasetBinder;
|
|
288
|
+
/** Whether a spatial-omics dataset is published on `SPATIAL_DATA_PORT` — gates the
|
|
289
|
+
* spatial plot types; the toolbar offers the plot modes for an image-less one too. */
|
|
290
|
+
protected get hasSpatialDataset(): boolean;
|
|
291
|
+
/** Keyboard, wheel and context-menu handling; created once the view exists. */
|
|
292
|
+
private shortcuts?;
|
|
344
293
|
/** Debounced z-slice scrubbing (see SliceScrubber — refactoring plan Step 7). */
|
|
345
294
|
private readonly scrubber;
|
|
346
|
-
constructor(state: ImageStatePort, plotService: IVisualizer, messageService: MessageService, ngZone: NgZone, cdr: ChangeDetectorRef, session: VisualizerStore, samTool: SamToolService, cellSegmentTool: CellSegmentToolService, samPointTool: SamPointToolService, regionOps: RegionOpsService, vizConfig?: VizConfig | undefined, toolContributions?: readonly ToolbarContribution[], spatialData?: SpatialDataPort | undefined, plotTypeContributions?: readonly PlotTypeContribution[], injector?: Injector | undefined);
|
|
347
|
-
/**
|
|
348
|
-
*
|
|
349
|
-
* - Outside **test mode**, only the curated default set (descriptors with a
|
|
350
|
-
* `productionLabel`) is offered, shown under suffix-free names — Image,
|
|
351
|
-
* Heatmap, Contour and the napari Surface / Volume / Isosurface. Test mode
|
|
352
|
-
* exposes every backend's type under its full (backend-suffixed) label.
|
|
353
|
-
* - 3D types hidden when the backend can't render a 3D scene.
|
|
354
|
-
* - stack-only types (volume, isosurface) hidden unless the file is a stack —
|
|
355
|
-
* a volume needs multiple z-slices.
|
|
356
|
-
* - scalar-intensity types (contour, surface, isosurface) hidden for RGB
|
|
357
|
-
* images — they map a single intensity per pixel. Image and Heatmap render
|
|
358
|
-
* any image.
|
|
359
|
-
* - spatial-omics types hidden until a `SpatialDataset` is published on
|
|
360
|
-
* `SPATIAL_DATA_PORT` — the mode has nothing to draw without observations,
|
|
361
|
-
* exactly as a volume has nothing to draw without a stack.
|
|
362
|
-
*/
|
|
363
|
-
/**
|
|
364
|
-
* Track whether a spatial-omics dataset is available. A dataset appearing (or
|
|
365
|
-
* being cleared) changes which plot types make sense, so it drives the same
|
|
366
|
-
* recompute + reconcile that the image stream and the test-mode toggle do.
|
|
367
|
-
*
|
|
368
|
-
* No-op when the host provides no `SPATIAL_DATA_PORT` — the spatial types then
|
|
369
|
-
* stay hidden for the life of the component.
|
|
370
|
-
*/
|
|
295
|
+
constructor(state: ImageStatePort, plotService: IVisualizer, messageService: MessageService, ngZone: NgZone, cdr: ChangeDetectorRef, session: VisualizerStore, samTool: SamToolService, cellSegmentTool: CellSegmentToolService, samPointTool: SamPointToolService, regionOps: RegionOpsService, vizConfig?: VizConfig | undefined, toolContributions?: readonly ToolbarContribution[], spatialData?: SpatialDataPort | undefined, plotTypeContributions?: readonly PlotTypeContribution[], injector?: Injector | undefined, hostRef?: ElementRef<HTMLElement> | undefined, destroyRef?: DestroyRef);
|
|
296
|
+
/** Follow the spatial-omics dataset: a dataset appearing, switching or being cleared
|
|
297
|
+
* re-gates the selector exactly as the image stream and the test-mode toggle do. */
|
|
371
298
|
private watchSpatialDataset;
|
|
372
|
-
/**
|
|
373
|
-
*
|
|
374
|
-
* on it.
|
|
375
|
-
*
|
|
376
|
-
* The volume is a 3D image delivered in one file, so for a dataset that has no
|
|
377
|
-
* section image it is the honest thing to put on screen: the slice bar scrubs z,
|
|
378
|
-
* and the contrast window, colormaps and region tools all work because the
|
|
379
|
-
* volume genuinely is the image now. The 3D cloud stays one menu pick away.
|
|
380
|
-
*
|
|
381
|
-
* Keyed by dataset + geometry: the dataset stream re-emits on things like a
|
|
382
|
-
* colour-column change, and rebuilding then would re-fetch the voxels and throw
|
|
383
|
-
* the user back to the middle slice.
|
|
384
|
-
*/
|
|
385
|
-
private showVolumeAsImage;
|
|
386
|
-
/** Forget the published volume image so re-selecting the dataset rebuilds it.
|
|
387
|
-
* The URLs deliberately stay alive: the host may still be displaying that image
|
|
388
|
-
* at this instant, and revoking under it would break every later tile read. They
|
|
389
|
-
* are freed when the next volume replaces them, or on destroy. */
|
|
390
|
-
private dropVolumeImage;
|
|
391
|
-
private revokeVolumeImageUrls;
|
|
299
|
+
/** Recompute the selector's entries for the current image, dataset and test mode
|
|
300
|
+
* (see {@link computePlotTypeMenu}). */
|
|
392
301
|
private computePlotTypeOptions;
|
|
393
302
|
ngOnChanges(changes: SimpleChanges): void;
|
|
394
|
-
/** If the active plot type is no longer in the offered options (e.g. test mode
|
|
395
|
-
* turned off while a test-only type was active, or a scalar type carried onto
|
|
396
|
-
* an RGB image), fall back to the default 2D Image view. */
|
|
397
|
-
/** Whether the live spatial dataset brings pixels of its own — a tissue image it
|
|
398
|
-
* registers onto, or a volume that is published as a z-stack image. */
|
|
399
|
-
private spatialDatasetHasPixels;
|
|
400
303
|
/**
|
|
401
304
|
* The host published NO image — a spatial dataset that brings none does this.
|
|
402
305
|
*
|
|
@@ -405,216 +308,145 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
|
|
|
405
308
|
* `isStack`/`isGrayscale` decision is made against a file that is no longer loaded.
|
|
406
309
|
*/
|
|
407
310
|
private onImageCleared;
|
|
311
|
+
/** If the active plot type is no longer in the offered options (e.g. test mode
|
|
312
|
+
* turned off while a test-only type was active, or a scalar type carried onto
|
|
313
|
+
* an RGB image), fall back to the default 2D Image view. */
|
|
408
314
|
private reconcileSelectedPlotType;
|
|
409
315
|
ngOnInit(): void;
|
|
316
|
+
/**
|
|
317
|
+
* Follow `source` until destroy. Host streams can emit outside the Angular zone (a
|
|
318
|
+
* serverless host clears its loading flag from an image decode or an OpenSeadragon
|
|
319
|
+
* callback); setting a signal there marks this OnPush view but schedules no change
|
|
320
|
+
* detection, so the update is applied inside the zone, as {@link changed} does.
|
|
321
|
+
*/
|
|
322
|
+
private mirror;
|
|
323
|
+
/**
|
|
324
|
+
* State this view shows changed outside one of its template events (a stream, a
|
|
325
|
+
* resolved promise, a host call): mark the OnPush view for check, re-entering the
|
|
326
|
+
* zone when it changed outside it so a change-detection pass follows.
|
|
327
|
+
*/
|
|
328
|
+
private changed;
|
|
329
|
+
/**
|
|
330
|
+
* Lay a new image out once the old view is gone: the stack flag, the slice bounds (one
|
|
331
|
+
* url per slice, so the last index is length-1), and the one-shot `initialZIndex` hint
|
|
332
|
+
* (e.g. the file the user clicked within a numbered series). The hint is consumed so
|
|
333
|
+
* re-delivering the same info (a plot-type switch, reloadAndPlot) does not reset the
|
|
334
|
+
* user's scrub; the host's object is never written to (a host store may freeze it) —
|
|
335
|
+
* the component keeps a copy without the hint, and remembers the host object.
|
|
336
|
+
*/
|
|
337
|
+
private layOutSlices;
|
|
410
338
|
ngAfterViewInit(): void;
|
|
411
339
|
/** The plot div exists now: run an image-less draw that arrived before it did. */
|
|
412
340
|
private onViewReady;
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
onToolbarDragStart(e: MouseEvent): void;
|
|
341
|
+
/** What the keyboard, wheel and context-menu shortcuts act on. Their listeners live
|
|
342
|
+
* outside this view, so every action that changes what it shows marks it for check. */
|
|
343
|
+
private shortcutHost;
|
|
417
344
|
/** Snap the floating toolbar back to its docked position across the top. */
|
|
418
|
-
dockToolbar(): void;
|
|
419
|
-
/** Render the intensity inset chart from the latest profile data. The actual
|
|
420
|
-
* charting is owned by the visualizer service — the component just decides
|
|
421
|
-
* when (profile mode + a fresh profile). */
|
|
422
|
-
private renderIntensityInset;
|
|
345
|
+
protected dockToolbar(): void;
|
|
423
346
|
/** Toolbar "Intensity" group: add another line ROI (next bright colour). */
|
|
424
|
-
addProfileLine(): Promise<void>;
|
|
347
|
+
protected addProfileLine(): Promise<void>;
|
|
425
348
|
ngOnDestroy(): void;
|
|
349
|
+
/** What the host gets through `setDiagram` — see {@link VisualizerHandle}. */
|
|
350
|
+
private readonly hostHandle;
|
|
426
351
|
hasRegions(): boolean;
|
|
427
|
-
/**
|
|
428
|
-
* This method is called in mainFacade.configRequest() - DO NOT DELETE
|
|
429
|
-
*/
|
|
352
|
+
/** The current regions as polygons (also on the host handle). */
|
|
430
353
|
getRegionPolygons(): Polygon[];
|
|
431
|
-
/**
|
|
432
|
-
* Select the color scale type: called by the color scale select button
|
|
433
|
-
* @param event
|
|
434
|
-
*/
|
|
435
|
-
toggleReverseScale(): void;
|
|
436
|
-
/**
|
|
437
|
-
* Select a color map: called by the color map dropdown button
|
|
438
|
-
* @param colormapNode
|
|
439
|
-
*/
|
|
440
|
-
selectColormap(colormapNode: TreeNode): void;
|
|
441
354
|
/** Open the Channels & Histogram dialog (toolbar button). */
|
|
442
|
-
openChannelHistogram(): void;
|
|
355
|
+
protected openChannelHistogram(): void;
|
|
443
356
|
/** Toolbar → open the spatial-omics controls. */
|
|
444
|
-
openSpatialControls(): void;
|
|
357
|
+
protected openSpatialControls(): void;
|
|
445
358
|
/** Open the Region Editor dialog (toolbar button). The editor stays linked to
|
|
446
359
|
* this plotting instance through the root RegionStore singleton, so it works
|
|
447
360
|
* the same as the former right-panel Regions tab. */
|
|
448
|
-
openRegionEditor(): void;
|
|
449
|
-
/**
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
361
|
+
protected openRegionEditor(): void;
|
|
362
|
+
/** The toolbar's Single image / Stack toggle. */
|
|
363
|
+
protected selectStackOption(selectedStackOption: {
|
|
364
|
+
name: string;
|
|
365
|
+
val: string;
|
|
366
|
+
}): void;
|
|
367
|
+
/** Clamp the slice index into [0, maxIndex] and push it to the renderer. */
|
|
368
|
+
protected updateZIndex(): void;
|
|
455
369
|
/**
|
|
456
370
|
* Live z-slice scrub for the Image view: the renderer swaps the displayed
|
|
457
371
|
* slice in place (no re-mount), so dragging the slider steps through the
|
|
458
372
|
* stack the same way the heatmap frame slider does.
|
|
459
373
|
*/
|
|
460
|
-
onZSlide(z: number | undefined): void;
|
|
374
|
+
protected onZSlide(z: number | undefined): void;
|
|
461
375
|
/**
|
|
462
376
|
* Live (debounced) scrub while dragging the Image-view z-slider: update the
|
|
463
377
|
* slice as the user drags, but coalesce rapid changes so we don't fire a
|
|
464
378
|
* slice swap on every pixel. The final value also lands via onZSlide (onSlideEnd).
|
|
465
379
|
*/
|
|
466
|
-
onZScrub(z: number | undefined): void;
|
|
467
|
-
/**
|
|
468
|
-
* Keyboard stack navigation: ←/→ step the z-slice in the Image view, the same
|
|
469
|
-
* way the slider does. Only active for a loaded stack in Image view, and
|
|
470
|
-
* ignored while a form field is focused so typing isn't hijacked. Up/Down are
|
|
471
|
-
* left to OpenSeadragon (panning).
|
|
472
|
-
*/
|
|
473
|
-
onKeydown(e: KeyboardEvent): void;
|
|
380
|
+
protected onZScrub(z: number | undefined): void;
|
|
474
381
|
/** Move the displayed slice by `delta`, clamped to the stack bounds. */
|
|
475
382
|
stepSlice(delta: number): void;
|
|
476
|
-
reloadAndPlot(): void;
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
* extent, as the seqFISH example shows them. The image info is a placeholder naming the
|
|
480
|
-
* dataset, so regions drawn here are kept per dataset like any image's.
|
|
481
|
-
*/
|
|
482
|
-
private plotSpatialWithoutImage;
|
|
483
|
-
cancelLoading(): void;
|
|
484
|
-
downloadImage(): void;
|
|
383
|
+
protected reloadAndPlot(): void;
|
|
384
|
+
protected cancelLoading(): void;
|
|
385
|
+
protected downloadImage(): void;
|
|
485
386
|
autoscaleImage(): void;
|
|
486
387
|
/** Toolbar pixel/smooth toggle: flip smoothing and apply to the active backend. */
|
|
487
|
-
onToggleImageSmoothing(): void;
|
|
388
|
+
protected onToggleImageSmoothing(): void;
|
|
488
389
|
resetAxes(): void;
|
|
489
390
|
toggleDragMode(mode: string): void;
|
|
490
|
-
/** Arm `mode` (or nothing) across every tool, keeping the toolbar in step. */
|
|
491
|
-
private applyDragMode;
|
|
492
|
-
/** Region draw/select/edit modes routed through the region overlay. The
|
|
493
|
-
* The vertex tools (drawpolygon/addpoint/deletepoint/move) are
|
|
494
|
-
* handled by the OpenSeadragon overlay; Plotly's overlay maps them to no-op. */
|
|
495
|
-
private isRegionMode;
|
|
496
391
|
/** Live-update the isosurface as the range slider moves. The control is only
|
|
497
392
|
* available when the active backend renders isosurfaces (ISOSURFACE mode). */
|
|
498
|
-
onIsoRangeChange(values: number[] | undefined): void;
|
|
499
|
-
onWandSensitivityChange(value: number | undefined): void;
|
|
500
|
-
onBrushSizeChange(value: number | undefined): void;
|
|
501
|
-
onVertexEraserRadiusChange(value: number | undefined): void;
|
|
393
|
+
protected onIsoRangeChange(values: number[] | undefined): void;
|
|
394
|
+
protected onWandSensitivityChange(value: number | undefined): void;
|
|
395
|
+
protected onBrushSizeChange(value: number | undefined): void;
|
|
396
|
+
protected onVertexEraserRadiusChange(value: number | undefined): void;
|
|
502
397
|
zoomIn(): void;
|
|
503
398
|
zoomOut(): void;
|
|
504
399
|
deleteRegion(): void;
|
|
505
400
|
/** Undo the most recent region action (jit-ui#85). Up to 10 steps back. */
|
|
506
|
-
undoRegion(): void;
|
|
401
|
+
protected undoRegion(): void;
|
|
507
402
|
/** Redo the most recently undone region action (jit-ui#85). */
|
|
508
|
-
redoRegion(): void;
|
|
509
|
-
/** The currently-selected regions (live store instances). */
|
|
510
|
-
private get selectedRegions();
|
|
511
|
-
/** Regions eligible for set-ops: closed areas (rect / closed polygon /
|
|
512
|
-
* multi-polygon), excluding intensity-profile lines. */
|
|
513
|
-
private opEligible;
|
|
514
|
-
/** Image pixel dimensions for the raster ops; falls back to the selection's
|
|
515
|
-
* extent when the image size isn't known (keeps clamping sane). */
|
|
516
|
-
private opImageDims;
|
|
517
|
-
/** True when ≥2 eligible regions are selected (Merge available). */
|
|
518
|
-
get canMergeRegions(): boolean;
|
|
519
|
-
/** True when any selected region is multi-part (Ungroup available). */
|
|
520
|
-
get canUngroupRegions(): boolean;
|
|
521
|
-
/** True when ≥1 eligible region is selected (Inverse / Simplify available). */
|
|
522
|
-
get hasEligibleSelection(): boolean;
|
|
523
|
-
/** Select every region on the image (excludes intensity-profile lines). */
|
|
403
|
+
protected redoRegion(): void;
|
|
524
404
|
selectAllRegions(): void;
|
|
525
|
-
/** Merge the selected regions into a single (possibly multi-part) region. */
|
|
526
405
|
mergeRegions(): void;
|
|
527
|
-
/** Split each selected multi-part region into one region per part. */
|
|
528
406
|
ungroupRegions(): void;
|
|
529
|
-
/** Replace the selection with its inverse inside the image rectangle. */
|
|
530
407
|
inverseRegions(): void;
|
|
531
|
-
/** Douglas–Peucker simplify each selected region by `thresholdPx`. */
|
|
532
408
|
simplifyRegions(thresholdPx: number): void;
|
|
533
|
-
/** Open the custom-threshold simplify dialog. */
|
|
534
409
|
openSimplifyDialog(): void;
|
|
535
|
-
/**
|
|
536
|
-
* Commit a set-op: drop the `remove` regions, append `add`, and select the
|
|
537
|
-
* results. Goes through setRegions so it's undo-tracked and re-rendered;
|
|
538
|
-
* profile lines and unselected regions are preserved.
|
|
539
|
-
*/
|
|
540
|
-
private replaceRegions;
|
|
541
410
|
/** Box-prompted SAM segmentation of the drawn rectangles (jit-ui#90). A sticky
|
|
542
411
|
* `sam` toast shows live status + a download progress bar (first run pulls the
|
|
543
412
|
* encoder, ~170 MB); it stays open until the run finishes (bar hits 100%). */
|
|
544
|
-
segmentRegions(): Promise<void>;
|
|
413
|
+
protected segmentRegions(): Promise<void>;
|
|
545
414
|
/** Auto-segment cells inside each drawn rectangle with cellpose-SAM, client-side
|
|
546
415
|
* (jit-ui#90). Each box is cropped (browser slide-crop) then run through the
|
|
547
416
|
* cellpose-js model; the same sticky `sam` toast + progress bar is reused. */
|
|
548
|
-
segmentCellpose(): Promise<void>;
|
|
549
|
-
/**
|
|
550
|
-
* Parameters currently bound by the generic parameter dialog, for whichever
|
|
551
|
-
* tool is open. Seeded lazily: a tool's defaults are only asked for when the
|
|
552
|
-
* user first touches it, so registering a tool costs nothing until used.
|
|
553
|
-
*/
|
|
417
|
+
protected segmentCellpose(): Promise<void>;
|
|
554
418
|
paramsFor(toolId: string): Record<string, unknown>;
|
|
555
|
-
|
|
556
|
-
modelIdFor(tool: ToolbarToolContribution): string;
|
|
557
|
-
/** Switching checkpoint re-seeds the parameters, since the defaults belong to
|
|
558
|
-
* the model rather than to the tool. */
|
|
559
|
-
onToolModelChange(e: {
|
|
419
|
+
protected onToolModelChange(e: {
|
|
560
420
|
toolId: string;
|
|
561
421
|
modelId: string;
|
|
562
422
|
}): void;
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
/**
|
|
567
|
-
* Narrow a param spec for the template.
|
|
568
|
-
*
|
|
569
|
-
* `*ngSwitchCase` does not narrow a discriminated union in Angular's template
|
|
570
|
-
* type checker the way a `switch` does in TypeScript, so the template asks for
|
|
571
|
-
* the variant it has already matched on.
|
|
572
|
-
*/
|
|
573
|
-
numberParam(p: ToolParamSpec): NumberParamSpec;
|
|
574
|
-
selectParam(p: ToolParamSpec): SelectParamSpec;
|
|
575
|
-
openToolParams(toolId: string): void;
|
|
576
|
-
/** The tool whose parameter dialog is open, for the generic dialog's header
|
|
577
|
-
* and field list. */
|
|
578
|
-
get openParamsTool(): ToolbarToolContribution | undefined;
|
|
579
|
-
resetToolParams(toolId: string): void;
|
|
423
|
+
protected openToolParams(toolId: string): void;
|
|
424
|
+
protected closeToolParams(): void;
|
|
425
|
+
protected resetToolParams(toolId: string): void;
|
|
580
426
|
/** Run a contributed tool over the current view. No prompt: these sweep the
|
|
581
427
|
* whole view rather than being pointed at something. Reuses the shared
|
|
582
428
|
* segmentation toast so progress reads the same as the SAM/cellpose tools. */
|
|
583
|
-
runTool(toolId: string): Promise<void>;
|
|
584
|
-
/** Shared driver for the box-prompt segment tools: wires the tool's status +
|
|
585
|
-
* download progress into the sticky `sam` toast, runs `op`, and reports the
|
|
586
|
-
* region count. Keeps the toast open until the run settles (bar hits 100%). */
|
|
587
|
-
private runSegmentWithToast;
|
|
588
|
-
/** Show the shared sticky `sam` toast once (idempotent — re-adding would stack
|
|
589
|
-
* a new toast on every point click). */
|
|
590
|
-
private showSamToast;
|
|
591
|
-
/** Dismiss the shared `sam` toast and reset its progress/spinner state. */
|
|
592
|
-
private hideSamToast;
|
|
429
|
+
protected runTool(toolId: string): Promise<void>;
|
|
593
430
|
/** Pick the SAM model the segment tools use (jit-ui#90 P1). */
|
|
594
|
-
onSamModelChange(id: string): void;
|
|
431
|
+
protected onSamModelChange(id: string): void;
|
|
595
432
|
/** Convert the selected region to a smooth bezier curve. */
|
|
596
433
|
toBezierRegion(): void;
|
|
597
434
|
/** Convert the selected region back to a straight-edged polygon. */
|
|
598
435
|
toPolygonRegion(): void;
|
|
599
|
-
/**
|
|
600
|
-
* Immediate region actions on the current selection (jit-ui#85): merge,
|
|
601
|
-
* ungroup, inverse, simplify, the Bézier conversions, and delete — the
|
|
602
|
-
* one-shot geometry transforms, grouped apart from the tool/mode toggles and
|
|
603
|
-
* shown only when something is selected. Each item is gated on what the
|
|
604
|
-
* selection supports.
|
|
605
|
-
*/
|
|
606
|
-
private buildRegionActionItems;
|
|
436
|
+
/** The right-click menu for the current view, armed mode and selection. */
|
|
607
437
|
private buildContextMenuItems;
|
|
438
|
+
private contextMenuState;
|
|
439
|
+
/** 3D scene interaction mode (orbit / turntable / pan / zoom); no-op on a 2D-only backend. */
|
|
608
440
|
toggleSurface3dMode(mode: string): void;
|
|
609
441
|
resetSurfaceCamera(): void;
|
|
610
442
|
/** Toggle the napari 3D coordinate-axes / scale gizmo (volume/isosurface). No-op on backends
|
|
611
443
|
* that don't render one (the control method is optional). */
|
|
612
|
-
toggleAxes(): void;
|
|
444
|
+
protected toggleAxes(): void;
|
|
613
445
|
/** Toggle the napari surface wireframe (edges vs filled). No-op on backends without a surface. */
|
|
614
|
-
toggleWireframe(): void;
|
|
446
|
+
protected toggleWireframe(): void;
|
|
615
447
|
/** Change the napari 3D decimate factor. Decimation changes the fetched/assembled data, so this
|
|
616
448
|
* re-plots the current 3D type at the new resolution (unlike axes/wireframe, which are live). */
|
|
617
|
-
selectResolution(scale: number): void;
|
|
449
|
+
protected selectResolution(scale: number): void;
|
|
618
450
|
/**
|
|
619
451
|
* Switch the active plot type (heatmap, surface, contour, scatter, line,
|
|
620
452
|
* scatter3d, isosurface). Keeps `isHeatmap` as the 2D-vs-3D flag the rest of
|
|
@@ -622,59 +454,12 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
|
|
|
622
454
|
* moving to a 3D type, then re-plots.
|
|
623
455
|
*/
|
|
624
456
|
onSelectPlotType(selected: PlotTypeId): void;
|
|
625
|
-
/**
|
|
626
|
-
* Start the selected contributed mode's session, once its base view has
|
|
627
|
-
* plotted. No-op for a built-in type, or when the base on screen is not the
|
|
628
|
-
* one the mode rides on. A backend that cannot provide a viewport for it
|
|
629
|
-
* (e.g. OSD fell back to Plotly) counts as a failed activation.
|
|
630
|
-
*/
|
|
631
|
-
private activateSelectedPlotMode;
|
|
632
|
-
/** Render the live mode's panel. Activation can resolve outside Angular (an
|
|
633
|
-
* OSD callback, a contribution's own promise), hence the zone re-entry. */
|
|
634
|
-
private showPlotModePanel;
|
|
635
|
-
/** Drop the panel (destroying a component panel) before the session ends. */
|
|
636
|
-
private hidePlotModePanel;
|
|
637
|
-
/**
|
|
638
|
-
* A contributed mode could not start. Its base type is already on screen —
|
|
639
|
-
* the base plotted first — so just select it: nothing needs to re-plot.
|
|
640
|
-
*/
|
|
641
|
-
private fallBackFromPlotMode;
|
|
642
|
-
/** Run change detection; returns what it threw (logged), or null. */
|
|
643
|
-
private detectChangesSafely;
|
|
644
457
|
/** The toolbar button: open the tool's dialog, or close it if it is open. */
|
|
645
|
-
toggleDialogTool(id: string): void;
|
|
458
|
+
protected toggleDialogTool(id: string): void;
|
|
646
459
|
/** Close the open dialog tool: its body is torn down, then its session ends. */
|
|
647
|
-
closeDialogTool(): void;
|
|
648
|
-
/** Start (or restart, after a re-render) the open dialog tool's session. */
|
|
649
|
-
private activateOpenDialogTool;
|
|
650
|
-
/** The live dialog body's teardown, and a pending wait for its host to connect. */
|
|
651
|
-
private toolDialogTeardown;
|
|
652
|
-
private toolDialogFrame;
|
|
653
|
-
/**
|
|
654
|
-
* The session is live: render the dialog, then mount the tool's body once the host
|
|
655
|
-
* element is in the document, so `mount()` can measure it and start widgets that need
|
|
656
|
-
* a connected element.
|
|
657
|
-
*/
|
|
658
|
-
private showToolDialog;
|
|
659
|
-
/** How many animation frames to wait for the dialog to attach the body's host. */
|
|
660
|
-
private static readonly TOOL_DIALOG_ATTACH_FRAMES;
|
|
661
|
-
/**
|
|
662
|
-
* Mount `tool`'s body into `host` once it is connected (the dialog may attach it a
|
|
663
|
-
* frame later, when it moves itself to `<body>`). If it never connects within
|
|
664
|
-
* {@link TOOL_DIALOG_ATTACH_FRAMES} it is mounted anyway, with a warning, rather than
|
|
665
|
-
* leaving an empty dialog. A throwing `mount()` fails the session like a failed start.
|
|
666
|
-
*/
|
|
667
|
-
private mountToolDialogBody;
|
|
668
|
-
/** The session is about to end: tear the body down first, then drop the dialog. */
|
|
669
|
-
private hideToolDialog;
|
|
670
|
-
/** A dialog tool could not start: close it and say so. */
|
|
671
|
-
private dialogToolFailed;
|
|
460
|
+
protected closeDialogTool(): void;
|
|
672
461
|
/** Where the open dialog tool's host element is attached once its dialog renders. */
|
|
673
462
|
set toolDialogSlot(ref: ElementRef<HTMLElement> | undefined);
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
/** Deactivate whatever tool is armed and clear every tool mode. */
|
|
677
|
-
private deactivateActiveTool;
|
|
678
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
679
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<VisualizerComponent, "visualizer", never, { "toolbarTools": { "alias": "toolbarTools"; "required": false; }; "testMode": { "alias": "testMode"; "required": false; }; }, { "isStackEvent": "isStackEvent"; "isGrayscaleEvent": "isGrayscaleEvent"; }, never, ["*"], false, never>;
|
|
463
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, null]>;
|
|
464
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VisualizerComponent, "visualizer", never, { "toolbarTools": { "alias": "toolbarTools"; "required": false; }; "testMode": { "alias": "testMode"; "required": false; }; }, { "isStackEvent": "isStackEvent"; "isGrayscaleEvent": "isGrayscaleEvent"; }, never, ["*"], true, never>;
|
|
680
465
|
}
|