@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,112 +1,162 @@
|
|
|
1
1
|
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
-
import { OverlayPanel } from 'primeng/overlaypanel';
|
|
3
2
|
import { Region } from '../models/region';
|
|
4
3
|
import { PresetSet, ClassPreset } from '../models/class-preset';
|
|
5
4
|
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
6
5
|
import { IRegionEditorApi } from '../contracts/region-editor-api.contract';
|
|
7
|
-
import {
|
|
6
|
+
import { RegionPersistenceService } from './region-persistence.service';
|
|
7
|
+
import { ClassColorEdit } from './region-color-dialog/region-color-dialog.component';
|
|
8
|
+
import { ClassTreePick } from './class-tree/class-tree.component';
|
|
9
|
+
import type { RegionSourceView } from '../region-source/region-source';
|
|
10
|
+
import type { RegionClassNode } from '../region-source/region-tiles';
|
|
11
|
+
import { MaskExportService, MaskMode } from './mask-export.service';
|
|
12
|
+
import { PixelSize } from './region-metrics';
|
|
8
13
|
import * as i0 from "@angular/core";
|
|
9
14
|
export declare class RegionEditorComponent implements OnInit, OnDestroy {
|
|
10
15
|
private regionApi;
|
|
11
|
-
messageService
|
|
16
|
+
private messageService;
|
|
12
17
|
private confirmationService;
|
|
13
|
-
private
|
|
14
|
-
|
|
15
|
-
overlayPanel
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
private persistence;
|
|
19
|
+
private maskExport;
|
|
20
|
+
private overlayPanel;
|
|
21
|
+
/**
|
|
22
|
+
* Whether the editor is on screen (its dialog open). Closed, it asks the region source nothing:
|
|
23
|
+
* its page of features, its class counts and, in a volume view, its classes' volumes are each a
|
|
24
|
+
* request over the whole set (a stack's every slice), and they competed with the volume's own
|
|
25
|
+
* slice loading for nothing anyone could see. Opened, it reads them again.
|
|
26
|
+
*/
|
|
27
|
+
set active(value: boolean);
|
|
28
|
+
private isActive;
|
|
29
|
+
protected regions: Region[];
|
|
30
|
+
protected selectedRegions: Region[];
|
|
31
|
+
protected showShapeLabel: boolean;
|
|
32
|
+
protected shapeColor: string;
|
|
33
|
+
protected fillColor: string;
|
|
34
|
+
protected displayHelpDialog: boolean;
|
|
35
|
+
protected showColorDialog: boolean;
|
|
24
36
|
/** One colour editor per unique class among the selected regions, shown in the
|
|
25
37
|
* "edit colour of selected regions" dialog. Unclassified regions (no label)
|
|
26
38
|
* are grouped under a single entry with an empty `label`. */
|
|
27
|
-
classColorEdits:
|
|
28
|
-
label: string;
|
|
29
|
-
color: string;
|
|
30
|
-
}[];
|
|
31
|
-
labelColors: Map<string, string>;
|
|
32
|
-
selectedLabelColor: string;
|
|
39
|
+
protected classColorEdits: ClassColorEdit[];
|
|
33
40
|
/** "Edit class on selected rows" popup: chosen existing class, and a new-class name. */
|
|
34
|
-
bulkClass: string;
|
|
35
|
-
newBulkClass: string;
|
|
41
|
+
protected bulkClass: string;
|
|
42
|
+
protected newBulkClass: string;
|
|
36
43
|
/** Local mirror of the per-user preset set (chip strip, Class dropdown, dialog). */
|
|
37
|
-
presetSet: PresetSet;
|
|
38
|
-
/**
|
|
39
|
-
activeClass: string | null;
|
|
40
|
-
showManageDialog: boolean;
|
|
44
|
+
protected presetSet: PresetSet;
|
|
45
|
+
/** The class last picked in the panel; a chip-click applies it to the selected rows. */
|
|
46
|
+
protected activeClass: string | null;
|
|
47
|
+
protected showManageDialog: boolean;
|
|
41
48
|
/** Working copy edited inside the Manage-classes dialog; committed on Apply/Done. */
|
|
42
|
-
presetDraft: PresetSet | null;
|
|
49
|
+
protected presetDraft: PresetSet | null;
|
|
43
50
|
/** class name (match-mode keyed) → number of regions currently using it. */
|
|
44
|
-
classCounts: Map<string, number>;
|
|
51
|
+
protected classCounts: Map<string, number>;
|
|
45
52
|
/** Fallback class that a region reverts to when its class is deleted (jit-ui#70). */
|
|
46
|
-
readonly defaultClassName = "Region";
|
|
53
|
+
protected readonly defaultClassName = "Region";
|
|
47
54
|
/** Classes as shown in the panel: sorted by region count (desc), then name. */
|
|
48
|
-
displayClasses: ClassPreset[];
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
protected displayClasses: ClassPreset[];
|
|
56
|
+
protected paginatorFirst: number;
|
|
57
|
+
protected paginatorRows: number;
|
|
58
|
+
protected readonly rowsPerPageOptions: number[];
|
|
59
|
+
/** Regions whose Class cell is currently in edit mode → the label being typed.
|
|
60
|
+
* The draft is committed on Enter and discarded on Escape/✕, so typing never
|
|
61
|
+
* writes into the store's region (RT-18). Keyed by object identity, which
|
|
62
|
+
* avoids needing a unique id field. */
|
|
63
|
+
protected editingLabelRegions: Map<Region, string>;
|
|
64
|
+
protected showSaveAsDialog: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* The slice's region source (a large region set drawn by level of detail), or null. Its
|
|
67
|
+
* features are rows of the table after the regions — stand-ins until one is selected or edited,
|
|
68
|
+
* which takes it into the regions — and its classes count in the classes panel.
|
|
69
|
+
*/
|
|
70
|
+
protected sourceView: RegionSourceView | null;
|
|
71
|
+
/** Features still in the source (the table's rows after the regions). */
|
|
72
|
+
private sourceTotal;
|
|
73
|
+
/** Stand-in rows for the source features on the current page. */
|
|
74
|
+
private sourceRows;
|
|
75
|
+
/** Features per class still in the source. */
|
|
76
|
+
private sourceClassCounts;
|
|
77
|
+
/** The stand-in rows (rows of a source feature, not of a region). */
|
|
78
|
+
private readonly standIns;
|
|
79
|
+
private standInSeq;
|
|
80
|
+
/** Bumped per source refresh, so a late answer is dropped. */
|
|
81
|
+
private sourceRequest;
|
|
82
|
+
/** The classes the table's Class column offers: the presets and the region source's classes
|
|
83
|
+
* (a dropdown can only show a value that is one of its options). */
|
|
84
|
+
protected tablePresetSet: PresetSet;
|
|
85
|
+
/** Whether regions are drawn filled (the atlas look) rather than outlined. */
|
|
86
|
+
protected regionsFilled: boolean;
|
|
87
|
+
/** Whether a volume view is on screen (classes can then be shown in 3D). */
|
|
88
|
+
protected volumeView: boolean;
|
|
89
|
+
/** Whether the volume view's slice pane is wanted (one slice edited beside the 3D view). */
|
|
90
|
+
private slicePane;
|
|
91
|
+
/** Whether the volume view draws the regions through the volume (see toggleThroughVolume). */
|
|
92
|
+
protected regionsThroughVolume: boolean;
|
|
93
|
+
/** Classes shown in 3D in the volume view, each with the classes its surface covers. */
|
|
94
|
+
protected shown3d: Map<string, string[]>;
|
|
95
|
+
/** The classes of the class tree's pick (it and its subtree), as long as the pick holds. */
|
|
96
|
+
private pickedClasses;
|
|
97
|
+
/** The selected rows' classes, marked in the class lists. */
|
|
98
|
+
protected markedClasses: ReadonlySet<string>;
|
|
99
|
+
/** The surfaces highlighted in the volume view (their keys, joined). */
|
|
100
|
+
private highlighted3d;
|
|
101
|
+
/** The colour each shown surface was last drawn in. */
|
|
102
|
+
private colors3d;
|
|
103
|
+
/** Their names, for the class lists' toggles (a new set per change, for OnPush). */
|
|
104
|
+
protected shown3dNames: ReadonlySet<string>;
|
|
105
|
+
/** The classes hidden from view (their regions, source features and surfaces). */
|
|
106
|
+
protected hiddenClasses: ReadonlySet<string>;
|
|
107
|
+
/** Whether a region set's class hierarchy is shown as a tree (rather than the class list). */
|
|
108
|
+
protected classTreeView: boolean;
|
|
109
|
+
/** The class picked last in the class tree. */
|
|
110
|
+
protected pickedClass: string | null;
|
|
111
|
+
/** Regions per class (the regions' and the source's), for the class tree. */
|
|
112
|
+
protected treeCounts: Map<string, number>;
|
|
113
|
+
/** A class's colour, for the class tree: a new function per colour change, so the tree repaints. */
|
|
114
|
+
protected treeColor: (name: string) => string;
|
|
115
|
+
protected saveAsFilename: string;
|
|
116
|
+
protected saveAsFileExists: boolean;
|
|
62
117
|
/** True while a GeoJSON persist is serializing/uploading — drives the dialog's
|
|
63
118
|
* progress bar and Cancel button (parity with the Save-mask dialog). */
|
|
64
|
-
saveAsBusy: boolean;
|
|
65
|
-
|
|
119
|
+
protected saveAsBusy: boolean;
|
|
120
|
+
/** The running GeoJSON save; unsubscribing cancels it (Cancel / destroy). */
|
|
66
121
|
private _saveAsSub?;
|
|
67
|
-
/**
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
saveMaskFilename: string;
|
|
122
|
+
/** Save-as file names to check for an existing file (debounced). */
|
|
123
|
+
private readonly saveAsCheck$;
|
|
124
|
+
protected showExportDialog: boolean;
|
|
125
|
+
protected exportFilename: string;
|
|
126
|
+
protected showSaveMaskDialog: boolean;
|
|
127
|
+
protected saveMaskFilename: string;
|
|
74
128
|
/** Mask type chosen in the Save-mask dialog: a binary foreground/background
|
|
75
129
|
* mask, or a multi-class mask with a distinct id per region. */
|
|
76
|
-
maskMode:
|
|
130
|
+
protected maskMode: MaskMode;
|
|
77
131
|
/** True while the mask worker is rasterizing/encoding — drives the progress
|
|
78
132
|
* bar and the Cancel button in the dialog. */
|
|
79
|
-
maskBusy: boolean;
|
|
133
|
+
protected maskBusy: boolean;
|
|
80
134
|
/** 0–100 rasterization progress; switches to indeterminate during encoding. */
|
|
81
|
-
maskProgress: number;
|
|
82
|
-
maskEncoding: boolean;
|
|
83
|
-
|
|
84
|
-
private
|
|
135
|
+
protected maskProgress: number;
|
|
136
|
+
protected maskEncoding: boolean;
|
|
137
|
+
/** The running mask export; unsubscribing cancels it (terminates its worker). */
|
|
138
|
+
private maskJob?;
|
|
85
139
|
/**
|
|
86
140
|
* PrimeNG p-table multi-selection mode toggle. When true, single-click
|
|
87
141
|
* selects one row (replacing prior); meta/ctrl-click toggles a row in/out
|
|
88
142
|
* of the selection. When false, every click toggles. Default true to
|
|
89
143
|
* match the most common spreadsheet-like UX.
|
|
90
144
|
*/
|
|
91
|
-
metaKey: boolean;
|
|
145
|
+
protected metaKey: boolean;
|
|
92
146
|
private _updatingFromEditor;
|
|
93
147
|
private _suppressSelectionSyncToPlot;
|
|
94
|
-
private
|
|
95
|
-
private
|
|
96
|
-
private
|
|
97
|
-
|
|
148
|
+
private readonly destroyRef;
|
|
149
|
+
private readonly cdr;
|
|
150
|
+
private readonly zone;
|
|
151
|
+
/** Re-render this OnPush view, re-entering the zone when the change came from outside it. */
|
|
152
|
+
private changed;
|
|
98
153
|
/** Physical pixel size (µm/pixel) of the active image, for region areas in
|
|
99
|
-
* µm
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
constructor(regionApi: IRegionEditorApi, messageService: MessageService, confirmationService: ConfirmationService, regionIo: RegionIoPort);
|
|
103
|
-
/**
|
|
104
|
-
* Deep copy of regions for dirty-tracking (`regionsCopy`). Returns plain-object
|
|
105
|
-
* clones — only structural equality matters here, not prototypes.
|
|
106
|
-
* TODO: replace with `structuredClone` once verified.
|
|
107
|
-
*/
|
|
108
|
-
private deepClone;
|
|
154
|
+
* µm²; empty when the format reports no physical size. */
|
|
155
|
+
protected mpp: PixelSize;
|
|
156
|
+
constructor(regionApi: IRegionEditorApi, messageService: MessageService, confirmationService: ConfirmationService, persistence: RegionPersistenceService, maskExport: MaskExportService);
|
|
109
157
|
ngOnInit(): void;
|
|
158
|
+
/** Cancels a running GeoJSON save (aborts its upload) and mask export (terminates
|
|
159
|
+
* its worker); the API subscriptions end through `takeUntilDestroyed`. */
|
|
110
160
|
ngOnDestroy(): void;
|
|
111
161
|
/**
|
|
112
162
|
* Table → Plot: PrimeNG fires onRowSelect/onRowUnselect after updating
|
|
@@ -114,96 +164,137 @@ export declare class RegionEditorComponent implements OnInit, OnDestroy {
|
|
|
114
164
|
* the package maps them to its internal index space (which includes the
|
|
115
165
|
* intensity-profile lines the editor never sees).
|
|
116
166
|
*/
|
|
117
|
-
onSelectionChanged(): void;
|
|
167
|
+
protected onSelectionChanged(): void;
|
|
168
|
+
/** Whether the slice has a region source: it then has regions to save even with an empty table. */
|
|
169
|
+
protected get hasRegionSource(): boolean;
|
|
170
|
+
/** Rows in the table: the regions, then the features still in the region source. */
|
|
171
|
+
protected get tableTotal(): number;
|
|
172
|
+
/** The class hierarchy of the slice's region source, when it has one (the classes as a tree). */
|
|
173
|
+
protected get classHierarchy(): RegionClassNode[] | null;
|
|
174
|
+
/** Whether `row` is a region-source feature's stand-in rather than a region. */
|
|
175
|
+
protected isSourceRow(row: Region): boolean;
|
|
176
|
+
private sourceIds;
|
|
177
|
+
/** A table row for a source feature: no geometry until it is taken. */
|
|
178
|
+
private standIn;
|
|
118
179
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* longer parses any backend-specific shape format — it only fills in a
|
|
123
|
-
* fallback colour and rebuilds its local label→colour lookup.
|
|
180
|
+
* Re-read the source part of the table (the stand-ins on the current page, the count) and the
|
|
181
|
+
* source's class counts. The page holds regions first, so its source rows start at
|
|
182
|
+
* `max(first, regions)` − regions.
|
|
124
183
|
*/
|
|
125
|
-
private
|
|
184
|
+
private refreshSource;
|
|
185
|
+
/** Take a source row's feature into the regions, then run `then` on the region it became. */
|
|
186
|
+
private takeThen;
|
|
187
|
+
/** Toggle the filled (atlas) look: each region filled in its colour, labels inside. */
|
|
188
|
+
/** In a volume view: the regions drawn through the volume, or hidden behind what it shows. */
|
|
189
|
+
protected toggleThroughVolume(): void;
|
|
190
|
+
protected toggleFill(): void;
|
|
126
191
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* resulting regionUpdateEvent doesn't bounce back as an external change.
|
|
192
|
+
* Show or hide a class in the volume view as a 3D reconstruction — a tree node with every class
|
|
193
|
+
* under it, as one surface in its colour.
|
|
130
194
|
*/
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
195
|
+
protected toggleClass3d(name: string, classes?: string[]): void;
|
|
196
|
+
/** Hide (or show again) these classes' regions, wherever they are drawn. */
|
|
197
|
+
protected setClassesHidden(classes: readonly string[], hidden: boolean): void;
|
|
198
|
+
/** The surfaces shown in 3D, in their classes' colours now. */
|
|
199
|
+
private groups3d;
|
|
200
|
+
/** The classes selected now: the class tree's pick (with its subtree) and the selected rows'. */
|
|
201
|
+
private selectedClassNames;
|
|
137
202
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* @param setRegion
|
|
203
|
+
* Highlight, in the volume view, the surfaces holding a selected class (focus + context: they
|
|
204
|
+
* turn near opaque, the others fade), and mark the selected rows' classes in the class lists.
|
|
141
205
|
*/
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
private
|
|
158
|
-
changeShowShapeLabel(showLabel: boolean): void;
|
|
159
|
-
isEditingLabel(region: any): boolean;
|
|
160
|
-
startEditLabel(region: any, event?: Event): void;
|
|
161
|
-
stopEditLabel(region: any, commit: boolean, event?: Event): void;
|
|
162
|
-
isRectangle(region: Region): boolean;
|
|
206
|
+
private updateSelectionHighlight;
|
|
207
|
+
/** A surface clicked in the volume view: pick its class as the tree would; beside them, clear. */
|
|
208
|
+
private onPicked3d;
|
|
209
|
+
/** A class colour changed (its swatch, or Manage): repaint the surfaces shown in 3D whose colour it changed. */
|
|
210
|
+
private recolor3d;
|
|
211
|
+
private show3d;
|
|
212
|
+
/** Pick a class in the class tree: select its regions and its subclasses', the source's taken. */
|
|
213
|
+
protected pickClasses(pick: ClassTreePick): Promise<void>;
|
|
214
|
+
/**
|
|
215
|
+
* Rows for regions coming from the visualizer: neutral `Region`s with bounds,
|
|
216
|
+
* colour and label already populated. A region without a colour is shown with
|
|
217
|
+
* its classification colour (or the default shape colour) — as a copy: the
|
|
218
|
+
* store's instances are shared with its undo history and must not be changed
|
|
219
|
+
* in place (RT-1).
|
|
220
|
+
*/
|
|
221
|
+
private applyRegionColors;
|
|
163
222
|
/**
|
|
164
|
-
*
|
|
165
|
-
*
|
|
223
|
+
* The editor's one write path (RT-1): make `next` the table's rows and commit
|
|
224
|
+
* them to the store — live, as one undoable step (isRegionSaveOn=true; the
|
|
225
|
+
* router keeps the intensity-profile lines). Rows are the store's instances,
|
|
226
|
+
* so an edit passes copies ({@link patchRegions}), never changed rows. The
|
|
227
|
+
* resulting region-update event is ignored (`_updatingFromEditor`), so the
|
|
228
|
+
* class list and counts are refreshed here (a typed class is added; jit-ui#70).
|
|
166
229
|
*/
|
|
167
|
-
|
|
230
|
+
private commit;
|
|
168
231
|
/**
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* so
|
|
172
|
-
*
|
|
173
|
-
*
|
|
232
|
+
* Copy-on-write edit (review RT-1). The editor's rows are the region store's
|
|
233
|
+
* live instances, and the store takes its undo snapshot only when the edit is
|
|
234
|
+
* committed — so an edit must replace a region with a patched copy (and any
|
|
235
|
+
* bounds it changes with new bounds), never mutate the instance the store
|
|
236
|
+
* holds. Returns the copies by original; the selection and an open label edit
|
|
237
|
+
* follow them.
|
|
174
238
|
*/
|
|
175
|
-
private
|
|
176
|
-
/**
|
|
177
|
-
|
|
178
|
-
* not the filled exterior (jit-ui#85). */
|
|
179
|
-
private areaInPixels;
|
|
180
|
-
/** Polygon area: exterior shoelace minus each interior ring (hole). */
|
|
181
|
-
private polygonArea;
|
|
182
|
-
/** Absolute shoelace area of a single ring. */
|
|
183
|
-
private ringArea;
|
|
184
|
-
private fmtArea;
|
|
239
|
+
private patchRegions;
|
|
240
|
+
/** Set one region's outline colour (an explicit override) and commit live. */
|
|
241
|
+
protected changeRegionColor(region: Region, color: string): void;
|
|
185
242
|
/**
|
|
186
|
-
*
|
|
243
|
+
* After a label edit on `region`: give every labelled row without a colour its
|
|
244
|
+
* class colour (preset or fallback, as the store will), and commit when
|
|
245
|
+
* `commit` is set.
|
|
187
246
|
*/
|
|
188
|
-
|
|
247
|
+
protected labelRegionUpdate(region: Region, commit?: boolean): void;
|
|
248
|
+
/** Labelled rows without a colour get their class colour (copies). */
|
|
249
|
+
private fillClassColors;
|
|
250
|
+
/** The current page of the table. Memoized on (regions, first, rows), so
|
|
251
|
+
* change detection doesn't hand p-table a new array every tick (RT-20). */
|
|
252
|
+
protected get pagedRegions(): Region[];
|
|
253
|
+
/** In a volume view, each class's volume over the whole stack, for the table (null: areas). */
|
|
254
|
+
protected tableVolumes: ReadonlyMap<string, number | null> | null;
|
|
255
|
+
/** Bumped when the regions change, so a volume computed before is dropped. */
|
|
256
|
+
private volumeRequest;
|
|
257
|
+
/** Compute the volumes of the classes on the table's page that are not known yet. */
|
|
258
|
+
private requestVolumes;
|
|
259
|
+
/** The regions changed (or the view did): forget the volumes and compute the page's again. */
|
|
260
|
+
private resetVolumes;
|
|
261
|
+
private _pageKey;
|
|
262
|
+
private _page;
|
|
263
|
+
protected onPageChange(event: {
|
|
264
|
+
first?: number;
|
|
265
|
+
rows?: number;
|
|
266
|
+
}): void;
|
|
267
|
+
/** Select every region in the table (and highlight them on the diagram), the source's taken. */
|
|
268
|
+
protected selectAllRegions(): Promise<void>;
|
|
269
|
+
protected deleteSelectedRegions(): void;
|
|
270
|
+
protected clearAllRegions(): void;
|
|
271
|
+
/** Delete every feature still in the slice's region source (with "Delete all regions"). */
|
|
272
|
+
private deleteAllSourceFeatures;
|
|
273
|
+
protected deleteRegion(shapeIdx: number): void;
|
|
274
|
+
private clampPaginatorFirst;
|
|
275
|
+
protected changeShowShapeLabel(showLabel: boolean): void;
|
|
276
|
+
protected isEditingLabel(region: Region): boolean;
|
|
277
|
+
protected startEditLabel(region: Region, event?: Event): void;
|
|
278
|
+
/** The label typed so far for a row in edit mode (no re-render needed). */
|
|
279
|
+
protected setLabelDraft(region: Region, value: string): void;
|
|
280
|
+
protected stopEditLabel(region: Region, commit: boolean, event?: Event): void;
|
|
281
|
+
/** Region area for display (µm²/mm² when the image is scaled, else px²);
|
|
282
|
+
* empty for a degenerate region. See `region-metrics`. */
|
|
283
|
+
protected regionArea(region: Region): string;
|
|
189
284
|
/**
|
|
190
|
-
*
|
|
191
|
-
* @param event
|
|
285
|
+
* This method rounds all the rectangle regions lengths to multiple of 512
|
|
192
286
|
*/
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
showHelp(): void;
|
|
287
|
+
protected roundRectangleLengths(): void;
|
|
288
|
+
protected showHelp(): void;
|
|
196
289
|
/** Open the colour dialog for the currently-selected region(s), building one
|
|
197
290
|
* colour picker per unique class in the selection. Each picker is seeded with
|
|
198
|
-
* the class's
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
* later match. */
|
|
204
|
-
applyColorToSelected(): void;
|
|
291
|
+
* the first selected region of that class's colour (else the class colour). */
|
|
292
|
+
protected openColorDialog(): void;
|
|
293
|
+
/** Apply each class's chosen colour to the selected regions of that class (an
|
|
294
|
+
* explicit override) and commit live. */
|
|
295
|
+
protected applyColorToSelected(edits?: ClassColorEdit[]): void;
|
|
205
296
|
/** Resolve the display colour for a class name (preset colour or deterministic fallback). */
|
|
206
|
-
colorForName(name?: string): string;
|
|
297
|
+
protected colorForName(name?: string): string;
|
|
207
298
|
/**
|
|
208
299
|
* Ensure every class label present in the loaded regions exists in the preset
|
|
209
300
|
* list, auto-adding any that are missing (using the region's already-resolved
|
|
@@ -213,93 +304,85 @@ export declare class RegionEditorComponent implements OnInit, OnDestroy {
|
|
|
213
304
|
* labels are ignored. (jit-ui#70)
|
|
214
305
|
*/
|
|
215
306
|
private syncClassesFromRegions;
|
|
216
|
-
/**
|
|
307
|
+
/**
|
|
308
|
+
* Whether the classes count every slice of the stack: in a volume view (the whole stack on
|
|
309
|
+
* screen), unless its slice pane shows one slice. The table lists the slice's regions anyway.
|
|
310
|
+
*/
|
|
311
|
+
private get stackCounts();
|
|
312
|
+
/** Rebuild the per-class region counts shown in the panel (the stack's, see stackCounts). */
|
|
217
313
|
private recomputeClassCounts;
|
|
218
|
-
/** Rebuild the panel's display order — most-used classes first, then by name.
|
|
314
|
+
/** Rebuild the panel's display order — most-used classes first, then by name. A class only
|
|
315
|
+
* the region source has is listed too, in its colour. */
|
|
219
316
|
private updateDisplayClasses;
|
|
220
|
-
/** trackBy for the class rows so re-sorting doesn't re-create the pickers. */
|
|
221
|
-
trackByClassName: (_: number, c: ClassPreset) => string;
|
|
222
317
|
/** Number of regions currently using a class (keyed by the active match mode). */
|
|
223
|
-
classCount(name: string): number;
|
|
318
|
+
protected classCount(name: string): number;
|
|
224
319
|
/** Recolour a class from its panel swatch and repaint its (non-overridden) regions. */
|
|
225
|
-
setClassColor(name: string, color: string): void;
|
|
226
|
-
/** Tooltip for a class's delete button in the panel. */
|
|
227
|
-
deleteClassTooltip(name: string): string;
|
|
320
|
+
protected setClassColor(name: string, color: string): void;
|
|
228
321
|
/** Remove a class. Any regions still using it fall back to the default
|
|
229
322
|
* "Region" class, so they aren't orphaned (and the class isn't immediately
|
|
230
323
|
* re-added from its regions by syncClassesFromRegions). */
|
|
231
|
-
deleteClass(name: string): void;
|
|
324
|
+
protected deleteClass(name: string): void;
|
|
232
325
|
/** Regions labelled with any of `removedNames` revert to the default
|
|
233
326
|
* {@link defaultClassName} ("Region"): its class colour, override cleared.
|
|
234
327
|
* Skips the default itself so deleting "Region" can't self-reassign. (jit-ui#70) */
|
|
235
328
|
private reassignRegionsToDefaultClass;
|
|
236
329
|
/** Stamp a class (and its preset/fallback colour) onto one region from the Class
|
|
237
330
|
* dropdown; choosing a class opts the region back into the preset colour. */
|
|
238
|
-
applyPresetToRegion(region: Region, className: string): void;
|
|
331
|
+
protected applyPresetToRegion(region: Region, className: string): void;
|
|
239
332
|
/** Make a class active (used for new regions) and, if rows are selected, apply
|
|
240
333
|
* it to them in one commit. */
|
|
241
|
-
selectActiveClass(name: string): void;
|
|
334
|
+
protected selectActiveClass(name: string): void;
|
|
242
335
|
/** Apply a class (label + preset/fallback colour) to the current selection and commit. */
|
|
243
336
|
private applyClassToSelected;
|
|
244
337
|
/** "Edit class on selected rows" popup — apply the chosen existing class. */
|
|
245
|
-
applyBulkClass(): void;
|
|
338
|
+
protected applyBulkClass(): void;
|
|
246
339
|
/** "Edit class on selected rows" popup — add a new class and set it on the selection. */
|
|
247
|
-
addAndApplyBulkClass(): void;
|
|
248
|
-
openManageDialog(): void;
|
|
340
|
+
protected addAndApplyBulkClass(): void;
|
|
341
|
+
protected openManageDialog(): void;
|
|
249
342
|
private clonePresetSet;
|
|
250
|
-
addPresetClass(): void;
|
|
251
|
-
removePresetClass(i: number): void;
|
|
252
|
-
addFallbackColor(): void;
|
|
253
|
-
removeFallbackColor(i: number): void;
|
|
254
343
|
/** Commit the draft: drop blank/duplicate names, persist, and recolour
|
|
255
344
|
* non-overridden regions with the updated presets. */
|
|
256
|
-
applyManageDialog(close: boolean): void;
|
|
257
|
-
resetPresetsToDefaults(): void;
|
|
258
|
-
exportPresets(): void;
|
|
259
|
-
importPresets(event: Event): void;
|
|
260
|
-
|
|
345
|
+
protected applyManageDialog(close: boolean): void;
|
|
346
|
+
protected resetPresetsToDefaults(): void;
|
|
347
|
+
protected exportPresets(): void;
|
|
348
|
+
protected importPresets(event: Event): void;
|
|
349
|
+
/** Validate and apply an imported annotation-classes JSON file. */
|
|
350
|
+
private applyImportedPresets;
|
|
351
|
+
protected importRois(event: Event): void;
|
|
261
352
|
/**
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
* geojson (jit-ui#93). Otherwise (single-plane image, or a folder stack whose
|
|
266
|
-
* slices save to their own per-slice files) the current set. (jit-ui#93)
|
|
353
|
+
* Replace the regions with an imported GeoJSON file's, and the slice's region source with them.
|
|
354
|
+
* A large file becomes the slice's region source instead (drawn by level of detail; listed above
|
|
355
|
+
* the table), the table emptied.
|
|
267
356
|
*/
|
|
357
|
+
private applyImportedRois;
|
|
358
|
+
/** Regions to serialize on save/export (every slice for a combined z-stack). */
|
|
268
359
|
private regionsForSave;
|
|
269
|
-
exportRois(): void;
|
|
270
|
-
confirmExport(): void;
|
|
360
|
+
protected exportRois(): void;
|
|
361
|
+
protected confirmExport(): void;
|
|
271
362
|
/** Open the "Save mask" dialog, seeded with `<image-stem>_mask.png`. */
|
|
272
|
-
openSaveMaskDialog(): void;
|
|
363
|
+
protected openSaveMaskDialog(): void;
|
|
273
364
|
/**
|
|
274
365
|
* Rasterize the regions to the chosen mask type and download as a PNG. The
|
|
275
|
-
* heavy work
|
|
276
|
-
*
|
|
277
|
-
*
|
|
366
|
+
* heavy work runs in a Web Worker ({@link MaskExportService}) so the UI never
|
|
367
|
+
* freezes on whole-slide images and the job can be cancelled (jit-ui#95);
|
|
368
|
+
* the dialog stays open with a progress bar until done.
|
|
278
369
|
*/
|
|
279
|
-
confirmSaveMask(): void;
|
|
280
|
-
/** Cancel an in-progress mask export
|
|
281
|
-
cancelSaveMask(): void;
|
|
282
|
-
/** Worker factory — async so the worker module (and its `import.meta.url`,
|
|
283
|
-
* which the CommonJS test compile rejects) is loaded via a dynamic import,
|
|
284
|
-
* exactly like the segmentation worker. Overridable in tests. */
|
|
285
|
-
protected createMaskWorker(): Promise<Worker>;
|
|
370
|
+
protected confirmSaveMask(): void;
|
|
371
|
+
/** Cancel an in-progress mask export (terminates its worker) and reset state. */
|
|
372
|
+
protected cancelSaveMask(): void;
|
|
286
373
|
private finishMask;
|
|
287
374
|
private maskError;
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
*
|
|
292
|
-
* Groups the store's per-slice regions by slice index and serializes each on
|
|
293
|
-
* the default plane (z=0) — each slice-file is itself one plane, and the
|
|
294
|
-
* loader re-derives the slice index from the file's position in the series.
|
|
295
|
-
* Slices cleared since load are included (empty) so their file is overwritten.
|
|
296
|
-
*/
|
|
375
|
+
protected persistRegions(): void;
|
|
376
|
+
/** Save a folder stack's regions as one geojson per slice-file (jit-ui#93).
|
|
377
|
+
* No dialog covers the toolbar meanwhile, so a Save while one is uploading
|
|
378
|
+
* is ignored rather than starting a second write (and orphaning the first). */
|
|
297
379
|
private saveStackSlices;
|
|
298
|
-
checkSaveAsFileExists(): void;
|
|
299
|
-
confirmSaveAs(): void;
|
|
380
|
+
protected checkSaveAsFileExists(): void;
|
|
381
|
+
protected confirmSaveAs(): void;
|
|
300
382
|
/** Cancel an in-progress GeoJSON persist: abort the deferred serialize and/or
|
|
301
383
|
* the in-flight upload, and reset state. */
|
|
302
|
-
cancelSaveAs(): void;
|
|
384
|
+
protected cancelSaveAs(): void;
|
|
385
|
+
private toast;
|
|
303
386
|
static ɵfac: i0.ɵɵFactoryDeclaration<RegionEditorComponent, never>;
|
|
304
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RegionEditorComponent, "region-editor", never, {}, {}, never, never,
|
|
387
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RegionEditorComponent, "region-editor", never, { "active": { "alias": "active"; "required": false; }; }, {}, never, never, true, never>;
|
|
305
388
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Region } from '../models/region';
|
|
2
|
+
import { IImageMetadata } from '../contracts/image.contract';
|
|
3
|
+
/** Physical pixel size (µm/pixel); both undefined when the image is unscaled. */
|
|
4
|
+
export interface PixelSize {
|
|
5
|
+
mppX?: number;
|
|
6
|
+
mppY?: number;
|
|
7
|
+
/** Spacing between slices (µm), when the stack declares it. */
|
|
8
|
+
mppZ?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Choose the physical pixel size for area display from the image meta. The
|
|
12
|
+
* calibration may sit on any channel entry, not necessarily [0], so take the
|
|
13
|
+
* first entry with a positive mppX (as PlotlyService.currentMpp does). With
|
|
14
|
+
* only one axis reported, pixels are square (mppY = mppX), so a scaled image
|
|
15
|
+
* shows µm²/mm² rather than px².
|
|
16
|
+
*/
|
|
17
|
+
export declare function pickMpp(meta: IImageMetadata[] | undefined): PixelSize;
|
|
18
|
+
/**
|
|
19
|
+
* A region's area in px²: width·height for a rectangle, shoelace for a polygon
|
|
20
|
+
* with each interior ring (hole) subtracted (a donut reports the annulus), and
|
|
21
|
+
* the sum of the parts for a multi-polygon (jit-ui#85). 0 for anything else.
|
|
22
|
+
*/
|
|
23
|
+
export declare function regionAreaPx(region: Pick<Region, 'bounds'>): number;
|
|
24
|
+
/**
|
|
25
|
+
* An area for display: µm² (mm² from 1e6 µm²) when the pixel size is known,
|
|
26
|
+
* otherwise px². Empty for a degenerate (non-positive) area.
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatArea(px: number, mpp?: PixelSize): string;
|
|
29
|
+
/**
|
|
30
|
+
* A volume in px² × slices for display: mm³ (three significant digits) from 0.001 mm³, µm³ below,
|
|
31
|
+
* when the pixel size and the slice spacing are known; otherwise voxels (one pixel by one slice).
|
|
32
|
+
* Empty for a non-positive volume.
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatVolume(pxSlices: number, mpp?: PixelSize): string;
|