@jax-data-science/sci-image-visualizer 0.8.3 → 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 +358 -4218
  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 -34467
  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 -883
  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
@@ -17,3 +17,10 @@ import * as OpenSeadragon from 'openseadragon';
17
17
  * it real named exports and plain member access works.)
18
18
  */
19
19
  export declare const OSD: typeof OpenSeadragon;
20
+ /**
21
+ * Run an operation on an OSD tiled image, navigator or viewer that may already
22
+ * have been torn down (a slice evicted mid-load, the viewer destroyed during an
23
+ * animation or a timed refit). A throw there is expected and harmless, so it is
24
+ * only logged at debug level instead of being swallowed silently.
25
+ */
26
+ export declare function quiet(fn: () => void): void;
@@ -0,0 +1,69 @@
1
+ import type * as OpenSeadragon from 'openseadragon';
2
+ /** The service state the chrome reads — live, so it follows a viewer rebuild. */
3
+ export interface OsdChromeHost {
4
+ viewer(): OpenSeadragon.Viewer | null;
5
+ /** The DOM id OSD is mounted in. */
6
+ plotDiv(): string;
7
+ }
8
+ /**
9
+ * The viewer chrome and its browser workarounds: the overview navigator
10
+ * (visibility, sizing, corner pinning), image smoothing, the initial
11
+ * fit-to-view as the host layout settles, and the docked-toolbar repaint nudge.
12
+ *
13
+ * `navigatorVisible` and `smoothingEnabled` are read when a viewer is created
14
+ * (see buildViewerOptions) and applied live to a mounted one.
15
+ */
16
+ export declare class OsdNavigatorChrome {
17
+ private readonly host;
18
+ /** Whether the overview navigator (minimap) is shown. A consumer that doesn't
19
+ * want it (e.g. a small embedded preview) sets it off before the first render. */
20
+ navigatorVisible: boolean;
21
+ /** Image smoothing (bilinear). `false` → nearest-neighbour, so zoomed-in pixels
22
+ * render as crisp blocks (pixel inspection). Defaults to `false` so the image
23
+ * opens showing raw pixels. */
24
+ smoothingEnabled: boolean;
25
+ /** The host's docked toolbar (see nudgeToolbarRepaint): undefined until looked
26
+ * up for the current mount, null when there is none. */
27
+ private toolbarDock;
28
+ private lastToolbarNudge;
29
+ static readonly TOOLBAR_NUDGE_INTERVAL_MS = 100;
30
+ constructor(host: OsdChromeHost);
31
+ /** A new image is being mounted: the toolbar is looked up again for it. */
32
+ onMount(): void;
33
+ /**
34
+ * Wire the chrome onto a freshly opened viewer: the toolbar nudges, the
35
+ * fit-to-view retries as the layout settles, and the navigator re-sizing.
36
+ */
37
+ attach(viewer: OpenSeadragon.Viewer, plotDiv: string): void;
38
+ /** Show/hide the overview navigator. Stored for the next viewer creation, and
39
+ * applied live when a viewer is already mounted (hides/reveals its element —
40
+ * the navigator instance itself only exists when created with showNavigator). */
41
+ setNavigatorVisible(visible: boolean): void;
42
+ /** Toggle bilinear smoothing vs nearest-neighbour (crisp pixels). Stored for the
43
+ * next viewer creation, and applied live (with a redraw) to a mounted viewer. */
44
+ setImageSmoothingEnabled(enabled: boolean): void;
45
+ /**
46
+ * Fit-to-home once `el` first has a non-zero size. If it's already sized we
47
+ * rely on the timed refits the caller scheduled; otherwise a one-shot
48
+ * ResizeObserver runs `refit` the moment the container is laid out (then
49
+ * disconnects), so the initial fit doesn't depend on the render's start time
50
+ * relative to the diagram container's layout. No-op without a container or
51
+ * ResizeObserver (the timed refits remain the fallback). One-shot + only
52
+ * attached on a fresh mount, so slice-scrub re-opens keep the user's zoom.
53
+ */
54
+ fitWhenContainerSized(el: HTMLElement | null, refit: () => void): void;
55
+ /** Size the navigator from the CURRENT container (navigatorSizeRatio of the
56
+ * viewer element) and keep it pinned to the corner. OSD computes the size
57
+ * once in the Viewer constructor — before the host flex layout settles —
58
+ * and never corrects it, leaving a stale-size element whose visible minimap
59
+ * floats above the bottom-right corner. */
60
+ resizeNavigator(): void;
61
+ /** Force the docked toolbar to repaint after an OSD zoom. Chrome leaves it
62
+ * laid-out-but-unpainted (the canvas's compositing churn strands the toolbar's
63
+ * raster). A synchronous display toggle re-rasters it with no visible gone-frame
64
+ * and no layout shift. Located via the DOM since the service doesn't own the
65
+ * toolbar; a no-op when there's no toolbar (e.g. embedded without one). The
66
+ * element is looked up once per mount. `throttled` (animation frames) nudges
67
+ * at most every {@link TOOLBAR_NUDGE_INTERVAL_MS}: each nudge forces a layout. */
68
+ nudgeToolbarRepaint(throttled?: boolean): void;
69
+ }
@@ -0,0 +1,22 @@
1
+ import type * as OpenSeadragon from 'openseadragon';
2
+ import { CachedImageData } from '../../toolbar/tool-kit/canvas-tool';
3
+ import { PixelData } from '../../contracts/visualizer.contract';
4
+ /**
5
+ * The currently displayed pixels — the rendered viewport (what the user sees,
6
+ * including the current zoom and any colormap recolor), as RGBA. Null until
7
+ * tiles are drawn.
8
+ */
9
+ export declare function readDrawerPixels(viewer: OpenSeadragon.Viewer | null): PixelData | null;
10
+ /**
11
+ * Read back the *currently rendered* OSD canvas as the pixel tools' frame.
12
+ * The frame covers only the visible viewport at screen resolution, so when
13
+ * the user is zoomed into a sub-region the wand samples that region's detail
14
+ * (rather than the whole image at preview resolution). `originX/originY` and
15
+ * `ratios` map image coords <-> readback-pixel coords for the wand's
16
+ * data/ratio/origin model. The RGBA readback is the frame as-is (packed,
17
+ * RT-17 / OSD-PLOTLY-12): no per-pixel arrays.
18
+ */
19
+ export declare function readbackViewportFrame(viewer: OpenSeadragon.Viewer | null): CachedImageData | null;
20
+ /** Save the rendered view (the drawer canvas) as `<stem>.png`; a no-op before
21
+ * anything is drawn. */
22
+ export declare function saveDrawerSnapshot(viewer: OpenSeadragon.Viewer | null, save: (blob: Blob) => void): void;
@@ -0,0 +1,37 @@
1
+ import { Region } from '../../models/region';
2
+ import { ScreenLayer } from '../../region-overlay/svg-region-renderer';
3
+ /**
4
+ * The OpenSeadragon region overlay's look: region stroke/fill, labels, the
5
+ * selected region's handles, the marquee and the in-progress drawing. Pure SVG
6
+ * builders over the shared {@link ScreenLayer} (image points in, screen-space
7
+ * elements out), so the overlay itself keeps only lifecycle and gestures.
8
+ */
9
+ type Pt = {
10
+ x: number;
11
+ y: number;
12
+ };
13
+ /** `color` with `alpha`; a colour that doesn't parse (a named one) is used as-is. */
14
+ export declare function rgba(color: string, alpha: number): string;
15
+ /** Stroke/fill for a region shape (drawn in image coordinates by the renderer). */
16
+ export declare function styleRegionShape(el: SVGElement, region: Region, selected: boolean, shapeColor: string): void;
17
+ /**
18
+ * The class label (legend) just above the region's top-left — mirrors Plotly's
19
+ * per-shape label, drawn in the region's colour. region.label is restored from
20
+ * the shape's legend in getRegion().
21
+ */
22
+ export declare function drawRegionLabel(layer: ScreenLayer, region: Region, shapeColor: string): void;
23
+ /** A small vertex handle (filled when emphasised, hollow otherwise) at an image point. */
24
+ export declare function vertexMarker(layer: ScreenLayer, x: number, y: number, emphasised: boolean, color: string): void;
25
+ /**
26
+ * The selected region's handles, in its own colour: every vertex of every ring
27
+ * of a polygon (so a donut's inner outline shows its vertices — jit-ui#85), the
28
+ * bezier anchors and control handles of a curved one, or a rectangle's corners.
29
+ */
30
+ export declare function drawSelectionHandles(layer: ScreenLayer, region: Region, color: string): void;
31
+ /** Marquee rectangle for rubber-band multi-select (dashed outline + faint fill). */
32
+ export declare function drawSelectionBand(layer: ScreenLayer, a: Pt, b: Pt): void;
33
+ /** The rectangle being dragged out ('drawrect'). */
34
+ export declare function drawDraftRect(layer: ScreenLayer, a: Pt, b: Pt, color: string): void;
35
+ /** The path traced or placed so far (freehand, polyline, click-to-place polygon). */
36
+ export declare function drawDraftPath(layer: ScreenLayer, pts: Pt[], color: string): void;
37
+ export {};
@@ -1,6 +1,7 @@
1
1
  import { IRegionStore } from '../../contracts/visualizer.contract';
