@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
|
@@ -10,94 +10,104 @@ import * as i0 from "@angular/core";
|
|
|
10
10
|
* {@link CHANNEL_HISTOGRAM_API} into the shared store, and both rendering
|
|
11
11
|
* backends recolor the displayed image live. The pane depends only on the
|
|
12
12
|
* contract, never the concrete visualizer.
|
|
13
|
+
*
|
|
14
|
+
* OnPush: the API's channel / colormap / invert / image streams, the async
|
|
15
|
+
* histogram and the slider-activity timer mark it for check.
|
|
13
16
|
*/
|
|
14
17
|
export declare class ChannelHistogramComponent implements OnInit, OnDestroy {
|
|
15
18
|
private api;
|
|
16
19
|
/** Dialog visibility, two-way bound so the host (toolbar button) can open it. */
|
|
17
20
|
visible: boolean;
|
|
21
|
+
/** The dialog was opened or closed; two-way with {@link visible}. */
|
|
18
22
|
visibleChange: EventEmitter<boolean>;
|
|
19
|
-
|
|
20
|
-
readonly
|
|
23
|
+
/** DOM id of the Plotly histogram element — per instance, so two panes don't collide. */
|
|
24
|
+
protected readonly histogramDiv: string;
|
|
25
|
+
protected readonly lutColors: readonly {
|
|
21
26
|
name: string;
|
|
22
27
|
color: string;
|
|
23
28
|
}[];
|
|
24
|
-
channels: IChannelState[];
|
|
25
|
-
selected: IChannelState | null;
|
|
26
|
-
invert: boolean;
|
|
27
|
-
logScale: boolean;
|
|
29
|
+
protected channels: IChannelState[];
|
|
30
|
+
protected selected: IChannelState | null;
|
|
31
|
+
protected invert: boolean;
|
|
32
|
+
protected logScale: boolean;
|
|
28
33
|
/** Bounded retries while the (async) histogram sampling resolves. */
|
|
29
34
|
private histRetries;
|
|
35
|
+
private histRetryTimer?;
|
|
30
36
|
/** The selected channel's current histogram. Native bit depth (with
|
|
31
37
|
* observed/range fields) for >8-bit images, else the 8-bit client histogram.
|
|
32
38
|
* Drives the plot, the native window labels, and the export-button gate. */
|
|
33
|
-
hist: IHistogram | null;
|
|
39
|
+
protected get hist(): IHistogram | null;
|
|
40
|
+
protected set hist(h: IHistogram | null);
|
|
41
|
+
private _hist;
|
|
42
|
+
/** {@link nativeRange} of {@link hist}, kept with it so the template's window
|
|
43
|
+
* getters read it instead of re-deriving (and allocating) it per check. */
|
|
44
|
+
private range;
|
|
34
45
|
private histSub?;
|
|
35
46
|
/** Which window control is being adjusted right now — drives a small
|
|
36
47
|
* non-blocking activity spinner next to that slider, since the image recolor
|
|
37
48
|
* isn't instant on large stacks. Cleared a short moment after movement stops
|
|
38
49
|
* (the recolor isn't directly observable, so this is a trailing heuristic). */
|
|
39
|
-
activeAdjust: 'min' | 'max' | 'gamma' | null;
|
|
50
|
+
protected activeAdjust: 'min' | 'max' | 'gamma' | null;
|
|
40
51
|
private adjustTimer?;
|
|
41
|
-
colormapOptions: any;
|
|
42
|
-
selectedColormap: any;
|
|
43
|
-
private
|
|
52
|
+
protected colormapOptions: any;
|
|
53
|
+
protected selectedColormap: any;
|
|
54
|
+
private readonly destroyRef;
|
|
55
|
+
private readonly cdr;
|
|
56
|
+
private readonly zone;
|
|
57
|
+
/** Re-render this OnPush view, re-entering the zone when the change came from outside it. */
|
|
58
|
+
private changed;
|
|
44
59
|
/** Keeps the Plotly histogram sized to the (resizable) dialog body. */
|
|
45
60
|
private resizeObserver?;
|
|
46
61
|
constructor(api: IChannelHistogramApi);
|
|
47
62
|
/** Per-channel pseudo-colour only applies when there's more than one channel
|
|
48
63
|
* (RGB / fluorescence). A single grayscale channel uses the colormap instead. */
|
|
49
|
-
get multichannel(): boolean;
|
|
64
|
+
protected get multichannel(): boolean;
|
|
50
65
|
ngOnInit(): void;
|
|
66
|
+
/** Stops the pending histogram load / retry and activity timer, the resize
|
|
67
|
+
* observer and the Plotly plot; the API streams end through `takeUntilDestroyed`. */
|
|
51
68
|
ngOnDestroy(): void;
|
|
52
|
-
onVisibleChange(v: boolean): void;
|
|
69
|
+
protected onVisibleChange(v: boolean): void;
|
|
53
70
|
/** p-dialog (onShow): the plot div now exists, so draw the histogram and keep
|
|
54
71
|
* it sized to the dialog (which is resizable) via a ResizeObserver. */
|
|
55
|
-
onShow(): void;
|
|
72
|
+
protected onShow(): void;
|
|
56
73
|
private teardownResize;
|
|
57
|
-
selectChannel(ch: IChannelState): void;
|
|
58
|
-
onMinChange(value:
|
|
59
|
-
onMaxChange(value:
|
|
60
|
-
onGammaChange(value:
|
|
74
|
+
protected selectChannel(ch: IChannelState): void;
|
|
75
|
+
protected onMinChange(value: number | string | null | undefined): void;
|
|
76
|
+
protected onMaxChange(value: number | string | null | undefined): void;
|
|
77
|
+
protected onGammaChange(value: number | string | null | undefined): void;
|
|
61
78
|
/** Flag a control as actively adjusting so its spinner shows; auto-clears a
|
|
62
79
|
* short moment after the last change (kept alive while the user keeps
|
|
63
80
|
* dragging, since each change resets the timer). */
|
|
64
81
|
private markBusy;
|
|
65
|
-
onVisibleToggle(ch: IChannelState, value: boolean): void;
|
|
66
|
-
onColorChange(ch: IChannelState, color: string): void;
|
|
67
|
-
onColormap(node: TreeNode): void;
|
|
68
|
-
onInvert(value: boolean): void;
|
|
69
|
-
toggleLog(value: boolean): void;
|
|
82
|
+
protected onVisibleToggle(ch: IChannelState, value: boolean): void;
|
|
83
|
+
protected onColorChange(ch: IChannelState, color: string): void;
|
|
84
|
+
protected onColormap(node: TreeNode): void;
|
|
85
|
+
protected onInvert(value: boolean): void;
|
|
86
|
+
protected toggleLog(value: boolean): void;
|
|
70
87
|
/** Quick-assign a preset LUT colour to a channel (Fiji palette). */
|
|
71
|
-
setPreset(ch: IChannelState, color: string): void;
|
|
88
|
+
protected setPreset(ch: IChannelState, color: string): void;
|
|
72
89
|
/** Export the displayed composite as a publication-ready PNG (8-bit figure). */
|
|
73
|
-
exportComposite(): void;
|
|
90
|
+
protected exportComposite(): void;
|
|
74
91
|
/** Export the underlying data as a true-16-bit multi-band TIFF (server-side). */
|
|
75
|
-
exportData(): void;
|
|
92
|
+
protected exportData(): void;
|
|
76
93
|
/** True when the current channel histogram is native >8-bit (16-bit etc.):
|
|
77
94
|
* gates the native slider labelling and the 16-bit TIFF export button. */
|
|
78
|
-
get is16bit(): boolean;
|
|
79
|
-
/**
|
|
80
|
-
* pixel extremes for a native histogram, else plain 0..255 (so 8-bit images
|
|
81
|
-
* pass through unchanged). The 8-bit tile is server-stretched across this
|
|
82
|
-
* range, so it's the best client-side native↔display mapping. */
|
|
95
|
+
protected get is16bit(): boolean;
|
|
96
|
+
/** {@link nativeRange} of the current histogram. */
|
|
83
97
|
private obsRange;
|
|
84
98
|
/** 8-bit display value (0..255) → native units. */
|
|
85
99
|
private toNative;
|
|
86
100
|
/** Native units → clamped 8-bit display value (0..255). */
|
|
87
101
|
private toDisp;
|
|
88
102
|
/** Selected channel window endpoints in native units (for the sliders). */
|
|
89
|
-
get minNative(): number;
|
|
90
|
-
get maxNative(): number;
|
|
103
|
+
protected get minNative(): number;
|
|
104
|
+
protected get maxNative(): number;
|
|
91
105
|
/** Native slider bounds + step (256 display steps across the native range). */
|
|
92
|
-
get sliderMin(): number;
|
|
93
|
-
get sliderMax(): number;
|
|
94
|
-
get sliderStep(): number;
|
|
95
|
-
auto(): void;
|
|
96
|
-
reset(): void;
|
|
97
|
-
/** Saturation-based auto-window over a (native or 8-bit) histogram: pick
|
|
98
|
-
* [min,max] so ~`saturation` of pixels clip at each end, dropping a dominant
|
|
99
|
-
* first/last bin (background/padding). Returns native bin values. */
|
|
100
|
-
private autoWindow;
|
|
106
|
+
protected get sliderMin(): number;
|
|
107
|
+
protected get sliderMax(): number;
|
|
108
|
+
protected get sliderStep(): number;
|
|
109
|
+
protected auto(): void;
|
|
110
|
+
protected reset(): void;
|
|
101
111
|
/** Fetch the selected channel's histogram (native for 16-bit, else 8-bit) and
|
|
102
112
|
* (re)draw it. Async — the native path hits the server; the 8-bit path may be
|
|
103
113
|
* null until tile sampling resolves, so we retry a few times. */
|
|
@@ -108,5 +118,5 @@ export declare class ChannelHistogramComponent implements OnInit, OnDestroy {
|
|
|
108
118
|
private markerShapes;
|
|
109
119
|
private histogramLayout;
|
|
110
120
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChannelHistogramComponent, never>;
|
|
111
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChannelHistogramComponent, "channel-histogram", never, { "visible": { "alias": "visible"; "required": false; }; }, { "visibleChange": "visibleChange"; }, never, never,
|
|
121
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChannelHistogramComponent, "channel-histogram", never, { "visible": { "alias": "visible"; "required": false; }; }, { "visibleChange": "visibleChange"; }, never, never, true, never>;
|
|
112
122
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Optional features a viewer backend may or may not support. Consumers query
|
|
3
|
-
* `
|
|
3
|
+
* `IVisualizer.capabilities` and degrade gracefully (hide a toolbar item,
|
|
4
4
|
* skip a render path) rather than calling a method that no-ops.
|
|
5
5
|
*
|
|
6
6
|
* The Plotly backend supports the scientific/data features; the OpenSeadragon
|
|
7
7
|
* backend supports `ImageDisplay` (large zoomable image) but not the
|
|
8
|
-
* scalar-data features.
|
|
8
|
+
* scalar-data features. `RoutingVisualizerService` picks a backend per plot type
|
|
9
|
+
* and reports Plotly's capabilities, so the UI keeps offering every type.
|
|
9
10
|
*/
|
|
10
11
|
export declare enum ViewerFeature {
|
|
11
12
|
/** Display a raster/tiled image (HEATMAP/RGB image, OSD's strength). */
|
|
@@ -23,6 +24,7 @@ export declare enum ViewerFeature {
|
|
|
23
24
|
/** Live isosurface intensity bounds (isomin/isomax) — see IIsosurfaceControls. */
|
|
24
25
|
Isosurface = "isosurface"
|
|
25
26
|
}
|
|
27
|
+
/** The feature set a backend advertises (see {@link ViewerFeature}). */
|
|
26
28
|
export interface ViewerCapabilities {
|
|
27
29
|
has(feature: ViewerFeature): boolean;
|
|
28
30
|
}
|
|
@@ -24,6 +24,7 @@ export interface CellSegmentProgress {
|
|
|
24
24
|
/** Human-readable phase, e.g. 'Running inference (tile 3/8)…'. */
|
|
25
25
|
onStatus?: (status: string) => void;
|
|
26
26
|
}
|
|
27
|
+
/** A segmenter that labels every cell of an image (one exclusive label per pixel). */
|
|
27
28
|
export interface ICellSegmenter {
|
|
28
29
|
/** Segment all cells in an RGBA image into an instance label map. */
|
|
29
30
|
segmentCells(image: {
|
|
@@ -97,4 +97,8 @@ export interface IChannelHistogramApi {
|
|
|
97
97
|
* meaningful for >8-bit images; a no-op on backends that can't provide it. */
|
|
98
98
|
exportData(): void;
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* DI token for the Channels & Histogram pane's API. The library binds it to its router
|
|
102
|
+
* (VisualizationModule / provideVisualization); hosts inject it, they do not provide it.
|
|
103
|
+
*/
|
|
100
104
|
export declare const CHANNEL_HISTOGRAM_API: InjectionToken<IChannelHistogramApi>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one CSS colour parser (review NAPARI-BOUNDARY-29, CORE-25, RT-28).
|
|
3
|
+
*
|
|
4
|
+
* Seven call sites used to parse colours by hand, each accepting a different
|
|
5
|
+
* subset (`#rgb` here, `#rrggbb` only there, `rgb()` in one place) and each
|
|
6
|
+
* falling back to a different colour on bad input. They now all call
|
|
7
|
+
* {@link parseCssColor}, which returns null for anything it does not
|
|
8
|
+
* understand, and keep their own fallback at the call site
|
|
9
|
+
* (`parseCssColor(s) ?? MISSING_COLOR`).
|
|
10
|
+
*
|
|
11
|
+
* Pure: no DOM, no Angular. Channels are 0–255 integers.
|
|
12
|
+
*/
|
|
13
|
+
/** An RGB colour, each channel 0–255. */
|
|
14
|
+
export type Rgb = [number, number, number];
|
|
15
|
+
/**
|
|
16
|
+
* Parse a CSS colour to RGB, or null when it is not one this parser accepts.
|
|
17
|
+
*
|
|
18
|
+
* Accepts `#rgb`, `#rrggbb` and `#rrggbbaa` (the `#` may be omitted, and the
|
|
19
|
+
* alpha is ignored), and `rgb(r, g, b)` / `rgba(r, g, b, a)` with comma- or
|
|
20
|
+
* space-separated channels (rounded and clamped to 0–255). Named colours
|
|
21
|
+
* (`red`) are not accepted.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseCssColor(s: string | null | undefined): Rgb | null;
|
|
24
|
+
/** `#rrggbb` (lower-case) for an RGB colour; channels are rounded and clamped to 0–255. */
|
|
25
|
+
export declare function rgbToHex(rgb: Readonly<Rgb>): string;
|
|
26
|
+
/** {@link parseCssColor} for hex input: `#rgb` / `#rrggbb` / `#rrggbbaa` (with or without `#`), or null. */
|
|
27
|
+
export declare function hexToRgb(hex: string | null | undefined): Rgb | null;
|
|
@@ -7,15 +7,30 @@
|
|
|
7
7
|
* to Plotly's `colorscale` — so the two surfaces stay in lock-step.
|
|
8
8
|
*
|
|
9
9
|
* A colormap value is either:
|
|
10
|
-
* - an array of `[stop, color]` pairs (the matplotlib
|
|
11
|
-
* - a Plotly built-in scale *name* string (e.g. 'Viridis', 'Reds')
|
|
10
|
+
* - an array of `[stop, color]` pairs (the matplotlib tables, see {@link lutScale}), or
|
|
11
|
+
* - a Plotly built-in scale *name* string (e.g. 'Viridis', 'Reds'), or
|
|
12
|
+
* - a 256-entry RGB table itself (a `napari-js/colormaps` `*_LUT`), used as is.
|
|
12
13
|
* `color` may be `'rgb(r, g, b)'` or `'#rrggbb'`/`'#rgb'`.
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
import { Rgb } from './color';
|
|
16
|
+
export type { Rgb };
|
|
17
|
+
type Stop = [number, string];
|
|
18
|
+
/**
|
|
19
|
+
* A 256-entry RGB table (a `napari-js/colormaps` `*_LUT`, `Uint8Array(768)`) as an inline
|
|
20
|
+
* Plotly colorscale: one `[i / 255, 'rgb(r, g, b)']` stop per entry, the shape the colormap
|
|
21
|
+
* tree hands to Plotly's `colorscale` and to {@link buildColormapLut}. Stops are rounded to
|
|
22
|
+
* six decimals, as the colormap asset this replaces carried them.
|
|
23
|
+
*/
|
|
24
|
+
export declare function lutScale(lut: ArrayLike<number>): Stop[];
|
|
15
25
|
/**
|
|
16
26
|
* Build a 256-entry RGB lookup table from a `COLORMAP_OPTIONS` value, indexed by
|
|
17
27
|
* grayscale value 0–255. Returns null if the value can't be resolved to a scale.
|
|
18
|
-
*
|
|
28
|
+
*
|
|
29
|
+
* The Plotly side (the value's forms, the colour strings, the built-in names) is
|
|
30
|
+
* parsed here; the interpolation is napari-js's own `Colormap` sampled by `buildLut`,
|
|
31
|
+
* so both backends ramp a scale the same way.
|
|
32
|
+
* @param value array of `[stop, color]` pairs, a Plotly built-in name string, or a
|
|
33
|
+
* 256-entry RGB `Uint8Array(768)`
|
|
19
34
|
* @param reverse mirror the scale (matches Plotly's `reversescale`)
|
|
20
35
|
*/
|
|
21
36
|
export declare function buildColormapLut(value: unknown, reverse?: boolean): Rgb[] | null;
|
|
@@ -7,9 +7,9 @@ import { Region } from '../models/region';
|
|
|
7
7
|
*
|
|
8
8
|
* "Data coordinates" are the backend's shape coordinate space: Plotly data
|
|
9
9
|
* coords for Plotly, image-pixel coords for OpenSeadragon. The tools convert
|
|
10
|
-
* data -> image-matrix using the per-
|
|
11
|
-
* (`getCachedImageData().ratios
|
|
12
|
-
*
|
|
10
|
+
* data -> image-matrix using the per-axis ratios they already get from the host
|
|
11
|
+
* (`getCachedImageData().ratios`, see `MatrixFrame`), so that division stays in
|
|
12
|
+
* the tool and the transform stays purely screen<->data.
|
|
13
13
|
*/
|
|
14
14
|
export interface ICoordinateTransform {
|
|
15
15
|
/** Client (mouse event) pixel -> data coordinates. */
|
|
@@ -49,6 +49,23 @@ export interface IBrushOptions {
|
|
|
49
49
|
/** Colour for the painted regions instead of the shape colour. Kept against preset re-apply. */
|
|
50
50
|
color?: string;
|
|
51
51
|
}
|
|
52
|
+
/** Options for the vertex eraser. */
|
|
53
|
+
export interface IVertexEraserOptions {
|
|
54
|
+
/** Eraser radius in matrix (image) pixels. */
|
|
55
|
+
radius?: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The on-canvas tools `IToolController.setActiveTool` arms: magic wand, brush,
|
|
59
|
+
* vertex eraser, box zoom and SAM point prompts. Any other id (a region draw
|
|
60
|
+
* mode such as `'drawrect'`, `'pan'`) arms none of them.
|
|
61
|
+
*/
|
|
62
|
+
export type CanvasToolId = 'wand' | 'brush' | 'eraseVertex' | 'zoomToBox' | 'samPoint';
|
|
63
|
+
/** Every {@link CanvasToolId}. */
|
|
64
|
+
export declare const CANVAS_TOOL_IDS: readonly CanvasToolId[];
|
|
65
|
+
/** Whether `id` names an on-canvas tool. */
|
|
66
|
+
export declare function isCanvasToolId(id: string | null | undefined): id is CanvasToolId;
|
|
67
|
+
/** Options for {@link CanvasToolId} tools: the wand's, the brush's or the eraser's. */
|
|
68
|
+
export type CanvasToolOptions = IWandOptions | IBrushOptions | IVertexEraserOptions;
|
|
52
69
|
/** What drives point colour in the spatial-omics mode: an annotation column
|
|
53
70
|
* from the dataset, or one feature (gene) vector fetched on demand. */
|
|
54
71
|
export interface SpatialColorBy {
|
|
@@ -274,4 +291,8 @@ export interface SpatialViewState {
|
|
|
274
291
|
}
|
|
275
292
|
/** Transcript glyph names — see `TRANSCRIPT_GLYPHS` in `spatial/spatial-tiles.ts`. */
|
|
276
293
|
export type TranscriptGlyphName = 'circle' | 'star' | 'triangle' | 'square' | 'diamond' | 'cross' | 'hexagon' | 'triangle-down' | 'pentagon' | 'x';
|
|
294
|
+
/**
|
|
295
|
+
* The spatial view a dataset opens with: no colour source, points and volume shown, the
|
|
296
|
+
* optional layers off. A complete state to spread partial view-state patches over.
|
|
297
|
+
*/
|
|
277
298
|
export declare const DEFAULT_SPATIAL_VIEW: SpatialViewState;
|
|
@@ -61,6 +61,10 @@ export interface IImageInfo {
|
|
|
61
61
|
* opposed to the scalar `roiJsonStr`, which is one ROI set for the whole
|
|
62
62
|
* image (a single file or a server z-stack). (jit-ui#93) */
|
|
63
63
|
roiJsonStrs?: (string | null)[];
|
|
64
|
+
/** Base URL of a server-side region source for this image (see `openHttpRegionSource`):
|
|
65
|
+
* its regions are drawn from the server's level-of-detail tiles instead of being loaded
|
|
66
|
+
* from `roiJsonStr`. On a stack, slice z shows the source's plane z. */
|
|
67
|
+
regionSourceUrl?: string;
|
|
64
68
|
/** Per-slice, per-channel plane URLs for a SERVERLESS multichannel image
|
|
65
69
|
* (`tiled: false` + `imageMeta[0].channelCount > 1`). `channelUrls[z][c]`
|
|
66
70
|
* is a complete single-band image of channel c at slice z. The OSD simple
|
|
@@ -34,6 +34,10 @@ export interface InstanceDetection {
|
|
|
34
34
|
classId: number;
|
|
35
35
|
className: string;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* The result of one {@link IInstanceSegmenter} run: every detection, in the pixel frame of
|
|
39
|
+
* the `width × height` image that was segmented.
|
|
40
|
+
*/
|
|
37
41
|
export interface InstanceSegmentation {
|
|
38
42
|
detections: InstanceDetection[];
|
|
39
43
|
width: number;
|
|
@@ -119,6 +123,7 @@ export interface InstanceSegmentProgress {
|
|
|
119
123
|
/** Human-readable phase, e.g. 'Running inference (tile 3/8)…'. */
|
|
120
124
|
onStatus?: (status: string) => void;
|
|
121
125
|
}
|
|
126
|
+
/** A segmenter that returns discrete, classified, possibly overlapping instances. */
|
|
122
127
|
export interface IInstanceSegmenter {
|
|
123
128
|
/** Detect and outline all instances in an RGBA image. */
|
|
124
129
|
segmentInstances(image: {
|
|
@@ -8,11 +8,22 @@ import { IHistogram } from './channel-histogram-api.contract';
|
|
|
8
8
|
* tiles encode gray as r=g=b, so max is exact; it also tolerates tinted
|
|
9
9
|
* pixels).
|
|
10
10
|
*/
|
|
11
|
-
/** ITU-R BT.601 luminance for an RGB pixel (Plotly's scalar projection)
|
|
12
|
-
|
|
11
|
+
/** ITU-R BT.601 luminance for an RGB pixel (Plotly's scalar projection): napari-js's
|
|
12
|
+
* `luminance8`, under the name SIV's callers use, so there is one copy of the weights. */
|
|
13
|
+
export { luminance8 as bt601Luminance } from 'napari-js';
|
|
13
14
|
/** Max of the three channels (the OSD tile path's scalar projection).
|
|
14
15
|
* NOTE: the per-pixel recolor loop in `osd/display-pipeline.ts` keeps this
|
|
15
16
|
* inlined on purpose — it runs ~262k times per tile. */
|
|
16
17
|
export declare function maxRgb(r: number, g: number, b: number): number;
|
|
17
18
|
/** Wrap 256 raw bin counts as an IHistogram (0..255 left edges + max). */
|
|
18
19
|
export declare function histogram256(counts: number[]): IHistogram;
|
|
20
|
+
/**
|
|
21
|
+
* Saturation-based auto-window: pick `[min, max]` so about `saturation` (0..0.5) of the
|
|
22
|
+
* pixels clip at each end of the histogram. A dominant first or last bin (unscanned
|
|
23
|
+
* padding, clipped background) is dropped first so it does not skew the range.
|
|
24
|
+
*
|
|
25
|
+
* Returns values from `h.bins` (native units for a native histogram), or `fallback` when
|
|
26
|
+
* the histogram is empty or holds no counts — each caller keeps its own: the 8-bit store
|
|
27
|
+
* falls back to the full byte range, the channel histogram to its slider bounds.
|
|
28
|
+
*/
|
|
29
|
+
export declare function autoWindowFromHistogram(h: IHistogram, saturation: number, fallback: readonly [number, number]): [number, number];
|
|
@@ -79,7 +79,7 @@ export interface PlotTypeDescriptor {
|
|
|
79
79
|
* mode owns each name — so it drops the backend suffix (e.g. just "Surface").
|
|
80
80
|
* A type WITHOUT a `productionLabel` is **test-only**: hidden from the default
|
|
81
81
|
* selector and shown only when the host enables test mode. This is the single
|
|
82
|
-
* knob that curates the default plot-mode list
|
|
82
|
+
* knob that curates the default plot-mode list.
|
|
83
83
|
*/
|
|
84
84
|
productionLabel?: string;
|
|
85
85
|
/**
|
|
@@ -116,7 +116,9 @@ export interface PlotTypeDescriptor {
|
|
|
116
116
|
* for future use). Hence the `Partial` record.
|
|
117
117
|
*/
|
|
118
118
|
export declare const PLOT_TYPE_DESCRIPTORS: Partial<Record<PlotType, PlotTypeDescriptor>>;
|
|
119
|
+
/** The built-in descriptor (label, icon, dimensions, data source) of a plot type, if any. */
|
|
119
120
|
export declare function getPlotTypeDescriptor(type: PlotType): PlotTypeDescriptor | undefined;
|
|
121
|
+
/** Whether a built-in plot type renders in 3D (its descriptor says `dimensions: '3d'`). */
|
|
120
122
|
export declare function isThreeDimensional(type: PlotType): boolean;
|
|
121
123
|
/** napari-js volume. */
|
|
122
124
|
export declare function isNapariVolume(type: PlotType): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { IImageInfo } from '../image.contract';
|
|
4
|
+
import type { VisualizerHandle } from '../visualizer.contract';
|
|
4
5
|
/**
|
|
5
6
|
* Host image/loading/zoom state, inverted as a port so the visualization library
|
|
6
7
|
* doesn't import the app's `MainState`/`MainFacade`. The host supplies an adapter
|
|
@@ -23,7 +24,10 @@ export interface ImageStatePort {
|
|
|
23
24
|
setZoom(zoom: boolean): void;
|
|
24
25
|
setImageCached(cached: boolean): void;
|
|
25
26
|
setLoadingError(error: boolean): void;
|
|
26
|
-
/** Register the
|
|
27
|
-
setDiagram(diagram:
|
|
27
|
+
/** Register the mounted visualizer with the host, or `null` once it is destroyed. */
|
|
28
|
+
setDiagram(diagram: VisualizerHandle | null): void;
|
|
28
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* DI token for the host's {@link ImageStatePort}. Required: the visualizer component injects it.
|
|
32
|
+
*/
|
|
29
33
|
export declare const IMAGE_STATE_PORT: InjectionToken<ImageStatePort>;
|
|
@@ -16,4 +16,8 @@ export interface PreferencesPort {
|
|
|
16
16
|
/** Persist (upsert) the current user's preset set. */
|
|
17
17
|
savePresetSet(set: PresetSet): Observable<void>;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* DI token for the host's {@link PreferencesPort}. Optional: without it, the annotation-class
|
|
21
|
+
* preset set is not persisted.
|
|
22
|
+
*/
|
|
19
23
|
export declare const PREFERENCES_PORT: InjectionToken<PreferencesPort>;
|
|
@@ -145,15 +145,9 @@ export interface SpatialDataPort {
|
|
|
145
145
|
* mode should never pay for it.
|
|
146
146
|
*/
|
|
147
147
|
getVolume?(): Promise<Uint8Array>;
|
|
148
|
-
/**
|
|
149
|
-
* Server-side "which observations fall inside this polygon", for datasets
|
|
150
|
-
* too large to hit-test client-side. Optional: without it the library
|
|
151
|
-
* point-in-polygons the resident coordinates itself, which is fine into the
|
|
152
|
-
* 10^5 range. Coordinates are in the same space as the observations.
|
|
153
|
-
*/
|
|
154
|
-
queryRoi?(polygon: {
|
|
155
|
-
x: number[];
|
|
156
|
-
y: number[];
|
|
157
|
-
}): Promise<Uint32Array>;
|
|
158
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* DI token for the host's {@link SpatialDataPort}. Optional: a host that serves no
|
|
151
|
+
* spatial-omics data binds nothing, and the spatial plot types stay hidden.
|
|
152
|
+
*/
|
|
159
153
|
export declare const SPATIAL_DATA_PORT: InjectionToken<SpatialDataPort>;
|
|
@@ -24,4 +24,5 @@ export interface TileAccessPort {
|
|
|
24
24
|
* host supplies them). Hides the app's Auth0 dependency from the library. */
|
|
25
25
|
getAuthHeaders(): Promise<Record<string, string>>;
|
|
26
26
|
}
|
|
27
|
+
/** DI token for the host's {@link TileAccessPort}. Required by the OpenSeadragon backend. */
|
|
27
28
|
export declare const TILE_ACCESS_PORT: InjectionToken<TileAccessPort>;
|
|
@@ -3,6 +3,9 @@ import { Observable } from 'rxjs';
|
|
|
3
3
|
import { Region } from '../models/region';
|
|
4
4
|
import { ClassPreset, PresetSet } from '../models/class-preset';
|
|
5
5
|
import { IImageMetadata } from './image.contract';
|
|
6
|
+
import type { RegionSourceView } from '../region-source/region-source';
|
|
7
|
+
import type { RegionIndexPage, RegionIndexQuery } from '../region-source/region-tiles';
|
|
8
|
+
import type { RegionStyle } from '../region-overlay/region-style';
|
|
6
9
|
/**
|
|
7
10
|
* Public, implementation-agnostic surface that the Region Editor (an *external*
|
|
8
11
|
* consumer of the visualization package) depends on. It deals only in
|
|
@@ -30,7 +33,7 @@ export interface IRegionEditorApi {
|
|
|
30
33
|
* preserved (the editor must not be able to drop them). */
|
|
31
34
|
setAnnotationRegions(regions: Region[], showRegionLabel?: boolean, isRegionSaveOn?: boolean, fillColor?: string): void;
|
|
32
35
|
/** Change signal — fires whenever regions change on any backend. */
|
|
33
|
-
getRegionUpdateEvent(): Observable<
|
|
36
|
+
getRegionUpdateEvent(): Observable<Region[]>;
|
|
34
37
|
/** The currently-selected annotation regions (profile lines never appear). */
|
|
35
38
|
getSelectedRegions$(): Observable<Region[]>;
|
|
36
39
|
/** Set the selection to these regions. */
|
|
@@ -78,6 +81,87 @@ export interface IRegionEditorApi {
|
|
|
78
81
|
width: number;
|
|
79
82
|
height: number;
|
|
80
83
|
} | null;
|
|
84
|
+
/**
|
|
85
|
+
* Load `geoJsonStr` as the slice's region source when it is large enough
|
|
86
|
+
* (`VizConfig.regionSourceMinChars`): resolves true once it is open, false when it is small
|
|
87
|
+
* and should be imported as regions; rejects when it is not a GeoJSON FeatureCollection.
|
|
88
|
+
*/
|
|
89
|
+
importRegionSource?(geoJsonStr: string): Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* Drop the slice's region source, for regions imported in its place (a small file replacing a
|
|
92
|
+
* large one). The other slices keep theirs.
|
|
93
|
+
*/
|
|
94
|
+
dropRegionSource?(): Promise<void>;
|
|
95
|
+
/** The slice's region source (null without one) and every change of it. */
|
|
96
|
+
getRegionSourceView$?(): Observable<RegionSourceView | null>;
|
|
97
|
+
/** A page of the slice source's features that were not taken from it. */
|
|
98
|
+
getRegionSourceIndex?(query: Omit<RegionIndexQuery, 'exclude'>): Promise<RegionIndexPage>;
|
|
99
|
+
/** Take source features into the regions and select them (added with `additive`). */
|
|
100
|
+
selectSourceFeatures?(ids: readonly string[], additive?: boolean): Promise<number[]>;
|
|
101
|
+
/** Delete source features without taking them (one undo step). */
|
|
102
|
+
deleteSourceFeatures?(ids: readonly string[]): void;
|
|
103
|
+
/**
|
|
104
|
+
* Features per class still in the slice's region source (not taken); with `stack`, a z-stack's
|
|
105
|
+
* over every slice.
|
|
106
|
+
*/
|
|
107
|
+
getRegionSourceClassCounts?(stack?: boolean): Promise<Record<string, number>>;
|
|
108
|
+
/** The region look (outlines, or filled with labels inside) and every change of it. */
|
|
109
|
+
getRegionStyle$?(): Observable<RegionStyle>;
|
|
110
|
+
/** Choose the region look, field by field (overrides a region source's hint). */
|
|
111
|
+
setRegionStyle?(patch: Partial<RegionStyle>): void;
|
|
112
|
+
/** Whether a volume view is on screen (regions can then be shown in 3D). */
|
|
113
|
+
getVolumeView$?(): Observable<boolean>;
|
|
114
|
+
/**
|
|
115
|
+
* Whether the volume view's slice pane is wanted (one slice edited beside the 3D view). A volume
|
|
116
|
+
* view without it lists every slice's classes; with it, the slice's.
|
|
117
|
+
*/
|
|
118
|
+
getSliceEditor$?(): Observable<boolean>;
|
|
119
|
+
/** Whether the volume view draws the region reconstructions through the volume, and changes. */
|
|
120
|
+
getRegionsThroughVolume$?(): Observable<boolean>;
|
|
121
|
+
/**
|
|
122
|
+
* Draw the region reconstructions through the volume (it hides none: surfaces traced inside its
|
|
123
|
+
* bright structures) or hidden behind what it shows in front of them (the default).
|
|
124
|
+
*/
|
|
125
|
+
setRegionsThroughVolume?(through: boolean): void;
|
|
126
|
+
/**
|
|
127
|
+
* Show these groups of classes in the volume view as 3D reconstructions (one surface per group,
|
|
128
|
+
* in its colour), and only these; [] hides them.
|
|
129
|
+
*/
|
|
130
|
+
showRegionClasses3d?(groups: ReadonlyArray<{
|
|
131
|
+
key: string;
|
|
132
|
+
classes: readonly string[];
|
|
133
|
+
color: string;
|
|
134
|
+
label?: string;
|
|
135
|
+
}>): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Each class's volume over the whole stack, in px² × slices: its outlines' area on every slice,
|
|
138
|
+
* one slice thick. Times the pixel size and the slice spacing, µm³.
|
|
139
|
+
*/
|
|
140
|
+
getClassVolumes?(classes: readonly string[]): Promise<Record<string, number>>;
|
|
141
|
+
/** Highlight the surfaces of these group keys in the volume view (none: all as usual). */
|
|
142
|
+
highlightRegionClasses3d?(keys: readonly string[]): void;
|
|
143
|
+
/** A surface clicked in the volume view with the selection tool (its group key), or none (null). */
|
|
144
|
+
getRegionPicked3d$?(): Observable<{
|
|
145
|
+
key: string | null;
|
|
146
|
+
additive: boolean;
|
|
147
|
+
}>;
|
|
148
|
+
/** The class groups shown in 3D on the image on screen; emits [] when another image is plotted. */
|
|
149
|
+
getRegionClasses3d$?(): Observable<ReadonlyArray<{
|
|
150
|
+
key: string;
|
|
151
|
+
classes: readonly string[];
|
|
152
|
+
}>>;
|
|
153
|
+
/** The classes hidden from view, and every change of them. */
|
|
154
|
+
getHiddenClasses$?(): Observable<ReadonlySet<string>>;
|
|
155
|
+
/**
|
|
156
|
+
* Hide (or show again) these classes: their regions and the region source's features are not
|
|
157
|
+
* drawn or picked, and their surfaces in the volume view are hidden.
|
|
158
|
+
*/
|
|
159
|
+
setClassesHidden?(classes: readonly string[], hidden: boolean): void;
|
|
160
|
+
/** Select every region of these classes on the slice, the source's included (taken). */
|
|
161
|
+
selectRegionClasses?(classes: readonly string[], additive?: boolean): Promise<void>;
|
|
162
|
+
/** {@link getGeoJsonString} merged with the region source behind the regions (see
|
|
163
|
+
* `RegionStore.getGeoJsonWithSource`); `slice` names a folder stack's slice. */
|
|
164
|
+
getGeoJsonStringWithSource?(regions: Region[], slice?: number): Promise<string>;
|
|
81
165
|
}
|
|
82
166
|
/** DI token the Region Editor injects instead of the concrete service. */
|
|
83
167
|
export declare const REGION_EDITOR_API: InjectionToken<IRegionEditorApi>;
|
|
@@ -31,6 +31,11 @@
|
|
|
31
31
|
* - `move` — drag the selected region body to translate it.
|
|
32
32
|
*/
|
|
33
33
|
export type RegionToolMode = 'none' | 'select' | 'drawrect' | 'drawclosedpath' | 'drawopenpath' | 'drawpolygon' | 'addpoint' | 'deletepoint' | 'move';
|
|
34
|
+
/**
|
|
35
|
+
* A backend's on-canvas region layer: draws the shared `RegionStore`'s regions
|
|
36
|
+
* over the image and runs the draw / select / vertex-edit interactions. Obtained
|
|
37
|
+
* from `IVisualizer.getRegionOverlay()`.
|
|
38
|
+
*/
|
|
34
39
|
export interface IRegionOverlay {
|
|
35
40
|
/** Set the active draw/select interaction (or 'none' to just display). */
|
|
36
41
|
setMode(mode: RegionToolMode): void;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { Rectangle, Polygon, MultiPolygon } from '../models/region';
|
|
2
2
|
import { Region } from '../models/region';
|
|
3
|
+
import type { Observable } from 'rxjs';
|
|
4
|
+
import type { RegionSourceView } from '../region-source/region-source';
|
|
5
|
+
import type { RegionStyle } from '../region-overlay/region-style';
|
|
3
6
|
/**
|
|
4
7
|
* Region-native editing surface — typed geometry operations on the neutral
|
|
5
8
|
* {@link Region} model. The OpenSeadragon overlay (and any future editing UI)
|
|
@@ -72,3 +75,22 @@ export interface IRegionEditApi {
|
|
|
72
75
|
beginBatch(): void;
|
|
73
76
|
endBatch(): void;
|
|
74
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* The region-source side of the store, as the overlays use it: a large region set held as a
|
|
80
|
+
* tiled source (see `RegionStore.attachRegionSource`) that the overlays draw at the zoom's level
|
|
81
|
+
* of detail and pick from. Optional on the overlays' store: a store without it simply has no
|
|
82
|
+
* source to draw.
|
|
83
|
+
*/
|
|
84
|
+
export interface IRegionSourceApi {
|
|
85
|
+
/** The current slice's source as a layer draws it, and every change of it; null without one. */
|
|
86
|
+
getRegionSourceView$(): Observable<RegionSourceView | null>;
|
|
87
|
+
/** Take source features into the working set as regions and select them (added to the
|
|
88
|
+
* selection with `additive`). Resolves the region ids. */
|
|
89
|
+
selectSourceFeatures(ids: readonly string[], additive?: boolean): Promise<number[]>;
|
|
90
|
+
/** The region look (outlines, or filled with inside labels). */
|
|
91
|
+
getRegionStyle(): RegionStyle;
|
|
92
|
+
/** Whether a class's label is left out because a subclass of it is drawn too. */
|
|
93
|
+
isLabelCovered(label: string | undefined): boolean;
|
|
94
|
+
/** Whether regions labelled `label` are hidden: not drawn, not picked. */
|
|
95
|
+
isClassHidden(label: string | null | undefined): boolean;
|
|
96
|
+
}
|
|
@@ -18,6 +18,13 @@ export interface SamModelDef {
|
|
|
18
18
|
encoderUrl: string;
|
|
19
19
|
/** Decoder ONNX URL (embedding + prompts → mask). Empty until hosted. */
|
|
20
20
|
decoderUrl: string;
|
|
21
|
+
/**
|
|
22
|
+
* Revision of the hosted ONNX files. Downloaded models are cached by URL AND revision,
|
|
23
|
+
* and hosted URLs are typically mutable (`.../resolve/main/...`), so bump this when the
|
|
24
|
+
* files are re-exported under the same URLs: browsers then fetch the new files once and
|
|
25
|
+
* drop their older copies. Absent means the URL alone is the cache key.
|
|
26
|
+
*/
|
|
27
|
+
revision?: string;
|
|
21
28
|
/** Decoder I/O family — SAM v1 vs v2/v3 differ in mask output size + names. */
|
|
22
29
|
variant: 'sam1' | 'sam2' | 'sam3';
|
|
23
30
|
/** Encoder input side length (1024 for SAM v1). */
|