@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
|
@@ -13,7 +13,12 @@ import { SamModelDef } from '../../contracts/sam.contract';
|
|
|
13
13
|
* cellpose default). A host can repoint them at its own hosting (e.g. a GCS
|
|
14
14
|
* bucket) at runtime via {@link setSamModelUrls}; an empty URL disables a model
|
|
15
15
|
* (the session throws a clear "not configured" error). Export/quantization
|
|
16
|
-
* tooling: the sibling `browser-onnx-tools` project; see
|
|
16
|
+
* tooling: the sibling `browser-onnx-tools` project; see
|
|
17
|
+
* docs/design/sam-segmentation-design.md.
|
|
18
|
+
*
|
|
19
|
+
* Downloads are cached in the browser by URL and `revision`: when a model's files are
|
|
20
|
+
* re-exported under the same URLs, set (or bump) its `revision` so browsers fetch the
|
|
21
|
+
* new files instead of serving the old ones from cache.
|
|
17
22
|
*/
|
|
18
23
|
export declare const SAM_MODELS: SamModelDef[];
|
|
19
24
|
/** Initial default model id (overridden at runtime once the host configures a
|
|
@@ -31,6 +36,7 @@ export declare function isSamModelReady(model: SamModelDef): boolean;
|
|
|
31
36
|
/**
|
|
32
37
|
* Point a registered model at its hosted ONNX pair (HF / GCS). Called by the
|
|
33
38
|
* host's composition root once hosting is decided, keeping deployment URLs out
|
|
34
|
-
* of the library.
|
|
39
|
+
* of the library. Pass `revision` when the files at those URLs can be replaced in
|
|
40
|
+
* place, and change it whenever they are (see {@link SamModelDef.revision}).
|
|
35
41
|
*/
|
|
36
|
-
export declare function setSamModelUrls(id: string, encoderUrl: string, decoderUrl: string): void;
|
|
42
|
+
export declare function setSamModelUrls(id: string, encoderUrl: string, decoderUrl: string, revision?: string): void;
|
|
@@ -4,11 +4,18 @@ import type { SamPrompt } from '../../contracts/sam.contract';
|
|
|
4
4
|
* Shared, DOM-free SAM inference primitives used by BOTH inference backends:
|
|
5
5
|
* the in-process session (`OnnxSamSession`, main thread) and the dedicated
|
|
6
6
|
* Web Worker (`onnx-sam.worker`). Keeping these here avoids duplicating the
|
|
7
|
-
* preprocessing / decoder-prompt math
|
|
8
|
-
*
|
|
7
|
+
* preprocessing / decoder-prompt math; nothing here may import Angular or the
|
|
8
|
+
* DOM, since the worker bundles it.
|
|
9
9
|
*/
|
|
10
|
+
/** SAM's per-channel (RGB) pixel mean, subtracted before the encoder. */
|
|
10
11
|
export declare const PIXEL_MEAN: number[];
|
|
12
|
+
/** SAM's per-channel (RGB) pixel standard deviation, divided out before the encoder. */
|
|
11
13
|
export declare const PIXEL_STD: number[];
|
|
14
|
+
/**
|
|
15
|
+
* Delete every downloaded SAM model (several hundred MB per origin). Resolves
|
|
16
|
+
* to true when something was removed; false where the Cache API is unavailable.
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearSamModelCache(): Promise<boolean>;
|
|
12
19
|
/** Encoder output for one image, reused across prompts. */
|
|
13
20
|
export interface CoreEmbedding {
|
|
14
21
|
data: Float32Array;
|
|
@@ -24,10 +31,16 @@ export interface CoreMask {
|
|
|
24
31
|
height: number;
|
|
25
32
|
iou: number;
|
|
26
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* The Cache API key a model file is stored under: its URL, plus the model's
|
|
36
|
+
* `SamModelDef.revision` as a query parameter when it has one, so a bumped revision
|
|
37
|
+
* misses the cache and downloads the re-exported file.
|
|
38
|
+
*/
|
|
39
|
+
export declare function modelCacheKey(url: string, revision?: string): string;
|
|
27
40
|
/** Fetch a model as an ArrayBuffer, streaming progress and caching in the Cache
|
|
28
|
-
* API (so it isn't re-downloaded). Cache hit → progress
|
|
29
|
-
* the main thread and in a worker (both have `fetch` + `caches`). */
|
|
30
|
-
export declare function fetchModel(url: string, onProgress?: (f: number) => void): Promise<ArrayBuffer>;
|
|
41
|
+
* API (so it isn't re-downloaded) under {@link modelCacheKey}. Cache hit → progress
|
|
42
|
+
* jumps to 1. Works on the main thread and in a worker (both have `fetch` + `caches`). */
|
|
43
|
+
export declare function fetchModel(url: string, onProgress?: (f: number) => void, revision?: string): Promise<ArrayBuffer>;
|
|
31
44
|
/** Resize (long side → size, bilinear), pad to size×size, SAM-normalize → CHW float32. */
|
|
32
45
|
export declare function preprocess(data: Uint8ClampedArray, width: number, height: number, size: number, scale: number): Float32Array;
|
|
33
46
|
/** Assemble decoder `point_coords`/`point_labels` from a prompt, in encoder
|
|
@@ -1,8 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { WandService } from '../wand/wand.service';
|
|
3
|
-
import { WandToolHost } from '../wand/wand-tool.service';
|
|
1
|
+
import { SamSessionService } from './sam-session.service';
|
|
4
2
|
import { ISamSession } from '../../contracts/sam.contract';
|
|
3
|
+
import { AsyncToolStatus } from '../tool-kit/async-tool-status';
|
|
4
|
+
import { CanvasToolHost, ICanvasTool } from '../tool-kit/canvas-tool';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* The SAM point prompts of one viewer chain: the status feeds the toolbar shows
|
|
8
|
+
* and the model session. Every backend's `CanvasToolManager` gets its own
|
|
9
|
+
* {@link SamPointTool} from {@link createTool}, so in-progress points never
|
|
10
|
+
* cross backends, while all of them report through these feeds and share one
|
|
11
|
+
* busy guard and one {@link SamSessionService}.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SamPointToolService {
|
|
14
|
+
private readonly sessions;
|
|
15
|
+
private readonly state;
|
|
16
|
+
readonly status$: import("rxjs").BehaviorSubject<string>;
|
|
17
|
+
readonly busy$: import("rxjs").BehaviorSubject<boolean>;
|
|
18
|
+
/** Encoder-download progress (0..1) on the first click; -1 when not downloading. */
|
|
19
|
+
readonly progress$: import("rxjs").BehaviorSubject<number>;
|
|
20
|
+
constructor(sessions?: SamSessionService);
|
|
21
|
+
/** Choose the registered model to use (shared with the box tool). */
|
|
22
|
+
setModel(id: string): void;
|
|
23
|
+
/** Test seam: inject a fake/alternate session. */
|
|
24
|
+
useSession(session: ISamSession): void;
|
|
25
|
+
/** A point tool for one backend, reporting through this service. */
|
|
26
|
+
createTool(): SamPointTool;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SamPointToolService, never>;
|
|
28
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SamPointToolService>;
|
|
29
|
+
}
|
|
6
30
|
/** Interactive SAM point-prompt tool (jit-ui#90, P1).
|
|
7
31
|
*
|
|
8
32
|
* Each plain (positive) click segments the clicked object as its OWN new region
|
|
@@ -11,36 +35,28 @@ import * as i0 from "@angular/core";
|
|
|
11
35
|
* the decoder against the (cached) image embedding and updating its live region.
|
|
12
36
|
* `commit()` (Enter) finalises early; `clear()` (Esc) discards the current
|
|
13
37
|
* prompt + its preview region. Mirrors the wand/brush on-canvas tool pattern and
|
|
14
|
-
* reuses
|
|
38
|
+
* reuses the contour tracer + the shared region store.
|
|
15
39
|
*
|
|
16
|
-
* Inference
|
|
17
|
-
* a fake in
|
|
40
|
+
* Inference goes through the shared {@link SamSessionService} (one session and
|
|
41
|
+
* embedding for both SAM tools; lazy onnxruntime-web in production, a fake in
|
|
42
|
+
* tests). Created by {@link SamPointToolService.createTool}.
|
|
18
43
|
*/
|
|
19
|
-
export declare class
|
|
20
|
-
private
|
|
44
|
+
export declare class SamPointTool implements ICanvasTool<void> {
|
|
45
|
+
private readonly state;
|
|
46
|
+
private readonly sessions;
|
|
47
|
+
readonly id = "samPoint";
|
|
21
48
|
private host;
|
|
22
|
-
private overlay;
|
|
23
|
-
private session;
|
|
24
|
-
/** In-flight session load — dedupes a warm-up preload against the first click. */
|
|
25
|
-
private sessionLoad;
|
|
26
|
-
private model;
|
|
27
|
-
private embedding;
|
|
28
|
-
private embeddingKey;
|
|
49
|
+
private readonly overlay;
|
|
29
50
|
/** Accumulated point prompts, in image (matrix) coords. */
|
|
30
51
|
private points;
|
|
31
52
|
/** Id of the in-progress (preview) region being refined, if committed to store. */
|
|
32
53
|
private regionId;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
bindHost(host: WandToolHost): void;
|
|
40
|
-
setModel(id: string): void;
|
|
41
|
-
/** Test seam: inject a fake/alternate session. */
|
|
42
|
-
useSession(session: ISamSession): void;
|
|
43
|
-
setMode(active: boolean): void;
|
|
54
|
+
constructor(state: AsyncToolStatus, sessions: SamSessionService);
|
|
55
|
+
private get status$();
|
|
56
|
+
activate(host: CanvasToolHost): void;
|
|
57
|
+
deactivate(): void;
|
|
58
|
+
/** Forget the current prompt (its preview region stays). */
|
|
59
|
+
reset(): void;
|
|
44
60
|
/** Eagerly load the model in the background (fire-and-forget). Safe to call
|
|
45
61
|
* repeatedly — it dedupes against an in-flight load and an existing session. */
|
|
46
62
|
preload(): void;
|
|
@@ -49,11 +65,9 @@ export declare class SamPointToolService {
|
|
|
49
65
|
/** Discard the in-progress prompt + its preview region. */
|
|
50
66
|
clear(): void;
|
|
51
67
|
private createOverlay;
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
/** Replace (or insert) the in-progress preview region in the shared store
|
|
68
|
+
/** Primary button only (the overlay filters the others). */
|
|
69
|
+
private onPointerDown;
|
|
70
|
+
/** Replace (or insert) the in-progress preview region in the shared store,
|
|
71
|
+
* against the regions as they are now (the run may have taken a while). */
|
|
55
72
|
private upsertPreview;
|
|
56
|
-
private ensureSession;
|
|
57
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SamPointToolService, never>;
|
|
58
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<SamPointToolService>;
|
|
59
73
|
}
|
|
@@ -1,34 +1,10 @@
|
|
|
1
|
-
import { CachedImageData } from '../wand/wand-tool.service';
|
|
2
|
-
import { SamPrompt } from '../../contracts/sam.contract';
|
|
1
|
+
import type { CachedImageData } from '../wand/wand-tool.service';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Build an RGBA buffer (the encoder's input image) from a cached image frame.
|
|
10
|
-
* Grayscale frames are replicated across R/G/B; RGB tuples are copied through.
|
|
11
|
-
* Out-of-range/missing pixels become opaque black.
|
|
12
|
-
*/
|
|
13
|
-
export declare function frameToRgba(cached: CachedImageData, frameIndex: number): Uint8ClampedArray;
|
|
14
|
-
/**
|
|
15
|
-
* Assemble the SAM decoder's `point_coords` / `point_labels` from a prompt.
|
|
3
|
+
* Build an RGBA buffer (the SAM encoder's input image) from a cached image
|
|
4
|
+
* frame: the full-frame case of {@link frameRegionToRgba}. Grayscale frames are
|
|
5
|
+
* replicated across R/G/B; missing pixels become opaque black.
|
|
16
6
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* `2` (top-left) and `3` (bottom-right); positive/negative points use `1`/`0`.
|
|
20
|
-
* When there are points but no box, a padding point `[0,0]` labelled `-1` is
|
|
21
|
-
* appended (the decoder expects the box slots padded when absent).
|
|
22
|
-
*/
|
|
23
|
-
export declare function buildDecoderPrompt(prompt: SamPrompt, scale: number): {
|
|
24
|
-
pointCoords: Float32Array;
|
|
25
|
-
pointLabels: Float32Array;
|
|
26
|
-
numPoints: number;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Binarize SAM mask logits (`> threshold`, default 0 per SAM's mask_threshold)
|
|
30
|
-
* into a 0/1 mask the contour tracer (WandService.maskToPolygons) consumes.
|
|
7
|
+
* The decoder-prompt helpers (`buildDecoderPrompt`, `binarizeMask`,
|
|
8
|
+
* `bestMaskIndex`) live in `sam-onnx-core`, which both inference paths use.
|
|
31
9
|
*/
|
|
32
|
-
export declare function
|
|
33
|
-
/** Index of the highest-scoring mask in a multimask decoder output. */
|
|
34
|
-
export declare function bestMaskIndex(iouPredictions: Float32Array | number[]): number;
|
|
10
|
+
export declare function frameToRgba(cached: CachedImageData, frameIndex: number): Uint8ClampedArray;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import type { CachedImageData } from '../wand/wand-tool.service';
|
|
3
|
+
import { ISamSession, SamEmbedding, SamModelDef } from '../../contracts/sam.contract';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/** Creates an unloaded inference session. */
|
|
6
|
+
export type SamSessionFactory = () => Promise<ISamSession>;
|
|
7
|
+
/**
|
|
8
|
+
* The one SAM inference session for the active model, shared by the box- and
|
|
9
|
+
* point-prompt tools (RT-10): one download, one Worker/GPU session and one
|
|
10
|
+
* cached image embedding instead of one per tool.
|
|
11
|
+
*
|
|
12
|
+
* - Concurrent {@link ensureSession} calls share a single load, and each caller
|
|
13
|
+
* receives its download progress.
|
|
14
|
+
* - A load that fails disposes its half-built session (and Worker) and is not
|
|
15
|
+
* cached; the next call retries (RT-7).
|
|
16
|
+
* - {@link setModel} during a load discards that load's session, and the
|
|
17
|
+
* waiting callers get the newly picked model instead (RT-9).
|
|
18
|
+
*
|
|
19
|
+
* Scope: root, on purpose, and deliberately NOT in `provideVisualization()`. The
|
|
20
|
+
* chain-scoped SAM tools of a second viewer (jit-ui's pipeline preview) resolve
|
|
21
|
+
* this root instance, so the model (14–172 MB) is downloaded and its Worker/GPU
|
|
22
|
+
* session built once per app, not once per viewer, and the embedding cache is
|
|
23
|
+
* keyed by image + model so viewers don't confuse each other's images. The cost
|
|
24
|
+
* is that a model picked in one viewer is the model of all of them. A host that
|
|
25
|
+
* wants a session per viewer can provide this service at the viewer's component:
|
|
26
|
+
* {@link ngOnDestroy} then disposes that viewer's session (and Worker) with it.
|
|
27
|
+
*/
|
|
28
|
+
export declare class SamSessionService implements OnDestroy {
|
|
29
|
+
private model;
|
|
30
|
+
private session;
|
|
31
|
+
private loading;
|
|
32
|
+
/** Bumped on every model switch; a load started under an older value is stale. */
|
|
33
|
+
private generation;
|
|
34
|
+
private readonly progressListeners;
|
|
35
|
+
private createSession;
|
|
36
|
+
/** Set by {@link ngOnDestroy}: no session is loaded any more. */
|
|
37
|
+
private destroyed;
|
|
38
|
+
/** Cached encoder embedding + the key (image identity + model) it was computed for. */
|
|
39
|
+
private embedding;
|
|
40
|
+
private embeddingKey;
|
|
41
|
+
/** The model the next run uses. */
|
|
42
|
+
getModel(): SamModelDef;
|
|
43
|
+
/** True when a session is loaded (or injected) for the current model. */
|
|
44
|
+
hasSession(): boolean;
|
|
45
|
+
/** Choose the registered model; drops the loaded session and cached embedding. */
|
|
46
|
+
setModel(id: string): void;
|
|
47
|
+
/** Drop the cached embedding (e.g. after the image/slice changes). */
|
|
48
|
+
invalidateEmbedding(): void;
|
|
49
|
+
/** Test seam: use this session (already loaded) for the current model. */
|
|
50
|
+
useSession(session: ISamSession): void;
|
|
51
|
+
/** Test seam: how sessions are created (default: lazy onnxruntime-web). */
|
|
52
|
+
useSessionFactory(factory: SamSessionFactory): void;
|
|
53
|
+
/**
|
|
54
|
+
* The loaded session for the current model, loading it if needed.
|
|
55
|
+
* `onProgress` receives the download fraction while this call waits.
|
|
56
|
+
*/
|
|
57
|
+
ensureSession(onProgress?: (fraction: number) => void): Promise<ISamSession>;
|
|
58
|
+
/**
|
|
59
|
+
* The encoder embedding of a cached frame, reused while `key` (the image's
|
|
60
|
+
* identity: file, frame, readback frame) and the model are unchanged.
|
|
61
|
+
* `onEncode` is called only when the encoder actually runs.
|
|
62
|
+
*/
|
|
63
|
+
embed(session: ISamSession, cached: CachedImageData, frameIndex: number, key: string, onEncode?: () => void): Promise<SamEmbedding>;
|
|
64
|
+
/**
|
|
65
|
+
* Dispose the session (and its Worker), drop the embedding and discard an
|
|
66
|
+
* in-flight load. Angular calls this when the injector providing the service
|
|
67
|
+
* is destroyed: the app for the root instance, or a viewer component that
|
|
68
|
+
* provides its own.
|
|
69
|
+
*/
|
|
70
|
+
ngOnDestroy(): void;
|
|
71
|
+
private load;
|
|
72
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SamSessionService, never>;
|
|
73
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SamSessionService>;
|
|
74
|
+
}
|
|
@@ -1,50 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { WandToolHost } from '../wand/wand-tool.service';
|
|
1
|
+
import { CanvasToolHost } from '../tool-kit/canvas-tool';
|
|
2
|
+
import { SamSessionService } from './sam-session.service';
|
|
4
3
|
import { ISamSession } from '../../contracts/sam.contract';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
|
-
/** The SAM tool
|
|
7
|
-
*
|
|
8
|
-
export type SamToolHost =
|
|
5
|
+
/** @deprecated The SAM tool runs against the backend's canvas-tool host:
|
|
6
|
+
* use {@link CanvasToolHost}. */
|
|
7
|
+
export type SamToolHost = CanvasToolHost;
|
|
9
8
|
/**
|
|
10
9
|
* Box-prompted SAM segmentation tool (jit-ui#90, P0). On `segmentBoxes()` it
|
|
11
10
|
* reads every rectangle region, runs the (cached) encoder once for the image,
|
|
12
|
-
* then runs the decoder per box, traces each mask to a polygon
|
|
13
|
-
*
|
|
11
|
+
* then runs the decoder per box, traces each mask to a polygon and replaces
|
|
12
|
+
* the prompt rectangles with the masks.
|
|
14
13
|
*
|
|
15
|
-
* Inference
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* Inference goes through the shared {@link SamSessionService} (one session and
|
|
15
|
+
* embedding for both SAM tools); tests inject a fake session via
|
|
16
|
+
* {@link useSession}.
|
|
18
17
|
*/
|
|
19
18
|
export declare class SamToolService {
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
private session;
|
|
23
|
-
private model;
|
|
24
|
-
/** Cached encoder embedding + the key (image identity) it was computed for. */
|
|
25
|
-
private embedding;
|
|
26
|
-
private embeddingKey;
|
|
19
|
+
private readonly sessions;
|
|
20
|
+
private readonly state;
|
|
27
21
|
/** Status text + busy flag for a spinner / toast in the host. */
|
|
28
|
-
readonly status$: BehaviorSubject<string>;
|
|
29
|
-
readonly busy$: BehaviorSubject<boolean>;
|
|
22
|
+
readonly status$: import("rxjs").BehaviorSubject<string>;
|
|
23
|
+
readonly busy$: import("rxjs").BehaviorSubject<boolean>;
|
|
30
24
|
/** Encoder-download progress: -1 = not downloading, 0..1 = downloading. */
|
|
31
|
-
readonly progress$: BehaviorSubject<number>;
|
|
32
|
-
constructor(
|
|
33
|
-
/**
|
|
34
|
-
bindHost(host: SamToolHost): void;
|
|
35
|
-
/** Choose the registered model to use; invalidates any cached embedding. */
|
|
25
|
+
readonly progress$: import("rxjs").BehaviorSubject<number>;
|
|
26
|
+
constructor(sessions?: SamSessionService);
|
|
27
|
+
/** Choose the registered model to use (shared with the point tool). */
|
|
36
28
|
setModel(id: string): void;
|
|
37
29
|
/** Drop the cached embedding (e.g. after the image/slice changes). */
|
|
38
30
|
invalidateEmbedding(): void;
|
|
39
31
|
/** Test seam: inject a fake/alternate inference session. */
|
|
40
32
|
useSession(session: ISamSession): void;
|
|
41
33
|
/**
|
|
42
|
-
* Segment every rectangle region
|
|
43
|
-
*
|
|
34
|
+
* Segment every rectangle region of the backend behind `host` with a box
|
|
35
|
+
* prompt and replace each prompt that produced a mask with the mask's polygon
|
|
36
|
+
* region. Returns how many regions were added; 0 (ignored) while a previous
|
|
37
|
+
* run is still going. The host is passed per run, so no backend's host
|
|
38
|
+
* outlives its call.
|
|
44
39
|
*/
|
|
45
|
-
segmentBoxes(): Promise<number>;
|
|
46
|
-
private makeRegion;
|
|
47
|
-
private ensureSession;
|
|
40
|
+
segmentBoxes(host: CanvasToolHost): Promise<number>;
|
|
48
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<SamToolService, never>;
|
|
49
42
|
static ɵprov: i0.ɵɵInjectableDeclaration<SamToolService>;
|
|
50
43
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Region } from '../../models/region';
|
|
2
|
+
/**
|
|
3
|
+
* `regions` minus `remove`, matched by id (identity for a region without one).
|
|
4
|
+
* Async tools use it to drop their consumed prompts from the *current* region
|
|
5
|
+
* list at commit time, instead of overwriting the list they read before a long
|
|
6
|
+
* download or inference (RT-6).
|
|
7
|
+
*/
|
|
8
|
+
export declare function withoutRegions(regions: Region[], remove: Region[]): Region[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { MessageService } from 'primeng/api';
|
|
3
|
+
/** A segmentation tool's live feeds: status line and encoder-download progress (0..1, <0 = none).
|
|
4
|
+
* Observables, not subjects, so a contributed tool need not expose its internals. */
|
|
5
|
+
export interface SegmentationProgress {
|
|
6
|
+
status$: Observable<string>;
|
|
7
|
+
progress$: Observable<number>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* One viewer's segmentation runs and their sticky progress toast (jit-ui#90): the
|
|
11
|
+
* box-prompt SAM and Cellpose tools, contributed whole-view tools, and the
|
|
12
|
+
* interactive SAM point tool whose feeds it bridges.
|
|
13
|
+
*
|
|
14
|
+
* The toast is keyed per viewer (`toastKey`), so a run in a pipeline preview does not
|
|
15
|
+
* show in the main view; results and failures go to the viewer's `resultKey` outlet,
|
|
16
|
+
* which the sticky toast's teardown does not clear. The toast template binds
|
|
17
|
+
* {@link status}, {@link progress}, {@link downloading} and {@link busy}.
|
|
18
|
+
*/
|
|
19
|
+
export declare class SegmentationRunner {
|
|
20
|
+
private readonly messages;
|
|
21
|
+
readonly toastKey: string;
|
|
22
|
+
readonly resultKey: string;
|
|
23
|
+
/** Re-render the toast (its feeds may fire outside the zone). */
|
|
24
|
+
private readonly changed;
|
|
25
|
+
status: string;
|
|
26
|
+
/** Encoder download, 0..100. */
|
|
27
|
+
progress: number;
|
|
28
|
+
downloading: boolean;
|
|
29
|
+
/** Any segmentation work in flight (the indeterminate spinner). */
|
|
30
|
+
busy: boolean;
|
|
31
|
+
/** Whether the sticky toast is up — re-adding it would stack one per point click. */
|
|
32
|
+
private shown;
|
|
33
|
+
constructor(messages: Pick<MessageService, 'add' | 'clear'>, toastKey: string, resultKey: string,
|
|
34
|
+
/** Re-render the toast (its feeds may fire outside the zone). */
|
|
35
|
+
changed: () => void);
|
|
36
|
+
/** Surface the interactive SAM point tool's status and download progress, which runs
|
|
37
|
+
* inside the renderer on each click (the first click pulls the encoder). */
|
|
38
|
+
bindPointTool(tool: SegmentationProgress & {
|
|
39
|
+
busy$: Observable<boolean>;
|
|
40
|
+
}, until$: Observable<unknown>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Run `op` with the tool's status and download progress in the sticky toast, then
|
|
43
|
+
* report the outcome: the region count (or the tool's last status line) on success,
|
|
44
|
+
* the error on failure. The toast stays until the run settles.
|
|
45
|
+
*/
|
|
46
|
+
run(label: string, tool: SegmentationProgress, op: () => Promise<number>): Promise<void>;
|
|
47
|
+
/** Show the sticky toast once (idempotent). */
|
|
48
|
+
show(summary: string): void;
|
|
49
|
+
/** Dismiss the sticky toast and reset its progress/spinner state. */
|
|
50
|
+
hide(): void;
|
|
51
|
+
private onProgress;
|
|
52
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { MenuItem } from 'primeng/api';
|
|
3
|
+
import { ToolbarToolContribution } from '../../contracts/toolbar-tool.contract';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* The toolbar's segmentation group: SAM box prompt, SAM point prompts and the
|
|
7
|
+
* shared SAM model picker, cellpose, and the contributed no-prompt tools (run,
|
|
8
|
+
* pick checkpoint, parameters). Presentational: the host runs every action.
|
|
9
|
+
*/
|
|
10
|
+
export declare class SegmentationToolsComponent implements OnChanges {
|
|
11
|
+
/** The armed tool's mode (`samPoint` highlights the point-prompt button), or null. */
|
|
12
|
+
activeDragMode: string | null;
|
|
13
|
+
/** SAM model picker options + current selection (jit-ui#90 P1). */
|
|
14
|
+
samModels: {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
}[];
|
|
18
|
+
/** The selected SAM model id. */
|
|
19
|
+
samModelId: string;
|
|
20
|
+
/** Contributed no-prompt tools, already filtered and sorted by the host. */
|
|
21
|
+
contributedTools: ToolbarToolContribution[];
|
|
22
|
+
/** Active checkpoint per contributed tool, keyed by tool id. */
|
|
23
|
+
toolModelIds: Record<string, string>;
|
|
24
|
+
/** Run box-prompted SAM segmentation on the drawn rectangles (jit-ui#90). */
|
|
25
|
+
segmentRegions: EventEmitter<void>;
|
|
26
|
+
/** Run cellpose-SAM (auto) inside each drawn rectangle's crop (jit-ui#90). */
|
|
27
|
+
segmentCellpose: EventEmitter<void>;
|
|
28
|
+
/** The SAM point tool's toggle ('samPoint'). */
|
|
29
|
+
toggleDragMode: EventEmitter<string>;
|
|
30
|
+
/** A SAM model was picked from the model menu (its id). */
|
|
31
|
+
samModelChange: EventEmitter<string>;
|
|
32
|
+
/** Run a contributed tool over the current view (its id). */
|
|
33
|
+
runTool: EventEmitter<string>;
|
|
34
|
+
/** A contributed tool's checkpoint was picked. */
|
|
35
|
+
toolModelChange: EventEmitter<{
|
|
36
|
+
toolId: string;
|
|
37
|
+
modelId: string;
|
|
38
|
+
}>;
|
|
39
|
+
/** Open a contributed tool's parameter dialog (its id). */
|
|
40
|
+
openToolParams: EventEmitter<string>;
|
|
41
|
+
/** Model picker for the Segment button's dropdown menu. The active model
|
|
42
|
+
* (`samModelId`) is marked with a check; selecting an item emits
|
|
43
|
+
* `samModelChange` (jit-ui#90 P1).
|
|
44
|
+
*
|
|
45
|
+
* Held as a stable array (rebuilt only when `samModels`/`samModelId` change),
|
|
46
|
+
* NOT a getter: a getter returns a fresh array with new `command` closures on
|
|
47
|
+
* every change-detection tick, which makes the bound `p-menu` overlay rebuild
|
|
48
|
+
* its DOM mid-interaction and swallow the click on a menu item.
|
|
49
|
+
*
|
|
50
|
+
* `tooltip` carries the model's description from {@link MODEL_INFO}; the
|
|
51
|
+
* menus' shared item template turns it into the hover info icon. p-menu's own
|
|
52
|
+
* rendering ignores the field (it reads `item.title`), so it is free to use. */
|
|
53
|
+
protected samMenuItems: MenuItem[];
|
|
54
|
+
/**
|
|
55
|
+
* Model menus for the contributed tools, keyed by tool id. Same stable-array
|
|
56
|
+
* reasoning as {@link samMenuItems} — and it is why this is a map rebuilt in
|
|
57
|
+
* `ngOnChanges` rather than a method called from the template, which would
|
|
58
|
+
* hand `p-menu` a new array every tick.
|
|
59
|
+
*
|
|
60
|
+
* A contributed tool supplies its own per-model description, so unlike the
|
|
61
|
+
* SAM menu these do not consult {@link MODEL_INFO}: this library has no
|
|
62
|
+
* copy for checkpoints it does not know about.
|
|
63
|
+
*/
|
|
64
|
+
protected toolMenuItems: Record<string, MenuItem[]>;
|
|
65
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
66
|
+
/**
|
|
67
|
+
* Strip markup from a model description so it can be read aloud.
|
|
68
|
+
*
|
|
69
|
+
* The copy in MODEL_INFO and in a contribution's `ToolModelOption.info` is
|
|
70
|
+
* written for a visual tooltip rendered with `[escape]="false"`, so it carries
|
|
71
|
+
* `<b>` and `<br>`. Passed to `aria-label` verbatim a screen reader announces
|
|
72
|
+
* the tags, so they are removed and `<br>` becomes a sentence break. Entities
|
|
73
|
+
* used in that copy (` `, `×`, `&`) are decoded for the same
|
|
74
|
+
* reason.
|
|
75
|
+
*/
|
|
76
|
+
protected plainText(html: string): string;
|
|
77
|
+
/** The info button's `aria-label` (`infoLabel` on a menu item), built once with the
|
|
78
|
+
* menu rather than by a template call on every check; none without a description. */
|
|
79
|
+
private infoLabel;
|
|
80
|
+
/** Keeps each contributed tool's `p-menu` overlay alive across CD ticks —
|
|
81
|
+
* re-creating it mid-interaction swallows the click on a menu item. */
|
|
82
|
+
protected trackToolById(_index: number, tool: {
|
|
83
|
+
id: string;
|
|
84
|
+
}): string;
|
|
85
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SegmentationToolsComponent, never>;
|
|
86
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SegmentationToolsComponent, "toolbar-segmentation-tools", never, { "activeDragMode": { "alias": "activeDragMode"; "required": false; }; "samModels": { "alias": "samModels"; "required": false; }; "samModelId": { "alias": "samModelId"; "required": false; }; "contributedTools": { "alias": "contributedTools"; "required": false; }; "toolModelIds": { "alias": "toolModelIds"; "required": false; }; }, { "segmentRegions": "segmentRegions"; "segmentCellpose": "segmentCellpose"; "toggleDragMode": "toggleDragMode"; "samModelChange": "samModelChange"; "runTool": "runTool"; "toolModelChange": "toolModelChange"; "openToolParams": "openToolParams"; }, never, never, true, never>;
|
|
87
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** A stack-mode choice (`val` 'false' = single image, 'true' = stack). */
|
|
4
|
+
export interface StackOption {
|
|
5
|
+
name: string;
|
|
6
|
+
val: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The toolbar's z-stack group: the slice bar, and (Plotly heatmap) the single-image / stack
|
|
10
|
+
* toggle. The views that swap slices in place follow the bar as it moves; the heatmap's single
|
|
11
|
+
* image is re-plotted at the slice it settles on. Presentational: the host owns `zIndex`.
|
|
12
|
+
*/
|
|
13
|
+
export declare class StackControlsComponent implements OnDestroy {
|
|
14
|
+
/** Show the live slice scrubber. */
|
|
15
|
+
liveScrubber: boolean;
|
|
16
|
+
/** Show the single-image / stack toggle (Plotly heatmap). */
|
|
17
|
+
stackToggle: boolean;
|
|
18
|
+
/** Stack mode is on (the toggle's state). */
|
|
19
|
+
showStack: boolean;
|
|
20
|
+
/** The two stack-mode choices of the toggle. */
|
|
21
|
+
stackOptions: StackOption[];
|
|
22
|
+
/** The current slice (0-based). */
|
|
23
|
+
zIndex: number;
|
|
24
|
+
/** The last slice index. */
|
|
25
|
+
maxIndex: number;
|
|
26
|
+
/** The live scrubber moved (fires while dragging). */
|
|
27
|
+
zScrub: EventEmitter<number | undefined>;
|
|
28
|
+
/** The live scrubber was released on a slice. */
|
|
29
|
+
zSlide: EventEmitter<number | undefined>;
|
|
30
|
+
/** A stack-mode choice was picked. */
|
|
31
|
+
selectStackOption: EventEmitter<StackOption>;
|
|
32
|
+
/** The heatmap's slice bar moved to a slice (the host shows its number). */
|
|
33
|
+
zIndexInput: EventEmitter<number>;
|
|
34
|
+
/** The heatmap's slice bar settled: re-plot at that slice. */
|
|
35
|
+
reloadAndPlot: EventEmitter<void>;
|
|
36
|
+
/** How long key steps on the heatmap's bar pause before the slice is re-plotted. */
|
|
37
|
+
static readonly REPLOT_DELAY_MS = 400;
|
|
38
|
+
/** A drag of the bar is under way (its end re-plots the heatmap, not each step). */
|
|
39
|
+
protected dragging: boolean;
|
|
40
|
+
private replot;
|
|
41
|
+
/** The heatmap in single-image mode: its bar re-plots the slice it settles on. */
|
|
42
|
+
protected get singleImage(): boolean;
|
|
43
|
+
/** The bar moved: a live view follows it; the heatmap shows the number, and re-plots after key steps pause. */
|
|
44
|
+
protected onSliceChange(z: number | undefined): void;
|
|
45
|
+
/** The bar was let go (a drag's end, or a click on its track). */
|
|
46
|
+
protected onSliceEnd(z: number | undefined): void;
|
|
47
|
+
private cancelReplot;
|
|
48
|
+
ngOnDestroy(): void;
|
|
49
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StackControlsComponent, never>;
|
|
50
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StackControlsComponent, "toolbar-stack-controls", never, { "liveScrubber": { "alias": "liveScrubber"; "required": false; }; "stackToggle": { "alias": "stackToggle"; "required": false; }; "showStack": { "alias": "showStack"; "required": false; }; "stackOptions": { "alias": "stackOptions"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "maxIndex": { "alias": "maxIndex"; "required": false; }; }, { "zScrub": "zScrub"; "zSlide": "zSlide"; "selectStackOption": "selectStackOption"; "zIndexInput": "zIndexInput"; "reloadAndPlot": "reloadAndPlot"; }, never, never, true, never>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Status, busy flag and progress of a long-running (download / inference) tool,
|
|
4
|
+
* plus the re-entrancy guard that goes with them.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AsyncToolStatus {
|
|
7
|
+
/** Status text for a toast / spinner label. */
|
|
8
|
+
readonly status$: BehaviorSubject<string>;
|
|
9
|
+
/** True from the start of a run until it settles. */
|
|
10
|
+
readonly busy$: BehaviorSubject<boolean>;
|
|
11
|
+
/** Download progress: -1 = not downloading, 0..1 = downloading. */
|
|
12
|
+
readonly progress$: BehaviorSubject<number>;
|
|
13
|
+
get busy(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Run `job` unless a run is already in flight (then resolve `undefined` at
|
|
16
|
+
* once). Busy is set *before* the first await — a model download is exactly
|
|
17
|
+
* the window a second press must not start another run in — and busy and
|
|
18
|
+
* progress are reset however the job ends.
|
|
19
|
+
*/
|
|
20
|
+
run<T>(job: () => Promise<T>): Promise<T | undefined>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CanvasToolId } from '../../contracts/display-types';
|
|
2
|
+
import { CanvasToolHost, ICanvasTool } from './canvas-tool';
|
|
3
|
+
/**
|
|
4
|
+
* One backend's canvas tools. Each backend (Plotly, OpenSeadragon, napari-js)
|
|
5
|
+
* creates its own manager with its own {@link CanvasToolHost} and its own tool
|
|
6
|
+
* instances, so arming a tool never re-binds a tool another backend is using,
|
|
7
|
+
* and a backend switch never carries a stroke or SAM points across (RT-21).
|
|
8
|
+
* At most one tool is armed at a time.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CanvasToolManager {
|
|
11
|
+
private readonly host;
|
|
12
|
+
private readonly tools;
|
|
13
|
+
private active;
|
|
14
|
+
constructor(host: CanvasToolHost, tools: ReadonlyArray<ICanvasTool<never>>);
|
|
15
|
+
/** The armed tool's id, or null. */
|
|
16
|
+
get activeId(): CanvasToolId | null;
|
|
17
|
+
/** Whether this manager has a tool for `id`. */
|
|
18
|
+
has(id: string | null | undefined): id is CanvasToolId;
|
|
19
|
+
/** The tool with this id, typed by the caller. */
|
|
20
|
+
get<T extends ICanvasTool<never>>(id: CanvasToolId): T | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Arm `id` with `options`, disarming the armed tool first. null — or an id
|
|
23
|
+
* this manager has no tool for, such as a region draw mode — disarms only.
|
|
24
|
+
* Arming the armed tool again forwards `options` and keeps its work in progress.
|
|
25
|
+
*/
|
|
26
|
+
activate(id: string | null, options?: unknown): void;
|
|
27
|
+
/** Disarm the armed tool, if any. */
|
|
28
|
+
deactivate(): void;
|
|
29
|
+
/** Forward live options to a tool, armed or not. */
|
|
30
|
+
setOptions(id: CanvasToolId, options: unknown): void;
|
|
31
|
+
/** Drop one tool's work in progress (it stays armed). */
|
|
32
|
+
reset(id: CanvasToolId): void;
|
|
33
|
+
/** Drop every tool's work in progress — after undo/redo or an image switch,
|
|
34
|
+
* where a stroke or prompt no longer matches the regions on screen. */
|
|
35
|
+
resetAll(): void;
|
|
36
|
+
}
|