@jax-data-science/sci-image-visualizer 0.8.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/README.md +201 -460
  2. package/esm2022/index.mjs +34 -15
  3. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
  4. package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
  5. package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
  7. package/esm2022/lib/contracts/color.mjs +60 -0
  8. package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
  9. package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
  10. package/esm2022/lib/contracts/display-types.mjs +11 -1
  11. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  12. package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
  13. package/esm2022/lib/contracts/intensity.mjs +48 -5
  14. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  15. package/esm2022/lib/contracts/plot-type.mjs +134 -17
  16. package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
  17. package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
  18. package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
  19. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
  20. package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
  21. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  22. package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
  23. package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
  24. package/esm2022/lib/contracts/sam.contract.mjs +1 -1
  25. package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
  26. package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
  27. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  28. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
  29. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  30. package/esm2022/lib/contracts/viz-config.mjs +2 -1
  31. package/esm2022/lib/geometry/contour.mjs +63 -0
  32. package/esm2022/lib/geometry/loft.mjs +128 -0
  33. package/esm2022/lib/geometry/polylabel.mjs +156 -0
  34. package/esm2022/lib/geometry/raster.mjs +98 -0
  35. package/esm2022/lib/geometry/reconstruct.mjs +315 -0
  36. package/esm2022/lib/geometry/reslice-image.mjs +57 -0
  37. package/esm2022/lib/geometry/ring.mjs +201 -0
  38. package/esm2022/lib/geometry/section.mjs +215 -0
  39. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
  40. package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
  41. package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
  42. package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
  43. package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
  44. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
  45. package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
  46. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
  47. package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
  48. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
  49. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
  50. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
  51. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
  52. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
  53. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
  54. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
  55. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
  56. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
  57. package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
  58. package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
  59. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
  60. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
  61. package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
  62. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
  63. package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
  64. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
  65. package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
  66. package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
  67. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
  68. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
  69. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
  70. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
  71. package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
  72. package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
  73. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
  74. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
  75. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
  76. package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
  77. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
  78. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
  79. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
  80. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
  81. package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
  82. package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
  83. package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
  84. package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
  85. package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
  86. package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
  87. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
  88. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
  89. package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
  90. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
  91. package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
  92. package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
  93. package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
  94. package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
  95. package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
  96. package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
  97. package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
  98. package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
  99. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
  100. package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
  101. package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
  102. package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
  103. package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
  104. package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
  105. package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
  106. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
  107. package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
  108. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
  109. package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
  110. package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
  111. package/esm2022/lib/implementations/region-centroids.mjs +47 -0
  112. package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
  113. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
  114. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
  115. package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
  116. package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
  117. package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
  118. package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
  119. package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
  120. package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
  121. package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
  122. package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
  123. package/esm2022/lib/models/bezier.mjs +1 -11
  124. package/esm2022/lib/models/class-preset.mjs +41 -3
  125. package/esm2022/lib/models/geometry.mjs +27 -164
  126. package/esm2022/lib/models/polygon-edit.mjs +254 -0
  127. package/esm2022/lib/models/polygon-factory.mjs +134 -0
  128. package/esm2022/lib/models/region-clone.mjs +68 -0
  129. package/esm2022/lib/models/region-geojson.mjs +411 -0
  130. package/esm2022/lib/models/region.mjs +34 -33
  131. package/esm2022/lib/models/shape.mjs +18 -16
  132. package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
  133. package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
  134. package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
  135. package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
  136. package/esm2022/lib/plot.utilities.mjs +296 -473
  137. package/esm2022/lib/processing/image-crop.mjs +1 -1
  138. package/esm2022/lib/processing/processing-image.mjs +28 -15
  139. package/esm2022/lib/provide-visualization.mjs +40 -14
  140. package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
  141. package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
  142. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
  143. package/esm2022/lib/region-editor/file-stem.mjs +13 -0
  144. package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
  145. package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
  146. package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
  147. package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
  148. package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
  149. package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
  150. package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
  151. package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
  152. package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
  153. package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
  154. package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
  155. package/esm2022/lib/region-ops.service.mjs +28 -70
  156. package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
  157. package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
  158. package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
  159. package/esm2022/lib/region-overlay/region-style.mjs +97 -0
  160. package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
  161. package/esm2022/lib/region-source/http-region-source.mjs +104 -0
  162. package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
  163. package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
  164. package/esm2022/lib/region-source/region-source.mjs +67 -0
  165. package/esm2022/lib/region-source/region-tiles.mjs +708 -0
  166. package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
  167. package/esm2022/lib/render-orchestrator.mjs +14 -11
  168. package/esm2022/lib/render-session.mjs +207 -0
  169. package/esm2022/lib/routing-visualizer.service.mjs +858 -414
  170. package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
  171. package/esm2022/lib/spatial/density-raster.mjs +14 -0
  172. package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
  173. package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
  174. package/esm2022/lib/spatial/gene-search.mjs +1 -1
  175. package/esm2022/lib/spatial/glyphs.mjs +97 -0
  176. package/esm2022/lib/spatial/lod.mjs +187 -0
  177. package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
  178. package/esm2022/lib/spatial/spatial-density.mjs +25 -16
  179. package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
  180. package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
  181. package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
  182. package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
  183. package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
  184. package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
  185. package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
  186. package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
  187. package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
  188. package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
  189. package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
  190. package/esm2022/lib/spatial/stats.mjs +71 -0
  191. package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
  192. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
  193. package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
  194. package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
  195. package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
  196. package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
  197. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
  198. package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
  199. package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
  200. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
  201. package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
  202. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
  203. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
  204. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
  205. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
  206. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
  207. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
  208. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
  209. package/esm2022/lib/store/class-color.util.mjs +53 -5
  210. package/esm2022/lib/store/class-signatures.mjs +63 -0
  211. package/esm2022/lib/store/region-history.mjs +146 -0
  212. package/esm2022/lib/store/region-scope-cache.mjs +144 -0
  213. package/esm2022/lib/store/region-selection.mjs +82 -0
  214. package/esm2022/lib/store/region-source-scope.mjs +171 -0
  215. package/esm2022/lib/store/region-store.service.mjs +986 -670
  216. package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
  217. package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
  218. package/esm2022/lib/toast-outlets.mjs +5 -4
  219. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
  220. package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
  221. package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
  222. package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
  223. package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
  224. package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
  225. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
  226. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
  227. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
  228. package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
  229. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
  230. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
  231. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
  232. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
  233. package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
  234. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
  235. package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
  236. package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
  237. package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
  238. package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
  239. package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
  240. package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
  241. package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
  242. package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
  243. package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
  244. package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
  245. package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
  246. package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
  247. package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
  248. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
  249. package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
  250. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
  251. package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
  252. package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
  253. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
  254. package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
  255. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
  256. package/esm2022/lib/util/mark-for-check.mjs +17 -0
  257. package/esm2022/lib/util/supersede.mjs +56 -0
  258. package/esm2022/lib/visualization.module.mjs +39 -141
  259. package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
  260. package/esm2022/lib/visualizer/region-actions.mjs +149 -0
  261. package/esm2022/lib/visualizer/region-load.mjs +123 -0
  262. package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
  263. package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
  264. package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
  265. package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
  266. package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
  267. package/esm2022/lib/visualizer.component.mjs +602 -1902
  268. package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
  269. package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
  270. package/esm2022/lib/workers/spatial-math.mjs +190 -0
  271. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
  272. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
  273. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
  274. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
  275. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
  276. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
  277. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
  278. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
  279. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
  280. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  281. package/fesm2022/mask.worker.js +36 -917
  282. package/fesm2022/onnx-sam.worker.js +52 -16
  283. package/fesm2022/region-source.worker.js +1067 -0
  284. package/fesm2022/spatial-math.worker.js +471 -0
  285. package/fesm2022/tsne.worker.js +32 -15
  286. package/index.d.ts +19 -10
  287. package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
  288. package/lib/contracts/capabilities.contract.d.ts +4 -2
  289. package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
  290. package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
  291. package/lib/contracts/color.d.ts +27 -0
  292. package/lib/contracts/colormap-lut.d.ts +19 -4
  293. package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
  294. package/lib/contracts/display-types.d.ts +21 -0
  295. package/lib/contracts/image.contract.d.ts +4 -0
  296. package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
  297. package/lib/contracts/intensity.d.ts +13 -2
  298. package/lib/contracts/plot-type.d.ts +3 -1
  299. package/lib/contracts/ports/image-state.port.d.ts +6 -2
  300. package/lib/contracts/ports/preferences.port.d.ts +4 -0
  301. package/lib/contracts/ports/region-io.port.d.ts +1 -0
  302. package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
  303. package/lib/contracts/ports/tile-access.port.d.ts +1 -0
  304. package/lib/contracts/region-editor-api.contract.d.ts +85 -1
  305. package/lib/contracts/region-overlay.contract.d.ts +5 -0
  306. package/lib/contracts/region-store.contract.d.ts +22 -0
  307. package/lib/contracts/sam.contract.d.ts +7 -0
  308. package/lib/contracts/section-view.contract.d.ts +44 -0
  309. package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
  310. package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
  311. package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
  312. package/lib/contracts/visualizer.contract.d.ts +231 -54
  313. package/lib/contracts/viz-config.d.ts +9 -0
  314. package/lib/geometry/contour.d.ts +24 -0
  315. package/lib/geometry/loft.d.ts +22 -0
  316. package/lib/geometry/polylabel.d.ts +23 -0
  317. package/lib/geometry/raster.d.ts +42 -0
  318. package/lib/geometry/reconstruct.d.ts +54 -0
  319. package/lib/geometry/reslice-image.d.ts +33 -0
  320. package/lib/geometry/ring.d.ts +67 -0
  321. package/lib/geometry/section.d.ts +52 -0
  322. package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
  323. package/lib/implementations/base-store-visualizer.d.ts +61 -15
  324. package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
  325. package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
  326. package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
  327. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
  328. package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
  329. package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
  330. package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
  331. package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
  332. package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
  333. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
  334. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
  335. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
  336. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
  337. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
  338. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
  339. package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
  340. package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
  341. package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
  342. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
  343. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
  344. package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
  345. package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
  346. package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
  347. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
  348. package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
  349. package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
  350. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
  351. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
  352. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
  353. package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
  354. package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
  355. package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
  356. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
  357. package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
  358. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
  359. package/lib/implementations/osd/display-pipeline.d.ts +38 -9
  360. package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
  361. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
  362. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
  363. package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
  364. package/lib/implementations/osd/osd-coords.d.ts +6 -4
  365. package/lib/implementations/osd/osd-export.d.ts +36 -0
  366. package/lib/implementations/osd/osd-lib.d.ts +7 -0
  367. package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
  368. package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
  369. package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
  370. package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
  371. package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
  372. package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
  373. package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
  374. package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
  375. package/lib/implementations/osd/osd-viewport.d.ts +77 -0
  376. package/lib/implementations/osd/osd-zoom.d.ts +6 -0
  377. package/lib/implementations/osd/simple-source.d.ts +161 -0
  378. package/lib/implementations/osd/slice-cache.d.ts +12 -3
  379. package/lib/implementations/osd/tile-client.d.ts +11 -14
  380. package/lib/implementations/osd/tile-recolor.d.ts +141 -0
  381. package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
  382. package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
  383. package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
  384. package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
  385. package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
  386. package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
  387. package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
  388. package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
  389. package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
  390. package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
  391. package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
  392. package/lib/implementations/plotly/plotly.service.d.ts +136 -401
  393. package/lib/implementations/region-centroids.d.ts +14 -0
  394. package/lib/implementations/simple-slice-access.service.d.ts +7 -4
  395. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
  396. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
  397. package/lib/implementations/tile-server/index.d.ts +5 -0
  398. package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
  399. package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
  400. package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
  401. package/lib/implementations/tile-server/transport.d.ts +62 -0
  402. package/lib/intensity/intensity-profile.d.ts +66 -0
  403. package/lib/intensity/intensity-profile.service.d.ts +108 -0
  404. package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
  405. package/lib/models/bezier.d.ts +0 -5
  406. package/lib/models/class-preset.d.ts +25 -0
  407. package/lib/models/geometry.d.ts +14 -48
  408. package/lib/models/polygon-edit.d.ts +72 -0
  409. package/lib/models/polygon-factory.d.ts +45 -0
  410. package/lib/models/region-clone.d.ts +20 -0
  411. package/lib/models/region-geojson.d.ts +57 -0
  412. package/lib/models/region.d.ts +59 -4
  413. package/lib/models/shape.d.ts +8 -0
  414. package/lib/plot-mode/contribution-host.d.ts +125 -0
  415. package/lib/plot-mode/plot-type-menu.d.ts +60 -0
  416. package/lib/plot-mode/tool-params-model.d.ts +49 -0
  417. package/lib/plot.utilities.d.ts +19 -30
  418. package/lib/processing/processing-image.d.ts +5 -2
  419. package/lib/provide-visualization.d.ts +19 -2
  420. package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
  421. package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
  422. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
  423. package/lib/region-editor/file-stem.d.ts +7 -0
  424. package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
  425. package/lib/region-editor/mask-export.service.d.ts +54 -0
  426. package/lib/region-editor/mask-raster.d.ts +2 -8
  427. package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
  428. package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
  429. package/lib/region-editor/region-editor.component.d.ts +283 -200
  430. package/lib/region-editor/region-metrics.d.ts +34 -0
  431. package/lib/region-editor/region-persistence.service.d.ts +77 -0
  432. package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
  433. package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
  434. package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
  435. package/lib/region-ops.service.d.ts +1 -7
  436. package/lib/region-overlay/region-geometry.d.ts +158 -0
  437. package/lib/region-overlay/region-hit-test.d.ts +38 -0
  438. package/lib/region-overlay/region-source-layer.d.ts +96 -0
  439. package/lib/region-overlay/region-style.d.ts +52 -0
  440. package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
  441. package/lib/region-source/http-region-source.d.ts +45 -0
  442. package/lib/region-source/region-source-ops.d.ts +89 -0
  443. package/lib/region-source/region-source-worker.d.ts +7 -0
  444. package/lib/region-source/region-source.d.ts +82 -0
  445. package/lib/region-source/region-tiles.d.ts +289 -0
  446. package/lib/region-source/worker-region-source.d.ts +65 -0
  447. package/lib/render-orchestrator.d.ts +6 -2
  448. package/lib/render-session.d.ts +75 -0
  449. package/lib/routing-visualizer.service.d.ts +248 -59
  450. package/lib/section-pane/section-pane.component.d.ts +47 -0
  451. package/lib/spatial/density-raster.d.ts +6 -0
  452. package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
  453. package/lib/spatial/embedding-compute.d.ts +21 -2
  454. package/lib/spatial/glyphs.d.ts +16 -0
  455. package/lib/spatial/lod.d.ts +94 -0
  456. package/lib/spatial/spatial-controls.facade.d.ts +64 -0
  457. package/lib/spatial/spatial-density.d.ts +15 -5
  458. package/lib/spatial/spatial-encoding.d.ts +11 -44
  459. package/lib/spatial/spatial-expression.d.ts +40 -22
  460. package/lib/spatial/spatial-framing.d.ts +1 -0
  461. package/lib/spatial/spatial-heatmap.d.ts +2 -0
  462. package/lib/spatial/spatial-hover.d.ts +4 -16
  463. package/lib/spatial/spatial-panel-model.d.ts +135 -0
  464. package/lib/spatial/spatial-selection.d.ts +21 -26
  465. package/lib/spatial/spatial-tile-merge.d.ts +41 -0
  466. package/lib/spatial/spatial-tiles.d.ts +9 -256
  467. package/lib/spatial/stats.d.ts +38 -0
  468. package/lib/spatial/transcript-grouping.d.ts +119 -0
  469. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
  470. package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
  471. package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
  472. package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
  473. package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
  474. package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
  475. package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
  476. package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
  477. package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
  478. package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
  479. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
  480. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
  481. package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
  482. package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
  483. package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
  484. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
  485. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
  486. package/lib/store/class-color.util.d.ts +39 -2
  487. package/lib/store/class-signatures.d.ts +11 -0
  488. package/lib/store/region-history.d.ts +66 -0
  489. package/lib/store/region-scope-cache.d.ts +65 -0
  490. package/lib/store/region-selection.d.ts +36 -0
  491. package/lib/store/region-source-scope.d.ts +68 -0
  492. package/lib/store/region-store.service.d.ts +312 -116
  493. package/lib/store/visualizer-store.service.d.ts +32 -33
  494. package/lib/toast-outlets.d.ts +4 -3
  495. package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
  496. package/lib/toolbar/canvas-tools.d.ts +20 -0
  497. package/lib/toolbar/crop/slide-crop.d.ts +10 -4
  498. package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
  499. package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
  500. package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
  501. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
  502. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
  503. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
  504. package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
  505. package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
  506. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
  507. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
  508. package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
  509. package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
  510. package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
  511. package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
  512. package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
  513. package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
  514. package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
  515. package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
  516. package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
  517. package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
  518. package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
  519. package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
  520. package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
  521. package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
  522. package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
  523. package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
  524. package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
  525. package/lib/toolbar/toolbar.component.d.ts +55 -84
  526. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
  527. package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
  528. package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
  529. package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
  530. package/lib/toolbar/wand/wand.service.d.ts +22 -116
  531. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
  532. package/lib/util/mark-for-check.d.ts +11 -0
  533. package/lib/util/supersede.d.ts +53 -0
  534. package/lib/visualization.module.d.ts +18 -39
  535. package/lib/visualizer/floating-drag.directive.d.ts +30 -0
  536. package/lib/visualizer/region-actions.d.ts +54 -0
  537. package/lib/visualizer/region-load.d.ts +46 -0
  538. package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
  539. package/lib/visualizer/tool-modes.d.ts +49 -0
  540. package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
  541. package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
  542. package/lib/visualizer/volume-sections.d.ts +64 -0
  543. package/lib/visualizer.component.d.ts +232 -447
  544. package/lib/workers/spatial-math-ops.d.ts +65 -0
  545. package/lib/workers/spatial-math-worker.d.ts +7 -0
  546. package/lib/workers/spatial-math.d.ts +74 -0
  547. package/package.json +12 -3
  548. package/src/lib/assets/slice.svg +23 -0
  549. package/src/lib/styles/_viz-icons-rules.scss +73 -0
  550. package/src/lib/styles/viz-icons.scss +14 -0
  551. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
  552. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
  553. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
  554. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
  555. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
  556. package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
  557. package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
  558. package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
  559. package/src/lib/assets/cell-detection.svg +0 -37
  560. package/src/lib/assets/click.svg +0 -1
  561. package/src/lib/assets/colormap-luts.json +0 -1
  562. package/src/lib/assets/edit-selection-white.svg +0 -47
  563. package/src/lib/assets/icons/colormap-earth.png +0 -0
  564. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  565. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  566. package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
  567. package/src/lib/assets/picture-segmentation.svg +0 -43
  568. package/src/lib/assets/test/download-379.svg +0 -1
  569. package/src/lib/assets/test/download-98.svg +0 -1
  570. package/src/lib/assets/test/json-1.svg +0 -1
  571. package/src/lib/assets/test/load-53.svg +0 -1
  572. package/src/lib/assets/test/mask-44.svg +0 -1
  573. package/src/lib/assets/test/mask-download-44.svg +0 -15
  574. package/src/lib/assets/test/mask-save-44.svg +0 -11
  575. package/src/lib/assets/test/overlay-1.svg +0 -1
  576. package/src/lib/assets/test/overlay-4.svg +0 -1
  577. package/src/lib/assets/test/region-26.svg +0 -1
  578. package/src/lib/assets/test/save-56.svg +0 -1
  579. package/src/lib/assets/test/upload-43.svg +0 -1