2
2
  import { IRegionEditApi } from '../../contracts/region-store.contract';
3
3
  import { IRegionOverlay, RegionToolMode } from '../../contracts/region-overlay.contract';
4
+ import { OsdViewerLike } from './osd-viewer-like';
4
5
  /**
5
6
  * The shared region store as the overlay needs it: the cross-backend
6
7
  * {@link IRegionStore} (read regions, selection, colours) plus the Region-native
@@ -29,7 +30,6 @@ export declare class OsdRegionOverlay implements IRegionOverlay {
29
30
  private store;
30
31
  private readonly svg;
31
32
  private readonly subs;
32
- private readonly osd;
33
33
  private selected;
34
34
  private mode;
35
35
  private tracker;
@@ -55,7 +55,18 @@ export declare class OsdRegionOverlay implements IRegionOverlay {
55
55
  private bandCurrent;
56
56
  private bandDragged;
57
57
  private readonly redrawHandler;
58
- constructor(viewer: any, store: RegionEditStore);
58
+ /** A camera move ('update-viewport', raised on every redrawn frame, animated ones
59
+ * included; 'resize'; 'rotate'). The regions are drawn in image coordinates, so
60
+ * only the renderer's transform and its few screen-space elements follow; nothing
61
+ * is rebuilt (OSD-PLOTLY-11). A tile-only frame (loading, recolor) leaves the
62
+ * projection, and so the DOM, untouched. */
63
+ private readonly cameraHandler;
64
+ private readonly renderer;
65
+ /** OSD's MouseTracker drops a cancelled pointer (touch interrupted, pointer
66
+ * capture lost to the browser) without calling releaseHandler, so the
67
+ * gesture is ended here instead. */
68
+ private readonly pointerCancelHandler;
69
+ constructor(viewer: OsdViewerLike, store: RegionEditStore);
59
70
  /** Switch drawing/selection mode; toggles OSD navigation accordingly. */
