@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
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Plotly layout builders for every plot type the Plotly backend renders. Pure:
3
+ * the live service state they need (screen height, aspect lock, drag mode, the
4
+ * current region shapes and colours) comes in through {@link ImageLayoutContext}.
5
+ */
6
+ /** Plotly shape dicts, as `layout.shapes` takes them. */
7
+ export type PlotlyShapeDict = Record<string, unknown>;
8
+ /** The service state an image-aligned layout depends on. */
9
+ export interface ImageLayoutContext {
10
+ screenHeight: number;
11
+ /** Lock the y axis to x (square image pixels). */
12
+ scaleratio: boolean;
13
+ /** The active Plotly drag mode, or '' for none. */
14
+ dragMode: string;
15
+ /** The region shapes to draw over the image. */
16
+ shapes: PlotlyShapeDict[];
17
+ /** The active (selected) shape's fill colour. */
18
+ fillColor: string;
19
+ /** The outline colour of a newly drawn shape. */
20
+ shapeColor: string;
21
+ }
22
+ /** One slider step per z-plane, each showing only its own trace. */
23
+ export declare function sliderSteps(sliceCount: number): Array<{
24
+ label: number;
25
+ method: string;
26
+ args: unknown[];
27
+ }>;
28
+ /** The heatmap / RGB image layout: image axes, the z-plane slider, the region shapes. */
29
+ export declare function heatmapLayout(ctx: ImageLayoutContext, xRange: number[], yRange: number[], sliceCount: number): {
30
+ margin: {
31
+ t: number;
32
+ b: number;
33
+ l: number;
34
+ r: number;
35
+ };
36
+ height: number;
37
+ sliders: {
38
+ pad: {
39
+ t: number;
40
+ };
41
+ currentvalue: {
42
+ visible: boolean;
43
+ prefix: string;
44
+ xanchor: string;
45
+ };
46
+ steps: {
47
+ label: number;
48
+ method: string;
49
+ args: unknown[];
50
+ }[];
51
+ }[];
52
+ autosize: boolean;
53
+ shapes: PlotlyShapeDict[];
54
+ activeshape: {
55
+ fillcolor: string;
56
+ };
57
+ dragmode: string | boolean;
58
+ newshape: {
59
+ line: {
60
+ color: string;
61
+ width: number;
62
+ };
63
+ };
64
+ xaxis: {
65
+ constrain: string;
66
+ constraintoward: string;
67
+ side: string;
68
+ ticks: string;
69
+ range: number[];
70
+ };
71
+ yaxis: {
72
+ constrain: string;
73
+ constraintoward: string;
74
+ range: number[];
75
+ ticks: string;
76
+ ticksuffix: string;
77
+ autorange: boolean;
78
+ scaleanchor: string | boolean;
79
+ };
80
+ };
81
+ /** Image-aligned 2D axes without the z-plane slider (region scatter). */
82
+ export declare function overlayLayout(ctx: ImageLayoutContext, xRange: number[], yRange: number[]): {
83
+ margin: {
84
+ t: number;
85
+ b: number;
86
+ l: number;
87
+ r: number;
88
+ };
89
+ height: number;
90
+ autosize: boolean;
91
+ shapes: PlotlyShapeDict[];
92
+ dragmode: string | boolean;
93
+ xaxis: {
94
+ constrain: string;
95
+ constraintoward: string;
96
+ side: string;
97
+ ticks: string;
98
+ range: number[];
99
+ };
100
+ yaxis: {
101
+ constrain: string;
102
+ constraintoward: string;
103
+ range: number[];
104
+ ticks: string;
105
+ ticksuffix: string;
106
+ autorange: boolean;
107
+ scaleanchor: string | boolean;
108
+ };
109
+ };
110
+ /** Plain 2D chart axes (intensity profile / line plots). */
111
+ export declare function chartLayout(screenHeight: number): {
112
+ margin: {
113
+ t: number;
114
+ b: number;
115
+ l: number;
116
+ r: number;
117
+ };
118
+ height: number;
119
+ autosize: boolean;
120
+ xaxis: {
121
+ title: string;
122
+ };
123
+ yaxis: {
124
+ title: string;
125
+ };
126
+ dragmode: boolean;
127
+ };
128
+ /** 3D scene for volumetric plot types (scatter3d, isosurface). */
129
+ export declare function volumeLayout(screenHeight: number): {
130
+ margin: {
131
+ t: number;
132
+ b: number;
133
+ l: number;
134
+ r: number;
135
+ };
136
+ height: number;
137
+ autosize: boolean;
138
+ scene: {
139
+ xaxis: {
140
+ title: string;
141
+ };
142
+ yaxis: {
143
+ title: string;
144
+ };
145
+ zaxis: {
146
+ title: string;
147
+ };
148
+ aspectmode: string;
149
+ };
150
+ };
151
+ /**
152
+ * Scene layout for the surface plot: light-grey axis planes and a manual
153
+ * aspect ratio whose z extent is `zRatio` of the x/y extent.
154
+ */
155
+ export declare function surfaceLayout(zRatio: number): {
156
+ margin: {
157
+ t: number;
158
+ b: number;
159
+ l: number;
160
+ r: number;
161
+ };
162
+ scene: {
163
+ xaxis: {
164
+ gridcolor: string;
165
+ zerolinecolor: string;
166
+ showbackground: boolean;
167
+ backgroundcolor: string;
168
+ };
169
+ yaxis: {
170
+ backgroundcolor: string;
171
+ gridcolor: string;
172
+ zerolinecolor: string;
173
+ showbackground: boolean;
174
+ };
175
+ zaxis: {
176
+ gridcolor: string;
177
+ zerolinecolor: string;
178
+ showbackground: boolean;
179
+ backgroundcolor: string;
180
+ };
181
+ aspectratio: {
182
+ x: number;
183
+ y: number;
184
+ z: number;
185
+ };
186
+ aspectmode: string;
187
+ };
188
+ };
@@ -0,0 +1,41 @@
1
+ import { IHistogram } from '../../contracts/channel-histogram-api.contract';
2
+ import { PixelData } from '../../contracts/visualizer.contract';
3
+ import { PlotType } from '../../contracts/plot-type';
4
+ import { IChannelState } from '../../contracts/channel-histogram-api.contract';
5
+ /**
6
+ * Pure reads of what the Plotly backend has on screen or in memory: a trace's
7
+ * pixels, a frame's histogram, the image rect the axes show, and the restyle
8
+ * that applies the channel display state.
9
+ */
10
+ /** A plotted trace's `z` grid as flat pixels: an RGB `image` trace keeps its
11
+ * channels (3 or 4), a heatmap is one rounded channel. Null when empty. */
12
+ export declare function tracePixels(trace: {
13
+ type?: string;
14
+ z?: any[][];
15
+ } | undefined): PixelData | null;
16
+ /** 256-bin histogram of one channel of a frame (raw, pre-LUT). Grayscale cells
17
+ * are numbers; RGB cells `[r,g,b]` give channel `channelIndex`, or the BT.601
18
+ * luminance for an index past their channels. */
19
+ export declare function frameHistogram(frame: any[], channelIndex: number): IHistogram;
20
+ /** 256-bin histogram of a one-byte-per-pixel plane (a channel's raw pixels). */
21
+ export declare function planeHistogram(plane: ArrayLike<number>): IHistogram;
22
+ type Rect = {
23
+ x: number;
24
+ y: number;
25
+ width: number;
26
+ height: number;
27
+ };
28
+ /**
29
+ * The image rect the plot shows, from the live axis ranges — after a high-def
30
+ * zoom the axes are relaid out to the crop's bounds, so the ranges ARE the
31
+ * crop — else the whole image `[x0, x1, y0, y1]`, else null.
32
+ */
33
+ export declare function axesSourceRect(xr: number[] | undefined, yr: number[] | undefined, trueImgSize: number[] | undefined): Rect | null;
34
+ /**
35
+ * The restyle that live-applies the channel display: the colour scale, reverse
36
+ * (reverse-scale and invert each flip the ramp; both together cancel) and the
37
+ * Intensity channel's window — cmin/cmax for the 3D plot types, zmin/zmax for
38
+ * heatmap/contour. A trace without a colour scale ignores these attributes.
39
+ */
40
+ export declare function channelDisplayRestyle(channels: IChannelState[], reverse: boolean, invert: boolean, colorscale: unknown, plotType: PlotType): Record<string, unknown>;
41
+ export {};
@@ -16,8 +16,8 @@ export declare class PlotlyRegionOverlay implements IRegionOverlay {
16
16
  constructor(plotly: PlotlyService);
17
17
  setMode(mode: RegionToolMode): void;
18
18
  redraw(): void;
19
- /** Bezier regions are an OpenSeadragon-only feature (Plotly has no native
20
- * curved-shape rendering), so this is a no-op here. */
19
+ /** Bezier regions are drawn by the SVG overlays (OpenSeadragon, napari-js);
20
+ * Plotly has no native curved-shape rendering, so this is a no-op here. */
21
21
  setSelectedBezier(_bezier: boolean): void;
22
22
  destroy(): void;
23
23
  }
