@jax-data-science/sci-image-visualizer 0.8.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -460
- package/esm2022/index.mjs +28 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +3 -4
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +66 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +157 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +263 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +344 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +358 -4218
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +439 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +153 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +185 -718
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +118 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +373 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +99 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +402 -651
- package/esm2022/lib/region-editor/region-metrics.mjs +68 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +134 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +153 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +459 -411
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +46 -3
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +140 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-store.service.mjs +279 -675
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +49 -71
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +114 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +81 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +68 -117
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +60 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer.component.mjs +480 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs +41083 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +13 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +1 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +221 -54
- package/lib/contracts/viz-config.d.ts +1 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +0 -1
- package/lib/implementations/napari-js/napari-loading-state.d.ts +30 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +62 -70
- package/lib/implementations/napari-js/napari-scene.d.ts +93 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +89 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +121 -883
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +104 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +37 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +36 -48
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +80 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +18 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +40 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +17 -0
- package/lib/models/region.d.ts +40 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +56 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +166 -199
- package/lib/region-editor/region-metrics.d.ts +26 -0
- package/lib/region-editor/region-persistence.service.d.ts +69 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +83 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +157 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +110 -58
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +35 -1
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +63 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-store.service.d.ts +104 -112
- package/lib/store/visualizer-store.service.d.ts +22 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +60 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +40 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +47 -83
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +27 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer.component.d.ts +201 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
1
|
+
import { UndoGestureTarget } from '../tool-kit/undo-gesture';
|
|
2
|
+
import { CanvasToolHost, ICanvasTool } from '../tool-kit/canvas-tool';
|
|
4
3
|
/** Brush parameters. `size` is the brush *diameter* in matrix (image) pixels. */
|
|
5
4
|
export interface BrushOptions {
|
|
6
5
|
size?: number;
|
|
@@ -14,14 +13,9 @@ export interface BrushOptions {
|
|
|
14
13
|
label?: string;
|
|
15
14
|
color?: string;
|
|
16
15
|
}
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
* read/write access to the shared region list. The brush ignores the wand's
|
|
21
|
-
* pixel values (it paints a geometric disc rather than flood-filling by colour),
|
|
22
|
-
* so reusing {@link WandToolHost} lets each backend bind the same host object.
|
|
23
|
-
*/
|
|
24
|
-
export type BrushToolHost = WandToolHost;
|
|
16
|
+
/** @deprecated One host serves every canvas tool: use {@link CanvasToolHost}. The
|
|
17
|
+
* brush reads only the readback's coordinate frame, not its pixel values. */
|
|
18
|
+
export type BrushToolHost = CanvasToolHost;
|
|
25
19
|
/**
|
|
26
20
|
* QuPath-style brush tool. Painting a stroke unions a disc of the configured
|
|
27
21
|
* size into the active region as the cursor drags; holding <kbd>Shift</kbd>
|
|
@@ -33,37 +27,26 @@ export type BrushToolHost = WandToolHost;
|
|
|
33
27
|
* No pixel sampling and no cursor indicator: the painted stroke itself shows the
|
|
34
28
|
* brush size. The overlay canvas only captures the pointer.
|
|
35
29
|
*
|
|
36
|
-
* Lifecycle mirrors the wand: a
|
|
37
|
-
*
|
|
30
|
+
* Lifecycle mirrors the wand: a plain class, one instance per backend's
|
|
31
|
+
* `CanvasToolManager`, armed with `activate(host, options)` / `deactivate()`.
|
|
38
32
|
*
|
|
39
33
|
* Holes / donuts (jit-ui#85): brushing a ring that encloses an unpainted area
|
|
40
|
-
* keeps the enclosed hole —
|
|
34
|
+
* keeps the enclosed hole — the contour tracer (`geometry/contour`) traces interior
|
|
41
35
|
* rings into {@link Polygon.holes}, which adopt/merge preserve (the re-rasterize
|
|
42
36
|
* punches the holes back out). The OpenSeadragon overlay renders them with
|
|
43
37
|
* even-odd fill and GeoJSON round-trips them as extra Polygon rings. The Plotly
|
|
44
38
|
* (Heatmap) backend currently renders the filled exterior only.
|
|
45
39
|
*/
|
|
46
|
-
export declare class
|
|
47
|
-
|
|
40
|
+
export declare class BrushTool implements ICanvasTool<BrushOptions> {
|
|
41
|
+
readonly id = "brush";
|
|
48
42
|
private host;
|
|
49
|
-
private overlay;
|
|
50
|
-
private active;
|
|
43
|
+
private readonly overlay;
|
|
51
44
|
/**
|
|
52
|
-
* Accumulated brush region (bbox-relative mask)
|
|
53
|
-
* subsequent stroke extends the *same* region
|
|
54
|
-
* matching QuPath, and the wand.
|
|
45
|
+
* Accumulated brush region (bbox-relative mask), shared logic with the wand.
|
|
46
|
+
* Persists across mouseup so a subsequent stroke extends the *same* region
|
|
47
|
+
* until the user switches tool — matching QuPath, and the wand.
|
|
55
48
|
*/
|
|
56
|
-
private
|
|
57
|
-
/** Id of the region this stroke is editing (null = a fresh region). For an
|
|
58
|
-
* erase that splits the region, this tracks the largest resulting piece. */
|
|
59
|
-
private strokeRegionId;
|
|
60
|
-
/** Readback ratio/origin signature the active stroke is tied to; a change (zoom/pan) invalidates
|
|
61
|
-
* it so it isn't re-committed at a different scale (jit-ui#102). */
|
|
62
|
-
private strokeRatioSig;
|
|
63
|
-
/** Ids of the extra regions produced when an erase stroke splits a region
|
|
64
|
-
* into disconnected pieces — reused across drag ticks so the split pieces
|
|
65
|
-
* keep stable identities instead of being recreated each tick. */
|
|
66
|
-
private strokeExtraIds;
|
|
49
|
+
private readonly editor;
|
|
67
50
|
/** Previous cursor position (matrix coords) within the current drag, so fast
|
|
68
51
|
* drags paint a continuous stroke rather than disconnected dabs. */
|
|
69
52
|
private lastMatrix;
|
|
@@ -71,14 +54,17 @@ export declare class BrushToolService {
|
|
|
71
54
|
private size;
|
|
72
55
|
/** The class being painted ({@link BrushOptions.label} / `color`); null = plain brush. */
|
|
73
56
|
private paintClass;
|
|
74
|
-
|
|
75
|
-
private readonly
|
|
76
|
-
|
|
77
|
-
constructor(
|
|
78
|
-
/**
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
57
|
+
/** Makes each drag one undo step, however long the user pauses (RT-12). */
|
|
58
|
+
private readonly gesture;
|
|
59
|
+
/** @param gestureTarget the region store, so each drag is one undo step. */
|
|
60
|
+
constructor(gestureTarget?: UndoGestureTarget | null);
|
|
61
|
+
/** Arm the brush on `host`. Arming sets the class in full: no label/color
|
|
62
|
+
* means the plain brush; a missing size keeps the previous one. */
|
|
63
|
+
activate(host: CanvasToolHost, options?: BrushOptions): void;
|
|
64
|
+
/** Disarm: remove the overlay, drop the active region and the class. */
|
|
65
|
+
deactivate(): void;
|
|
66
|
+
/** Drop the active brush region so the next stroke starts a new one. */
|
|
67
|
+
reset(): void;
|
|
82
68
|
/**
|
|
83
69
|
* Update size and/or class while armed. The class changes only when `label`
|
|
84
70
|
* or `color` is passed (as a key, even `undefined`), so a size-only update
|
|
@@ -88,13 +74,10 @@ export declare class BrushToolService {
|
|
|
88
74
|
setOptions(options?: BrushOptions): void;
|
|
89
75
|
/** Live-update the brush size (matrix-pixel diameter). */
|
|
90
76
|
setSize(size: number): void;
|
|
91
|
-
/** Drop the active brush region so the next stroke starts a new one. */
|
|
92
|
-
clearActiveRegion(): void;
|
|
93
77
|
private createOverlay;
|
|
94
|
-
private
|
|
95
|
-
private
|
|
96
|
-
private
|
|
97
|
-
private onMouseUp;
|
|
78
|
+
private onPointerDown;
|
|
79
|
+
private onPointerMove;
|
|
80
|
+
private onPointerUp;
|
|
98
81
|
private resetStroke;
|
|
99
82
|
/**
|
|
100
83
|
* Paint (or erase) a disc — or a swept line of discs since the previous
|
|
@@ -104,61 +87,11 @@ export declare class BrushToolService {
|
|
|
104
87
|
private applyAtClient;
|
|
105
88
|
/**
|
|
106
89
|
* OR (add) or AND-NOT (erase) a filled disc of `radius` matrix-pixels centred
|
|
107
|
-
* at (cx, cy) into the accumulator, growing its bbox to
|
|
90
|
+
* at (cx, cy) into the accumulator, growing its bbox (clipped to the
|
|
91
|
+
* readback) to fit when adding.
|
|
108
92
|
*/
|
|
109
93
|
private stampDisc;
|
|
110
|
-
/**
|
|
111
|
-
* Ensure the accumulator's bbox covers [px0,py0,px1,py1) (clamped to the
|
|
112
|
-
* image), allocating/copying a larger mask when it must grow. Returns false if
|
|
113
|
-
* the requested box is empty after clamping.
|
|
114
|
-
*/
|
|
115
|
-
private ensureStrokeCovers;
|
|
116
|
-
/** True if (matrixX, matrixY) lies inside the current stroke accumulator. */
|
|
117
|
-
private pointInStroke;
|
|
118
|
-
/**
|
|
119
|
-
* Remove the region(s) referenced by the stroke and reset it — used when an
|
|
120
|
-
* erase stroke deletes every pixel.
|
|
121
|
-
*/
|
|
122
|
-
private dropActiveShape;
|
|
123
94
|
/** Whether the stroke may adopt or merge `region`: always for the plain brush,
|
|
124
95
|
* otherwise only a region of the class being painted. */
|
|
125
96
|
private paintsInto;
|
|
126
|
-
/** A region's closed-polygon vertices (image/data coords), or null when it
|
|
127
|
-
* isn't a fillable closed polygon (rectangles, open polylines). */
|
|
128
|
-
private regionVerts;
|
|
129
|
-
/** Whether a region can be faithfully rasterized at this zoom (rx/ry = data units per matrix px).
|
|
130
|
-
* Editing rasterizes + re-traces the region, so one whose matrix-space bbox exceeds the
|
|
131
|
-
* rasterizer cap would come back rescaled/corrupted (e.g. a whole-slide annotation while zoomed
|
|
132
|
-
* out) — skip adopt/merge for those and only edit them near native zoom (jit-ui#102). */
|
|
133
|
-
private fitsForEdit;
|
|
134
|
-
/** Convert a region's hole rings from image/data coords into matrix coords so
|
|
135
|
-
* they line up with the stroke accumulator (jit-ui#85). */
|
|
136
|
-
private holesToMatrix;
|
|
137
|
-
/**
|
|
138
|
-
* If (matrixX, matrixY) falls inside an existing region, rasterize it into the
|
|
139
|
-
* stroke accumulator so subsequent brush input extends it rather than starting
|
|
140
|
-
* a new region.
|
|
141
|
-
*/
|
|
142
|
-
private tryAdoptShapeAt;
|
|
143
|
-
/**
|
|
144
|
-
* Fold every region whose rasterized mask overlaps the stroke mask into the
|
|
145
|
-
* stroke and remove it from the list, so brushing across regions merges them.
|
|
146
|
-
*/
|
|
147
|
-
private mergeOverlappingShapes;
|
|
148
|
-
/**
|
|
149
|
-
* Commit the stroke's connected pieces as regions — the largest keeps the
|
|
150
|
-
* stroke's region identity, additional pieces (from an erase that split the
|
|
151
|
-
* region) become their own regions tracked in `strokeExtraIds` so they keep
|
|
152
|
-
* stable identities across drag ticks. The store mints ids on commit, which
|
|
153
|
-
* we read back so subsequent ticks replace the same regions.
|
|
154
|
-
*/
|
|
155
|
-
private commitComponents;
|
|
156
|
-
/**
|
|
157
|
-
* Build a Region for one component and insert it into `regions`: replace the
|
|
158
|
-
* region with `id` in place if it exists, otherwise append a new one. Returns
|
|
159
|
-
* the Region instance (its id is minted later by the store when new).
|
|
160
|
-
*/
|
|
161
|
-
private upsertComponent;
|
|
162
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BrushToolService, never>;
|
|
163
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<BrushToolService>;
|
|
164
97
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { WandService } from './wand/wand.service';
|
|
2
|
+
import { SamPointToolService } from './segmentation/sam-point-tool.service';
|
|
3
|
+
import { CanvasToolHost } from './tool-kit/canvas-tool';
|
|
4
|
+
import { CanvasToolManager } from './tool-kit/canvas-tool-manager';
|
|
5
|
+
import { UndoGestureTarget } from './tool-kit/undo-gesture';
|
|
6
|
+
/** What a backend supplies to build its canvas tools — all from its own injector. */
|
|
7
|
+
export interface CanvasToolDeps {
|
|
8
|
+
/** The (stateless) wand patch sampler. */
|
|
9
|
+
wandService: WandService;
|
|
10
|
+
/** The chain's region store: makes each wand/brush/eraser drag one undo step. */
|
|
11
|
+
regionStore: UndoGestureTarget | null;
|
|
12
|
+
/** The chain's SAM point feeds; the point tool reports through them. */
|
|
13
|
+
samPoint: SamPointToolService;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A backend's canvas-tool manager: fresh wand, brush, vertex eraser,
|
|
17
|
+
* zoom-to-box and SAM point tools over `host`. Each backend calls this once, so
|
|
18
|
+
* no tool instance — and no tool state — is shared between backends (RT-21).
|
|
19
|
+
*/
|
|
20
|
+
export declare function createCanvasToolManager(host: CanvasToolHost, deps: CanvasToolDeps): CanvasToolManager;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CachedImageData } from '../wand/wand-tool.service';
|
|
1
|
+
import type { CachedImageData } from '../wand/wand-tool.service';
|
|
2
2
|
/** A client-side crop of the loaded image — the browser equivalent of the JIT
|
|
3
3
|
* server slide-crop, taken from the pixels already in the viewer. */
|
|
4
4
|
export interface CroppedImage {
|
|
@@ -19,12 +19,18 @@ export interface DataBox {
|
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Browser "slide crop": extract the box region (data coords) from a cached image
|
|
22
|
-
* frame as an RGBA image, clamped to the image bounds.
|
|
23
|
-
*
|
|
24
|
-
* box is empty/outside the image.
|
|
22
|
+
* frame as an RGBA image, clamped to the image bounds. Returns null when the box
|
|
23
|
+
* is empty/outside the image.
|
|
25
24
|
*
|
|
26
25
|
* The output feeds an automatic segmenter (e.g. cellpose-SAM): run it on the
|
|
27
26
|
* crop, then offset the resulting masks by (matrixX0, matrixY0) to place them
|
|
28
27
|
* back on the full frame.
|
|
29
28
|
*/
|
|
30
29
|
export declare function cropImageRegion(cached: CachedImageData, frameIndex: number, box: DataBox): CroppedImage | null;
|
|
30
|
+
/**
|
|
31
|
+
* RGBA pixels of the `w`×`h` matrix window at (x0, y0) of a cached frame,
|
|
32
|
+
* nested or packed (see `tool-kit/frame-pixels`). Grayscale frames are
|
|
33
|
+
* replicated across R/G/B; RGB tuples are copied through. Missing pixels become
|
|
34
|
+
* opaque black.
|
|
35
|
+
*/
|
|
36
|
+
export declare function frameRegionToRgba(cached: CachedImageData, frameIndex: number, x0: number, y0: number, w: number, h: number): Uint8ClampedArray;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { PlotTypeId } from '../../contracts/plot-type';
|
|
3
|
+
import { PlotTypeOption } from '../../contracts/plot-type-contribution.contract';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* The toolbar's plot-type group: the plot-type dropdown, the isosurface band
|
|
7
|
+
* slider for the isosurface modes, and the add-intensity-line button for the
|
|
8
|
+
* views that draw profile lines. Presentational: the host owns the values.
|
|
9
|
+
*/
|
|
10
|
+
export declare class PlotTypeSelectorComponent {
|
|
11
|
+
/** Plot types the active backend advertises, then any contributed modes. */
|
|
12
|
+
options: PlotTypeOption[];
|
|
13
|
+
/** The selected built-in type or contributed mode id. */
|
|
14
|
+
selected: PlotTypeId;
|
|
15
|
+
/** An isosurface mode: show the iso band slider. */
|
|
16
|
+
isosurface: boolean;
|
|
17
|
+
/** Isosurface band as a 0–255 slider position. */
|
|
18
|
+
isoRange: number[];
|
|
19
|
+
/** The view draws intensity profile lines: show the add-line button. */
|
|
20
|
+
intensityLines: boolean;
|
|
21
|
+
/** A plot type or contributed mode was picked from the dropdown. */
|
|
22
|
+
selectPlotType: EventEmitter<string>;
|
|
23
|
+
/** The iso band slider moved: the new `[low, high]` pair (or nothing). */
|
|
24
|
+
isoRangeChange: EventEmitter<number[] | undefined>;
|
|
25
|
+
/** Add another coloured intensity line ROI + inset trace. */
|
|
26
|
+
addProfileLine: EventEmitter<void>;
|
|
27
|
+
/** Iso slider bounds — UI constants (the band is host-owned). */
|
|
28
|
+
protected readonly isoValueMin = 0;
|
|
29
|
+
protected readonly isoValueMax = 255;
|
|
30
|
+
protected readonly isoValueStep = 1;
|
|
31
|
+
/** A plot-type icon is a PrimeNG font glyph (e.g. `pi pi-image`) rather than an
|
|
32
|
+
* SVG asset path — drives which element the item template renders. */
|
|
33
|
+
protected isPiIcon(icon: string | undefined): boolean;
|
|
34
|
+
/** The iso band slider reports its `[low, high]` pair (or nothing). */
|
|
35
|
+
protected onIsoRange(value: number | number[] | undefined): void;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PlotTypeSelectorComponent, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlotTypeSelectorComponent, "toolbar-plot-type-selector", never, { "options": { "alias": "options"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "isosurface": { "alias": "isosurface"; "required": false; }; "isoRange": { "alias": "isoRange"; "required": false; }; "intensityLines": { "alias": "intensityLines"; "required": false; }; }, { "selectPlotType": "selectPlotType"; "isoRangeChange": "isoRangeChange"; "addProfileLine": "addProfileLine"; }, never, never, true, never>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** A drawing tool's toggle button in the toolbar's region group. */
|
|
2
|
+
export interface RegionToolButton {
|
|
3
|
+
/** The drag mode the button toggles. */
|
|
4
|
+
mode: string;
|
|
5
|
+
/** Accessible name. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Tooltip (HTML). */
|
|
8
|
+
tooltip: string;
|
|
9
|
+
/** A PrimeNG glyph (`pi pi-…`), or else {@link img}. */
|
|
10
|
+
icon?: string;
|
|
11
|
+
/** An SVG under `assets/plotting/`, recoloured for its on/off state. */
|
|
12
|
+
img?: string;
|
|
13
|
+
/** `not3d`: absent from the 3D cloud's screen-space lasso (no raster to
|
|
14
|
+
* sample / an open polyline is no region); `vertex`: needs a backend with a
|
|
15
|
+
* vertex-editing overlay (OSD + napari-js image). */
|
|
16
|
+
gate?: 'not3d' | 'vertex';
|
|
17
|
+
/** The tool's parameter slider, shown while it is active. */
|
|
18
|
+
slider?: 'brush' | 'wand' | 'eraser';
|
|
19
|
+
}
|
|
20
|
+
/** The region drawing tools, in toolbar order. */
|
|
21
|
+
export declare const REGION_TOOL_BUTTONS: readonly RegionToolButton[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { RegionToolButton } from './region-tool-buttons';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* The toolbar's region group: open the Region Editor, the drawing tools (one
|
|
6
|
+
* table-driven toggle per {@link REGION_TOOL_BUTTONS} entry, with the active
|
|
7
|
+
* tool's parameter slider), undo / redo and delete. Presentational: the host
|
|
8
|
+
* owns the active mode and every value.
|
|
9
|
+
*/
|
|
10
|
+
export declare class RegionToolsComponent {
|
|
11
|
+
/** The armed drawing tool's mode, or null. */
|
|
12
|
+
activeDragMode: string | null;
|
|
13
|
+
/** The 3D cloud's screen-space lasso: no brush or polyline. */
|
|
14
|
+
is3dRegions: boolean;
|
|
15
|
+
/** The backend has a vertex-editing overlay (OSD + napari-js image). */
|
|
16
|
+
vertexTools: boolean;
|
|
17
|
+
/** Magic-wand sensitivity (the wand's slider value). */
|
|
18
|
+
wandSensitivity: number;
|
|
19
|
+
/** Brush diameter in image pixels. */
|
|
20
|
+
brushSize: number;
|
|
21
|
+
/** Vertex-eraser radius in image pixels. */
|
|
22
|
+
vertexEraserRadius: number;
|
|
23
|
+
/** A region action can be undone (enables Undo). */
|
|
24
|
+
canUndo: boolean;
|
|
25
|
+
/** An undone region action can be redone (enables Redo). */
|
|
26
|
+
canRedo: boolean;
|
|
27
|
+
/** Open the Region Editor dialog. */
|
|
28
|
+
openRegionEditor: EventEmitter<void>;
|
|
29
|
+
/** A drawing tool's button was clicked (its mode). */
|
|
30
|
+
toggleDragMode: EventEmitter<string>;
|
|
31
|
+
/** Undo the last region action. */
|
|
32
|
+
undoRegion: EventEmitter<void>;
|
|
33
|
+
/** Redo the last undone region action. */
|
|
34
|
+
redoRegion: EventEmitter<void>;
|
|
35
|
+
/** Delete the selected region. */
|
|
36
|
+
deleteRegion: EventEmitter<void>;
|
|
37
|
+
/** The wand sensitivity slider moved. */
|
|
38
|
+
wandSensitivityChange: EventEmitter<number | undefined>;
|
|
39
|
+
/** The brush size slider moved. */
|
|
40
|
+
brushSizeChange: EventEmitter<number | undefined>;
|
|
41
|
+
/** The vertex-eraser radius slider moved. */
|
|
42
|
+
vertexEraserRadiusChange: EventEmitter<number | undefined>;
|
|
43
|
+
protected readonly buttons: readonly RegionToolButton[];
|
|
44
|
+
/** Slider bounds — toolbar UI constants (the values are host-owned). */
|
|
45
|
+
protected readonly wandSensitivityMin = 0.5;
|
|
46
|
+
protected readonly wandSensitivityMax = 10;
|
|
47
|
+
protected readonly wandSensitivityStep = 0.1;
|
|
48
|
+
protected readonly brushSizeMin = 5;
|
|
49
|
+
protected readonly brushSizeMax = 300;
|
|
50
|
+
protected readonly brushSizeStep = 5;
|
|
51
|
+
protected readonly vertexEraserRadiusMin = 5;
|
|
52
|
+
protected readonly vertexEraserRadiusMax = 300;
|
|
53
|
+
protected readonly vertexEraserRadiusStep = 5;
|
|
54
|
+
protected readonly trackByMode: (_: number, b: RegionToolButton) => string;
|
|
55
|
+
protected shown(b: RegionToolButton): boolean;
|
|
56
|
+
/** A single slider's value (a range slider never feeds these). */
|
|
57
|
+
protected asNumber(v: number | number[] | undefined): number | undefined;
|
|
58
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RegionToolsComponent, never>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RegionToolsComponent, "toolbar-region-tools", never, { "activeDragMode": { "alias": "activeDragMode"; "required": false; }; "is3dRegions": { "alias": "is3dRegions"; "required": false; }; "vertexTools": { "alias": "vertexTools"; "required": false; }; "wandSensitivity": { "alias": "wandSensitivity"; "required": false; }; "brushSize": { "alias": "brushSize"; "required": false; }; "vertexEraserRadius": { "alias": "vertexEraserRadius"; "required": false; }; "canUndo": { "alias": "canUndo"; "required": false; }; "canRedo": { "alias": "canRedo"; "required": false; }; }, { "openRegionEditor": "openRegionEditor"; "toggleDragMode": "toggleDragMode"; "undoRegion": "undoRegion"; "redoRegion": "redoRegion"; "deleteRegion": "deleteRegion"; "wandSensitivityChange": "wandSensitivityChange"; "brushSizeChange": "brushSizeChange"; "vertexEraserRadiusChange": "vertexEraserRadiusChange"; }, never, never, true, never>;
|
|
60
|
+
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { WandService } from '../wand/wand.service';
|
|
3
|
-
import { WandToolHost } from '../wand/wand-tool.service';
|
|
1
|
+
import { CanvasToolHost } from '../tool-kit/canvas-tool';
|
|
4
2
|
import { ICellSegmenter } from '../../contracts/cell-segmenter.contract';
|
|
5
3
|
import * as i0 from "@angular/core";
|
|
6
4
|
/**
|
|
@@ -14,19 +12,17 @@ import * as i0 from "@angular/core";
|
|
|
14
12
|
* box prompt, so the box just bounds the crop it segments automatically.
|
|
15
13
|
*/
|
|
16
14
|
export declare class CellSegmentToolService {
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
readonly
|
|
20
|
-
readonly
|
|
21
|
-
readonly progress$: BehaviorSubject<number>;
|
|
22
|
-
constructor(wandService: WandService);
|
|
23
|
-
bindHost(host: WandToolHost): void;
|
|
15
|
+
private readonly state;
|
|
16
|
+
readonly status$: import("rxjs").BehaviorSubject<string>;
|
|
17
|
+
readonly busy$: import("rxjs").BehaviorSubject<boolean>;
|
|
18
|
+
readonly progress$: import("rxjs").BehaviorSubject<number>;
|
|
24
19
|
/**
|
|
25
|
-
* Crop + cellpose-segment every rectangle
|
|
26
|
-
* the prompt rectangles that produced cells. Returns
|
|
20
|
+
* Crop + cellpose-segment every rectangle of the backend behind `host`; append
|
|
21
|
+
* the cell regions and drop the prompt rectangles that produced cells. Returns
|
|
22
|
+
* the number of regions added; 0 (ignored) while a previous run is still going.
|
|
23
|
+
* The host is passed per run, so no backend's host outlives its call.
|
|
27
24
|
*/
|
|
28
|
-
segmentBoxes(segmenter: ICellSegmenter): Promise<number>;
|
|
29
|
-
private makeRegion;
|
|
25
|
+
segmentBoxes(host: CanvasToolHost, segmenter: ICellSegmenter): Promise<number>;
|
|
30
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<CellSegmentToolService, never>;
|
|
31
27
|
static ɵprov: i0.ɵɵInjectableDeclaration<CellSegmentToolService>;
|
|
32
28
|
}
|
|
@@ -17,8 +17,17 @@ import * as i0 from "@angular/core";
|
|
|
17
17
|
export declare class CellposeSegmenterService implements ICellSegmenter {
|
|
18
18
|
private instance;
|
|
19
19
|
private loading;
|
|
20
|
+
/** Bumped by {@link setModelUrl}, so a load of the previous URL is discarded. */
|
|
21
|
+
private generation;
|
|
20
22
|
private modelUrl;
|
|
21
|
-
/**
|
|
23
|
+
/** Every in-flight caller's callbacks: one shared load reports to all of them. */
|
|
24
|
+
private readonly progressListeners;
|
|
25
|
+
private readonly statusListeners;
|
|
26
|
+
/**
|
|
27
|
+
* Point the segmenter at a different hosted CPSAM ONNX. Changing the URL after
|
|
28
|
+
* the model loaded (or while it loads) disposes it, so the next run loads the
|
|
29
|
+
* new model instead of silently keeping the old one.
|
|
30
|
+
*/
|
|
22
31
|
setModelUrl(url: string): void;
|
|
23
32
|
segmentCells(image: {
|
|
24
33
|
data: Uint8ClampedArray;
|
|
@@ -27,7 +36,8 @@ export declare class CellposeSegmenterService implements ICellSegmenter {
|
|
|
27
36
|
}, progress?: CellSegmentProgress): Promise<CellSegmentation>;
|
|
28
37
|
/**
|
|
29
38
|
* The shared Cellpose instance, lazily created on first use and reused
|
|
30
|
-
* thereafter (deduped across concurrent callers
|
|
39
|
+
* thereafter (deduped across concurrent callers, each of which receives the
|
|
40
|
+
* load's progress). A failed load is retried on the next call. Exposed so a host pipeline
|
|
31
41
|
* engine can run richer `segment()` options on the same instance. `onProgress`
|
|
32
42
|
* reports raw downloaded/total bytes (`total` is null when unknown); `onStatus`
|
|
33
43
|
* reports worker-init phase strings.
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
import { ISamSession, SamEmbedding, SamMaskResult, SamModelDef, SamPrompt } from '../../contracts/sam.contract';
|
|
2
|
+
/**
|
|
3
|
+
* onnxruntime-web implementation of {@link ISamSession} (jit-ui#90), with two
|
|
4
|
+
* execution modes chosen per model:
|
|
5
|
+
*
|
|
6
|
+
* - **in-process** (main thread) — for small WASM models flagged `inProcess`
|
|
7
|
+
* (e.g. micro-sam ViT-T). Fast load + inference with no Web Worker spawn /
|
|
8
|
+
* second ORT runtime / message round-trips; the brief encode runs on the main
|
|
9
|
+
* thread (fine for a tiny model).
|
|
10
|
+
* - **worker** — for WebGPU models (e.g. ViT-B, patho-sam fp16) whose heavy
|
|
11
|
+
* encode would otherwise freeze the tab. Runs in {@link ./onnx-sam.worker} so
|
|
12
|
+
* the UI stays responsive (the spinner animates).
|
|
13
|
+
*
|
|
14
|
+
* Both modes share their inference math via {@link ./sam-onnx-core}. Lazy-imported
|
|
15
|
+
* by the SAM tools so onnxruntime-web / the worker never load in unit tests or
|
|
16
|
+
* the initial bundle.
|
|
17
|
+
*/
|
|
2
18
|
export declare class OnnxSamSession implements ISamSession {
|
|
3
19
|
private mode;
|
|
4
20
|
private loaded;
|
|
5
|
-
private model;
|
|
6
21
|
private inputSize;
|
|
7
22
|
private worker;
|
|
8
|
-
private
|
|
9
|
-
private readonly pending;
|
|
23
|
+
private readonly calls;
|
|
10
24
|
private encoder;
|
|
11
25
|
private decoder;
|
|
12
26
|
private nextToken;
|
|
27
|
+
/** The few most recently used embeddings, by token (one per recently viewed image). */
|
|
13
28
|
private readonly embeddings;
|
|
14
29
|
loadModel(model: SamModelDef, onProgress?: (fraction: number) => void): Promise<void>;
|
|
15
30
|
isLoaded(): boolean;
|
|
@@ -19,7 +34,11 @@ export declare class OnnxSamSession implements ISamSession {
|
|
|
19
34
|
height: number;
|
|
20
35
|
}): Promise<SamEmbedding>;
|
|
21
36
|
decode(embedding: SamEmbedding, prompt: SamPrompt): Promise<SamMaskResult>;
|
|
37
|
+
/** Release the worker / ORT sessions. Calls still in flight reject (RT-8), so
|
|
38
|
+
* their callers' `finally` blocks run (e.g. a tool's busy flag clears). */
|
|
22
39
|
dispose(): void;
|
|
23
40
|
private ensureWorker;
|
|
41
|
+
/** Terminate the worker (if any) and reject every call still waiting on it. */
|
|
42
|
+
private dropWorker;
|
|
24
43
|
private call;
|
|
25
44
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** A reply from the SAM worker: progress for, or the result of, call `id`. */
|
|
2
|
+
export interface WorkerReply {
|
|
3
|
+
id: number;
|
|
4
|
+
type: string;
|
|
5
|
+
/** Present on `type: 'progress'` replies. */
|
|
6
|
+
fraction?: number;
|
|
7
|
+
/** Present on `type: 'error'` replies. */
|
|
8
|
+
error?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Request/response bookkeeping for a worker RPC: each call gets an id and a
|
|
13
|
+
* promise that its reply settles. Every exit path (dispose, a worker crash)
|
|
14
|
+
* must {@link rejectAll}, or awaiting callers never reach their `finally` and a
|
|
15
|
+
* tool's busy flag sticks forever (RT-8).
|
|
16
|
+
*/
|
|
17
|
+
export declare class PendingCalls {
|
|
18
|
+
private seq;
|
|
19
|
+
private readonly pending;
|
|
20
|
+
/** Calls still awaiting a reply. */
|
|
21
|
+
get size(): number;
|
|
22
|
+
/** Register a new call; post the message with the returned id. */
|
|
23
|
+
open(onProgress?: (fraction: number) => void): {
|
|
24
|
+
id: number;
|
|
25
|
+
promise: Promise<WorkerReply>;
|
|
26
|
+
};
|
|
27
|
+
/** Route a worker reply to its call: progress, error or result. */
|
|
28
|
+
handle(reply: WorkerReply): void;
|
|
29
|
+
/** Reject every pending call with `err` and forget them. */
|
|
30
|
+
rejectAll(err: Error): void;
|
|
31
|
+
}
|
|
@@ -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
|