60
71
  setMode(mode: RegionToolMode): void;
61
72
  /** Drive OSD zoom from the wheel while any tool owns the pointer.
@@ -80,37 +91,24 @@ export declare class OsdRegionOverlay implements IRegionOverlay {
80
91
  destroy(): void;
81
92
  /** Image-pixel point -> element pixel point. */
82
93
  private toPx;
83
- /** Element pixel point (from a MouseTracker event) -> image-pixel point. */
94
+ /** Element pixel point (from a MouseTracker event) -> image-pixel point, rounded
95
+ * to whole pixels (where a drawn vertex lands). */
84
96
  private toImage;
97
+ /** Element pixel point -> exact image point, for hit tests. */
98
+ private toWorld;
99
+ /** Image point -> element px, as the shared region geometry wants it. */
100
+ private readonly toScreen;
101
+ /** Follow the current image→element projection: the renderer rewrites one transform
102
+ * and re-positions its screen-space elements, or does nothing when it did not move. */
103
+ private updateCamera;
104
+ /** Rebuild everything: the regions (in image coordinates), their labels and the overlay. */
85
105
  redraw(): void;
86
- /** A small vertex handle (filled for an emphasised marker, hollow otherwise).
87
- * Colour defaults to the global shape colour (used by the in-progress draw
88
- * preview); selected-region handles pass the region's own colour. */
89
- private vertexMarker;
90
- private buildRegionEl;
91
- /** Marquee rectangle for rubber-band multi-select (dashed outline + faint fill). */
92
- private selectionBand;
93
- private rectPreview;
94
- private polyPreview;
95
- /** SVG path `d` (element-pixel coords) for a straight-edged ring/polyline. */
96
- private straightPathD;
97
- /** SVG path `d` (element-pixel coords) for the smooth cubic bezier through a
98
- * polygon's anchors — the paper.js-equivalent curve. */
99
- private bezierPathD;
100
- /** SVG cubic-bezier path `d` (element px) for any ring (exterior or hole). Uses the stored
101
- * per-vertex handle offsets when present, else the Catmull-Rom default (resolveHandles). */
102
- private ringBezierPathD;
103
106
  /**
104
- * Draw the bezier editing handles for the selected region, paper.js-style:
105
- * each anchor as a small square, with tangent lines out to its two control
106
- * points (drawn as small circles).
107
+ * Rebuild the screen-space overlay only: the selected region's handles, the rubber band
108
+ * and any in-progress drawing. Drawing and marquee drags call this rather than
109
+ * {@link redraw}, so the regions are not rebuilt per pointer move.
107
110
  */
