@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
@@ -13,7 +13,12 @@ import { SamModelDef } from '../../contracts/sam.contract';
13
13
  * cellpose default). A host can repoint them at its own hosting (e.g. a GCS
14
14
  * bucket) at runtime via {@link setSamModelUrls}; an empty URL disables a model
15
15
  * (the session throws a clear "not configured" error). Export/quantization
16
- * tooling: the sibling `browser-onnx-tools` project; see docs/sam-segmentation-design.md.
16
+ * tooling: the sibling `browser-onnx-tools` project; see
17
+ * docs/design/sam-segmentation-design.md.
18
+ *
19
+ * Downloads are cached in the browser by URL and `revision`: when a model's files are
20
+ * re-exported under the same URLs, set (or bump) its `revision` so browsers fetch the
21
+ * new files instead of serving the old ones from cache.
17
22
  */
18
23
  export declare const SAM_MODELS: SamModelDef[];
19
24
  /** Initial default model id (overridden at runtime once the host configures a
@@ -31,6 +36,7 @@ export declare function isSamModelReady(model: SamModelDef): boolean;
31
36
  /**
32
37
  * Point a registered model at its hosted ONNX pair (HF / GCS). Called by the
33
38
  * host's composition root once hosting is decided, keeping deployment URLs out
34
- * of the library.
39
+ * of the library. Pass `revision` when the files at those URLs can be replaced in
40
+ * place, and change it whenever they are (see {@link SamModelDef.revision}).
35
41
  */
36
- export declare function setSamModelUrls(id: string, encoderUrl: string, decoderUrl: string): void;
42
+ export declare function setSamModelUrls(id: string, encoderUrl: string, decoderUrl: string, revision?: string): void;
@@ -4,11 +4,18 @@ import type { SamPrompt } from '../../contracts/sam.contract';
4
4
  * Shared, DOM-free SAM inference primitives used by BOTH inference backends:
5
5
  * the in-process session (`OnnxSamSession`, main thread) and the dedicated
6
6
  * Web Worker (`onnx-sam.worker`). Keeping these here avoids duplicating the
7
- * preprocessing / decoder-prompt math and keeps the worker DOM-free (it can't
8
- * import sam-prompt.ts, which pulls in DOM types).
7
+ * preprocessing / decoder-prompt math; nothing here may import Angular or the
8
+ * DOM, since the worker bundles it.
9
9
  */
10
+ /** SAM's per-channel (RGB) pixel mean, subtracted before the encoder. */
10
11
  export declare const PIXEL_MEAN: number[];
12
+ /** SAM's per-channel (RGB) pixel standard deviation, divided out before the encoder. */
11
13
  export declare const PIXEL_STD: number[];
14
+ /**
15
+ * Delete every downloaded SAM model (several hundred MB per origin). Resolves
16
+ * to true when something was removed; false where the Cache API is unavailable.
17
+ */
18
+ export declare function clearSamModelCache(): Promise<boolean>;
12
19
  /** Encoder output for one image, reused across prompts. */
