@jax-data-science/sci-image-visualizer 0.8.2 → 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 +361 -4184
- 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 -34430
- 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 -878
- 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
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import type { ISpatialControls } from '../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../contracts/spatial-dataset.contract';
|
|
4
|
+
import { PanelOption } from '../spatial/spatial-panel-model';
|
|
5
|
+
/** What a gene dropdown shows: its options, and what an empty list means. */
|
|
6
|
+
export interface GenePickerState {
|
|
7
|
+
/**
|
|
8
|
+
* The options. The full name list when the dataset inlines it (a targeted panel: 8 for
|
|
9
|
+
* the ABC demo, 300–5,000 for Xenium/CosMx) — or rather its best few hundred, see
|
|
10
|
+
* {@link GenePickerModel}. A whole-transcriptome dataset does not ship its ~31k names, so
|
|
11
|
+
* there the list is what the port's last search returned and filtering is server-side —
|
|
12
|
+
* same control either way.
|
|
13
|
+
*/
|
|
14
|
+
options: PanelOption<string>[];
|
|
15
|
+
/** True when the options come from the port per keystroke rather than a resident list,
|
|
16
|
+
* which changes what an empty list means (nothing matched *yet*). */
|
|
17
|
+
remote: boolean;
|
|
18
|
+
/** The last remote lookup failed. */
|
|
19
|
+
failed: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The gene list behind every gene dropdown of the spatial-omics panel — "Colour by gene",
|
|
23
|
+
* the cells' gene colouring, and the transcript genes. One model for all three: they share
|
|
24
|
+
* one list and one search, so each opens on the head of the full list rather than on
|
|
25
|
+
* whatever another was last filtered to, and a whole-transcriptome list is fetched once.
|
|
26
|
+
*
|
|
27
|
+
* Every gene the dataset inlined is held as plain strings and searched per keystroke. A
|
|
28
|
+
* whole-transcriptome dataset inlines ~18k names — cheap to keep, ruinous to hand a
|
|
29
|
+
* dropdown all at once — so the options are only ever the best few hundred of them.
|
|
30
|
+
*
|
|
31
|
+
* Plain class, no Angular: the owner passes `run`, which re-enters the zone, and the
|
|
32
|
+
* dropdowns read {@link state$} through the `async` pipe, so an OnPush panel re-renders
|
|
33
|
+
* when a search lands.
|
|
34
|
+
*/
|
|
35
|
+
export declare class GenePickerModel {
|
|
36
|
+
private readonly controls;
|
|
37
|
+
private readonly chosen;
|
|
38
|
+
private readonly run;
|
|
39
|
+
/** Most names fetched for the lazy list — well above any panel, whole-transcriptome included. */
|
|
40
|
+
static readonly LIST_MAX = 100000;
|
|
41
|
+
/** Names asked of the port per keystroke while the list is not resident. */
|
|
42
|
+
static readonly SEARCH_LIMIT = 50;
|
|
43
|
+
readonly state$: BehaviorSubject<GenePickerState>;
|
|
44
|
+
private names;
|
|
45
|
+
private listLoading;
|
|
46
|
+
/** Guards the typeahead: typing outruns the lookup. */
|
|
47
|
+
private readonly search;
|
|
48
|
+
/** Guards the whole-transcriptome list preload against a dataset switch. */
|
|
49
|
+
private readonly listLoad;
|
|
50
|
+
/**
|
|
51
|
+
* @param controls the port, or null when none is bound.
|
|
52
|
+
* @param chosen the genes already chosen anywhere, kept among the options: a multi-select
|
|
53
|
+
* shows a chip only for a value it can find among its options.
|
|
54
|
+
* @param run where async results are applied — the owner's `NgZone.run`.
|
|
55
|
+
*/
|
|
56
|
+
constructor(controls: () => ISpatialControls | null, chosen: () => readonly string[], run?: (fn: () => void) => void);
|
|
57
|
+
get options(): PanelOption<string>[];
|
|
58
|
+
get remote(): boolean;
|
|
59
|
+
get failed(): boolean;
|
|
60
|
+
/** Genes resident in the list (the inlined names, or the fetched list once loaded). */
|
|
61
|
+
get residentCount(): number;
|
|
62
|
+
/** A new dataset: its own names (or none), and nothing in flight for the previous one. */
|
|
63
|
+
setDataset(dataset: SpatialDataset | null): void;
|
|
64
|
+
/**
|
|
65
|
+
* A keystroke in a gene dropdown's filter box.
|
|
66
|
+
*
|
|
67
|
+
* With the names resident, search them here and materialise only the top matches: the
|
|
68
|
+
* dropdown's own filter then runs over those and agrees — they were chosen by the same
|
|
69
|
+
* query — so the control behaves as if it still held the whole list. Without them there
|
|
70
|
+
* is nothing to filter, so the query goes to the port and its answer BECOMES the option
|
|
71
|
+
* list — the same control, filtering one hop further away.
|
|
72
|
+
*/
|
|
73
|
+
onFilter(query: string): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* A gene dropdown opened.
|
|
76
|
+
*
|
|
77
|
+
* A whole-transcriptome dataset does not inline its ~30k names; they are fetched here,
|
|
78
|
+
* once, on first open — the list is then resident and every keystroke filters locally,
|
|
79
|
+
* exactly as for a targeted panel. Until it arrives the dropdown falls back to asking the
|
|
80
|
+
* server per keystroke.
|
|
81
|
+
*/
|
|
82
|
+
ensureList(): Promise<void>;
|
|
83
|
+
/** Options for `names`, plus the genes already chosen. */
|
|
84
|
+
private withChosen;
|
|
85
|
+
private set;
|
|
86
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ChangeDetectorRef, NgZone, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { SpatialViewState, TranscriptGlyphName } from '../../contracts/display-types';
|
|
5
|
+
import { GeneTreeNode } from '../../spatial/spatial-panel-model';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/** One gene row as the template draws it, derived once per input change. */
|
|
8
|
+
interface GeneRowView {
|
|
9
|
+
shown: boolean;
|
|
10
|
+
swatch: string;
|
|
11
|
+
/** The row's glyph outline (drawn in Icons mode). */
|
|
12
|
+
points: string;
|
|
13
|
+
/** Transcripts in view, or null before the renderer reports any. */
|
|
14
|
+
count: number | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The selected transcript genes as Xenium Explorer's tree: the gene groups, then the
|
|
18
|
+
* ungrouped genes, each row with an eye that hides it without deselecting it, its marker
|
|
19
|
+
* in its colour (opening one icon-and-colour picker per gene), and its transcript count in
|
|
20
|
+
* view.
|
|
21
|
+
*
|
|
22
|
+
* Writes only through `controls.setViewState`.
|
|
23
|
+
*/
|
|
24
|
+
export declare class SpatialGeneTreeComponent implements OnChanges {
|
|
25
|
+
private readonly zone;
|
|
26
|
+
private readonly cdr;
|
|
27
|
+
/** The spatial controls this panel reads and writes through; null without a `SPATIAL_DATA_PORT`. */
|
|
28
|
+
controls: ISpatialControls | null;
|
|
29
|
+
/** The dataset on offer, or null. */
|
|
30
|
+
dataset: SpatialDataset | null;
|
|
31
|
+
/** The current spatial view state: what is drawn, and how. */
|
|
32
|
+
view: SpatialViewState;
|
|
33
|
+
/** Transcripts of each selected gene in the current view, from the renderer. */
|
|
34
|
+
geneCounts: Record<string, number> | null;
|
|
35
|
+
/** Real genes in the panel — the tree's denominator. */
|
|
36
|
+
geneTotal: number;
|
|
37
|
+
protected readonly glyphOptions: import("../../spatial/spatial-panel-model").GlyphOption[];
|
|
38
|
+
/** Swatches in the picker: the categorical palette genes are coloured from by default. */
|
|
39
|
+
protected readonly colorPresets: string[];
|
|
40
|
+
/** The tree, rebuilt when the view changes — never per change-detection pass. */
|
|
41
|
+
protected geneTree: GeneTreeNode[];
|
|
42
|
+
/** Per gene: its eye, swatch, glyph and count — rebuilt with the inputs (and when the
|
|
43
|
+
* cells' group colours arrive), so the template does no per-row lookups per check. */
|
|
44
|
+
protected rows: Map<string, GeneRowView>;
|
|
45
|
+
/** Per named group, and for the root: whether any of its genes is shown. */
|
|
46
|
+
protected groupShown: Map<string, boolean>;
|
|
47
|
+
protected rootShown: boolean;
|
|
48
|
+
protected collapsedGeneGroups: Set<string>;
|
|
49
|
+
protected geneTreeOpen: boolean;
|
|
50
|
+
/** The gene the open picker edits. */
|
|
51
|
+
protected styleGene: string | null;
|
|
52
|
+
/** Colours of the cells' groups, by name — what a cluster of the same name is drawn in. */
|
|
53
|
+
private cellGroupColors;
|
|
54
|
+
/** The grouping {@link cellGroupColors} belongs to — a repeat request for it is a no-op. */
|
|
55
|
+
private cellGroupColorsFor;
|
|
56
|
+
/** Latest wins among colour loads for {@link cellGroupColors}. */
|
|
57
|
+
private readonly cellGroupColorsLoad;
|
|
58
|
+
constructor(zone: NgZone, cdr: ChangeDetectorRef);
|
|
59
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
60
|
+
private rebuildRows;
|
|
61
|
+
protected toggleGeneGroup(name: string): void;
|
|
62
|
+
protected isGeneShown(gene: string): boolean;
|
|
63
|
+
protected areGenesShown(genes: string[]): boolean;
|
|
64
|
+
/** The eye toggle: hide or show genes without removing them from the selection. */
|
|
65
|
+
protected onGenesShown(genes: string[], on: boolean): void;
|
|
66
|
+
/** The root eye while every gene is shown: back to the chosen list. */
|
|
67
|
+
protected onToggleAllGenes(): void;
|
|
68
|
+
protected onGeneColor(gene: string, hex: string): void;
|
|
69
|
+
protected openGeneStyle(event: Event, gene: string, panel: {
|
|
70
|
+
toggle(e: Event): void;
|
|
71
|
+
hide(): void;
|
|
72
|
+
}): void;
|
|
73
|
+
/** The icon the open picker shows as chosen. */
|
|
74
|
+
protected get styleGlyph(): TranscriptGlyphName | null;
|
|
75
|
+
protected glyphPoints(glyph: TranscriptGlyphName): string;
|
|
76
|
+
protected glyphOf(gene: string, slot: number): TranscriptGlyphName;
|
|
77
|
+
protected onGlyph(gene: string, glyph: TranscriptGlyphName): void;
|
|
78
|
+
/** A typed hex colour, accepted as `#rrggbb` or `rrggbb`; anything else is ignored. */
|
|
79
|
+
protected onGeneHex(gene: string, text: string): void;
|
|
80
|
+
/** Back to the gene's default icon and colour (by its position in the list). */
|
|
81
|
+
protected resetGeneStyle(gene: string): void;
|
|
82
|
+
/** The colour gene `slot` is drawn in when transcripts are coloured by gene. */
|
|
83
|
+
geneColor(slot: number): string;
|
|
84
|
+
protected geneColorOf(gene: string): string;
|
|
85
|
+
/** In Cluster colouring, a gene's swatch is its cluster's colour, as its markers are. */
|
|
86
|
+
protected geneSwatchOf(gene: string): string;
|
|
87
|
+
protected geneCountOf(gene: string): number | null;
|
|
88
|
+
protected trackByNode: (_i: number, node: {
|
|
89
|
+
name: string | null;
|
|
90
|
+
}) => string;
|
|
91
|
+
protected trackByLabelString: (_i: number, s: string) => string;
|
|
92
|
+
/**
|
|
93
|
+
* The cluster colours, rebuilt only when what they come from changes. The template asks
|
|
94
|
+
* once per gene row per change-detection pass, and rebuilding per call made that O(G²).
|
|
95
|
+
*/
|
|
96
|
+
private clusterColors;
|
|
97
|
+
private clusterColorMemo;
|
|
98
|
+
private refreshCellGroupColors;
|
|
99
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialGeneTreeComponent, never>;
|
|
100
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialGeneTreeComponent, "spatial-gene-tree", never, { "controls": { "alias": "controls"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "view": { "alias": "view"; "required": false; }; "geneCounts": { "alias": "geneCounts"; "required": false; }; "geneTotal": { "alias": "geneTotal"; "required": false; }; }, {}, never, never, true, never>;
|
|
101
|
+
}
|
|
102
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ChangeDetectorRef, NgZone, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { SpatialViewState } from '../../contracts/display-types';
|
|
5
|
+
import { GroupOptionSection, GroupRow, PanelOption } from '../../spatial/spatial-panel-model';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* The cells' grouping, as Xenium Explorer's Groups section: the group picker (columns under
|
|
9
|
+
* their section heading, a k-means family once, with its k beside it), CSV import of a new
|
|
10
|
+
* grouping, and the grouping's categories with their colours, cell counts and show/hide
|
|
11
|
+
* switches.
|
|
12
|
+
*
|
|
13
|
+
* Writes only through `controls.setViewState` (`cellTypeColumn`, `hiddenGroups`).
|
|
14
|
+
*/
|
|
15
|
+
export declare class SpatialGroupsPanelComponent implements OnChanges {
|
|
16
|
+
private readonly zone;
|
|
17
|
+
private readonly cdr;
|
|
18
|
+
/** The spatial controls this panel reads and writes through; null without a `SPATIAL_DATA_PORT`. */
|
|
19
|
+
controls: ISpatialControls | null;
|
|
20
|
+
/** The dataset on offer, or null. */
|
|
21
|
+
dataset: SpatialDataset | null;
|
|
22
|
+
/** The current spatial view state: what is drawn, and how. */
|
|
23
|
+
view: SpatialViewState;
|
|
24
|
+
/**
|
|
25
|
+
* The group picker: categorical columns under their section heading, a family of
|
|
26
|
+
* variants (k-means at k = 2…10) listed once. Values are a column name, or
|
|
27
|
+
* `family:<id>` for a family.
|
|
28
|
+
*/
|
|
29
|
+
protected groupOptions: GroupOptionSection[];
|
|
30
|
+
/** Variants of the active family (k = 2…10), when a family is active. */
|
|
31
|
+
protected groupVariantOptions: PanelOption<string>[];
|
|
32
|
+
/** The last variant chosen per family, so switching away and back keeps k. */
|
|
33
|
+
private readonly familyChoice;
|
|
34
|
+
/** The active grouping's categories with colours and cell counts, largest first. */
|
|
35
|
+
protected groupRows: GroupRow[];
|
|
36
|
+
protected groupTotal: number;
|
|
37
|
+
protected groupsExpanded: boolean;
|
|
38
|
+
/** The grouping {@link groupRows} shows or is loading — a repeat request for it is a no-op. */
|
|
39
|
+
private groupRowsFor;
|
|
40
|
+
/** Latest wins among group-row loads, so a slow one for an earlier grouping (or the
|
|
41
|
+
* previous dataset's column of the same name) cannot land over the current one. */
|
|
42
|
+
private readonly groupRowsLoad;
|
|
43
|
+
protected groupImportError: string | null;
|
|
44
|
+
protected groupImporting: boolean;
|
|
45
|
+
constructor(zone: NgZone, cdr: ChangeDetectorRef);
|
|
46
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
47
|
+
/** The categorical column the cells are grouped by. */
|
|
48
|
+
protected get activeCellTypeColumn(): string | null;
|
|
49
|
+
/** The picker's value for the active group column. */
|
|
50
|
+
protected get activeGroupEntry(): string | null;
|
|
51
|
+
protected onGroupEntry(value: string): void;
|
|
52
|
+
protected onGroupVariant(name: string): void;
|
|
53
|
+
onCellTypeColumn(name: string | null): void;
|
|
54
|
+
/** {@link SpatialViewState.hiddenGroups} as a set, for the per-row checks. */
|
|
55
|
+
private hiddenGroups;
|
|
56
|
+
protected isGroupShown(label: string): boolean;
|
|
57
|
+
protected get allGroupsShown(): boolean;
|
|
58
|
+
protected onGroupShown(label: string, on: boolean): void;
|
|
59
|
+
protected onAllGroupsShown(on: boolean): void;
|
|
60
|
+
protected get canImportGroups(): boolean;
|
|
61
|
+
/** '+': a CSV/TSV of `cell_id` and group, named after the file. */
|
|
62
|
+
protected onImportGroupsFile(input: HTMLInputElement): Promise<void>;
|
|
63
|
+
protected trackByLabel: (_i: number, row: {
|
|
64
|
+
label: string;
|
|
65
|
+
}) => string;
|
|
66
|
+
private refreshVariants;
|
|
67
|
+
private refreshGroups;
|
|
68
|
+
/** Apply an async result inside the zone and re-render this OnPush panel. */
|
|
69
|
+
private apply;
|
|
70
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialGroupsPanelComponent, never>;
|
|
71
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialGroupsPanelComponent, "spatial-groups-panel", never, { "controls": { "alias": "controls"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "view": { "alias": "view"; "required": false; }; }, {}, never, never, true, never>;
|
|
72
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges } from '@angular/core';
|
|
2
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { ColormapNode, ColormapValue, SpatialViewState } from '../../contracts/display-types';
|
|
5
|
+
import type { SpatialLegendEntry } from './spatial-key.model';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* The key for the active colouring: its name, a description when the column is derived,
|
|
9
|
+
* and either a categorical legend whose rows select their category or a continuous colour
|
|
10
|
+
* bar with the colormap picker that drives it.
|
|
11
|
+
*
|
|
12
|
+
* Presentational over {@link SpatialKeyModel}, which the dialog keeps (the rest of the
|
|
13
|
+
* panel needs to know whether the colouring is categorical even while the key is not on
|
|
14
|
+
* screen). Writes only the continuous colormap, through `controls.setViewState`; a legend
|
|
15
|
+
* click goes up as {@link categoryClicked}, because the selection is the dialog's.
|
|
16
|
+
*/
|
|
17
|
+
export declare class SpatialKeyComponent implements OnChanges {
|
|
18
|
+
/** The spatial controls this panel reads and writes through; null without a `SPATIAL_DATA_PORT`. */
|
|
19
|
+
controls: ISpatialControls | null;
|
|
20
|
+
/** The dataset on offer, or null. */
|
|
21
|
+
dataset: SpatialDataset | null;
|
|
22
|
+
/** The current spatial view state: what is drawn, and how. */
|
|
23
|
+
view: SpatialViewState;
|
|
24
|
+
/** The categorical legend, or null for a continuous (or no) colouring. */
|
|
25
|
+
legend: SpatialLegendEntry[] | null;
|
|
26
|
+
/** The continuous colour bar's CSS gradient, or null. */
|
|
27
|
+
colorBarCss: string | null;
|
|
28
|
+
/** The legend row whose category is selected, for highlighting. */
|
|
29
|
+
selectedCategory: number | null;
|
|
30
|
+
/**
|
|
31
|
+
* Colormap tree for the continuous colour scale: the library's own `COLORMAP_OPTIONS`,
|
|
32
|
+
* shown with the same swatches the image's colormap picker uses — choosing a gradient
|
|
33
|
+
* is a visual decision, so a list of names would be the wrong control.
|
|
34
|
+
*/
|
|
35
|
+
colormapOptions: ColormapNode[];
|
|
36
|
+
/** A legend row was clicked: select that category (or clear it, when it is selected). */
|
|
37
|
+
readonly categoryClicked: EventEmitter<number>;
|
|
38
|
+
/** The node currently picked from {@link colormapOptions}. */
|
|
39
|
+
protected selectedColormapNode: ColormapNode | null;
|
|
40
|
+
/** Label for the current colouring, for the key's heading. */
|
|
41
|
+
protected colorByLabel: string;
|
|
42
|
+
/**
|
|
43
|
+
* Description of the active column, when it has one. Surfaced because a DERIVED column
|
|
44
|
+
* (k-means clusters, QC totals computed at conversion) must not read as though it came
|
|
45
|
+
* with the data.
|
|
46
|
+
*/
|
|
47
|
+
protected activeDescription: string | null;
|
|
48
|
+
ngOnChanges(): void;
|
|
49
|
+
/** True when the active colouring is a categorical column. */
|
|
50
|
+
protected get isCategorical(): boolean;
|
|
51
|
+
/** Whether the colour bar applies: there is a colouring, and it is not categorical. */
|
|
52
|
+
protected get isContinuous(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* The continuous colour scale's colormap. Clearing it goes back to following the
|
|
55
|
+
* image's, which is the default.
|
|
56
|
+
*/
|
|
57
|
+
/** Keeps the legend rows across a refresh of the same categories (one per category). */
|
|
58
|
+
protected readonly trackByLabel: (_: number, entry: SpatialLegendEntry) => string;
|
|
59
|
+
protected onContinuousColormap(node: ColormapNode | null): void;
|
|
60
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialKeyComponent, never>;
|
|
61
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialKeyComponent, "spatial-key", never, { "controls": { "alias": "controls"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "view": { "alias": "view"; "required": false; }; "legend": { "alias": "legend"; "required": false; }; "colorBarCss": { "alias": "colorBarCss"; "required": false; }; "selectedCategory": { "alias": "selectedCategory"; "required": false; }; "colormapOptions": { "alias": "colormapOptions"; "required": false; }; }, { "categoryClicked": "categoryClicked"; }, never, never, true, never>;
|
|
62
|
+
}
|
|
63
|
+
/** Label for `view`'s colouring, for the key's heading. */
|
|
64
|
+
export declare function colorByLabel(view: Pick<SpatialViewState, 'colorBy'>): string;
|
|
65
|
+
/** The tree node holding a colormap value, so the picker shows what is in use. */
|
|
66
|
+
export declare function colormapNodeFor(options: readonly ColormapNode[], value: ColormapValue | null): ColormapNode | null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
2
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
3
|
+
import type { ColormapNode, SpatialViewState } from '../../contracts/display-types';
|
|
4
|
+
/** One legend row for a categorical colouring. */
|
|
5
|
+
export interface SpatialLegendEntry {
|
|
6
|
+
label: string;
|
|
7
|
+
color: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The key for the active colouring: a categorical legend, or a continuous colour bar.
|
|
11
|
+
*
|
|
12
|
+
* Built with the SAME functions the renderer uses (`categoryColors` → the renderer's
|
|
13
|
+
* resolved category colours, `spatialContinuousLut`), so the key cannot drift from what is
|
|
14
|
+
* on screen. Kept by the dialog rather than by `<spatial-key>`: whether the colouring is
|
|
15
|
+
* categorical decides which knobs the rest of the panel offers, whether or not the key
|
|
16
|
+
* itself is on screen.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SpatialKeyModel {
|
|
19
|
+
private readonly run;
|
|
20
|
+
/** Categorical key, or null when the active colouring is continuous (or none). */
|
|
21
|
+
legend: SpatialLegendEntry[] | null;
|
|
22
|
+
/** CSS gradient for a continuous colouring, or null when categorical (or none). */
|
|
23
|
+
colorBarCss: string | null;
|
|
24
|
+
/** Latest wins: a slower earlier column would paint its palette into the legend for the
|
|
25
|
+
* column now selected. */
|
|
26
|
+
private readonly load;
|
|
27
|
+
/** @param run where async results are applied — the owner's `NgZone.run`. */
|
|
28
|
+
constructor(run?: (fn: () => void) => void);
|
|
29
|
+
/** True when the active colouring is a categorical column. */
|
|
30
|
+
get isCategorical(): boolean;
|
|
31
|
+
/** Rebuild the legend or colour bar for `view`'s colouring. */
|
|
32
|
+
refresh(controls: ISpatialControls | null, dataset: SpatialDataset | null, view: Pick<SpatialViewState, 'colorBy' | 'continuousColormap'>, colormap: ColormapNode | null, reverse: boolean): Promise<void>;
|
|
33
|
+
}
|
package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ChangeDetectorRef, EventEmitter, NgZone, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { SpatialViewState } from '../../contracts/display-types';
|
|
5
|
+
import { PanelOption } from '../../spatial/spatial-panel-model';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* "Add marker genes of clusters": pick a grouping, how many genes per cluster and which
|
|
9
|
+
* clusters, and each picked cluster's top marker genes are added as a gene group named
|
|
10
|
+
* after it — and selected, coloured by cluster.
|
|
11
|
+
*
|
|
12
|
+
* Shown while {@link open}; it closes itself (through {@link openChange}) once the genes
|
|
13
|
+
* are added. Writes only through `controls.setViewState`.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SpatialMarkerGenesFormComponent implements OnChanges {
|
|
16
|
+
private readonly zone;
|
|
17
|
+
private readonly cdr;
|
|
18
|
+
/** The spatial controls this panel reads and writes through; null without a `SPATIAL_DATA_PORT`. */
|
|
19
|
+
controls: ISpatialControls | null;
|
|
20
|
+
/** The dataset on offer, or null. */
|
|
21
|
+
dataset: SpatialDataset | null;
|
|
22
|
+
/** The current spatial view state: what is drawn, and how. */
|
|
23
|
+
view: SpatialViewState;
|
|
24
|
+
/** Whether the form is shown. Opening it picks the cells' grouping and every cluster. */
|
|
25
|
+
open: boolean;
|
|
26
|
+
/** Asks to open or close it; two-way with `open`. */
|
|
27
|
+
readonly openChange: EventEmitter<boolean>;
|
|
28
|
+
protected markerColumn: string | null;
|
|
29
|
+
protected markerPerGroup: number;
|
|
30
|
+
protected readonly markerPerGroupOptions: {
|
|
31
|
+
label: string;
|
|
32
|
+
value: number;
|
|
33
|
+
}[];
|
|
34
|
+
protected markerClusters: string[];
|
|
35
|
+
protected markerClusterOptions: PanelOption<string>[];
|
|
36
|
+
protected markerLoading: boolean;
|
|
37
|
+
protected markerError: string | null;
|
|
38
|
+
/**
|
|
39
|
+
* Every categorical column but the segmentation method, which says nothing about genes.
|
|
40
|
+
* Rebuilt with the dataset, never per change-detection pass: a fresh array per pass makes
|
|
41
|
+
* PrimeNG re-render the options, and an option re-rendered under the pointer swallows
|
|
42
|
+
* the click.
|
|
43
|
+
*/
|
|
44
|
+
protected markerColumnOptions: PanelOption<string>[];
|
|
45
|
+
constructor(zone: NgZone, cdr: ChangeDetectorRef);
|
|
46
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
47
|
+
protected onMarkerColumn(column: string): void;
|
|
48
|
+
protected close(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Add each picked cluster's top marker genes as a gene group named after it, and select
|
|
51
|
+
* them. A gene that marks several clusters goes to the one it is most specific to, so the
|
|
52
|
+
* tree lists it once.
|
|
53
|
+
*/
|
|
54
|
+
protected addMarkerGenes(): Promise<void>;
|
|
55
|
+
/** On opening: the cells' grouping (or the last column picked, while it still exists),
|
|
56
|
+
* every one of its clusters, and no stale error. */
|
|
57
|
+
private prepare;
|
|
58
|
+
/** The clusters of the chosen column, all picked to start with. */
|
|
59
|
+
private refreshMarkerClusters;
|
|
60
|
+
/** Apply an async result inside the zone and re-render this OnPush form. */
|
|
61
|
+
private apply;
|
|
62
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialMarkerGenesFormComponent, never>;
|
|
63
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialMarkerGenesFormComponent, "spatial-marker-genes-form", never, { "controls": { "alias": "controls"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "view": { "alias": "view"; "required": false; }; "open": { "alias": "open"; "required": false; }; }, { "openChange": "openChange"; }, never, never, true, never>;
|
|
64
|
+
}
|
package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import type { ISpatialControls } from '../../contracts/visualizer.contract';
|
|
3
|
+
import type { SpatialDataset } from '../../contracts/spatial-dataset.contract';
|
|
4
|
+
import { ColormapNode, SpatialViewState } from '../../contracts/display-types';
|
|
5
|
+
import { SpatialSelectionMask } from '../../spatial/spatial-selection';
|
|
6
|
+
import { PanelOption } from '../../spatial/spatial-panel-model';
|
|
7
|
+
import type { GenePickerModel } from '../spatial-gene-picker';
|
|
8
|
+
import type { SpatialLegendEntry } from '../spatial-key/spatial-key.model';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
/**
|
|
11
|
+
* The Observations section — one marker per observation (cell centroid, Visium spot) — and
|
|
12
|
+
* what else draws them: what colours them (a column or a gene, mutually exclusive, with
|
|
13
|
+
* the {@link SpatialKeyComponent key}), point size and opacity, the gene map, the 3D scene
|
|
14
|
+
* (volume, cloud, sections, density volumes) and the continuous-only knobs.
|
|
15
|
+
*
|
|
16
|
+
* Renders the section and the sections after it as siblings in the dialog body
|
|
17
|
+
* (`display: contents`). Writes only through the port: `setViewState`, and the colour
|
|
18
|
+
* source's own `colorByColumn` / `colorByFeature` / `clearColorBy`.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SpatialObservationsPanelComponent implements OnChanges {
|
|
21
|
+
/** The spatial controls this panel reads and writes through; null without a `SPATIAL_DATA_PORT`. */
|
|
22
|
+
controls: ISpatialControls | null;
|
|
23
|
+
/** The dataset on offer, or null. */
|
|
24
|
+
dataset: SpatialDataset | null;
|
|
25
|
+
/** The current spatial view state: what is drawn, and how. */
|
|
26
|
+
view: SpatialViewState;
|
|
27
|
+
/** The gene list "Colour by gene" picks from, shared with the other gene dropdowns. */
|
|
28
|
+
genes: GenePickerModel | null;
|
|
29
|
+
/** The key's categorical legend, or null — which also decides the continuous knobs. */
|
|
30
|
+
legend: SpatialLegendEntry[] | null;
|
|
31
|
+
/** The key's continuous colour bar (a CSS gradient), or null when categorical. */
|
|
32
|
+
colorBarCss: string | null;
|
|
33
|
+
/** The current selection (its count, and what is muted). */
|
|
34
|
+
selection: SpatialSelectionMask;
|
|
35
|
+
/** The legend row whose category is selected, for highlighting. */
|
|
36
|
+
selectedCategory: number | null;
|
|
37
|
+
/** Colormap tree for the continuous colour scale. */
|
|
38
|
+
colormapOptions: ColormapNode[];
|
|
39
|
+
/** Set while the 3D cloud is the active mode. */
|
|
40
|
+
is3d: boolean;
|
|
41
|
+
/** Whether the Observations section is expanded. */
|
|
42
|
+
open: boolean;
|
|
43
|
+
/** Asks to open or close it; two-way with `open`. */
|
|
44
|
+
readonly openChange: EventEmitter<boolean>;
|
|
45
|
+
/** A legend row was clicked (see the key). */
|
|
46
|
+
readonly categoryClicked: EventEmitter<number>;
|
|
47
|
+
protected readonly clipOptions: PanelOption<[number, number]>[];
|
|
48
|
+
/** Virtual-scrolled only past this many options (see the cells panel's gene dropdown). */
|
|
49
|
+
protected readonly geneVirtualScrollFrom = 200;
|
|
50
|
+
/** Colour-by column choices — "None" plus every column the dataset declares. */
|
|
51
|
+
protected columnOptions: PanelOption<string | null>[];
|
|
52
|
+
protected selectedColumn: string | null;
|
|
53
|
+
protected selectedGene: string | null;
|
|
54
|
+
/**
|
|
55
|
+
* The dataset's imaged section positions, or null when its z is continuous rather than
|
|
56
|
+
* sectioned. Read once per dataset — the scan walks the z of every observation, so it
|
|
57
|
+
* must not sit in a template getter.
|
|
58
|
+
*/
|
|
59
|
+
protected sections: Float32Array | null;
|
|
60
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
61
|
+
/** Column dropdown. Choosing a column supersedes any gene selection. */
|
|
62
|
+
protected onColumn(name: string | null): void;
|
|
63
|
+
/** A gene was picked; it supersedes any column selection. */
|
|
64
|
+
protected onGene(name: string | null): void;
|
|
65
|
+
/** Cell outlines on offer, which changes what the circles mean. */
|
|
66
|
+
protected get hasCells(): boolean;
|
|
67
|
+
/** True while a selection is active — everything else renders muted. */
|
|
68
|
+
get hasSelection(): boolean;
|
|
69
|
+
/** Whether log/clip apply — they are continuous-only knobs. */
|
|
70
|
+
protected get isContinuous(): boolean;
|
|
71
|
+
protected onPointScale(value: number | undefined): void;
|
|
72
|
+
protected onOpacity(value: number | undefined): void;
|
|
73
|
+
protected onLogScale(on: boolean): void;
|
|
74
|
+
protected onGeneMap(on: boolean): void;
|
|
75
|
+
/** 3D: smooth the per-section sheets along z into a continuous volume. */
|
|
76
|
+
protected onGeneMapVolume(on: boolean): void;
|
|
77
|
+
/** 3D: restrict the sheets to one imaged section. */
|
|
78
|
+
protected onGeneMapOneSection(on: boolean): void;
|
|
79
|
+
protected onGeneMapSection(value: number | undefined): void;
|
|
80
|
+
protected get geneMapOneSection(): boolean;
|
|
81
|
+
/** "12 of 53" for the gene map's own section, 1-based like the cloud's. */
|
|
82
|
+
protected get geneMapSectionLabel(): string;
|
|
83
|
+
protected onGeneMapSmoothing(value: number | undefined): void;
|
|
84
|
+
protected onGeneMapOpacity(value: number | undefined): void;
|
|
85
|
+
/**
|
|
86
|
+
* What the 3D gene map is currently showing, said plainly — the sheets are a
|
|
87
|
+
* measurement and the volume is an estimate, and the panel has to be the place
|
|
88
|
+
* that says which one is on screen.
|
|
89
|
+
*/
|
|
90
|
+
protected get geneMapVolumeNote(): string;
|
|
91
|
+
/** True while a gene is the colour source — the only thing a gene map can map. */
|
|
92
|
+
protected get canMapGene(): boolean;
|
|
93
|
+
protected onShowVolume(on: boolean): void;
|
|
94
|
+
protected onVolumeOpacity(value: number | undefined): void;
|
|
95
|
+
protected onShowPoints(on: boolean): void;
|
|
96
|
+
/** The "one section at a time" switch: null restores the whole stack. */
|
|
97
|
+
protected onOneSection(on: boolean): void;
|
|
98
|
+
protected onPointSection(value: number | undefined): void;
|
|
99
|
+
/** True while the cloud is restricted to a single section. */
|
|
100
|
+
protected get oneSection(): boolean;
|
|
101
|
+
/** Highest section index the slider can reach. */
|
|
102
|
+
protected get lastSection(): number;
|
|
103
|
+
/** "12 of 53" — 1-based, because the sections are slides, not array slots. */
|
|
104
|
+
protected get sectionLabel(): string;
|
|
105
|
+
/** Whether this dataset has sections to pick from at all. */
|
|
106
|
+
protected get isSectioned(): boolean;
|
|
107
|
+
protected onDensityVolume(on: boolean): void;
|
|
108
|
+
protected onDensitySmoothing(value: number | undefined): void;
|
|
109
|
+
/** What the density volumes are actually showing, said plainly — an estimate is
|
|
110
|
+
* only honest if the reader knows it is one, and which clusters are in view. */
|
|
111
|
+
protected get densityNote(): string;
|
|
112
|
+
/** Mirrors the renderer's cap, for the note only. */
|
|
113
|
+
private static readonly DENSITY_MAX_CLUSTERS;
|
|
114
|
+
protected onClip(value: [number, number]): void;
|
|
115
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SpatialObservationsPanelComponent, never>;
|
|
116
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SpatialObservationsPanelComponent, "spatial-observations-panel", never, { "controls": { "alias": "controls"; "required": false; }; "dataset": { "alias": "dataset"; "required": false; }; "view": { "alias": "view"; "required": false; }; "genes": { "alias": "genes"; "required": false; }; "legend": { "alias": "legend"; "required": false; }; "colorBarCss": { "alias": "colorBarCss"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "selectedCategory": { "alias": "selectedCategory"; "required": false; }; "colormapOptions": { "alias": "colormapOptions"; "required": false; }; "is3d": { "alias": "is3d"; "required": false; }; "open": { "alias": "open"; "required": false; }; }, { "openChange": "openChange"; "categoryClicked": "categoryClicked"; }, never, never, true, never>;
|
|
117
|
+
}
|