108
- private drawBezierHandles;
109
- /** A tangent line from an anchor to a control point, with a circle at the end. */
110
- private drawHandle;
111
- /** A filled-white anchor square (the editable vertex). */
112
- private anchorSquare;
113
- private rgba;
111
+ private renderOverlay;
114
112
  private get isFreehand();
115
113
  private onPress;
116
114
  /** Begin an edit gesture (move/resize or single-vertex drag) and open a store
@@ -138,17 +136,13 @@ export declare class OsdRegionOverlay implements IRegionOverlay {
138
136
  private editZoneAt;
139
137
  /** The currently-selected region (the last one selected), or null. */
140
138
  private selectedRegionInfo;
141
- /** The vertex of the selected polygon under the cursor (screen-pixel
142
- * tolerance), or null. Rectangles have no editable vertices. */
143
- private hitVertex;
144
- /** The bezier control handle of the selected region under the cursor (which
145
- * anchor, and whether the in- or out-handle), or null. */
146
- private hitBezierHandle;
139
+ /** The bezier control handle (when `bezier`) or vertex of the selected polygon
140
+ * under the cursor (screen-pixel tolerance), or null. Rectangles have no
141
+ * editable vertices (their corners are resize zones, see {@link rectZone}). */
142
+ private hitPolygonHandle;
147
143
  /** The edge of `region`'s polygon nearest the cursor (within tolerance), with
148
144
  * the clicked point in image coords as the insertion position, or null. */
149
145
  private hitEdge;
150
- /** Classify a screen point against a screen-space rectangle into a zone. */
151
- private rectZone;
152
146
  /** Snapshot the selected region's geometry at the start of an edit. */
153
147
  private snapshot;
154
148
  /**
@@ -158,19 +152,13 @@ export declare class OsdRegionOverlay implements IRegionOverlay {
158
152
  */
159
153
  private applyEdit;
160
154
  private selectAt;
161
- /** Indices of every region whose bounding box intersects the image-space
162
- * rectangle [x0,y0]–[x1,y1] (rubber-band multi-select). */
163
- private regionsInRect;
164
- /** Axis-aligned bounding box of a region in image coords, or null if empty. */
165
- private regionBBox;
166
- /** Index of the topmost region under a point, or -1. */
155
+ /** Index of the topmost region under an image point, or -1. */
167
156
  private regionIndexAt;
157
+ /** Whether the element-pixel `position` lands on `region` (see `regionContains`). */
168
158
  private containsPoint;
169
- /** Point-in-closed-polygon (image coords) honouring interior rings (holes):
170
- * inside the exterior AND outside every hole (even-odd). */
171
- private closedPolygonContains;
172
- /** Shortest distance from point p to segment a–b, all in screen pixels. */
173
- private distToSegmentPx;
159
+ /** Abandon whatever pointer gesture is in progress (drawing, edit drag,
160
+ * rubber band) and close its store batch. */
161
+ private endGesture;
174
162
  private resetInProgress;
