@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
@@ -1,4 +1,3 @@
1
- import { HttpClient } from '@angular/common/http';
2
1
  import { Observable } from 'rxjs';
3
2
  import { ClassPreset, PresetSet } from '../models/class-preset';
4
3
  import { PreferencesPort } from '../contracts/ports/preferences.port';
@@ -9,25 +8,20 @@ import * as i0 from "@angular/core";
9
8
  /**
10
9
  * Backend-neutral store for the **visualization session** — the state that
11
10
  * describes *how* the current image is being viewed, independent of which
12
- * rendering backend (Plotly or OpenSeadragon) is on screen:
11
+ * rendering backend (Plotly, OpenSeadragon or napari-js) is on screen:
13
12
  *
14
13
  * - the active colormap / LUT and its reverse-scale toggle,
15
- * - the current image's physical metadata (µm/pixel etc.),
16
- * - the classification label → colour map,
14
+ * - the current image's physical metadata (µm/pixel etc.) and its per-channel
15
+ * display state (window, gamma, tint, visibility; grayscale / invert),
16
+ * - the annotation-class presets (the classification label → colour map),
17
+ * - the spatial-omics view state,
17
18
  * - which on-canvas tool is currently active.
18
19
  *
19
- * Both backends read and write this single instance, so they stay in lock-step
20
- * regardless of which one is rendering. Previously this state lived inside
21
- * `PlotlyService`, which forced the OpenSeadragon backend to depend on the
22
- * Plotly service purely to read the shared colormap; this store removes that
23
- * coupling — neither backend owns the session state.
24
- *
25
- * NOTE: region *geometry* (the drawn shapes / per-image region cache) still
26
- * lives in `PlotlyService` for now; extracting it into a sibling region store
27
- * is a separate follow-up.
20
+ * Every backend reads and writes this single instance (one per visualizer chain),
21
+ * so they stay in lock-step regardless of which one is rendering; none of them
22
+ * owns the session state. Region geometry lives in the sibling `RegionStore`.
28
23
  */
