@jax-data-science/sci-image-visualizer 0.1.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/LICENSE +21 -0
- package/README.md +404 -0
- package/esm2022/index.mjs +52 -0
- package/esm2022/jax-data-science-sci-image-visualizer.mjs +5 -0
- package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +398 -0
- package/esm2022/lib/contracts/capabilities.contract.mjs +32 -0
- package/esm2022/lib/contracts/cell-segmenter.contract.mjs +12 -0
- package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +14 -0
- package/esm2022/lib/contracts/colormap-lut.mjs +95 -0
- package/esm2022/lib/contracts/coordinate-transform.contract.mjs +2 -0
- package/esm2022/lib/contracts/display-types.mjs +8 -0
- package/esm2022/lib/contracts/image.contract.mjs +11 -0
- package/esm2022/lib/contracts/intensity.mjs +28 -0
- package/esm2022/lib/contracts/plot-type.mjs +112 -0
- package/esm2022/lib/contracts/ports/image-state.port.mjs +3 -0
- package/esm2022/lib/contracts/ports/preferences.port.mjs +3 -0
- package/esm2022/lib/contracts/ports/region-io.port.mjs +3 -0
- package/esm2022/lib/contracts/ports/tile-access.port.mjs +3 -0
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +4 -0
- package/esm2022/lib/contracts/region-overlay.contract.mjs +2 -0
- package/esm2022/lib/contracts/region-store.contract.mjs +2 -0
- package/esm2022/lib/contracts/sam.contract.mjs +12 -0
- package/esm2022/lib/contracts/toolbar-config.mjs +8 -0
- package/esm2022/lib/contracts/visualizer.contract.mjs +10 -0
- package/esm2022/lib/contracts/viz-config.mjs +3 -0
- package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +260 -0
- package/esm2022/lib/implementations/base-store-visualizer.mjs +76 -0
- package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +106 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +847 -0
- package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +92 -0
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +2283 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +126 -0
- package/esm2022/lib/implementations/osd/display-pipeline.mjs +143 -0
- package/esm2022/lib/implementations/osd/histogram-sampler.mjs +217 -0
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +1780 -0
- package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +25 -0
- package/esm2022/lib/implementations/osd/osd-coords.mjs +53 -0
- package/esm2022/lib/implementations/osd/osd-lib.mjs +20 -0
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +1237 -0
- package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +88 -0
- package/esm2022/lib/implementations/osd/slice-cache.mjs +488 -0
- package/esm2022/lib/implementations/osd/tile-client.mjs +29 -0
- package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +37 -0
- package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +31 -0
- package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +183 -0
- package/esm2022/lib/implementations/plotly/plotly.service.mjs +2137 -0
- package/esm2022/lib/implementations/simple-slice-access.service.mjs +99 -0
- package/esm2022/lib/models/bezier.mjs +120 -0
- package/esm2022/lib/models/class-preset.mjs +46 -0
- package/esm2022/lib/models/geometry.mjs +198 -0
- package/esm2022/lib/models/region.mjs +166 -0
- package/esm2022/lib/models/shape.mjs +53 -0
- package/esm2022/lib/plot.utilities.mjs +693 -0
- package/esm2022/lib/processing/image-converter.service.mjs +90 -0
- package/esm2022/lib/processing/image-crop.mjs +62 -0
- package/esm2022/lib/processing/processing-image.mjs +50 -0
- package/esm2022/lib/provide-visualization.mjs +63 -0
- package/esm2022/lib/region-editor/mask-raster.mjs +95 -0
- package/esm2022/lib/region-editor/mask-worker.mjs +10 -0
- package/esm2022/lib/region-editor/region-editor.component.mjs +1190 -0
- package/esm2022/lib/region-ops.service.mjs +301 -0
- package/esm2022/lib/render-orchestrator.mjs +87 -0
- package/esm2022/lib/routing-visualizer.service.mjs +533 -0
- package/esm2022/lib/store/class-color.util.mjs +52 -0
- package/esm2022/lib/store/region-store.service.mjs +1029 -0
- package/esm2022/lib/store/visualizer-store.service.mjs +352 -0
- package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +546 -0
- package/esm2022/lib/toolbar/crop/slide-crop.mjs +57 -0
- package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +115 -0
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +84 -0
- package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +133 -0
- package/esm2022/lib/toolbar/segmentation/ort-runtime-config.mjs +31 -0
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +108 -0
- package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +159 -0
- package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +255 -0
- package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +94 -0
- package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +188 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +311 -0
- package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +234 -0
- package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +499 -0
- package/esm2022/lib/toolbar/wand/wand.service.mjs +921 -0
- package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +157 -0
- package/esm2022/lib/visualization.module.mjs +162 -0
- package/esm2022/lib/visualizer.component.mjs +1597 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-mask-worker-uhepXUhM.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-mask-worker-uhepXUhM.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-ci1q0xnJ.mjs +327 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-ci1q0xnJ.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +21314 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -0
- package/fesm2022/mask.worker.js +989 -0
- package/fesm2022/onnx-sam.worker.js +202 -0
- package/index.d.ts +39 -0
- package/lib/channel-histogram/channel-histogram.component.d.ts +112 -0
- package/lib/contracts/capabilities.contract.d.ts +30 -0
- package/lib/contracts/cell-segmenter.contract.d.ts +40 -0
- package/lib/contracts/channel-histogram-api.contract.d.ts +98 -0
- package/lib/contracts/colormap-lut.d.ts +21 -0
- package/lib/contracts/coordinate-transform.contract.d.ts +43 -0
- package/lib/contracts/display-types.d.ts +41 -0
- package/lib/contracts/image.contract.d.ts +72 -0
- package/lib/contracts/intensity.d.ts +18 -0
- package/lib/contracts/plot-type.d.ts +108 -0
- package/lib/contracts/ports/image-state.port.d.ts +29 -0
- package/lib/contracts/ports/preferences.port.d.ts +19 -0
- package/lib/contracts/ports/region-io.port.d.ts +29 -0
- package/lib/contracts/ports/tile-access.port.d.ts +27 -0
- package/lib/contracts/region-editor-api.contract.d.ts +83 -0
- package/lib/contracts/region-overlay.contract.d.ts +47 -0
- package/lib/contracts/region-store.contract.d.ts +74 -0
- package/lib/contracts/sam.contract.d.ts +98 -0
- package/lib/contracts/toolbar-config.d.ts +24 -0
- package/lib/contracts/visualizer.contract.d.ts +346 -0
- package/lib/contracts/viz-config.d.ts +25 -0
- package/lib/hex-color-picker/hex-color-picker.component.d.ts +47 -0
- package/lib/implementations/base-store-visualizer.d.ts +71 -0
- package/lib/implementations/napari-js/napari-axes-labels.d.ts +47 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +115 -0
- package/lib/implementations/napari-js/napari-scale-bar.d.ts +31 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +455 -0
- package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +46 -0
- package/lib/implementations/osd/display-pipeline.d.ts +47 -0
- package/lib/implementations/osd/histogram-sampler.d.ts +85 -0
- package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +476 -0
- package/lib/implementations/osd/osd-coordinate-transform.d.ts +17 -0
- package/lib/implementations/osd/osd-coords.d.ts +16 -0
- package/lib/implementations/osd/osd-lib.d.ts +19 -0
- package/lib/implementations/osd/osd-region-overlay.d.ts +191 -0
- package/lib/implementations/osd/osd-scale-bar.d.ts +17 -0
- package/lib/implementations/osd/slice-cache.d.ts +161 -0
- package/lib/implementations/osd/tile-client.d.ts +32 -0
- package/lib/implementations/plotly/plotly-coordinate-transform.d.ts +19 -0
- package/lib/implementations/plotly/plotly-region-overlay.d.ts +23 -0
- package/lib/implementations/plotly/plotly-trace-builders.d.ts +60 -0
- package/lib/implementations/plotly/plotly.service.d.ts +594 -0
- package/lib/implementations/simple-slice-access.service.d.ts +64 -0
- package/lib/models/bezier.d.ts +59 -0
- package/lib/models/class-preset.d.ts +39 -0
- package/lib/models/geometry.d.ts +66 -0
- package/lib/models/region.d.ts +132 -0
- package/lib/models/shape.d.ts +44 -0
- package/lib/plot.utilities.d.ts +107 -0
- package/lib/processing/image-converter.service.d.ts +28 -0
- package/lib/processing/image-crop.d.ts +18 -0
- package/lib/processing/processing-image.d.ts +17 -0
- package/lib/provide-visualization.d.ts +34 -0
- package/lib/region-editor/mask-raster.d.ts +61 -0
- package/lib/region-editor/mask-worker.d.ts +7 -0
- package/lib/region-editor/region-editor.component.d.ts +305 -0
- package/lib/region-ops.service.d.ts +92 -0
- package/lib/render-orchestrator.d.ts +59 -0
- package/lib/routing-visualizer.service.d.ts +227 -0
- package/lib/store/class-color.util.d.ts +26 -0
- package/lib/store/region-store.service.d.ts +315 -0
- package/lib/store/visualizer-store.service.d.ts +123 -0
- package/lib/toolbar/brush/brush-tool.service.d.ts +143 -0
- package/lib/toolbar/crop/slide-crop.d.ts +30 -0
- package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +32 -0
- package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +39 -0
- package/lib/toolbar/segmentation/onnx-sam-session.d.ts +25 -0
- package/lib/toolbar/segmentation/ort-runtime-config.d.ts +4 -0
- package/lib/toolbar/segmentation/sam-model-registry.d.ts +36 -0
- package/lib/toolbar/segmentation/sam-onnx-core.d.ts +48 -0
- package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +59 -0
- package/lib/toolbar/segmentation/sam-prompt.d.ts +34 -0
- package/lib/toolbar/segmentation/sam-tool.service.d.ts +50 -0
- package/lib/toolbar/toolbar.component.d.ts +167 -0
- package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +64 -0
- package/lib/toolbar/wand/wand-tool.service.d.ts +149 -0
- package/lib/toolbar/wand/wand.service.d.ts +133 -0
- package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +49 -0
- package/lib/visualization.module.d.ts +45 -0
- package/lib/visualizer.component.d.ts +378 -0
- package/package.json +73 -0
- package/src/lib/assets/3d-coordinates.svg +49 -0
- package/src/lib/assets/cells.svg +1 -0
- package/src/lib/assets/click.svg +1 -0
- package/src/lib/assets/colormap-luts.json +1 -0
- package/src/lib/assets/contour.svg +48 -0
- package/src/lib/assets/cube-3d.svg +1 -0
- package/src/lib/assets/edit-selection-white.svg +47 -0
- package/src/lib/assets/heatmap.svg +1 -0
- package/src/lib/assets/icons/colormap-Pastel1.png +0 -0
- package/src/lib/assets/icons/colormap-accent.png +0 -0
- package/src/lib/assets/icons/colormap-afmhot.png +0 -0
- package/src/lib/assets/icons/colormap-autumn.png +0 -0
- package/src/lib/assets/icons/colormap-berlin.png +0 -0
- package/src/lib/assets/icons/colormap-binary.png +0 -0
- package/src/lib/assets/icons/colormap-blackbody.png +0 -0
- package/src/lib/assets/icons/colormap-bluered.png +0 -0
- package/src/lib/assets/icons/colormap-blues.png +0 -0
- package/src/lib/assets/icons/colormap-bone.png +0 -0
- package/src/lib/assets/icons/colormap-brbg.png +0 -0
- package/src/lib/assets/icons/colormap-brg.png +0 -0
- package/src/lib/assets/icons/colormap-bugn.png +0 -0
- package/src/lib/assets/icons/colormap-bupu.png +0 -0
- package/src/lib/assets/icons/colormap-bwr.png +0 -0
- package/src/lib/assets/icons/colormap-cividis.png +0 -0
- package/src/lib/assets/icons/colormap-cmrmap.png +0 -0
- package/src/lib/assets/icons/colormap-cool.png +0 -0
- package/src/lib/assets/icons/colormap-coolwarm.png +0 -0
- package/src/lib/assets/icons/colormap-copper.png +0 -0
- package/src/lib/assets/icons/colormap-cubehelix.png +0 -0
- package/src/lib/assets/icons/colormap-dark2.png +0 -0
- package/src/lib/assets/icons/colormap-earth.png +0 -0
- package/src/lib/assets/icons/colormap-electric.png +0 -0
- package/src/lib/assets/icons/colormap-flag.png +0 -0
- package/src/lib/assets/icons/colormap-gist_earth.png +0 -0
- package/src/lib/assets/icons/colormap-gist_gray.png +0 -0
- package/src/lib/assets/icons/colormap-gist_heat.png +0 -0
- package/src/lib/assets/icons/colormap-gist_ncar.png +0 -0
- package/src/lib/assets/icons/colormap-gist_rainbow.png +0 -0
- package/src/lib/assets/icons/colormap-gist_stern.png +0 -0
- package/src/lib/assets/icons/colormap-gist_yarg.png +0 -0
- package/src/lib/assets/icons/colormap-gnbu.png +0 -0
- package/src/lib/assets/icons/colormap-gnuplot.png +0 -0
- package/src/lib/assets/icons/colormap-gnuplot2.png +0 -0
- package/src/lib/assets/icons/colormap-gray.png +0 -0
- package/src/lib/assets/icons/colormap-greens-inv.png +0 -0
- package/src/lib/assets/icons/colormap-greens.png +0 -0
- package/src/lib/assets/icons/colormap-greys-inv.png +0 -0
- package/src/lib/assets/icons/colormap-greys.png +0 -0
- package/src/lib/assets/icons/colormap-hot.png +0 -0
- package/src/lib/assets/icons/colormap-hsv.png +0 -0
- package/src/lib/assets/icons/colormap-inferno.png +0 -0
- package/src/lib/assets/icons/colormap-jet.png +0 -0
- package/src/lib/assets/icons/colormap-magma.png +0 -0
- package/src/lib/assets/icons/colormap-managua.png +0 -0
- package/src/lib/assets/icons/colormap-nipy_spectral.png +0 -0
- package/src/lib/assets/icons/colormap-ocean.png +0 -0
- package/src/lib/assets/icons/colormap-oranges.png +0 -0
- package/src/lib/assets/icons/colormap-orrd.png +0 -0
- package/src/lib/assets/icons/colormap-pastel2.png +0 -0
- package/src/lib/assets/icons/colormap-picnic.png +0 -0
- package/src/lib/assets/icons/colormap-pink.png +0 -0
- package/src/lib/assets/icons/colormap-piyg.png +0 -0
- package/src/lib/assets/icons/colormap-placeholder.png +0 -0
- package/src/lib/assets/icons/colormap-plasma.png +0 -0
- package/src/lib/assets/icons/colormap-portland.png +0 -0
- package/src/lib/assets/icons/colormap-prgn.png +0 -0
- package/src/lib/assets/icons/colormap-prism.png +0 -0
- package/src/lib/assets/icons/colormap-pubu.png +0 -0
- package/src/lib/assets/icons/colormap-pubugn.png +0 -0
- package/src/lib/assets/icons/colormap-puor.png +0 -0
- package/src/lib/assets/icons/colormap-purd.png +0 -0
- package/src/lib/assets/icons/colormap-purples.png +0 -0
- package/src/lib/assets/icons/colormap-rainbow.png +0 -0
- package/src/lib/assets/icons/colormap-rdbu.png +0 -0
- package/src/lib/assets/icons/colormap-rdgy.png +0 -0
- package/src/lib/assets/icons/colormap-rdpu.png +0 -0
- package/src/lib/assets/icons/colormap-rdylbu.png +0 -0
- package/src/lib/assets/icons/colormap-rdylgn.png +0 -0
- package/src/lib/assets/icons/colormap-reds.png +0 -0
- package/src/lib/assets/icons/colormap-seismic.png +0 -0
- package/src/lib/assets/icons/colormap-set1.png +0 -0
- package/src/lib/assets/icons/colormap-set2.png +0 -0
- package/src/lib/assets/icons/colormap-set3.png +0 -0
- package/src/lib/assets/icons/colormap-spectral.png +0 -0
- package/src/lib/assets/icons/colormap-spring.png +0 -0
- package/src/lib/assets/icons/colormap-summer.png +0 -0
- package/src/lib/assets/icons/colormap-tab10.png +0 -0
- package/src/lib/assets/icons/colormap-tab20.png +0 -0
- package/src/lib/assets/icons/colormap-tab20b.png +0 -0
- package/src/lib/assets/icons/colormap-tab20c.png +0 -0
- package/src/lib/assets/icons/colormap-terrain.png +0 -0
- package/src/lib/assets/icons/colormap-turbo.png +0 -0
- package/src/lib/assets/icons/colormap-twilight.png +0 -0
- package/src/lib/assets/icons/colormap-twilight_shifted.png +0 -0
- package/src/lib/assets/icons/colormap-vanimo.png +0 -0
- package/src/lib/assets/icons/colormap-viridis.png +0 -0
- package/src/lib/assets/icons/colormap-winter.png +0 -0
- package/src/lib/assets/icons/colormap-wistia.png +0 -0
- package/src/lib/assets/icons/colormap-ylgn.png +0 -0
- package/src/lib/assets/icons/colormap-ylgnbu-inv.png +0 -0
- package/src/lib/assets/icons/colormap-ylgnbu.png +0 -0
- package/src/lib/assets/icons/colormap-ylorbr.png +0 -0
- package/src/lib/assets/icons/colormap-ylorrd-inv.png +0 -0
- package/src/lib/assets/icons/colormap-ylorrd.png +0 -0
- package/src/lib/assets/interactive-segmentation-cursor.svg +1 -0
- package/src/lib/assets/invert.svg +1 -0
- package/src/lib/assets/isosurface.svg +7 -0
- package/src/lib/assets/mask.svg +1 -0
- package/src/lib/assets/paintbrush.svg +1 -0
- package/src/lib/assets/picture-segmentation.svg +43 -0
- package/src/lib/assets/polygon-vertices.svg +13 -0
- package/src/lib/assets/polyline.svg +3 -0
- package/src/lib/assets/redo.svg +39 -0
- package/src/lib/assets/region-editor.svg +37 -0
- package/src/lib/assets/region-move.svg +7 -0
- package/src/lib/assets/smooth.svg +56 -0
- package/src/lib/assets/spline-chart.svg +7 -0
- package/src/lib/assets/surface.svg +37 -0
- package/src/lib/assets/test/download-379.svg +1 -0
- package/src/lib/assets/test/download-98.svg +1 -0
- package/src/lib/assets/test/json-1.svg +1 -0
- package/src/lib/assets/test/load-53.svg +1 -0
- package/src/lib/assets/test/mask-44.svg +1 -0
- package/src/lib/assets/test/mask-download-44.svg +15 -0
- package/src/lib/assets/test/mask-save-44.svg +11 -0
- package/src/lib/assets/test/overlay-1.svg +1 -0
- package/src/lib/assets/test/overlay-4.svg +1 -0
- package/src/lib/assets/test/region-26.svg +1 -0
- package/src/lib/assets/test/save-56.svg +1 -0
- package/src/lib/assets/test/upload-43.svg +1 -0
- package/src/lib/assets/to-bezier.svg +15 -0
- package/src/lib/assets/to-polygon.svg +11 -0
- package/src/lib/assets/undo.svg +38 -0
- package/src/lib/assets/vertex-add.svg +12 -0
- package/src/lib/assets/vertex-delete.svg +12 -0
- package/src/lib/assets/wand.svg +54 -0
- package/src/lib/assets/zoom-box.svg +10 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { ChangeDetectorRef, AfterViewInit, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import { MenuItem, MessageService, TreeNode } from 'primeng/api';
|
|
4
|
+
import { ContextMenu } from 'primeng/contextmenu';
|
|
5
|
+
import { IImageInfo } from './contracts/image.contract';
|
|
6
|
+
import { ImageStatePort } from './contracts/ports/image-state.port';
|
|
7
|
+
import { Polygon } from './models/region';
|
|
8
|
+
import { RegionOpsService } from './region-ops.service';
|
|
9
|
+
import { VisualizerStore } from './store/visualizer-store.service';
|
|
10
|
+
import { PlotType, PlotTypeDescriptor } from './contracts/plot-type';
|
|
11
|
+
import { IVisualizer } from './contracts/visualizer.contract';
|
|
12
|
+
import { SamToolService } from './toolbar/segmentation/sam-tool.service';
|
|
13
|
+
import { SamPointToolService } from './toolbar/segmentation/sam-point-tool.service';
|
|
14
|
+
import { CellSegmentToolService } from './toolbar/segmentation/cell-segment-tool.service';
|
|
15
|
+
import { ToolbarToolVisibility } from './contracts/toolbar-config';
|
|
16
|
+
import { VizConfig } from './contracts/viz-config';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
export declare class VisualizerComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
|
|
19
|
+
private state;
|
|
20
|
+
plotService: IVisualizer;
|
|
21
|
+
messageService: MessageService;
|
|
22
|
+
private ngZone;
|
|
23
|
+
private cdr;
|
|
24
|
+
private session;
|
|
25
|
+
private samTool;
|
|
26
|
+
private cellSegmentTool;
|
|
27
|
+
private samPointTool;
|
|
28
|
+
private regionOps;
|
|
29
|
+
private vizConfig?;
|
|
30
|
+
/** Per-instance toast key. MessageService is a global singleton, so two live
|
|
31
|
+
* `<visualizer>` instances (main viewer + pipeline-dialog preview) sharing
|
|
32
|
+
* one key would each render the same message — a duplicate toast. A unique
|
|
33
|
+
* key per instance scopes the toast to the component that raised it. */
|
|
34
|
+
private static nextToastId;
|
|
35
|
+
isStackEvent: EventEmitter<any>;
|
|
36
|
+
isGrayscaleEvent: EventEmitter<any>;
|
|
37
|
+
/** Which toolbar groups to show. A partial override merges over the full set,
|
|
38
|
+
* so `{ specialTools: false }` hides only that group. Defaults to everything. */
|
|
39
|
+
set toolbarTools(v: ToolbarToolVisibility | undefined);
|
|
40
|
+
get toolbarTools(): Required<ToolbarToolVisibility>;
|
|
41
|
+
private _toolbarTools;
|
|
42
|
+
/** Expose test-only plot modes in the selector (e.g. the napari `Image`
|
|
43
|
+
* mode, otherwise hidden). The host app sets this from a `?test=1` URL
|
|
44
|
+
* toggle. Off by default, so production users never see them. */
|
|
45
|
+
testMode: boolean;
|
|
46
|
+
/** Image-smoothing state for the toolbar's Smoothen toggle (OSD only).
|
|
47
|
+
* Defaults to `false` so OSD shows raw pixels (nearest-neighbour). */
|
|
48
|
+
imageSmoothingEnabled: boolean;
|
|
49
|
+
loadingMessage: string;
|
|
50
|
+
zoom: boolean;
|
|
51
|
+
fileName: string | undefined;
|
|
52
|
+
private loadedFileName;
|
|
53
|
+
imageInfo: IImageInfo | undefined;
|
|
54
|
+
private unsub;
|
|
55
|
+
private previewSubscription;
|
|
56
|
+
stackLoading: boolean;
|
|
57
|
+
imgLoading: boolean;
|
|
58
|
+
loadingPercentage: number;
|
|
59
|
+
cacheProgress: number | null;
|
|
60
|
+
sharpening: boolean;
|
|
61
|
+
/** A jit-service cache copy is actively in progress (determinate 0..99). Drives the cache
|
|
62
|
+
* progress bar independently of `imgLoading` so the bar can't be dropped — or masked by the
|
|
63
|
+
* "Sharpening preview..." overlay — mid-download if the loading flag flips early. */
|
|
64
|
+
get isCaching(): boolean;
|
|
65
|
+
private running;
|
|
66
|
+
zIndex: number;
|
|
67
|
+
maxIndex: number;
|
|
68
|
+
contextMenu: ContextMenu;
|
|
69
|
+
contextMenuItems: MenuItem[];
|
|
70
|
+
activeDragMode: string | null;
|
|
71
|
+
/** Whether a region action is available to undo (jit-ui#85). Mirrors the
|
|
72
|
+
* shared RegionStore's history depth; drives the toolbar Undo button. */
|
|
73
|
+
canUndoRegion: boolean;
|
|
74
|
+
/** Whether an undone region action is available to redo (jit-ui#85). */
|
|
75
|
+
canRedoRegion: boolean;
|
|
76
|
+
/** Custom-threshold Simplify dialog (jit-ui#85). */
|
|
77
|
+
displaySimplifyDialog: boolean;
|
|
78
|
+
simplifyThreshold: number;
|
|
79
|
+
/** Current region selection (array indices) — mirrored from the store so the
|
|
80
|
+
* context-menu region actions can read it synchronously (jit-ui#85). */
|
|
81
|
+
private selectedIndices;
|
|
82
|
+
/** Wand sensitivity — higher = stricter (smaller selection). Matches QuPath default. */
|
|
83
|
+
wandSensitivity: number;
|
|
84
|
+
/** Brush diameter in image-pixel coordinates (drives the painted disc size). */
|
|
85
|
+
brushSize: number;
|
|
86
|
+
/** SAM model picker options + current selection (jit-ui#90 P1). Only models
|
|
87
|
+
* with a hosted ONNX pair (configured via setSamModelUrls at app init) are
|
|
88
|
+
* offered, so the picker can't select a model that can't run. */
|
|
89
|
+
samModels: {
|
|
90
|
+
id: string;
|
|
91
|
+
label: string;
|
|
92
|
+
}[];
|
|
93
|
+
samModelId: string;
|
|
94
|
+
/** SAM download/segment toast state (bound by the `sam` p-toast template). */
|
|
95
|
+
samStatus: string;
|
|
96
|
+
samProgress: number;
|
|
97
|
+
samDownloading: boolean;
|
|
98
|
+
samBusy: boolean;
|
|
99
|
+
/** Whether the shared `sam` toast is currently shown (avoids stacking it on
|
|
100
|
+
* every point click, which re-runs inference). */
|
|
101
|
+
private samToastShown;
|
|
102
|
+
readonly samToastKey: string;
|
|
103
|
+
/** Subscriptions to the point tool's live feeds (status/busy/download). */
|
|
104
|
+
private samPointSub;
|
|
105
|
+
/** Vertex eraser radius in image-pixel coordinates. */
|
|
106
|
+
vertexEraserRadius: number;
|
|
107
|
+
colormapsOptions: any;
|
|
108
|
+
reversescale: boolean;
|
|
109
|
+
selectedColormap: any;
|
|
110
|
+
/** Channels & Histogram dialog visibility (opened from the toolbar). */
|
|
111
|
+
showChannelHistogram: boolean;
|
|
112
|
+
/** Region Editor dialog visibility (opened from the toolbar). */
|
|
113
|
+
showRegionEditor: boolean;
|
|
114
|
+
/** Region Editor dialog width. On open it is set to the configured host
|
|
115
|
+
* element's current width, or — when no selector is configured / the element
|
|
116
|
+
* isn't found — to a quarter of the page (see openRegionEditor). */
|
|
117
|
+
regionEditorWidth: string;
|
|
118
|
+
stackOptions: {
|
|
119
|
+
name: string;
|
|
120
|
+
val: string;
|
|
121
|
+
}[];
|
|
122
|
+
selectedStackOption: {
|
|
123
|
+
name: string;
|
|
124
|
+
val: string;
|
|
125
|
+
} | undefined;
|
|
126
|
+
readonly plotDivName: string;
|
|
127
|
+
plotType: PlotType;
|
|
128
|
+
isHeatmap: boolean;
|
|
129
|
+
activeSurface3dMode: string;
|
|
130
|
+
/** Whether the napari 3D coordinate-axes / scale gizmo is shown (volume/isosurface). */
|
|
131
|
+
axesVisible: boolean;
|
|
132
|
+
wireframeActive: boolean;
|
|
133
|
+
/** napari 3D decimate factor (1 = Full … 8 = ⅛; default ½); changing it re-plots. */
|
|
134
|
+
resolutionScale: number;
|
|
135
|
+
/** Plot types the active backend advertises (3D gated by capability). */
|
|
136
|
+
plotTypeOptions: PlotTypeDescriptor[];
|
|
137
|
+
selectedPlotType: PlotType;
|
|
138
|
+
/** Floating intensity-profile inset (LINE mode). */
|
|
139
|
+
readonly intensityInsetDiv = "intensity-inset-plot";
|
|
140
|
+
profilePanelPos: {
|
|
141
|
+
x: number;
|
|
142
|
+
y: number;
|
|
143
|
+
};
|
|
144
|
+
private profilePanelDragging;
|
|
145
|
+
private profilePanelStart;
|
|
146
|
+
/** Toolbar docking: docked across the top by default; dragging its handle
|
|
147
|
+
* detaches it into a floating, movable window (frees the top row for the
|
|
148
|
+
* visualization). */
|
|
149
|
+
toolbarFloating: boolean;
|
|
150
|
+
toolbarPos: {
|
|
151
|
+
x: number;
|
|
152
|
+
y: number;
|
|
153
|
+
};
|
|
154
|
+
private toolbarDragging;
|
|
155
|
+
private toolbarStart;
|
|
156
|
+
private latestProfiles;
|
|
157
|
+
/** Drives the intensity inset panel's visibility — true whenever any
|
|
158
|
+
* intensity-profile line exists (independent of the current plot type). */
|
|
159
|
+
hasProfiles: boolean;
|
|
160
|
+
private intensityProfileSub?;
|
|
161
|
+
private viewportChangeSub?;
|
|
162
|
+
private profileDragMoveListener?;
|
|
163
|
+
private profileDragUpListener?;
|
|
164
|
+
private profileResizeListener?;
|
|
165
|
+
/** LINE plot type shows the image + draggable line ROI + intensity inset. */
|
|
166
|
+
get isProfileMode(): boolean;
|
|
167
|
+
/** True for the Image plot type, which renders as a natively pan/zoom-able
|
|
168
|
+
* raster — so the backend-agnostic zoom/pan toolbar tools are hidden. The
|
|
169
|
+
* component drives this off the plot type, not the active backend. */
|
|
170
|
+
get isImageView(): boolean;
|
|
171
|
+
/** Isosurface band as a 0–255 slider position, mapped onto the volume's real
|
|
172
|
+
* intensity range by the renderer. Defaults to the full range. */
|
|
173
|
+
isoRange: number[];
|
|
174
|
+
plotWidthSubscription?: Subscription;
|
|
175
|
+
imageLoadingSubscription?: Subscription;
|
|
176
|
+
imgLoadingMessageSubscription?: Subscription;
|
|
177
|
+
isZoomSubscription?: Subscription;
|
|
178
|
+
filenameSubscription?: Subscription;
|
|
179
|
+
autoscaleSubscription?: Subscription;
|
|
180
|
+
private plotContextMenuListener?;
|
|
181
|
+
private keydownListener?;
|
|
182
|
+
private wheelListener?;
|
|
183
|
+
/** Debounced z-slice scrubbing (see SliceScrubber — refactoring plan Step 7). */
|
|
184
|
+
private readonly scrubber;
|
|
185
|
+
constructor(state: ImageStatePort, plotService: IVisualizer, messageService: MessageService, ngZone: NgZone, cdr: ChangeDetectorRef, session: VisualizerStore, samTool: SamToolService, cellSegmentTool: CellSegmentToolService, samPointTool: SamPointToolService, regionOps: RegionOpsService, vizConfig?: VizConfig | undefined);
|
|
186
|
+
/**
|
|
187
|
+
* Plot types offered in the selector for the current image:
|
|
188
|
+
* - Outside **test mode**, only the curated default set (descriptors with a
|
|
189
|
+
* `productionLabel`) is offered, shown under suffix-free names — Image,
|
|
190
|
+
* Heatmap, Contour and the napari Surface / Volume / Isosurface. Test mode
|
|
191
|
+
* exposes every backend's type under its full (backend-suffixed) label.
|
|
192
|
+
* - 3D types hidden when the backend can't render a 3D scene.
|
|
193
|
+
* - stack-only types (volume, isosurface) hidden unless the file is a stack —
|
|
194
|
+
* a volume needs multiple z-slices.
|
|
195
|
+
* - scalar-intensity types (contour, surface, isosurface) hidden for RGB
|
|
196
|
+
* images — they map a single intensity per pixel. Image and Heatmap render
|
|
197
|
+
* any image.
|
|
198
|
+
*/
|
|
199
|
+
private computePlotTypeOptions;
|
|
200
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
201
|
+
/** If the active plot type is no longer in the offered options (e.g. test mode
|
|
202
|
+
* turned off while a test-only type was active, or a scalar type carried onto
|
|
203
|
+
* an RGB image), fall back to the default 2D Image view. */
|
|
204
|
+
private reconcileSelectedPlotType;
|
|
205
|
+
ngOnInit(): void;
|
|
206
|
+
ngAfterViewInit(): void;
|
|
207
|
+
onProfilePanelDragStart(e: MouseEvent): void;
|
|
208
|
+
/** Grab the toolbar handle: detach it into a floating window (if still docked)
|
|
209
|
+
* and start dragging. */
|
|
210
|
+
onToolbarDragStart(e: MouseEvent): void;
|
|
211
|
+
/** Snap the floating toolbar back to its docked position across the top. */
|
|
212
|
+
dockToolbar(): void;
|
|
213
|
+
/** Render the intensity inset chart from the latest profile data. The actual
|
|
214
|
+
* charting is owned by the visualizer service — the component just decides
|
|
215
|
+
* when (profile mode + a fresh profile). */
|
|
216
|
+
private renderIntensityInset;
|
|
217
|
+
/** Toolbar "Intensity" group: add another line ROI (next bright colour). */
|
|
218
|
+
addProfileLine(): Promise<void>;
|
|
219
|
+
ngOnDestroy(): void;
|
|
220
|
+
hasRegions(): boolean;
|
|
221
|
+
/**
|
|
222
|
+
* This method is called in mainFacade.configRequest() - DO NOT DELETE
|
|
223
|
+
*/
|
|
224
|
+
getRegionPolygons(): Polygon[];
|
|
225
|
+
/**
|
|
226
|
+
* Select the color scale type: called by the color scale select button
|
|
227
|
+
* @param event
|
|
228
|
+
*/
|
|
229
|
+
toggleReverseScale(): void;
|
|
230
|
+
/**
|
|
231
|
+
* Select a color map: called by the color map dropdown button
|
|
232
|
+
* @param colormapNode
|
|
233
|
+
*/
|
|
234
|
+
selectColormap(colormapNode: TreeNode): void;
|
|
235
|
+
/** Open the Channels & Histogram dialog (toolbar button). */
|
|
236
|
+
openChannelHistogram(): void;
|
|
237
|
+
/** Open the Region Editor dialog (toolbar button). The editor stays linked to
|
|
238
|
+
* this plotting instance through the root RegionStore singleton, so it works
|
|
239
|
+
* the same as the former right-panel Regions tab. */
|
|
240
|
+
openRegionEditor(): void;
|
|
241
|
+
/**
|
|
242
|
+
* Called by the stack/single image dropdown button
|
|
243
|
+
* @param showstack
|
|
244
|
+
*/
|
|
245
|
+
selectStackOption(selectedStackOption: any): void;
|
|
246
|
+
updateZIndex(urls?: string[]): void;
|
|
247
|
+
/**
|
|
248
|
+
* Live z-slice scrub for the Image view: the renderer swaps the displayed
|
|
249
|
+
* slice in place (no re-mount), so dragging the slider steps through the
|
|
250
|
+
* stack the same way the heatmap frame slider does.
|
|
251
|
+
*/
|
|
252
|
+
onZSlide(z: number | undefined): void;
|
|
253
|
+
/**
|
|
254
|
+
* Live (debounced) scrub while dragging the Image-view z-slider: update the
|
|
255
|
+
* slice as the user drags, but coalesce rapid changes so we don't fire a
|
|
256
|
+
* slice swap on every pixel. The final value also lands via onZSlide (onSlideEnd).
|
|
257
|
+
*/
|
|
258
|
+
onZScrub(z: number | undefined): void;
|
|
259
|
+
/**
|
|
260
|
+
* Keyboard stack navigation: ←/→ step the z-slice in the Image view, the same
|
|
261
|
+
* way the slider does. Only active for a loaded stack in Image view, and
|
|
262
|
+
* ignored while a form field is focused so typing isn't hijacked. Up/Down are
|
|
263
|
+
* left to OpenSeadragon (panning).
|
|
264
|
+
*/
|
|
265
|
+
onKeydown(e: KeyboardEvent): void;
|
|
266
|
+
/** Move the displayed slice by `delta`, clamped to the stack bounds. */
|
|
267
|
+
stepSlice(delta: number): void;
|
|
268
|
+
reloadAndPlot(): void;
|
|
269
|
+
cancelLoading(): void;
|
|
270
|
+
downloadImage(): void;
|
|
271
|
+
autoscaleImage(): void;
|
|
272
|
+
/** Toolbar pixel/smooth toggle: flip smoothing and apply to the active backend. */
|
|
273
|
+
onToggleImageSmoothing(): void;
|
|
274
|
+
resetAxes(): void;
|
|
275
|
+
toggleDragMode(mode: string): void;
|
|
276
|
+
/** Region draw/select/edit modes routed through the region overlay. The
|
|
277
|
+
* The vertex tools (drawpolygon/addpoint/deletepoint/move) are
|
|
278
|
+
* handled by the OpenSeadragon overlay; Plotly's overlay maps them to no-op. */
|
|
279
|
+
private isRegionMode;
|
|
280
|
+
/** Live-update the isosurface as the range slider moves. The control is only
|
|
281
|
+
* available when the active backend renders isosurfaces (ISOSURFACE mode). */
|
|
282
|
+
onIsoRangeChange(values: number[] | undefined): void;
|
|
283
|
+
onWandSensitivityChange(value: number | undefined): void;
|
|
284
|
+
onBrushSizeChange(value: number | undefined): void;
|
|
285
|
+
onVertexEraserRadiusChange(value: number | undefined): void;
|
|
286
|
+
zoomIn(): void;
|
|
287
|
+
zoomOut(): void;
|
|
288
|
+
deleteRegion(): void;
|
|
289
|
+
/** Undo the most recent region action (jit-ui#85). Up to 10 steps back. */
|
|
290
|
+
undoRegion(): void;
|
|
291
|
+
/** Redo the most recently undone region action (jit-ui#85). */
|
|
292
|
+
redoRegion(): void;
|
|
293
|
+
/** The currently-selected regions (live store instances). */
|
|
294
|
+
private get selectedRegions();
|
|
295
|
+
/** Regions eligible for set-ops: closed areas (rect / closed polygon /
|
|
296
|
+
* multi-polygon), excluding intensity-profile lines. */
|
|
297
|
+
private opEligible;
|
|
298
|
+
/** Image pixel dimensions for the raster ops; falls back to the selection's
|
|
299
|
+
* extent when the image size isn't known (keeps clamping sane). */
|
|
300
|
+
private opImageDims;
|
|
301
|
+
/** True when ≥2 eligible regions are selected (Merge available). */
|
|
302
|
+
get canMergeRegions(): boolean;
|
|
303
|
+
/** True when any selected region is multi-part (Ungroup available). */
|
|
304
|
+
get canUngroupRegions(): boolean;
|
|
305
|
+
/** True when ≥1 eligible region is selected (Inverse / Simplify available). */
|
|
306
|
+
get hasEligibleSelection(): boolean;
|
|
307
|
+
/** Select every region on the image (excludes intensity-profile lines). */
|
|
308
|
+
selectAllRegions(): void;
|
|
309
|
+
/** Merge the selected regions into a single (possibly multi-part) region. */
|
|
310
|
+
mergeRegions(): void;
|
|
311
|
+
/** Split each selected multi-part region into one region per part. */
|
|
312
|
+
ungroupRegions(): void;
|
|
313
|
+
/** Replace the selection with its inverse inside the image rectangle. */
|
|
314
|
+
inverseRegions(): void;
|
|
315
|
+
/** Douglas–Peucker simplify each selected region by `thresholdPx`. */
|
|
316
|
+
simplifyRegions(thresholdPx: number): void;
|
|
317
|
+
/** Open the custom-threshold simplify dialog. */
|
|
318
|
+
openSimplifyDialog(): void;
|
|
319
|
+
/**
|
|
320
|
+
* Commit a set-op: drop the `remove` regions, append `add`, and select the
|
|
321
|
+
* results. Goes through setRegions so it's undo-tracked and re-rendered;
|
|
322
|
+
* profile lines and unselected regions are preserved.
|
|
323
|
+
*/
|
|
324
|
+
private replaceRegions;
|
|
325
|
+
/** Box-prompted SAM segmentation of the drawn rectangles (jit-ui#90). A sticky
|
|
326
|
+
* `sam` toast shows live status + a download progress bar (first run pulls the
|
|
327
|
+
* encoder, ~170 MB); it stays open until the run finishes (bar hits 100%). */
|
|
328
|
+
segmentRegions(): Promise<void>;
|
|
329
|
+
/** Auto-segment cells inside each drawn rectangle with cellpose-SAM, client-side
|
|
330
|
+
* (jit-ui#90). Each box is cropped (browser slide-crop) then run through the
|
|
331
|
+
* cellpose-js model; the same sticky `sam` toast + progress bar is reused. */
|
|
332
|
+
segmentCellpose(): Promise<void>;
|
|
333
|
+
/** Shared driver for the box-prompt segment tools: wires the tool's status +
|
|
334
|
+
* download progress into the sticky `sam` toast, runs `op`, and reports the
|
|
335
|
+
* region count. Keeps the toast open until the run settles (bar hits 100%). */
|
|
336
|
+
private runSegmentWithToast;
|
|
337
|
+
/** Show the shared sticky `sam` toast once (idempotent — re-adding would stack
|
|
338
|
+
* a new toast on every point click). */
|
|
339
|
+
private showSamToast;
|
|
340
|
+
/** Dismiss the shared `sam` toast and reset its progress/spinner state. */
|
|
341
|
+
private hideSamToast;
|
|
342
|
+
/** Pick the SAM model the segment tools use (jit-ui#90 P1). */
|
|
343
|
+
onSamModelChange(id: string): void;
|
|
344
|
+
/** Convert the selected region to a smooth bezier curve. */
|
|
345
|
+
toBezierRegion(): void;
|
|
346
|
+
/** Convert the selected region back to a straight-edged polygon. */
|
|
347
|
+
toPolygonRegion(): void;
|
|
348
|
+
/**
|
|
349
|
+
* Immediate region actions on the current selection (jit-ui#85): merge,
|
|
350
|
+
* ungroup, inverse, simplify, the Bézier conversions, and delete — the
|
|
351
|
+
* one-shot geometry transforms, grouped apart from the tool/mode toggles and
|
|
352
|
+
* shown only when something is selected. Each item is gated on what the
|
|
353
|
+
* selection supports.
|
|
354
|
+
*/
|
|
355
|
+
private buildRegionActionItems;
|
|
356
|
+
private buildContextMenuItems;
|
|
357
|
+
toggleSurface3dMode(mode: string): void;
|
|
358
|
+
resetSurfaceCamera(): void;
|
|
359
|
+
/** Toggle the napari 3D coordinate-axes / scale gizmo (volume/isosurface). No-op on backends
|
|
360
|
+
* that don't render one (the control method is optional). */
|
|
361
|
+
toggleAxes(): void;
|
|
362
|
+
/** Toggle the napari surface wireframe (edges vs filled). No-op on backends without a surface. */
|
|
363
|
+
toggleWireframe(): void;
|
|
364
|
+
/** Change the napari 3D decimate factor. Decimation changes the fetched/assembled data, so this
|
|
365
|
+
* re-plots the current 3D type at the new resolution (unlike axes/wireframe, which are live). */
|
|
366
|
+
selectResolution(scale: number): void;
|
|
367
|
+
/**
|
|
368
|
+
* Switch the active plot type (heatmap, surface, contour, scatter, line,
|
|
369
|
+
* scatter3d, isosurface). Keeps `isHeatmap` as the 2D-vs-3D flag the rest of
|
|
370
|
+
* the toolbar/context-menu logic relies on, deactivates 2D-only tools when
|
|
371
|
+
* moving to a 3D type, then re-plots.
|
|
372
|
+
*/
|
|
373
|
+
onSelectPlotType(type: PlotType): void;
|
|
374
|
+
/** Deactivate whatever tool is armed and clear every tool mode. */
|
|
375
|
+
private deactivateActiveTool;
|
|
376
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }]>;
|
|
377
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VisualizerComponent, "visualizer", never, { "toolbarTools": { "alias": "toolbarTools"; "required": false; }; "testMode": { "alias": "testMode"; "required": false; }; }, { "isStackEvent": "isStackEvent"; "isGrayscaleEvent": "isGrayscaleEvent"; }, never, ["*"], false, never>;
|
|
378
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jax-data-science/sci-image-visualizer",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Browser-based scientific image visualization for Angular — gigapixel whole-slide (OpenSeadragon), 2D/3D (Plotly) and WebGPU (napari-js) rendering, with region/annotation editing and in-browser SAM segmentation.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"angular",
|
|
7
|
+
"image-visualization",
|
|
8
|
+
"scientific-visualization",
|
|
9
|
+
"openseadragon",
|
|
10
|
+
"plotly",
|
|
11
|
+
"napari",
|
|
12
|
+
"webgpu",
|
|
13
|
+
"whole-slide-imaging",
|
|
14
|
+
"digital-pathology",
|
|
15
|
+
"microscopy",
|
|
16
|
+
"segmentation",
|
|
17
|
+
"sam",
|
|
18
|
+
"onnxruntime",
|
|
19
|
+
"annotation",
|
|
20
|
+
"region-editor"
|
|
21
|
+
],
|
|
22
|
+
"author": "The Jackson Laboratory",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"homepage": "https://github.com/TheJacksonLaboratory/sci-image-visualizer#readme",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/TheJacksonLaboratory/sci-image-visualizer.git"
|
|
28
|
+
},
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/TheJacksonLaboratory/sci-image-visualizer/issues"
|
|
31
|
+
},
|
|
32
|
+
"sideEffects": false,
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"fast-png": "^6.4.0",
|
|
38
|
+
"napari-js": "^0.11.0",
|
|
39
|
+
"openseadragon": "^6.0.2",
|
|
40
|
+
"plotly.js-dist-min": "^3.0.1",
|
|
41
|
+
"tslib": "^2.3.0"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@angular/animations": "^17.3.0",
|
|
45
|
+
"@angular/common": "^17.3.0",
|
|
46
|
+
"@angular/core": "^17.3.0",
|
|
47
|
+
"@angular/forms": "^17.3.0",
|
|
48
|
+
"@angular/router": "^17.3.0",
|
|
49
|
+
"buffer": "^5.7.1",
|
|
50
|
+
"cellpose-js": "^0.3.0",
|
|
51
|
+
"file-saver": "^2.0.5",
|
|
52
|
+
"image-js": "^0.35.6",
|
|
53
|
+
"onnxruntime-web": "~1.26.0",
|
|
54
|
+
"primeng": "^17.18.0",
|
|
55
|
+
"rxjs": "^7.8.0"
|
|
56
|
+
},
|
|
57
|
+
"overrides": {
|
|
58
|
+
"@ngtools/webpack": "17.3.17"
|
|
59
|
+
},
|
|
60
|
+
"module": "fesm2022/jax-data-science-sci-image-visualizer.mjs",
|
|
61
|
+
"typings": "index.d.ts",
|
|
62
|
+
"exports": {
|
|
63
|
+
"./package.json": {
|
|
64
|
+
"default": "./package.json"
|
|
65
|
+
},
|
|
66
|
+
".": {
|
|
67
|
+
"types": "./index.d.ts",
|
|
68
|
+
"esm2022": "./esm2022/jax-data-science-sci-image-visualizer.mjs",
|
|
69
|
+
"esm": "./esm2022/jax-data-science-sci-image-visualizer.mjs",
|
|
70
|
+
"default": "./fesm2022/jax-data-science-sci-image-visualizer.mjs"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<svg
|
|
3
|
+
version="1.1"
|
|
4
|
+
x="0px"
|
|
5
|
+
y="0px"
|
|
6
|
+
viewBox="0 0 60.002499 51.002498"
|
|
7
|
+
enable-background="new 0 0 60 51"
|
|
8
|
+
xml:space="preserve"
|
|
9
|
+
id="svg5"
|
|
10
|
+
sodipodi:docname="3d-coordinates.svg"
|
|
11
|
+
width="60.002499"
|
|
12
|
+
height="51.002499"
|
|
13
|
+
inkscape:version="1.4.4 (dcaf3e7, 2026-05-05)"
|
|
14
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
15
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
16
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
17
|
+
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
|
18
|
+
id="defs5" /><sodipodi:namedview
|
|
19
|
+
id="namedview5"
|
|
20
|
+
pagecolor="#ffffff"
|
|
21
|
+
bordercolor="#000000"
|
|
22
|
+
borderopacity="0.25"
|
|
23
|
+
inkscape:showpageshadow="2"
|
|
24
|
+
inkscape:pageopacity="0.0"
|
|
25
|
+
inkscape:pagecheckerboard="0"
|
|
26
|
+
inkscape:deskcolor="#d1d1d1"
|
|
27
|
+
inkscape:zoom="14.566667"
|
|
28
|
+
inkscape:cx="30.377574"
|
|
29
|
+
inkscape:cy="26.121281"
|
|
30
|
+
inkscape:window-width="1921"
|
|
31
|
+
inkscape:window-height="1186"
|
|
32
|
+
inkscape:window-x="639"
|
|
33
|
+
inkscape:window-y="30"
|
|
34
|
+
inkscape:window-maximized="0"
|
|
35
|
+
inkscape:current-layer="svg5" /><g
|
|
36
|
+
id="g4"
|
|
37
|
+
transform="translate(0,0.0025)"><path
|
|
38
|
+
fill="#000000"
|
|
39
|
+
d="M 31,30.47 V 12 c 0,-0.55 -0.45,-1 -1,-1 -0.55,0 -1,0.45 -1,1 v 18.49 l -17.59,12.7 c -0.45,0.32 -0.55,0.95 -0.22,1.4 0.32,0.45 0.95,0.55 1.4,0.23 L 30.02,32.23 48.44,44.83 C 48.61,44.94 48.8,45 49,45 c 0.32,0 0.63,-0.15 0.83,-0.44 0.31,-0.46 0.2,-1.08 -0.26,-1.39 z"
|
|
40
|
+
id="path1" /><path
|
|
41
|
+
fill="#000000"
|
|
42
|
+
d="M 29,4.41 V 7 c 0,0.55 0.45,1 1,1 0.55,0 1,-0.45 1,-1 V 4.41 L 33.71,1.7 c 0.39,-0.39 0.39,-1.02 0,-1.41 -0.39,-0.39 -1.02,-0.39 -1.41,0 L 30,2.59 27.71,0.3 c -0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41 z"
|
|
43
|
+
id="path2" /><path
|
|
44
|
+
fill="#000000"
|
|
45
|
+
d="m 57.41,47 2.29,-2.29 c 0.39,-0.39 0.39,-1.02 0,-1.41 -0.39,-0.39 -1.02,-0.39 -1.41,0 L 56,45.59 53.71,43.3 c -0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41 L 54.59,47 52.3,49.29 c -0.39,0.39 -0.39,1.02 0,1.41 0.19,0.2 0.44,0.3 0.7,0.3 0.26,0 0.51,-0.1 0.71,-0.29 l 2.29,-2.3 2.29,2.29 c 0.2,0.2 0.45,0.3 0.71,0.3 0.26,0 0.51,-0.1 0.71,-0.29 0.39,-0.39 0.39,-1.02 0,-1.41 z"
|
|
46
|
+
id="path3" /><path
|
|
47
|
+
fill="#000000"
|
|
48
|
+
d="m 7.92,44.38 c 0.1,-0.24 0.1,-0.52 0,-0.76 C 7.82,43.38 7.62,43.18 7.38,43.08 7.26,43.03 7.13,43 7,43 H 1 c -0.55,0 -1,0.45 -1,1 0,0.55 0.45,1 1,1 H 4.59 L 0.3,49.29 c -0.09,0.09 -0.17,0.2 -0.22,0.33 -0.1,0.24 -0.1,0.52 0,0.76 0.1,0.24 0.3,0.44 0.54,0.54 C 0.74,50.97 0.87,51 1,51 H 7 C 7.55,51 8,50.55 8,50 8,49.45 7.55,49 7,49 H 3.41 L 7.7,44.71 C 7.8,44.62 7.87,44.5 7.92,44.38 Z"
|
|
49
|
+
id="path4" /></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="svg-icon" style="width: 1.0048828125em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1029 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M519.04 2.048c-280.8 0-509.216 228.448-509.216 509.216 0 280.8 228.416 509.216 509.216 509.216 280.832 0 509.248-228.448 509.248-509.216C1028.288 230.496 799.872 2.048 519.04 2.048zM519.04 939.456c-236.128 0-428.16-192.064-428.16-428.192 0-236.064 192.032-428.16 428.16-428.16S947.232 275.2 947.232 511.264C947.232 747.392 755.168 939.456 519.04 939.456z" /><path d="M692.448 574.464m-123.968 0a3.874 3.874 0 1 0 247.936 0 3.874 3.874 0 1 0-247.936 0Z" /><path d="M416.192 253.824m-92.064 0a2.877 2.877 0 1 0 184.128 0 2.877 2.877 0 1 0-184.128 0Z" /><path d="M317.248 561.824m-111.328 0a3.479 3.479 0 1 0 222.656 0 3.479 3.479 0 1 0-222.656 0Z" /><path d="M512.672 780.704m-46.912 0a1.466 1.466 0 1 0 93.824 0 1.466 1.466 0 1 0-93.824 0Z" /><path d="M711.936 318.784m-50.656 0a1.583 1.583 0 1 0 101.312 0 1.583 1.583 0 1 0-101.312 0Z" /><path d="M527.52 446.368m-42.912 0a1.341 1.341 0 1 0 85.824 0 1.341 1.341 0 1 0-85.824 0Z" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg class="svg-icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M620.48 933.376l86.144-202.752 206.208 193.344L960 873.6l-206.272-193.344 196.864-99.072L436.16 424.256 620.48 933.376zM485.824 224.256c0 24.832-20.032 44.928-44.8 44.928l0 0c-24.832 0-44.928-20.096-44.928-44.928L396.096 108.864C396.032 84.032 416.128 64 441.024 64l0 0c24.768 0 44.8 20.032 44.8 44.864L485.824 224.256zM310.464 261.312c17.536 17.472 17.536 45.888 0 63.424l0 0c-17.472 17.472-45.952 17.472-63.424 0L165.44 243.136c-17.472-17.472-17.472-45.888 0-63.36l0 0c17.536-17.536 45.952-17.536 63.424 0L310.464 261.312zM555.264 244.352c-17.472 17.536-17.472 45.952 0 63.488l0 0c17.472 17.472 45.952 17.472 63.488 0l81.472-81.6c17.536-17.472 17.536-45.952 0-63.424l0 0c-17.472-17.536-45.888-17.536-63.36 0L555.264 244.352zM224.256 400.768c24.768 0 44.864 20.032 44.864 44.864l0 0c0 24.768-20.032 44.864-44.864 44.864L108.864 490.432C84.032 490.432 64 470.4 64 445.568l0 0c0-24.768 20.032-44.8 44.864-44.8L224.256 400.768 224.256 400.768zM278.208 556.8C295.68 539.328 324.096 539.328 341.632 556.928l0 0c17.536 17.408 17.536 45.888 0.064 63.36l-81.6 81.536c-17.472 17.536-45.952 17.536-63.424 0l0 0c-17.536-17.536-17.536-45.952 0-63.424L278.208 556.8z" /></svg>
|