175
163
  private commitRectangle;
176
164
  private commitPolygon;
@@ -1,17 +1,19 @@
1
+ import { OsdViewerLike } from './osd-viewer-like';
1
2
  /**
2
- * A physical scale bar drawn over an OpenSeadragon viewer. Recomputes on every
3
- * pan/zoom from the viewport's image→screen scale and the image's µm/pixel
4
- * (`mppX`, from Bio-Formats). Hidden when the image has no physical pixel size.
3
+ * A physical scale bar drawn over an OpenSeadragon viewer. The length maths (the nice 1/2/5 × 10ⁿ
4
+ * length nearest the target, and its unit) are napari-js's `scaleBarFor` / `formatLength`, which
5
+ * also size the napari backend's `ScaleBarOverlay`, so the two bars agree; the DOM is the same
6
+ * label-over-a-bracketed-line. Recomputes on every pan/zoom from the image→screen scale and the
7
+ * image's µm/pixel (`mppX`, from Bio-Formats). Hidden when the image has no physical pixel size.
5
8
  */
6
9
  export declare class OsdScaleBar {
7
10
  private viewer;
8
11
  private mppX;
9
- private readonly osd;
10
12
  private readonly bar;
11
- private readonly line;
12
13
  private readonly label;
14
+ private readonly line;
13
15
  private readonly redrawHandler;
14
- constructor(viewer: any, mppX: number);
16
+ constructor(viewer: OsdViewerLike, mppX: number);
15
17
  private update;
16
18
  destroy(): void;
17
19
  }