29
24
  export declare class VisualizerStore {
30
- private readonly http;
31
25
  private readonly prefsPort;
32
26
  private readonly colormap$;
33
27
  private readonly reverseScale$;
@@ -37,9 +31,13 @@ export declare class VisualizerStore {
37
31
  * single-scalar 3D view (the napari Surface) follows for a multichannel image. */
38
32
  private readonly selectedChannel$;
39
33
  private defaultChannelStates;
34
+ /** The image the current channel states were derived for (see setImageMeta). */
35
+ private channelImageKey;
40
36
  private readonly grayscale$;
41
37
  private readonly invert$;
42
38
  private presetSet;
39
+ /** Session-only class colours from imported files (see PresetSet.importedColors). */
40
+ private importedColors;
43
41
  private readonly presetSet$;
44
42
  private readonly savePresets$;
45
43
  private presetsLoaded;
@@ -48,18 +46,10 @@ export declare class VisualizerStore {
48
46
  * Held here, next to the colormap/channel state, so the active backend reacts
49
47
  * to an edit exactly as it does for an image. */
50
48
  private readonly spatialView$;
51
- constructor(http?: HttpClient | null, prefsPort?: PreferencesPort | null);
52
- /**
53
- * Resolve the colormap tree's LUT keys (e.g. "GREYS_LUT") to their colour
54
- * arrays from a served JSON asset. The ~630 KB of LUT data lives outside the
55
- * bundle (as `/assets/plotting/colormap-luts.json`) so it never enters the TS
56
- * / webpack module graph — that data-in-source was the main driver of the
57
- * build's >2 GB heap. Named Plotly scales (e.g. "Viridis") aren't keys in the
58
- * JSON, so they're left untouched. The default LUT ("Greys Inv" → the Plotly
59
- * "Greys" scale) needs no JSON, so the first render works before this resolves.
60
- */
61
- private loadColormapLuts;
49
+ constructor(prefsPort?: PreferencesPort | null);
62
50
  private initPresetPersistence;
51
+ /** Publish the preset set with this session's imported class colours. */
52
+ private emitPresetSet;
63
53
  private normalizePresetSet;
64
54
  /** Queue a debounced save. No-ops until the initial load resolves (and when no port is bound). */
65
55
  private queuePresetSave;
@@ -86,7 +76,16 @@ export declare class VisualizerStore {
86
76
  * Editor) show µm²/mm² instead of px². No-op when neither axis is positive.
87
77
  */
88
78
  setPhysicalPixelSize(mppX?: number, mppY?: number): void;
89
- setImageMeta(imageMeta: IImageMetadata[]): void;
79
+ /**
80
+ * Publish the current image's metadata and derive its channels.
81
+ *
82
+ * `imageKey` identifies the image (its file name). A re-plot of the SAME image
83
+ * keeps the user's window/gamma/tint edits; a different image gets its own
84
+ * derived channels even at the same channel count — keying on the count alone
85
+ * left a DAPI/GFP/RFP stack's names, tints and windows on a following
86
+ * CD3/CD8/PanCK one. Without a key, only a change of channel count re-derives.
87
+ */
88
+ setImageMeta(imageMeta: IImageMetadata[], imageKey?: string): void;
90
89
  /** Channels for an image:
91
90
  * - RGB (rgbChannels ≥ 3) → Red/Green/Blue;
92
91
  * - multichannel fluorescence (channelCount > 1) → one channel per band,
@@ -119,25 +118,25 @@ export declare class VisualizerStore {
119
118
  /** Upsert a single class colour (used by the editor's per-class colour picker). */
120
119
  setClassificationColor(label: string, color: string): void;
121
120
  getPresetSet(): PresetSet;
121
+ /**
122
+ * Remember the class colours an imported file carried (label → colour), so its regions keep
123
+ * them: a class with a preset keeps the preset's colour, and the latest import wins for the
124
+ * rest. Not persisted.
125
+ */
126
+ rememberImportedClassColors(colors: ReadonlyMap<string, string>): void;
122
127
  getPresetSet$(): Observable<PresetSet>;
123
128
  setPresetSet(set: PresetSet): void;
124
129
  /** Add or update a class (keyed by exact stored `name`). */
125
130
  upsertClass(preset: ClassPreset): void;
126
131
  removeClass(name: string): void;
127
132
  resetPresets(): void;
128
- /** Force a (debounced) write-back of the current preset set. */
129
- persistPresets(): void;
130
133
  getSpatialView$(): Observable<SpatialViewState>;
131
134
  /** Synchronous read, for a renderer building its first frame. */
132
135
  currentSpatialView(): SpatialViewState;
133
136
  /** Patch the spatial view state; emits once with the merged value. */
134
137
  setSpatialView(partial: Partial<SpatialViewState>): void;
135
- /** Reset to defaults — e.g. when a different dataset is selected, where the
136
- * previous colour column almost certainly does not exist. */
137
- resetSpatialView(): void;
138
138
  getActiveTool$(): Observable<string | null>;
139
- getActiveTool(): string | null;
140
139
  setActiveTool(tool: string | null): void;
141
- static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerStore, [{ optional: true; }, { optional: true; }]>;
140
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerStore, [{ optional: true; }]>;
142
141
  static ɵprov: i0.ɵɵInjectableDeclaration<VisualizerStore>;
143
142
  }
@@ -10,9 +10,10 @@
10
10
  * failed or no-op action looked like a dead button.
11
11
  *
12
12
  * These keys are owned by the library and their outlets are rendered by
13
- * {@link VisualizerComponent}, so the feedback works in any host. A host that
14
- * wants these notices somewhere else should not render an outlet with the same
15
- * key — two matching outlets show the message twice.
13
+ * {@link VisualizerComponent}, so the feedback works in any host. Both keys are
14
+ * exported from the package so a host can tell them apart from its own; it should
15
+ * not render an outlet with the same key — two matching outlets show the message
16
+ * twice.
16
17
  */
17
18
  /** General notices: save results, validation, action outcomes. Default position. */
18
19
  export declare const VIZ_TOAST_KEY = "sci-viz-notice";
@@ -1,6 +1,5 @@
1
- import { WandService } from '../wand/wand.service';
2
- import { WandToolHost } from '../wand/wand-tool.service';
3
- import * as i0 from "@angular/core";
1
+ import { UndoGestureTarget } from '../tool-kit/undo-gesture';
2
+ import { CanvasToolHost, ICanvasTool } from '../tool-kit/canvas-tool';
4
3
  /** Brush parameters. `size` is the brush *diameter* in matrix (image) pixels. */
5
4
  export interface BrushOptions {
6
5
  size?: number;
@@ -14,14 +13,9 @@ export interface BrushOptions {
14
13
  label?: string;
15
14
  color?: string;
16
15
  }
17
- /**
18
- * The brush host is identical to the wand's — both need the cached-image
19
- * coordinate frame, the overlay container, the coordinate transform, and
20
- * read/write access to the shared region list. The brush ignores the wand's
21
- * pixel values (it paints a geometric disc rather than flood-filling by colour),
22
- * so reusing {@link WandToolHost} lets each backend bind the same host object.
23
- */
24
- export type BrushToolHost = WandToolHost;
16
+ /** @deprecated One host serves every canvas tool: use {@link CanvasToolHost}. The
17
+ * brush reads only the readback's coordinate frame, not its pixel values. */
18
+ export type BrushToolHost = CanvasToolHost;
25
19
  /**
26
20
  * QuPath-style brush tool. Painting a stroke unions a disc of the configured
27
21
  * size into the active region as the cursor drags; holding <kbd>Shift</kbd>
@@ -33,37 +27,26 @@ export type BrushToolHost = WandToolHost;
33
27
  * No pixel sampling and no cursor indicator: the painted stroke itself shows the
34
28
  * brush size. The overlay canvas only captures the pointer.
35
29
  *
36
- * Lifecycle mirrors the wand: a backend binds its host once, then toggles the
37
- * tool with `setMode(true | false, options)`.
30
+ * Lifecycle mirrors the wand: a plain class, one instance per backend's
31
+ * `CanvasToolManager`, armed with `activate(host, options)` / `deactivate()`.
38
32
  *
39
33
  * Holes / donuts (jit-ui#85): brushing a ring that encloses an unpainted area
40
- * keeps the enclosed hole — {@link WandService.maskToPolygons} traces interior
34
+ * keeps the enclosed hole — the contour tracer (`geometry/contour`) traces interior
41
35
  * rings into {@link Polygon.holes}, which adopt/merge preserve (the re-rasterize
42
36
  * punches the holes back out). The OpenSeadragon overlay renders them with
43
37
  * even-odd fill and GeoJSON round-trips them as extra Polygon rings. The Plotly
44
38
  * (Heatmap) backend currently renders the filled exterior only.
45
39
  */
46
- export declare class BrushToolService {
47
- private wandService;
40
+ export declare class BrushTool implements ICanvasTool<BrushOptions> {
41
+ readonly id = "brush";
48
42
  private host;
49
- private overlay;
50
- private active;
43
+ private readonly overlay;
51
44
  /**
52
- * Accumulated brush region (bbox-relative mask). Persists across mouseup so a
53
- * subsequent stroke extends the *same* region until the user switches tool —
54
- * matching QuPath, and the wand.
45
+ * Accumulated brush region (bbox-relative mask), shared logic with the wand.
46
+ * Persists across mouseup so a subsequent stroke extends the *same* region
47
+ * until the user switches tool — matching QuPath, and the wand.
55
48
  */
56
- private stroke;
57
- /** Id of the region this stroke is editing (null = a fresh region). For an
58
- * erase that splits the region, this tracks the largest resulting piece. */
59
- private strokeRegionId;
60
- /** Readback ratio/origin signature the active stroke is tied to; a change (zoom/pan) invalidates
61
- * it so it isn't re-committed at a different scale (jit-ui#102). */
62
- private strokeRatioSig;
63
- /** Ids of the extra regions produced when an erase stroke splits a region
64
- * into disconnected pieces — reused across drag ticks so the split pieces
65
- * keep stable identities instead of being recreated each tick. */
66
- private strokeExtraIds;
49
+ private readonly editor;
67
50
  /** Previous cursor position (matrix coords) within the current drag, so fast
68
51
  * drags paint a continuous stroke rather than disconnected dabs. */
69
52
  private lastMatrix;
@@ -71,14 +54,17 @@ export declare class BrushToolService {
71
54
  private size;
72
55
  /** The class being painted ({@link BrushOptions.label} / `color`); null = plain brush. */
73
56
  private paintClass;
74
- private readonly boundMouseDown;
75
- private readonly boundMouseMove;
76
- private readonly boundMouseUp;
77
- constructor(wandService: WandService);
78
- /** Wire the tool to its host. Must be called once before `setMode(true)`. */
79
- bindHost(host: BrushToolHost): void;
80
- /** Toggle the brush on/off. */
81
- setMode(active: boolean, options?: BrushOptions): void;
57
+ /** Makes each drag one undo step, however long the user pauses (RT-12). */
58
+ private readonly gesture;
59
+ /** @param gestureTarget the region store, so each drag is one undo step. */
60
+ constructor(gestureTarget?: UndoGestureTarget | null);
61
+ /** Arm the brush on `host`. Arming sets the class in full: no label/color
62
+ * means the plain brush; a missing size keeps the previous one. */
63
+ activate(host: CanvasToolHost, options?: BrushOptions): void;
64
+ /** Disarm: remove the overlay, drop the active region and the class. */
65
+ deactivate(): void;
66
+ /** Drop the active brush region so the next stroke starts a new one. */
67
+ reset(): void;
82
68
  /**
83
69
  * Update size and/or class while armed. The class changes only when `label`
84
70
  * or `color` is passed (as a key, even `undefined`), so a size-only update
@@ -88,13 +74,10 @@ export declare class BrushToolService {
88
74
  setOptions(options?: BrushOptions): void;
89
75
  /** Live-update the brush size (matrix-pixel diameter). */
90
76
  setSize(size: number): void;
91
- /** Drop the active brush region so the next stroke starts a new one. */
92
- clearActiveRegion(): void;
93
77
  private createOverlay;
94
- private destroyOverlay;
95
- private onMouseDown;
96
- private onMouseMove;
97
- private onMouseUp;
78
+ private onPointerDown;
79
+ private onPointerMove;
80
+ private onPointerUp;
98
81
  private resetStroke;
99
82
  /**
100
83
  * Paint (or erase) a disc — or a swept line of discs since the previous
@@ -104,61 +87,11 @@ export declare class BrushToolService {
104
87
  private applyAtClient;
105
88
  /**
106
89
  * OR (add) or AND-NOT (erase) a filled disc of `radius` matrix-pixels centred
107
- * at (cx, cy) into the accumulator, growing its bbox to fit when adding.
90
+ * at (cx, cy) into the accumulator, growing its bbox (clipped to the
91
+ * readback) to fit when adding.
108
92
  */
109
93
  private stampDisc;
110
- /**
111
- * Ensure the accumulator's bbox covers [px0,py0,px1,py1) (clamped to the
112
- * image), allocating/copying a larger mask when it must grow. Returns false if
113
- * the requested box is empty after clamping.
114
- */
115
- private ensureStrokeCovers;
116
- /** True if (matrixX, matrixY) lies inside the current stroke accumulator. */
117
- private pointInStroke;
118
- /**
119
- * Remove the region(s) referenced by the stroke and reset it — used when an
120
- * erase stroke deletes every pixel.
121
- */
122
- private dropActiveShape;
123
94
  /** Whether the stroke may adopt or merge `region`: always for the plain brush,
124
95
  * otherwise only a region of the class being painted. */
125
96
  private paintsInto;
126
- /** A region's closed-polygon vertices (image/data coords), or null when it
127
- * isn't a fillable closed polygon (rectangles, open polylines). */
128
- private regionVerts;
129
- /** Whether a region can be faithfully rasterized at this zoom (rx/ry = data units per matrix px).
130
- * Editing rasterizes + re-traces the region, so one whose matrix-space bbox exceeds the
131
- * rasterizer cap would come back rescaled/corrupted (e.g. a whole-slide annotation while zoomed
132
- * out) — skip adopt/merge for those and only edit them near native zoom (jit-ui#102). */
133
- private fitsForEdit;
134
- /** Convert a region's hole rings from image/data coords into matrix coords so
135
- * they line up with the stroke accumulator (jit-ui#85). */
136
- private holesToMatrix;
137
- /**
138
- * If (matrixX, matrixY) falls inside an existing region, rasterize it into the
139
- * stroke accumulator so subsequent brush input extends it rather than starting
140
- * a new region.
141
- */
142
- private tryAdoptShapeAt;
143
- /**
144
- * Fold every region whose rasterized mask overlaps the stroke mask into the
145
- * stroke and remove it from the list, so brushing across regions merges them.
146
- */
147
- private mergeOverlappingShapes;
148
- /**
149
- * Commit the stroke's connected pieces as regions — the largest keeps the
150
- * stroke's region identity, additional pieces (from an erase that split the
151
- * region) become their own regions tracked in `strokeExtraIds` so they keep
152
- * stable identities across drag ticks. The store mints ids on commit, which
153
- * we read back so subsequent ticks replace the same regions.
154
- */
155
- private commitComponents;
156
- /**
157
- * Build a Region for one component and insert it into `regions`: replace the
158
- * region with `id` in place if it exists, otherwise append a new one. Returns
159
- * the Region instance (its id is minted later by the store when new).
160
- */
161
- private upsertComponent;
162
- static ɵfac: i0.ɵɵFactoryDeclaration<BrushToolService, never>;
163
- static ɵprov: i0.ɵɵInjectableDeclaration<BrushToolService>;
164
97
  }
@@ -0,0 +1,20 @@
1
+ import { WandService } from './wand/wand.service';
2
+ import { SamPointToolService } from './segmentation/sam-point-tool.service';
3
+ import { CanvasToolHost } from './tool-kit/canvas-tool';
4
+ import { CanvasToolManager } from './tool-kit/canvas-tool-manager';
5
+ import { UndoGestureTarget } from './tool-kit/undo-gesture';
6
+ /** What a backend supplies to build its canvas tools — all from its own injector. */
7
+ export interface CanvasToolDeps {
8
+ /** The (stateless) wand patch sampler. */
9
+ wandService: WandService;
10
+ /** The chain's region store: makes each wand/brush/eraser drag one undo step. */
11
+ regionStore: UndoGestureTarget | null;
12
+ /** The chain's SAM point feeds; the point tool reports through them. */
13
+ samPoint: SamPointToolService;
14
+ }
15
+ /**
16
+ * A backend's canvas-tool manager: fresh wand, brush, vertex eraser,
17
+ * zoom-to-box and SAM point tools over `host`. Each backend calls this once, so
18
+ * no tool instance — and no tool state — is shared between backends (RT-21).
19
+ */
20
+ export declare function createCanvasToolManager(host: CanvasToolHost, deps: CanvasToolDeps): CanvasToolManager;
@@ -1,4 +1,4 @@
1
- import { CachedImageData } from '../wand/wand-tool.service';
1
+ import type { CachedImageData } from '../wand/wand-tool.service';
2
2
  /** A client-side crop of the loaded image — the browser equivalent of the JIT
3
3
  * server slide-crop, taken from the pixels already in the viewer. */
4
4
  export interface CroppedImage {
@@ -19,12 +19,18 @@ export interface DataBox {
19
19
  }
20
20
  /**
21
21
  * Browser "slide crop": extract the box region (data coords) from a cached image
22
- * frame as an RGBA image, clamped to the image bounds. Grayscale frames are
23
- * replicated across R/G/B; RGB tuples are copied through. Returns null when the
24
- * box is empty/outside the image.
22
+ * frame as an RGBA image, clamped to the image bounds. Returns null when the box
23
+ * is empty/outside the image.
25
24
  *
26
25
  * The output feeds an automatic segmenter (e.g. cellpose-SAM): run it on the
27
26
  * crop, then offset the resulting masks by (matrixX0, matrixY0) to place them
28
27
  * back on the full frame.
29
28
  */
30
29
  export declare function cropImageRegion(cached: CachedImageData, frameIndex: number, box: DataBox): CroppedImage | null;
30
+ /**
31
+ * RGBA pixels of the `w`×`h` matrix window at (x0, y0) of a cached frame,
32
+ * nested or packed (see `tool-kit/frame-pixels`). Grayscale frames are
33
+ * replicated across R/G/B; RGB tuples are copied through. Missing pixels become
34
+ * opaque black.
35
+ */
36
+ export declare function frameRegionToRgba(cached: CachedImageData, frameIndex: number, x0: number, y0: number, w: number, h: number): Uint8ClampedArray;
@@ -0,0 +1,38 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { PlotTypeId } from '../../contracts/plot-type';
3
+ import { PlotTypeOption } from '../../contracts/plot-type-contribution.contract';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * The toolbar's plot-type group: the plot-type dropdown, the isosurface band
7
+ * slider for the isosurface modes, and the add-intensity-line button for the
8
+ * views that draw profile lines. Presentational: the host owns the values.
9
+ */
10
+ export declare class PlotTypeSelectorComponent {
11
+ /** Plot types the active backend advertises, then any contributed modes. */
12
+ options: PlotTypeOption[];
13
+ /** The selected built-in type or contributed mode id. */
14
+ selected: PlotTypeId;
15
+ /** An isosurface mode: show the iso band slider. */
16
+ isosurface: boolean;
17
+ /** Isosurface band as a 0–255 slider position. */
18
+ isoRange: number[];
19
+ /** The view draws intensity profile lines: show the add-line button. */
20
+ intensityLines: boolean;
21
+ /** A plot type or contributed mode was picked from the dropdown. */
22
+ selectPlotType: EventEmitter<string>;
23
+ /** The iso band slider moved: the new `[low, high]` pair (or nothing). */
24
+ isoRangeChange: EventEmitter<number[] | undefined>;
25
+ /** Add another coloured intensity line ROI + inset trace. */
26
+ addProfileLine: EventEmitter<void>;
27
+ /** Iso slider bounds — UI constants (the band is host-owned). */
28
+ protected readonly isoValueMin = 0;
29
+ protected readonly isoValueMax = 255;
30
+ protected readonly isoValueStep = 1;
31
+ /** A plot-type icon is a PrimeNG font glyph (e.g. `pi pi-image`) rather than an
32
+ * SVG asset path — drives which element the item template renders. */
33
+ protected isPiIcon(icon: string | undefined): boolean;
34
+ /** The iso band slider reports its `[low, high]` pair (or nothing). */
35
+ protected onIsoRange(value: number | number[] | undefined): void;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<PlotTypeSelectorComponent, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<PlotTypeSelectorComponent, "toolbar-plot-type-selector", never, { "options": { "alias": "options"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "isosurface": { "alias": "isosurface"; "required": false; }; "isoRange": { "alias": "isoRange"; "required": false; }; "intensityLines": { "alias": "intensityLines"; "required": false; }; }, { "selectPlotType": "selectPlotType"; "isoRangeChange": "isoRangeChange"; "addProfileLine": "addProfileLine"; }, never, never, true, never>;
38
+ }
@@ -0,0 +1,21 @@
1
+ /** A drawing tool's toggle button in the toolbar's region group. */
2
+ export interface RegionToolButton {
3
+ /** The drag mode the button toggles. */
4
+ mode: string;
5
+ /** Accessible name. */
6
+ label: string;
7
+ /** Tooltip (HTML). */
8
+ tooltip: string;
9
+ /** A PrimeNG glyph (`pi pi-…`), or else {@link img}. */
10
+ icon?: string;
11
+ /** An SVG under `assets/plotting/`, recoloured for its on/off state. */
12
+ img?: string;
13
+ /** `not3d`: absent from the 3D cloud's screen-space lasso (no raster to
14
+ * sample / an open polyline is no region); `vertex`: needs a backend with a
15
+ * vertex-editing overlay (OSD + napari-js image). */
16
+ gate?: 'not3d' | 'vertex';
17
+ /** The tool's parameter slider, shown while it is active. */
18
+ slider?: 'brush' | 'wand' | 'eraser';
19
+ }
20
+ /** The region drawing tools, in toolbar order. */
21
+ export declare const REGION_TOOL_BUTTONS: readonly RegionToolButton[];
@@ -0,0 +1,62 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { RegionToolButton } from './region-tool-buttons';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * The toolbar's region group: open the Region Editor, the drawing tools (one
6
+ * table-driven toggle per {@link REGION_TOOL_BUTTONS} entry, with the active
7
+ * tool's parameter slider), undo / redo and delete. Presentational: the host
8
+ * owns the active mode and every value.
9
+ */
10
+ export declare class RegionToolsComponent {
11
+ /** The armed drawing tool's mode, or null. */
12
+ activeDragMode: string | null;
13
+ /** The 3D cloud's screen-space lasso: no brush or polyline. */
14
+ is3dRegions: boolean;
15
+ /** Only the selection tool (a volume view: it picks the regions' surfaces in 3D). */
16
+ selectOnly: boolean;
17
+ /** The backend has a vertex-editing overlay (OSD + napari-js image). */
18
+ vertexTools: boolean;
19
+ /** Magic-wand sensitivity (the wand's slider value). */
20
+ wandSensitivity: number;
21
+ /** Brush diameter in image pixels. */
22
+ brushSize: number;
23
+ /** Vertex-eraser radius in image pixels. */
24
+ vertexEraserRadius: number;
25
+ /** A region action can be undone (enables Undo). */
26
+ canUndo: boolean;
27
+ /** An undone region action can be redone (enables Redo). */
28
+ canRedo: boolean;
29
+ /** Open the Region Editor dialog. */
30
+ openRegionEditor: EventEmitter<void>;
31
+ /** A drawing tool's button was clicked (its mode). */
32
+ toggleDragMode: EventEmitter<string>;
33
+ /** Undo the last region action. */
34
+ undoRegion: EventEmitter<void>;
35
+ /** Redo the last undone region action. */
36
+ redoRegion: EventEmitter<void>;
37
+ /** Delete the selected region. */
38
+ deleteRegion: EventEmitter<void>;
39
+ /** The wand sensitivity slider moved. */
40
+ wandSensitivityChange: EventEmitter<number | undefined>;
41
+ /** The brush size slider moved. */
42
+ brushSizeChange: EventEmitter<number | undefined>;
43
+ /** The vertex-eraser radius slider moved. */
44
+ vertexEraserRadiusChange: EventEmitter<number | undefined>;
45
+ protected readonly buttons: readonly RegionToolButton[];
46
+ /** Slider bounds — toolbar UI constants (the values are host-owned). */
47
+ protected readonly wandSensitivityMin = 0.5;
48
+ protected readonly wandSensitivityMax = 10;
49
+ protected readonly wandSensitivityStep = 0.1;
50
+ protected readonly brushSizeMin = 5;
51
+ protected readonly brushSizeMax = 300;
52
+ protected readonly brushSizeStep = 5;
53
+ protected readonly vertexEraserRadiusMin = 5;
54
+ protected readonly vertexEraserRadiusMax = 300;
55
+ protected readonly vertexEraserRadiusStep = 5;
56
+ protected readonly trackByMode: (_: number, b: RegionToolButton) => string;
57
+ protected shown(b: RegionToolButton): boolean;
58
+ /** A single slider's value (a range slider never feeds these). */
59
+ protected asNumber(v: number | number[] | undefined): number | undefined;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<RegionToolsComponent, never>;
61
+ static ɵcmp: i0.ɵɵComponentDeclaration<RegionToolsComponent, "toolbar-region-tools", never, { "activeDragMode": { "alias": "activeDragMode"; "required": false; }; "is3dRegions": { "alias": "is3dRegions"; "required": false; }; "selectOnly": { "alias": "selectOnly"; "required": false; }; "vertexTools": { "alias": "vertexTools"; "required": false; }; "wandSensitivity": { "alias": "wandSensitivity"; "required": false; }; "brushSize": { "alias": "brushSize"; "required": false; }; "vertexEraserRadius": { "alias": "vertexEraserRadius"; "required": false; }; "canUndo": { "alias": "canUndo"; "required": false; }; "canRedo": { "alias": "canRedo"; "required": false; }; }, { "openRegionEditor": "openRegionEditor"; "toggleDragMode": "toggleDragMode"; "undoRegion": "undoRegion"; "redoRegion": "redoRegion"; "deleteRegion": "deleteRegion"; "wandSensitivityChange": "wandSensitivityChange"; "brushSizeChange": "brushSizeChange"; "vertexEraserRadiusChange": "vertexEraserRadiusChange"; }, never, never, true, never>;
62
+ }
@@ -1,6 +1,4 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- import { WandService } from '../wand/wand.service';
3
- import { WandToolHost } from '../wand/wand-tool.service';
1
+ import { CanvasToolHost } from '../tool-kit/canvas-tool';
4
2
  import { ICellSegmenter } from '../../contracts/cell-segmenter.contract';
5
3
  import * as i0 from "@angular/core";
6
4
  /**
@@ -14,19 +12,17 @@ import * as i0 from "@angular/core";
14
12
  * box prompt, so the box just bounds the crop it segments automatically.
15
13
  */
16
14
  export declare class CellSegmentToolService {
17
- private wandService;
18
- private host;
19
- readonly status$: BehaviorSubject<string>;
20
- readonly busy$: BehaviorSubject<boolean>;
21
- readonly progress$: BehaviorSubject<number>;
22
- constructor(wandService: WandService);
23
- bindHost(host: WandToolHost): void;
15
+ private readonly state;
16
+ readonly status$: import("rxjs").BehaviorSubject<string>;
17
+ readonly busy$: import("rxjs").BehaviorSubject<boolean>;
18
+ readonly progress$: import("rxjs").BehaviorSubject<number>;
24
19
  /**
25
- * Crop + cellpose-segment every rectangle; append the cell regions and drop
26
- * the prompt rectangles that produced cells. Returns the number of regions added.
20
+ * Crop + cellpose-segment every rectangle of the backend behind `host`; append
21
+ * the cell regions and drop the prompt rectangles that produced cells. Returns
22
+ * the number of regions added; 0 (ignored) while a previous run is still going.
23
+ * The host is passed per run, so no backend's host outlives its call.
27
24
  */
28
- segmentBoxes(segmenter: ICellSegmenter): Promise<number>;
29
- private makeRegion;
25
+ segmentBoxes(host: CanvasToolHost, segmenter: ICellSegmenter): Promise<number>;
30
26
  static ɵfac: i0.ɵɵFactoryDeclaration<CellSegmentToolService, never>;
31
27
  static ɵprov: i0.ɵɵInjectableDeclaration<CellSegmentToolService>;
32
28
  }
@@ -17,8 +17,17 @@ import * as i0 from "@angular/core";
17
17
  export declare class CellposeSegmenterService implements ICellSegmenter {
18
18
  private instance;
19
19
  private loading;
20
+ /** Bumped by {@link setModelUrl}, so a load of the previous URL is discarded. */
21
+ private generation;
20
22
  private modelUrl;
21
- /** Point the segmenter at a different hosted CPSAM ONNX (before first use). */
23
+ /** Every in-flight caller's callbacks: one shared load reports to all of them. */
24
+ private readonly progressListeners;
25
+ private readonly statusListeners;
26
+ /**
27
+ * Point the segmenter at a different hosted CPSAM ONNX. Changing the URL after
28
+ * the model loaded (or while it loads) disposes it, so the next run loads the
29
+ * new model instead of silently keeping the old one.
30
+ */
22
31
  setModelUrl(url: string): void;
23
32
  segmentCells(image: {
24
33
  data: Uint8ClampedArray;
@@ -27,7 +36,8 @@ export declare class CellposeSegmenterService implements ICellSegmenter {
27
36
  }, progress?: CellSegmentProgress): Promise<CellSegmentation>;
28
37
  /**
29
38
  * The shared Cellpose instance, lazily created on first use and reused
30
- * thereafter (deduped across concurrent callers). Exposed so a host pipeline
39
+ * thereafter (deduped across concurrent callers, each of which receives the
40
+ * load's progress). A failed load is retried on the next call. Exposed so a host pipeline
31
41
  * engine can run richer `segment()` options on the same instance. `onProgress`
32
42
  * reports raw downloaded/total bytes (`total` is null when unknown); `onStatus`
33
43
  * reports worker-init phase strings.
@@ -1,15 +1,30 @@
1
1
  import { ISamSession, SamEmbedding, SamMaskResult, SamModelDef, SamPrompt } from '../../contracts/sam.contract';
2
+ /**
3
+ * onnxruntime-web implementation of {@link ISamSession} (jit-ui#90), with two
4
+ * execution modes chosen per model:
5
+ *
6
+ * - **in-process** (main thread) — for small WASM models flagged `inProcess`
7
+ * (e.g. micro-sam ViT-T). Fast load + inference with no Web Worker spawn /
8
+ * second ORT runtime / message round-trips; the brief encode runs on the main
9
+ * thread (fine for a tiny model).
10
+ * - **worker** — for WebGPU models (e.g. ViT-B, patho-sam fp16) whose heavy
11
+ * encode would otherwise freeze the tab. Runs in {@link ./onnx-sam.worker} so
12
+ * the UI stays responsive (the spinner animates).
13
+ *
14
+ * Both modes share their inference math via {@link ./sam-onnx-core}. Lazy-imported
15
+ * by the SAM tools so onnxruntime-web / the worker never load in unit tests or
16
+ * the initial bundle.
17
+ */
2
18
  export declare class OnnxSamSession implements ISamSession {
3
19
  private mode;
4
20
  private loaded;
5
- private model;
6
21
  private inputSize;
7
22
  private worker;
8
- private seq;
9
- private readonly pending;
23
+ private readonly calls;
10
24
  private encoder;
11
25
  private decoder;
12
26
  private nextToken;
27
+ /** The few most recently used embeddings, by token (one per recently viewed image). */
13
28
  private readonly embeddings;
14
29
  loadModel(model: SamModelDef, onProgress?: (fraction: number) => void): Promise<void>;
15
30
  isLoaded(): boolean;
@@ -19,7 +34,11 @@ export declare class OnnxSamSession implements ISamSession {
19
34
  height: number;
20
35
  }): Promise<SamEmbedding>;
21
36
  decode(embedding: SamEmbedding, prompt: SamPrompt): Promise<SamMaskResult>;
37
+ /** Release the worker / ORT sessions. Calls still in flight reject (RT-8), so
38
+ * their callers' `finally` blocks run (e.g. a tool's busy flag clears). */
22
39
  dispose(): void;
23
40
  private ensureWorker;
41
+ /** Terminate the worker (if any) and reject every call still waiting on it. */
42
+ private dropWorker;
24
43
  private call;
25
44
  }
@@ -0,0 +1,31 @@
1
+ /** A reply from the SAM worker: progress for, or the result of, call `id`. */
2
+ export interface WorkerReply {
3
+ id: number;
4
+ type: string;
5
+ /** Present on `type: 'progress'` replies. */
6
+ fraction?: number;
7
+ /** Present on `type: 'error'` replies. */
8
+ error?: string;
9
+ [key: string]: unknown;
10
+ }
11
+ /**
12
+ * Request/response bookkeeping for a worker RPC: each call gets an id and a
13
+ * promise that its reply settles. Every exit path (dispose, a worker crash)
14
+ * must {@link rejectAll}, or awaiting callers never reach their `finally` and a
15
+ * tool's busy flag sticks forever (RT-8).
16
+ */
17
+ export declare class PendingCalls {
18
+ private seq;
19
+ private readonly pending;
20
+ /** Calls still awaiting a reply. */
21
+ get size(): number;
22
+ /** Register a new call; post the message with the returned id. */
23
+ open(onProgress?: (fraction: number) => void): {
24
+ id: number;
25
+ promise: Promise<WorkerReply>;
26
+ };
27
+ /** Route a worker reply to its call: progress, error or result. */
28
+ handle(reply: WorkerReply): void;
29
+ /** Reject every pending call with `err` and forget them. */
30
+ rejectAll(err: Error): void;
31
+ }