@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
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Injector, NgZone, Type } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { Message } from 'primeng/api';
|
|
4
|
+
import { IImageInfo } from '../contracts/image.contract';
|
|
5
|
+
import { PlotType, PlotTypeId } from '../contracts/plot-type';
|
|
6
|
+
import { PlotModeTools, PlotTypeContribution } from '../contracts/plot-type-contribution.contract';
|
|
7
|
+
import { ToolbarContribution, ToolbarDialogToolContribution } from '../contracts/toolbar-tool.contract';
|
|
8
|
+
import { IVisualizer } from '../contracts/visualizer.contract';
|
|
9
|
+
import { PlotModeController } from './plot-mode-controller';
|
|
10
|
+
/** The live contributed mode's side panel, as the template renders it. */
|
|
11
|
+
export interface PlotModePanelView {
|
|
12
|
+
title: string;
|
|
13
|
+
/** An Angular component panel, with its own injector… */
|
|
14
|
+
component: Type<unknown> | null;
|
|
15
|
+
injector: Injector | null;
|
|
16
|
+
/** …or a plain host element a `mount` panel rendered into. */
|
|
17
|
+
host: HTMLElement | null;
|
|
18
|
+
}
|
|
19
|
+
/** The open dialog tool's dialog, as the template renders it. */
|
|
20
|
+
export interface ToolDialogView {
|
|
21
|
+
title: string;
|
|
22
|
+
width: string;
|
|
23
|
+
host: HTMLElement;
|
|
24
|
+
}
|
|
25
|
+
/** What the contributions need from the viewer that hosts them. */
|
|
26
|
+
export interface ContributionViewer {
|
|
27
|
+
readonly visualizer: IVisualizer;
|
|
28
|
+
readonly zone: NgZone;
|
|
29
|
+
/** The toolbar tools a contribution may arm (`PlotModeContext.tools`). */
|
|
30
|
+
readonly tools: PlotModeTools;
|
|
31
|
+
/** Parent of a component panel's injector. */
|
|
32
|
+
readonly injector?: Injector;
|
|
33
|
+
imageInfo$(): Observable<IImageInfo | null>;
|
|
34
|
+
/** The selector's id (a built-in type or a contributed mode). */
|
|
35
|
+
selectedId(): PlotTypeId;
|
|
36
|
+
/** The built-in type being rendered. */
|
|
37
|
+
renderedType(): PlotType;
|
|
38
|
+
/** A contributed mode could not start: select its base type, already on screen. */
|
|
39
|
+
selectBase(type: PlotType): void;
|
|
40
|
+
notify(message: Message): void;
|
|
41
|
+
detectChanges(): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Hosts the library's two kinds of contributed sessions over the viewer:
|
|
45
|
+
* - **plot modes** (`PLOT_TYPE_CONTRIBUTIONS`): a selector entry riding on a built-in
|
|
46
|
+
* base type, with an optional side panel;
|
|
47
|
+
* - **dialog tools** (`TOOLBAR_TOOLS`, `kind: 'dialog'`): a floating dialog over the
|
|
48
|
+
* Image view, whose body the tool mounts once the dialog is in the document.
|
|
49
|
+
*
|
|
50
|
+
* Both run through a {@link PlotModeController} (one live session each, isolated from
|
|
51
|
+
* a failing contribution). A session is bound to the base view it drew over, so it
|
|
52
|
+
* ends before anything else draws ({@link endSessions}) and restarts once the next
|
|
53
|
+
* render has landed ({@link activate}).
|
|
54
|
+
*/
|
|
55
|
+
export declare class ContributionHost {
|
|
56
|
+
private readonly viewer;
|
|
57
|
+
readonly plotModes: PlotModeController;
|
|
58
|
+
readonly toolDialogs: PlotModeController;
|
|
59
|
+
/** Dialog tools, sorted; their buttons show in the Image view only. */
|
|
60
|
+
readonly dialogTools: ToolbarDialogToolContribution[];
|
|
61
|
+
/** The live mode's panel; null while no contributed session is live. */
|
|
62
|
+
plotModePanel: PlotModePanelView | null;
|
|
63
|
+
/** The open dialog tool's live dialog. */
|
|
64
|
+
toolDialog: ToolDialogView | null;
|
|
65
|
+
/** The dialog tool the user has open (its session may be between renders). */
|
|
66
|
+
openDialogToolId: string | null;
|
|
67
|
+
private destroying;
|
|
68
|
+
/** The live dialog body's teardown, and a pending wait for its host to connect. */
|
|
69
|
+
private toolDialogTeardown;
|
|
70
|
+
private toolDialogFrame;
|
|
71
|
+
constructor(plotTypeContributions: readonly PlotTypeContribution[] | null | undefined, toolContributions: readonly ToolbarContribution[] | null | undefined, viewer: ContributionViewer);
|
|
72
|
+
/** End both sessions: the view they drew over is about to go. An open dialog tool
|
|
73
|
+
* stays open and restarts on the next {@link activate}. */
|
|
74
|
+
endSessions(): void;
|
|
75
|
+
/** A render landed: start the selected mode's session and the open dialog tool's. */
|
|
76
|
+
activate(): void;
|
|
77
|
+
/** The viewer is being destroyed: end both sessions without touching its view. */
|
|
78
|
+
destroy(): void;
|
|
79
|
+
/** The toolbar button: open the tool's dialog, or close it if it is open. */
|
|
80
|
+
toggleDialogTool(id: string): void;
|
|
81
|
+
/** Close the open dialog tool: its body is torn down, then its session ends. */
|
|
82
|
+
closeDialogTool(): void;
|
|
83
|
+
/** Attach a `mount` panel's host element once the panel dialog renders its slot. */
|
|
84
|
+
attachPanelSlot(slot: HTMLElement | undefined): void;
|
|
85
|
+
/** Attach the open dialog tool's host element once its dialog renders its slot. */
|
|
86
|
+
attachToolDialogSlot(slot: HTMLElement | undefined): void;
|
|
87
|
+
/**
|
|
88
|
+
* Start the selected contributed mode's session, once its base view has plotted.
|
|
89
|
+
* No-op for a built-in type, or when the base on screen is not the one the mode
|
|
90
|
+
* rides on. A backend that cannot provide a viewport for it (e.g. OSD fell back to
|
|
91
|
+
* Plotly) counts as a failed activation.
|
|
92
|
+
*/
|
|
93
|
+
private activateSelectedPlotMode;
|
|
94
|
+
/** Start (or restart, after a re-render) the open dialog tool's session. */
|
|
95
|
+
private activateOpenDialogTool;
|
|
96
|
+
/** A session's context over the backend on screen, or null when it has no viewport. */
|
|
97
|
+
private context;
|
|
98
|
+
/** Render the live mode's panel. Activation can resolve outside Angular (an OSD
|
|
99
|
+
* callback, a contribution's own promise), hence the zone re-entry. */
|
|
100
|
+
private showPlotModePanel;
|
|
101
|
+
/** Drop the panel (destroying a component panel) before the session ends. */
|
|
102
|
+
private hidePlotModePanel;
|
|
103
|
+
/** A contributed mode could not start. Its base type is already on screen — the base
|
|
104
|
+
* plotted first — so just select it: nothing needs to re-plot. */
|
|
105
|
+
private fallBackFromPlotMode;
|
|
106
|
+
/**
|
|
107
|
+
* The dialog-tool session is live: render the dialog, then mount the tool's body
|
|
108
|
+
* once the host element is in the document, so `mount()` can measure it and start
|
|
109
|
+
* widgets that need a connected element.
|
|
110
|
+
*/
|
|
111
|
+
private showToolDialog;
|
|
112
|
+
/**
|
|
113
|
+
* Mount `tool`'s body into `host` once it is connected (the dialog may attach it a
|
|
114
|
+
* frame later, when it moves itself to `<body>`). If it never connects within
|
|
115
|
+
* {@link TOOL_DIALOG_ATTACH_FRAMES} it is mounted anyway, with a warning, rather than
|
|
116
|
+
* leaving an empty dialog. A throwing `mount()` fails the session like a failed start.
|
|
117
|
+
*/
|
|
118
|
+
private mountToolDialogBody;
|
|
119
|
+
/** The dialog-tool session is about to end: tear the body down first, then drop the dialog. */
|
|
120
|
+
private hideToolDialog;
|
|
121
|
+
/** A dialog tool could not start: close it and say so. */
|
|
122
|
+
private dialogToolFailed;
|
|
123
|
+
/** Run change detection; returns what it threw (logged), or null. */
|
|
124
|
+
private detectChangesSafely;
|
|
125
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ViewerCapabilities } from '../contracts/capabilities.contract';
|
|
2
|
+
import { IImageInfo } from '../contracts/image.contract';
|
|
3
|
+
import { PlotTypeDescriptor, PlotTypeId } from '../contracts/plot-type';
|
|
4
|
+
import { ContributedPlotTypeDescriptor, PlotTypeOption } from '../contracts/plot-type-contribution.contract';
|
|
5
|
+
/** What a spatial-omics dataset on offer contributes to the plot-type gates. */
|
|
6
|
+
export interface SpatialGates {
|
|
7
|
+
/** A dataset is published on `SPATIAL_DATA_PORT`. */
|
|
8
|
+
hasDataset: boolean;
|
|
9
|
+
/** Its observations carry a z, so it can be drawn as a 3D cloud. */
|
|
10
|
+
has3d: boolean;
|
|
11
|
+
/** It brings pixels of its own: a tissue image it registers onto, or a volume
|
|
12
|
+
* published as a z-stack image. */
|
|
13
|
+
hasPixels: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Everything {@link computePlotTypeMenu} gates on. */
|
|
16
|
+
export interface PlotTypeMenuInput {
|
|
17
|
+
/** The built-in types the backend advertises. */
|
|
18
|
+
descriptors: PlotTypeDescriptor[];
|
|
19
|
+
/** Contributed plot modes (`PLOT_TYPE_CONTRIBUTIONS`). */
|
|
20
|
+
contributions: ContributedPlotTypeDescriptor[];
|
|
21
|
+
caps: ViewerCapabilities;
|
|
22
|
+
imageInfo: IImageInfo | undefined;
|
|
23
|
+
spatial: SpatialGates;
|
|
24
|
+
/** Offer every backend's type under its full label, not just the curated set. */
|
|
25
|
+
testMode: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** The selector's entries: {@link builtIn} then the contributed modes. */
|
|
28
|
+
export interface PlotTypeMenu {
|
|
29
|
+
builtIn: PlotTypeDescriptor[];
|
|
30
|
+
menu: PlotTypeOption[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Plot types offered in the selector for the current image:
|
|
34
|
+
* - Outside **test mode**, only the curated default set (descriptors with a
|
|
35
|
+
* `productionLabel`) is offered, shown under suffix-free names — Image,
|
|
36
|
+
* Heatmap, Contour and the napari Surface / Volume / Isosurface. Test mode
|
|
37
|
+
* exposes every backend's type under its full (backend-suffixed) label.
|
|
38
|
+
* - 3D types hidden when the backend can't render a 3D scene.
|
|
39
|
+
* - stack-only types (volume, isosurface) hidden unless the file is a stack —
|
|
40
|
+
* a volume needs multiple z-slices.
|
|
41
|
+
* - scalar-intensity types (contour, surface, isosurface) hidden for RGB
|
|
42
|
+
* images — they map a single intensity per pixel. Image and Heatmap render
|
|
43
|
+
* any image. A multichannel image's bands are each scalar, so it passes.
|
|
44
|
+
* - spatial-omics types hidden until a `SpatialDataset` is published on
|
|
45
|
+
* `SPATIAL_DATA_PORT` — the mode has nothing to draw without observations,
|
|
46
|
+
* exactly as a volume has nothing to draw without a stack.
|
|
47
|
+
* - image-sourced types hidden while a dataset that brings no pixels is up.
|
|
48
|
+
*
|
|
49
|
+
* Contributed modes come after every built-in one, under the same label rule and
|
|
50
|
+
* their own stack/grayscale/spatial gates; a mode also needs whatever its base view
|
|
51
|
+
* needs, so the base type's gates apply too.
|
|
52
|
+
*/
|
|
53
|
+
export declare function computePlotTypeMenu(input: PlotTypeMenuInput): PlotTypeMenu;
|
|
54
|
+
/**
|
|
55
|
+
* The type to fall back to when `selected` is no longer offered — Image when it is
|
|
56
|
+
* on offer, else the first type still offered — or null when `selected` is still
|
|
57
|
+
* offered (or nothing is). With no image loaded the pixel modes are gone, and falling
|
|
58
|
+
* back to Image would select a mode the selector does not list and nothing can draw.
|
|
59
|
+
*/
|
|
60
|
+
export declare function reconcilePlotType(menu: PlotTypeOption[], selected: PlotTypeId): PlotTypeId | null;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { NumberParamSpec, SelectParamSpec, ToolParamSpec, ToolbarToolContribution } from '../contracts/toolbar-tool.contract';
|
|
2
|
+
/** The open parameter dialog, as its template binds it. */
|
|
3
|
+
export interface OpenToolParams {
|
|
4
|
+
tool: ToolbarToolContribution;
|
|
5
|
+
/** The tool's live values; the dialog edits them in place. */
|
|
6
|
+
values: Record<string, unknown>;
|
|
7
|
+
/** Each field's spec, already narrowed for the template (an `*ngSwitchCase` does not
|
|
8
|
+
* narrow a union in the template type checker). */
|
|
9
|
+
fields: {
|
|
10
|
+
spec: ToolParamSpec;
|
|
11
|
+
number: NumberParamSpec | null;
|
|
12
|
+
select: SelectParamSpec | null;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Checkpoint choice and parameter values of the contributed no-prompt tools
|
|
17
|
+
* (`TOOLBAR_TOOLS`), and the generic parameter dialog over them.
|
|
18
|
+
*
|
|
19
|
+
* Values are seeded from the tool's defaults with the active checkpoint's own
|
|
20
|
+
* `ToolModelOption.defaults` on top — they encode the scale and crowding the
|
|
21
|
+
* checkpoint was trained for — lazily, on first use, and re-seeded when the
|
|
22
|
+
* checkpoint changes or the user resets.
|
|
23
|
+
*/
|
|
24
|
+
export declare class ToolParamsModel {
|
|
25
|
+
readonly tools: ToolbarToolContribution[];
|
|
26
|
+
/** Active checkpoint per tool; replaced (not mutated) so the toolbar sees a new reference. */
|
|
27
|
+
toolModelIds: Record<string, string>;
|
|
28
|
+
/** Parameter values per tool. */
|
|
29
|
+
toolParams: Record<string, Record<string, unknown>>;
|
|
30
|
+
/** The open dialog, built once on open so change detection only reads properties. Null while closed. */
|
|
31
|
+
openParams: OpenToolParams | null;
|
|
32
|
+
constructor(tools: ToolbarToolContribution[]);
|
|
33
|
+
/** A tool's current values, seeded on first use. */
|
|
34
|
+
paramsFor(toolId: string): Record<string, unknown>;
|
|
35
|
+
/** Active checkpoint for a tool, falling back to the tool's own default. */
|
|
36
|
+
modelIdFor(tool: ToolbarToolContribution): string;
|
|
37
|
+
/** Switching checkpoint re-seeds the parameters: the defaults belong to the model. */
|
|
38
|
+
setModel(toolId: string, modelId: string): void;
|
|
39
|
+
reset(toolId: string): void;
|
|
40
|
+
open(toolId: string): void;
|
|
41
|
+
close(): void;
|
|
42
|
+
/** The values to run a tool with: its parameters plus the active checkpoint. */
|
|
43
|
+
runParams(tool: ToolbarToolContribution): Record<string, unknown>;
|
|
44
|
+
find(toolId: string): ToolbarToolContribution | undefined;
|
|
45
|
+
/** A tool's defaults for a checkpoint, with that checkpoint's own overrides on top. */
|
|
46
|
+
private seed;
|
|
47
|
+
/** A tool's values object was replaced: point an open dialog for it at the new one. */
|
|
48
|
+
private rebind;
|
|
49
|
+
}
|
package/lib/plot.utilities.d.ts
CHANGED
|
@@ -3,13 +3,19 @@ import { ShapeSelection } from './models/shape';
|
|
|
3
3
|
export declare const COLORMAP_OPTIONS: {
|
|
4
4
|
label: string;
|
|
5
5
|
data: null;
|
|
6
|
-
children: {
|
|
6
|
+
children: ({
|
|
7
|
+
label: string;
|
|
8
|
+
data: {
|
|
9
|
+
value: [number, string][];
|
|
10
|
+
src: string;
|
|
11
|
+
};
|
|
12
|
+
} | {
|
|
7
13
|
label: string;
|
|
8
14
|
data: {
|
|
9
15
|
value: string;
|
|
10
16
|
src: string;
|
|
11
17
|
};
|
|
12
|
-
}[];
|
|
18
|
+
})[];
|
|
13
19
|
}[];
|
|
14
20
|
export declare const CONFIG: {
|
|
15
21
|
displaylogo: boolean;
|
|
@@ -45,7 +51,9 @@ export declare class PlotUtilities {
|
|
|
45
51
|
*/
|
|
46
52
|
getRectangle(coordinates: number[], trueImageSize: number[]): Rectangle;
|
|
47
53
|
/**
|
|
48
|
-
*
|
|
54
|
+
* The on-screen box a plot div is laid out in: the bounding rectangle of the
|
|
55
|
+
* element with id `div`'s parent (callers pass the plot div's own id). An
|
|
56
|
+
* empty Rectangle when there is no such element or it has no parent.
|
|
49
57
|
* @param div
|
|
50
58
|
*/
|
|
51
59
|
getDomRectangle(div: string): Rectangle;
|
|
@@ -61,47 +69,28 @@ export declare class PlotUtilities {
|
|
|
61
69
|
*/
|
|
62
70
|
getPolygon(fig: any): any;
|
|
63
71
|
/**
|
|
64
|
-
* TESTED
|
|
65
72
|
* Rounds a list of numbers
|
|
66
73
|
* @param a
|
|
67
74
|
*/
|
|
68
75
|
round(a: number[]): number[];
|
|
69
76
|
/**
|
|
70
|
-
*
|
|
71
|
-
* Returns true of zoom is the same as image size
|
|
77
|
+
* Returns true if the zoom is the same as the image size
|
|
72
78
|
* @param rect Rectangle area
|
|
73
79
|
* @param trueImgSize
|
|
74
80
|
* @return true if rect is out of image size boundary
|
|
75
81
|
*/
|
|
76
82
|
isZoomSameAsImgSize(rect: Rectangle, trueImgSize: number[]): boolean;
|
|
77
83
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*/
|
|
81
|
-
saveToFile(jsonString: any, baseName?: string): void;
|
|
82
|
-
/**
|
|
83
|
-
* Function that imports ROIs from a geojson object
|
|
84
|
-
* @param geoJsonStr
|
|
85
|
-
* @return Region[]
|
|
84
|
+
* Download a GeoJSON string as `<baseName without extension>.geojson`
|
|
85
|
+
* (`rois.geojson` without a base name).
|
|
86
86
|
*/
|
|
87
|
+
saveToFile(jsonString: string, baseName?: string): void;
|
|
88
|
+
/** Parse GeoJSON into regions; see {@link regionsFromGeoJson} in `models/region-geojson`. */
|
|
87
89
|
importROIsFromGeoJson(geoJsonStr: string): Region[];
|
|
88
|
-
/**
|
|
89
|
-
* Function that returns a geojson object from a Plotly ROI
|
|
90
|
-
* @param rois
|
|
91
|
-
* @return FeatureCollection<Geometry, GeoJsonProperties>
|
|
92
|
-
*/
|
|
90
|
+
/** Serialise regions as GeoJSON; see {@link regionsToGeoJson} in `models/region-geojson`. */
|
|
93
91
|
exportROIsToGeoJson(rois: Region[]): string;
|
|
94
|
-
/**
|
|
95
|
-
* Convert GeoJSON interior rings into the neutral hole representation
|
|
96
|
-
* (`number[][]` per ring, no repeated closing point). Degenerate rings (< 3
|
|
97
|
-
* distinct points) are dropped. jit-ui#85.
|
|
98
|
-
*/
|
|
99
|
-
/**
|
|
100
|
-
* Build a closed {@link Polygon} from a GeoJSON ring set: `rings[0]` is the
|
|
101
|
-
* exterior (closing point dropped), `rings[1..]` are interior holes. jit-ui#85.
|
|
102
|
-
*/
|
|
103
|
-
private polygonFromRings;
|
|
104
|
-
private ringsToHoles;
|
|
92
|
+
/** `#rrggbb` for an RGB triple; see {@link rgbToHex} in `contracts/color`. */
|
|
105
93
|
rgbToHex(r: number, g: number, b: number): string;
|
|
94
|
+
/** RGB for a hex colour (`#rgb` / `#rrggbb`); black when missing or unparseable. */
|
|
106
95
|
hexToRgb(hex: string | undefined): number[];
|
|
107
96
|
}
|
|
@@ -10,8 +10,11 @@ export declare class ProcessingImage {
|
|
|
10
10
|
/** Create from browser ImageData. */
|
|
11
11
|
static fromImageData(imageData: ImageData): ProcessingImage;
|
|
12
12
|
constructor(width: number, height: number, channels: number, data: Uint8ClampedArray);
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Convert to browser-native ImageData (RGBA). Gray (1), gray+alpha (2) and
|
|
15
|
+
* RGB (3) are expanded; other channel counts throw.
|
|
16
|
+
*/
|
|
14
17
|
toImageData(): ImageData;
|
|
15
|
-
/** Convert to Blob for saving/downloading. */
|
|
18
|
+
/** Convert to Blob for saving/downloading. Rejects when the browser can't encode it. */
|
|
16
19
|
toBlob(mime?: string): Promise<Blob>;
|
|
17
20
|
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { Provider } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* The three host-facing contracts, all served by the router. Shared by
|
|
4
|
+
* {@link provideVisualization} (component scope) and `VisualizationModule` (root),
|
|
5
|
+
* so both bind them the same way; at each scope they resolve to that scope's router.
|
|
6
|
+
* Package-internal (not exported from the public API).
|
|
7
|
+
*/
|
|
8
|
+
export declare const VISUALIZER_TOKEN_BINDINGS: Provider[];
|
|
2
9
|
/**
|
|
3
10
|
* A self-contained, isolated visualization backend chain for a component subtree.
|
|
4
11
|
*
|
|
@@ -26,9 +33,19 @@ import { Provider } from '@angular/core';
|
|
|
26
33
|
* embedded viewer gets its own router/Plotly/OSD/stores/tools while the rest of the
|
|
27
34
|
* app keeps the default root instance.
|
|
28
35
|
*
|
|
36
|
+
* In an application's own providers (`bootstrapApplication(App, { providers: [
|
|
37
|
+
* provideVisualization(), …] })`) it binds the one app-wide chain instead — the
|
|
38
|
+
* standalone counterpart of importing the deprecated `VisualizationModule`.
|
|
39
|
+
*
|
|
29
40
|
* Lists EVERY stateful service in the chain. Stateless collaborators (HttpClient,
|
|
30
41
|
* MessageService, WandService) deliberately resolve to root — they hold no
|
|
31
|
-
* per-viewer state, so sharing them is correct and keeps this list minimal.
|
|
32
|
-
*
|
|
42
|
+
* per-viewer state, so sharing them is correct and keeps this list minimal. The
|
|
43
|
+
* SAM model session (`SamSessionService`) is also root on purpose: every viewer's
|
|
44
|
+
* SAM tools share one model download and Worker/GPU session (see its doc; a host
|
|
45
|
+
* can provide it at a viewer component to get a per-viewer session that is
|
|
46
|
+
* disposed with the viewer). When a
|
|
47
|
+
* new stateful service joins the rendering chain, add it here too —
|
|
48
|
+
* `provide-visualization.spec.ts` fails until it is listed (or allow-listed there as
|
|
49
|
+
* deliberately shared).
|
|
33
50
|
*/
|
|
34
51
|
export declare function provideVisualization(): Provider[];
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import type { RegionClassNode } from '../../region-source/region-tiles';
|
|
3
|
+
import { ClassTree, ClassTreeRow } from './class-tree';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/** A pick in the tree: the class, and it with every class under it. */
|
|
6
|
+
export interface ClassTreePick {
|
|
7
|
+
name: string;
|
|
8
|
+
classes: string[];
|
|
9
|
+
additive: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Whether a class is shown: it and its subclasses all, none ('hidden'), or only some ('partial'). */
|
|
12
|
+
export type ClassVisibility = 'shown' | 'hidden' | 'partial';
|
|
13
|
+
/**
|
|
14
|
+
* The Region Editor's classes as a hierarchy (a brain atlas's ontology), as the Allen atlas viewer
|
|
15
|
+
* shows it: collapsible, each class with its colour, name and long name, and the regions it and
|
|
16
|
+
* its subclasses have on this slice; a class with none is greyed. Picking a class selects all its
|
|
17
|
+
* regions and its subclasses' (the editor does the selecting). Search by name or long name. A
|
|
18
|
+
* class's swatch recolours it, as the class list's does; its eye hides it and its subclasses.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ClassTreeComponent implements OnChanges {
|
|
21
|
+
private readonly el;
|
|
22
|
+
/** The hierarchy. */
|
|
23
|
+
nodes: readonly RegionClassNode[];
|
|
24
|
+
/** Regions per class on this slice (the regions and the region source's). */
|
|
25
|
+
counts: ReadonlyMap<string, number>;
|
|
26
|
+
/** A class's colour (a new function when the colours change, so the rows repaint). */
|
|
27
|
+
colorOf: (name: string) => string;
|
|
28
|
+
/** The class picked last (highlighted, its path expanded, scrolled into view). */
|
|
29
|
+
picked: string | null;
|
|
30
|
+
/** Classes with a selected region (marked). */
|
|
31
|
+
marked: ReadonlySet<string>;
|
|
32
|
+
/** Whether a volume view is on screen: each class can then be shown in 3D. */
|
|
33
|
+
volume: boolean;
|
|
34
|
+
/** The classes shown in 3D. */
|
|
35
|
+
shown3d: ReadonlySet<string>;
|
|
36
|
+
/** The classes hidden from view. */
|
|
37
|
+
hidden: ReadonlySet<string>;
|
|
38
|
+
pick: EventEmitter<ClassTreePick>;
|
|
39
|
+
/** A class's swatch picked a new colour. */
|
|
40
|
+
recolor: EventEmitter<{
|
|
41
|
+
name: string;
|
|
42
|
+
color: string;
|
|
43
|
+
}>;
|
|
44
|
+
/** A class's 3D toggle: it with every class under it. */
|
|
45
|
+
toggle3d: EventEmitter<{
|
|
46
|
+
name: string;
|
|
47
|
+
classes: string[];
|
|
48
|
+
}>;
|
|
49
|
+
/** A class's eye: hide (or show) it with every class under it. */
|
|
50
|
+
toggleHidden: EventEmitter<{
|
|
51
|
+
classes: string[];
|
|
52
|
+
hidden: boolean;
|
|
53
|
+
}>;
|
|
54
|
+
protected tree: ClassTree;
|
|
55
|
+
protected rows: ClassTreeRow[];
|
|
56
|
+
/** Each row's visibility (a row absent: shown). */
|
|
57
|
+
protected visibility: Map<string, ClassVisibility>;
|
|
58
|
+
protected query: string;
|
|
59
|
+
private expanded;
|
|
60
|
+
constructor(el: ElementRef<HTMLElement>);
|
|
61
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
62
|
+
protected node(name: string): RegionClassNode | undefined;
|
|
63
|
+
protected total(name: string): number;
|
|
64
|
+
protected toggle(row: ClassTreeRow, event: Event): void;
|
|
65
|
+
protected choose(name: string, event: Event): void;
|
|
66
|
+
/** The eye: a class hidden (wholly) is shown again with its subclasses; otherwise they are hidden. */
|
|
67
|
+
protected flipHidden(name: string, event: Event): void;
|
|
68
|
+
protected flip3d(name: string, event: Event): void;
|
|
69
|
+
protected onQuery(value: string): void;
|
|
70
|
+
/** Enter in the search box picks the first match. */
|
|
71
|
+
protected pickFirstMatch(event: Event): void;
|
|
72
|
+
protected readonly trackRow: (_: number, r: ClassTreeRow) => string;
|
|
73
|
+
private refresh;
|
|
74
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClassTreeComponent, never>;
|
|
75
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClassTreeComponent, "region-class-tree", never, { "nodes": { "alias": "nodes"; "required": false; }; "counts": { "alias": "counts"; "required": false; }; "colorOf": { "alias": "colorOf"; "required": false; }; "picked": { "alias": "picked"; "required": false; }; "marked": { "alias": "marked"; "required": false; }; "volume": { "alias": "volume"; "required": false; }; "shown3d": { "alias": "shown3d"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; }, { "pick": "pick"; "recolor": "recolor"; "toggle3d": "toggle3d"; "toggleHidden": "toggleHidden"; }, never, never, true, never>;
|
|
76
|
+
}
|
|
77
|
+
/** Scroll the row matching `selector` inside `host` into view, if it is out of it. */
|
|
78
|
+
export declare function scrollToPicked(host: HTMLElement, selector: string): void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RegionClassNode } from '../../region-source/region-tiles';
|
|
2
|
+
/** A class hierarchy as a tree: children in order, subtree counts, depths. Pure. */
|
|
3
|
+
export interface ClassTree {
|
|
4
|
+
roots: string[];
|
|
5
|
+
node: Map<string, RegionClassNode>;
|
|
6
|
+
children: Map<string, string[]>;
|
|
7
|
+
parent: Map<string, string | null>;
|
|
8
|
+
/** Regions of the class and every class under it. */
|
|
9
|
+
total: Map<string, number>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Build the tree of `nodes`, counting `counts` (regions per class) up through it. A node whose
|
|
13
|
+
* parent is not in the hierarchy is a root; siblings sort by `order`, then as listed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildClassTree(nodes: readonly RegionClassNode[], counts: ReadonlyMap<string, number>): ClassTree;
|
|
16
|
+
/** `name` and every class under it. */
|
|
17
|
+
export declare function subtree(tree: ClassTree, name: string): string[];
|
|
18
|
+
/** The classes from the root down to `name`'s parent. */
|
|
19
|
+
export declare function ancestors(tree: ClassTree, name: string): string[];
|
|
20
|
+
/** One visible row of the tree. */
|
|
21
|
+
export interface ClassTreeRow {
|
|
22
|
+
name: string;
|
|
23
|
+
depth: number;
|
|
24
|
+
hasChildren: boolean;
|
|
25
|
+
expanded: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The rows to draw: depth-first through the expanded nodes. With a `query`, only the nodes whose
|
|
29
|
+
* name or title contains it and their ancestors, all expanded.
|
|
30
|
+
*/
|
|
31
|
+
export declare function visibleRows(tree: ClassTree, expanded: ReadonlySet<string>, query?: string): ClassTreeRow[];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { ClassPreset, MatchMode } from '../../models/class-preset';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** One class row as the template draws it, derived once per input change. */
|
|
5
|
+
interface ClassRow {
|
|
6
|
+
name: string;
|
|
7
|
+
color: string;
|
|
8
|
+
count: number;
|
|
9
|
+
canRemove: boolean;
|
|
10
|
+
rowTooltip: string;
|
|
11
|
+
removeTooltip: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The Region Editor's docked "Classes" panel (jit-ui#70): every annotation
|
|
15
|
+
* class with its colour swatch and region count. A row click picks the active
|
|
16
|
+
* class (and re-classifies a selection), the swatch recolours the class, the
|
|
17
|
+
* trash removes it, Manage opens the full editor; the search box filters the
|
|
18
|
+
* rows by name; the eye hides a class's regions. For a class hierarchy the editor projects a class tree in,
|
|
19
|
+
* shown in place of the list while {@link treeView} is on. Presentational: the
|
|
20
|
+
* editor applies every action.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ClassesPanelComponent implements OnChanges {
|
|
23
|
+
private readonly el;
|
|
24
|
+
/** The classes in display order. */
|
|
25
|
+
classes: ClassPreset[];
|
|
26
|
+
/** Region count per class, keyed by {@link presetKey} under `matchMode`. */
|
|
27
|
+
counts: Map<string, number>;
|
|
28
|
+
/** How labels are matched to classes (keys {@link counts}). */
|
|
29
|
+
matchMode: MatchMode;
|
|
30
|
+
/** The active class (highlighted), or null. */
|
|
31
|
+
activeClass: string | null;
|
|
32
|
+
/** The class picked last (in the class tree, or a surface in 3D): highlighted, scrolled into view. */
|
|
33
|
+
picked: string | null;
|
|
34
|
+
/** Classes with a selected region (marked). */
|
|
35
|
+
marked: ReadonlySet<string>;
|
|
36
|
+
/** Number of selected regions (changes what a row click does). */
|
|
37
|
+
selectedCount: number;
|
|
38
|
+
/** The class regions revert to; it can't be removed while in use. */
|
|
39
|
+
defaultClassName: string;
|
|
40
|
+
/** Whether a volume view is on screen: each class can then be shown in 3D. */
|
|
41
|
+
volume: boolean;
|
|
42
|
+
/** The classes shown in 3D. */
|
|
43
|
+
shown3d: ReadonlySet<string>;
|
|
44
|
+
/** The classes hidden from view. */
|
|
45
|
+
hidden: ReadonlySet<string>;
|
|
46
|
+
/** A class's eye (its name): hide it, or show it again. */
|
|
47
|
+
toggleHidden: EventEmitter<string>;
|
|
48
|
+
/** A class's 3D toggle (its name). */
|
|
49
|
+
toggle3d: EventEmitter<string>;
|
|
50
|
+
/** Whether the projected class tree is shown instead of the list; null: there is no tree. */
|
|
51
|
+
treeView: boolean | null;
|
|
52
|
+
/** The list / tree switch. */
|
|
53
|
+
treeViewChange: EventEmitter<boolean>;
|
|
54
|
+
/** A row was clicked: make the class active / apply it to the selection. */
|
|
55
|
+
pick: EventEmitter<string>;
|
|
56
|
+
/** A class's swatch picked a new colour. */
|
|
57
|
+
recolor: EventEmitter<{
|
|
58
|
+
name: string;
|
|
59
|
+
color: string;
|
|
60
|
+
}>;
|
|
61
|
+
/** A class's trash button (its name). */
|
|
62
|
+
remove: EventEmitter<string>;
|
|
63
|
+
/** Manage clicked. */
|
|
64
|
+
manage: EventEmitter<void>;
|
|
65
|
+
/** trackBy for the class rows so re-sorting doesn't re-create the pickers. */
|
|
66
|
+
protected readonly trackByName: (_: number, c: ClassRow) => string;
|
|
67
|
+
/** Every class's row, rebuilt when an input changes rather than per check. */
|
|
68
|
+
protected rows: ClassRow[];
|
|
69
|
+
/** The rows matching {@link query}. */
|
|
70
|
+
protected shownRows: ClassRow[];
|
|
71
|
+
/** The search box's text. */
|
|
72
|
+
protected query: string;
|
|
73
|
+
constructor(el: ElementRef<HTMLElement>);
|
|
74
|
+
ngOnChanges(changes?: SimpleChanges): void;
|
|
75
|
+
protected onQuery(value: string): void;
|
|
76
|
+
/** Enter in the search box picks the first match. */
|
|
77
|
+
protected pickFirstMatch(): void;
|
|
78
|
+
private filter;
|
|
79
|
+
private count;
|
|
80
|
+
private canRemove;
|
|
81
|
+
protected rowTooltip(name: string): string;
|
|
82
|
+
protected removeTooltip(name: string): string;
|
|
83
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClassesPanelComponent, never>;
|
|
84
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClassesPanelComponent, "region-classes-panel", never, { "classes": { "alias": "classes"; "required": false; }; "counts": { "alias": "counts"; "required": false; }; "matchMode": { "alias": "matchMode"; "required": false; }; "activeClass": { "alias": "activeClass"; "required": false; }; "picked": { "alias": "picked"; "required": false; }; "marked": { "alias": "marked"; "required": false; }; "selectedCount": { "alias": "selectedCount"; "required": false; }; "defaultClassName": { "alias": "defaultClassName"; "required": false; }; "volume": { "alias": "volume"; "required": false; }; "shown3d": { "alias": "shown3d"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "treeView": { "alias": "treeView"; "required": false; }; }, { "toggleHidden": "toggleHidden"; "toggle3d": "toggle3d"; "treeViewChange": "treeViewChange"; "pick": "pick"; "recolor": "recolor"; "remove": "remove"; "manage": "manage"; }, never, ["*"], true, never>;
|
|
85
|
+
}
|
|
86
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A file name without its extension: `slide.ome.tif` → `slide.ome`. A name with
|
|
3
|
+
* no extension — or only a leading dot, like `.hidden` — is returned whole, so
|
|
4
|
+
* a derived name is never a bare `.geojson`. `fallback` stands in for a missing
|
|
5
|
+
* name.
|
|
6
|
+
*/
|
|
7
|
+
export declare function fileStem(name: string | null | undefined, fallback: string): string;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { ClassPreset, MatchMode, PresetSet } from '../../models/class-preset';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* "Manage annotation classes" (jit-ui#70): edit the classes, the fallback
|
|
6
|
+
* palette, auto-add and label matching of a working copy of the preset set,
|
|
7
|
+
* plus reset / import / export. The editor owns the draft (`[(draft)]`); every
|
|
8
|
+
* edit here emits a new draft object (nothing is changed in place), and Apply
|
|
9
|
+
* asks the editor to persist it.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ManageClassesDialogComponent {
|
|
12
|
+
/** The dialog is open. */
|
|
13
|
+
visible: boolean;
|
|
14
|
+
/** The dialog was closed (`false`); two-way with {@link visible}. */
|
|
15
|
+
visibleChange: EventEmitter<boolean>;
|
|
16
|
+
/** The working copy being edited (null until the dialog is opened). */
|
|
17
|
+
draft: PresetSet | null;
|
|
18
|
+
/** Every edit: the new draft object; two-way with {@link draft}. */
|
|
19
|
+
draftChange: EventEmitter<PresetSet>;
|
|
20
|
+
/** Apply clicked: persist the draft and close. */
|
|
21
|
+
apply: EventEmitter<void>;
|
|
22
|
+
/** Reset clicked: restore the default classes. */
|
|
23
|
+
resetDefaults: EventEmitter<void>;
|
|
24
|
+
/** A preset JSON file was chosen (the input's change event). */
|
|
25
|
+
importFile: EventEmitter<Event>;
|
|
26
|
+
/** Export clicked. */
|
|
27
|
+
export: EventEmitter<void>;
|
|
28
|
+
protected readonly matchModeOptions: {
|
|
29
|
+
label: string;
|
|
30
|
+
value: string;
|
|
31
|
+
}[];
|
|
32
|
+
/** Rows keep their DOM (and input focus) while their class object is replaced. */
|
|
33
|
+
protected readonly trackByIndex: (i: number) => number;
|
|
34
|
+
protected addClass(): void;
|
|
35
|
+
protected removeClass(i: number): void;
|
|
36
|
+
protected patchClass(i: number, patch: Partial<ClassPreset>): void;
|
|
37
|
+
protected addFallbackColor(): void;
|
|
38
|
+
protected removeFallbackColor(i: number): void;
|
|
39
|
+
protected setFallbackColor(i: number, color: string): void;
|
|
40
|
+
protected setAutoPromote(autoPromote: boolean): void;
|
|
41
|
+
protected setMatchMode(matchMode: MatchMode): void;
|
|
42
|
+
private update;
|
|
43
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ManageClassesDialogComponent, never>;
|
|
44
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ManageClassesDialogComponent, "region-manage-classes-dialog", never, { "visible": { "alias": "visible"; "required": false; }; "draft": { "alias": "draft"; "required": false; }; }, { "visibleChange": "visibleChange"; "draftChange": "draftChange"; "apply": "apply"; "resetDefaults": "resetDefaults"; "importFile": "importFile"; "export": "export"; }, never, never, true, never>;
|
|
45
|
+
}
|