@@ -0,0 +1,65 @@
1
+ /**
2
+ * A {@link RegionSource} over a GeoJSON string, parsed and tiled in the region-source Web Worker.
3
+ *
4
+ * One worker serves every open source. Where no worker can start (jsdom, SSR, a blocked worker
5
+ * URL) the same tables run on the main thread; if the worker dies, each source re-opens itself
6
+ * there from its text (which the host holds anyway: it handed it over) and carries on — whether
7
+ * it had a call in flight then or not (see {@link RegionSourceWorkerClient.generation}).
8
+ */
9
+ import { RegionSource } from './region-source';
10
+ import { RegionSourceRequest, RegionSourceResults } from './region-source-ops';
11
+ import type { ReconstructOptions, SliceOutlines } from '../geometry/reconstruct';
12
+ import type { Mesh } from 'napari-js/geometry';
13
+ /** Makes the worker; may be async, as the default one is (it imports the factory on demand). */
14
+ export type RegionSourceWorkerFactory = () => Worker | Promise<Worker>;
15
+ /** Owns the region-source worker and the calls in flight on it. */
16
+ export declare class RegionSourceWorkerClient {
17
+ private readonly factory?;
18
+ private worker;
19
+ private starting;
20
+ private unavailable;
21
+ private nextId;
22
+ private readonly pending;
23
+ /** The main-thread tables, once anything runs here. */
24
+ private local;
25
+ private tables;
26
+ /**
27
+ * `factory` is optional: without one the real worker module is imported on demand —
28
+ * dynamically, because it holds an `import.meta.url` that ts-jest's CommonJS compile
29
+ * rejects.
30
+ */
31
+ constructor(factory?: RegionSourceWorkerFactory | undefined);
32
+ /** Whether calls now run on the main thread. */
33
+ get inThread(): boolean;
34
+ /**
35
+ * Which table set calls run on: bumped when the worker is lost. A handle opened under another
36
+ * names a table that is gone (or, here, another source's), so its source must open again.
37
+ */
38
+ get generation(): number;
39
+ /** Run `request` in the worker, or here when there is none. */
40
+ call<R extends RegionSourceRequest>(request: R): Promise<RegionSourceResults[R['op']]>;
41
+ /** {@link call}, with the {@link generation} the request ran on. */
42
+ run<R extends RegionSourceRequest>(request: R): Promise<{
43
+ result: RegionSourceResults[R['op']];
44
+ generation: number;
45
+ }>;
46
+ /** Terminate the worker; calls in flight reject. */
47
+ dispose(): void;
48
+ private ensureWorker;
49
+ private startWorker;
50
+ private onReply;
51
+ /** Stop the worker for good: every later call runs here, every call in flight is lost. */
52
+ private lose;
53
+ }
54
+ /** The worker client every GeoJSON source shares. */
55
+ export declare function sharedRegionSourceClient(): RegionSourceWorkerClient;
56
+ /**
57
+ * Open a GeoJSON FeatureCollection string as a tiled region source. Rejects on invalid JSON or
58
+ * a collection without `features`.
59
+ */
60
+ export declare function openGeoJsonRegionSource(text: string, client?: RegionSourceWorkerClient): Promise<RegionSource>;
61
+ /**
62
+ * The 3D reconstruction of a region from its outlines on a stack (see `geometry/reconstruct`),
63
+ * meshed in the region-source worker (on the main thread where there is none).
64
+ */
65
+ export declare function reconstructInWorker(slices: readonly SliceOutlines[], options?: ReconstructOptions, client?: RegionSourceWorkerClient): Promise<Mesh>;
@@ -16,7 +16,8 @@ import { IImageInfo } from './contracts/image.contract';
16
16
  export interface TwoPassRenderHost {
17
17
  /** Load + plot one phase (the component owns div/screen/plot-type/z and the
18
18
  * newer-click filename guard). `inPlace` updates the existing render so the
19
- * canvas doesn't blank during the small→large swap. */
19
+ * canvas doesn't blank during the small→large swap. Rejects when the phase
20
+ * could not be drawn (including a backend's `plot()` resolving false). */
20
21
  renderPhase(info: IImageInfo, inPlace: boolean): Promise<unknown>;
21
22
  /** The small tier is on screen — drop the full loading overlay so the user
22
23
  * sees the blurry preview, and show the sharpening spinner. */
@@ -26,10 +27,13 @@ export interface TwoPassRenderHost {
26
27
  /** Rendering finished. `viaSmall` = the overlay was already released by the
27
28
  * small tier (so only release the running guard + apply the ROI); otherwise
28
29
  * do the full finalize (overlay + running + ROI). */
29
- finished(viaSmall: boolean, logTag: string): void;
30
+ finished(viaSmall: boolean): void;
30
31
  /** Both large-tier attempts failed; the small tier stays on screen as the
31
32
  * fallback. Surface it to the user and release the running guard + ROI. */
32
33
  sharpenFailed(err: unknown): void;
34
+ /** Nothing could be drawn: the single pass failed, or both tiers did. Called
35
+ * after {@link finished} (which releases the overlay), to tell the user. */
36
+ renderFailed(err: unknown): void;
33
37
  }
34
38
  export declare class RenderOrchestrator {
35
39
  private host;
@@ -0,0 +1,75 @@
1
+ import { IImageInfo } from './contracts/image.contract';
2
+ import { PlotType } from './contracts/plot-type';
3
+ import { SpatialDataset } from './contracts/spatial-dataset.contract';
4
+ import { IVisualizer } from './contracts/visualizer.contract';
5
+ /** A user-facing message for a failure: an HttpErrorResponse's server message, an
6
+ * Error's message, or the status text, else the value itself. */
7
+ export declare function errorMessage(err: unknown): string;
8
+ /** The viewer a render session draws into, and what it tells the viewer. */
9
+ export interface RenderSessionHost {
10
+ readonly plotDivName: string;
11
+ readonly visualizer: IVisualizer;
12
+ /** The slice to load, read when each phase starts. */
13
+ zIndex(): number;
14
+ plotType(): PlotType;
15
+ /** A 2D view: only it renders the small tier first (the in-place sharpen pass does
16
+ * not rebuild a 3D scene, so it blanked one). */
17
+ isHeatmap(): boolean;
18
+ /** A server-side cache fill is in progress (keeps the full overlay up). */
19
+ isCaching(): boolean;
20
+ /** The view is about to be torn down: end what was bound to it (contributed sessions). */
21
+ beforeReset(): void;
22
+ /** Lay the new image out (stack flag, slice bounds, initial slice) once the old view is gone. */
23
+ prepare(info: IImageInfo): void;
24
+ /** Drop the loading overlay the render owns (once per render). */
25
+ releaseOverlay(info: IImageInfo): void;
26
+ /** The render landed, sharp or as a fallback: apply ROIs, start sessions. */
27
+ landed(info: IImageInfo): void;
28
+ setImageLoading(loading: boolean): void;
29
+ alert(severity: 'warn' | 'error', summary: string, detail: string): void;
30
+ detectChanges(): void;
31
+ }
32
+ /**
33
+ * The viewer's render pipeline: one image (or image-less dataset) at a time, the newest
34
+ * always winning.
35
+ *
36
+ * Every render takes a task from a {@link Supersede}: a newer render, a Cancel or
37
+ * teardown makes the older one stale — its callbacks return early instead of painting,
38
+ * releasing the newer render's overlay or applying its ROIs — and aborts the signal its
39
+ * loads were given, so superseded network work stops at the source. Sequencing of the
40
+ * small→large tiers lives in {@link RenderOrchestrator}; this owns the UI flags it
41
+ * drives ({@link running}, {@link sharpening}).
42
+ */
43
+ export declare class ImageRenderSession {
44
+ private readonly host;
45
+ /** A render is in flight. */
46
+ running: boolean;
47
+ /** The small tier is on screen and the large one is still loading. */
48
+ sharpening: boolean;
49
+ /** Set once the plot div exists; an image-less draw before then waits for it. */
50
+ private viewReady;
51
+ private pendingDraw;
52
+ private readonly supersede;
53
+ constructor(host: RenderSessionHost);
54
+ /**
55
+ * Render `info` (which has urls), preempting whatever is in flight. A newer image
56
+ * ALWAYS preempts: dropping it while the old one finished reported image B as loaded
57
+ * while image A stayed on screen, and a cold image held the slot for its whole
58
+ * server-side cache fill.
59
+ */
60
+ render(info: IImageInfo): void;
61
+ /**
62
+ * Draw a spatial mode with no image behind it: the observations alone, framed on their
63
+ * own extent. The image info is a placeholder naming the dataset, so regions drawn here
64
+ * are kept per dataset like any image's. Supersedes (and is superseded by) image renders.
65
+ */
66
+ plotWithoutImage(dataset: SpatialDataset): Promise<void>;
67
+ /**
68
+ * The plot div exists now: run an image-less draw that arrived before it did — only if
69
+ * its dataset is still the one on offer (by id: the port may re-emit the same dataset
70
+ * as a new object, and the current object is the one to draw) and no image has arrived.
71
+ */
72
+ viewIsReady(current: SpatialDataset | null, hasImage: boolean): void;
73
+ /** Cancel the render in flight: abort its loads and make its callbacks inert. */
74
+ cancel(): void;
75
+ }
@@ -1,14 +1,20 @@
1
+ import { OnDestroy } from '@angular/core';
1
2
  import { Observable } from 'rxjs';
2
3
  import { Image } from 'image-js';
3
4
  import { IImageInfo, IImageMetadata } from './contracts/image.contract';
4
- import { Region } from './models/region';
5
+ import { Polygon, Region } from './models/region';
5
6
  import { ClassPreset, PresetSet } from './models/class-preset';
6
7
  import { PlotlyService } from './implementations/plotly/plotly.service';
7
8
  import { OpenSeadragonVisualizerService } from './implementations/osd/openseadragon-visualizer.service';
8
9
  import { PlotType, PlotTypeDescriptor } from './contracts/plot-type';
9
- import { IVisualizer, PixelData, IntensityProfile, IIsosurfaceControls, IIntensityControls, ISurface3dControls, ISpatialControls } from './contracts/visualizer.contract';
10
+ import { IVisualizer, LoadedImage, PixelData, IntensityProfile, IIsosurfaceControls, IIntensityControls, ISurface3dControls, ISpatialControls, IIntensitySampling, IOsdViewOptions, IVolumeResolution } from './contracts/visualizer.contract';
10
11
  import { SpatialDataPort } from './contracts/ports/spatial-data.port';
12
+ import { CanvasToolOptions, ColormapNode, IBrushOptions, IWandOptions } from './contracts/display-types';
11
13
  import { RegionStore } from './store/region-store.service';
14
+ import { RegionSource, RegionSourceView } from './region-source/region-source';
15
+ import type { RegionIndexPage, RegionIndexQuery } from './region-source/region-tiles';
16
+ import type { RegionStyle } from './region-overlay/region-style';
17
+ import type { RegionSourceOpener, RegionSourceSlices } from './store/region-source-scope';
12
18
  import { SpatialSelectionStore } from './store/spatial-selection.service';
13
19
  import { ViewerCapabilities } from './contracts/capabilities.contract';
14
20
  import { IRegionOverlay } from './contracts/region-overlay.contract';
@@ -18,8 +24,33 @@ import { VisualizerStore } from './store/visualizer-store.service';
18
24
  import { NapariVisualizerService } from './implementations/napari-js/napari-visualizer.service';
19
25
  import { VizConfig } from './contracts/viz-config';
20
26
  import { PlotModeViewport } from './contracts/plot-type-contribution.contract';
27
+ import { IntensityProfileService } from './intensity/intensity-profile.service';
28
+ import type { SectionAxis, SectionViews } from './contracts/section-view.contract';
21
29
  import * as i0 from "@angular/core";
22
- export declare class RoutingVisualizerService implements IVisualizer, IRegionEditorApi, IChannelHistogramApi {
30
+ /** How long after the last edit the surfaces of the classes it touched are rebuilt (ms). */
31
+ export declare const REGION_SURFACE_REBUILD_MS = 600;
32
+ /**
33
+ * The visualizer chain's front door: implements `IVisualizer`, `IRegionEditorApi`
34
+ * and `IChannelHistogramApi` (bound to the `VISUALIZER` / `REGION_EDITOR_API` /
35
+ * `CHANNEL_HISTOGRAM_API` tokens) over three rendering backends, chosen per plot type:
36
+ * - **Image** renders through OpenSeadragon (natively tiled, region tools,
37
+ * client-side colormap), or through napari-js when `VizConfig.useNapariRenderer`
38
+ * opts in; the napari image types and the 2D spatial-omics mode render through
39
+ * napari-js. A failed load falls back napari-js → OSD → Plotly for that image only
40
+ * (see `napariFellBack` / `osdFellBack`, cleared by `reset()`).
41
+ * - the napari 3D types (volume, isosurface, surface, 3D scatter, the 3D spatial
42
+ * cloud) render through napari-js, falling back to Plotly.
43
+ * - every other plot type (heatmap, contour, surface, scatter, line, …) renders
44
+ * through Plotly.
45
+ *
46
+ * Only rendering and the viewport are routed to the backend on screen. Region state
47
+ * lives in the shared `RegionStore` and display state (colormap, channels, presets,
48
+ * spatial view) in the shared `VisualizerStore`, so every backend sees the same
49
+ * values; the backends subscribe to them to redraw.
50
+ *
51
+ * Package-internal: hosts depend on the tokens, not on this class.
52
+ */
53
+ export declare class RoutingVisualizerService implements IVisualizer, IRegionEditorApi, IChannelHistogramApi, OnDestroy {
23
54
  private plotly;
24
55
  private osd;
25
56
  private napari;
@@ -27,6 +58,7 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
27
58
  private config;
28
59
  private regionStore;
29
60
  private selectionStore;
61
+ private intensity;
30
62
  private spatialData;
31
63
  private currentPlotType;
32
64
  private lastRendered;
@@ -39,7 +71,59 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
39
71
  /** napari-js failed for the current render cycle → fall back to OSD (then Plotly).
40
72
  * Reset by reset() at the start of every cycle, like {@link osdFellBack}. */
41
73
  private napariFellBack;
42
- constructor(plotly: PlotlyService, osd: OpenSeadragonVisualizerService, napari: NapariVisualizerService, store: VisualizerStore, config: VizConfig, regionStore: RegionStore, selectionStore: SpatialSelectionStore, spatialData?: SpatialDataPort | null);
74
+ /** The file name of the image last plotted (names a GeoJSON export). */
75
+ private plottedFileName;
76
+ /** The div the backends render into (every backend shares it); '' before the first plot. */
77
+ private plotDiv;
78
+ /** Whether a napari volume view is the current plot type. */
79
+ private readonly volumeView$;
80
+ /** Whether the volume view's slice pane is wanted (see {@link setSliceEditor}). */
81
+ private readonly sliceEditor$;
82
+ /** Whether the volume view draws the region reconstructions through the volume. */
83
+ private readonly regionsThroughVolume$;
84
+ /** Region reconstructions built so far, by image, resolution and classes (with those classes). */
85
+ private readonly meshCache;
86
+ /** Bumped per {@link showRegionClasses3d} (and per new image), so only the latest one shows. */
87
+ private meshRequest;
88
+ /** The class groups shown in 3D, and the image they belong to. */
89
+ private readonly classes3d$;
90
+ private classes3dImage;
91
+ /** The groups last asked for in 3D, with their colours: what an edit's rebuild shows again. */
92
+ private shown3d;
93
+ /**
94
+ * Each class's fingerprint on the live slice (see classSignatures), which image and slice, and
95
+ * what the region sources hold (see RegionStore.getSourceStateKey). Null while nothing follows
96
+ * the edits (no surface built, no sections).
97
+ */
98
+ private liveClasses;
99
+ /** The pending rebuild of the surfaces an edit touched. */
100
+ private rebuildTimer;
101
+ private readonly regionUpdates;
102
+ /** The div the slice pane renders into while it is wanted (null: no split). */
103
+ private sliceDiv;
104
+ /** Whether OSD is mounted in the slice pane: region, tool and overlay calls go to it. */
105
+ private sliceMounted;
106
+ /** The image the slice pane shows. */
107
+ private sliceFile;
108
+ /** Bumped per slice-pane mount or teardown, so only the latest one lands. */
109
+ private sliceRequest;
110
+ /** The sections beside the split volume view (the planes x and y through the stack). */
111
+ private readonly sections;
112
+ /** The z plane dragged in the volume: the slice to show (see {@link getSliceDrag$}). */
113
+ private readonly sliceDrag$;
114
+ private readonly sectionSubs;
115
+ /** The image info and screen height of the last plot (what the slice pane mounts). */
116
+ private plottedInfo;
117
+ private plottedHeight;
118
+ constructor(plotly: PlotlyService, osd: OpenSeadragonVisualizerService, napari: NapariVisualizerService, store: VisualizerStore, config: VizConfig, regionStore: RegionStore, selectionStore: SpatialSelectionStore, intensity: IntensityProfileService, spatialData?: SpatialDataPort | null);
119
+ /** A class's colour: its classification colour, else its region source's, else a default. */
120
+ private classColor;
121
+ /** The sections beside the split volume view (nulls while it is not split). */
122
+ getSectionViews$(): Observable<SectionViews>;
123
+ /** Move a section's plane to `at` (image px). */
124
+ setSectionPlane(axis: SectionAxis, at: number): void;
125
+ /** The slice picked by dragging the z plane in the volume: the host shows it (its slider). */
126
+ getSliceDrag$(): Observable<number>;
43
127
  private isImageType;
44
128
  /** The 2D napari types (image, region-centroid scatter, spatial omics) — a 2D fallback chain
45
129
  * (OSD, then Plotly).
@@ -63,20 +147,50 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
63
147
  private imageBackend;
64
148
  /** Backend currently on screen — what ongoing zoom/tool/region ops act on. */
65
149
  private renderer;
150
+ /**
151
+ * Backend region, tool and overlay calls act on: the slice pane's OSD while the volume view is
152
+ * split (regions are edited there), else the backend on screen. View calls (zoom, fit, colour,
153
+ * export) stay with {@link renderer}.
154
+ */
155
+ private regionBackend;
66
156
  get capabilities(): ViewerCapabilities;
67
- load(imageInfo: IImageInfo, zIndex: number): Promise<any>;
157
+ load(imageInfo: IImageInfo, zIndex: number, signal?: AbortSignal): Promise<LoadedImage>;
68
158
  /** Try OSD; on failure fall back to Plotly for this image (not permanent — see reset()). */
69
159
  private loadViaOsdThenPlotly;
70
- plot(plotDiv: string, imageLoaded: any, imageInfo: IImageInfo, screenHeight: number, plotType: PlotType, inPlace?: boolean): Promise<boolean>;
160
+ plot(plotDiv: string, imageLoaded: unknown, imageInfo: IImageInfo, screenHeight: number, plotType: PlotType, inPlace?: boolean): Promise<boolean>;
161
+ /**
162
+ * Split the volume view: show the slice being edited in `div` (OpenSeadragon, with every region
163
+ * tool) beside the 3D view, or stop (null). Kept across re-plots of a volume view; another plot
164
+ * type takes the pane down and a volume view brings it back. Resolves whether the pane shows.
165
+ */
166
+ setSliceEditor(div: string | null): Promise<boolean>;
167
+ /** Mount (or refresh in place) OSD in the slice pane on the displayed slice. */
168
+ private mountSlice;
169
+ /** Take the slice pane's viewer down (the split stays wanted while {@link sliceDiv} is set). */
170
+ private unmountSlice;
71
171
  reloadAndPlot(): void;
72
172
  reset(): void;
73
173
  relayout(trueImageSize?: number[]): void;
74
174
  resetAxes(): void;
175
+ fitToView(): void;
176
+ /** @deprecated Use {@link fitToView}. */
75
177
  autoscale(): void;
76
178
  zoomIn(): void;
77
179
  zoomOut(): void;
78
180
  setDragMode(mode: string | false): void;
181
+ /** Every backend, on screen or not. */
182
+ private backends;
183
+ /**
184
+ * The navigator / smoothing options, applied to EVERY backend that has them (not
185
+ * just the active renderer): consumers set them before the first render, when
186
+ * `renderer()` is still the Plotly default, and OSD/napari-js must receive them
187
+ * to honour them at viewer creation.
188
+ */
189
+ getOsdViewOptions(): IOsdViewOptions;
190
+ private readonly viewOptions;
191
+ /** @deprecated Use `getOsdViewOptions().setNavigatorVisible()`. */
79
192
  setNavigatorVisible(visible: boolean): void;
193
+ /** @deprecated Use `getOsdViewOptions().setImageSmoothingEnabled()`. */
80
194
  setImageSmoothingEnabled(enabled: boolean): void;
81
195
  setShowStack(showstack: boolean): void;
82
196
  setZIndex(zIndex: number): void;
@@ -95,9 +209,15 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
95
209
  downloadImage(): void;
96
210
  exportComposite(): void;
97
211
  setPlotType(plotType: PlotType): void;
212
+ /** @deprecated Use `getSurface3dControls()`. */
98
213
  setSurfaceDragMode(mode: string): void;
214
+ /** @deprecated Use `getSurface3dControls()`. */
99
215
  resetSurfaceCamera(): void;
216
+ /** The 3D decimate factor of the backend on screen (napari-js), else null. */
217
+ getVolumeResolution(): IVolumeResolution | null;
218
+ /** @deprecated Use `getVolumeResolution()?.set()`. */
100
219
  setResolutionScale(scale: number): void;
220
+ /** @deprecated Use `getVolumeResolution()?.get()`. */
101
221
  getResolutionScale(): number;
102
222
  /** The viewport of the backend on screen, for a contributed plot mode. Null
103
223
  * when that backend cannot provide one (e.g. OSD fell back to Plotly). */
@@ -107,13 +227,14 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
107
227
  cancelLoading(): void;
108
228
  isStackLoading(): Observable<boolean>;
109
229
  getStackLoadingProgress(): Observable<number>;
110
- getAutoscaleEvent(): Observable<any>;
230
+ getAutoscaleEvent(): Observable<void>;
231
+ /** The line-ROI profiles: sampled by the backend-neutral IntensityProfileService. */
111
232
  getIntensityProfile$(): Observable<IntensityProfile[]>;
112
233
  renderIntensityInset(divId: string, profiles: IntensityProfile[]): void;
113
234
  setRegions(regions: Region[], showRegionLabel?: boolean, isRegionSaveOn?: boolean, fillColor?: string, append?: boolean): void;
114
235
  getRegions(): Region[];
115
- getRegionPolygons(): any[];
116
- getRegionUpdateEvent(): Observable<any[]>;
236
+ getRegionPolygons(): Polygon[];
237
+ getRegionUpdateEvent(): Observable<Region[]>;
117
238
  setSelectedShapeIndices(indices: number[]): void;
118
239
  selectRegion(region: Region): void;
119
240
  getSelectedShapeIndices$(): Observable<number[]>;
@@ -129,9 +250,6 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
129
250
  upsertClass(preset: ClassPreset): void;
130
251
  removeClass(name: string): void;
131
252
  resetPresets(): void;
132
- plotPreviousShapes(): void;
133
- setPreviousShapes(shapes: any[]): void;
134
- getPreviousShapes(): any[];
135
253
  undo(): void;
136
254
  redo(): void;
137
255
  canUndo(): boolean;
@@ -140,11 +258,77 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
140
258
  getCanRedo$(): Observable<boolean>;
141
259
  resetUndoHistory(): void;
142
260
  importRegions(geoJsonStr: string): Region[];
261
+ /** Download `regions` as GeoJSON, named after the image last plotted. */
143
262
  exportRegions(regions: Region[]): void;
144
263
  getGeoJsonString(regions: Region[]): string;
264
+ /** Hold a large region set as a tiled region source (see RegionStore.attachRegionSource). */
265
+ attachRegionSource(source: RegionSource | RegionSourceOpener, slices?: RegionSourceSlices): void;
266
+ importRegionSource(geoJsonStr: string): Promise<boolean>;
267
+ dropRegionSource(): Promise<void>;
268
+ getRegionSourceView$(): Observable<RegionSourceView | null>;
269
+ getRegionSourceIndex(query: Omit<RegionIndexQuery, 'exclude'>): Promise<RegionIndexPage>;
270
+ selectSourceFeatures(ids: readonly string[], additive?: boolean): Promise<number[]>;
271
+ deleteSourceFeatures(ids: readonly string[]): void;
272
+ getRegionStyle$(): Observable<RegionStyle>;
273
+ setRegionStyle(patch: Partial<RegionStyle>): void;
274
+ /** Whether a napari volume (or isosurface) view is on screen: regions can be shown in 3D. */
275
+ getVolumeView$(): Observable<boolean>;
276
+ /** Whether the volume view's slice pane is wanted (it shows while a volume view is on screen). */
277
+ getSliceEditor$(): Observable<boolean>;
278
+ /** Whether the volume view draws the region reconstructions through the volume. */
279
+ getRegionsThroughVolume$(): Observable<boolean>;
280
+ /**
281
+ * Draw the region reconstructions through the volume (it hides none of them: surfaces inside its
282
+ * bright structures, an OCT's layer boundaries) or hidden behind what it shows (the default).
283
+ */
284
+ setRegionsThroughVolume(through: boolean): void;
285
+ /** The class groups shown in 3D on this image ([] after a switch to another image). */
286
+ getRegionClasses3d$(): Observable<ReadonlyArray<{
287
+ key: string;
288
+ classes: readonly string[];
289
+ }>>;
290
+ /** Hide every region surface and forget them (a build still running is dropped). */
291
+ private clearRegionClasses3d;
292
+ /** Highlight the surfaces of these group keys in the volume view (none: all as usual). */
293
+ highlightRegionClasses3d(keys: readonly string[]): void;
294
+ /** A surface clicked in the volume view with the selection tool (its group key), or none (null). */
295
+ getRegionPicked3d$(): Observable<{
296
+ key: string | null;
297
+ additive: boolean;
298
+ }>;
299
+ /**
300
+ * Show these groups of classes in the volume view as 3D reconstructions (each group one surface
301
+ * in its colour: an atlas structure with its substructures), and only these; [] hides them.
302
+ * Reconstructed from every slice's outlines at the volume's resolution, cached per image.
303
+ */
304
+ showRegionClasses3d(groups: ReadonlyArray<{
305
+ key: string;
306
+ classes: readonly string[];
307
+ color: string;
308
+ label?: string;
309
+ }>): Promise<void>;
310
+ /**
311
+ * The regions changed: when the live slice's regions of some classes did (an edit, an undo, not
312
+ * a slice or image switch), their reconstructions are stale. They are dropped, and those shown
313
+ * in 3D are rebuilt once the edits pause.
314
+ */
315
+ private onRegionsChanged;
316
+ /** Fingerprint the live slice's classes, unless already: what the next edit is compared with. */
317
+ private trackLiveClasses;
318
+ /** Which slice of which image the live regions are. */
319
+ private liveSliceKey;
320
+ /** Each class's volume over the whole stack, in px² × slices (see RegionStore.classVolumes). */
321
+ getClassVolumes(classes: readonly string[]): Promise<Record<string, number>>;
322
+ getRegionSourceClassCounts(stack?: boolean): Promise<Record<string, number>>;
323
+ getHiddenClasses$(): Observable<ReadonlySet<string>>;
324
+ setClassesHidden(classes: readonly string[], hidden: boolean): void;
325
+ selectRegionClasses(classes: readonly string[], additive?: boolean): Promise<void>;
326
+ getGeoJsonStringWithSource(regions: Region[], slice?: number): Promise<string>;
145
327
  enterStackMode(slices: Map<number, Region[]>, initialZ?: number, saveLayout?: 'combined' | 'per-slice-file'): void;
146
328
  exitStackMode(): void;
147
329
  isStackMode(): boolean;
330
+ /** The slice the regions are shown for (recorded outside stack mode too). */
331
+ getDisplaySlice(): number;
148
332
  getStackSaveLayout(): 'combined' | 'per-slice-file';
149
333
  setDisplaySlice(z: number): void;
150
334
  getSliceRegions(): Region[];
@@ -170,26 +354,32 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
170
354
  setAnnotationRegions(regions: Region[], showRegionLabel?: boolean, isRegionSaveOn?: boolean, fillColor?: string): void;
171
355
  getSelectedRegions$(): Observable<Region[]>;
172
356
  setSelectedRegions(regions: Region[]): void;
173
- setWandMode(active: boolean, options?: any): void;
174
- setWandOptions(options: any): void;
357
+ setActiveTool(id: string | null, options?: CanvasToolOptions): void;
358
+ /** @deprecated Use {@link setActiveTool}. */
359
+ setWandMode(active: boolean, options?: IWandOptions): void;
360
+ setWandOptions(options: IWandOptions): void;
175
361
  clearActiveWandRegion(): void;
176
- setBrushMode(active: boolean, options?: any): void;
177
- setBrushOptions(options: any): void;
362
+ /** @deprecated Use {@link setActiveTool}. */
363
+ setBrushMode(active: boolean, options?: IBrushOptions): void;
364
+ setBrushOptions(options: IBrushOptions): void;
365
+ /** @deprecated Use {@link setActiveTool}. */
178
366
  setVertexEraserMode(active: boolean): void;
179
367
  setVertexEraserRadius(radius: number): void;
368
+ /** @deprecated Use {@link setActiveTool}. */
180
369
  setZoomToBoxMode(active: boolean): void;
181
370
  segmentRectangles(): Promise<number>;
182
371
  segmentRectanglesCellpose(): Promise<number>;
183
372
  setSamModel(id: string): void;
373
+ /** @deprecated Use {@link setActiveTool}. */
184
374
  setSamPointMode(active: boolean): void;
185
375
  commitSamPoints(): void;
186
376
  clearSamPoints(): void;
187
- getColormap(): Observable<any>;
188
- setColormap(colormap: any): void;
189
- getColormapOptions(): any;
377
+ getColormap(): Observable<ColormapNode | null>;
378
+ setColormap(colormap: ColormapNode): void;
379
+ getColormapOptions(): ColormapNode[];
190
380
  getReverseScale(): Observable<boolean>;
191
- setReverseScale(reverscale: any): void;
192
- setImageMeta(imageMeta: IImageMetadata[]): void;
381
+ setReverseScale(reverse: boolean): void;
382
+ setImageMeta(imageMeta: IImageMetadata[], imageKey?: string): void;
193
383
  getImageMeta(): Observable<IImageMetadata[]>;
194
384
  getHistogram(channelIndex: number, bins: number): IHistogram | null;
195
385
  getHistogram$(channelIndex: number, bins: number): Observable<IHistogram | null>;
@@ -207,65 +397,64 @@ export declare class RoutingVisualizerService implements IVisualizer, IRegionEdi
207
397
  getInvert$(): Observable<boolean>;
208
398
  setInvert(on: boolean): void;
209
399
  /**
210
- * The active backend's region overlay. Falls back to Plotly's when the active backend
400
+ * The active backend's region overlay (the slice pane's while the volume view is split). Falls
401
+ * back to Plotly's when the active backend
211
402
  * (OSD or napari-js) is selected but a plot isn't mounted yet, so callers always get a
212
403
  * usable overlay.
213
404
  */
214
405
  getRegionOverlay(): IRegionOverlay;
215
- /**
216
- * Isosurface controls when available — always Plotly's, since the isosurface
217
- * plot type renders on Plotly (OSD only handles the image type).
218
- */
406
+ /** Isosurface controls of the backend on screen, when it renders isosurfaces. */
219
407
  getIsosurfaceControls(): IIsosurfaceControls | null;
220
- /** 3D scene controls — always Plotly's, since the 3D plot types render on
221
- * Plotly (OSD only handles the image type). */
408
+ /** 3D scene controls of the backend on screen (Plotly or napari-js), or null on a
409
+ * 2D-only one. */
222
410
  getSurface3dControls(): ISurface3dControls | null;
223
- /** Intensity (line-ROI) controls — always Plotly's, since the line profiles
224
- * render their inset on Plotly regardless of which backend draws the image. */
411
+ /** Intensity (line-ROI) controls, whichever backend draws the image: the
412
+ * IntensityProfileService adds the line to the store, and every backend
413
+ * (Plotly included) draws it from the store's update event. */
225
414
  getIntensityControls(): IIntensityControls | null;
226
415
  /**
227
- * Spatial-omics controls, or null when no `SPATIAL_DATA_PORT` is bound.
228
- *
229
- * Implemented HERE rather than on a backend because the state is
230
- * backend-neutral: the view state lives in the shared `VisualizerStore` (like
231
- * the colormap), so the controls keep working across a plot-type switch and a
232
- * host can drive them before any backend has mounted.
416
+ * Spatial-omics controls, or null when no `SPATIAL_DATA_PORT` is bound. Served by a
417
+ * backend-neutral {@link SpatialControlsFacade} (state in the shared stores), so the
418
+ * controls work across a plot-type switch and before any backend has mounted.
233
419
  */
234
420
  getSpatialControls(): ISpatialControls | null;
235
- /**
236
- * Whether `dataset` can answer this colour source.
237
- *
238
- * A column is checkable against the declared list. A gene is checkable only when
239
- * the dataset inlines its feature names — a dataset too wide to inline them
240
- * (typeahead-only) keeps the source, and a name that turns out not to exist
241
- * surfaces as the chart's "could not be charted" rather than as a silent reset.
242
- */
243
- private canColorBy;
244
- /** Memoised so consumers can hold the object across calls. */
245
- private spatialControls;
246
- /** Latest dataset, mirrored so `selectFromRegions()` can answer synchronously
247
- * — it runs from a button click and must not await a round-trip. */
248
- private currentSpatialDataset;
421
+ /** Created on first use; owns the dataset subscription. */
422
+ private spatialFacade;
249
423
  /** Displayed slice. Only a volume-backed spatial dataset reads it, to keep a
250
424
  * region drawn over one section from selecting the whole depth behind it. */
251
425
  private currentZIndex;
252
- private spatialDatasetSub;
253
- /** Load pixel frames for intensity sampling when OpenSeadragon owns the image
254
- * (it doesn't feed Plotly's frame cache). No-op needed when Plotly renders. */
426
+ /** Angular calls this when the injector providing the router is destroyed — the host
427
+ * component for a `provideVisualization()` chain. The dataset subscription would
428
+ * otherwise keep the whole isolated chain reachable from the root data port. */
429
+ ngOnDestroy(): void;
430
+ /**
431
+ * Intensity-profile sampling, whichever backend is on screen: the sampling is the
432
+ * backend-neutral IntensityProfileService's; the viewport changes come from every
433
+ * backend that reports them (OpenSeadragon, napari-js), merged into one stable
434
+ * stream the inset subscribes to once.
435
+ */
436
+ getIntensitySampling(): IIntensitySampling;
437
+ private readonly intensitySampling;
438
+ /** @deprecated Use `getIntensitySampling().ensureIntensitySampling()`. */
255
439
  ensureIntensitySampling(imageInfo: IImageInfo, zIndex: number): Promise<void>;
256
- /** Visible-region changes from the OpenSeadragon viewer (image-pixel coords),
257
- * so the intensity inset can re-sample at the current zoom level. Plotly's own
258
- * high-def zoom updates the sampling cache inline, so only OSD feeds this. */
440
+ /** Crops for sampling are sized from the plot div (whichever backend renders into it). */
441
+ private pointSamplingAtPlot;
442
+ /** @deprecated Use `getIntensitySampling().getViewportChange$()`. */
259
443
  getViewportChange$(): Observable<{
260
444
  x: number;
261
445
  y: number;
262
446
  width: number;
263
447
  height: number;
264
448
  }>;
265
- /** Re-sample the intensity profiles from a fresh crop of the given image-pixel
266
- * ROI at display resolution (sampling always lives in Plotly). */
449
+ /** @deprecated Use `getIntensitySampling().refreshIntensitySamplingForRoi()`. */
267
450
  refreshIntensitySamplingForRoi(x: number, y: number, width: number, height: number, zIndex: number): void;
451
+ /** The visualizer view is going away: detach every backend — dropping their view-bound
452
+ * subscriptions and disposing the napari-js viewer, whose canvas, render loop and GPU
453
+ * buffers would otherwise outlive the view (for a component-scoped chain, forever).
454
+ * Nothing is on screen afterwards, so the next plot starts from the default backend. */
455
+ detach(): void;
456
+ /** @deprecated Use {@link detach}. */
268
457
  unsubscribe(): void;
269
- static ɵfac: i0.ɵɵFactoryDeclaration<RoutingVisualizerService, [null, null, null, null, null, null, null, { optional: true; }]>;
458
+ static ɵfac: i0.ɵɵFactoryDeclaration<RoutingVisualizerService, [null, null, null, null, null, null, null, null, { optional: true; }]>;
270
459
  static ɵprov: i0.ɵɵInjectableDeclaration<RoutingVisualizerService>;
271
460
  }