@jax-data-science/sci-image-visualizer 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/README.md +201 -460
  2. package/esm2022/index.mjs +28 -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/instance-segmenter.contract.mjs +1 -1
  12. package/esm2022/lib/contracts/intensity.mjs +48 -5
  13. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  14. package/esm2022/lib/contracts/plot-type.mjs +134 -17
  15. package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
  16. package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
  17. package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
  18. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
  19. package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
  20. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  21. package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
  22. package/esm2022/lib/contracts/sam.contract.mjs +1 -1
  23. package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
  24. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  25. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
  26. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  27. package/esm2022/lib/contracts/viz-config.mjs +2 -1
  28. package/esm2022/lib/geometry/contour.mjs +63 -0
  29. package/esm2022/lib/geometry/raster.mjs +98 -0
  30. package/esm2022/lib/geometry/ring.mjs +201 -0
  31. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
  32. package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
  33. package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
  34. package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
  35. package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
  36. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
  37. package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +3 -4
  38. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +66 -0
  39. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +157 -591
  40. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
  41. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
  42. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
  43. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
  44. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +263 -0
  45. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
  46. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
  47. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
  48. package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
  49. package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
  50. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +344 -0
  51. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +361 -4184
  52. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +439 -0
  53. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
  54. package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
  55. package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
  56. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +182 -0
  57. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
  58. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
  59. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
  60. package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
  61. package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
  62. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
  63. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
  64. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
  65. package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
  66. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
  67. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
  68. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
  69. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
  70. package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
  71. package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
  72. package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
  73. package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
  74. package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
  75. package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +153 -0
  76. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +185 -718
  77. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
  78. package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
  79. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
  80. package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
  81. package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
  82. package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
  83. package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
  84. package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
  85. package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
  86. package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
  87. package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
  88. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
  89. package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
  90. package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
  91. package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
  92. package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
  93. package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
  94. package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
  95. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
  96. package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
  97. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
  98. package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
  99. package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
  100. package/esm2022/lib/implementations/region-centroids.mjs +47 -0
  101. package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
  102. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
  103. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
  104. package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
  105. package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
  106. package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
  107. package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
  108. package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
  109. package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
  110. package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
  111. package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
  112. package/esm2022/lib/models/bezier.mjs +1 -11
  113. package/esm2022/lib/models/class-preset.mjs +41 -3
  114. package/esm2022/lib/models/geometry.mjs +27 -164
  115. package/esm2022/lib/models/polygon-edit.mjs +254 -0
  116. package/esm2022/lib/models/polygon-factory.mjs +118 -0
  117. package/esm2022/lib/models/region-clone.mjs +68 -0
  118. package/esm2022/lib/models/region-geojson.mjs +373 -0
  119. package/esm2022/lib/models/region.mjs +34 -33
  120. package/esm2022/lib/models/shape.mjs +18 -16
  121. package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
  122. package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
  123. package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
  124. package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
  125. package/esm2022/lib/plot.utilities.mjs +296 -473
  126. package/esm2022/lib/processing/image-crop.mjs +1 -1
  127. package/esm2022/lib/processing/processing-image.mjs +28 -15
  128. package/esm2022/lib/provide-visualization.mjs +40 -14
  129. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +99 -0
  130. package/esm2022/lib/region-editor/file-stem.mjs +13 -0
  131. package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
  132. package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
  133. package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
  134. package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
  135. package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
  136. package/esm2022/lib/region-editor/region-editor.component.mjs +402 -651
  137. package/esm2022/lib/region-editor/region-metrics.mjs +68 -0
  138. package/esm2022/lib/region-editor/region-persistence.service.mjs +134 -0
  139. package/esm2022/lib/region-editor/region-table/region-table.component.mjs +153 -0
  140. package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
  141. package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
  142. package/esm2022/lib/region-ops.service.mjs +28 -70
  143. package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
  144. package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
  145. package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
  146. package/esm2022/lib/render-orchestrator.mjs +14 -11
  147. package/esm2022/lib/render-session.mjs +207 -0
  148. package/esm2022/lib/routing-visualizer.service.mjs +459 -411
  149. package/esm2022/lib/spatial/density-raster.mjs +14 -0
  150. package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
  151. package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
  152. package/esm2022/lib/spatial/gene-search.mjs +1 -1
  153. package/esm2022/lib/spatial/glyphs.mjs +97 -0
  154. package/esm2022/lib/spatial/lod.mjs +187 -0
  155. package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
  156. package/esm2022/lib/spatial/spatial-density.mjs +25 -16
  157. package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
  158. package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
  159. package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
  160. package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
  161. package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
  162. package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
  163. package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
  164. package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
  165. package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
  166. package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
  167. package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
  168. package/esm2022/lib/spatial/stats.mjs +71 -0
  169. package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
  170. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
  171. package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
  172. package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
  173. package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
  174. package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
  175. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
  176. package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
  177. package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
  178. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
  179. package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
  180. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
  181. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
  182. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
  183. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
  184. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
  185. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
  186. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
  187. package/esm2022/lib/store/class-color.util.mjs +46 -3
  188. package/esm2022/lib/store/region-history.mjs +146 -0
  189. package/esm2022/lib/store/region-scope-cache.mjs +140 -0
  190. package/esm2022/lib/store/region-selection.mjs +82 -0
  191. package/esm2022/lib/store/region-store.service.mjs +279 -675
  192. package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
  193. package/esm2022/lib/store/visualizer-store.service.mjs +49 -71
  194. package/esm2022/lib/toast-outlets.mjs +5 -4
  195. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
  196. package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
  197. package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
  198. package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
  199. package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
  200. package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +114 -0
  201. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
  202. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
  203. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
  204. package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
  205. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
  206. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
  207. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
  208. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
  209. package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
  210. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
  211. package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
  212. package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
  213. package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
  214. package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +81 -0
  215. package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
  216. package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
  217. package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
  218. package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
  219. package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
  220. package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
  221. package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
  222. package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
  223. package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
  224. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
  225. package/esm2022/lib/toolbar/toolbar.component.mjs +68 -117
  226. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
  227. package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
  228. package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
  229. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
  230. package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
  231. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
  232. package/esm2022/lib/util/mark-for-check.mjs +17 -0
  233. package/esm2022/lib/util/supersede.mjs +56 -0
  234. package/esm2022/lib/visualization.module.mjs +39 -141
  235. package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
  236. package/esm2022/lib/visualizer/region-actions.mjs +149 -0
  237. package/esm2022/lib/visualizer/region-load.mjs +60 -0
  238. package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
  239. package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
  240. package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
  241. package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
  242. package/esm2022/lib/visualizer.component.mjs +480 -1902
  243. package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
  244. package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
  245. package/esm2022/lib/workers/spatial-math.mjs +190 -0
  246. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs +41083 -0
  247. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +1 -0
  248. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs +238 -0
  249. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map +1 -0
  250. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
  251. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
  252. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34430
  253. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  254. package/fesm2022/mask.worker.js +36 -917
  255. package/fesm2022/onnx-sam.worker.js +52 -16
  256. package/fesm2022/spatial-math.worker.js +471 -0
  257. package/fesm2022/tsne.worker.js +32 -15
  258. package/index.d.ts +13 -10
  259. package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
  260. package/lib/contracts/capabilities.contract.d.ts +4 -2
  261. package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
  262. package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
  263. package/lib/contracts/color.d.ts +27 -0
  264. package/lib/contracts/colormap-lut.d.ts +19 -4
  265. package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
  266. package/lib/contracts/display-types.d.ts +21 -0
  267. package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
  268. package/lib/contracts/intensity.d.ts +13 -2
  269. package/lib/contracts/plot-type.d.ts +3 -1
  270. package/lib/contracts/ports/image-state.port.d.ts +6 -2
  271. package/lib/contracts/ports/preferences.port.d.ts +4 -0
  272. package/lib/contracts/ports/region-io.port.d.ts +1 -0
  273. package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
  274. package/lib/contracts/ports/tile-access.port.d.ts +1 -0
  275. package/lib/contracts/region-editor-api.contract.d.ts +1 -1
  276. package/lib/contracts/region-overlay.contract.d.ts +5 -0
  277. package/lib/contracts/sam.contract.d.ts +7 -0
  278. package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
  279. package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
  280. package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
  281. package/lib/contracts/visualizer.contract.d.ts +221 -54
  282. package/lib/contracts/viz-config.d.ts +1 -0
  283. package/lib/geometry/contour.d.ts +24 -0
  284. package/lib/geometry/raster.d.ts +42 -0
  285. package/lib/geometry/ring.d.ts +67 -0
  286. package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
  287. package/lib/implementations/base-store-visualizer.d.ts +61 -15
  288. package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
  289. package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
  290. package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
  291. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
  292. package/lib/implementations/napari-js/napari-loading-badge.d.ts +0 -1
  293. package/lib/implementations/napari-js/napari-loading-state.d.ts +30 -0
  294. package/lib/implementations/napari-js/napari-region-overlay.d.ts +62 -70
  295. package/lib/implementations/napari-js/napari-scene.d.ts +93 -0
  296. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
  297. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
  298. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
  299. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +89 -0
  300. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
  301. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
  302. package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
  303. package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
  304. package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
  305. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
  306. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +121 -878
  307. package/lib/implementations/napari-js/napari-volume-scene.d.ts +104 -0
  308. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
  309. package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
  310. package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
  311. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
  312. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
  313. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
  314. package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
  315. package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
  316. package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
  317. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
  318. package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
  319. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
  320. package/lib/implementations/osd/display-pipeline.d.ts +38 -9
  321. package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
  322. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
  323. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
  324. package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
  325. package/lib/implementations/osd/osd-coords.d.ts +6 -4
  326. package/lib/implementations/osd/osd-export.d.ts +36 -0
  327. package/lib/implementations/osd/osd-lib.d.ts +7 -0
  328. package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
  329. package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
  330. package/lib/implementations/osd/osd-region-overlay-draw.d.ts +37 -0
  331. package/lib/implementations/osd/osd-region-overlay.d.ts +36 -48
  332. package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
  333. package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
  334. package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
  335. package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
  336. package/lib/implementations/osd/osd-viewport.d.ts +77 -0
  337. package/lib/implementations/osd/osd-zoom.d.ts +6 -0
  338. package/lib/implementations/osd/simple-source.d.ts +161 -0
  339. package/lib/implementations/osd/slice-cache.d.ts +12 -3
  340. package/lib/implementations/osd/tile-client.d.ts +11 -14
  341. package/lib/implementations/osd/tile-recolor.d.ts +141 -0
  342. package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
  343. package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
  344. package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
  345. package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
  346. package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
  347. package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
  348. package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
  349. package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
  350. package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
  351. package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
  352. package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
  353. package/lib/implementations/plotly/plotly.service.d.ts +136 -401
  354. package/lib/implementations/region-centroids.d.ts +14 -0
  355. package/lib/implementations/simple-slice-access.service.d.ts +7 -4
  356. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
  357. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
  358. package/lib/implementations/tile-server/index.d.ts +5 -0
  359. package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
  360. package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
  361. package/lib/implementations/tile-server/tile-protocol.d.ts +80 -0
  362. package/lib/implementations/tile-server/transport.d.ts +62 -0
  363. package/lib/intensity/intensity-profile.d.ts +66 -0
  364. package/lib/intensity/intensity-profile.service.d.ts +108 -0
  365. package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
  366. package/lib/models/bezier.d.ts +0 -5
  367. package/lib/models/class-preset.d.ts +18 -0
  368. package/lib/models/geometry.d.ts +14 -48
  369. package/lib/models/polygon-edit.d.ts +72 -0
  370. package/lib/models/polygon-factory.d.ts +40 -0
  371. package/lib/models/region-clone.d.ts +20 -0
  372. package/lib/models/region-geojson.d.ts +17 -0
  373. package/lib/models/region.d.ts +40 -4
  374. package/lib/models/shape.d.ts +8 -0
  375. package/lib/plot-mode/contribution-host.d.ts +125 -0
  376. package/lib/plot-mode/plot-type-menu.d.ts +60 -0
  377. package/lib/plot-mode/tool-params-model.d.ts +49 -0
  378. package/lib/plot.utilities.d.ts +19 -30
  379. package/lib/processing/processing-image.d.ts +5 -2
  380. package/lib/provide-visualization.d.ts +19 -2
  381. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +56 -0
  382. package/lib/region-editor/file-stem.d.ts +7 -0
  383. package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
  384. package/lib/region-editor/mask-export.service.d.ts +54 -0
  385. package/lib/region-editor/mask-raster.d.ts +2 -8
  386. package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
  387. package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
  388. package/lib/region-editor/region-editor.component.d.ts +166 -199
  389. package/lib/region-editor/region-metrics.d.ts +26 -0
  390. package/lib/region-editor/region-persistence.service.d.ts +69 -0
  391. package/lib/region-editor/region-table/region-table.component.d.ts +83 -0
  392. package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
  393. package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
  394. package/lib/region-ops.service.d.ts +1 -7
  395. package/lib/region-overlay/region-geometry.d.ts +157 -0
  396. package/lib/region-overlay/region-hit-test.d.ts +38 -0
  397. package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
  398. package/lib/render-orchestrator.d.ts +6 -2
  399. package/lib/render-session.d.ts +75 -0
  400. package/lib/routing-visualizer.service.d.ts +110 -58
  401. package/lib/spatial/density-raster.d.ts +6 -0
  402. package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
  403. package/lib/spatial/embedding-compute.d.ts +21 -2
  404. package/lib/spatial/glyphs.d.ts +16 -0
  405. package/lib/spatial/lod.d.ts +94 -0
  406. package/lib/spatial/spatial-controls.facade.d.ts +64 -0
  407. package/lib/spatial/spatial-density.d.ts +15 -5
  408. package/lib/spatial/spatial-encoding.d.ts +11 -44
  409. package/lib/spatial/spatial-expression.d.ts +40 -22
  410. package/lib/spatial/spatial-framing.d.ts +1 -0
  411. package/lib/spatial/spatial-heatmap.d.ts +2 -0
  412. package/lib/spatial/spatial-hover.d.ts +4 -16
  413. package/lib/spatial/spatial-panel-model.d.ts +135 -0
  414. package/lib/spatial/spatial-selection.d.ts +21 -26
  415. package/lib/spatial/spatial-tile-merge.d.ts +41 -0
  416. package/lib/spatial/spatial-tiles.d.ts +9 -256
  417. package/lib/spatial/stats.d.ts +38 -0
  418. package/lib/spatial/transcript-grouping.d.ts +119 -0
  419. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
  420. package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
  421. package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
  422. package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
  423. package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
  424. package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
  425. package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
  426. package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
  427. package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
  428. package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
  429. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
  430. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
  431. package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
  432. package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
  433. package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
  434. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
  435. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
  436. package/lib/store/class-color.util.d.ts +35 -1
  437. package/lib/store/region-history.d.ts +66 -0
  438. package/lib/store/region-scope-cache.d.ts +63 -0
  439. package/lib/store/region-selection.d.ts +36 -0
  440. package/lib/store/region-store.service.d.ts +104 -112
  441. package/lib/store/visualizer-store.service.d.ts +22 -33
  442. package/lib/toast-outlets.d.ts +4 -3
  443. package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
  444. package/lib/toolbar/canvas-tools.d.ts +20 -0
  445. package/lib/toolbar/crop/slide-crop.d.ts +10 -4
  446. package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
  447. package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
  448. package/lib/toolbar/region-tools/region-tools.component.d.ts +60 -0
  449. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
  450. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
  451. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
  452. package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
  453. package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
  454. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
  455. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
  456. package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
  457. package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
  458. package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
  459. package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
  460. package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
  461. package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
  462. package/lib/toolbar/stack-controls/stack-controls.component.d.ts +40 -0
  463. package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
  464. package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
  465. package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
  466. package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
  467. package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
  468. package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
  469. package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
  470. package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
  471. package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
  472. package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
  473. package/lib/toolbar/toolbar.component.d.ts +47 -83
  474. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
  475. package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
  476. package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
  477. package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
  478. package/lib/toolbar/wand/wand.service.d.ts +22 -116
  479. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
  480. package/lib/util/mark-for-check.d.ts +11 -0
  481. package/lib/util/supersede.d.ts +53 -0
  482. package/lib/visualization.module.d.ts +18 -39
  483. package/lib/visualizer/floating-drag.directive.d.ts +30 -0
  484. package/lib/visualizer/region-actions.d.ts +54 -0
  485. package/lib/visualizer/region-load.d.ts +27 -0
  486. package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
  487. package/lib/visualizer/tool-modes.d.ts +49 -0
  488. package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
  489. package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
  490. package/lib/visualizer.component.d.ts +201 -447
  491. package/lib/workers/spatial-math-ops.d.ts +65 -0
  492. package/lib/workers/spatial-math-worker.d.ts +7 -0
  493. package/lib/workers/spatial-math.d.ts +74 -0
  494. package/package.json +12 -3
  495. package/src/lib/styles/_viz-icons-rules.scss +73 -0
  496. package/src/lib/styles/viz-icons.scss +14 -0
  497. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
  498. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
  499. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
  500. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
  501. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
  502. package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
  503. package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
  504. package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
  505. package/src/lib/assets/cell-detection.svg +0 -37
  506. package/src/lib/assets/click.svg +0 -1
  507. package/src/lib/assets/colormap-luts.json +0 -1
  508. package/src/lib/assets/edit-selection-white.svg +0 -47
  509. package/src/lib/assets/icons/colormap-earth.png +0 -0
  510. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  511. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  512. package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
  513. package/src/lib/assets/picture-segmentation.svg +0 -43
  514. package/src/lib/assets/test/download-379.svg +0 -1
  515. package/src/lib/assets/test/download-98.svg +0 -1
  516. package/src/lib/assets/test/json-1.svg +0 -1
  517. package/src/lib/assets/test/load-53.svg +0 -1
  518. package/src/lib/assets/test/mask-44.svg +0 -1
  519. package/src/lib/assets/test/mask-download-44.svg +0 -15
  520. package/src/lib/assets/test/mask-save-44.svg +0 -11
  521. package/src/lib/assets/test/overlay-1.svg +0 -1
  522. package/src/lib/assets/test/overlay-4.svg +0 -1
  523. package/src/lib/assets/test/region-26.svg +0 -1
  524. package/src/lib/assets/test/save-56.svg +0 -1
  525. package/src/lib/assets/test/upload-43.svg +0 -1
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The pixel frames a backend hands the canvas tools (`CachedImageData.frames`),
3
+ * and the one accessor every tool reads them through (wand patch extraction,
4
+ * SAM encoder input, Cellpose crop).
5
+ *
6
+ * A frame is either
7
+ * - **nested** — `[y][x]` rows of grayscale values or `[r, g, b]` tuples, which
8
+ * is what the Plotly backend caches (its frames double as the heatmap data and
9
+ * may hold raw, non-8-bit intensities), or
10
+ * - **packed** — a row-major RGBA `Uint8ClampedArray`, which is what a canvas or
11
+ * GPU readback already is. OpenSeadragon and napari-js hand theirs over as-is
12
+ * instead of building one JS array per pixel (RT-17, OSD-PLOTLY-12,
13
+ * NAPARI-SVC-23).
14
+ */
15
+ /** A row-major RGBA readback (alpha is ignored). */
16
+ export interface PackedFrame {
17
+ readonly data: Uint8ClampedArray;
18
+ readonly width: number;
19
+ readonly height: number;
20
+ readonly channels: 4;
21
+ }
22
+ /** `[y][x]` grayscale values, or `[y][x]` `[r, g, b]` tuples. */
23
+ export type NestedFrame = number[][] | number[][][];
24
+ /** One frame of `CachedImageData.frames`. */
25
+ export type CachedFrame = NestedFrame | PackedFrame;
26
+ /** Whether `frame` is the packed RGBA form. */
27
+ export declare function isPackedFrame(frame: unknown): frame is PackedFrame;
28
+ /** Wrap a row-major RGBA readback as a frame, without copying it. */
29
+ export declare function packedFrame(data: Uint8ClampedArray, width: number, height: number): PackedFrame;
30
+ /** Reads one frame's pixels whatever its form. */
31
+ export interface FramePixels {
32
+ /**
33
+ * Pixel (x, y) as RGB in `out[0..2]` (a grayscale value is replicated, and
34
+ * kept unclamped). False — `out` untouched — outside the frame or for a
35
+ * missing pixel. A packed frame always reads as RGB.
36
+ */
37
+ rgb(x: number, y: number, out: number[]): boolean;
38
+ /**
39
+ * `w` pixels of row `y` from column `x0`, as opaque RGBA into `dst` from
40
+ * offset `o`. Missing pixels become opaque black.
41
+ */
42
+ rgbaRow(y: number, x0: number, w: number, dst: Uint8ClampedArray, o: number): void;
43
+ }
44
+ /** The accessor for `frame`; `isGrayscale` describes a nested frame's cells. */
45
+ export declare function framePixels(frame: CachedFrame | undefined, isGrayscale: boolean): FramePixels;
@@ -0,0 +1,125 @@
1
+ import { BBoxMask } from '../../geometry/raster';
2
+ import { IRegionDataHost } from '../../contracts/coordinate-transform.contract';
3
+ import { Polygon, Region } from '../../models/region';
4
+ import { MatrixFrame } from './matrix-frame';
5
+ import type { CachedImageData, CanvasToolHost } from './canvas-tool';
6
+ /** The readback size the stroke is painted against (the rasterizer's clip window). */
7
+ export interface StrokeImage {
8
+ width: number;
9
+ height: number;
10
+ }
11
+ /** Where a wand or brush pointer tick lands (see {@link MaskStrokeEditor.beginTick}). */
12
+ export interface StrokeTick {
13
+ /** The host's readback. */
14
+ cached: CachedImageData;
15
+ /** The current regions, mutated by the tick and committed once. */
16
+ regions: Region[];
17
+ /** The readback's data↔matrix frame. */
18
+ frame: MatrixFrame;
19
+ /** The matrix point under the pointer, inside the readback. */
20
+ mx: number;
21
+ my: number;
22
+ }
23
+ /** How a commit turns traced pieces into regions. */
24
+ export interface StrokeCommitOptions {
25
+ /** The tick erased (Shift): a stroke erased to nothing removes its regions. */
26
+ erase: boolean;
27
+ /** A brand-new region for a piece no existing region owns. */
28
+ newRegion(bounds: Polygon): Region;
29
+ /** Fields applied on top of an edited region (e.g. a painted class colour). */
30
+ editPatch?: Partial<Region>;
31
+ /** Class label given to an edited region that has none, so tool output is never unlabeled. */
32
+ defaultLabel: string;
33
+ }
34
+ /**
35
+ * The bbox-relative mask accumulator shared by the wand and the brush: adopt a
36
+ * region under the cursor, grow the mask, fold touching regions in, then trace
37
+ * every connected piece (with holes) and commit them.
38
+ *
39
+ * The accumulator survives mouseup so the next stroke extends the same region
40
+ * (QuPath behaviour). It is dropped when the view changes (its matrix coords
41
+ * are tied to the readback frame, jit-ui#102) and when its regions changed
42
+ * outside the tool (undo, Region Editor, segmentation, eraser — RT-2).
43
+ *
44
+ * Commits never mutate a store instance and never drop metadata: an edited
45
+ * region is a copy of the original with new bounds (RT-5). An erase that cuts a
46
+ * region in two keeps both pieces and a donut keeps its holes (RT-3).
47
+ */
48
+ export declare class MaskStrokeEditor {
49
+ /** The accumulated mask, in matrix coords of {@link frameSig}'s frame. */
50
+ stroke: BBoxMask | null;
51
+ /** Id of the region the stroke edits (null = a fresh region); for a split,
52
+ * the largest piece. */
53
+ regionId: number | null;
54
+ /** Ids of the extra pieces an erase split off, reused across ticks so they
55
+ * keep stable identities. */
56
+ private extraIds;
57
+ /** The bounds objects the stroke last committed or adopted, one per region it
58
+ * owns. Once any of them is no longer held by a region, the stroke is stale. */
59
+ private lastCommitted;
60
+ /** The region the stroke adopted (or first merged in): its metadata carries
61
+ * over to the committed pieces even after a merge removed it from the list. */
62
+ private template;
63
+ private frameSig;
64
+ /** Drop the stroke and everything tied to it. */
65
+ reset(): void;
66
+ /**
67
+ * Start a wand or brush tick at pointer `e`: read the host's readback and
68
+ * regions, drop a stale stroke ({@link invalidateIfStale}) or one from another
69
+ * view ({@link syncFrame}), and map the pointer into the readback's matrix.
70
+ * Null when there is no readback or ready transform, or the pointer is off it.
71
+ */
72
+ beginTick(host: CanvasToolHost, e: {
73
+ clientX: number;
74
+ clientY: number;
75
+ }): StrokeTick | null;
76
+ /** Drop a stroke whose regions were undone, deleted or replaced outside the
77
+ * tool: re-committing it would bring the old shapes back (RT-2). */
78
+ invalidateIfStale(regions: Region[]): void;
79
+ /** Drop a stroke built at a different view (zoom/pan): re-committing it would
80
+ * rescale the region by the zoom factor (jit-ui#102). */
81
+ syncFrame(frame: MatrixFrame): void;
82
+ /** True if matrix point (mx, my) is painted in the stroke. */
83
+ contains(mx: number, my: number): boolean;
84
+ /**
85
+ * Make the stroke's bbox cover [x0,x1)×[y0,y1) (matrix px), creating an empty
86
+ * stroke or growing (and copying) the existing one. False for an empty box.
87
+ */
88
+ ensureCovers(x0: number, y0: number, x1: number, y1: number): boolean;
89
+ /**
90
+ * If matrix point (mx, my) lies inside a region `accept`s (topmost first, not
91
+ * in a hole), rasterize it into the stroke so this stroke extends it.
92
+ */
93
+ adoptAt(regions: Region[], mx: number, my: number, frame: MatrixFrame, image: StrokeImage, accept?: (r: Region) => boolean): boolean;
94
+ /**
95
+ * Fold every region `accept`s whose raster overlaps the stroke into it and
96
+ * remove it from `regions` (merge-on-touch). Repeats until nothing changes so
97
+ * chained merges resolve. With no region yet, the first merged region's
98
+ * identity and metadata are adopted.
99
+ */
100
+ mergeTouching(regions: Region[], frame: MatrixFrame, image: StrokeImage, accept?: (r: Region) => boolean): void;
101
+ /**
102
+ * Trace every connected piece of the stroke (holes included) and commit them:
103
+ * the largest keeps the stroke's region, further pieces (from an erase that
104
+ * split it) become their own regions with stable ids across ticks. An erase
105
+ * that leaves nothing removes the stroke's regions.
106
+ */
107
+ commit(regions: Region[], frame: MatrixFrame, host: IRegionDataHost, opts: StrokeCommitOptions): void;
108
+ /** Remove the stroke's region(s) and reset — an erase deleted every pixel. */
109
+ dropActive(regions: Region[], host: IRegionDataHost): void;
110
+ /** The region with `id` in `regions`, or the adopted/merged template when a
111
+ * merge already removed it from the list. */
112
+ private owner;
113
+ /** Replace `existing` in place (or append it if a merge removed it). */
114
+ private upsert;
115
+ /** The fields an edit sets on `existing`: the tool's patch, plus a default label. */
116
+ private patchFor;
117
+ private insert;
118
+ /**
119
+ * A region's closed ring and holes in matrix coords, or null when it can't be
120
+ * edited as a mask: not a closed polygon (rectangles, polylines,
121
+ * multi-polygons), or too large to rasterize faithfully at this zoom — editing
122
+ * would clip or down-quantize it and bring it back rescaled (jit-ui#102).
123
+ */
124
+ private editableRing;
125
+ }
@@ -0,0 +1,40 @@
1
+ import type { CachedImageData } from './canvas-tool';
2
+ /**
3
+ * The mapping between a backend's data coordinates and the pixel matrix of a
4
+ * cached readback (`CachedImageData`): `matrix = (data - origin) / ratio` per
5
+ * axis. OSD and napari publish distinct `[ratioX, ratioY]`, so rows must use
6
+ * the Y ratio; a single ratio is used for both axes when only one is supplied.
7
+ */
8
+ export declare class MatrixFrame {
9
+ /** Data units per matrix column. */
10
+ readonly rx: number;
11
+ /** Data units per matrix row. */
12
+ readonly ry: number;
13
+ /** Data X of matrix column 0. */
14
+ readonly ox: number;
15
+ /** Data Y of matrix row 0. */
16
+ readonly oy: number;
17
+ private constructor();
18
+ /** The frame of a readback. Missing/zero ratios fall back to 1, missing origins to 0. */
19
+ static from(cached: Pick<CachedImageData, 'ratios' | 'originX' | 'originY'>): MatrixFrame;
20
+ /** Identity of the frame: a stroke built in matrix coords is only valid while this is unchanged. */
21
+ get sig(): string;
22
+ toMatrixX(x: number): number;
23
+ toMatrixY(y: number): number;
24
+ toDataX(mx: number): number;
25
+ toDataY(my: number): number;
26
+ /** A ring (parallel arrays) from data to matrix coords. */
27
+ ringToMatrix(xs: number[], ys: number[]): {
28
+ xs: number[];
29
+ ys: number[];
30
+ };
31
+ /** A ring (parallel arrays) from matrix to data coords. */
32
+ ringToData(xs: number[], ys: number[]): {
33
+ xs: number[];
34
+ ys: number[];
35
+ };
36
+ /** Hole rings (`[[x, y], …]`) from data to matrix coords. */
37
+ holesToMatrix(holes: number[][][] | undefined): number[][][] | undefined;
38
+ /** Hole rings (`[[x, y], …]`) from matrix to data coords. */
39
+ holesToData(holes: number[][][] | undefined): number[][][] | undefined;
40
+ }
@@ -0,0 +1,60 @@
1
+ /** Pointer callbacks of an on-canvas tool. */
2
+ export interface ToolOverlayHandlers {
3
+ /** Primary-button press (other buttons are ignored). The pointer is captured,
4
+ * so the drag keeps reporting moves and its release outside the canvas. */
5
+ down?(e: PointerEvent): void;
6
+ /** Every move, pressed or hovering. */
7
+ move?(e: PointerEvent): void;
8
+ /** Release, cancel, or leaving the canvas without a capture. */
9
+ up?(e: PointerEvent): void;
10
+ /** The canvas backing store was resized (its contents were cleared). */
11
+ resize?(): void;
12
+ }
13
+ /**
14
+ * The transparent canvas an on-canvas tool (wand, brush, vertex eraser,
15
+ * zoom-to-box, SAM point) lays over the plot to take the pointer:
16
+ *
17
+ * - absolute, 100 % of the container, above the renderer (z-index 100);
18
+ * - pointer events (mouse, pen, touch) with pointer capture, so a drag that
19
+ * leaves the canvas keeps going instead of ending at the edge;
20
+ * - only the primary button starts a gesture;
21
+ * - a backing store sized to the container × devicePixelRatio and kept in step
22
+ * by a ResizeObserver, so drawing stays sharp and aligned after a panel or
23
+ * window resize (RT-31). {@link context} draws in CSS pixels.
24
+ */
25
+ export declare class ToolOverlayCanvas {
26
+ private canvas;
27
+ private handlers;
28
+ private resizeObserver?;
29
+ private readonly listeners;
30
+ /** The overlay canvas while attached. */
31
+ get element(): HTMLCanvasElement | null;
32
+ get attached(): boolean;
33
+ /** Width / height in CSS pixels. */
34
+ get cssWidth(): number;
35
+ get cssHeight(): number;
36
+ /** Lay the canvas over `container` (no-op when already attached). */
37
+ attach(container: HTMLElement, handlers: ToolOverlayHandlers, cursor?: string): HTMLCanvasElement;
38
+ /** Remove the canvas and its listeners (no-op when detached). */
39
+ detach(): void;
40
+ /** The 2D context, scaled so drawing coordinates are CSS pixels. */
41
+ context(): CanvasRenderingContext2D | null;
42
+ /** Clear the whole canvas. */
43
+ clear(): void;
44
+ /** An event's position relative to the canvas, in CSS pixels. */
45
+ toLocal(e: {
46
+ clientX: number;
47
+ clientY: number;
48
+ }): {
49
+ x: number;
50
+ y: number;
51
+ };
52
+ private onDown;
53
+ private onUp;
54
+ /** Leaving ends a drag only when nothing captured the pointer (a captured
55
+ * drag continues outside the canvas until release). */
56
+ private onLeave;
57
+ /** Size the backing store to the container × DPR. True when it changed. */
58
+ private fit;
59
+ private dpr;
60
+ }
@@ -0,0 +1,17 @@
1
+ /** The part of RegionStore a tool needs to make one drag one undo step. */
2
+ export interface UndoGestureTarget {
3
+ beginGesture(): void;
4
+ endGesture(): void;
5
+ }
6
+ /**
7
+ * Brackets one pointer drag as a single undo step on the region store (RT-12):
8
+ * `begin()` on pointer-down, `end()` on pointer-up/leave or deactivation.
9
+ * Idempotent, so every exit path can call `end()`. A no-op without a target.
10
+ */
11
+ export declare class UndoGesture {
12
+ private readonly target;
13
+ private open;
14
+ constructor(target: UndoGestureTarget | null | undefined);
15
+ begin(): void;
16
+ end(): void;
17
+ }
@@ -0,0 +1,33 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * A labelled toolbar slider: label, p-slider, value readout. Used for the
5
+ * brush size, wand sensitivity, vertex-eraser radius and the isosurface band
6
+ * (`range`). Presentational: the host owns the value.
7
+ */
8
+ export declare class ToolSliderComponent {
9
+ /** The label before the slider. */
10
+ label: string;
11
+ /** A number, or `[low, high]` with {@link range}. */
12
+ value: number | number[];
13
+ /** Lower bound of the slider. */
14
+ min: number;
15
+ /** Upper bound of the slider. */
16
+ max: number;
17
+ /** Slider step. */
18
+ step: number;
19
+ /** A two-handle range slider: {@link value} is `[low, high]`. */
20
+ range: boolean;
21
+ /** Tooltip (HTML). */
22
+ tooltip: string;
23
+ /** The readout after the slider. */
24
+ valueText: string;
25
+ /** Slider moved: its value (or values with {@link range}); PrimeNG may report none. */
26
+ valueChange: EventEmitter<number | number[] | undefined>;
27
+ protected onChange(event: {
28
+ value?: number;
29
+ values?: number[];
30
+ }): void;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolSliderComponent, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolSliderComponent, "toolbar-tool-slider", never, { "label": { "alias": "label"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "range": { "alias": "range"; "required": false; }; "tooltip": { "alias": "tooltip"; "required": false; }; "valueText": { "alias": "valueText"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
33
+ }
@@ -0,0 +1,24 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { ToolbarDialogToolContribution, ToolbarToolContribution } from '../../contracts/toolbar-tool.contract';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * The plotting toolbar's help dialog: static documentation of every tool, plus
6
+ * the help each contributed tool brings.
7
+ */
8
+ export declare class ToolbarHelpDialogComponent implements OnChanges {
9
+ /** The dialog is open. */
10
+ visible: boolean;
11
+ /** The dialog was closed (`false`); two-way with {@link visible}. */
12
+ visibleChange: EventEmitter<boolean>;
13
+ /** Contributed no-prompt tools (their help entries are listed). */
14
+ contributedTools: ToolbarToolContribution[];
15
+ /** Contributed dialog tools (their help entries are listed). */
16
+ dialogTools: ToolbarDialogToolContribution[];
17
+ /** Contributed tool names for the prompted/no-prompt contrast, e.g.
18
+ * "YOLO, Retinal layers". Empty when nothing is registered, which is why
19
+ * the sentence that uses it is itself conditional. */
20
+ protected contributedToolNames: string;
21
+ ngOnChanges(changes: SimpleChanges): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarHelpDialogComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarHelpDialogComponent, "toolbar-help-dialog", never, { "visible": { "alias": "visible"; "required": false; }; "contributedTools": { "alias": "contributedTools"; "required": false; }; "dialogTools": { "alias": "dialogTools"; "required": false; }; }, { "visibleChange": "visibleChange"; }, never, never, true, never>;
24
+ }
@@ -1,5 +1,4 @@
1
- import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
- import { MenuItem } from 'primeng/api';
1
+ import { EventEmitter } from '@angular/core';
3
2
  import { IImageInfo } from '../contracts/image.contract';
4
3
  import { PlotType, PlotTypeId } from '../contracts/plot-type';
5
4
  import { ToolbarToolVisibility } from '../contracts/toolbar-config';
@@ -18,13 +17,13 @@ import * as i0 from "@angular/core";
18
17
  * diagram's right-click context menu and keyboard shortcuts, so keeping the
19
18
  * handlers in the host avoids duplicating that logic.
20
19
  */
21
- export declare class ToolbarComponent implements OnChanges {
20
+ export declare class ToolbarComponent {
22
21
  /** Current image (gates which control groups are shown). */
23
22
  imageInfo: IImageInfo | undefined;
24
23
  /** A spatial dataset is on offer: its plot modes are a choice even with no image loaded. */
25
24
  hasSpatialDataset: boolean;
26
25
  /** Whether the plot-type dropdown shows: for an image, or a spatial dataset with none. */
27
- get showPlotTypes(): boolean;
26
+ protected get showPlotTypes(): boolean;
28
27
  /** Plot types the active backend advertises, then any contributed modes. */
29
28
  plotTypeOptions: PlotTypeOption[];
30
29
  /** The selector's value: a built-in type or a contributed mode's id. */
@@ -40,7 +39,9 @@ export declare class ToolbarComponent implements OnChanges {
40
39
  /** Isosurface band as a 0–255 slider position (mapped onto the volume's real
41
40
  * intensity range by the renderer). Defaults to the full range. */
42
41
  isoRange: number[];
42
+ /** The last slice index of a stack. */
43
43
  maxIndex: number;
44
+ /** The current slice (0-based). */
44
45
  zIndex: number;
45
46
  /** True for any 2D (non Surface-3D) plot type. */
46
47
  isHeatmap: boolean;
@@ -51,20 +52,21 @@ export declare class ToolbarComponent implements OnChanges {
51
52
  * controls — flipping that would show 2D pan/zoom and hide the orbit controls.
52
53
  */
53
54
  is3dRegions: boolean;
55
+ /** The armed tool's mode (zoom, pan, a drawing tool, `samPoint`, …), or null. */
54
56
  activeDragMode: string | null;
57
+ /** The 3D camera mode (`turntable` / `orbit` / …). */
55
58
  activeSurface3dMode: string;
56
59
  /** Whether the napari 3D axes/scale gizmo is currently shown (drives the toggle's look). */
57
60
  axesVisible: boolean;
61
+ /** The napari surface wireframe is on. */
58
62
  wireframeActive: boolean;
59
63
  /** Active napari 3D decimate factor (1 = Full … 8 = ⅛; default ½). */
60
64
  resolutionScale: number;
61
- /** Decimate-factor options for the Resolution dropdown. */
62
- readonly decimateOptions: {
63
- label: string;
64
- value: number;
65
- }[];
65
+ /** Magic-wand sensitivity. */
66
66
  wandSensitivity: number;
67
+ /** Brush diameter in image pixels. */
67
68
  brushSize: number;
69
+ /** Vertex-eraser radius in image pixels. */
68
70
  vertexEraserRadius: number;
69
71
  /** Whether a region action is available to undo (jit-ui#85). Greys out the
70
72
  * Undo button when false (nothing done yet, or all steps already undone). */
@@ -72,6 +74,7 @@ export declare class ToolbarComponent implements OnChanges {
72
74
  /** Whether an undone region action is available to redo (jit-ui#85). Greys
73
75
  * out the Redo button when false. */
74
76
  canRedo: boolean;
77
+ /** The single-image / stack choices of the Plotly stack toggle. */
75
78
  stackOptions: {
76
79
  name: string;
77
80
  val: string;
@@ -87,6 +90,7 @@ export declare class ToolbarComponent implements OnChanges {
87
90
  id: string;
88
91
  label: string;
89
92
  }[];
93
+ /** The selected SAM model id. */
90
94
  samModelId: string;
91
95
  /**
92
96
  * Tools contributed through {@link TOOLBAR_TOOLS}, already filtered to the
@@ -100,31 +104,46 @@ export declare class ToolbarComponent implements OnChanges {
100
104
  openDialogToolId: string | null;
101
105
  /** Active checkpoint per contributed tool, keyed by tool id. */
102
106
  toolModelIds: Record<string, string>;
107
+ /** A plot type or contributed mode was picked. */
103
108
  selectPlotType: EventEmitter<string>;
104
109
  /** Intensity (LINE) mode: add another colored line ROI + inset trace. */
105
110
  addProfileLine: EventEmitter<void>;
106
111
  /** Toggle image smoothing (bilinear) vs nearest-neighbour (crisp pixels). */
107
112
  toggleImageSmoothing: EventEmitter<void>;
113
+ /** The isosurface band slider moved: the new `[low, high]` pair. */
108
114
  isoRangeChange: EventEmitter<number[] | undefined>;
109
115
  /** Open the Channels & Histogram dialog (brightness/contrast, colormap, …). */
110
116
  openChannelHistogram: EventEmitter<void>;
111
117
  /** Open the spatial-omics controls (colour-by, legend, point display). */
112
118
  openSpatialControls: EventEmitter<void>;
119
+ /** Open the Region Editor dialog. */
113
120
  openRegionEditor: EventEmitter<void>;
121
+ /** A single-image / stack choice was picked. */
114
122
  selectStackOption: EventEmitter<{
115
123
  name: string;
116
124
  val: string;
117
125
  }>;
126
+ /** The live slice scrubber moved (fires while dragging). */
118
127
  zScrub: EventEmitter<number | undefined>;
128
+ /** The live slice scrubber was released on a slice. */
119
129
  zSlide: EventEmitter<number | undefined>;
130
+ /** A slice number was typed. */
120
131
  zIndexInput: EventEmitter<number>;
132
+ /** Re-plot at the typed slice. */
121
133
  reloadAndPlot: EventEmitter<void>;
134
+ /** Download the current view as PNG. */
122
135
  downloadImage: EventEmitter<void>;
136
+ /** Fit the image to the view. */
123
137
  autoscaleImage: EventEmitter<void>;
138
+ /** A zoom / pan / drawing tool button was clicked (its mode). */
124
139
  toggleDragMode: EventEmitter<string>;
140
+ /** Zoom in one step. */
125
141
  zoomIn: EventEmitter<void>;
142
+ /** Zoom out one step. */
126
143
  zoomOut: EventEmitter<void>;
144
+ /** A 3D camera mode button was clicked (its mode). */
127
145
  toggleSurface3dMode: EventEmitter<string>;
146
+ /** Reset the 3D camera. */
128
147
  resetSurfaceCamera: EventEmitter<void>;
129
148
  /** Toggle the napari 3D coordinate-axes / scale gizmo on/off. */
130
149
  toggleAxes: EventEmitter<void>;
@@ -132,6 +151,7 @@ export declare class ToolbarComponent implements OnChanges {
132
151
  toggleWireframe: EventEmitter<void>;
133
152
  /** Change the napari 3D decimate factor (reloads at the new resolution). */
134
153
  selectResolution: EventEmitter<number>;
154
+ /** Delete the selected region. */
135
155
  deleteRegion: EventEmitter<void>;
136
156
  /** Undo the last region action (jit-ui#85). */
137
157
  undoRegion: EventEmitter<void>;
@@ -154,105 +174,49 @@ export declare class ToolbarComponent implements OnChanges {
154
174
  openToolParams: EventEmitter<string>;
155
175
  /** SAM model picker (jit-ui#90 P1). */
156
176
  samModelChange: EventEmitter<string>;
177
+ /** The wand sensitivity slider moved. */
157
178
  wandSensitivityChange: EventEmitter<number | undefined>;
179
+ /** The brush size slider moved. */
158
180
  brushSizeChange: EventEmitter<number | undefined>;
181
+ /** The vertex-eraser radius slider moved. */
159
182
  vertexEraserRadiusChange: EventEmitter<number | undefined>;
160
- /** Sliders' bounds — toolbar UI constants (the values are host-owned). */
161
- readonly wandSensitivityMin = 0.5;
162
- readonly wandSensitivityMax = 10;
163
- readonly wandSensitivityStep = 0.1;
164
- readonly brushSizeMin = 5;
165
- readonly brushSizeMax = 300;
166
- readonly brushSizeStep = 5;
167
- readonly vertexEraserRadiusMin = 5;
168
- readonly vertexEraserRadiusMax = 300;
169
- readonly vertexEraserRadiusStep = 5;
170
- readonly isoValueMin = 0;
171
- readonly isoValueMax = 255;
172
- readonly isoValueStep = 1;
173
- displayHelpDialog: boolean;
174
- /** Model picker for the Segment button's dropdown menu. The active model
175
- * (`samModelId`) is marked with a check; selecting an item emits
176
- * `samModelChange` (jit-ui#90 P1).
177
- *
178
- * Held as a stable array (rebuilt only when `samModels`/`samModelId` change),
179
- * NOT a getter: a getter returns a fresh array with new `command` closures on
180
- * every change-detection tick, which makes the bound `p-menu` overlay rebuild
181
- * its DOM mid-interaction and swallow the click on a menu item.
182
- *
183
- * `tooltip` carries the model's description from {@link MODEL_INFO}; the
184
- * menus' shared item template turns it into the hover info icon. p-menu's own
185
- * rendering ignores the field (it reads `item.title`), so it is free to use. */
186
- samMenuItems: MenuItem[];
187
- /**
188
- * Model menus for the contributed tools, keyed by tool id. Same stable-array
189
- * reasoning as {@link samMenuItems} — and it is why this is a map rebuilt in
190
- * `ngOnChanges` rather than a method called from the template, which would
191
- * hand `p-menu` a new array every tick.
192
- *
193
- * A contributed tool supplies its own per-model description, so unlike the
194
- * SAM menu these do not consult {@link MODEL_INFO}: this library has no
195
- * copy for checkpoints it does not know about.
196
- */
197
- toolMenuItems: Record<string, MenuItem[]>;
198
- /** Rebuild the SAM model menu when the model list or active selection
199
- * changes (keeps the array reference stable across other CD ticks). */
200
- ngOnChanges(changes: SimpleChanges): void;
201
- /**
202
- * Strip markup from a model description so it can be read aloud.
203
- *
204
- * The copy in MODEL_INFO and in a contribution's `ToolModelOption.info` is
205
- * written for a visual tooltip rendered with `[escape]="false"`, so it carries
206
- * `<b>` and `<br>`. Passed to `aria-label` verbatim a screen reader announces
207
- * the tags, so they are removed and `<br>` becomes a sentence break. Entities
208
- * used in that copy (`&nbsp;`, `&times;`, `&amp;`) are decoded for the same
209
- * reason.
210
- */
211
- plainText(html: string): string;
212
- /** Contributed tool names for the help dialog's prompted/no-prompt contrast,
213
- * e.g. "YOLO, Retinal layers". Empty when nothing is registered, which is
214
- * why the sentence that uses it is itself conditional. */
215
- get contributedToolNames(): string;
216
- /** Keeps each contributed tool's `p-menu` overlay alive across CD ticks —
217
- * re-creating it mid-interaction swallows the click on a menu item. */
218
- trackToolById(_index: number, tool: {
183
+ protected displayHelpDialog: boolean;
184
+ /** trackBy for the dialog tools' buttons. */
185
+ protected trackToolById(_index: number, tool: {
219
186
  id: string;
220
187
  }): string;
221
188
  /** The built-in type whose tools and controls apply to the current selection. */
222
- get effectivePlotType(): PlotType;
189
+ protected get effectivePlotType(): PlotType;
223
190
  /** The Image plot type renders as a natively pan/zoom-able raster, so the
224
191
  * generic zoom/pan tools are hidden. */
225
- get isImageView(): boolean;
192
+ protected get isImageView(): boolean;
226
193
  /** Either spatial-omics mode is active, so its controls are worth offering.
227
194
  * The 3D cloud needs the panel MORE than the 2D view does, not less: colouring,
228
195
  * the legend and category show/hide are the only way to make sense of a
229
196
  * million overlapping points. */
230
- get isSpatialMode(): boolean;
231
- /** A plot-type icon is a PrimeNG font glyph (e.g. `pi pi-image`) rather than an
232
- * SVG asset path — drives which element the selector item template renders. */
233
- isPiIcon(icon: string | undefined): boolean;
197
+ protected get isSpatialMode(): boolean;
234
198
  /** Backends with a vertex-editing region overlay: OSD Image and napari-js WebGPU image
235
199
  * (jit-ui#102). Gates the polygon / add-vertex / delete-vertex / Bézier-convert tools. */
236
- get supportsRegionVertexTools(): boolean;
200
+ protected get supportsRegionVertexTools(): boolean;
237
201
  /** Plot types that scrub a z-stack live (the renderer swaps the slice in place): the OSD Image
238
202
  * view, the napari-js WebGPU image, the napari-js surface — which rebuilds the height field
239
203
  * from the picked slice (jit-ui#102) — and the 2D spatial-omics view, where a 3D dataset's
240
204
  * registered volume is the image and the slider picks the section whose observations are
241
205
  * drawn. Drives the per-slice slider. */
242
- get showsLiveSliceScrubber(): boolean;
206
+ protected get showsLiveSliceScrubber(): boolean;
243
207
  /** Any napari-js WebGPU plot type. The single-image/stack toggle + slice-number field are
244
208
  * Plotly-only stack controls, so they're hidden for napari (jit-ui#102). */
245
- get isNapariMode(): boolean;
209
+ protected get isNapariMode(): boolean;
246
210
  /** ISOSURFACE (Plotly or napari-js WebGPU, either resolution) shows the isovalue range slider. */
247
- get isIsosurfaceMode(): boolean;
211
+ protected get isIsosurfaceMode(): boolean;
248
212
  /** The napari-js WebGPU surface — shows the wireframe toggle. */
249
- get isNapariSurfaceMode(): boolean;
213
+ protected get isNapariSurfaceMode(): boolean;
250
214
  /** Any napari-js WebGPU 3D type (volume/isosurface/surface) — shows the Resolution control. */
251
- get isNapari3dMode(): boolean;
215
+ protected get isNapari3dMode(): boolean;
252
216
  /** Intensity profile lines are Region-based and available in the Heatmap and
253
217
  * Image plot types, which show the Intensity tool group. */
254
- get isIntensityCapable(): boolean;
255
- showHelp(): void;
218
+ protected get isIntensityCapable(): boolean;
219
+ protected showHelp(): void;
256
220
  static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarComponent, never>;
257
- static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarComponent, "plotting-toolbar", never, { "imageInfo": { "alias": "imageInfo"; "required": false; }; "hasSpatialDataset": { "alias": "hasSpatialDataset"; "required": false; }; "plotTypeOptions": { "alias": "plotTypeOptions"; "required": false; }; "selectedPlotType": { "alias": "selectedPlotType"; "required": false; }; "basePlotType": { "alias": "basePlotType"; "required": false; }; "isoRange": { "alias": "isoRange"; "required": false; }; "maxIndex": { "alias": "maxIndex"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "isHeatmap": { "alias": "isHeatmap"; "required": false; }; "is3dRegions": { "alias": "is3dRegions"; "required": false; }; "activeDragMode": { "alias": "activeDragMode"; "required": false; }; "activeSurface3dMode": { "alias": "activeSurface3dMode"; "required": false; }; "axesVisible": { "alias": "axesVisible"; "required": false; }; "wireframeActive": { "alias": "wireframeActive"; "required": false; }; "resolutionScale": { "alias": "resolutionScale"; "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; }; "stackOptions": { "alias": "stackOptions"; "required": false; }; "tools": { "alias": "tools"; "required": false; }; "imageSmoothingEnabled": { "alias": "imageSmoothingEnabled"; "required": false; }; "samModels": { "alias": "samModels"; "required": false; }; "samModelId": { "alias": "samModelId"; "required": false; }; "contributedTools": { "alias": "contributedTools"; "required": false; }; "dialogTools": { "alias": "dialogTools"; "required": false; }; "openDialogToolId": { "alias": "openDialogToolId"; "required": false; }; "toolModelIds": { "alias": "toolModelIds"; "required": false; }; }, { "selectPlotType": "selectPlotType"; "addProfileLine": "addProfileLine"; "toggleImageSmoothing": "toggleImageSmoothing"; "isoRangeChange": "isoRangeChange"; "openChannelHistogram": "openChannelHistogram"; "openSpatialControls": "openSpatialControls"; "openRegionEditor": "openRegionEditor"; "selectStackOption": "selectStackOption"; "zScrub": "zScrub"; "zSlide": "zSlide"; "zIndexInput": "zIndexInput"; "reloadAndPlot": "reloadAndPlot"; "downloadImage": "downloadImage"; "autoscaleImage": "autoscaleImage"; "toggleDragMode": "toggleDragMode"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "toggleSurface3dMode": "toggleSurface3dMode"; "resetSurfaceCamera": "resetSurfaceCamera"; "toggleAxes": "toggleAxes"; "toggleWireframe": "toggleWireframe"; "selectResolution": "selectResolution"; "deleteRegion": "deleteRegion"; "undoRegion": "undoRegion"; "redoRegion": "redoRegion"; "segmentRegions": "segmentRegions"; "segmentCellpose": "segmentCellpose"; "runTool": "runTool"; "toggleDialogTool": "toggleDialogTool"; "toolModelChange": "toolModelChange"; "openToolParams": "openToolParams"; "samModelChange": "samModelChange"; "wandSensitivityChange": "wandSensitivityChange"; "brushSizeChange": "brushSizeChange"; "vertexEraserRadiusChange": "vertexEraserRadiusChange"; }, never, ["*"], false, never>;
221
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarComponent, "plotting-toolbar", never, { "imageInfo": { "alias": "imageInfo"; "required": false; }; "hasSpatialDataset": { "alias": "hasSpatialDataset"; "required": false; }; "plotTypeOptions": { "alias": "plotTypeOptions"; "required": false; }; "selectedPlotType": { "alias": "selectedPlotType"; "required": false; }; "basePlotType": { "alias": "basePlotType"; "required": false; }; "isoRange": { "alias": "isoRange"; "required": false; }; "maxIndex": { "alias": "maxIndex"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "isHeatmap": { "alias": "isHeatmap"; "required": false; }; "is3dRegions": { "alias": "is3dRegions"; "required": false; }; "activeDragMode": { "alias": "activeDragMode"; "required": false; }; "activeSurface3dMode": { "alias": "activeSurface3dMode"; "required": false; }; "axesVisible": { "alias": "axesVisible"; "required": false; }; "wireframeActive": { "alias": "wireframeActive"; "required": false; }; "resolutionScale": { "alias": "resolutionScale"; "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; }; "stackOptions": { "alias": "stackOptions"; "required": false; }; "tools": { "alias": "tools"; "required": false; }; "imageSmoothingEnabled": { "alias": "imageSmoothingEnabled"; "required": false; }; "samModels": { "alias": "samModels"; "required": false; }; "samModelId": { "alias": "samModelId"; "required": false; }; "contributedTools": { "alias": "contributedTools"; "required": false; }; "dialogTools": { "alias": "dialogTools"; "required": false; }; "openDialogToolId": { "alias": "openDialogToolId"; "required": false; }; "toolModelIds": { "alias": "toolModelIds"; "required": false; }; }, { "selectPlotType": "selectPlotType"; "addProfileLine": "addProfileLine"; "toggleImageSmoothing": "toggleImageSmoothing"; "isoRangeChange": "isoRangeChange"; "openChannelHistogram": "openChannelHistogram"; "openSpatialControls": "openSpatialControls"; "openRegionEditor": "openRegionEditor"; "selectStackOption": "selectStackOption"; "zScrub": "zScrub"; "zSlide": "zSlide"; "zIndexInput": "zIndexInput"; "reloadAndPlot": "reloadAndPlot"; "downloadImage": "downloadImage"; "autoscaleImage": "autoscaleImage"; "toggleDragMode": "toggleDragMode"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "toggleSurface3dMode": "toggleSurface3dMode"; "resetSurfaceCamera": "resetSurfaceCamera"; "toggleAxes": "toggleAxes"; "toggleWireframe": "toggleWireframe"; "selectResolution": "selectResolution"; "deleteRegion": "deleteRegion"; "undoRegion": "undoRegion"; "redoRegion": "redoRegion"; "segmentRegions": "segmentRegions"; "segmentCellpose": "segmentCellpose"; "runTool": "runTool"; "toggleDialogTool": "toggleDialogTool"; "toolModelChange": "toolModelChange"; "openToolParams": "openToolParams"; "samModelChange": "samModelChange"; "wandSensitivityChange": "wandSensitivityChange"; "brushSizeChange": "brushSizeChange"; "vertexEraserRadiusChange": "vertexEraserRadiusChange"; }, never, ["*"], true, never>;
258
222
  }