@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
|
@@ -88,6 +88,7 @@ export interface SelectParamSpec {
|
|
|
88
88
|
}[];
|
|
89
89
|
tooltip?: string;
|
|
90
90
|
}
|
|
91
|
+
/** One parameter a dialog tool asks for, discriminated by `type`. */
|
|
91
92
|
export type ToolParamSpec = NumberParamSpec | BooleanParamSpec | SelectParamSpec;
|
|
92
93
|
/** One selectable checkpoint. */
|
|
93
94
|
export interface ToolModelOption {
|
|
@@ -2,14 +2,13 @@ import { InjectionToken } from '@angular/core';
|
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { Image } from 'image-js';
|
|
4
4
|
import { IImageInfo, IImageMetadata } from './image.contract';
|
|
5
|
-
import { Region } from '../models/region';
|
|
5
|
+
import { Polygon, Region } from '../models/region';
|
|
6
6
|
import { PlotType, PlotTypeDescriptor } from './plot-type';
|
|
7
7
|
import { ViewerCapabilities } from './capabilities.contract';
|
|
8
8
|
import { IRegionOverlay } from './region-overlay.contract';
|
|
9
9
|
import { IHistogram } from './channel-histogram-api.contract';
|
|
10
|
-
import { ColormapNode, IWandOptions, IBrushOptions, SpatialViewState, SpatialColorBy } from './display-types';
|
|
11
|
-
import { CategoricalColumnMeta, SpatialDataset, SpatialEmbedding, SpatialMarkerGenes, SpatialTranscriptCounts } from './spatial-dataset.contract';
|
|
12
|
-
import { SpatialSelectionMask } from '../spatial/spatial-selection';
|
|
10
|
+
import { CanvasToolOptions, ColormapNode, IWandOptions, IBrushOptions, SpatialViewState, SpatialColorBy } from './display-types';
|
|
11
|
+
import { CategoricalColumnMeta, SpatialDataset, SpatialEmbedding, SpatialMarkerGenes, SpatialSelectionMask, SpatialTranscriptCounts } from './spatial-dataset.contract';
|
|
13
12
|
import type { PlotModeViewport } from './plot-type-contribution.contract';
|
|
14
13
|
/**
|
|
15
14
|
* Backend-neutral visualization contract. Plotly is one implementation;
|
|
@@ -19,10 +18,6 @@ import type { PlotModeViewport } from './plot-type-contribution.contract';
|
|
|
19
18
|
*
|
|
20
19
|
* Split into role interfaces so a consumer can depend only on the slice it
|
|
21
20
|
* uses, then composed into `IVisualizer`.
|
|
22
|
-
*
|
|
23
|
-
* Types are intentionally permissive (`any` where the current Plotly service
|
|
24
|
-
* is untyped) so `PlotlyService` satisfies the contract without a typing
|
|
25
|
-
* rewrite — tightening is a follow-up, not part of standing the interface up.
|
|
26
21
|
*/
|
|
27
22
|
/** Pixel readback shape returned by `getDisplayedPixelData`. */
|
|
28
23
|
export interface PixelData {
|
|
@@ -45,37 +40,51 @@ export interface IntensityProfile {
|
|
|
45
40
|
/** Colour of the line ROI — the inset trace is drawn in the same colour. */
|
|
46
41
|
color?: string;
|
|
47
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* What `IDataRenderer.load()` resolves to. Backend-specific beyond `filename`,
|
|
45
|
+
* which names the image the handle was loaded for: the host compares it with the
|
|
46
|
+
* image it asked for, to drop a handle a newer request has overtaken. Pass the
|
|
47
|
+
* handle on to `plot()` unchanged.
|
|
48
|
+
*/
|
|
49
|
+
export interface LoadedImage {
|
|
50
|
+
readonly filename: string | undefined;
|
|
51
|
+
}
|
|
48
52
|
/**
|
|
49
53
|
* The render/viewport role: load data, render it (image or plot), and handle
|
|
50
54
|
* zoom, stack navigation, and pixel readback.
|
|
51
55
|
*/
|
|
52
56
|
export interface IDataRenderer {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*
|
|
57
|
+
/** Fetch what {@link plot} needs for this image/slice. `signal` aborts when the
|
|
58
|
+
* host no longer wants the result (a newer image, Cancel, teardown); a backend
|
|
59
|
+
* may stop its network work then. Optional, and ignored by backends that do
|
|
60
|
+
* not support it yet. */
|
|
61
|
+
load(imageInfo: IImageInfo, zIndex: number, signal?: AbortSignal): Promise<LoadedImage>;
|
|
62
|
+
/** `imageLoaded` is the {@link LoadedImage} handle returned by `load()` (or null
|
|
63
|
+
* for a draw with no image) — pass it straight through. Resolves false when the
|
|
64
|
+
* backend could not draw (no plot target, no WebGPU, …). */
|
|
56
65
|
plot(plotDiv: string, imageLoaded: unknown, imageInfo: IImageInfo, screenHeight: number, plotType: PlotType, inPlace?: boolean): Promise<boolean>;
|
|
57
66
|
/** @deprecated Plotly-specific re-render; the OSD backend no-ops it. The host
|
|
58
67
|
* re-drives `plot()` from its image stream instead. */
|
|
59
68
|
reloadAndPlot(): void;
|
|
60
69
|
reset(): void;
|
|
61
70
|
relayout(trueImageSize?: number[]): void;
|
|
62
|
-
/**
|
|
63
|
-
*
|
|
71
|
+
/**
|
|
72
|
+
* Fit the whole image (or scene) into the view — every backend does: Plotly
|
|
73
|
+
* autoranges its axes, OpenSeadragon goes home, napari-js fits its camera. The
|
|
74
|
+
* backend then emits on {@link getAutoscaleEvent}.
|
|
75
|
+
*/
|
|
76
|
+
fitToView(): void;
|
|
77
|
+
/** Reset the view to the image extent. Same intent as {@link fitToView}; kept for
|
|
78
|
+
* callers of the original name. */
|
|
64
79
|
resetAxes(): void;
|
|
65
|
-
/** @deprecated
|
|
66
|
-
* on {@link ViewerCapabilities} before calling. */
|
|
80
|
+
/** @deprecated Use {@link fitToView} — the same operation under its backend-neutral name. */
|
|
67
81
|
autoscale(): void;
|
|
68
82
|
zoomIn(): void;
|
|
69
83
|
zoomOut(): void;
|
|
70
84
|
setDragMode(mode: string | false): void;
|
|
71
|
-
/**
|
|
72
|
-
* no-ops it (it has no navigator). Applied when the viewer is (re)created, and
|
|
73
|
-
* toggled live when one is already mounted. */
|
|
85
|
+
/** @deprecated Use `getOsdViewOptions().setNavigatorVisible()` on `IVisualizer`. */
|
|
74
86
|
setNavigatorVisible(visible: boolean): void;
|
|
75
|
-
/**
|
|
76
|
-
* zooming past 1:1 shows crisp pixel blocks (pixel-level inspection).
|
|
77
|
-
* OpenSeadragon only — Plotly no-ops it. Applied at viewer creation and live
|
|
78
|
-
* (with a redraw) when one is mounted. */
|
|
87
|
+
/** @deprecated Use `getOsdViewOptions().setImageSmoothingEnabled()` on `IVisualizer`. */
|
|
79
88
|
setImageSmoothingEnabled(enabled: boolean): void;
|
|
80
89
|
setShowStack(showstack: boolean): void;
|
|
81
90
|
setZIndex(zIndex: number): void;
|
|
@@ -113,17 +122,17 @@ export interface IDataRenderer {
|
|
|
113
122
|
} | null;
|
|
114
123
|
downloadImage(): void;
|
|
115
124
|
setPlotType(plotType: PlotType): void;
|
|
116
|
-
/**
|
|
117
|
-
* backend honors it; changing it re-loads the current 3D plot at the coarser/finer sampling. */
|
|
125
|
+
/** @deprecated Use `getVolumeResolution()?.set()` on `IVisualizer`. */
|
|
118
126
|
setResolutionScale?(scale: number): void;
|
|
119
|
-
/**
|
|
127
|
+
/** @deprecated Use `getVolumeResolution()?.get()` on `IVisualizer` (this returns 1 without one). */
|
|
120
128
|
getResolutionScale?(): number;
|
|
121
|
-
/** @deprecated Use `getSurface3dControls()` — 3D scene controls
|
|
122
|
-
* a backend that renders 3D plot types; this
|
|
129
|
+
/** @deprecated Use `getSurface3dControls()?.setSurfaceDragMode()` — 3D scene controls
|
|
130
|
+
* only exist on a backend that renders 3D plot types; this silently no-ops on OSD. */
|
|
123
131
|
setSurfaceDragMode(mode: string): void;
|
|
124
132
|
/** @deprecated Use `getSurface3dControls()` — see {@link setSurfaceDragMode}. */
|
|
125
133
|
resetSurfaceCamera(): void;
|
|
126
|
-
|
|
134
|
+
/** Emits whenever the backend fits the view ({@link fitToView}). */
|
|
135
|
+
getAutoscaleEvent(): Observable<unknown>;
|
|
127
136
|
/** Plot types this backend advertises (drives the UI selector). */
|
|
128
137
|
getPlotTypeDescriptors(): PlotTypeDescriptor[];
|
|
129
138
|
/** Intensity along the line ROIs; emits the full set as any line is added,
|
|
@@ -139,8 +148,10 @@ export interface IRegionStore {
|
|
|
139
148
|
setRegions(regions: Region[], showRegionLabel?: boolean, isRegionSaveOn?: boolean, fillColor?: string, append?: boolean): void;
|
|
140
149
|
/** Framework-neutral accessor — the canonical way to read current regions. */
|
|
141
150
|
getRegions(): Region[];
|
|
142
|
-
|
|
143
|
-
|
|
151
|
+
/** The current regions as polygons (rectangles expanded), for server requests. */
|
|
152
|
+
getRegionPolygons(): Polygon[];
|
|
153
|
+
/** Emits the region set whenever it changes. */
|
|
154
|
+
getRegionUpdateEvent(): Observable<Region[]>;
|
|
144
155
|
setSelectedShapeIndices(indices: number[]): void;
|
|
145
156
|
getSelectedShapeIndices$(): Observable<number[]>;
|
|
146
157
|
/** Select a specific region (by identity), highlighting it on whichever
|
|
@@ -153,9 +164,6 @@ export interface IRegionStore {
|
|
|
153
164
|
getFillColor(): string;
|
|
154
165
|
getClassificationColors(): Map<string, string>;
|
|
155
166
|
setClassificationColor(label: string, color: string): void;
|
|
156
|
-
plotPreviousShapes(): void;
|
|
157
|
-
setPreviousShapes(shapes: any[]): void;
|
|
158
|
-
getPreviousShapes(): any[];
|
|
159
167
|
/** Undo the most recent region action (jit-ui#85). Restores the region set to
|
|
160
168
|
* the state before that action; up to a small fixed depth (10) is retained,
|
|
161
169
|
* so it can be invoked up to 10 times in a row. No-op when nothing is left to
|
|
@@ -203,16 +211,29 @@ export interface IRegionStore {
|
|
|
203
211
|
* Keyed by zero-based slice index; regions tagged with their z. */
|
|
204
212
|
getStackSaveSlices(): Map<number, Region[]>;
|
|
205
213
|
}
|
|
206
|
-
/** On-canvas tool modes (wand, brush, vertex eraser, zoom-to-box). */
|
|
214
|
+
/** On-canvas tool modes (wand, brush, vertex eraser, zoom-to-box, SAM point). */
|
|
207
215
|
export interface IToolController {
|
|
216
|
+
/**
|
|
217
|
+
* Arm one on-canvas tool (`CanvasToolId`) with its options — the wand's
|
|
218
|
+
* {@link IWandOptions}, the brush's {@link IBrushOptions} (`size` is the
|
|
219
|
+
* matrix-pixel diameter of the painted disc), the eraser's `{ radius }` —
|
|
220
|
+
* and disarm the one that was armed. `null`, or any id that is not a canvas
|
|
221
|
+
* tool (a region draw mode such as `'drawrect'`, `'pan'`), disarms only.
|
|
222
|
+
* Arming the armed tool again applies the options and keeps its work in
|
|
223
|
+
* progress.
|
|
224
|
+
*/
|
|
225
|
+
setActiveTool(id: string | null, options?: CanvasToolOptions): void;
|
|
226
|
+
/** @deprecated Use `setActiveTool('wand', options)` / `setActiveTool(null)`. */
|
|
208
227
|
setWandMode(active: boolean, options?: IWandOptions): void;
|
|
209
228
|
setWandOptions(options: IWandOptions): void;
|
|
210
229
|
clearActiveWandRegion(): void;
|
|
211
|
-
/**
|
|
230
|
+
/** @deprecated Use `setActiveTool('brush', options)` / `setActiveTool(null)`. */
|
|
212
231
|
setBrushMode(active: boolean, options?: IBrushOptions): void;
|
|
213
232
|
setBrushOptions(options: IBrushOptions): void;
|
|
233
|
+
/** @deprecated Use `setActiveTool('eraseVertex', { radius })` / `setActiveTool(null)`. */
|
|
214
234
|
setVertexEraserMode(active: boolean): void;
|
|
215
235
|
setVertexEraserRadius(radius: number): void;
|
|
236
|
+
/** @deprecated Use `setActiveTool('zoomToBox')` / `setActiveTool(null)`. */
|
|
216
237
|
setZoomToBoxMode(active: boolean): void;
|
|
217
238
|
/** Box-prompted SAM segmentation: segment every rectangle region into masks.
|
|
218
239
|
* Returns the number of mask regions added. (jit-ui#90) */
|
|
@@ -222,7 +243,8 @@ export interface IToolController {
|
|
|
222
243
|
segmentRectanglesCellpose(): Promise<number>;
|
|
223
244
|
/** Choose the registered SAM model the segment tools use (jit-ui#90 P1). */
|
|
224
245
|
setSamModel(id: string): void;
|
|
225
|
-
/** Toggle the interactive SAM point-prompt tool (click = +point, Shift = -).
|
|
246
|
+
/** Toggle the interactive SAM point-prompt tool (click = +point, Shift = -).
|
|
247
|
+
* @deprecated Use `setActiveTool('samPoint')` / `setActiveTool(null)`. */
|
|
226
248
|
setSamPointMode(active: boolean): void;
|
|
227
249
|
/** Finalise / discard the in-progress SAM point object. */
|
|
228
250
|
commitSamPoints(): void;
|
|
@@ -398,28 +420,19 @@ export interface IDisplayOptions {
|
|
|
398
420
|
setColormap(colormap: ColormapNode): void;
|
|
399
421
|
getColormapOptions(): ColormapNode[];
|
|
400
422
|
getReverseScale(): Observable<boolean>;
|
|
401
|
-
setReverseScale(
|
|
402
|
-
|
|
423
|
+
setReverseScale(reverse: boolean): void;
|
|
424
|
+
/** Publish the current image's metadata. `imageKey` (its file name) lets the
|
|
425
|
+
* channel state survive a re-plot of the same image but not a switch to another. */
|
|
426
|
+
setImageMeta(imageMeta: IImageMetadata[], imageKey?: string): void;
|
|
403
427
|
getImageMeta(): Observable<IImageMetadata[]>;
|
|
404
428
|
}
|
|
405
429
|
/**
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
* viewport-change signal that drives re-sampling at the current zoom. Each
|
|
409
|
-
* backend implements the part it owns and no-ops the rest — mirroring the
|
|
410
|
-
* deprecated no-op pattern on {@link IDataRenderer} — so the contract is uniform
|
|
411
|
-
* and a consumer can depend on `IVisualizer` alone (no concrete-type reach-in).
|
|
430
|
+
* The part of intensity sampling a rendering backend owns: where its view settled.
|
|
431
|
+
* What `IViewerBackend.getIntensitySampling()` returns.
|
|
412
432
|
*/
|
|
413
|
-
export interface
|
|
414
|
-
/** Populate the intensity-sampling cache for the current image/slice so the
|
|
415
|
-
* line-ROI profiles have pixel data. Real on Plotly; no-op on OSD. */
|
|
416
|
-
ensureIntensitySampling(imageInfo: IImageInfo, zIndex: number): Promise<void>;
|
|
417
|
-
/** Re-sample the profiles from a fresh crop of the given image-pixel ROI at
|
|
418
|
-
* display resolution. Real on Plotly; no-op on OSD. */
|
|
419
|
-
refreshIntensitySamplingForRoi(x: number, y: number, width: number, height: number, zIndex: number): void;
|
|
433
|
+
export interface IIntensityViewportSource {
|
|
420
434
|
/** Visible-region changes (image-pixel coords), emitted when the view settles,
|
|
421
|
-
* so the inset can re-sample at the current zoom.
|
|
422
|
-
* (its high-def zoom updates the sampling cache inline instead). */
|
|
435
|
+
* so the inset can re-sample at the current zoom. */
|
|
423
436
|
getViewportChange$(): Observable<{
|
|
424
437
|
x: number;
|
|
425
438
|
y: number;
|
|
@@ -427,7 +440,51 @@ export interface IIntensitySampling {
|
|
|
427
440
|
height: number;
|
|
428
441
|
}>;
|
|
429
442
|
}
|
|
430
|
-
/**
|
|
443
|
+
/**
|
|
444
|
+
* Intensity-profile sampling (the line ROIs' inset), from `IVisualizer.getIntensitySampling()`.
|
|
445
|
+
* The sampling itself is backend-neutral (the library's IntensityProfileService
|
|
446
|
+
* samples whatever image is on screen); the viewport-change signal comes from the
|
|
447
|
+
* backend that draws the image (OpenSeadragon and napari-js report it; Plotly
|
|
448
|
+
* re-samples its high-def zoom crops inline instead).
|
|
449
|
+
*/
|
|
450
|
+
export interface IIntensitySampling extends IIntensityViewportSource {
|
|
451
|
+
/** Load the current image/slice's pixels so the line-ROI profiles have data
|
|
452
|
+
* (a backend with no frames of its own: OpenSeadragon, napari-js). */
|
|
453
|
+
ensureIntensitySampling(imageInfo: IImageInfo, zIndex: number): Promise<void>;
|
|
454
|
+
/** Re-sample the profiles from a fresh crop of the given image-pixel ROI at
|
|
455
|
+
* display resolution. */
|
|
456
|
+
refreshIntensitySamplingForRoi(x: number, y: number, width: number, height: number, zIndex: number): void;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* The 2D view options of a tiled image viewer: the overview navigator and image
|
|
460
|
+
* smoothing. OpenSeadragon's, mirrored by napari-js's 2D views; Plotly has neither.
|
|
461
|
+
* Capability-gated: `IViewerBackend.getOsdViewOptions()` is null on a backend
|
|
462
|
+
* without them.
|
|
463
|
+
*/
|
|
464
|
+
export interface IOsdViewOptions {
|
|
465
|
+
/** Show/hide the overview navigator (the minimap). Applied when the viewer is
|
|
466
|
+
* (re)created, and toggled live when one is already mounted. */
|
|
467
|
+
setNavigatorVisible(visible: boolean): void;
|
|
468
|
+
/** Image smoothing (bilinear interpolation). `false` = nearest-neighbour, so
|
|
469
|
+
* zooming past 1:1 shows crisp pixel blocks (pixel-level inspection). Applied
|
|
470
|
+
* at viewer creation and live (with a redraw) when one is mounted. */
|
|
471
|
+
setImageSmoothingEnabled(enabled: boolean): void;
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* The 3D decimate factor of a volume renderer (napari-js WebGPU): 1 = full
|
|
475
|
+
* resolution … 8 = ⅛ per axis. Capability-gated: null on a backend without one.
|
|
476
|
+
*/
|
|
477
|
+
export interface IVolumeResolution {
|
|
478
|
+
/** The current factor (to initialize the Resolution control). */
|
|
479
|
+
get(): number;
|
|
480
|
+
/** Set the factor (rounded, at least 1). Takes effect on the next (re)load —
|
|
481
|
+
* the host re-plots after calling it, since it changes the fetched data. */
|
|
482
|
+
set(scale: number): void;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* The host-facing composite contract, implemented by the router (`VISUALIZER`). A
|
|
486
|
+
* rendering backend implements {@link IViewerBackend} instead.
|
|
487
|
+
*/
|
|
431
488
|
export interface IVisualizer extends IDataRenderer, IRegionStore, IToolController, IDisplayOptions, IIntensitySampling {
|
|
432
489
|
readonly capabilities: ViewerCapabilities;
|
|
433
490
|
/** This backend's region renderer. May be null until a plot is mounted
|
|
@@ -443,6 +500,26 @@ export interface IVisualizer extends IDataRenderer, IRegionStore, IToolControlle
|
|
|
443
500
|
* the capability-gated replacement for the deprecated top-level
|
|
444
501
|
* `setSurfaceDragMode`/`resetSurfaceCamera`. */
|
|
445
502
|
getSurface3dControls(): ISurface3dControls | null;
|
|
503
|
+
/** The navigator / image-smoothing options. Never null on the router: a setting
|
|
504
|
+
* applies to every backend that has them (OpenSeadragon, napari-js), so it can
|
|
505
|
+
* be set before the first render and survives a backend switch. */
|
|
506
|
+
getOsdViewOptions(): IOsdViewOptions;
|
|
507
|
+
/** The 3D decimate factor of the backend on screen, or null when it has none
|
|
508
|
+
* (only napari-js renders volumes). */
|
|
509
|
+
getVolumeResolution(): IVolumeResolution | null;
|
|
510
|
+
/** Intensity-profile sampling, whichever backend is on screen. */
|
|
511
|
+
getIntensitySampling(): IIntensitySampling;
|
|
512
|
+
/** @deprecated Use `getIntensitySampling().ensureIntensitySampling()`. */
|
|
513
|
+
ensureIntensitySampling(imageInfo: IImageInfo, zIndex: number): Promise<void>;
|
|
514
|
+
/** @deprecated Use `getIntensitySampling().refreshIntensitySamplingForRoi()`. */
|
|
515
|
+
refreshIntensitySamplingForRoi(x: number, y: number, width: number, height: number, zIndex: number): void;
|
|
516
|
+
/** @deprecated Use `getIntensitySampling().getViewportChange$()`. */
|
|
517
|
+
getViewportChange$(): Observable<{
|
|
518
|
+
x: number;
|
|
519
|
+
y: number;
|
|
520
|
+
width: number;
|
|
521
|
+
height: number;
|
|
522
|
+
}>;
|
|
446
523
|
/** Spatial-omics controls when a `SPATIAL_DATA_PORT` is bound, else null.
|
|
447
524
|
* Optional: only the routing service implements it, since the state is shared
|
|
448
525
|
* rather than owned by any one backend. */
|
|
@@ -464,8 +541,98 @@ export interface IVisualizer extends IDataRenderer, IRegionStore, IToolControlle
|
|
|
464
541
|
/** Export the underlying image data as a data-preserving multi-band TIFF
|
|
465
542
|
* (native bit depth). No-op on backends that can't provide it. */
|
|
466
543
|
exportData(): void;
|
|
544
|
+
/**
|
|
545
|
+
* The view is going away (the `<visualizer>` is destroyed): drop what is bound to
|
|
546
|
+
* it — the on-screen viewer, its render loop and view subscriptions — so nothing
|
|
547
|
+
* outlives the view. Service-lifetime state (stores, the backends' own store
|
|
548
|
+
* subscriptions) is untouched, so a later view on the same chain renders normally.
|
|
549
|
+
*/
|
|
550
|
+
detach(): void;
|
|
551
|
+
/** @deprecated Use {@link detach}, which this delegates to. */
|
|
467
552
|
unsubscribe(): void;
|
|
468
553
|
}
|
|
554
|
+
/**
|
|
555
|
+
* What a rendering backend implements (Plotly, OpenSeadragon, napari-js): rendering,
|
|
556
|
+
* the viewport, pixel readback, export, loading state and its on-canvas tools, plus
|
|
557
|
+
* capability-gated getters for what only some backends have.
|
|
558
|
+
*
|
|
559
|
+
* It is the backend-facing half of {@link IVisualizer}. Region and display state are
|
|
560
|
+
* not here: they live in the shared `RegionStore` / `VisualizerStore`, which the router
|
|
561
|
+
* serves to hosts directly; a backend draws them by subscribing to the stores' events.
|
|
562
|
+
* Hosts keep depending on `IVisualizer` (the router's composite), never on a backend.
|
|
563
|
+
*/
|
|
564
|
+
export interface IViewerBackend extends IToolController {
|
|
565
|
+
readonly capabilities: ViewerCapabilities;
|
|
566
|
+
load(imageInfo: IImageInfo, zIndex: number, signal?: AbortSignal): Promise<LoadedImage>;
|
|
567
|
+
plot(plotDiv: string, imageLoaded: unknown, imageInfo: IImageInfo, screenHeight: number, plotType: PlotType, inPlace?: boolean): Promise<boolean>;
|
|
568
|
+
reset(): void;
|
|
569
|
+
relayout(trueImageSize?: number[]): void;
|
|
570
|
+
/** The view is going away: release what is bound to it. */
|
|
571
|
+
detach(): void;
|
|
572
|
+
/** Stop streaming frames (volume assembly / surface preload). Optional: only
|
|
573
|
+
* backends that stream a z-stack do work here. */
|
|
574
|
+
cancelLoading?(): void;
|
|
575
|
+
zoomIn(): void;
|
|
576
|
+
zoomOut(): void;
|
|
577
|
+
setDragMode(mode: string | false): void;
|
|
578
|
+
fitToView(): void;
|
|
579
|
+
/** @see IDataRenderer.resetAxes */
|
|
580
|
+
resetAxes(): void;
|
|
581
|
+
setZIndex(zIndex: number): void;
|
|
582
|
+
setShowStack(showstack: boolean): void;
|
|
583
|
+
/** Emits whenever the backend fits the view. */
|
|
584
|
+
getAutoscaleEvent(): Observable<unknown>;
|
|
585
|
+
isStackLoading(): Observable<boolean>;
|
|
586
|
+
getStackLoadingProgress(): Observable<number>;
|
|
587
|
+
getTrueImageSize(): {
|
|
588
|
+
width: number;
|
|
589
|
+
height: number;
|
|
590
|
+
} | null;
|
|
591
|
+
getCurrentImage(): Promise<Image | null>;
|
|
592
|
+
getDisplayedPixelData(): PixelData | null;
|
|
593
|
+
getDisplayedSourceRect(): {
|
|
594
|
+
x: number;
|
|
595
|
+
y: number;
|
|
596
|
+
width: number;
|
|
597
|
+
height: number;
|
|
598
|
+
} | null;
|
|
599
|
+
getHistogram(channelIndex: number, bins: number): IHistogram | null;
|
|
600
|
+
getHistogram$(channelIndex: number, bins: number): Observable<IHistogram | null>;
|
|
601
|
+
downloadImage(): void;
|
|
602
|
+
exportComposite(): void;
|
|
603
|
+
exportData(): void;
|
|
604
|
+
getRegionOverlay(): IRegionOverlay | null;
|
|
605
|
+
getIsosurfaceControls(): IIsosurfaceControls | null;
|
|
606
|
+
getSurface3dControls(): ISurface3dControls | null;
|
|
607
|
+
getIntensityControls(): IIntensityControls | null;
|
|
608
|
+
getPlotModeViewport?(): PlotModeViewport | null;
|
|
609
|
+
/** Navigator / image smoothing, or null when the backend has neither (Plotly). */
|
|
610
|
+
getOsdViewOptions(): IOsdViewOptions | null;
|
|
611
|
+
/** The 3D decimate factor, or null when the backend renders no volumes. */
|
|
612
|
+
getVolumeResolution(): IVolumeResolution | null;
|
|
613
|
+
/** Where the view settled, for the intensity inset's re-sampling; null when the
|
|
614
|
+
* backend re-samples on its own (Plotly's high-def zoom). The sampling itself is
|
|
615
|
+
* the router's (IntensityProfileService). */
|
|
616
|
+
getIntensitySampling(): IIntensityViewportSource | null;
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* What a mounted `<visualizer>` hands its host through
|
|
620
|
+
* `ImageStatePort.setDiagram()` — a small, typed surface rather than the component
|
|
621
|
+
* itself, whose every public member would otherwise be de-facto API. Cleared
|
|
622
|
+
* (`setDiagram(null)`) when the visualizer is destroyed. Hosts that can inject
|
|
623
|
+
* {@link VISUALIZER} / `REGION_EDITOR_API` directly need not use it at all.
|
|
624
|
+
*/
|
|
625
|
+
export interface VisualizerHandle {
|
|
626
|
+
/** The visualizer chain this `<visualizer>` renders through. */
|
|
627
|
+
readonly visualizer: IVisualizer;
|
|
628
|
+
/** @deprecated Use {@link visualizer}. Kept for hosts that read the component's
|
|
629
|
+
* former `plotService` field off the registered object. */
|
|
630
|
+
readonly plotService: IVisualizer;
|
|
631
|
+
/** Whether any region (annotation or intensity line) exists on the current image. */
|
|
632
|
+
hasRegions(): boolean;
|
|
633
|
+
/** The current regions as polygons, for a server request (crop / processing). */
|
|
634
|
+
getRegionPolygons(): Polygon[];
|
|
635
|
+
}
|
|
469
636
|
/**
|
|
470
637
|
* DI token for the active visualization backend. Bind it (`useExisting`) to the
|
|
471
638
|
* `RoutingVisualizerService`, which selects Plotly vs OpenSeadragon per plot
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Polygon } from '../models/region';
|
|
2
|
+
/**
|
|
3
|
+
* Trace EVERY 4-connected blob in `mask` (sized w*h) whose area is at least
|
|
4
|
+
* `minSize` pixels, returning one Polygon per blob translated via
|
|
5
|
+
* (originX, originY), ordered largest-first (ties in raster order). A blob's
|
|
6
|
+
* interior rings enclosing at least `minHoleSize` pixels become its
|
|
7
|
+
* {@link Polygon.holes}. An erase that cuts a region in two therefore yields
|
|
8
|
+
* both pieces, and a donut keeps its hole.
|
|
9
|
+
*
|
|
10
|
+
* The mask is labelled once and each blob traced inside its own bounding box
|
|
11
|
+
* (RT-16), so the cost is O(w·h + Σ bbox areas).
|
|
12
|
+
*/
|
|
13
|
+
export declare function maskToPolygons(mask: Uint8Array, w: number, h: number, originX: number, originY: number, minSize?: number, minHoleSize?: number): Polygon[];
|
|
14
|
+
/**
|
|
15
|
+
* Trace each instance in an integer label map (0 = background) into polygons —
|
|
16
|
+
* used to turn a cellpose-style segmentation into region outlines. Pieces with
|
|
17
|
+
* area below `minSize` are skipped (and holes below it dropped); a label made of
|
|
18
|
+
* several blobs yields one polygon per blob. Ordered by label, then largest
|
|
19
|
+
* piece first. Coords are translated via originX/originY (not clamped).
|
|
20
|
+
*
|
|
21
|
+
* One labelling pass finds every label's pieces; each is traced inside its own
|
|
22
|
+
* bounding box (RT-16), instead of rescanning the whole map per label.
|
|
23
|
+
*/
|
|
24
|
+
export declare function labelsToPolygons(labels: Uint32Array, w: number, h: number, originX: number, originY: number, minSize?: number): Polygon[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure binary-mask helpers: polygon rasterization (napari-js's `rasterizePolygon`)
|
|
3
|
+
* and bbox-relative mask set operations. No DOM, no Angular — the mask-export
|
|
4
|
+
* worker imports this.
|
|
5
|
+
*/
|
|
6
|
+
/** A bbox-relative binary mask (1 = filled, 0 = empty) whose pixel (0,0) sits
|
|
7
|
+
* at (bx, by) in the frame it was rasterized in. */
|
|
8
|
+
export interface BBoxMask {
|
|
9
|
+
bx: number;
|
|
10
|
+
by: number;
|
|
11
|
+
bw: number;
|
|
12
|
+
bh: number;
|
|
13
|
+
mask: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The largest bbox (in pixels) {@link rasterizePolygon} allocates before it
|
|
17
|
+
* falls back to clipping at the window. Also the cap the wand/brush use to
|
|
18
|
+
* decide whether a region can be edited at the current zoom.
|
|
19
|
+
*/
|
|
20
|
+
export declare const MAX_RASTER_PIXELS: number;
|
|
21
|
+
/**
|
|
22
|
+
* Rasterize a closed polygon (minus its holes) into a bbox-relative mask, e.g.
|
|
23
|
+
* as the starting point for a wand/brush stroke accumulator.
|
|
24
|
+
*
|
|
25
|
+
* Pixel (px, py) covers `[px, px + 1) × [py, py + 1)` and is set when its centre
|
|
26
|
+
* is inside — the rule under which the pixel-edge outlines `geometry/contour`
|
|
27
|
+
* traces come back as exactly the pixels they were traced from.
|
|
28
|
+
*
|
|
29
|
+
* Returns the bbox origin plus the filled mask, or null if the polygon is
|
|
30
|
+
* degenerate (covers no pixel centre). The polygon's full extent is kept even
|
|
31
|
+
* where it is negative or exceeds `imageWidth`×`imageHeight` (jit-ui#102); only
|
|
32
|
+
* a bbox larger than {@link MAX_RASTER_PIXELS} is clipped to that window (rare:
|
|
33
|
+
* a region enormous at the current zoom; accepts the clip).
|
|
34
|
+
*/
|
|
35
|
+
export declare function rasterizePolygon(xpoints: number[], ypoints: number[], imageWidth: number, imageHeight: number, holes?: number[][][]): BBoxMask | null;
|
|
36
|
+
/** Returns true if the two bbox-relative masks share at least one set pixel. */
|
|
37
|
+
export declare function masksOverlap(a: BBoxMask, b: BBoxMask): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Allocate a fresh accumulator covering both masks and OR them in. The
|
|
40
|
+
* resulting mask's bbox is the smallest rectangle containing both inputs.
|
|
41
|
+
*/
|
|
42
|
+
export declare function unionMasks(a: BBoxMask, b: BBoxMask): BBoxMask;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure ring (closed polyline) helpers: bounds, containment, vertex dropping and
|
|
3
|
+
* simplification. No DOM, no Angular, no `this` — usable from workers.
|
|
4
|
+
*
|
|
5
|
+
* A ring is a pair of parallel `xs`/`ys` arrays without a repeated closing
|
|
6
|
+
* vertex; hole rings use the `[[x, y], …]` convention of {@link Polygon.holes}.
|
|
7
|
+
*/
|
|
8
|
+
/** Axis-aligned bounds of a ring. Infinite (min > max) for an empty ring. */
|
|
9
|
+
export interface RingBounds {
|
|
10
|
+
minX: number;
|
|
11
|
+
minY: number;
|
|
12
|
+
maxX: number;
|
|
13
|
+
maxY: number;
|
|
14
|
+
}
|
|
15
|
+
/** The axis-aligned bounds of a ring's vertices. */
|
|
16
|
+
export declare function ringBounds(xs: ArrayLike<number>, ys: ArrayLike<number>): RingBounds;
|
|
17
|
+
/**
|
|
18
|
+
* Standard ray-cast (even-odd) point-in-ring test. (px, py) and the ring
|
|
19
|
+
* vertices must be in the same coordinate system. Rings with fewer than three
|
|
20
|
+
* vertices contain nothing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function pointInRing(px: number, py: number, xs: ArrayLike<number>, ys: ArrayLike<number>): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Point-in-region test that honours interior rings (holes): inside the
|
|
25
|
+
* exterior AND outside every hole. Coordinates must share the polygon's frame.
|
|
26
|
+
* With no holes this is exactly {@link pointInRing}.
|
|
27
|
+
*/
|
|
28
|
+
export declare function pointInPolygonWithHoles(px: number, py: number, xs: ArrayLike<number>, ys: ArrayLike<number>, holes?: number[][][]): boolean;
|
|
29
|
+
/** {@link pointInRing} over a `[[x, y], …]` ring (the hole convention), without splitting it. */
|
|
30
|
+
export declare function pointInPairRing(px: number, py: number, ring: ReadonlyArray<ArrayLike<number>>): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Drop every vertex whose Euclidean distance to (cx, cy) is less than
|
|
33
|
+
* `radius`. Returns trimmed parallel arrays plus how many vertices were
|
|
34
|
+
* removed (so the caller can detect a no-op tick and skip the relayout).
|
|
35
|
+
*/
|
|
36
|
+
export declare function dropVerticesWithinRadius(xpoints: number[], ypoints: number[], cx: number, cy: number, radius: number): {
|
|
37
|
+
xpoints: number[];
|
|
38
|
+
ypoints: number[];
|
|
39
|
+
removed: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Erase the part of a ring that lies within `radius` of (cx, cy): every vertex
|
|
43
|
+
* inside the disc goes (as {@link dropVerticesWithinRadius}), and the outline is
|
|
44
|
+
* rejoined where it crosses the disc's edge rather than at the next vertex left
|
|
45
|
+
* standing. On a densely sampled outline the two agree; on a sparse one (a
|
|
46
|
+
* traced box is four corners) dropping a corner would otherwise cut straight to
|
|
47
|
+
* the neighbouring corners. A `closed` ring wraps; an open one (a polyline) has
|
|
48
|
+
* no edge from its last vertex back to its first. Returns the trimmed parallel
|
|
49
|
+
* arrays plus how many of the ring's own vertices were removed (0: unchanged).
|
|
50
|
+
*/
|
|
51
|
+
export declare function eraseRingWithinRadius(xpoints: number[], ypoints: number[], cx: number, cy: number, radius: number, closed?: boolean): {
|
|
52
|
+
xpoints: number[];
|
|
53
|
+
ypoints: number[];
|
|
54
|
+
removed: number;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Simplify a closed ring with the Douglas–Peucker algorithm (jit-ui#85):
|
|
58
|
+
* drop every vertex that lies within `epsilon` pixels (the "altitude
|
|
59
|
+
* threshold") of the line between its kept neighbours. Anchored at vertex 0
|
|
60
|
+
* (the ring is closed by appending it). Rings of ≤ 3 vertices, or a
|
|
61
|
+
* non-positive epsilon, are returned unchanged. Output keeps the closed-ring
|
|
62
|
+
* convention (no repeated closing point).
|
|
63
|
+
*/
|
|
64
|
+
export declare function simplifyRing(xs: number[], ys: number[], epsilon: number): {
|
|
65
|
+
xs: number[];
|
|
66
|
+
ys: number[];
|
|
67
|
+
};
|