@@ -0,0 +1,92 @@
1
+ import { Subscription } from 'rxjs';
2
+ import { RegionStore } from '../../store/region-store.service';
3
+ /** The service state the projection reads. */
4
+ export interface ShapeProjectionHost {
5
+ /** The plot div's id ('' before the first plot); it may be another backend's now. */
6
+ plotDiv(): string;
7
+ /** The image on screen (shapes are tagged with it). */
8
+ fileName(): string | undefined;
9
+ }
10
+ /**
11
+ * Plotly's render projection of the shared RegionStore: `shapes` is the dict
12
+ * array `Plotly.relayout` consumes, kept beside the store. Shapes edited or
13
+ * drawn on the Plotly canvas are mirrored INTO the store ({@link commitToStore});
14
+ * every other change — wherever it was made — arrives as a store update event
15
+ * and is projected back OUT and redrawn ({@link connect}). Also maps the store's
16
+ * selection onto Plotly's `_activeShapeIndex` (the shape with the edit handles)
17
+ * and back.
18
+ */
19
+ export declare class PlotlyShapeProjection {
20
+ private readonly host;
21
+ private readonly regionStore;
22
+ /** The render projection: one Plotly shape dict per store region. */
23
+ shapes: any[];
24
+ /** Nesting depth of {@link quietly}: region updates are not redrawn while > 0. */
25
+ private muted;
26
+ private readonly utils;
27
+ constructor(host: ShapeProjectionHost, regionStore: RegionStore);
28
+ /** The plot div, live Plotly graph or not (null when none is set). */
29
+ private gd;
30
+ /** The plot div while it hosts a live Plotly graph, else null: the div stays
31
+ * set after it was handed to another backend, and Plotly throws on it then. */
32
+ private liveGd;
33
+ /** Rebuild the dict working-set from the store (after an image switch, or when
34
+ * regions changed while another backend was rendering). */
35
+ syncFromStore(): void;
36
+ /**
37
+ * Make the shared store authoritative for the current dict working-set: convert
38
+ * the dicts to neutral regions and replace the store's list (the store mints
39
+ * ids, applies class colours, syncs its per-image cache and emits the
40
+ * region-update event). Store-minted ids are written back onto the dicts so the
41
+ * two representations stay aligned. Profile-line ROIs are ordinary regions
42
+ * (tagged `kind: 'profile'`) and round-trip through here too.
43
+ */
44
+ commitToStore(): void;
45
+ /**
46
+ * Apply a `plotly_relayout` event's shape part: in-place edits
47
+ * (`shapes[i].x0`, `shapes[i].path`, …, rounded to whole pixels) and a shape
48
+ * drawn natively on the canvas (a lone `shapes` key — snapped, tagged with
49
+ * the file and, when labels are on, a label object), mirrored into the store.
50
+ */
51
+ applyRelayout(event: Record<string, any>): void;
52
+ /** Push the dict working-set to Plotly (a no-op when another backend owns the div). */
53
+ render(): void;
54
+ /** The shapes of the image on screen, labelled (or not) for display, as fresh dicts. */
55
+ shapesToRedraw(showLabel?: boolean): any[];
56
+ /**
57
+ * Follow the shared store: redraw the shapes on every region update and move
58
+ * the edit handles on every selection change, whoever made the change (the
59
+ * router, an undo, the Region Editor, another backend's overlay, a canvas
60
+ * tool). Plotly is not on the store's write path any more — it listens, like
61
+ * the OpenSeadragon and napari-js overlays do. Service-lifetime: both
62
+ * callbacks no-op while no live Plotly graph holds the div.
63
+ */
64
+ connect(): Subscription;
65
+ /**
66
+ * Run `write` — a store write this projection already reflects (a shape edited
67
+ * on the canvas, an image switch the next plot draws) — without redrawing from
68
+ * the update event it causes.
69
+ */
70
+ quietly(write: () => void): void;
71
+ /**
72
+ * A region update. The stored set re-projects and redraws; a transient set
73
+ * (`setRegions(…, isRegionSaveOn = false)`, which the store emits without
74
+ * storing) is drawn as-is and leaves the working-set alone.
75
+ */
76
+ private onRegionUpdate;
77
+ /**
78
+ * A selection change: Plotly's `_activeShapeIndex` points at the last selected
79
+ * shape so it gets the edit handles (Plotly's own active-shape rendering is the
80
+ * only highlight). Skipped when the plot already shows it — the change came
81
+ * from a click on the plot ({@link syncSelectionFromPlot}).
82
+ */
83
+ private onSelection;
84
+ /**
85
+ * Read Plotly's `_activeShapeIndex` and push it as the selection. Plotly fires
86
+ * no dedicated active-shape event for clicks, so this is sampled after a
87
+ * relayout and a click. The store no-ops when the selection is unchanged.
88
+ */
89
+ syncSelectionFromPlot(): void;
90
+ /** The shapes-relayout payload: the shapes plus the active-shape fill colour. */
91
+ private relayoutPayload;
92
+ }
@@ -6,19 +6,19 @@ import { PlotType } from '../../contracts/plot-type';
6
6
  * DESIGN / EXTRACTION ALIGNMENT