13
20
  export interface CoreEmbedding {
14
21
  data: Float32Array;
@@ -24,10 +31,16 @@ export interface CoreMask {
24
31
  height: number;
25
32
  iou: number;
26
33
  }
34
+ /**
35
+ * The Cache API key a model file is stored under: its URL, plus the model's
36
+ * `SamModelDef.revision` as a query parameter when it has one, so a bumped revision
37
+ * misses the cache and downloads the re-exported file.
38
+ */
39
+ export declare function modelCacheKey(url: string, revision?: string): string;
27
40
  /** Fetch a model as an ArrayBuffer, streaming progress and caching in the Cache
28
- * API (so it isn't re-downloaded). Cache hit → progress jumps to 1. Works on
29
- * the main thread and in a worker (both have `fetch` + `caches`). */
30
- export declare function fetchModel(url: string, onProgress?: (f: number) => void): Promise<ArrayBuffer>;
41
+ * API (so it isn't re-downloaded) under {@link modelCacheKey}. Cache hit → progress
42
+ * jumps to 1. Works on the main thread and in a worker (both have `fetch` + `caches`). */
43
+ export declare function fetchModel(url: string, onProgress?: (f: number) => void, revision?: string): Promise<ArrayBuffer>;
31
44
  /** Resize (long side → size, bilinear), pad to size×size, SAM-normalize → CHW float32. */
32
45
  export declare function preprocess(data: Uint8ClampedArray, width: number, height: number, size: number, scale: number): Float32Array;
33
46
  /** Assemble decoder `point_coords`/`point_labels` from a prompt, in encoder
@@ -1,8 +1,32 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- import { WandService } from '../wand/wand.service';
3
- import { WandToolHost } from '../wand/wand-tool.service';
1
+ import { SamSessionService } from './sam-session.service';
4
2
  import { ISamSession } from '../../contracts/sam.contract';
3
+ import { AsyncToolStatus } from '../tool-kit/async-tool-status';
4
+ import { CanvasToolHost, ICanvasTool } from '../tool-kit/canvas-tool';
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * The SAM point prompts of one viewer chain: the status feeds the toolbar shows
8
+ * and the model session. Every backend's `CanvasToolManager` gets its own
9
+ * {@link SamPointTool} from {@link createTool}, so in-progress points never
10
+ * cross backends, while all of them report through these feeds and share one
11
+ * busy guard and one {@link SamSessionService}.
12
+ */
13
+ export declare class SamPointToolService {
14
+ private readonly sessions;
15
+ private readonly state;
16
+ readonly status$: import("rxjs").BehaviorSubject<string>;
17
+ readonly busy$: import("rxjs").BehaviorSubject<boolean>;
18
+ /** Encoder-download progress (0..1) on the first click; -1 when not downloading. */
19
+ readonly progress$: import("rxjs").BehaviorSubject<number>;
20
+ constructor(sessions?: SamSessionService);
21
+ /** Choose the registered model to use (shared with the box tool). */
22
+ setModel(id: string): void;
23
+ /** Test seam: inject a fake/alternate session. */
24
+ useSession(session: ISamSession): void;
25
+ /** A point tool for one backend, reporting through this service. */
26
+ createTool(): SamPointTool;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<SamPointToolService, never>;
28
+ static ɵprov: i0.ɵɵInjectableDeclaration<SamPointToolService>;
29
+ }
6
30
  /** Interactive SAM point-prompt tool (jit-ui#90, P1).
7
31
  *
8
32
  * Each plain (positive) click segments the clicked object as its OWN new region
@@ -11,36 +35,28 @@ import * as i0 from "@angular/core";
11
35
  * the decoder against the (cached) image embedding and updating its live region.
12
36
  * `commit()` (Enter) finalises early; `clear()` (Esc) discards the current
13
37
  * prompt + its preview region. Mirrors the wand/brush on-canvas tool pattern and
14
- * reuses WandService.maskToPolygons + the shared region store.
38
+ * reuses the contour tracer + the shared region store.
15
39
  *
16
- * Inference is behind {@link ISamSession} (lazy onnxruntime-web in production,
17
- * a fake in tests).
40
+ * Inference goes through the shared {@link SamSessionService} (one session and
41
+ * embedding for both SAM tools; lazy onnxruntime-web in production, a fake in
42
+ * tests). Created by {@link SamPointToolService.createTool}.
18
43
  */
19
- export declare class SamPointToolService {
20
- private wandService;
44
+ export declare class SamPointTool implements ICanvasTool<void> {
45
+ private readonly state;
46
+ private readonly sessions;
47
+ readonly id = "samPoint";
21
48
  private host;
22
- private overlay;
23
- private session;
24
- /** In-flight session load — dedupes a warm-up preload against the first click. */
25
- private sessionLoad;
26
- private model;
27
- private embedding;
28
- private embeddingKey;
49
+ private readonly overlay;
29
50
  /** Accumulated point prompts, in image (matrix) coords. */
30
51
  private points;
31
52
  /** Id of the in-progress (preview) region being refined, if committed to store. */
32
53
  private regionId;
33
- readonly status$: BehaviorSubject<string>;
34
- readonly busy$: BehaviorSubject<boolean>;
35
- /** Encoder-download progress (0..1) on the first click; -1 when not downloading. */
36
- readonly progress$: BehaviorSubject<number>;
37
- private readonly boundMouseDown;
38
- constructor(wandService: WandService);
39
- bindHost(host: WandToolHost): void;
40
- setModel(id: string): void;
41
- /** Test seam: inject a fake/alternate session. */
42
- useSession(session: ISamSession): void;
43
- setMode(active: boolean): void;
54
+ constructor(state: AsyncToolStatus, sessions: SamSessionService);
55
+ private get status$();
56
+ activate(host: CanvasToolHost): void;
57
+ deactivate(): void;
58
+ /** Forget the current prompt (its preview region stays). */
59
+ reset(): void;
44
60
  /** Eagerly load the model in the background (fire-and-forget). Safe to call
45
61
  * repeatedly — it dedupes against an in-flight load and an existing session. */
46
62
  preload(): void;
@@ -49,11 +65,9 @@ export declare class SamPointToolService {
49
65
  /** Discard the in-progress prompt + its preview region. */
50
66
  clear(): void;
51
67
  private createOverlay;
52
- private destroyOverlay;
53
- private onMouseDown;
54
- /** Replace (or insert) the in-progress preview region in the shared store. */
68
+ /** Primary button only (the overlay filters the others). */
69
+ private onPointerDown;
70
+ /** Replace (or insert) the in-progress preview region in the shared store,
71
+ * against the regions as they are now (the run may have taken a while). */
55
72
  private upsertPreview;
56
- private ensureSession;
57
- static ɵfac: i0.ɵɵFactoryDeclaration<SamPointToolService, never>;
58
- static ɵprov: i0.ɵɵInjectableDeclaration<SamPointToolService>;
59
73
  }
@@ -1,34 +1,10 @@
1
- import { CachedImageData } from '../wand/wand-tool.service';
2
- import { SamPrompt } from '../../contracts/sam.contract';
1
+ import type { CachedImageData } from '../wand/wand-tool.service';
3
2
  /**
4
- * Pure helpers for SAM inference — no DOM, no ORT, no `this` — so they're unit
5
- * testable. The session uses these to assemble decoder inputs and to convert
6
- * the cached image frame into the RGBA buffer the encoder preprocesses.
7
- */
8
- /**
9
- * Build an RGBA buffer (the encoder's input image) from a cached image frame.
10
- * Grayscale frames are replicated across R/G/B; RGB tuples are copied through.
11
- * Out-of-range/missing pixels become opaque black.
12
- */
13
- export declare function frameToRgba(cached: CachedImageData, frameIndex: number): Uint8ClampedArray;
14
- /**
15
- * Assemble the SAM decoder's `point_coords` / `point_labels` from a prompt.
3
+ * Build an RGBA buffer (the SAM encoder's input image) from a cached image
4
+ * frame: the full-frame case of {@link frameRegionToRgba}. Grayscale frames are
5
+ * replicated across R/G/B; missing pixels become opaque black.
16
6
  *
17
- * Coordinates are scaled into the encoder's resized space (`scale =
18
- * inputSize / max(imageW, imageH)`). A box is encoded as two points labelled
19
- * `2` (top-left) and `3` (bottom-right); positive/negative points use `1`/`0`.
20
- * When there are points but no box, a padding point `[0,0]` labelled `-1` is
21
- * appended (the decoder expects the box slots padded when absent).
22
- */
23
- export declare function buildDecoderPrompt(prompt: SamPrompt, scale: number): {
24
- pointCoords: Float32Array;
25
- pointLabels: Float32Array;
26
- numPoints: number;
27
- };
28
- /**
29
- * Binarize SAM mask logits (`> threshold`, default 0 per SAM's mask_threshold)
30
- * into a 0/1 mask the contour tracer (WandService.maskToPolygons) consumes.
7
+ * The decoder-prompt helpers (`buildDecoderPrompt`, `binarizeMask`,
8
+ * `bestMaskIndex`) live in `sam-onnx-core`, which both inference paths use.
31
9
  */
32
- export declare function binarizeMask(logits: Float32Array | number[], threshold?: number): Uint8Array;
33
- /** Index of the highest-scoring mask in a multimask decoder output. */
34
- export declare function bestMaskIndex(iouPredictions: Float32Array | number[]): number;
10
+ export declare function frameToRgba(cached: CachedImageData, frameIndex: number): Uint8ClampedArray;
@@ -0,0 +1,74 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import type { CachedImageData } from '../wand/wand-tool.service';
3
+ import { ISamSession, SamEmbedding, SamModelDef } from '../../contracts/sam.contract';
4
+ import * as i0 from "@angular/core";
5
+ /** Creates an unloaded inference session. */
6
+ export type SamSessionFactory = () => Promise<ISamSession>;
7
+ /**
8
+ * The one SAM inference session for the active model, shared by the box- and
9
+ * point-prompt tools (RT-10): one download, one Worker/GPU session and one
10
+ * cached image embedding instead of one per tool.
11
+ *
12
+ * - Concurrent {@link ensureSession} calls share a single load, and each caller
13
+ * receives its download progress.
14
+ * - A load that fails disposes its half-built session (and Worker) and is not
15
+ * cached; the next call retries (RT-7).
16
+ * - {@link setModel} during a load discards that load's session, and the
17
+ * waiting callers get the newly picked model instead (RT-9).
18
+ *
19
+ * Scope: root, on purpose, and deliberately NOT in `provideVisualization()`. The
20
+ * chain-scoped SAM tools of a second viewer (jit-ui's pipeline preview) resolve
21
+ * this root instance, so the model (14–172 MB) is downloaded and its Worker/GPU
22
+ * session built once per app, not once per viewer, and the embedding cache is
23
+ * keyed by image + model so viewers don't confuse each other's images. The cost
24
+ * is that a model picked in one viewer is the model of all of them. A host that
25
+ * wants a session per viewer can provide this service at the viewer's component:
26
+ * {@link ngOnDestroy} then disposes that viewer's session (and Worker) with it.
27
+ */
28
+ export declare class SamSessionService implements OnDestroy {
29
+ private model;
30
+ private session;
31
+ private loading;
32
+ /** Bumped on every model switch; a load started under an older value is stale. */
33
+ private generation;
34
+ private readonly progressListeners;
35
+ private createSession;
36
+ /** Set by {@link ngOnDestroy}: no session is loaded any more. */
37
+ private destroyed;
38
+ /** Cached encoder embedding + the key (image identity + model) it was computed for. */
39
+ private embedding;
40
+ private embeddingKey;
41
+ /** The model the next run uses. */
42
+ getModel(): SamModelDef;
43
+ /** True when a session is loaded (or injected) for the current model. */
44
+ hasSession(): boolean;
45
+ /** Choose the registered model; drops the loaded session and cached embedding. */
46
+ setModel(id: string): void;
47
+ /** Drop the cached embedding (e.g. after the image/slice changes). */
48
+ invalidateEmbedding(): void;
49
+ /** Test seam: use this session (already loaded) for the current model. */
50
+ useSession(session: ISamSession): void;
51
+ /** Test seam: how sessions are created (default: lazy onnxruntime-web). */
52
+ useSessionFactory(factory: SamSessionFactory): void;
53
+ /**
54
+ * The loaded session for the current model, loading it if needed.
55
+ * `onProgress` receives the download fraction while this call waits.
56
+ */
57
+ ensureSession(onProgress?: (fraction: number) => void): Promise<ISamSession>;
58
+ /**
59
+ * The encoder embedding of a cached frame, reused while `key` (the image's
60
+ * identity: file, frame, readback frame) and the model are unchanged.
61
+ * `onEncode` is called only when the encoder actually runs.
62
+ */
63
+ embed(session: ISamSession, cached: CachedImageData, frameIndex: number, key: string, onEncode?: () => void): Promise<SamEmbedding>;
64
+ /**
65
+ * Dispose the session (and its Worker), drop the embedding and discard an
66
+ * in-flight load. Angular calls this when the injector providing the service
67
+ * is destroyed: the app for the root instance, or a viewer component that
68
+ * provides its own.
69
+ */
70
+ ngOnDestroy(): void;
71
+ private load;
72
+ static ɵfac: i0.ɵɵFactoryDeclaration<SamSessionService, never>;
73
+ static ɵprov: i0.ɵɵInjectableDeclaration<SamSessionService>;
74
+ }
@@ -1,50 +1,43 @@
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';
2
+ import { SamSessionService } from './sam-session.service';
4
3
  import { ISamSession } from '../../contracts/sam.contract';
5
4
  import * as i0 from "@angular/core";
6
- /** The SAM tool binds to the same host the wand/brush use, so each backend
7
- * reuses its existing pixel readback + coordinate transform + region store. */
8
- export type SamToolHost = WandToolHost;
5
+ /** @deprecated The SAM tool runs against the backend's canvas-tool host:
6
+ * use {@link CanvasToolHost}. */
7
+ export type SamToolHost = CanvasToolHost;
9
8
  /**
10
9
  * Box-prompted SAM segmentation tool (jit-ui#90, P0). On `segmentBoxes()` it
11
10
  * reads every rectangle region, runs the (cached) encoder once for the image,
12
- * then runs the decoder per box, traces each mask to a polygon (reusing
13
- * WandService.maskToPolygons) and commits them as regions.
11
+ * then runs the decoder per box, traces each mask to a polygon and replaces
12
+ * the prompt rectangles with the masks.
14
13
  *
15
- * Inference is abstracted behind {@link ISamSession}: production uses the
16
- * onnxruntime-web session (lazy-imported so ORT never loads in unit tests);
17
- * tests inject a fake via {@link useSession}.
14
+ * Inference goes through the shared {@link SamSessionService} (one session and
15
+ * embedding for both SAM tools); tests inject a fake session via
16
+ * {@link useSession}.
18
17
  */
19
18
  export declare class SamToolService {
20
- private wandService;
21
- private host;
22
- private session;
23
- private model;
24
- /** Cached encoder embedding + the key (image identity) it was computed for. */
25
- private embedding;
26
- private embeddingKey;
19
+ private readonly sessions;
20
+ private readonly state;
27
21
  /** Status text + busy flag for a spinner / toast in the host. */
28
- readonly status$: BehaviorSubject<string>;
29
- readonly busy$: BehaviorSubject<boolean>;
22
+ readonly status$: import("rxjs").BehaviorSubject<string>;
23
+ readonly busy$: import("rxjs").BehaviorSubject<boolean>;
30
24
  /** Encoder-download progress: -1 = not downloading, 0..1 = downloading. */
31
- readonly progress$: BehaviorSubject<number>;
32
- constructor(wandService: WandService);
33
- /** Bind to the active backend's host (called by the backend, like the wand). */
34
- bindHost(host: SamToolHost): void;
35
- /** Choose the registered model to use; invalidates any cached embedding. */
25
+ readonly progress$: import("rxjs").BehaviorSubject<number>;
26
+ constructor(sessions?: SamSessionService);
27
+ /** Choose the registered model to use (shared with the point tool). */
36
28
  setModel(id: string): void;
37
29
  /** Drop the cached embedding (e.g. after the image/slice changes). */
38
30
  invalidateEmbedding(): void;
39
31
  /** Test seam: inject a fake/alternate inference session. */
40
32
  useSession(session: ISamSession): void;
41
33
  /**
42
- * Segment every rectangle region with a box prompt and append the resulting
43
- * masks as new polygon regions. Returns how many regions were added.
34
+ * Segment every rectangle region of the backend behind `host` with a box
35
+ * prompt and replace each prompt that produced a mask with the mask's polygon
36
+ * region. Returns how many regions were added; 0 (ignored) while a previous
37
+ * run is still going. The host is passed per run, so no backend's host
38
+ * outlives its call.
44
39
  */
45
- segmentBoxes(): Promise<number>;
46
- private makeRegion;
47
- private ensureSession;
40
+ segmentBoxes(host: CanvasToolHost): Promise<number>;
48
41
  static ɵfac: i0.ɵɵFactoryDeclaration<SamToolService, never>;
49
42
  static ɵprov: i0.ɵɵInjectableDeclaration<SamToolService>;
50
43
  }
@@ -0,0 +1,8 @@
1
+ import { Region } from '../../models/region';
2
+ /**
3
+ * `regions` minus `remove`, matched by id (identity for a region without one).
4
+ * Async tools use it to drop their consumed prompts from the *current* region
5
+ * list at commit time, instead of overwriting the list they read before a long
6
+ * download or inference (RT-6).
7
+ */
8
+ export declare function withoutRegions(regions: Region[], remove: Region[]): Region[];
@@ -0,0 +1,52 @@
1
+ import { Observable } from 'rxjs';
2
+ import { MessageService } from 'primeng/api';
3
+ /** A segmentation tool's live feeds: status line and encoder-download progress (0..1, <0 = none).
4
+ * Observables, not subjects, so a contributed tool need not expose its internals. */
5
+ export interface SegmentationProgress {
6
+ status$: Observable<string>;
7
+ progress$: Observable<number>;
8
+ }
9
+ /**
10
+ * One viewer's segmentation runs and their sticky progress toast (jit-ui#90): the
11
+ * box-prompt SAM and Cellpose tools, contributed whole-view tools, and the
12
+ * interactive SAM point tool whose feeds it bridges.
13
+ *
14
+ * The toast is keyed per viewer (`toastKey`), so a run in a pipeline preview does not
15
+ * show in the main view; results and failures go to the viewer's `resultKey` outlet,
16
+ * which the sticky toast's teardown does not clear. The toast template binds
17
+ * {@link status}, {@link progress}, {@link downloading} and {@link busy}.
18
+ */
19
+ export declare class SegmentationRunner {
20
+ private readonly messages;
21
+ readonly toastKey: string;
22
+ readonly resultKey: string;
23
+ /** Re-render the toast (its feeds may fire outside the zone). */
24
+ private readonly changed;
25
+ status: string;
26
+ /** Encoder download, 0..100. */
27
+ progress: number;
28
+ downloading: boolean;
29
+ /** Any segmentation work in flight (the indeterminate spinner). */
30
+ busy: boolean;
31
+ /** Whether the sticky toast is up — re-adding it would stack one per point click. */
32
+ private shown;
33
+ constructor(messages: Pick<MessageService, 'add' | 'clear'>, toastKey: string, resultKey: string,
34
+ /** Re-render the toast (its feeds may fire outside the zone). */
35
+ changed: () => void);
36
+ /** Surface the interactive SAM point tool's status and download progress, which runs
37
+ * inside the renderer on each click (the first click pulls the encoder). */
38
+ bindPointTool(tool: SegmentationProgress & {
39
+ busy$: Observable<boolean>;
40
+ }, until$: Observable<unknown>): void;
41
+ /**
42
+ * Run `op` with the tool's status and download progress in the sticky toast, then
43
+ * report the outcome: the region count (or the tool's last status line) on success,
44
+ * the error on failure. The toast stays until the run settles.
45
+ */
46
+ run(label: string, tool: SegmentationProgress, op: () => Promise<number>): Promise<void>;
47
+ /** Show the sticky toast once (idempotent). */
48
+ show(summary: string): void;
49
+ /** Dismiss the sticky toast and reset its progress/spinner state. */
50
+ hide(): void;
51
+ private onProgress;
52
+ }
@@ -0,0 +1,87 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { MenuItem } from 'primeng/api';
3
+ import { ToolbarToolContribution } from '../../contracts/toolbar-tool.contract';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * The toolbar's segmentation group: SAM box prompt, SAM point prompts and the
7
+ * shared SAM model picker, cellpose, and the contributed no-prompt tools (run,
8
+ * pick checkpoint, parameters). Presentational: the host runs every action.
9
+ */
10
+ export declare class SegmentationToolsComponent implements OnChanges {
11
+ /** The armed tool's mode (`samPoint` highlights the point-prompt button), or null. */
12
+ activeDragMode: string | null;
13
+ /** SAM model picker options + current selection (jit-ui#90 P1). */
14
+ samModels: {
15
+ id: string;
16
+ label: string;
17
+ }[];
18
+ /** The selected SAM model id. */
19
+ samModelId: string;
20
+ /** Contributed no-prompt tools, already filtered and sorted by the host. */
21
+ contributedTools: ToolbarToolContribution[];
22
+ /** Active checkpoint per contributed tool, keyed by tool id. */
23
+ toolModelIds: Record<string, string>;
24
+ /** Run box-prompted SAM segmentation on the drawn rectangles (jit-ui#90). */
25
+ segmentRegions: EventEmitter<void>;
26
+ /** Run cellpose-SAM (auto) inside each drawn rectangle's crop (jit-ui#90). */
27
+ segmentCellpose: EventEmitter<void>;
28
+ /** The SAM point tool's toggle ('samPoint'). */
29
+ toggleDragMode: EventEmitter<string>;
30
+ /** A SAM model was picked from the model menu (its id). */
31
+ samModelChange: EventEmitter<string>;
32
+ /** Run a contributed tool over the current view (its id). */
33
+ runTool: EventEmitter<string>;
34
+ /** A contributed tool's checkpoint was picked. */
35
+ toolModelChange: EventEmitter<{
36
+ toolId: string;
37
+ modelId: string;
38
+ }>;
39
+ /** Open a contributed tool's parameter dialog (its id). */
40
+ openToolParams: EventEmitter<string>;
41
+ /** Model picker for the Segment button's dropdown menu. The active model
42
+ * (`samModelId`) is marked with a check; selecting an item emits
43
+ * `samModelChange` (jit-ui#90 P1).
44
+ *
45
+ * Held as a stable array (rebuilt only when `samModels`/`samModelId` change),
46
+ * NOT a getter: a getter returns a fresh array with new `command` closures on
47
+ * every change-detection tick, which makes the bound `p-menu` overlay rebuild
48
+ * its DOM mid-interaction and swallow the click on a menu item.
49
+ *
50
+ * `tooltip` carries the model's description from {@link MODEL_INFO}; the
51
+ * menus' shared item template turns it into the hover info icon. p-menu's own
52
+ * rendering ignores the field (it reads `item.title`), so it is free to use. */
53
+ protected samMenuItems: MenuItem[];
54
+ /**
55
+ * Model menus for the contributed tools, keyed by tool id. Same stable-array
56
+ * reasoning as {@link samMenuItems} — and it is why this is a map rebuilt in
57
+ * `ngOnChanges` rather than a method called from the template, which would
58
+ * hand `p-menu` a new array every tick.
59
+ *
60
+ * A contributed tool supplies its own per-model description, so unlike the
61
+ * SAM menu these do not consult {@link MODEL_INFO}: this library has no
62
+ * copy for checkpoints it does not know about.
63
+ */
64
+ protected toolMenuItems: Record<string, MenuItem[]>;
65
+ ngOnChanges(changes: SimpleChanges): void;
66
+ /**
67
+ * Strip markup from a model description so it can be read aloud.
68
+ *
69
+ * The copy in MODEL_INFO and in a contribution's `ToolModelOption.info` is
70
+ * written for a visual tooltip rendered with `[escape]="false"`, so it carries
71
+ * `<b>` and `<br>`. Passed to `aria-label` verbatim a screen reader announces
72
+ * the tags, so they are removed and `<br>` becomes a sentence break. Entities
73
+ * used in that copy (`&nbsp;`, `&times;`, `&amp;`) are decoded for the same
74
+ * reason.
75
+ */
76
+ protected plainText(html: string): string;
77
+ /** The info button's `aria-label` (`infoLabel` on a menu item), built once with the
78
+ * menu rather than by a template call on every check; none without a description. */
79
+ private infoLabel;
80
+ /** Keeps each contributed tool's `p-menu` overlay alive across CD ticks —
81
+ * re-creating it mid-interaction swallows the click on a menu item. */
82
+ protected trackToolById(_index: number, tool: {
83
+ id: string;
84
+ }): string;
85
+ static ɵfac: i0.ɵɵFactoryDeclaration<SegmentationToolsComponent, never>;
86
+ static ɵcmp: i0.ɵɵComponentDeclaration<SegmentationToolsComponent, "toolbar-segmentation-tools", never, { "activeDragMode": { "alias": "activeDragMode"; "required": false; }; "samModels": { "alias": "samModels"; "required": false; }; "samModelId": { "alias": "samModelId"; "required": false; }; "contributedTools": { "alias": "contributedTools"; "required": false; }; "toolModelIds": { "alias": "toolModelIds"; "required": false; }; }, { "segmentRegions": "segmentRegions"; "segmentCellpose": "segmentCellpose"; "toggleDragMode": "toggleDragMode"; "samModelChange": "samModelChange"; "runTool": "runTool"; "toolModelChange": "toolModelChange"; "openToolParams": "openToolParams"; }, never, never, true, never>;
87
+ }
@@ -0,0 +1,51 @@
1
+ import { EventEmitter, OnDestroy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** A stack-mode choice (`val` 'false' = single image, 'true' = stack). */
4
+ export interface StackOption {
5
+ name: string;
6
+ val: string;
7
+ }
8
+ /**
9
+ * The toolbar's z-stack group: the slice bar, and (Plotly heatmap) the single-image / stack
10
+ * toggle. The views that swap slices in place follow the bar as it moves; the heatmap's single
11
+ * image is re-plotted at the slice it settles on. Presentational: the host owns `zIndex`.
12
+ */
13
+ export declare class StackControlsComponent implements OnDestroy {
14
+ /** Show the live slice scrubber. */
15
+ liveScrubber: boolean;
16
+ /** Show the single-image / stack toggle (Plotly heatmap). */
17
+ stackToggle: boolean;
18
+ /** Stack mode is on (the toggle's state). */
19
+ showStack: boolean;
20
+ /** The two stack-mode choices of the toggle. */
21
+ stackOptions: StackOption[];
22
+ /** The current slice (0-based). */
23
+ zIndex: number;
24
+ /** The last slice index. */
25
+ maxIndex: number;
26
+ /** The live scrubber moved (fires while dragging). */
27
+ zScrub: EventEmitter<number | undefined>;
28
+ /** The live scrubber was released on a slice. */
29
+ zSlide: EventEmitter<number | undefined>;
30
+ /** A stack-mode choice was picked. */
31
+ selectStackOption: EventEmitter<StackOption>;
32
+ /** The heatmap's slice bar moved to a slice (the host shows its number). */
33
+ zIndexInput: EventEmitter<number>;
34
+ /** The heatmap's slice bar settled: re-plot at that slice. */
35
+ reloadAndPlot: EventEmitter<void>;
36
+ /** How long key steps on the heatmap's bar pause before the slice is re-plotted. */
37
+ static readonly REPLOT_DELAY_MS = 400;
38
+ /** A drag of the bar is under way (its end re-plots the heatmap, not each step). */
39
+ protected dragging: boolean;
40
+ private replot;
41
+ /** The heatmap in single-image mode: its bar re-plots the slice it settles on. */
42
+ protected get singleImage(): boolean;
43
+ /** The bar moved: a live view follows it; the heatmap shows the number, and re-plots after key steps pause. */
44
+ protected onSliceChange(z: number | undefined): void;
45
+ /** The bar was let go (a drag's end, or a click on its track). */
46
+ protected onSliceEnd(z: number | undefined): void;
47
+ private cancelReplot;
48
+ ngOnDestroy(): void;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<StackControlsComponent, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<StackControlsComponent, "toolbar-stack-controls", never, { "liveScrubber": { "alias": "liveScrubber"; "required": false; }; "stackToggle": { "alias": "stackToggle"; "required": false; }; "showStack": { "alias": "showStack"; "required": false; }; "stackOptions": { "alias": "stackOptions"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "maxIndex": { "alias": "maxIndex"; "required": false; }; }, { "zScrub": "zScrub"; "zSlide": "zSlide"; "selectStackOption": "selectStackOption"; "zIndexInput": "zIndexInput"; "reloadAndPlot": "reloadAndPlot"; }, never, never, true, never>;
51
+ }
@@ -0,0 +1,21 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ /**
3
+ * Status, busy flag and progress of a long-running (download / inference) tool,
4
+ * plus the re-entrancy guard that goes with them.
5
+ */
6
+ export declare class AsyncToolStatus {
7
+ /** Status text for a toast / spinner label. */
8
+ readonly status$: BehaviorSubject<string>;
9
+ /** True from the start of a run until it settles. */
10
+ readonly busy$: BehaviorSubject<boolean>;
11
+ /** Download progress: -1 = not downloading, 0..1 = downloading. */
12
+ readonly progress$: BehaviorSubject<number>;
13
+ get busy(): boolean;
14
+ /**
15
+ * Run `job` unless a run is already in flight (then resolve `undefined` at
16
+ * once). Busy is set *before* the first await — a model download is exactly
17
+ * the window a second press must not start another run in — and busy and
18
+ * progress are reset however the job ends.
19
+ */
20
+ run<T>(job: () => Promise<T>): Promise<T | undefined>;
21
+ }
@@ -0,0 +1,36 @@
1
+ import type { CanvasToolId } from '../../contracts/display-types';
2
+ import { CanvasToolHost, ICanvasTool } from './canvas-tool';
3
+ /**
4
+ * One backend's canvas tools. Each backend (Plotly, OpenSeadragon, napari-js)
5
+ * creates its own manager with its own {@link CanvasToolHost} and its own tool
6
+ * instances, so arming a tool never re-binds a tool another backend is using,
7
+ * and a backend switch never carries a stroke or SAM points across (RT-21).
8
+ * At most one tool is armed at a time.
9
+ */
10
+ export declare class CanvasToolManager {
11
+ private readonly host;
12
+ private readonly tools;
13
+ private active;
14
+ constructor(host: CanvasToolHost, tools: ReadonlyArray<ICanvasTool<never>>);
15
+ /** The armed tool's id, or null. */
16
+ get activeId(): CanvasToolId | null;
17
+ /** Whether this manager has a tool for `id`. */
18
+ has(id: string | null | undefined): id is CanvasToolId;
19
+ /** The tool with this id, typed by the caller. */
20
+ get<T extends ICanvasTool<never>>(id: CanvasToolId): T | undefined;
21
+ /**
22
+ * Arm `id` with `options`, disarming the armed tool first. null — or an id
23
+ * this manager has no tool for, such as a region draw mode — disarms only.
24
+ * Arming the armed tool again forwards `options` and keeps its work in progress.
25
+ */
26
+ activate(id: string | null, options?: unknown): void;
27
+ /** Disarm the armed tool, if any. */
28
+ deactivate(): void;
29
+ /** Forward live options to a tool, armed or not. */
30
+ setOptions(id: CanvasToolId, options: unknown): void;
31
+ /** Drop one tool's work in progress (it stays armed). */
32
+ reset(id: CanvasToolId): void;
33
+ /** Drop every tool's work in progress — after undo/redo or an image switch,
34
+ * where a stroke or prompt no longer matches the regions on screen. */
35
+ resetAll(): void;
36
+ }