@jax-data-science/sci-image-visualizer 0.8.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -460
- package/esm2022/index.mjs +34 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +134 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +411 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
- package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +858 -414
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +53 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +144 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-source-scope.mjs +171 -0
- package/esm2022/lib/store/region-store.service.mjs +986 -670
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +123 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +602 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/region-source.worker.js +1067 -0
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +19 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +85 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +231 -54
- package/lib/contracts/viz-config.d.ts +9 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
- package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
- package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +25 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +45 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +57 -0
- package/lib/models/region.d.ts +59 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +283 -200
- package/lib/region-editor/region-metrics.d.ts +34 -0
- package/lib/region-editor/region-persistence.service.d.ts +77 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +158 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +248 -59
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +39 -2
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +65 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-source-scope.d.ts +68 -0
- package/lib/store/region-store.service.d.ts +312 -116
- package/lib/store/visualizer-store.service.d.ts +32 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +55 -84
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +46 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +232 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/assets/slice.svg +23 -0
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -1,98 +1,49 @@
|
|
|
1
1
|
import { WandOptions, WandService } from './wand.service';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import { UndoGestureTarget } from '../tool-kit/undo-gesture';
|
|
3
|
+
import { CanvasToolHost, ICanvasTool } from '../tool-kit/canvas-tool';
|
|
4
|
+
export type { CachedImageData } from '../tool-kit/canvas-tool';
|
|
5
|
+
/** @deprecated One host serves every canvas tool: use {@link CanvasToolHost}. */
|
|
6
|
+
export type WandToolHost = CanvasToolHost;
|
|
4
7
|
/**
|
|
5
|
-
* The
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
export interface CachedImageData {
|
|
9
|
-
/** 2-D matrices, one per stack frame (length 1 for non-stack images). */
|
|
10
|
-
frames: any[];
|
|
11
|
-
/** Image-pixel width of each frame matrix. */
|
|
12
|
-
width: number;
|
|
13
|
-
/** Image-pixel height of each frame matrix. */
|
|
14
|
-
height: number;
|
|
15
|
-
/**
|
|
16
|
-
* Plot-data-coords-per-image-pixel along x (and y — they're the same
|
|
17
|
-
* for heatmap and image traces).
|
|
18
|
-
*/
|
|
19
|
-
ratios: number[];
|
|
20
|
-
/** Whether each frame is a 2-D scalar matrix (true) or 3-channel RGB (false). */
|
|
21
|
-
isGrayscale: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Data-coords of matrix pixel (0,0). Lets the matrix be a *crop* of the data
|
|
24
|
-
* space rather than starting at the origin — e.g. the OSD backend samples the
|
|
25
|
-
* currently rendered viewport, so when zoomed in the matrix covers only the
|
|
26
|
-
* visible sub-region at screen resolution. Defaults to 0 (full-frame matrix,
|
|
27
|
-
* as Plotly provides). matrixIndex = (data - origin) / ratio.
|
|
28
|
-
*/
|
|
29
|
-
originX?: number;
|
|
30
|
-
originY?: number;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* The collaboration interface the wand tool needs from PlotlyService.
|
|
8
|
+
* The wand drawing tool. Owns its pointer overlay and stroke accumulator
|
|
9
|
+
* (shared with the brush, see {@link MaskStrokeEditor}). Reads/writes regions
|
|
10
|
+
* via its {@link CanvasToolHost} so it stays decoupled from the backends.
|
|
34
11
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* structurally and binds itself via `bindHost(this)`.
|
|
12
|
+
* A plain class: each backend's `CanvasToolManager` owns one instance and arms
|
|
13
|
+
* it with `activate(host, options)` / `deactivate()`.
|
|
38
14
|
*/
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
/** Index of the currently visible frame in a stack (0 for non-stack). */
|
|
43
|
-
getActiveFrameIndex(): number;
|
|
44
|
-
/** Current image's filename — stamped onto new shapes for filtering. */
|
|
45
|
-
getFileName(): string | undefined;
|
|
46
|
-
/** Default stroke colour for new shapes. */
|
|
47
|
-
getShapeColor(): string;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* The wand drawing tool. Owns its own canvas overlay, mouse handlers, and
|
|
51
|
-
* stroke accumulator. Reads/writes the shape list via the WandToolHost
|
|
52
|
-
* interface so it stays decoupled from PlotlyService internals.
|
|
53
|
-
*
|
|
54
|
-
* Lifecycle: PlotlyService injects this service, calls `bindHost(this)` once
|
|
55
|
-
* during its own construction, then calls `setMode(true | false, options)` to
|
|
56
|
-
* activate/deactivate the tool.
|
|
57
|
-
*/
|
|
58
|
-
export declare class WandToolService {
|
|
59
|
-
private wandService;
|
|
15
|
+
export declare class WandTool implements ICanvasTool<WandOptions> {
|
|
16
|
+
private readonly wandService;
|
|
17
|
+
readonly id = "wand";
|
|
60
18
|
private host;
|
|
61
|
-
private overlay;
|
|
62
|
-
private active;
|
|
19
|
+
private readonly overlay;
|
|
63
20
|
/**
|
|
64
|
-
* Accumulated wand region. Every per-tick patch mask is OR'd into
|
|
65
|
-
* over a bbox that grows with the stroke, so the region keeps expanding
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
21
|
+
* Accumulated wand region. Every per-tick patch mask is OR'd into the stroke
|
|
22
|
+
* over a bbox that grows with the stroke, so the region keeps expanding as
|
|
23
|
+
* the user drags. The accumulator persists across mouseup/mousedown so that
|
|
24
|
+
* subsequent strokes extend the *same* region — matching QuPath's brush
|
|
25
|
+
* behaviour where the active annotation stays editable until the user
|
|
26
|
+
* switches tool.
|
|
70
27
|
*/
|
|
71
|
-
private
|
|
72
|
-
/** Id of the region this wand stroke is editing (null = a fresh region). */
|
|
73
|
-
private strokeRegionId;
|
|
74
|
-
/** Readback ratio/origin signature the active stroke's matrix coords are tied to; a change
|
|
75
|
-
* (zoom/pan) invalidates the stroke so it isn't re-committed at a different scale (jit-ui#102). */
|
|
76
|
-
private strokeRatioSig;
|
|
28
|
+
private readonly editor;
|
|
77
29
|
private dragging;
|
|
78
30
|
private options;
|
|
79
|
-
|
|
80
|
-
private readonly
|
|
81
|
-
|
|
82
|
-
constructor(wandService: WandService);
|
|
83
|
-
/**
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
|
|
31
|
+
/** Makes each drag one undo step, however long the user pauses (RT-12). */
|
|
32
|
+
private readonly gesture;
|
|
33
|
+
/** @param gestureTarget the region store, so each drag is one undo step. */
|
|
34
|
+
constructor(wandService: WandService, gestureTarget?: UndoGestureTarget | null);
|
|
35
|
+
/** Arm the wand on `host` with `options` (replacing the previous options). */
|
|
36
|
+
activate(host: CanvasToolHost, options?: WandOptions): void;
|
|
37
|
+
/** Disarm: remove the overlay and drop the active region. */
|
|
38
|
+
deactivate(): void;
|
|
87
39
|
/** Merge new options (e.g. live sensitivity slider updates). */
|
|
88
40
|
setOptions(options: WandOptions): void;
|
|
89
41
|
/** Drop the active wand region so the next click starts a new one. */
|
|
90
|
-
|
|
42
|
+
reset(): void;
|
|
91
43
|
private createOverlay;
|
|
92
|
-
private
|
|
93
|
-
private
|
|
94
|
-
private
|
|
95
|
-
private onMouseUp;
|
|
44
|
+
private onPointerDown;
|
|
45
|
+
private onPointerMove;
|
|
46
|
+
private onPointerUp;
|
|
96
47
|
private resetStroke;
|
|
97
48
|
/**
|
|
98
49
|
* Sample the cached image at the click location, OR (or AND-NOT) the
|
|
@@ -102,48 +53,12 @@ export declare class WandToolService {
|
|
|
102
53
|
* exact-match flood fill.
|
|
103
54
|
*/
|
|
104
55
|
private applyAtClient;
|
|
105
|
-
/**
|
|
106
|
-
private
|
|
107
|
-
/**
|
|
108
|
-
* Remove the region referenced by `strokeRegionId` from the region list and
|
|
109
|
-
* reset the active stroke — used when an erase stroke deletes every pixel.
|
|
110
|
-
*/
|
|
111
|
-
private dropActiveShape;
|
|
112
|
-
/**
|
|
113
|
-
* Whether a region can be faithfully rasterized into the wand stroke at the current view
|
|
114
|
-
* resolution (rx/ry = data units per matrix pixel). Editing rasterizes the region to the
|
|
115
|
-
* viewport grid and re-traces it, so a region whose matrix-space bbox exceeds the rasterizer's
|
|
116
|
-
* cap would be clipped/down-quantized and come back rescaled/corrupted (jit-ui#102) — e.g. a
|
|
117
|
-
* whole-slide annotation while zoomed out. Skip adopt/merge for those: leave them untouched and
|
|
118
|
-
* only edit them near native zoom.
|
|
119
|
-
*/
|
|
120
|
-
private fitsForEdit;
|
|
121
|
-
/** A region's closed-polygon vertices (image/data coords), or null when it
|
|
122
|
-
* isn't a fillable closed polygon (rectangles, open polylines). */
|
|
123
|
-
private regionVerts;
|
|
124
|
-
/** Convert a region's hole rings from image/data coords into matrix coords so
|
|
125
|
-
* they line up with the stroke accumulator (jit-ui#85). */
|
|
126
|
-
private holesToMatrix;
|
|
127
|
-
/**
|
|
128
|
-
* If (matrixX, matrixY) falls inside an existing region, rasterize it into
|
|
129
|
-
* the wand stroke accumulator so subsequent wand input extends it rather than
|
|
130
|
-
* starting a new region.
|
|
131
|
-
*/
|
|
132
|
-
private tryAdoptShapeAt;
|
|
133
|
-
/**
|
|
134
|
-
* Iterate every region; if its rasterized mask overlaps the wand stroke mask
|
|
135
|
-
* by at least one pixel, OR it into the stroke and remove it from the list.
|
|
136
|
-
* Called every tick so chained merges resolve. If the wand has no region id
|
|
137
|
-
* yet, the merged region's id is adopted so the merged region replaces it.
|
|
138
|
-
*/
|
|
139
|
-
private mergeOverlappingShapes;
|
|
56
|
+
/** The visible frame of the readback, as the region grow reads it. */
|
|
57
|
+
private wandImage;
|
|
140
58
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* which we adopt so subsequent ticks replace the same region.
|
|
59
|
+
* OR (add) or AND-NOT (erase) the patch mask, centred on matrix point
|
|
60
|
+
* (cx, cy), into the stroke, growing the stroke to cover it first when
|
|
61
|
+
* adding. False when a fresh stroke has nothing inside the readback.
|
|
145
62
|
*/
|
|
146
|
-
private
|
|
147
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<WandToolService, never>;
|
|
148
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<WandToolService>;
|
|
63
|
+
private stampPatch;
|
|
149
64
|
}
|
|
@@ -1,133 +1,39 @@
|
|
|
1
1
|
import { Polygon } from '../../models/region';
|
|
2
|
-
import {
|
|
2
|
+
import { BBoxMask } from '../../geometry/raster';
|
|
3
|
+
import { WandImage, WandOptions, WandPatchMask } from './wand-region-grow';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
export type { WandType };
|
|
5
|
-
export type WandOptions = IWandOptions;
|
|
6
|
-
export interface WandImage {
|
|
7
|
-
/**
|
|
8
|
-
* Grayscale: number[][] where data[y][x] is intensity.
|
|
9
|
-
* RGB: [r,g,b][][] where data[y][x] is a 3-tuple.
|
|
10
|
-
*/
|
|
11
|
-
data: number[][] | number[][][];
|
|
12
|
-
width: number;
|
|
13
|
-
height: number;
|
|
14
|
-
isGrayscale: boolean;
|
|
15
|
-
}
|
|
5
|
+
export type { WandImage, WandOptions, WandPatchMask, WandType } from './wand-region-grow';
|
|
16
6
|
/**
|
|
17
|
-
*
|
|
7
|
+
* Thin DI façade over the wand's pure modules, kept for one release so the
|
|
8
|
+
* injected consumers (the canvas tools, the backends) keep compiling.
|
|
9
|
+
*
|
|
10
|
+
* - region grow: `toolbar/wand/wand-region-grow`
|
|
11
|
+
* - rasterizer: `geometry/raster`; ring tests: `geometry/ring`
|
|
12
|
+
* - contour tracing: `geometry/contour`
|
|
18
13
|
*
|
|
19
|
-
*
|
|
20
|
-
* click, optionally blurs it, computes a local threshold, runs a fixed-range
|
|
21
|
-
* flood fill from the centre, closes the resulting mask, and returns the
|
|
22
|
-
* traced contour as a polygon in image coordinates.
|
|
14
|
+
* @deprecated Import the pure functions instead; this service will be removed.
|
|
23
15
|
*/
|
|
24
16
|
export declare class WandService {
|
|
25
|
-
/**
|
|
26
|
-
* @param image full-image pixel matrix (already in memory).
|
|
27
|
-
* @param cx click x in image-pixel coordinates.
|
|
28
|
-
* @param cy click y in image-pixel coordinates.
|
|
29
|
-
* @param options wand parameters; missing fields fall back to defaults.
|
|
30
|
-
* @returns a Polygon in image-pixel coordinates, or null if no region grew.
|
|
31
|
-
*/
|
|
17
|
+
/** See {@link computeWandRegion} in `toolbar/wand/wand-region-grow`. */
|
|
32
18
|
computeRegion(image: WandImage, cx: number, cy: number, options?: WandOptions): Polygon | null;
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
* for accumulating per-tick masks across a brush-style stroke.
|
|
37
|
-
*
|
|
38
|
-
* @returns mask of size W*W (0/1) plus W, or null if patchSize is invalid.
|
|
39
|
-
*/
|
|
40
|
-
computePatchMask(image: WandImage, cx: number, cy: number, options?: WandOptions): {
|
|
41
|
-
mask: Uint8Array;
|
|
42
|
-
size: number;
|
|
43
|
-
} | null;
|
|
44
|
-
/**
|
|
45
|
-
* Standard ray-cast point-in-polygon test. (px, py) and the polygon
|
|
46
|
-
* vertices must be in the same coordinate system.
|
|
47
|
-
*/
|
|
19
|
+
/** See {@link computeWandPatchMask} in `toolbar/wand/wand-region-grow`. */
|
|
20
|
+
computePatchMask(image: WandImage, cx: number, cy: number, options?: WandOptions): WandPatchMask | null;
|
|
21
|
+
/** Ray-cast point-in-ring test; see {@link pointInRing}. */
|
|
48
22
|
pointInPolygon(px: number, py: number, xpoints: number[], ypoints: number[]): boolean;
|
|
49
|
-
/**
|
|
50
|
-
* Drop every vertex whose Euclidean distance to (cx, cy) is less than
|
|
51
|
-
* `radius`. Returns trimmed parallel arrays plus how many vertices were
|
|
52
|
-
* removed (so the caller can detect a no-op tick and skip the relayout).
|
|
53
|
-
*/
|
|
23
|
+
/** See {@link dropVerticesWithinRadius} in `geometry/ring`. */
|
|
54
24
|
dropVerticesWithinRadius(xpoints: number[], ypoints: number[], cx: number, cy: number, radius: number): {
|
|
55
25
|
xpoints: number[];
|
|
56
26
|
ypoints: number[];
|
|
57
27
|
removed: number;
|
|
58
28
|
};
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
*
|
|
63
|
-
* Returns the bbox origin (clamped to the image) plus the filled mask, or
|
|
64
|
-
* null if the polygon is degenerate or fully outside the image.
|
|
65
|
-
*/
|
|
66
|
-
rasterizePolygon(xpoints: number[], ypoints: number[], imageWidth: number, imageHeight: number, holes?: number[][][]): {
|
|
67
|
-
bx: number;
|
|
68
|
-
by: number;
|
|
69
|
-
bw: number;
|
|
70
|
-
bh: number;
|
|
71
|
-
mask: Uint8Array;
|
|
72
|
-
} | null;
|
|
73
|
-
/**
|
|
74
|
-
* Point-in-region test that honours interior rings (holes): inside the
|
|
75
|
-
* exterior AND outside every hole (even-odd). Coordinates must share the
|
|
76
|
-
* polygon's frame. With no holes this is exactly {@link pointInPolygon}.
|
|
77
|
-
*/
|
|
29
|
+
/** See {@link rasterizePolygon} in `geometry/raster`. */
|
|
30
|
+
rasterizePolygon(xpoints: number[], ypoints: number[], imageWidth: number, imageHeight: number, holes?: number[][][]): BBoxMask | null;
|
|
31
|
+
/** See {@link pointInPolygonWithHoles} in `geometry/ring`. */
|
|
78
32
|
pointInPolygonWithHoles(px: number, py: number, xpoints: number[], ypoints: number[], holes?: number[][][]): boolean;
|
|
79
|
-
/**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
* panned/zoomed keeps its true coordinates even where they fall outside the visible
|
|
84
|
-
* window (jit-ui#102). `imageWidth`/`imageHeight` are kept for signature compatibility
|
|
85
|
-
* but no longer used.
|
|
86
|
-
*/
|
|
87
|
-
maskToPolygon(mask: Uint8Array, w: number, h: number, _imageWidth: number, _imageHeight: number, originX: number, originY: number): Polygon | null;
|
|
88
|
-
/**
|
|
89
|
-
* Trace EVERY 4-connected blob in `mask` (sized w*h) whose area is at least
|
|
90
|
-
* `minSize` pixels, returning one Polygon per blob in image-pixel coordinates
|
|
91
|
-
* (translated via originX/originY, clamped to imageWidth/imageHeight), ordered
|
|
92
|
-
* largest-first. Unlike {@link maskToPolygon} (largest blob only), this lets
|
|
93
|
-
* the brush eraser split a region in two when a stroke cuts through it rather
|
|
94
|
-
* than discarding the smaller piece.
|
|
95
|
-
*/
|
|
96
|
-
maskToPolygons(mask: Uint8Array, w: number, h: number, imageWidth: number, imageHeight: number, originX: number, originY: number, minSize?: number, minHoleSize?: number): Polygon[];
|
|
97
|
-
/**
|
|
98
|
-
* Find interior rings (holes) of each foreground component in `mask`: a
|
|
99
|
-
* 4-connected run of background (0) pixels that is fully enclosed — i.e. not
|
|
100
|
-
* reachable from the grid border through background — is a hole, attributed to
|
|
101
|
-
* the foreground component that borders it most. Returns `fgLabel → rings`,
|
|
102
|
-
* each ring a list of `[x, y]` image-pixel pairs (same convention as a
|
|
103
|
-
* polygon's `coordinates`). Holes smaller than `minHoleSize` are dropped.
|
|
104
|
-
*/
|
|
105
|
-
private detectHoles;
|
|
106
|
-
/**
|
|
107
|
-
* Trace each instance in an integer label map (0 = background) into a Polygon
|
|
108
|
-
* — used to turn a cellpose-style segmentation into region outlines. Labels
|
|
109
|
-
* with area below `minSize` are skipped. Coords are translated via
|
|
110
|
-
* originX/originY and clamped to imageWidth/imageHeight.
|
|
111
|
-
*/
|
|
112
|
-
labelsToPolygons(labels: Uint32Array, w: number, h: number, imageWidth: number, imageHeight: number, originX: number, originY: number, minSize?: number): Polygon[];
|
|
113
|
-
private extractPatch;
|
|
114
|
-
private gaussianBlur;
|
|
115
|
-
private perChannelThreshold;
|
|
116
|
-
private labDistanceMap;
|
|
117
|
-
/**
|
|
118
|
-
* Fixed-range scanline flood fill from the patch centre. A neighbour is
|
|
119
|
-
* accepted iff for every channel `|p[c] - seed[c]| <= threshold[c]`.
|
|
120
|
-
*/
|
|
121
|
-
private floodFill;
|
|
122
|
-
private morphClose;
|
|
123
|
-
private dilate;
|
|
124
|
-
private erode;
|
|
125
|
-
/**
|
|
126
|
-
* Returns the outer boundary of the largest 4-connected blob in the mask
|
|
127
|
-
* sized w*h.
|
|
128
|
-
*/
|
|
129
|
-
private traceContour;
|
|
130
|
-
private mooreBoundary;
|
|
33
|
+
/** See {@link maskToPolygons} in `geometry/contour`. */
|
|
34
|
+
maskToPolygons(mask: Uint8Array, w: number, h: number, originX: number, originY: number, minSize?: number, minHoleSize?: number): Polygon[];
|
|
35
|
+
/** See {@link labelsToPolygons} in `geometry/contour`. */
|
|
36
|
+
labelsToPolygons(labels: Uint32Array, w: number, h: number, originX: number, originY: number, minSize?: number): Polygon[];
|
|
131
37
|
static ɵfac: i0.ɵɵFactoryDeclaration<WandService, never>;
|
|
132
38
|
static ɵprov: i0.ɵɵInjectableDeclaration<WandService>;
|
|
133
39
|
}
|
|
@@ -1,49 +1,29 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { CanvasToolHost, ICanvasTool } from '../tool-kit/canvas-tool';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* @deprecated One host serves every canvas tool: use {@link CanvasToolHost}.
|
|
4
|
+
* The overlay now attaches to `getOverlayContainer()` (formerly the element
|
|
5
|
+
* with id `getPlotDiv()`), and `pixelToData` / `applyZoomToBox` are its
|
|
6
|
+
* optional zoom-to-box members.
|
|
4
7
|
*/
|
|
5
|
-
export
|
|
6
|
-
/** DOM id of the plot element the overlay canvas attaches to. */
|
|
7
|
-
getPlotDiv(): string;
|
|
8
|
-
/**
|
|
9
|
-
* Convert an overlay-pixel point (relative to the plot element's top-left)
|
|
10
|
-
* into the backend's data coordinates — Plotly axis data for Plotly,
|
|
11
|
-
* image-pixel coords for OpenSeadragon. Keeps the tool backend-agnostic.
|
|
12
|
-
*/
|
|
13
|
-
pixelToData(px: number, py: number): {
|
|
14
|
-
x: number;
|
|
15
|
-
y: number;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Apply the user-selected zoom rectangle, ordered `[xMin, xMax, yMax, yMin]`.
|
|
19
|
-
* The host decides what that means: Plotly does a high-def re-fetch / axis
|
|
20
|
-
* relayout, OpenSeadragon fits the viewport to the image rectangle.
|
|
21
|
-
*/
|
|
22
|
-
applyZoomToBox(coordinates: number[]): void;
|
|
23
|
-
}
|
|
8
|
+
export type ZoomToBoxToolHost = CanvasToolHost;
|
|
24
9
|
/**
|
|
25
10
|
* Custom canvas overlay for click-and-drag rectangular zoom. Plotly's
|
|
26
11
|
* built-in `dragmode: 'zoom'` works on heatmap/image traces too, but it
|
|
27
12
|
* doesn't drive the high-def zoom pipeline — this overlay does, by handing
|
|
28
13
|
* the selected coordinates back to the host.
|
|
29
14
|
*/
|
|
30
|
-
export declare class
|
|
15
|
+
export declare class ZoomToBoxTool implements ICanvasTool<void> {
|
|
16
|
+
readonly id = "zoomToBox";
|
|
31
17
|
private host;
|
|
32
|
-
private overlay;
|
|
18
|
+
private readonly overlay;
|
|
33
19
|
private startPx;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
private
|
|
42
|
-
private onMouseDown;
|
|
43
|
-
private onMouseMove;
|
|
44
|
-
private onMouseUp;
|
|
20
|
+
/** Lay the selection overlay over `host`'s plot. */
|
|
21
|
+
activate(host: CanvasToolHost): void;
|
|
22
|
+
/** Remove the overlay and any half-drawn box. */
|
|
23
|
+
deactivate(): void;
|
|
24
|
+
/** Primary button only (the overlay filters the others). */
|
|
25
|
+
private onPointerDown;
|
|
26
|
+
private onPointerMove;
|
|
27
|
+
private onPointerUp;
|
|
45
28
|
private drawSelection;
|
|
46
|
-
private clearCanvas;
|
|
47
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ZoomToBoxToolService, never>;
|
|
48
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<ZoomToBoxToolService>;
|
|
49
29
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChangeDetectorRef, NgZone } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Mark an OnPush view for check, from wherever the change came from.
|
|
4
|
+
*
|
|
5
|
+
* `markForCheck()` only flags the view; a change-detection pass runs when the zone next
|
|
6
|
+
* settles. A change that arrives outside the zone — a store emission from an overlay's
|
|
7
|
+
* pointer handler, an OpenSeadragon or napari-js callback, a host stream — settles no
|
|
8
|
+
* zone, so the view would keep showing stale state until some unrelated event runs
|
|
9
|
+
* change detection. Re-entering the zone in that case schedules the pass.
|
|
10
|
+
*/
|
|
11
|
+
export declare function markForCheckInZone(cdr: ChangeDetectorRef, zone: NgZone): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One task of a {@link Supersede}: the check a load makes after each await, and the
|
|
3
|
+
* signal it hands to whatever it awaits so that work can stop too, not just its result.
|
|
4
|
+
*
|
|
5
|
+
* Callable for compatibility with the first version of this helper, whose `next()`
|
|
6
|
+
* returned the bare check: `task()` is `task.isCurrent()`.
|
|
7
|
+
*/
|
|
8
|
+
export interface SupersedeTask {
|
|
9
|
+
(): boolean;
|
|
10
|
+
/** True until a newer task starts or the owner {@link Supersede.cancel cancels}. */
|
|
11
|
+
isCurrent(): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Aborted at the moment this task stops being current. Pass it to `fetch`, a worker
|
|
14
|
+
* call or `IDataRenderer.load()` so superseded work is dropped at the source.
|
|
15
|
+
*/
|
|
16
|
+
readonly signal: AbortSignal;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* "Latest wins" sequencing for one async concern.
|
|
20
|
+
*
|
|
21
|
+
* Every load that can be overtaken — a fetch the user changes their mind about before it
|
|
22
|
+
* lands — takes a task from {@link next} before its first await and checks it after each
|
|
23
|
+
* one. A newer task, or {@link cancel}, makes every older one stale and aborts its
|
|
24
|
+
* {@link SupersedeTask.signal}, so a slow response cannot paint over what the user has
|
|
25
|
+
* moved on to, and work that honours the signal stops instead of finishing for nobody.
|
|
26
|
+
*
|
|
27
|
+
* One instance per concern, never shared: two unrelated loads on one instance cancel each
|
|
28
|
+
* other, which is how a redraw used to drop a pending colour-source load. A dataset switch
|
|
29
|
+
* cancels all of them together.
|
|
30
|
+
*/
|
|
31
|
+
export declare class Supersede {
|
|
32
|
+
private generation;
|
|
33
|
+
private controller;
|
|
34
|
+
/**
|
|
35
|
+
* Start a task, superseding (and aborting) every earlier one.
|
|
36
|
+
*
|
|
37
|
+
* @returns the new task; it stays current until a newer task starts or
|
|
38
|
+
* {@link cancel} runs.
|
|
39
|
+
*/
|
|
40
|
+
next(): SupersedeTask;
|
|
41
|
+
/**
|
|
42
|
+
* The task of the current generation, WITHOUT starting a new one: a snapshot that goes
|
|
43
|
+
* stale (and aborts) on the next {@link next} or {@link cancel}. For work that belongs
|
|
44
|
+
* to whatever is current rather than competing with it — a cache fill that must not
|
|
45
|
+
* outlive the dataset it was started for, say.
|
|
46
|
+
*/
|
|
47
|
+
current(): SupersedeTask;
|
|
48
|
+
/** Make every task started so far stale and abort its signal, without starting one. */
|
|
49
|
+
cancel(): void;
|
|
50
|
+
/** @deprecated Use {@link cancel}; kept for one release. */
|
|
51
|
+
invalidate(): void;
|
|
52
|
+
private advance;
|
|
53
|
+
}
|
|
@@ -1,49 +1,28 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./visualizer.component";
|
|
3
|
-
import * as i2 from "./
|
|
4
|
-
import * as i3 from "./
|
|
5
|
-
import * as i4 from "./
|
|
6
|
-
import * as i5 from "./
|
|
7
|
-
import * as i6 from "./spatial-controls/spatial-
|
|
8
|
-
import * as i7 from "./spatial-controls/spatial-charts/spatial-charts.component";
|
|
9
|
-
import * as i8 from "@angular/common";
|
|
10
|
-
import * as i9 from "@angular/forms";
|
|
11
|
-
import * as i10 from "primeng/toolbar";
|
|
12
|
-
import * as i11 from "primeng/button";
|
|
13
|
-
import * as i12 from "primeng/menu";
|
|
14
|
-
import * as i13 from "primeng/dropdown";
|
|
15
|
-
import * as i14 from "primeng/slider";
|
|
16
|
-
import * as i15 from "primeng/treeselect";
|
|
17
|
-
import * as i16 from "primeng/inputnumber";
|
|
18
|
-
import * as i17 from "primeng/dialog";
|
|
19
|
-
import * as i18 from "primeng/contextmenu";
|
|
20
|
-
import * as i19 from "primeng/progressbar";
|
|
21
|
-
import * as i20 from "primeng/toast";
|
|
22
|
-
import * as i21 from "primeng/tooltip";
|
|
23
|
-
import * as i22 from "primeng/ripple";
|
|
24
|
-
import * as i23 from "primeng/table";
|
|
25
|
-
import * as i24 from "primeng/paginator";
|
|
26
|
-
import * as i25 from "primeng/overlaypanel";
|
|
27
|
-
import * as i26 from "primeng/confirmdialog";
|
|
28
|
-
import * as i27 from "primeng/inputtext";
|
|
29
|
-
import * as i28 from "primeng/checkbox";
|
|
30
|
-
import * as i29 from "primeng/multiselect";
|
|
31
|
-
import * as i30 from "primeng/radiobutton";
|
|
32
|
-
import * as i31 from "primeng/selectbutton";
|
|
33
|
-
import * as i32 from "primeng/autocomplete";
|
|
3
|
+
import * as i2 from "./region-editor/region-editor.component";
|
|
4
|
+
import * as i3 from "./hex-color-picker/hex-color-picker.component";
|
|
5
|
+
import * as i4 from "./channel-histogram/channel-histogram.component";
|
|
6
|
+
import * as i5 from "./spatial-controls/spatial-controls.component";
|
|
7
|
+
import * as i6 from "./spatial-controls/spatial-charts/spatial-charts.component";
|
|
34
8
|
/**
|
|
35
9
|
* Self-contained plotting UI: the {@link VisualizerComponent} (plot surface
|
|
36
|
-
* + render orchestration
|
|
37
|
-
*
|
|
38
|
-
* `<
|
|
39
|
-
*
|
|
10
|
+
* + render orchestration, with its toolbar), the {@link RegionEditorComponent}
|
|
11
|
+
* (the Regions table/editor), {@link HexColorPickerComponent}
|
|
12
|
+
* (`<hex-color-picker>`, `[color]` in, `(colorChange)` out),
|
|
13
|
+
* {@link ChannelHistogramComponent}, {@link SpatialControlsComponent} and
|
|
14
|
+
* {@link SpatialChartsComponent}. Consumers embed `<visualizer>` /
|
|
15
|
+
* `<region-editor>` and need know nothing about the toolbar, the rendering
|
|
16
|
+
* backends, or region file I/O (supplied via the REGION_IO_PORT).
|
|
40
17
|
*
|
|
41
|
-
*
|
|
42
|
-
* standalone
|
|
43
|
-
*
|
|
18
|
+
* @deprecated A re-export shim, kept for one minor release: every component is
|
|
19
|
+
* standalone now. Import the components themselves (`imports: [VisualizerComponent]`)
|
|
20
|
+
* and bind the backend chain with {@link provideVisualization} — in the application's
|
|
21
|
+
* providers for one app-wide viewer chain, or a component's for an isolated one —
|
|
22
|
+
* instead of the root bindings this module adds.
|
|
44
23
|
*/
|
|
45
24
|
export declare class VisualizationModule {
|
|
46
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<VisualizationModule, never>;
|
|
47
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<VisualizationModule, [typeof i1.VisualizerComponent, typeof i2.
|
|
26
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<VisualizationModule, never, [typeof i1.VisualizerComponent, typeof i2.RegionEditorComponent, typeof i3.HexColorPickerComponent, typeof i4.ChannelHistogramComponent, typeof i5.SpatialControlsComponent, typeof i6.SpatialChartsComponent], [typeof i1.VisualizerComponent, typeof i2.RegionEditorComponent, typeof i3.HexColorPickerComponent, typeof i4.ChannelHistogramComponent, typeof i5.SpatialControlsComponent, typeof i6.SpatialChartsComponent]>;
|
|
48
27
|
static ɵinj: i0.ɵɵInjectorDeclaration<VisualizationModule>;
|
|
49
28
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EventEmitter, NgZone, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** A screen position, in CSS pixels. */
|
|
4
|
+
export interface FloatingPos {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Drag handle of a floating, `position: fixed` panel (the intensity inset header,
|
|
10
|
+
* the toolbar dock handle). On mousedown it asks {@link origin} where the panel is —
|
|
11
|
+
* the host may detach a docked panel right there — then emits the new position on
|
|
12
|
+
* every move until mouseup.
|
|
13
|
+
*
|
|
14
|
+
* The move/up listeners exist only while a drag is in progress and run outside the
|
|
15
|
+
* Angular zone, re-entering it per emitted position: a permanent window mousemove
|
|
16
|
+
* listener made every pointer move anywhere in the host app run change detection.
|
|
17
|
+
*/
|
|
18
|
+
export declare class FloatingDragDirective implements OnDestroy {
|
|
19
|
+
private readonly zone;
|
|
20
|
+
/** Called on mousedown: the panel's position the drag starts from. */
|
|
21
|
+
origin: () => FloatingPos;
|
|
22
|
+
/** The panel's new position, per pointer move. */
|
|
23
|
+
readonly vizFloatingDragMove: EventEmitter<FloatingPos>;
|
|
24
|
+
private end;
|
|
25
|
+
constructor(zone: NgZone);
|
|
26
|
+
onMouseDown(e: MouseEvent): void;
|
|
27
|
+
ngOnDestroy(): void;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FloatingDragDirective, never>;
|
|
29
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FloatingDragDirective, "[vizFloatingDrag]", never, { "origin": { "alias": "vizFloatingDrag"; "required": false; }; }, { "vizFloatingDragMove": "vizFloatingDragMove"; }, never, never, true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { Message } from 'primeng/api';
|
|
3
|
+
import { IRegionStore } from '../contracts/visualizer.contract';
|
|
4
|
+
import { Region } from '../models/region';
|
|
5
|
+
import { RegionOpsService } from '../region-ops.service';
|
|
6
|
+
/** The region-store members the set-operations read and write through. */
|
|
7
|
+
export type RegionActionsTarget = Pick<IRegionStore, 'getRegions' | 'setRegions' | 'setSelectedShapeIndices' | 'getSelectedShapeIndices$' | 'getCanUndo$' | 'getCanRedo$'>;
|
|
8
|
+
/**
|
|
9
|
+
* Region set-operations on the current selection (jit-ui#85) — select all, merge,
|
|
10
|
+
* ungroup, inverse, simplify — plus the store mirrors the toolbar and the context
|
|
11
|
+
* menu read synchronously: the selection and the undo/redo availability.
|
|
12
|
+
*
|
|
13
|
+
* Every operation commits through `setRegions`, so it is undo-tracked and the
|
|
14
|
+
* backend on screen re-renders; profile lines and unselected regions are kept.
|
|
15
|
+
*/
|
|
16
|
+
export declare class RegionActions {
|
|
17
|
+
private readonly target;
|
|
18
|
+
private readonly ops;
|
|
19
|
+
/** `[width, height]` of the image, when known — the frame inverse and merge rasterize in. */
|
|
20
|
+
private readonly imageSize;
|
|
21
|
+
private readonly notify;
|
|
22
|
+
/** Current selection (array indices), mirrored from the store. */
|
|
23
|
+
selectedIndices: number[];
|
|
24
|
+
/** Whether a region action is available to undo / redo; drive the toolbar buttons. */
|
|
25
|
+
canUndo: boolean;
|
|
26
|
+
canRedo: boolean;
|
|
27
|
+
/** Custom-threshold Simplify dialog. */
|
|
28
|
+
displaySimplifyDialog: boolean;
|
|
29
|
+
simplifyThreshold: number;
|
|
30
|
+
constructor(target: RegionActionsTarget, ops: RegionOpsService,
|
|
31
|
+
/** `[width, height]` of the image, when known — the frame inverse and merge rasterize in. */
|
|
32
|
+
imageSize: () => number[] | undefined, notify: (message: Message) => void);
|
|
33
|
+
/** Mirror the store's selection and undo/redo depth until `until$` emits.
|
|
34
|
+
* `changed` runs after an undo/redo flip (the toolbar binds those). */
|
|
35
|
+
bind(until$: Observable<unknown>, changed: () => void): void;
|
|
36
|
+
/** The currently-selected regions (live store instances). */
|
|
37
|
+
get selected(): Region[];
|
|
38
|
+
/** Select every region on the image (excludes intensity-profile lines). */
|
|
39
|
+
selectAll(): void;
|
|
40
|
+
/** Merge the selected regions into a single (possibly multi-part) region. */
|
|
41
|
+
merge(): void;
|
|
42
|
+
/** Split each selected multi-part region into one region per part. */
|
|
43
|
+
ungroup(): void;
|
|
44
|
+
/** Replace the selection with its inverse inside the image rectangle. */
|
|
45
|
+
inverse(): void;
|
|
46
|
+
/** Douglas–Peucker simplify each selected region by `thresholdPx`, closing the dialog. */
|
|
47
|
+
simplify(thresholdPx: number): void;
|
|
48
|
+
openSimplifyDialog(): void;
|
|
49
|
+
/** Commit a set-op: drop `remove`, append `add`, and select the results. */
|
|
50
|
+
private replace;
|
|
51
|
+
/** Image pixel dimensions for the raster ops; falls back to the selection's extent
|
|
52
|
+
* when the image size isn't known (keeps clamping sane). */
|
|
53
|
+
private frame;
|
|
54
|
+
}
|