7
7
  * -----------------------------
8
8
  * Every function here is **pure** — it takes a `TraceBuildInput` and returns
9
- * Plotly trace dicts. There is no Angular, no RxJS, no host-state coupling
10
- * (`MainState`, `FilesService`, …). That keeps the module relocatable into the
11
- * future `@jax-data-science/image-visualization` library core (see the
12
- * `sketch/jit-plotting-extraction` SOW) without port surgery.
9
+ * Plotly trace dicts. There is no Angular, no RxJS and no service state, so
10
+ * the builders are unit-testable on plain fixtures.
13
11
  *
14
- * Layout building stays in `PlotlyService` (it needs live service state such
15
- * as screen height, scale ratio and the current shapes); only TRACE building
16
- * is pluggable here. To add a new plot type: write a builder, register it in
17
- * `PLOTLY_PLOT_TYPE_IMPLS`, and add a descriptor in `contracts/plot-type.ts`.
12
+ * Layouts are built in `plotly-layouts.ts` (from a context of live service
13
+ * state); only TRACE building is pluggable here. To add a new plot type: write
14
+ * a builder, register it in `PLOTLY_PLOT_TYPE_IMPLS`, and add a descriptor in
15
+ * `contracts/plot-type.ts`.
18
16
  *
19
- * The original HEATMAP/SURFACE/RGB types intentionally keep their dedicated
20
- * renderers in `PlotlyService` (they are also reused by the high-def zoom
21
- * re-fetch path), so they are NOT registered here.
17
+ * The original HEATMAP/SURFACE/RGB types have their own builders at the end of
18
+ * this file ({@link buildHeatmapTraces}, {@link buildSurfaceTraces},
19
+ * {@link buildRgbImageTraces}) — used by the initial render and the high-def
20
+ * zoom re-render alike — but are NOT registered: they take the raw frames and
21
+ * the active colormap, not a {@link TraceBuildInput}.
22
22
  */
