@jax-data-science/sci-image-visualizer 0.8.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -460
- package/esm2022/index.mjs +28 -15
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
- package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
- package/esm2022/lib/contracts/color.mjs +60 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
- package/esm2022/lib/contracts/display-types.mjs +11 -1
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/intensity.mjs +48 -5
- package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
- package/esm2022/lib/contracts/plot-type.mjs +134 -17
- package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
- package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
- package/esm2022/lib/contracts/sam.contract.mjs +1 -1
- package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
- package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +2 -1
- package/esm2022/lib/geometry/contour.mjs +63 -0
- package/esm2022/lib/geometry/raster.mjs +98 -0
- package/esm2022/lib/geometry/ring.mjs +201 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
- package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
- package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
- package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
- package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +3 -4
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +66 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +157 -591
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +263 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
- package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
- package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +344 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +358 -4218
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +439 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
- package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
- package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
- package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
- package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
- package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +153 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +185 -718
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
- package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
- package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
- package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
- package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
- package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
- package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
- package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
- package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
- package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
- package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
- package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
- package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
- package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
- package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
- package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
- package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
- package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
- package/esm2022/lib/implementations/region-centroids.mjs +47 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
- package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
- package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
- package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
- package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
- package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
- package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
- package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
- package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
- package/esm2022/lib/models/bezier.mjs +1 -11
- package/esm2022/lib/models/class-preset.mjs +41 -3
- package/esm2022/lib/models/geometry.mjs +27 -164
- package/esm2022/lib/models/polygon-edit.mjs +254 -0
- package/esm2022/lib/models/polygon-factory.mjs +118 -0
- package/esm2022/lib/models/region-clone.mjs +68 -0
- package/esm2022/lib/models/region-geojson.mjs +373 -0
- package/esm2022/lib/models/region.mjs +34 -33
- package/esm2022/lib/models/shape.mjs +18 -16
- package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
- package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
- package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
- package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
- package/esm2022/lib/plot.utilities.mjs +296 -473
- package/esm2022/lib/processing/image-crop.mjs +1 -1
- package/esm2022/lib/processing/processing-image.mjs +28 -15
- package/esm2022/lib/provide-visualization.mjs +40 -14
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +99 -0
- package/esm2022/lib/region-editor/file-stem.mjs +13 -0
- package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
- package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
- package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
- package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +402 -651
- package/esm2022/lib/region-editor/region-metrics.mjs +68 -0
- package/esm2022/lib/region-editor/region-persistence.service.mjs +134 -0
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +153 -0
- package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
- package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
- package/esm2022/lib/region-ops.service.mjs +28 -70
- package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
- package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
- package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
- package/esm2022/lib/render-orchestrator.mjs +14 -11
- package/esm2022/lib/render-session.mjs +207 -0
- package/esm2022/lib/routing-visualizer.service.mjs +459 -411
- package/esm2022/lib/spatial/density-raster.mjs +14 -0
- package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
- package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
- package/esm2022/lib/spatial/gene-search.mjs +1 -1
- package/esm2022/lib/spatial/glyphs.mjs +97 -0
- package/esm2022/lib/spatial/lod.mjs +187 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
- package/esm2022/lib/spatial/spatial-density.mjs +25 -16
- package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
- package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
- package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
- package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
- package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
- package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
- package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
- package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
- package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
- package/esm2022/lib/spatial/stats.mjs +71 -0
- package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
- package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
- package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
- package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
- package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
- package/esm2022/lib/store/class-color.util.mjs +46 -3
- package/esm2022/lib/store/region-history.mjs +146 -0
- package/esm2022/lib/store/region-scope-cache.mjs +140 -0
- package/esm2022/lib/store/region-selection.mjs +82 -0
- package/esm2022/lib/store/region-store.service.mjs +279 -675
- package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
- package/esm2022/lib/store/visualizer-store.service.mjs +49 -71
- package/esm2022/lib/toast-outlets.mjs +5 -4
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
- package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
- package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
- package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +114 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
- package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
- package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
- package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
- package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +81 -0
- package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
- package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
- package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
- package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
- package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
- package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
- package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
- package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
- package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +68 -117
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
- package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
- package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
- package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
- package/esm2022/lib/util/mark-for-check.mjs +17 -0
- package/esm2022/lib/util/supersede.mjs +56 -0
- package/esm2022/lib/visualization.module.mjs +39 -141
- package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
- package/esm2022/lib/visualizer/region-actions.mjs +149 -0
- package/esm2022/lib/visualizer/region-load.mjs +60 -0
- package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
- package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
- package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
- package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
- package/esm2022/lib/visualizer.component.mjs +480 -1902
- package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
- package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
- package/esm2022/lib/workers/spatial-math.mjs +190 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs +41083 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs +238 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/fesm2022/mask.worker.js +36 -917
- package/fesm2022/onnx-sam.worker.js +52 -16
- package/fesm2022/spatial-math.worker.js +471 -0
- package/fesm2022/tsne.worker.js +32 -15
- package/index.d.ts +13 -10
- package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
- package/lib/contracts/capabilities.contract.d.ts +4 -2
- package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
- package/lib/contracts/color.d.ts +27 -0
- package/lib/contracts/colormap-lut.d.ts +19 -4
- package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
- package/lib/contracts/display-types.d.ts +21 -0
- package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
- package/lib/contracts/intensity.d.ts +13 -2
- package/lib/contracts/plot-type.d.ts +3 -1
- package/lib/contracts/ports/image-state.port.d.ts +6 -2
- package/lib/contracts/ports/preferences.port.d.ts +4 -0
- package/lib/contracts/ports/region-io.port.d.ts +1 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
- package/lib/contracts/ports/tile-access.port.d.ts +1 -0
- package/lib/contracts/region-editor-api.contract.d.ts +1 -1
- package/lib/contracts/region-overlay.contract.d.ts +5 -0
- package/lib/contracts/sam.contract.d.ts +7 -0
- package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
- package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
- package/lib/contracts/visualizer.contract.d.ts +221 -54
- package/lib/contracts/viz-config.d.ts +1 -0
- package/lib/geometry/contour.d.ts +24 -0
- package/lib/geometry/raster.d.ts +42 -0
- package/lib/geometry/ring.d.ts +67 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
- package/lib/implementations/base-store-visualizer.d.ts +61 -15
- package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
- package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
- package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +0 -1
- package/lib/implementations/napari-js/napari-loading-state.d.ts +30 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +62 -70
- package/lib/implementations/napari-js/napari-scene.d.ts +93 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +89 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
- package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
- package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
- package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
- package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +121 -883
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +104 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
- package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
- package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
- package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
- package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
- package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
- package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
- package/lib/implementations/osd/display-pipeline.d.ts +38 -9
- package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
- package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
- package/lib/implementations/osd/osd-coords.d.ts +6 -4
- package/lib/implementations/osd/osd-export.d.ts +36 -0
- package/lib/implementations/osd/osd-lib.d.ts +7 -0
- package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
- package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +37 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +36 -48
- package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
- package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
- package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
- package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
- package/lib/implementations/osd/osd-viewport.d.ts +77 -0
- package/lib/implementations/osd/osd-zoom.d.ts +6 -0
- package/lib/implementations/osd/simple-source.d.ts +161 -0
- package/lib/implementations/osd/slice-cache.d.ts +12 -3
- package/lib/implementations/osd/tile-client.d.ts +11 -14
- package/lib/implementations/osd/tile-recolor.d.ts +141 -0
- package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
- package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
- package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
- package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
- package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
- package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
- package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
- package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
- package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
- package/lib/implementations/plotly/plotly.service.d.ts +136 -401
- package/lib/implementations/region-centroids.d.ts +14 -0
- package/lib/implementations/simple-slice-access.service.d.ts +7 -4
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
- package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
- package/lib/implementations/tile-server/index.d.ts +5 -0
- package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
- package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
- package/lib/implementations/tile-server/tile-protocol.d.ts +80 -0
- package/lib/implementations/tile-server/transport.d.ts +62 -0
- package/lib/intensity/intensity-profile.d.ts +66 -0
- package/lib/intensity/intensity-profile.service.d.ts +108 -0
- package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
- package/lib/models/bezier.d.ts +0 -5
- package/lib/models/class-preset.d.ts +18 -0
- package/lib/models/geometry.d.ts +14 -48
- package/lib/models/polygon-edit.d.ts +72 -0
- package/lib/models/polygon-factory.d.ts +40 -0
- package/lib/models/region-clone.d.ts +20 -0
- package/lib/models/region-geojson.d.ts +17 -0
- package/lib/models/region.d.ts +40 -4
- package/lib/models/shape.d.ts +8 -0
- package/lib/plot-mode/contribution-host.d.ts +125 -0
- package/lib/plot-mode/plot-type-menu.d.ts +60 -0
- package/lib/plot-mode/tool-params-model.d.ts +49 -0
- package/lib/plot.utilities.d.ts +19 -30
- package/lib/processing/processing-image.d.ts +5 -2
- package/lib/provide-visualization.d.ts +19 -2
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +56 -0
- package/lib/region-editor/file-stem.d.ts +7 -0
- package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
- package/lib/region-editor/mask-export.service.d.ts +54 -0
- package/lib/region-editor/mask-raster.d.ts +2 -8
- package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
- package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
- package/lib/region-editor/region-editor.component.d.ts +166 -199
- package/lib/region-editor/region-metrics.d.ts +26 -0
- package/lib/region-editor/region-persistence.service.d.ts +69 -0
- package/lib/region-editor/region-table/region-table.component.d.ts +83 -0
- package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
- package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
- package/lib/region-ops.service.d.ts +1 -7
- package/lib/region-overlay/region-geometry.d.ts +157 -0
- package/lib/region-overlay/region-hit-test.d.ts +38 -0
- package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
- package/lib/render-orchestrator.d.ts +6 -2
- package/lib/render-session.d.ts +75 -0
- package/lib/routing-visualizer.service.d.ts +110 -58
- package/lib/spatial/density-raster.d.ts +6 -0
- package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
- package/lib/spatial/embedding-compute.d.ts +21 -2
- package/lib/spatial/glyphs.d.ts +16 -0
- package/lib/spatial/lod.d.ts +94 -0
- package/lib/spatial/spatial-controls.facade.d.ts +64 -0
- package/lib/spatial/spatial-density.d.ts +15 -5
- package/lib/spatial/spatial-encoding.d.ts +11 -44
- package/lib/spatial/spatial-expression.d.ts +40 -22
- package/lib/spatial/spatial-framing.d.ts +1 -0
- package/lib/spatial/spatial-heatmap.d.ts +2 -0
- package/lib/spatial/spatial-hover.d.ts +4 -16
- package/lib/spatial/spatial-panel-model.d.ts +135 -0
- package/lib/spatial/spatial-selection.d.ts +21 -26
- package/lib/spatial/spatial-tile-merge.d.ts +41 -0
- package/lib/spatial/spatial-tiles.d.ts +9 -256
- package/lib/spatial/stats.d.ts +38 -0
- package/lib/spatial/transcript-grouping.d.ts +119 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
- package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
- package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
- package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
- package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
- package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
- package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
- package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
- package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
- package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
- package/lib/store/class-color.util.d.ts +35 -1
- package/lib/store/region-history.d.ts +66 -0
- package/lib/store/region-scope-cache.d.ts +63 -0
- package/lib/store/region-selection.d.ts +36 -0
- package/lib/store/region-store.service.d.ts +104 -112
- package/lib/store/visualizer-store.service.d.ts +22 -33
- package/lib/toast-outlets.d.ts +4 -3
- package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
- package/lib/toolbar/canvas-tools.d.ts +20 -0
- package/lib/toolbar/crop/slide-crop.d.ts +10 -4
- package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
- package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +60 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
- package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
- package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
- package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
- package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
- package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
- package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +40 -0
- package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
- package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
- package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
- package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
- package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
- package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
- package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
- package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
- package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
- package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
- package/lib/toolbar/toolbar.component.d.ts +47 -83
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
- package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
- package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
- package/lib/toolbar/wand/wand.service.d.ts +22 -116
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
- package/lib/util/mark-for-check.d.ts +11 -0
- package/lib/util/supersede.d.ts +53 -0
- package/lib/visualization.module.d.ts +18 -39
- package/lib/visualizer/floating-drag.directive.d.ts +30 -0
- package/lib/visualizer/region-actions.d.ts +54 -0
- package/lib/visualizer/region-load.d.ts +27 -0
- package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
- package/lib/visualizer/tool-modes.d.ts +49 -0
- package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
- package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
- package/lib/visualizer.component.d.ts +201 -447
- package/lib/workers/spatial-math-ops.d.ts +65 -0
- package/lib/workers/spatial-math-worker.d.ts +7 -0
- package/lib/workers/spatial-math.d.ts +74 -0
- package/package.json +12 -3
- package/src/lib/styles/_viz-icons-rules.scss +73 -0
- package/src/lib/styles/viz-icons.scss +14 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
- package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
- package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
- package/src/lib/assets/cell-detection.svg +0 -37
- package/src/lib/assets/click.svg +0 -1
- package/src/lib/assets/colormap-luts.json +0 -1
- package/src/lib/assets/edit-selection-white.svg +0 -47
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
- package/src/lib/assets/picture-segmentation.svg +0 -43
- package/src/lib/assets/test/download-379.svg +0 -1
- package/src/lib/assets/test/download-98.svg +0 -1
- package/src/lib/assets/test/json-1.svg +0 -1
- package/src/lib/assets/test/load-53.svg +0 -1
- package/src/lib/assets/test/mask-44.svg +0 -1
- package/src/lib/assets/test/mask-download-44.svg +0 -15
- package/src/lib/assets/test/mask-save-44.svg +0 -11
- package/src/lib/assets/test/overlay-1.svg +0 -1
- package/src/lib/assets/test/overlay-4.svg +0 -1
- package/src/lib/assets/test/region-26.svg +0 -1
- package/src/lib/assets/test/save-56.svg +0 -1
- package/src/lib/assets/test/upload-43.svg +0 -1
|
@@ -1,112 +1,112 @@
|
|
|
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 { MaskExportService, MaskMode } from './mask-export.service';
|
|
9
|
+
import { PixelSize } from './region-metrics';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
11
|
+
/**
|
|
12
|
+
* The Region Editor (`<region-editor>`): the table of the active image's
|
|
13
|
+
* annotation regions with class presets, colours, labels, GeoJSON import /
|
|
14
|
+
* export / server save and mask export. Self-contained: it talks to the viewer
|
|
15
|
+
* only through {@link REGION_EDITOR_API} (and the host's REGION_IO_PORT), so it
|
|
16
|
+
* has no inputs or outputs.
|
|
17
|
+
*
|
|
18
|
+
* OnPush: template events re-render it; state that lands asynchronously (the
|
|
19
|
+
* API's region / selection / preset / image-meta streams, save and mask-export
|
|
20
|
+
* progress, file reads) marks it for check.
|
|
21
|
+
*/
|
|
9
22
|
export declare class RegionEditorComponent implements OnInit, OnDestroy {
|
|
10
23
|
private regionApi;
|
|
11
|
-
messageService
|
|
24
|
+
private messageService;
|
|
12
25
|
private confirmationService;
|
|
13
|
-
private
|
|
14
|
-
|
|
15
|
-
overlayPanel
|
|
16
|
-
regions: Region[];
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
showColorDialog: boolean;
|
|
26
|
+
private persistence;
|
|
27
|
+
private maskExport;
|
|
28
|
+
private overlayPanel;
|
|
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
|
-
saveAsFilename: string;
|
|
61
|
-
saveAsFileExists: boolean;
|
|
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
|
+
protected saveAsFilename: string;
|
|
66
|
+
protected saveAsFileExists: boolean;
|
|
62
67
|
/** True while a GeoJSON persist is serializing/uploading — drives the dialog's
|
|
63
68
|
* progress bar and Cancel button (parity with the Save-mask dialog). */
|
|
64
|
-
saveAsBusy: boolean;
|
|
65
|
-
|
|
69
|
+
protected saveAsBusy: boolean;
|
|
70
|
+
/** The running GeoJSON save; unsubscribing cancels it (Cancel / destroy). */
|
|
66
71
|
private _saveAsSub?;
|
|
67
|
-
/**
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
saveMaskFilename: string;
|
|
72
|
+
/** Save-as file names to check for an existing file (debounced). */
|
|
73
|
+
private readonly saveAsCheck$;
|
|
74
|
+
protected showExportDialog: boolean;
|
|
75
|
+
protected exportFilename: string;
|
|
76
|
+
protected showSaveMaskDialog: boolean;
|
|
77
|
+
protected saveMaskFilename: string;
|
|
74
78
|
/** Mask type chosen in the Save-mask dialog: a binary foreground/background
|
|
75
79
|
* mask, or a multi-class mask with a distinct id per region. */
|
|
76
|
-
maskMode:
|
|
80
|
+
protected maskMode: MaskMode;
|
|
77
81
|
/** True while the mask worker is rasterizing/encoding — drives the progress
|
|
78
82
|
* bar and the Cancel button in the dialog. */
|
|
79
|
-
maskBusy: boolean;
|
|
83
|
+
protected maskBusy: boolean;
|
|
80
84
|
/** 0–100 rasterization progress; switches to indeterminate during encoding. */
|
|
81
|
-
maskProgress: number;
|
|
82
|
-
maskEncoding: boolean;
|
|
83
|
-
|
|
84
|
-
private
|
|
85
|
+
protected maskProgress: number;
|
|
86
|
+
protected maskEncoding: boolean;
|
|
87
|
+
/** The running mask export; unsubscribing cancels it (terminates its worker). */
|
|
88
|
+
private maskJob?;
|
|
85
89
|
/**
|
|
86
90
|
* PrimeNG p-table multi-selection mode toggle. When true, single-click
|
|
87
91
|
* selects one row (replacing prior); meta/ctrl-click toggles a row in/out
|
|
88
92
|
* of the selection. When false, every click toggles. Default true to
|
|
89
93
|
* match the most common spreadsheet-like UX.
|
|
90
94
|
*/
|
|
91
|
-
metaKey: boolean;
|
|
95
|
+
protected metaKey: boolean;
|
|
92
96
|
private _updatingFromEditor;
|
|
93
97
|
private _suppressSelectionSyncToPlot;
|
|
94
|
-
private
|
|
95
|
-
private
|
|
96
|
-
private
|
|
97
|
-
|
|
98
|
+
private readonly destroyRef;
|
|
99
|
+
private readonly cdr;
|
|
100
|
+
private readonly zone;
|
|
101
|
+
/** Re-render this OnPush view, re-entering the zone when the change came from outside it. */
|
|
102
|
+
private changed;
|
|
98
103
|
/** 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;
|
|
104
|
+
* µm²; empty when the format reports no physical size. */
|
|
105
|
+
protected mpp: PixelSize;
|
|
106
|
+
constructor(regionApi: IRegionEditorApi, messageService: MessageService, confirmationService: ConfirmationService, persistence: RegionPersistenceService, maskExport: MaskExportService);
|
|
109
107
|
ngOnInit(): void;
|
|
108
|
+
/** Cancels a running GeoJSON save (aborts its upload) and mask export (terminates
|
|
109
|
+
* its worker); the API subscriptions end through `takeUntilDestroyed`. */
|
|
110
110
|
ngOnDestroy(): void;
|
|
111
111
|
/**
|
|
112
112
|
* Table → Plot: PrimeNG fires onRowSelect/onRowUnselect after updating
|
|
@@ -114,96 +114,81 @@ export declare class RegionEditorComponent implements OnInit, OnDestroy {
|
|
|
114
114
|
* the package maps them to its internal index space (which includes the
|
|
115
115
|
* intensity-profile lines the editor never sees).
|
|
116
116
|
*/
|
|
117
|
-
onSelectionChanged(): void;
|
|
117
|
+
protected onSelectionChanged(): void;
|
|
118
118
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
119
|
+
* Rows for regions coming from the visualizer: neutral `Region`s with bounds,
|
|
120
|
+
* colour and label already populated. A region without a colour is shown with
|
|
121
|
+
* its classification colour (or the default shape colour) — as a copy: the
|
|
122
|
+
* store's instances are shared with its undo history and must not be changed
|
|
123
|
+
* in place (RT-1).
|
|
124
124
|
*/
|
|
125
125
|
private applyRegionColors;
|
|
126
126
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
127
|
+
* The editor's one write path (RT-1): make `next` the table's rows and commit
|
|
128
|
+
* them to the store — live, as one undoable step (isRegionSaveOn=true; the
|
|
129
|
+
* router keeps the intensity-profile lines). Rows are the store's instances,
|
|
130
|
+
* so an edit passes copies ({@link patchRegions}), never changed rows. The
|
|
131
|
+
* resulting region-update event is ignored (`_updatingFromEditor`), so the
|
|
132
|
+
* class list and counts are refreshed here (a typed class is added; jit-ui#70).
|
|
133
|
+
*/
|
|
134
|
+
private commit;
|
|
135
|
+
/**
|
|
136
|
+
* Copy-on-write edit (review RT-1). The editor's rows are the region store's
|
|
137
|
+
* live instances, and the store takes its undo snapshot only when the edit is
|
|
138
|
+
* committed — so an edit must replace a region with a patched copy (and any
|
|
139
|
+
* bounds it changes with new bounds), never mutate the instance the store
|
|
140
|
+
* holds. Returns the copies by original; the selection and an open label edit
|
|
141
|
+
* follow them.
|
|
130
142
|
*/
|
|
131
|
-
private
|
|
132
|
-
/** Set one region's outline colour
|
|
133
|
-
|
|
134
|
-
* (jit-ui#85 — the Region Editor's per-region Color column). */
|
|
135
|
-
changeRegionColor(region: Region, color: string): void;
|
|
136
|
-
addRectangle(): void;
|
|
143
|
+
private patchRegions;
|
|
144
|
+
/** Set one region's outline colour (an explicit override) and commit live. */
|
|
145
|
+
protected changeRegionColor(region: Region, color: string): void;
|
|
137
146
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
147
|
+
* After a label edit on `region`: give every labelled row without a colour its
|
|
148
|
+
* class colour (preset or fallback, as the store will), and commit when
|
|
149
|
+
* `commit` is set.
|
|
141
150
|
*/
|
|
142
|
-
labelRegionUpdate(region: Region,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
151
|
+
protected labelRegionUpdate(region: Region, commit?: boolean): void;
|
|
152
|
+
/** Labelled rows without a colour get their class colour (copies). */
|
|
153
|
+
private fillClassColors;
|
|
154
|
+
/** The current page of the table. Memoized on (regions, first, rows), so
|
|
155
|
+
* change detection doesn't hand p-table a new array every tick (RT-20). */
|
|
156
|
+
protected get pagedRegions(): Region[];
|
|
157
|
+
private _pageKey;
|
|
158
|
+
private _page;
|
|
159
|
+
protected onPageChange(event: {
|
|
148
160
|
first?: number;
|
|
149
161
|
rows?: number;
|
|
150
162
|
}): void;
|
|
151
163
|
/** Select every region in the table (and highlight them on the diagram). */
|
|
152
|
-
selectAllRegions(): void;
|
|
153
|
-
deleteSelectedRegions(): void;
|
|
154
|
-
clearAllRegions(): void;
|
|
155
|
-
|
|
156
|
-
deleteRegion(shapeIdx: number): void;
|
|
164
|
+
protected selectAllRegions(): void;
|
|
165
|
+
protected deleteSelectedRegions(): void;
|
|
166
|
+
protected clearAllRegions(): void;
|
|
167
|
+
protected deleteRegion(shapeIdx: number): void;
|
|
157
168
|
private clampPaginatorFirst;
|
|
158
|
-
changeShowShapeLabel(showLabel: boolean): void;
|
|
159
|
-
isEditingLabel(region:
|
|
160
|
-
startEditLabel(region:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
*
|
|
166
|
-
|
|
167
|
-
regionArea(region: Region): string;
|
|
168
|
-
/**
|
|
169
|
-
* Choose the physical pixel size (µm/pixel) for area display from the image
|
|
170
|
-
* meta. The calibration may sit on any channel entry — not necessarily [0] —
|
|
171
|
-
* so pick the first entry with a positive mppX (mirrors
|
|
172
|
-
* PlotlyService.currentMpp). Falls back to square pixels (mppY = mppX) when
|
|
173
|
-
* only one axis is reported, so a scaled image shows µm²/mm² rather than px².
|
|
174
|
-
*/
|
|
175
|
-
private pickMpp;
|
|
176
|
-
/** Pixel area: width·height for rectangles, shoelace formula for polygons.
|
|
177
|
-
* Interior rings (holes) are subtracted, so a donut reports the annulus area,
|
|
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;
|
|
169
|
+
protected changeShowShapeLabel(showLabel: boolean): void;
|
|
170
|
+
protected isEditingLabel(region: Region): boolean;
|
|
171
|
+
protected startEditLabel(region: Region, event?: Event): void;
|
|
172
|
+
/** The label typed so far for a row in edit mode (no re-render needed). */
|
|
173
|
+
protected setLabelDraft(region: Region, value: string): void;
|
|
174
|
+
protected stopEditLabel(region: Region, commit: boolean, event?: Event): void;
|
|
175
|
+
/** Region area for display (µm²/mm² when the image is scaled, else px²);
|
|
176
|
+
* empty for a degenerate region. See `region-metrics`. */
|
|
177
|
+
protected regionArea(region: Region): string;
|
|
185
178
|
/**
|
|
186
179
|
* This method rounds all the rectangle regions lengths to multiple of 512
|
|
187
180
|
*/
|
|
188
|
-
roundRectangleLengths(): void;
|
|
189
|
-
|
|
190
|
-
* Stop key arrow event propagation
|
|
191
|
-
* @param event
|
|
192
|
-
*/
|
|
193
|
-
disableArrowKeys(event: any): void;
|
|
194
|
-
changeShapeColor(event: any): void;
|
|
195
|
-
showHelp(): void;
|
|
181
|
+
protected roundRectangleLengths(): void;
|
|
182
|
+
protected showHelp(): void;
|
|
196
183
|
/** Open the colour dialog for the currently-selected region(s), building one
|
|
197
184
|
* 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;
|
|
185
|
+
* the first selected region of that class's colour (else the class colour). */
|
|
186
|
+
protected openColorDialog(): void;
|
|
187
|
+
/** Apply each class's chosen colour to the selected regions of that class (an
|
|
188
|
+
* explicit override) and commit live. */
|
|
189
|
+
protected applyColorToSelected(edits?: ClassColorEdit[]): void;
|
|
205
190
|
/** Resolve the display colour for a class name (preset colour or deterministic fallback). */
|
|
206
|
-
colorForName(name?: string): string;
|
|
191
|
+
protected colorForName(name?: string): string;
|
|
207
192
|
/**
|
|
208
193
|
* Ensure every class label present in the loaded regions exists in the preset
|
|
209
194
|
* list, auto-adding any that are missing (using the region's already-resolved
|
|
@@ -217,89 +202,71 @@ export declare class RegionEditorComponent implements OnInit, OnDestroy {
|
|
|
217
202
|
private recomputeClassCounts;
|
|
218
203
|
/** Rebuild the panel's display order — most-used classes first, then by name. */
|
|
219
204
|
private updateDisplayClasses;
|
|
220
|
-
/** trackBy for the class rows so re-sorting doesn't re-create the pickers. */
|
|
221
|
-
trackByClassName: (_: number, c: ClassPreset) => string;
|
|
222
205
|
/** Number of regions currently using a class (keyed by the active match mode). */
|
|
223
|
-
classCount(name: string): number;
|
|
206
|
+
protected classCount(name: string): number;
|
|
224
207
|
/** 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;
|
|
208
|
+
protected setClassColor(name: string, color: string): void;
|
|
228
209
|
/** Remove a class. Any regions still using it fall back to the default
|
|
229
210
|
* "Region" class, so they aren't orphaned (and the class isn't immediately
|
|
230
211
|
* re-added from its regions by syncClassesFromRegions). */
|
|
231
|
-
deleteClass(name: string): void;
|
|
212
|
+
protected deleteClass(name: string): void;
|
|
232
213
|
/** Regions labelled with any of `removedNames` revert to the default
|
|
233
214
|
* {@link defaultClassName} ("Region"): its class colour, override cleared.
|
|
234
215
|
* Skips the default itself so deleting "Region" can't self-reassign. (jit-ui#70) */
|
|
235
216
|
private reassignRegionsToDefaultClass;
|
|
236
217
|
/** Stamp a class (and its preset/fallback colour) onto one region from the Class
|
|
237
218
|
* dropdown; choosing a class opts the region back into the preset colour. */
|
|
238
|
-
applyPresetToRegion(region: Region, className: string): void;
|
|
219
|
+
protected applyPresetToRegion(region: Region, className: string): void;
|
|
239
220
|
/** Make a class active (used for new regions) and, if rows are selected, apply
|
|
240
221
|
* it to them in one commit. */
|
|
241
|
-
selectActiveClass(name: string): void;
|
|
222
|
+
protected selectActiveClass(name: string): void;
|
|
242
223
|
/** Apply a class (label + preset/fallback colour) to the current selection and commit. */
|
|
243
224
|
private applyClassToSelected;
|
|
244
225
|
/** "Edit class on selected rows" popup — apply the chosen existing class. */
|
|
245
|
-
applyBulkClass(): void;
|
|
226
|
+
protected applyBulkClass(): void;
|
|
246
227
|
/** "Edit class on selected rows" popup — add a new class and set it on the selection. */
|
|
247
|
-
addAndApplyBulkClass(): void;
|
|
248
|
-
openManageDialog(): void;
|
|
228
|
+
protected addAndApplyBulkClass(): void;
|
|
229
|
+
protected openManageDialog(): void;
|
|
249
230
|
private clonePresetSet;
|
|
250
|
-
addPresetClass(): void;
|
|
251
|
-
removePresetClass(i: number): void;
|
|
252
|
-
addFallbackColor(): void;
|
|
253
|
-
removeFallbackColor(i: number): void;
|
|
254
231
|
/** Commit the draft: drop blank/duplicate names, persist, and recolour
|
|
255
232
|
* non-overridden regions with the updated presets. */
|
|
256
|
-
applyManageDialog(close: boolean): void;
|
|
257
|
-
resetPresetsToDefaults(): void;
|
|
258
|
-
exportPresets(): void;
|
|
259
|
-
importPresets(event: Event): void;
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
* slices save to their own per-slice files) the current set. (jit-ui#93)
|
|
267
|
-
*/
|
|
233
|
+
protected applyManageDialog(close: boolean): void;
|
|
234
|
+
protected resetPresetsToDefaults(): void;
|
|
235
|
+
protected exportPresets(): void;
|
|
236
|
+
protected importPresets(event: Event): void;
|
|
237
|
+
/** Validate and apply an imported annotation-classes JSON file. */
|
|
238
|
+
private applyImportedPresets;
|
|
239
|
+
protected importRois(event: Event): void;
|
|
240
|
+
/** Replace the regions with an imported GeoJSON file's. */
|
|
241
|
+
private applyImportedRois;
|
|
242
|
+
/** Regions to serialize on save/export (every slice for a combined z-stack). */
|
|
268
243
|
private regionsForSave;
|
|
269
|
-
exportRois(): void;
|
|
270
|
-
confirmExport(): void;
|
|
244
|
+
protected exportRois(): void;
|
|
245
|
+
protected confirmExport(): void;
|
|
271
246
|
/** Open the "Save mask" dialog, seeded with `<image-stem>_mask.png`. */
|
|
272
|
-
openSaveMaskDialog(): void;
|
|
247
|
+
protected openSaveMaskDialog(): void;
|
|
273
248
|
/**
|
|
274
249
|
* Rasterize the regions to the chosen mask type and download as a PNG. The
|
|
275
|
-
* heavy work
|
|
276
|
-
*
|
|
277
|
-
*
|
|
250
|
+
* heavy work runs in a Web Worker ({@link MaskExportService}) so the UI never
|
|
251
|
+
* freezes on whole-slide images and the job can be cancelled (jit-ui#95);
|
|
252
|
+
* the dialog stays open with a progress bar until done.
|
|
278
253
|
*/
|
|
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>;
|
|
254
|
+
protected confirmSaveMask(): void;
|
|
255
|
+
/** Cancel an in-progress mask export (terminates its worker) and reset state. */
|
|
256
|
+
protected cancelSaveMask(): void;
|
|
286
257
|
private finishMask;
|
|
287
258
|
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
|
-
*/
|
|
259
|
+
protected persistRegions(): void;
|
|
260
|
+
/** Save a folder stack's regions as one geojson per slice-file (jit-ui#93).
|
|
261
|
+
* No dialog covers the toolbar meanwhile, so a Save while one is uploading
|
|
262
|
+
* is ignored rather than starting a second write (and orphaning the first). */
|
|
297
263
|
private saveStackSlices;
|
|
298
|
-
checkSaveAsFileExists(): void;
|
|
299
|
-
confirmSaveAs(): void;
|
|
264
|
+
protected checkSaveAsFileExists(): void;
|
|
265
|
+
protected confirmSaveAs(): void;
|
|
300
266
|
/** Cancel an in-progress GeoJSON persist: abort the deferred serialize and/or
|
|
301
267
|
* the in-flight upload, and reset state. */
|
|
302
|
-
cancelSaveAs(): void;
|
|
268
|
+
protected cancelSaveAs(): void;
|
|
269
|
+
private toast;
|
|
303
270
|
static ɵfac: i0.ɵɵFactoryDeclaration<RegionEditorComponent, never>;
|
|
304
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RegionEditorComponent, "region-editor", never, {}, {}, never, never,
|
|
271
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RegionEditorComponent, "region-editor", never, {}, {}, never, never, true, never>;
|
|
305
272
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Choose the physical pixel size for area display from the image meta. The
|
|
10
|
+
* calibration may sit on any channel entry, not necessarily [0], so take the
|
|
11
|
+
* first entry with a positive mppX (as PlotlyService.currentMpp does). With
|
|
12
|
+
* only one axis reported, pixels are square (mppY = mppX), so a scaled image
|
|
13
|
+
* shows µm²/mm² rather than px².
|
|
14
|
+
*/
|
|
15
|
+
export declare function pickMpp(meta: IImageMetadata[] | undefined): PixelSize;
|
|
16
|
+
/**
|
|
17
|
+
* A region's area in px²: width·height for a rectangle, shoelace for a polygon
|
|
18
|
+
* with each interior ring (hole) subtracted (a donut reports the annulus), and
|
|
19
|
+
* the sum of the parts for a multi-polygon (jit-ui#85). 0 for anything else.
|
|
20
|
+
*/
|
|
21
|
+
export declare function regionAreaPx(region: Pick<Region, 'bounds'>): number;
|
|
22
|
+
/**
|
|
23
|
+
* An area for display: µm² (mm² from 1e6 µm²) when the pixel size is known,
|
|
24
|
+
* otherwise px². Empty for a degenerate (non-positive) area.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatArea(px: number, mpp?: PixelSize): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { Region } from '../models/region';
|
|
3
|
+
import { IRegionEditorApi } from '../contracts/region-editor-api.contract';
|
|
4
|
+
import { RegionIoPort } from '../contracts/ports/region-io.port';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/** One slice-file's serialized regions (folder stack, jit-ui#93). */
|
|
7
|
+
export interface SliceGeoJson {
|
|
8
|
+
z: number;
|
|
9
|
+
geoJsonStr: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Region file I/O for the Region Editor: default file names, GeoJSON download
|
|
13
|
+
* (export), save to the host through {@link RegionIoPort} (with a debounced
|
|
14
|
+
* "file exists" check), per-slice saves for folder stacks, and reading an
|
|
15
|
+
* imported file. Provided by the editor; it holds no state — the editor owns
|
|
16
|
+
* the dialogs, the toasts and the running jobs.
|
|
17
|
+
*/
|
|
18
|
+
export declare class RegionPersistenceService {
|
|
19
|
+
private readonly api;
|
|
20
|
+
private readonly io;
|
|
21
|
+
constructor(api: IRegionEditorApi, io: RegionIoPort);
|
|
22
|
+
/** The selected image's file name, if any. */
|
|
23
|
+
selectedFileName(): string | undefined;
|
|
24
|
+
/** `<image-stem>.geojson` for a server save; undefined with no image selected. */
|
|
25
|
+
defaultSaveName(): string | undefined;
|
|
26
|
+
/** `<image-stem>.geojson` (or `rois.geojson`) for a download. */
|
|
27
|
+
defaultExportName(): string;
|
|
28
|
+
/** `<image-stem>_mask.png` (or `regions_mask.png`) for a mask download. */
|
|
29
|
+
defaultMaskName(): string;
|
|
30
|
+
/** True when a save writes one geojson per slice-file (folder stack, jit-ui#93). */
|
|
31
|
+
savesPerSlice(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Regions to serialize on save/export. For a single-file z-stack the store
|
|
34
|
+
* keeps only the current slice live, so take EVERY slice's annotations (each
|
|
35
|
+
* tagged with its zero-based Region.z) for one combined z-indexed geojson
|
|
36
|
+
* (jit-ui#93); otherwise `live` (single plane, or a folder stack whose slices
|
|
37
|
+
* save to their own files).
|
|
38
|
+
*/
|
|
39
|
+
regionsForSave(live: Region[]): Region[];
|
|
40
|
+
/**
|
|
41
|
+
* Whether each file name in `names` already exists on the host, debounced
|
|
42
|
+
* 400 ms; a newer name supersedes an in-flight check. A failed check reads as
|
|
43
|
+
* "does not exist" and later checks keep working.
|
|
44
|
+
*/
|
|
45
|
+
fileExists(names: Observable<string>): Observable<boolean>;
|
|
46
|
+
/** Download `regions` as a GeoJSON file named `filename`. */
|
|
47
|
+
download(regions: Region[], filename: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Save `regions()` to the host as `filename`. Serializing is deferred one
|
|
50
|
+
* tick (so a progress indicator paints before a large synchronous
|
|
51
|
+
* serialize); unsubscribing before then cancels the save entirely, and after
|
|
52
|
+
* it cancels the upload. A serialize failure is an error, like an upload one.
|
|
53
|
+
*/
|
|
54
|
+
save(regions: () => Region[], filename: string): Observable<void>;
|
|
55
|
+
/**
|
|
56
|
+
* A folder stack's regions as one geojson per slice-file (jit-ui#93), each
|
|
57
|
+
* serialized on the default plane (z=0): every slice-file is one plane, and
|
|
58
|
+
* the loader re-derives the slice index from the file's position. Slices
|
|
59
|
+
* cleared since load are included (empty) so their file is overwritten.
|
|
60
|
+
*/
|
|
61
|
+
sliceGeoJsons(): SliceGeoJson[];
|
|
62
|
+
/** Write per-slice geojsons through the host port. */
|
|
63
|
+
saveSlices(slices: SliceGeoJson[]): Observable<void>;
|
|
64
|
+
/** Read the file chosen in a file input's change event as text, then call
|
|
65
|
+
* `onText`. No-op when no file was chosen. */
|
|
66
|
+
readChosenFile(event: Event, onText: (text: string) => void): void;
|
|
67
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RegionPersistenceService, never>;
|
|
68
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RegionPersistenceService>;
|
|
69
|
+
}
|