@@ -0,0 +1,49 @@
1
+ import { TileDescriptor } from '../tile-server';
2
+ /**
3
+ * Per-channel fit-view tile budget (tiles at the coarsest real level × channels).
4
+ * Above it, a multichannel image renders server-composited instead of per-channel
5
+ * — its full-res reads (it has no overview pyramid) would be too many × N channels.
6
+ * 64 (e.g. a 4x4 single-FOV z-stack × 4ch) stays per-channel; a whole-slide
7
+ * (hundreds–thousands) falls back.
8
+ */
9
+ export declare const MAX_MULTICHANNEL_FIT_TILES = 256;
10
+ /** How a tiled image is drawn, decided once per mount by {@link planTiledMount}. */
11
+ export interface TiledMountPlan {
12
+ /** Real Bio-Formats resolution levels (per-channel tiles exist only here). */
13
+ realLevels: number;
14
+ /** Composite client-side from one TiledImage per channel. */
15
+ multiChannel: boolean;
16
+ /** Tiles covering the whole image at the coarsest real level. */
17
+ coarseTiles: number;
18
+ }
19
+ /**
20
+ * Decide how to draw a tiled image. Multichannel fluorescence (indexed/LUT-bearing
21
+ * stacks) composite client-side from per-channel tiles. Trust the server's explicit
22
+ * `multichannel` flag — the old `channels>1 && grayscale` heuristic also matched RGB
23
+ * photos Bio-Formats reads as separated planes (channels>1, rgbChannels==1),
24
+ * splitting them into N per-channel TiledImages that flooded the tile endpoint and
25
+ * hung on load.
26
+ */
27
+ export declare function planTiledMount(d: TileDescriptor, maxFitTiles?: number): TiledMountPlan;
28
+ /** Where the tiles of one slice (and optionally one channel) come from. */
29
+ export interface TileSourceSpec {
30
+ api: string;
31
+ infoB64: string;
32
+ z: number;
33
+ /** Fetch this channel's single-band tiles (per-channel multichannel rendering). */
34
+ channel?: number;
35
+ /** Drive OSD off the first N (real) levels only — see {@link buildOsdTileSource}. */
36
+ realLevelsOnly?: number;
37
+ }
38
+ /**
39
+ * Custom tile source built from the descriptor. OSD numbers levels
40
+ * coarsest-first; the backend numbers resolutions full-res-first, so
41
+ * `res = (levels-1) - osdLevel`. Overriding getLevelScale/getNumTiles lets us
42
+ * honour Bio-Formats' actual per-level dimensions (not assume power-of-two).
43
+ *
44
+ * Multichannel images composite from per-channel tiles, which only exist at
45
+ * real Bio-Formats resolutions — so `realLevelsOnly` drives OSD off the real
46
+ * levels alone and skips the synthetic (server-composited) overviews. Every
47
+ * displayed tile is then per-channel-fetchable at any zoom.
48
+ */
49
+ export declare function buildOsdTileSource(d: TileDescriptor, spec: TileSourceSpec): Record<string, unknown>;
@@ -0,0 +1,100 @@
1
+ import type * as OpenSeadragon from 'openseadragon';
2
+ /**
3
+ * The slice of an OpenSeadragon `Viewer` that the OSD helpers (osd-coords, the
4
+ * coordinate transform, the scale bar, the region overlay and the slice cache)
5
+ * actually use — and nothing more (OSD-PLOTLY-27).
6
+ *
7
+ * The real `OpenSeadragon.Viewer` is assignable to it as is, so the service
8
+ * passes its viewer straight through; the specs build a small fake (see
9
+ * `testing/fake-osd-viewer.ts`) instead of casting a partial object. Points and
10
+ * rectangles are structural where the helpers only read `x`/`y`/`width`/`height`;
11
+ * `OpenSeadragon.Rect` is kept only where the result goes back into OSD
12
+ * (`imageToViewportRectangle` → `viewport.fitBounds`).
13
+ */
14
+ export interface OsdViewerLike {
15
+ /** The element OSD draws into; overlays (scale bar, region SVG) are appended
16
+ * here and its client rect anchors client↔element conversions. */
17
+ canvas: HTMLElement;
18
+ /** The viewer's root element (an ancestor of the canvas and of the tool
19
+ * overlays) — the wheel-zoom listener is bound here. */
20
+ element: HTMLElement;
21
+ viewport: {
22
+ viewerElementToViewportCoordinates(p: OsdXY): OsdXY;
23
+ viewportToViewerElementCoordinates(p: OsdXY): OsdXY;
24
+ /** Image conversions on the viewport — ambiguous once the world holds
25
+ * several images; used only as the empty-world fallback. */
26
+ viewerElementToImageCoordinates(p: OsdXY): OsdXY;
27
+ imageToViewerElementCoordinates(p: OsdXY): OsdXY;
28
+ imageToViewportRectangle(r: OpenSeadragon.Rect): OpenSeadragon.Rect;
29
+ viewportToImageRectangle(r: OsdRectLike): OsdRectLike;
30
+ /** Viewer-element pixel → viewport point (the wheel-zoom anchor). */
31
+ pointFromPixel(p: OsdXY): OsdXY;
32
+ zoomBy(factor: number, refPoint?: OsdXY): unknown;
33
+ applyConstraints(immediately?: boolean): unknown;
34
+ };
35
+ world: {
36
+ getItemCount(): number;
37
+ /** `undefined` past the end of the world (OSD returns it at runtime). */
38
+ getItemAt(index: number): OsdTiledImageLike | undefined;
39
+ /** -1 when the item is no longer in the world (evicted / removed). */
40
+ getIndexOfItem(item: OsdTiledImageLike): number;
41
+ removeItem(item: OsdTiledImageLike): void;
42
+ };
43
+ /** Queue a tiled image into the world; `success` fires once it is added (not
44
+ * once its tiles have loaded). */
45
+ addTiledImage(options: OsdAddTiledImageOptions): void;
46
+ addHandler(event: OsdViewerEventName, handler: () => void): unknown;
47
+ removeHandler(event: OsdViewerEventName, handler: () => void): unknown;
48
+ /** OSD's own pan/zoom (drag + wheel); region tools switch it off. */
49
+ setMouseNavEnabled(enabled: boolean): unknown;
50
+ isMouseNavEnabled(): boolean;
51
+ }
52
+ /** A point in any OSD space (viewer-element px, viewport units or image px —
53
+ * the method it comes from says which). */
54
+ export interface OsdXY {
55
+ x: number;
56
+ y: number;
57
+ }
58
+ /** An axis-aligned rectangle, in the space of the method that produced it. */
59
+ export interface OsdRectLike {
60
+ x: number;
61
+ y: number;
62
+ width: number;
63
+ height: number;
64
+ }
65
+ /** The members of an OSD `TiledImage` (one world item: an image, a stack slice
66
+ * or one channel layer) the helpers use. */
67
+ export interface OsdTiledImageLike {
68
+ viewportToImageCoordinates(p: OsdXY): OsdXY;
69
+ imageToViewportCoordinates(p: OsdXY): OsdXY;
70
+ imageToViewportRectangle(r: OpenSeadragon.Rect): OpenSeadragon.Rect;
71
+ viewportToImageRectangle(r: OsdRectLike): OsdRectLike;
72
+ setOpacity(opacity: number): void;
73
+ /** False while any of the image's tiles are still loading. */
74
+ getFullyLoaded(): boolean;
75
+ /** Re-run the tile pipeline (restore + re-process) for this image's tiles;
76
+ * tiles already stamped at `>= tStamp` are skipped. Optional: the slice
77
+ * cache feature-tests it. */
78
+ requestInvalidate?(restoreTiles?: boolean, viewportOnly?: boolean, tStamp?: number): unknown;
79
+ }
80
+ /** The `addTiledImage` options the slice cache passes. Image placement is in
81
+ * viewport units (`width: 1` = the primary image's normalized width). */
82
+ export interface OsdAddTiledImageOptions {
83
+ tileSource: string | object;
84
+ x?: number;
85
+ y?: number;
86
+ width?: number;
87
+ opacity?: number;
88
+ /** Load tiles even while hidden (opacity 0). */
89
+ preload?: boolean;
90
+ /** Canvas composite operation, e.g. `'lighter'` for additive channels. */
91
+ compositeOperation?: string;
92
+ /** Fires once the image is in the world. OSD types the payload as a DOM
93
+ * `Event`; at runtime it carries the added `item`. */
94
+ success?(event: Event & {
95
+ item?: OsdTiledImageLike;
96
+ }): void;
97
+ error?(): void;
98
+ }
99
+ /** The viewer events the helpers subscribe to. */
100
+ export type OsdViewerEventName = 'update-viewport' | 'animation' | 'resize' | 'rotate';
@@ -0,0 +1,14 @@
1
+ import type * as OpenSeadragon from 'openseadragon';
2
+ /** How long a mount waits for OSD's `open`/`open-failed` before giving up. */
3
+ export declare const OSD_OPEN_TIMEOUT_MS = 8000;
4
+ /** Create an OpenSeadragon viewer (synchronously: a throwing factory throws here). */
5
+ export declare function createViewer(options: Record<string, unknown>): OpenSeadragon.Viewer;
6
+ /**
7
+ * Open `tileSource` in `viewer`. `onOpen` wires the freshly opened viewer
8
+ * (overlays, handlers); the promise resolves true once it ran, false on
9
+ * `open-failed` — and ALWAYS settles: if OSD never emits either (a bad tile
10
+ * source, a viewer torn down mid-open), the render pipeline must not hang, since
11
+ * a hang leaves imageLoading=true, sticking the spinner and the 500ms
12
+ * cache-progress poll forever (NS_BINDING_ABORTED storm).
13
+ */
14
+ export declare function openViewer(viewer: OpenSeadragon.Viewer, tileSource: unknown, onOpen: (viewer: OpenSeadragon.Viewer) => void): Promise<boolean>;
@@ -0,0 +1,77 @@
1
+ import { Subject } from 'rxjs';
2
+ import type * as OpenSeadragon from 'openseadragon';
3
+ import { OsdCoordinateTransform } from './osd-coordinate-transform';
4
+ import { PlotModeRect, PlotModeViewport } from '../../contracts/plot-type-contribution.contract';
5
+ import { TileDescriptor } from '../tile-server';
6
+ /** The service state the viewport adapter reads — live, so it follows a viewer rebuild. */
7
+ export interface OsdViewportHost {
8
+ viewer(): OpenSeadragon.Viewer | null;
9
+ descriptor(): TileDescriptor | null;
10
+ coordTransform(): OsdCoordinateTransform | null;
11
+ overlayContainer(): HTMLElement | null;
12
+ }
13
+ /**
14
+ * The OpenSeadragon viewport as the rest of the library sees it: the visible
15
+ * image rect (settled, and per animation frame), the {@link PlotModeViewport} a
16
+ * contributed plot mode draws over, and the zoom/fit commands.
17
+ *
18
+ * Every member reads the CURRENT viewer through the host, so one instance lives
19
+ * as long as the service and stays valid across viewer rebuilds.
20
+ */
21
+ export declare class OsdViewportAdapter {
22
+ private readonly host;
23
+ /** Visible image region (full-image pixel coords) emitted when the view
24
+ * settles, so the intensity inset can re-sample at the current zoom level. */
25
+ readonly viewportChange$: Subject<PlotModeRect>;
26
+ /** The visible rect on every redraw, coalesced to one emission per animation
27
+ * frame. Feeds {@link PlotModeViewport.frame$}. */
28
+ private readonly frame$;
29
+ private frameRaf;
30
+ private plotModeViewport;
31
+ constructor(host: OsdViewportHost);
32
+ /** Compute the current viewport's image-pixel rectangle (clamped to the image)
33
+ * and broadcast it. */
34
+ emitViewportChange(): void;
35
+ /** The current viewport's image-pixel rectangle, clamped to the image, or
36
+ * null when there is no laid-out viewport. */
37
+ visibleImageRect(): PlotModeRect | null;
38
+ /**
39
+ * Image-pixel rectangle the drawer canvas currently covers. Unlike
40
+ * {@link visibleImageRect}, this is NOT clamped to the image bounds: the canvas
41
+ * maps 1:1 to the viewport rectangle, so leaving it unclamped keeps
42
+ * `canvasPx -> imagePx` an exact affine map (clamping would skew coordinates
43
+ * near the image edges). Routed through world item 0 (see
44
+ * {@link viewportRectToImage}) for multi-layer accuracy.
45
+ */
46
+ displayedSourceRect(): PlotModeRect | null;
47
+ /** Coalesce redraws into one {@link frame$} emission per animation frame.
48
+ * Skipped entirely while nothing listens. */
49
+ scheduleFrame(): void;
50
+ /** Drop a pending {@link scheduleFrame} (the viewer is going away). */
51
+ cancelFrame(): void;
52
+ /**
53
+ * The viewport a contributed plot mode draws over. One stable object per
54
+ * service: every method reads the CURRENT viewer, so it stays valid across a
55
+ * viewer rebuild and reports `isReady() === false` while none is mounted
56
+ * (conversions then return NaN rather than throwing).
57
+ */
58
+ plotModeViewportFor(): PlotModeViewport;
59
+ /** `source`, preceded by the current visible rect for each subscriber (when ready). */
60
+ private withCurrentRect;
61
+ /**
62
+ * Keep the user's current view across a container/split resize instead of
63
+ * snapping home. Viewport bounds are image-relative (image width = 1), so
64
+ * they're independent of the container's pixel size — capture the visible
65
+ * region now and re-fit it once the new size has settled. OSD's autoResize
66
+ * fires asynchronously and the angular-split transition animates the width
67
+ * over a few hundred ms, so restore on the next frame and again after the
68
+ * transition completes.
69
+ */
70
+ keepViewAcrossResize(): void;
71
+ goHome(): void;
72
+ /** Zoom by one button step about the centre (`factor` > 1 zooms in). */
73
+ zoomBy(direction: 1 | -1): void;
74
+ /** Fit the OSD viewport to an image-space rectangle (coords ordered
75
+ * [xMin, xMax, yMax, yMin]). */
76
+ applyZoomToBox(coordinates: number[]): void;
77
+ }
@@ -17,3 +17,9 @@
17
17
  * zoom visibly changing pace when a tool is picked up is the bug this constant prevents.
18
18
  */
19
19
  export declare const OSD_ZOOM_PER_SCROLL = 1.03;
20
+ /**
21
+ * Zoom factor per zoom-button press / +/- key, shared by every backend (OpenSeadragon, napari-js
22
+ * and Plotly's axis-range zoom) so a button press zooms the same amount whichever renderer is
23
+ * drawing. Unlike {@link OSD_ZOOM_PER_SCROLL} it is one deliberate step per press, not per event.
24
+ */
25
+ export declare const ZOOM_BUTTON_STEP = 1.3;