23
23
  /** Normalised input for a trace builder. Frames are per-z-plane matrices:
24
24
  * grayscale cells are scalars, RGB cells are `[r, g, b]`. */
@@ -57,4 +57,15 @@ export interface PlotlyPlotTypeImpl {
57
57
  }
58
58
  /** Registry of the pluggable (non-original) plot types. */
59
59
  export declare const PLOTLY_PLOT_TYPE_IMPLS: Partial<Record<PlotType, PlotlyPlotTypeImpl>>;
60
- export declare function getPlotTypeImpl(type: PlotType): PlotlyPlotTypeImpl | undefined;
60
+ /**
61
+ * One grayscale heatmap trace per z-plane, only the first visible (the layout's
62
+ * slider switches them). `trueImgSize` is [x0, x1, y0, y1]; `ratios` the data
63
+ * units per pixel. No per-cell hover text: building it for every pixel is too slow.
64
+ */
65
+ export declare function buildHeatmapTraces(frames: any[], trueImgSize: number[], ratios: number[], colorscale: unknown, reversescale: boolean): any[];
66
+ /** One grayscale surface trace per frame, coloured by the active colormap. */
67
+ export declare function buildSurfaceTraces(frames: any[], colorscale: unknown, reversescale: boolean): any[];
68
+ /** One RGB `image` trace per z-plane (width × height pixels), only the first visible. With
69
+ * `sources`, each plane draws its PNG data URI instead of its `z` cells (the browser draws it;
70
+ * Plotly paints `z` one rectangle per pixel). */
71
+ export declare function buildRgbImageTraces(frames: any[], trueImgSize: number[], ratios: number[], width: number, height: number, sources?: string[]): any[];
@@ -0,0 +1,86 @@
1
+ import * as Plotly from 'plotly.js-dist-min';
2
+ import { MessageService } from 'primeng/api';
3
+ import { IImageInfo } from '../../contracts/image.contract';
4
+ import { TileAccessPort } from '../../contracts/ports/tile-access.port';
5
+ import { ImageStatePort } from '../../contracts/ports/image-state.port';
6
+ /** The service state and render hooks the zoom drives. */
7
+ export interface PlotlyZoomHost {
8
+ plotDiv(): string;
9
+ /** [x0, x1, y0, y1] of the plotted image, or undefined before one. */
10
+ trueImgSize(): number[] | undefined;
11
+ imageInfo(): IImageInfo | undefined;
12
+ fileName(): string | undefined;
13
+ imageCached(): boolean;
14
+ zIndex(): number;
15
+ /** Start a render generation; a newer one supersedes a crop in flight. */
16
+ nextRenderGen(): number;
17
+ isCurrentRender(gen: number): boolean;
18
+ heatmapLayout(xRange: number[], yRange: number[]): Plotly.Layout;
19
+ setScreenHeight(height: number): void;
20
+ /** Called at request time: returns the hook that samples the crop's pixels
21
+ * (tools + intensity profiles), or drops them when sampling moved on. */
22
+ cropSampler(): (frame: any[], ratios: number[], origin: [number, number]) => void;
23
+ /** Re-render the crop in the plot type on screen; `reapplyRange` when the
24
+ * layout is image-aligned (the heatmap range must be re-applied). */
25
+ renderCrop(frame: any[], ratios: number[], size: [number, number], imageSize: number[], fileName?: string): {
26
+ rendered: Promise<unknown>;
27
+ reapplyRange: boolean;
28
+ };
29
+ /** Clear the plot after a failed relayout. */
30
+ reset(): void;
31
+ }
32
+ /**
33
+ * Plotly zoom: the step and box zooms, autoscale, and the HIGH-DEF zoom — a
34
+ * zoomed-in range is re-fetched from the server at screen resolution and
35
+ * re-rendered in place, so the user sees the data at the zoom level rather
36
+ * than the upscaled preview. Owns the current zoom box.
37
+ */
38
+ export declare class PlotlyZoomController {
39
+ private readonly host;
40
+ private readonly state;
41
+ private readonly tiles;
42
+ private readonly messages;
43
+ /** The zoomed range [x0, x1, y0, y1], or [] when not zoomed. */
44
+ zoomCoordinates: number[];
45
+ /** Whether a 2D drag-zoom re-fetches at high definition. */
46
+ isRealZoom: boolean;
47
+ private readonly utils;
48
+ constructor(host: PlotlyZoomHost, state: ImageStatePort, tiles: TileAccessPort, messages: MessageService);
49
+ private gd;
50
+ /** The axis-range part of a `plotly_relayout` event: remember the drag-zoom
51
+ * box and, outside stack mode, re-fetch it at high definition. */
52
+ onRelayout(event: Record<string, any>): void;
53
+ /** Autoscale the plot (and forget the zoom box). */
54
+ autoscale(): void;
55
+ /** Back to the whole image. */
56
+ resetAxes(): void;
57
+ /**
58
+ * Re-apply the image layout at the current DOM height: over the zoom box when
59
+ * zoomed, else over `trueImageSize` (default: the plotted image). A failed
60
+ * relayout clears the plot and tells the user to reopen the image.
61
+ */
62
+ relayout(trueImageSize?: number[]): void;
63
+ zoomIn(): void;
64
+ zoomOut(): void;
65
+ /** Scale the visible range about its centre by `factor` (< 1 zooms in). */
66
+ private stepZoom;
67
+ /** Overlay pixel → data coords via the axis objects (minus the plot margin);
68
+ * the zoom-to-box tool calls this through its host. */
69
+ pixelToData(px: number, py: number): {
70
+ x: number;
71
+ y: number;
72
+ };
73
+ /**
74
+ * Apply a zoom-to-box selection: stack mode does a pure axis-range relayout;
75
+ * otherwise the high-def pipeline re-fetches the box at the new resolution.
76
+ */
77
+ applyZoomToBox(coordinates: number[]): void;
78
+ /**
79
+ * The high-def zoom: fetch `coordinates` from the server at screen resolution
80
+ * and re-render it in place (in the plot type on screen), unless the user
81
+ * moved on meanwhile — another file, another render of the div (a new zoom or
82
+ * plot, or the div handed to another backend). A box covering the whole image
83
+ * autoscales instead.
84
+ */
85
+ triggerZoom(coordinates: number[]): void;
86
+ }