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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/README.md +201 -460
  2. package/esm2022/index.mjs +34 -15
  3. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
  4. package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
  5. package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
  7. package/esm2022/lib/contracts/color.mjs +60 -0
  8. package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
  9. package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
  10. package/esm2022/lib/contracts/display-types.mjs +11 -1
  11. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  12. package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
  13. package/esm2022/lib/contracts/intensity.mjs +48 -5
  14. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  15. package/esm2022/lib/contracts/plot-type.mjs +134 -17
  16. package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
  17. package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
  18. package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
  19. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
  20. package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
  21. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  22. package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
  23. package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
  24. package/esm2022/lib/contracts/sam.contract.mjs +1 -1
  25. package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
  26. package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
  27. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  28. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
  29. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  30. package/esm2022/lib/contracts/viz-config.mjs +2 -1
  31. package/esm2022/lib/geometry/contour.mjs +63 -0
  32. package/esm2022/lib/geometry/loft.mjs +128 -0
  33. package/esm2022/lib/geometry/polylabel.mjs +156 -0
  34. package/esm2022/lib/geometry/raster.mjs +98 -0
  35. package/esm2022/lib/geometry/reconstruct.mjs +315 -0
  36. package/esm2022/lib/geometry/reslice-image.mjs +57 -0
  37. package/esm2022/lib/geometry/ring.mjs +201 -0
  38. package/esm2022/lib/geometry/section.mjs +215 -0
  39. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
  40. package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
  41. package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
  42. package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
  43. package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
  44. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
  45. package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
  46. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
  47. package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
  48. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
  49. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
  50. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
  51. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
  52. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
  53. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
  54. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
  55. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
  56. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
  57. package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
  58. package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
  59. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
  60. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
  61. package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
  62. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
  63. package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
  64. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
  65. package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
  66. package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
  67. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
  68. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
  69. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
  70. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
  71. package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
  72. package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
  73. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
  74. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
  75. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
  76. package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
  77. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
  78. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
  79. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
  80. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
  81. package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
  82. package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
  83. package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
  84. package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
  85. package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
  86. package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
  87. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
  88. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
  89. package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
  90. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
  91. package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
  92. package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
  93. package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
  94. package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
  95. package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
  96. package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
  97. package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
  98. package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
  99. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
  100. package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
  101. package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
  102. package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
  103. package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
  104. package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
  105. package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
  106. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
  107. package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
  108. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
  109. package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
  110. package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
  111. package/esm2022/lib/implementations/region-centroids.mjs +47 -0
  112. package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
  113. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
  114. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
  115. package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
  116. package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
  117. package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
  118. package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
  119. package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
  120. package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
  121. package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
  122. package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
  123. package/esm2022/lib/models/bezier.mjs +1 -11
  124. package/esm2022/lib/models/class-preset.mjs +41 -3
  125. package/esm2022/lib/models/geometry.mjs +27 -164
  126. package/esm2022/lib/models/polygon-edit.mjs +254 -0
  127. package/esm2022/lib/models/polygon-factory.mjs +134 -0
  128. package/esm2022/lib/models/region-clone.mjs +68 -0
  129. package/esm2022/lib/models/region-geojson.mjs +411 -0
  130. package/esm2022/lib/models/region.mjs +34 -33
  131. package/esm2022/lib/models/shape.mjs +18 -16
  132. package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
  133. package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
  134. package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
  135. package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
  136. package/esm2022/lib/plot.utilities.mjs +296 -473
  137. package/esm2022/lib/processing/image-crop.mjs +1 -1
  138. package/esm2022/lib/processing/processing-image.mjs +28 -15
  139. package/esm2022/lib/provide-visualization.mjs +40 -14
  140. package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
  141. package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
  142. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
  143. package/esm2022/lib/region-editor/file-stem.mjs +13 -0
  144. package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
  145. package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
  146. package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
  147. package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
  148. package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
  149. package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
  150. package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
  151. package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
  152. package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
  153. package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
  154. package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
  155. package/esm2022/lib/region-ops.service.mjs +28 -70
  156. package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
  157. package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
  158. package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
  159. package/esm2022/lib/region-overlay/region-style.mjs +97 -0
  160. package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
  161. package/esm2022/lib/region-source/http-region-source.mjs +104 -0
  162. package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
  163. package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
  164. package/esm2022/lib/region-source/region-source.mjs +67 -0
  165. package/esm2022/lib/region-source/region-tiles.mjs +708 -0
  166. package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
  167. package/esm2022/lib/render-orchestrator.mjs +14 -11
  168. package/esm2022/lib/render-session.mjs +207 -0
  169. package/esm2022/lib/routing-visualizer.service.mjs +858 -414
  170. package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
  171. package/esm2022/lib/spatial/density-raster.mjs +14 -0
  172. package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
  173. package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
  174. package/esm2022/lib/spatial/gene-search.mjs +1 -1
  175. package/esm2022/lib/spatial/glyphs.mjs +97 -0
  176. package/esm2022/lib/spatial/lod.mjs +187 -0
  177. package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
  178. package/esm2022/lib/spatial/spatial-density.mjs +25 -16
  179. package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
  180. package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
  181. package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
  182. package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
  183. package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
  184. package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
  185. package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
  186. package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
  187. package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
  188. package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
  189. package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
  190. package/esm2022/lib/spatial/stats.mjs +71 -0
  191. package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
  192. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
  193. package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
  194. package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
  195. package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
  196. package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
  197. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
  198. package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
  199. package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
  200. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
  201. package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
  202. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
  203. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
  204. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
  205. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
  206. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
  207. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
  208. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
  209. package/esm2022/lib/store/class-color.util.mjs +53 -5
  210. package/esm2022/lib/store/class-signatures.mjs +63 -0
  211. package/esm2022/lib/store/region-history.mjs +146 -0
  212. package/esm2022/lib/store/region-scope-cache.mjs +144 -0
  213. package/esm2022/lib/store/region-selection.mjs +82 -0
  214. package/esm2022/lib/store/region-source-scope.mjs +171 -0
  215. package/esm2022/lib/store/region-store.service.mjs +986 -670
  216. package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
  217. package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
  218. package/esm2022/lib/toast-outlets.mjs +5 -4
  219. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
  220. package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
  221. package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
  222. package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
  223. package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
  224. package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
  225. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
  226. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
  227. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
  228. package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
  229. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
  230. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
  231. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
  232. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
  233. package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
  234. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
  235. package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
  236. package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
  237. package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
  238. package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
  239. package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
  240. package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
  241. package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
  242. package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
  243. package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
  244. package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
  245. package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
  246. package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
  247. package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
  248. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
  249. package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
  250. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
  251. package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
  252. package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
  253. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
  254. package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
  255. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
  256. package/esm2022/lib/util/mark-for-check.mjs +17 -0
  257. package/esm2022/lib/util/supersede.mjs +56 -0
  258. package/esm2022/lib/visualization.module.mjs +39 -141
  259. package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
  260. package/esm2022/lib/visualizer/region-actions.mjs +149 -0
  261. package/esm2022/lib/visualizer/region-load.mjs +123 -0
  262. package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
  263. package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
  264. package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
  265. package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
  266. package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
  267. package/esm2022/lib/visualizer.component.mjs +602 -1902
  268. package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
  269. package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
  270. package/esm2022/lib/workers/spatial-math.mjs +190 -0
  271. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
  272. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
  273. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
  274. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
  275. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
  276. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
  277. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
  278. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
  279. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
  280. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  281. package/fesm2022/mask.worker.js +36 -917
  282. package/fesm2022/onnx-sam.worker.js +52 -16
  283. package/fesm2022/region-source.worker.js +1067 -0
  284. package/fesm2022/spatial-math.worker.js +471 -0
  285. package/fesm2022/tsne.worker.js +32 -15
  286. package/index.d.ts +19 -10
  287. package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
  288. package/lib/contracts/capabilities.contract.d.ts +4 -2
  289. package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
  290. package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
  291. package/lib/contracts/color.d.ts +27 -0
  292. package/lib/contracts/colormap-lut.d.ts +19 -4
  293. package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
  294. package/lib/contracts/display-types.d.ts +21 -0
  295. package/lib/contracts/image.contract.d.ts +4 -0
  296. package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
  297. package/lib/contracts/intensity.d.ts +13 -2
  298. package/lib/contracts/plot-type.d.ts +3 -1
  299. package/lib/contracts/ports/image-state.port.d.ts +6 -2
  300. package/lib/contracts/ports/preferences.port.d.ts +4 -0
  301. package/lib/contracts/ports/region-io.port.d.ts +1 -0
  302. package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
  303. package/lib/contracts/ports/tile-access.port.d.ts +1 -0
  304. package/lib/contracts/region-editor-api.contract.d.ts +85 -1
  305. package/lib/contracts/region-overlay.contract.d.ts +5 -0
  306. package/lib/contracts/region-store.contract.d.ts +22 -0
  307. package/lib/contracts/sam.contract.d.ts +7 -0
  308. package/lib/contracts/section-view.contract.d.ts +44 -0
  309. package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
  310. package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
  311. package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
  312. package/lib/contracts/visualizer.contract.d.ts +231 -54
  313. package/lib/contracts/viz-config.d.ts +9 -0
  314. package/lib/geometry/contour.d.ts +24 -0
  315. package/lib/geometry/loft.d.ts +22 -0
  316. package/lib/geometry/polylabel.d.ts +23 -0
  317. package/lib/geometry/raster.d.ts +42 -0
  318. package/lib/geometry/reconstruct.d.ts +54 -0
  319. package/lib/geometry/reslice-image.d.ts +33 -0
  320. package/lib/geometry/ring.d.ts +67 -0
  321. package/lib/geometry/section.d.ts +52 -0
  322. package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
  323. package/lib/implementations/base-store-visualizer.d.ts +61 -15
  324. package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
  325. package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
  326. package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
  327. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
  328. package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
  329. package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
  330. package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
  331. package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
  332. package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
  333. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
  334. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
  335. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
  336. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
  337. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
  338. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
  339. package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
  340. package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
  341. package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
  342. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
  343. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
  344. package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
  345. package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
  346. package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
  347. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
  348. package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
  349. package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
  350. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
  351. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
  352. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
  353. package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
  354. package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
  355. package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
  356. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
  357. package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
  358. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
  359. package/lib/implementations/osd/display-pipeline.d.ts +38 -9
  360. package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
  361. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
  362. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
  363. package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
  364. package/lib/implementations/osd/osd-coords.d.ts +6 -4
  365. package/lib/implementations/osd/osd-export.d.ts +36 -0
  366. package/lib/implementations/osd/osd-lib.d.ts +7 -0
  367. package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
  368. package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
  369. package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
  370. package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
  371. package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
  372. package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
  373. package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
  374. package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
  375. package/lib/implementations/osd/osd-viewport.d.ts +77 -0
  376. package/lib/implementations/osd/osd-zoom.d.ts +6 -0
  377. package/lib/implementations/osd/simple-source.d.ts +161 -0
  378. package/lib/implementations/osd/slice-cache.d.ts +12 -3
  379. package/lib/implementations/osd/tile-client.d.ts +11 -14
  380. package/lib/implementations/osd/tile-recolor.d.ts +141 -0
  381. package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
  382. package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
  383. package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
  384. package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
  385. package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
  386. package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
  387. package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
  388. package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
  389. package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
  390. package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
  391. package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
  392. package/lib/implementations/plotly/plotly.service.d.ts +136 -401
  393. package/lib/implementations/region-centroids.d.ts +14 -0
  394. package/lib/implementations/simple-slice-access.service.d.ts +7 -4
  395. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
  396. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
  397. package/lib/implementations/tile-server/index.d.ts +5 -0
  398. package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
  399. package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
  400. package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
  401. package/lib/implementations/tile-server/transport.d.ts +62 -0
  402. package/lib/intensity/intensity-profile.d.ts +66 -0
  403. package/lib/intensity/intensity-profile.service.d.ts +108 -0
  404. package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
  405. package/lib/models/bezier.d.ts +0 -5
  406. package/lib/models/class-preset.d.ts +25 -0
  407. package/lib/models/geometry.d.ts +14 -48
  408. package/lib/models/polygon-edit.d.ts +72 -0
  409. package/lib/models/polygon-factory.d.ts +45 -0
  410. package/lib/models/region-clone.d.ts +20 -0
  411. package/lib/models/region-geojson.d.ts +57 -0
  412. package/lib/models/region.d.ts +59 -4
  413. package/lib/models/shape.d.ts +8 -0
  414. package/lib/plot-mode/contribution-host.d.ts +125 -0
  415. package/lib/plot-mode/plot-type-menu.d.ts +60 -0
  416. package/lib/plot-mode/tool-params-model.d.ts +49 -0
  417. package/lib/plot.utilities.d.ts +19 -30
  418. package/lib/processing/processing-image.d.ts +5 -2
  419. package/lib/provide-visualization.d.ts +19 -2
  420. package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
  421. package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
  422. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
  423. package/lib/region-editor/file-stem.d.ts +7 -0
  424. package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
  425. package/lib/region-editor/mask-export.service.d.ts +54 -0
  426. package/lib/region-editor/mask-raster.d.ts +2 -8
  427. package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
  428. package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
  429. package/lib/region-editor/region-editor.component.d.ts +283 -200
  430. package/lib/region-editor/region-metrics.d.ts +34 -0
  431. package/lib/region-editor/region-persistence.service.d.ts +77 -0
  432. package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
  433. package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
  434. package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
  435. package/lib/region-ops.service.d.ts +1 -7
  436. package/lib/region-overlay/region-geometry.d.ts +158 -0
  437. package/lib/region-overlay/region-hit-test.d.ts +38 -0
  438. package/lib/region-overlay/region-source-layer.d.ts +96 -0
  439. package/lib/region-overlay/region-style.d.ts +52 -0
  440. package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
  441. package/lib/region-source/http-region-source.d.ts +45 -0
  442. package/lib/region-source/region-source-ops.d.ts +89 -0
  443. package/lib/region-source/region-source-worker.d.ts +7 -0
  444. package/lib/region-source/region-source.d.ts +82 -0
  445. package/lib/region-source/region-tiles.d.ts +289 -0
  446. package/lib/region-source/worker-region-source.d.ts +65 -0
  447. package/lib/render-orchestrator.d.ts +6 -2
  448. package/lib/render-session.d.ts +75 -0
  449. package/lib/routing-visualizer.service.d.ts +248 -59
  450. package/lib/section-pane/section-pane.component.d.ts +47 -0
  451. package/lib/spatial/density-raster.d.ts +6 -0
  452. package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
  453. package/lib/spatial/embedding-compute.d.ts +21 -2
  454. package/lib/spatial/glyphs.d.ts +16 -0
  455. package/lib/spatial/lod.d.ts +94 -0
  456. package/lib/spatial/spatial-controls.facade.d.ts +64 -0
  457. package/lib/spatial/spatial-density.d.ts +15 -5
  458. package/lib/spatial/spatial-encoding.d.ts +11 -44
  459. package/lib/spatial/spatial-expression.d.ts +40 -22
  460. package/lib/spatial/spatial-framing.d.ts +1 -0
  461. package/lib/spatial/spatial-heatmap.d.ts +2 -0
  462. package/lib/spatial/spatial-hover.d.ts +4 -16
  463. package/lib/spatial/spatial-panel-model.d.ts +135 -0
  464. package/lib/spatial/spatial-selection.d.ts +21 -26
  465. package/lib/spatial/spatial-tile-merge.d.ts +41 -0
  466. package/lib/spatial/spatial-tiles.d.ts +9 -256
  467. package/lib/spatial/stats.d.ts +38 -0
  468. package/lib/spatial/transcript-grouping.d.ts +119 -0
  469. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
  470. package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
  471. package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
  472. package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
  473. package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
  474. package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
  475. package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
  476. package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
  477. package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
  478. package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
  479. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
  480. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
  481. package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
  482. package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
  483. package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
  484. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
  485. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
  486. package/lib/store/class-color.util.d.ts +39 -2
  487. package/lib/store/class-signatures.d.ts +11 -0
  488. package/lib/store/region-history.d.ts +66 -0
  489. package/lib/store/region-scope-cache.d.ts +65 -0
  490. package/lib/store/region-selection.d.ts +36 -0
  491. package/lib/store/region-source-scope.d.ts +68 -0
  492. package/lib/store/region-store.service.d.ts +312 -116
  493. package/lib/store/visualizer-store.service.d.ts +32 -33
  494. package/lib/toast-outlets.d.ts +4 -3
  495. package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
  496. package/lib/toolbar/canvas-tools.d.ts +20 -0
  497. package/lib/toolbar/crop/slide-crop.d.ts +10 -4
  498. package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
  499. package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
  500. package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
  501. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
  502. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
  503. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
  504. package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
  505. package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
  506. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
  507. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
  508. package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
  509. package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
  510. package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
  511. package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
  512. package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
  513. package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
  514. package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
  515. package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
  516. package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
  517. package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
  518. package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
  519. package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
  520. package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
  521. package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
  522. package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
  523. package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
  524. package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
  525. package/lib/toolbar/toolbar.component.d.ts +55 -84
  526. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
  527. package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
  528. package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
  529. package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
  530. package/lib/toolbar/wand/wand.service.d.ts +22 -116
  531. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
  532. package/lib/util/mark-for-check.d.ts +11 -0
  533. package/lib/util/supersede.d.ts +53 -0
  534. package/lib/visualization.module.d.ts +18 -39
  535. package/lib/visualizer/floating-drag.directive.d.ts +30 -0
  536. package/lib/visualizer/region-actions.d.ts +54 -0
  537. package/lib/visualizer/region-load.d.ts +46 -0
  538. package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
  539. package/lib/visualizer/tool-modes.d.ts +49 -0
  540. package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
  541. package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
  542. package/lib/visualizer/volume-sections.d.ts +64 -0
  543. package/lib/visualizer.component.d.ts +232 -447
  544. package/lib/workers/spatial-math-ops.d.ts +65 -0
  545. package/lib/workers/spatial-math-worker.d.ts +7 -0
  546. package/lib/workers/spatial-math.d.ts +74 -0
  547. package/package.json +12 -3
  548. package/src/lib/assets/slice.svg +23 -0
  549. package/src/lib/styles/_viz-icons-rules.scss +73 -0
  550. package/src/lib/styles/viz-icons.scss +14 -0
  551. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
  552. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
  553. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
  554. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
  555. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
  556. package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
  557. package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
  558. package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
  559. package/src/lib/assets/cell-detection.svg +0 -37
  560. package/src/lib/assets/click.svg +0 -1
  561. package/src/lib/assets/colormap-luts.json +0 -1
  562. package/src/lib/assets/edit-selection-white.svg +0 -47
  563. package/src/lib/assets/icons/colormap-earth.png +0 -0
  564. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  565. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  566. package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
  567. package/src/lib/assets/picture-segmentation.svg +0 -43
  568. package/src/lib/assets/test/download-379.svg +0 -1
  569. package/src/lib/assets/test/download-98.svg +0 -1
  570. package/src/lib/assets/test/json-1.svg +0 -1
  571. package/src/lib/assets/test/load-53.svg +0 -1
  572. package/src/lib/assets/test/mask-44.svg +0 -1
  573. package/src/lib/assets/test/mask-download-44.svg +0 -15
  574. package/src/lib/assets/test/mask-save-44.svg +0 -11
  575. package/src/lib/assets/test/overlay-1.svg +0 -1
  576. package/src/lib/assets/test/overlay-4.svg +0 -1
  577. package/src/lib/assets/test/region-26.svg +0 -1
  578. package/src/lib/assets/test/save-56.svg +0 -1
  579. package/src/lib/assets/test/upload-43.svg +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pure binary-mask helpers: polygon rasterization (napari-js's `rasterizePolygon`)
3
+ * and bbox-relative mask set operations. No DOM, no Angular — the mask-export
4
+ * worker imports this.
5
+ */
6
+ /** A bbox-relative binary mask (1 = filled, 0 = empty) whose pixel (0,0) sits
7
+ * at (bx, by) in the frame it was rasterized in. */
8
+ export interface BBoxMask {
9
+ bx: number;
10
+ by: number;
11
+ bw: number;
12
+ bh: number;
13
+ mask: Uint8Array;
14
+ }
15
+ /**
16
+ * The largest bbox (in pixels) {@link rasterizePolygon} allocates before it
17
+ * falls back to clipping at the window. Also the cap the wand/brush use to
18
+ * decide whether a region can be edited at the current zoom.
19
+ */
20
+ export declare const MAX_RASTER_PIXELS: number;
21
+ /**
22
+ * Rasterize a closed polygon (minus its holes) into a bbox-relative mask, e.g.
23
+ * as the starting point for a wand/brush stroke accumulator.
24
+ *
25
+ * Pixel (px, py) covers `[px, px + 1) × [py, py + 1)` and is set when its centre
26
+ * is inside — the rule under which the pixel-edge outlines `geometry/contour`
27
+ * traces come back as exactly the pixels they were traced from.
28
+ *
29
+ * Returns the bbox origin plus the filled mask, or null if the polygon is
30
+ * degenerate (covers no pixel centre). The polygon's full extent is kept even
31
+ * where it is negative or exceeds `imageWidth`×`imageHeight` (jit-ui#102); only
32
+ * a bbox larger than {@link MAX_RASTER_PIXELS} is clipped to that window (rare:
33
+ * a region enormous at the current zoom; accepts the clip).
34
+ */
35
+ export declare function rasterizePolygon(xpoints: number[], ypoints: number[], imageWidth: number, imageHeight: number, holes?: number[][][]): BBoxMask | null;
36
+ /** Returns true if the two bbox-relative masks share at least one set pixel. */
37
+ export declare function masksOverlap(a: BBoxMask, b: BBoxMask): boolean;
38
+ /**
39
+ * Allocate a fresh accumulator covering both masks and OR them in. The
40
+ * resulting mask's bbox is the smallest rectangle containing both inputs.
41
+ */
42
+ export declare function unionMasks(a: BBoxMask, b: BBoxMask): BBoxMask;
@@ -0,0 +1,54 @@
1
+ import type { Mesh } from 'napari-js/geometry';
2
+ /**
3
+ * A region's outlines on one slice: rings as interleaved `x, y` image pixels (holes included), and
4
+ * open polylines (a layer boundary), likewise.
5
+ */
6
+ export interface SliceOutlines {
7
+ z: number;
8
+ rings: ArrayLike<number>[];
9
+ /**
10
+ * The feature each ring is part of (equal ids, one feature): a feature's rings fill even-odd (its
11
+ * holes), the features as their union, so one inside or over another cuts no hole in it. Absent:
12
+ * the rings are one feature.
13
+ */
14
+ ringGroups?: ArrayLike<number>;
15
+ lines?: ArrayLike<number>[];
16
+ }
17
+ export interface ReconstructOptions {
18
+ /** In-plane voxel edge, image px (default 1). Raised to keep the mask within `maxVoxels`. */
19
+ pixelStep?: number;
20
+ /** At most this many voxels (default 32 M). */
21
+ maxVoxels?: number;
22
+ /** Laplacian smoothing passes (default 2). */
23
+ smooth?: number;
24
+ }
25
+ /**
26
+ * The mesh of the region outlined by `slices`, in image pixels (x, y) and slice indices (z: slice
27
+ * k's plane at z = k): the filled outlines' surface, and the sheet through the lines (see
28
+ * {@link loftLines}). Empty when no slice has an area and no two slices have lines.
29
+ */
30
+ export declare function reconstruct(slices: readonly SliceOutlines[], opts?: ReconstructOptions): Mesh;
31
+ /**
32
+ * The area inside `rings` (interleaved `x, y`), even-odd: a ring inside an odd number of others is
33
+ * a hole. Exact for rings that do not cross (a polygon set's exteriors and holes).
34
+ */
35
+ export declare function ringsArea(rings: readonly ArrayLike<number>[]): number;
36
+ /**
37
+ * The rings of each feature (see {@link SliceOutlines.ringGroups}), in the order first met; one
38
+ * feature of every ring without `groups`.
39
+ */
40
+ export declare function featureRings(rings: readonly ArrayLike<number>[], groups?: ArrayLike<number>): ArrayLike<number>[][];
41
+ /**
42
+ * The area of a slice's outlines (px²): each feature's (even-odd, see {@link ringsArea}), the
43
+ * features as their union, so a feature inside or over another of the slice adds only what it
44
+ * covers beyond it. Features whose extents overlap are measured together, by the length of their
45
+ * union along each row, exact between the rows through their vertices where no outline crosses
46
+ * another (and refined where one does).
47
+ */
48
+ export declare function outlinesArea(rings: readonly ArrayLike<number>[], groups?: ArrayLike<number>): number;
49
+ /**
50
+ * The volume of the region outlined by `slices`, in px² × slices (one slice thick per outline):
51
+ * the sum of each slice's area (see {@link outlinesArea}; Cavalieri's estimator). Times µm per px²
52
+ * and per slice, µm³.
53
+ */
54
+ export declare function outlinedVolume(slices: readonly SliceOutlines[]): number;
@@ -0,0 +1,33 @@
1
+ import type { Colormap } from 'napari-js';
2
+ import type { SectionAxis } from './section';
3
+ /** One channel of a volume as it is displayed. */
4
+ export interface VolumeChannelVoxels {
5
+ /** uint8 voxels, x fastest, then y, then z. */
6
+ data: Uint8Array;
7
+ /** The colormap the 3D view draws the channel with (a tint, or the display colormap). */
8
+ colormap: Colormap;
9
+ /** Display window over 0..255. */
10
+ min: number;
11
+ max: number;
12
+ /** napari-js gamma (see `toNapariGamma`): the windowed value t shows as t^γ. */
13
+ gamma: number;
14
+ visible: boolean;
15
+ }
16
+ export interface VolumeVoxels {
17
+ width: number;
18
+ height: number;
19
+ depth: number;
20
+ channels: readonly VolumeChannelVoxels[];
21
+ invert: boolean;
22
+ }
23
+ /** An RGBA image, row by row. */
24
+ export interface RgbaImage {
25
+ width: number;
26
+ height: number;
27
+ data: Uint8ClampedArray;
28
+ }
29
+ /**
30
+ * The image of the plane `axis = index` (a voxel index): through x, slices across and y down;
31
+ * through y, x across and slices down — the section coordinates of `geometry/section`.
32
+ */
33
+ export declare function resliceImage(vol: VolumeVoxels, axis: SectionAxis, index: number): RgbaImage;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Pure ring (closed polyline) helpers: bounds, containment, vertex dropping and
3
+ * simplification. No DOM, no Angular, no `this` — usable from workers.
4
+ *
5
+ * A ring is a pair of parallel `xs`/`ys` arrays without a repeated closing
6
+ * vertex; hole rings use the `[[x, y], …]` convention of {@link Polygon.holes}.
7
+ */
8
+ /** Axis-aligned bounds of a ring. Infinite (min > max) for an empty ring. */
9
+ export interface RingBounds {
10
+ minX: number;
11
+ minY: number;
12
+ maxX: number;
13
+ maxY: number;
14
+ }
15
+ /** The axis-aligned bounds of a ring's vertices. */
16
+ export declare function ringBounds(xs: ArrayLike<number>, ys: ArrayLike<number>): RingBounds;
17
+ /**
18
+ * Standard ray-cast (even-odd) point-in-ring test. (px, py) and the ring
19
+ * vertices must be in the same coordinate system. Rings with fewer than three
20
+ * vertices contain nothing.
21
+ */
22
+ export declare function pointInRing(px: number, py: number, xs: ArrayLike<number>, ys: ArrayLike<number>): boolean;
23
+ /**
24
+ * Point-in-region test that honours interior rings (holes): inside the
25
+ * exterior AND outside every hole. Coordinates must share the polygon's frame.
26
+ * With no holes this is exactly {@link pointInRing}.
27
+ */
28
+ export declare function pointInPolygonWithHoles(px: number, py: number, xs: ArrayLike<number>, ys: ArrayLike<number>, holes?: number[][][]): boolean;
29
+ /** {@link pointInRing} over a `[[x, y], …]` ring (the hole convention), without splitting it. */
30
+ export declare function pointInPairRing(px: number, py: number, ring: ReadonlyArray<ArrayLike<number>>): boolean;
31
+ /**
32
+ * Drop every vertex whose Euclidean distance to (cx, cy) is less than
33
+ * `radius`. Returns trimmed parallel arrays plus how many vertices were
34
+ * removed (so the caller can detect a no-op tick and skip the relayout).
35
+ */
36
+ export declare function dropVerticesWithinRadius(xpoints: number[], ypoints: number[], cx: number, cy: number, radius: number): {
37
+ xpoints: number[];
38
+ ypoints: number[];
39
+ removed: number;
40
+ };
41
+ /**
42
+ * Erase the part of a ring that lies within `radius` of (cx, cy): every vertex
43
+ * inside the disc goes (as {@link dropVerticesWithinRadius}), and the outline is
44
+ * rejoined where it crosses the disc's edge rather than at the next vertex left
45
+ * standing. On a densely sampled outline the two agree; on a sparse one (a
46
+ * traced box is four corners) dropping a corner would otherwise cut straight to
47
+ * the neighbouring corners. A `closed` ring wraps; an open one (a polyline) has
48
+ * no edge from its last vertex back to its first. Returns the trimmed parallel
49
+ * arrays plus how many of the ring's own vertices were removed (0: unchanged).
50
+ */
51
+ export declare function eraseRingWithinRadius(xpoints: number[], ypoints: number[], cx: number, cy: number, radius: number, closed?: boolean): {
52
+ xpoints: number[];
53
+ ypoints: number[];
54
+ removed: number;
55
+ };
56
+ /**
57
+ * Simplify a closed ring with the Douglas–Peucker algorithm (jit-ui#85):
58
+ * drop every vertex that lies within `epsilon` pixels (the "altitude
59
+ * threshold") of the line between its kept neighbours. Anchored at vertex 0
60
+ * (the ring is closed by appending it). Rings of ≤ 3 vertices, or a
61
+ * non-positive epsilon, are returned unchanged. Output keeps the closed-ring
62
+ * convention (no repeated closing point).
63
+ */
64
+ export declare function simplifyRing(xs: number[], ys: number[], epsilon: number): {
65
+ xs: number[];
66
+ ys: number[];
67
+ };
@@ -0,0 +1,52 @@
1
+ import { SliceOutlines } from './reconstruct';
2
+ /** The plane: x = const (a section along y and the slices) or y = const (along x and the slices). */
3
+ export type SectionAxis = 'x' | 'y';
4
+ /** A class's outlines in a section, as interleaved `u, v`. */
5
+ export interface ClassSection {
6
+ /** Closed outlines, holes included (even-odd). */
7
+ rings: Float64Array[];
8
+ /** Open lines; a line of one point is where the class crosses on one slice only. */
9
+ lines: Float64Array[];
10
+ }
11
+ export interface SectionOptions {
12
+ /** Slices in the stack. */
13
+ depth: number;
14
+ /** Image px across the section's in-plane axis: the image height through x, its width through y. */
15
+ extent: number;
16
+ /** In-plane cell size of the closed shapes' cut, image px (default 1). */
17
+ step?: number;
18
+ /** Farthest a line moves between neighbouring slices and is still joined, image px (default extent / 10). */
19
+ maxJump?: number;
20
+ }
21
+ /** `[x0, y0, x1, y1]`, image px. */
22
+ type Box = [number, number, number, number];
23
+ /** A ring or line with its extent. */
24
+ interface Indexed {
25
+ points: ArrayLike<number>;
26
+ box: Box;
27
+ }
28
+ interface IndexedSlice {
29
+ z: number;
30
+ rings: Indexed[];
31
+ /** Each ring's feature (see SliceOutlines.ringGroups); absent: one feature. */
32
+ ringGroups?: ArrayLike<number>;
33
+ lines: Indexed[];
34
+ }
35
+ /**
36
+ * Every class's outlines with each ring's and line's extent (and the class's): made once, it cuts
37
+ * any number of sections visiting only the outlines a plane crosses.
38
+ */
39
+ export interface SectionIndex {
40
+ readonly classes: ReadonlyMap<string, {
41
+ box: Box;
42
+ slices: readonly IndexedSlice[];
43
+ }>;
44
+ }
45
+ /** Index every class's outlines for cutting (see {@link SectionIndex}). */
46
+ export declare function indexOutlines(byClass: ReadonlyMap<string, readonly SliceOutlines[]>): SectionIndex;
47
+ /**
48
+ * Each class's cut by the plane `axis = at`; classes the plane misses are left out. Pass an
49
+ * {@link indexOutlines} index to cut many sections of the same outlines.
50
+ */
51
+ export declare function sectionOutlines(outlines: SectionIndex | ReadonlyMap<string, readonly SliceOutlines[]>, axis: SectionAxis, at: number, opts: SectionOptions): Map<string, ClassSection>;
52
+ export {};
@@ -1,47 +1,81 @@
1
- import { ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
1
+ import { ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnDestroy, Renderer2 } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * A compact colour picker: a swatch button that opens a honeycomb palette with a
5
+ * hex field, the system colour picker, HSL sliders and RGB fields. Bind `[color]`
6
+ * and listen to `(colorChange)` (committed picks) and, for a live preview,
7
+ * `(colorInput)` (every intermediate colour while dragging).
8
+ */
3
9
  export declare class HexColorPickerComponent implements OnDestroy {
4
10
  private elRef;
5
11
  private renderer;
6
12
  private cdr;
13
+ private ngZone;
7
14
  private static readonly DROPDOWN_WIDTH;
8
- private _color;
15
+ /** The colour shown (the swatch, the hex field, the selected cell). */
16
+ private readonly current;
17
+ /** The committed colour: a swatch/hex pick, or a slider/field/system-picker
18
+ * edit once it is released. Hosts commit their state on this. */
9
19
  colorChange: EventEmitter<string>;
10
- open: boolean;
11
- swatchBtn: ElementRef<HTMLButtonElement>;
12
- dropdownRef: ElementRef<HTMLDivElement>;
13
- hue: number;
14
- saturation: number;
15
- lightness: number;
16
- red: number;
17
- green: number;
18
- blue: number;
19
- readonly colorRows: string[][];
20
+ /** Every intermediate colour while a slider, number field or the system picker
21
+ * is being dragged — for a live preview; {@link colorChange} follows on release. */
22
+ colorInput: EventEmitter<string>;
23
+ /** The last colour emitted on (or received through) `color`, so a release
24
+ * without a change doesn't commit again. */
25
+ private committed;
26
+ /** Removes the document click listener; set only while the dropdown is open. */
27
+ private unlistenDocumentClick;
28
+ /** The palette dropdown is open. */
29
+ protected readonly open: import("@angular/core").WritableSignal<boolean>;
30
+ private swatchBtn;
31
+ private dropdownRef;
32
+ protected readonly hue: import("@angular/core").WritableSignal<number>;
33
+ protected readonly saturation: import("@angular/core").WritableSignal<number>;
34
+ protected readonly lightness: import("@angular/core").WritableSignal<number>;
35
+ protected readonly red: import("@angular/core").WritableSignal<number>;
36
+ protected readonly green: import("@angular/core").WritableSignal<number>;
37
+ protected readonly blue: import("@angular/core").WritableSignal<number>;
38
+ /** Slider tracks: hue is fixed; saturation and lightness follow the other two. */
39
+ protected readonly hueGradient: string;
40
+ protected readonly satGradient: import("@angular/core").Signal<string>;
41
+ protected readonly lightGradient: import("@angular/core").Signal<string>;
42
+ protected readonly colorRows: string[][];
20
43
  private normalizeHexColor;
44
+ /** The colour (`#RRGGBB`) to show; upper-cased on the way in. */
21
45
  get color(): string;
22
46
  set color(val: string);
23
- constructor(elRef: ElementRef, renderer: Renderer2, cdr: ChangeDetectorRef);
47
+ constructor(elRef: ElementRef, renderer: Renderer2, cdr: ChangeDetectorRef, ngZone: NgZone);
24
48
  ngOnDestroy(): void;
25
- toggle(): void;
49
+ protected toggle(): void;
50
+ /**
51
+ * Close on a click outside the swatch and dropdown. Registered only while
52
+ * open and outside the Angular zone, so the many pickers on a page (one per
53
+ * class row and channel) don't each run app-wide change detection on every
54
+ * click anywhere (RT-22).
55
+ */
56
+ private listenForOutsideClicks;
57
+ private stopListeningForOutsideClicks;
26
58
  private appendDropdownToBody;
27
59
  private removeDropdownFromBody;
28
- selectColor(hex: string): void;
29
- selectAndClose(hex: string): void;
60
+ protected selectColor(hex: string): void;
61
+ /** Live preview from the system colour picker while it is open. */
62
+ protected previewColor(hex: string): void;
63
+ /** Commit the current colour (`colorChange`) unless it was already committed. */
64
+ protected commitColor(): void;
65
+ protected selectAndClose(hex: string): void;
66
+ /** Close the palette dropdown (no-op when closed). */
30
67
  close(): void;
31
- onHexInput(value: string): void;
32
- onHslChange(): void;
33
- onRgbChange(): void;
34
- get hueGradient(): string;
35
- get satGradient(): string;
36
- get lightGradient(): string;
37
- onDocumentClick(event: Event): void;
68
+ protected onHexInput(value: string): void;
69
+ protected onHslChange(): void;
70
+ protected onRgbChange(): void;
71
+ /** Close the dropdown when `event` is a click outside the picker. */
72
+ protected onDocumentClick(event: Event): void;
73
+ private isOutside;
38
74
  private syncFromHex;
39
75
  private syncRgbFromHex;
76
+ private setRgb;
40
77
  private syncHslFromRgb;
41
- private hexToRgb;
42
- private rgbToHex;
43
78
  private rgbToHsl;
44
- private hslToHex;
45
79
  static ɵfac: i0.ɵɵFactoryDeclaration<HexColorPickerComponent, never>;
46
- static ɵcmp: i0.ɵɵComponentDeclaration<HexColorPickerComponent, "hex-color-picker", never, { "color": { "alias": "color"; "required": false; }; }, { "colorChange": "colorChange"; }, never, never, false, never>;
80
+ static ɵcmp: i0.ɵɵComponentDeclaration<HexColorPickerComponent, "hex-color-picker", never, { "color": { "alias": "color"; "required": false; }; }, { "colorChange": "colorChange"; "colorInput": "colorInput"; }, never, never, true, never>;
47
81
  }
@@ -1,28 +1,35 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { IDisplayOptions, IRegionStore } from '../contracts/visualizer.contract';
3
3
  import { Region } from '../models/region';
4
- import { ColormapNode } from '../contracts/display-types';
4
+ import { CanvasToolId, CanvasToolOptions, ColormapNode, IBrushOptions, IWandOptions } from '../contracts/display-types';
5
+ import type { CanvasToolManager } from '../toolbar/tool-kit/canvas-tool-manager';
5
6
  import { IImageMetadata } from '../contracts/image.contract';
6
7
  import { RegionStore } from '../store/region-store.service';
7
8
  import { VisualizerStore } from '../store/visualizer-store.service';
8
9
  /**
9
- * Shared store-delegation base for the OpenSeadragon and napari-js
10
+ * Shared store-delegation base for the OpenSeadragon, napari-js and Plotly
10
11
  * `IVisualizer` backends. The entire `IRegionStore` and `IDisplayOptions`
11
12
  * surfaces (plus the two classification-colour members) are pure forwarders to
12
- * the shared `RegionStore` / `VisualizerStore` in BOTH backends — so they live
13
- * here once, as a single source of truth, rather than being copied per backend.
14
- * (This is the "cross-backend behaviour that isn't rendering belongs in a
15
- * shared abstraction" convention from CLAUDE.md; the extraction closes
16
- * SHARED-BACKEND-REFACTOR.md.)
13
+ * the shared `RegionStore` / `VisualizerStore` — so they live here once, as a
14
+ * single source of truth, rather than being copied per backend. (This is the
15
+ * "cross-backend behaviour that isn't rendering belongs in a shared
16
+ * abstraction" convention from CLAUDE.md; see
17
+ * docs/history/2026-07-shared-backend-refactor.md.)
18
+ *
19
+ * The on-canvas tool controls (`setActiveTool` and the per-tool setters) live
20
+ * here too: each subclass creates its own {@link CanvasToolManager} over its own
21
+ * tool host and gates pointer/readback in {@link beforeToolChange}.
17
22
  *
18
23
  * Backend-specific members — `load`/`plot`/`reset`/zoom/`setZIndex`/readback,
19
- * the region OVERLAY, tool wiring, histograms, scale bar, tiling, colormap LUT
20
- * application — deliberately stay in each subclass.
24
+ * the region OVERLAY, the tool host, SAM/Cellpose runs, histograms, scale bar,
25
+ * tiling, colormap LUT application — deliberately stay in each subclass. Plotly keeps a Plotly-shape
26
+ * working-set beside the store and redraws it from the store's update events
27
+ * (like the OSD/napari overlays), so it overrides only the colormap and reverse
28
+ * scale (a live restyle) and `exportRegions` (the file name).
21
29
  *
22
30
  * NOT `@Injectable`: an abstract base doesn't participate in Angular DI. Each
23
31
  * subclass stays `@Injectable`, declares its own injected dependencies
24
- * (including the two stores), and passes them to `super(...)`. Plotly is
25
- * intentionally not a subclass — it has its own region model.
32
+ * (including the two stores), and passes them to `super(...)`.
26
33
  */
27
34
  export declare abstract class BaseStoreVisualizer implements IRegionStore, IDisplayOptions {
28
35
  protected readonly regionStore: RegionStore;
@@ -39,9 +46,6 @@ export declare abstract class BaseStoreVisualizer implements IRegionStore, IDisp
39
46
  getShowShapeLabel(): boolean;
40
47
  getShapeColor(): string;
41
48
  getFillColor(): string;
42
- plotPreviousShapes(): void;
43
- setPreviousShapes(shapes: any[]): void;
44
- getPreviousShapes(): any[];
45
49
  undo(): void;
46
50
  redo(): void;
47
51
  canUndo(): boolean;
@@ -59,13 +63,55 @@ export declare abstract class BaseStoreVisualizer implements IRegionStore, IDisp
59
63
  setDisplaySlice(z: number): void;
60
64
  getSliceRegions(): Region[];
61
65
  getStackSaveSlices(): Map<number, Region[]>;
66
+ /** This backend's canvas tools, created by the subclass over its own host. */
67
+ protected abstract readonly canvasTools: CanvasToolManager;
68
+ /**
69
+ * Runs before every tool change, for the backend's pointer and readback
70
+ * gating (pan/zoom off while a tool holds the pointer, a fresh pixel
71
+ * readback). Return false to arm nothing; the armed tool is disarmed anyway.
72
+ */
73
+ protected beforeToolChange(_next: CanvasToolId | null): boolean;
74
+ /**
75
+ * Arm one on-canvas tool, disarming the armed one; null — or any id that is
76
+ * not a canvas tool (a region draw mode, pan) — disarms only. Re-arming the
77
+ * armed tool applies `options` and keeps its work in progress.
78
+ */
79
+ setActiveTool(id: string | null, options?: CanvasToolOptions): void;
80
+ /** @deprecated Use {@link setActiveTool}(`'wand'`, options) / (null). */
81
+ setWandMode(active: boolean, options?: IWandOptions): void;
82
+ setWandOptions(options: IWandOptions): void;
83
+ clearActiveWandRegion(): void;
84
+ /** @deprecated Use {@link setActiveTool}(`'brush'`, options) / (null). */
85
+ setBrushMode(active: boolean, options?: IBrushOptions): void;
86
+ setBrushOptions(options: IBrushOptions): void;
87
+ /** @deprecated Use {@link setActiveTool}(`'eraseVertex'`, { radius }) / (null). */
88
+ setVertexEraserMode(active: boolean): void;
89
+ setVertexEraserRadius(radius: number): void;
90
+ /** @deprecated Use {@link setActiveTool}(`'zoomToBox'`) / (null). */
91
+ setZoomToBoxMode(active: boolean): void;
92
+ /** @deprecated Use {@link setActiveTool}(`'samPoint'`) / (null). */
93
+ setSamPointMode(active: boolean): void;
94
+ commitSamPoints(): void;
95
+ clearSamPoints(): void;
96
+ /** A per-tool setter: arm `id`, or disarm it if it is the armed tool. */
97
+ private setToolMode;
98
+ /** Drop what is bound to the view (each backend's own teardown). */
99
+ abstract unsubscribe(): void;
100
+ /** The view is going away: release what is bound to it (`IViewerBackend.detach`) —
101
+ * first the armed tool, whose overlay canvas and ResizeObserver sit on the view's
102
+ * container (the backend outlives the view). */
103
+ detach(): void;
104
+ /** Each backend's own fit (Plotly autorange, OSD home, napari camera fit). */
105
+ abstract autoscale(): void;
106
+ /** Fit the image into the view (`IViewerBackend.fitToView`). */
107
+ fitToView(): void;
62
108
  getClassificationColors(): Map<string, string>;
63
109
  setClassificationColor(label: string, color: string): void;
64
110
  getColormap(): Observable<ColormapNode | null>;
65
111
  setColormap(colormap: ColormapNode): void;
66
112
  getColormapOptions(): ColormapNode[];
67
113
  getReverseScale(): Observable<boolean>;
68
- setReverseScale(reverscale: any): void;
114
+ setReverseScale(reverscale: boolean): void;
69
115
  setImageMeta(imageMeta: IImageMetadata[]): void;
70
116
  getImageMeta(): Observable<IImageMetadata[]>;
71
117
  }
@@ -0,0 +1,36 @@
1
+ import type { AxesLayer, SurfaceLayer, Viewer } from 'napari-js';
2
+ import type { AxisLabelSpec } from 'napari-js/overlays';
3
+ import { ISurface3dControls } from '../../contracts/visualizer.contract';
4
+ import type { SceneContext } from './napari-scene';
5
+ /** A centred world box. */
6
+ export interface Box3 {
7
+ width: number;
8
+ height: number;
9
+ depth: number;
10
+ }
11
+ /**
12
+ * The 3D coordinate-axes / scale gizmo (review Appendix B): napari-js's `AxesLayer` plus the DOM
13
+ * X/Y/Z labels that track it (its `AxesLabelsOverlay`) — what the volume and the surface used to
14
+ * build twice.
15
+ */
16
+ export declare class Axes3dGizmo {
17
+ private readonly viewer;
18
+ readonly layer: AxesLayer;
19
+ private readonly labels;
20
+ constructor(viewer: Viewer, host: HTMLElement, box: Box3, labels: AxisLabelSpec[], opts: {
21
+ visible: boolean;
22
+ voxelSize?: [number, number, number];
23
+ });
24
+ setVisible(visible: boolean): void;
25
+ /** The box's depth changed (the volume's Z-height handle): restretch the axis and its labels. */
26
+ setDepth(depth: number, labels: AxisLabelSpec[]): void;
27
+ destroy(): void;
28
+ }
29
+ /** A Plotly-style 3D drag mode, as napari-js's camera drag mode (orbit/turntable → rotate). */
30
+ export declare function cameraDragMode(mode: string): 'pan' | 'zoom' | 'rotate';
31
+ /**
32
+ * The 3D view controls every 3D image scene offers: camera drag mode and re-framing, the axes
33
+ * gizmo's visibility and the surface's wireframe — both persisted in the viewer settings, so the
34
+ * next mount re-applies them.
35
+ */
36
+ export declare function surface3dControls(ctx: SceneContext, gizmo: () => Axes3dGizmo | null, surface?: () => SurfaceLayer | null): ISurface3dControls;
@@ -0,0 +1,76 @@
1
+ import { Subscription } from 'rxjs';
2
+ import type { Colormap } from 'napari-js';
3
+ import { IChannelState } from '../../contracts/channel-histogram-api.contract';
4
+ import { Rgb } from '../../contracts/colormap-lut';
5
+ import { ColormapNode, SpatialViewState } from '../../contracts/display-types';
6
+ import { VisualizerStore } from '../../store/visualizer-store.service';
7
+ /** The display settings every napari layer's colours are derived from. */
8
+ export interface DisplaySnapshot {
9
+ /** The selected display colormap node (a name or inline stops in `data.value`), if any. */
10
+ colormap: ColormapNode | null;
11
+ reverse: boolean;
12
+ invert: boolean;
13
+ }
14
+ /** The grayscale display colormap from the store selection (+reverse), defaulting to gray.
15
+ * Maps the store colormap node to a napari `Colormap` via the library's LUT factory; the
16
+ * multichannel tint ramps are built inside napari-js's `MultiChannelImageView` from each
17
+ * channel's hex colour. */
18
+ export declare function grayscaleColormap(s: DisplaySnapshot): Colormap | string;
19
+ /** A channel's tint colormap (black→colour), flipped for reverse-scale. Invert is not a colormap
20
+ * flip: it goes on the layer (`invert`), before gamma, as on the 2D image. */
21
+ export declare function channelTintColormap(color: string, s: DisplaySnapshot): Colormap | string;
22
+ /**
23
+ * Colour map for the volume/isosurface (and the surface and 3D scatter). A real colormap
24
+ * selection (viridis/magma/…) wins; otherwise the channel's colour tints it (so the channel-dialog
25
+ * colour swatch recolors the 3D render). Reverse-scale flips the ramp; invert is the layer's own
26
+ * `invert` (window → invert → gamma → colormap), not a second flip — the two differ once gamma ≠ 1.
27
+ */
28
+ export declare function volumeColormap(st: IChannelState | undefined, s: DisplaySnapshot): Colormap | string;
29
+ /** The LUT a continuous spatial layer draws with: the view's own choice, else the display
30
+ * colormap and its reverse flag — one rule for the markers, the cloud and both gene maps. */
31
+ export declare function spatialLut(view: SpatialViewState, s: DisplaySnapshot): Rgb[];
32
+ /**
33
+ * Identity of the colour scale a continuous spatial layer will draw with, for a
34
+ * cache key: the explicit choice, or else the display colormap and its reverse
35
+ * flag, since that is what {@link spatialLut} falls back to.
36
+ *
37
+ * The gene maps cache their coloured output, so without this in the key a change
38
+ * of colour scale left the field on screen in the previous colours — the markers
39
+ * recoloured and the map under them did not.
40
+ */
41
+ export declare function continuousColormapKey(view: SpatialViewState, s: DisplaySnapshot): string;
42
+ /**
43
+ * The store's display state as the napari layers consume it (review Appendix B, step 3;
44
+ * NAPARI-SVC-21): one subscription to channel states, colormap, reverse, invert and the selected
45
+ * channel, a {@link DisplaySnapshot} of the last values seen, and the colormap/LUT derivations
46
+ * every scene shares.
47
+ *
48
+ * The snapshot outlives a scene, as the scenes' builders read it before their own subscription
49
+ * has emitted; each scene owns the subscription {@link watch} hands it.
50
+ */
51
+ export declare class NapariDisplayState implements DisplaySnapshot {
52
+ private readonly store;
53
+ colormap: ColormapNode | null;
54
+ reverse: boolean;
55
+ invert: boolean;
56
+ constructor(store: VisualizerStore);
57
+ /**
58
+ * Follow the store: record the colormap/reverse/invert the builders read, then hand `apply`
59
+ * the channel states and the selected channel. Emits at once with the current values.
60
+ */
61
+ watch(apply: (channels: IChannelState[], selected: number) => void): Subscription;
62
+ /**
63
+ * Follow the invert setting alone: record it for the builders, then hand it to `apply` — for a
64
+ * scene that draws inverted layers without the channel states (the spatial cloud's density
65
+ * volumes). Emits at once with the current value.
66
+ */
67
+ watchInvert(apply: (invert: boolean) => void): Subscription;
68
+ /** The spatial scenes' share: they follow the colormap and reverse flag (not invert) through
69
+ * their own subscription, because a gene map recolours with them. */
70
+ record(colormap: ColormapNode | null, reverse: boolean): void;
71
+ grayscaleColormap(): Colormap | string;
72
+ channelTintColormap(color: string): Colormap | string;
73
+ volumeColormap(st: IChannelState | undefined): Colormap | string;
74
+ spatialLut(view: SpatialViewState): Rgb[];
75
+ continuousColormapKey(view: SpatialViewState): string;
76
+ }