@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,47 @@
1
+ import { AfterViewInit, EventEmitter, NgZone, OnChanges, OnDestroy } from '@angular/core';
2
+ import type { SectionAxis, SectionView } from '../contracts/section-view.contract';
3
+ import * as i0 from "@angular/core";
4
+ export declare class SectionPaneComponent implements AfterViewInit, OnChanges, OnDestroy {
5
+ private readonly zone;
6
+ axis: SectionAxis;
7
+ view: SectionView | null;
8
+ /** A point clicked, in section coordinates (u across, v down). */
9
+ readonly pick: EventEmitter<{
10
+ u: number;
11
+ v: number;
12
+ }>;
13
+ private canvasRef;
14
+ private zoom;
15
+ private pan;
16
+ private press;
17
+ private image;
18
+ private resize?;
19
+ private frame;
20
+ constructor(zone: NgZone);
21
+ protected get axisColor(): string;
22
+ protected get label(): string;
23
+ ngAfterViewInit(): void;
24
+ ngOnChanges(): void;
25
+ ngOnDestroy(): void;
26
+ /** Back to the whole section, centred. */
27
+ fit(): void;
28
+ protected onWheel(e: WheelEvent): void;
29
+ protected onDown(e: PointerEvent): void;
30
+ protected onMove(e: PointerEvent): void;
31
+ protected onUp(e: PointerEvent): void;
32
+ private local;
33
+ /** Section units → CSS px in the pane: scale per unit across and down, and the origin. */
34
+ private transform;
35
+ private toSection;
36
+ /** Redraw on the next frame (outside Angular: a canvas paint needs no change detection). */
37
+ private draw;
38
+ private paint;
39
+ /** Each class's cut: its outlines filled and stroked, its lines drawn (a dot for one point). */
40
+ private paintRegions;
41
+ /** The other planes: across (u) and down (v), dashed in their axis colours. */
42
+ private paintCrosshair;
43
+ /** The section's image on a canvas of its own size (made again only for a new image). */
44
+ private imageCanvas;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<SectionPaneComponent, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<SectionPaneComponent, "viz-section-pane", never, { "axis": { "alias": "axis"; "required": true; }; "view": { "alias": "view"; "required": false; }; }, { "pick": "pick"; }, never, never, true, never>;
47
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The transcript-density raster's window. Its default colour scale is matplotlib's
3
+ * inferno (`INFERNO_LUT` from napari-js/colormaps), as in Xenium Explorer.
4
+ */
5
+ /** A density window from the non-empty bins: 1st to 99th percentile. */
6
+ export declare function densityAutoRange(values: ArrayLike<number>): [number, number];
@@ -0,0 +1,123 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ import type { SpatialEmbedding, SpatialEmbeddingMeta } from '../contracts/spatial-dataset.contract';
3
+ /** Where a browser-side embedding computation stands, for the progress bar and messages. */
4
+ export interface EmbeddingComputeState {
5
+ /** True while a run is going. */
6
+ running: boolean;
7
+ /** 0..1 while running, or null before the first report. */
8
+ fraction: number | null;
9
+ /** Which backend the worker got — 'webgpu', 'wasm' or 'cpu'. */
10
+ backend: string | null;
11
+ message: string | null;
12
+ error: string | null;
13
+ }
14
+ /** Where the PCA scores come from: a port that serves embeddings by name. */
15
+ export type EmbeddingSource = (name: string) => Promise<SpatialEmbedding>;
16
+ /**
17
+ * Largest dataset a t-SNE is offered for in the browser.
18
+ *
19
+ * t-SNE is O(N²) per iteration — vectorised on the GPU, but not approximated — so the cost
20
+ * is quadratic in observations. Measured end to end in Firefox on WebGPU: 2,688 points took
21
+ * 95 s. That scales to roughly five and a half minutes at this threshold, and to about 76
22
+ * minutes at seqFISH's 19,416, which was also measured offline.
23
+ *
24
+ * Past this the option is WITHDRAWN rather than offered with a warning. An hour-long job
25
+ * started from a button is not a choice a reader can meaningfully consent to in a dialog,
26
+ * and a t-SNE that large belongs in the offline pipeline, where it can run once and be
27
+ * served to everyone.
28
+ */
29
+ export declare const BROWSER_TSNE_MAX_OBSERVATIONS = 5000;
30
+ /**
31
+ * A t-SNE the dataset does not publish, offered so it can be computed here.
32
+ *
33
+ * A dropped-in `.h5ad` typically carries one UMAP and a PCA, and no t-SNE — the two views
34
+ * answer different questions, so having only one is a real gap. Computing it needs no
35
+ * expression data: t-SNE runs on the PCA scores, which is why this can happen in the
36
+ * browser at all while PCA cannot.
37
+ */
38
+ export declare const COMPUTABLE_EMBEDDINGS: readonly SpatialEmbeddingMeta[];
39
+ /** Roughly how long a t-SNE of `n` observations takes, in seconds, from the measured anchor. */
40
+ export declare function tsneEstimateSeconds(n: number): number;
41
+ /** A duration as something to put on a button: `~42s`, `~6 min`. */
42
+ export declare function estimateLabel(seconds: number): string;
43
+ /**
44
+ * The browser-side embedding computation behind the charts' Embedding tab: which
45
+ * embeddings to offer for a dataset, the t-SNE run itself (PCA scores from the port, then a
46
+ * worker), its progress, and the results computed this session.
47
+ *
48
+ * A run is several awaits long — the PCA scores arrive over HTTP, then the worker takes a
49
+ * minute or more — and the dataset can change at any of them, including before the run
50
+ * exists to be terminated. Every await is checked against a {@link Supersede} that a
51
+ * dataset switch ({@link setDataset}) or teardown ({@link abandon}) cancels, so the scores
52
+ * fetched for one dataset are never embedded and drawn over another's observations.
53
+ *
54
+ * Plain class: the owner renders {@link state} (or {@link state$}).
55
+ */
56
+ export declare class EmbeddingComputeCoordinator {
57
+ readonly state$: BehaviorSubject<EmbeddingComputeState>;
58
+ /** True when a t-SNE is missing but the dataset is too big to embed here. */
59
+ tooLarge: boolean;
60
+ /** Observations in the live dataset, kept for the cost estimate. */
61
+ observationCount: number;
62
+ /** Coordinates computed in this browser, by name. Not persisted: a reload recomputes. */
63
+ private readonly computed;
64
+ /** The live run, when one is going. */
65
+ private run;
66
+ private readonly load;
67
+ get state(): EmbeddingComputeState;
68
+ get running(): boolean;
69
+ /**
70
+ * A new dataset: drop everything computed or computing for the previous one, and return
71
+ * the embeddings to offer — the published ones, plus a t-SNE to compute where the dataset
72
+ * has a PCA to embed, no t-SNE of its own, and is small enough. Otherwise the menu would
73
+ * advertise work that cannot start, or duplicate what is already served.
74
+ */
75
+ setDataset(published: readonly SpatialEmbeddingMeta[], observationCount: number): SpatialEmbeddingMeta[];
76
+ /** Whether `meta` is one this browser would have to compute. */
77
+ isComputable(meta: SpatialEmbeddingMeta | null): boolean;
78
+ /** Whether `meta` has already been computed this session. */
79
+ isComputed(meta: SpatialEmbeddingMeta | null): boolean;
80
+ /** The coordinates computed for `name`, if any. */
81
+ result(name: string): SpatialEmbedding | undefined;
82
+ /** Roughly how long a run would take here, in seconds. Shown before the click: a progress
83
+ * bar tells you a job is going; only an estimate tells you whether to start it. */
84
+ get estimateSeconds(): number;
85
+ /** {@link estimateSeconds} as something to put on a button. */
86
+ get estimateLabel(): string;
87
+ /** Why the option is absent, when a dataset is past the threshold. */
88
+ get tooLargeNote(): string;
89
+ /**
90
+ * Compute `meta` here, in a worker, from the dataset's PCA among `embeddings`.
91
+ *
92
+ * The PCA scores come from the port as an ordinary embedding — the server derives them,
93
+ * because PCA needs the whole expression matrix (185 MB for a Visium dataset) while
94
+ * t-SNE needs only the scores (0.51 MB). Sending the matrix to the browser to save a few
95
+ * seconds of arithmetic would be a far slower answer.
96
+ *
97
+ * @returns the coordinates, to draw — or null when there is nothing to draw: cancelled,
98
+ * abandoned, failed (see {@link state}), or already running.
99
+ */
100
+ start(meta: SpatialEmbeddingMeta, embeddings: readonly SpatialEmbeddingMeta[], getEmbedding: EmbeddingSource): Promise<SpatialEmbedding | null>;
101
+ /** The user's Cancel: ask the worker to stop. The run settles shortly after, with nothing. */
102
+ cancel(): void;
103
+ /**
104
+ * Drop any computation in progress, because what it is computing no longer applies.
105
+ *
106
+ * Distinct from {@link cancel}: this does not wait — the run is settled and the worker
107
+ * killed, so a dataset switch or a teardown cannot leave a t-SNE grinding on in the
108
+ * background over observations nothing is showing any more.
109
+ */
110
+ abandon(): void;
111
+ private patch;
112
+ }
113
+ /**
114
+ * The dataset's PCA, as row-major scores.
115
+ *
116
+ * Assembled from whichever PCA the source offers, widest first — a 3-D one gives t-SNE
117
+ * three components instead of two for the same request.
118
+ */
119
+ export declare function loadPcaScores(embeddings: readonly SpatialEmbeddingMeta[], getEmbedding: EmbeddingSource): Promise<{
120
+ scores: Float32Array;
121
+ nObs: number;
122
+ nDims: number;
123
+ } | null>;
@@ -18,6 +18,7 @@ export interface ComputeProgress {
18
18
  backend: string | null;
19
19
  message: string | null;
20
20
  }
21
+ /** One t-SNE to compute: the PCA scores to embed and the run's parameters. */
21
22
  export interface ComputeRequest {
22
23
  /** PCA scores, row-major `nObs x nDims`. */
23
24
  scores: Float32Array;
@@ -28,12 +29,30 @@ export interface ComputeRequest {
28
29
  iterations?: number;
29
30
  seed?: number;
30
31
  }
31
- /** Factory, so a test can supply a worker without a bundler. */
32
- export type WorkerFactory = () => Worker;
32
+ /**
33
+ * Factory, so a test can supply a worker without a bundler. May be asynchronous, as the
34
+ * default one is: it imports the worker module on demand.
35
+ */
36
+ export type WorkerFactory = () => Worker | Promise<Worker>;
37
+ /**
38
+ * One t-SNE run in its own worker: start it, follow its progress, cancel it. Single use —
39
+ * a new computation takes a new run.
40
+ */
33
41
  export declare class EmbeddingComputeRun {
34
42
  private readonly factory?;
35
43
  private worker;
36
44
  private settled;
45
+ /**
46
+ * Between `run()` being called and the worker existing.
47
+ *
48
+ * The default factory imports the worker module first, and a dataset switch or a
49
+ * teardown can call {@link terminate} in that window. With no worker yet there is
50
+ * nothing to kill, so terminating bumps {@link generation} instead and the run stops
51
+ * itself the moment the worker arrives, before posting it any work.
52
+ */
53
+ private starting;
54
+ /** Bumped by {@link terminate}; a run that finds it changed across its await gives up. */
55
+ private generation;
37
56
  /**
38
57
  * Settles a run that is still waiting, set for as long as one is.
39
58
  *
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Transcript "icon" mode: the marker shapes, and their outlines for the panel's previews.
3
+ * The napari view draws them as napari-js point symbols (`GLYPH_SYMBOLS` in
4
+ * `spatial-tiles/transcript-layers.ts`), with these outlines' proportions.
5
+ */
6
+ /** Marker shapes for the transcript "icon" mode. */
7
+ export declare const TRANSCRIPT_GLYPHS: readonly ["circle", "star", "triangle", "square", "diamond", "cross", "hexagon", "triangle-down", "pentagon", "x"];
8
+ /** One of the marker shapes in {@link TRANSCRIPT_GLYPHS}. */
9
+ export type TranscriptGlyph = (typeof TRANSCRIPT_GLYPHS)[number];
10
+ /**
11
+ * Unit outline of a glyph, radius ≈ 1, centred on the origin, as `[x0, y0, x1, y1, …]` — the
12
+ * panel's preview of the point symbol the canvas draws.
13
+ */
14
+ export declare function glyphOutline(glyph: TranscriptGlyph): Float32Array;
15
+ /** The glyph a gene gets by default: by its position in the selected list. */
16
+ export declare function defaultGlyphFor(slot: number): TranscriptGlyph;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Level-of-detail planning for tiled spatial geometry — cell outlines and transcripts.
3
+ *
4
+ * The renderer knows its camera (a world-space centre, a zoom in canvas pixels per world
5
+ * unit, a canvas size); a tiled dataset knows its grids (one per level, in observation
6
+ * units). This module is the bridge: which level the zoom calls for and which tiles are on
7
+ * screen. Everything here is pure, so the policy — the part that decides whether the view
8
+ * is fast and legible — is testable without a GPU.
9
+ *
10
+ * Observation units map onto world units through the dataset's `imageRef` affine
11
+ * (`world = data · scale + translate`), so "pixels per observation unit" is
12
+ * `zoom · scale`. For a Xenium bundle the data unit is the micron and the world unit the
13
+ * morphology pixel.
14
+ */
15
+ import type { SpatialBounds, SpatialDataset, SpatialImageRef, SpatialTileLevel } from '../contracts/spatial-dataset.contract';
16
+ import type { SpatialViewState } from '../contracts/display-types';
17
+ /** A rectangle in observation coordinates. */
18
+ export interface DataRect {
19
+ x0: number;
20
+ y0: number;
21
+ x1: number;
22
+ y1: number;
23
+ }
24
+ /** Tile address. */
25
+ export interface TileKey {
26
+ level: number;
27
+ gx: number;
28
+ gy: number;
29
+ }
30
+ /** Whether cell outlines are drawn: the user's choice, else on when the dataset has any. */
31
+ export declare function cellsShown(dataset: Pick<SpatialDataset, 'polygonTiles' | 'polygons'> | null, view: Pick<SpatialViewState, 'showCells'>): boolean;
32
+ /** A column holding a hand-curated cell-type annotation, by naming convention. */
33
+ export declare function isCuratedColumn(name: string): boolean;
34
+ /**
35
+ * The categorical column that names each cell's type: the view's choice when it is a
36
+ * column of this dataset, else the first categorical column that is not a curated
37
+ * annotation (a pipeline's clustering is the default; curation is opted into), else
38
+ * any categorical column.
39
+ */
40
+ export declare function cellTypeColumnFor(dataset: SpatialDataset, view: Pick<SpatialViewState, 'cellTypeColumn'>): string | null;
41
+ /** A stable string id for a tile key, `level/gx/gy` — usable as a Map key. */
42
+ export declare function tileId(k: TileKey): string;
43
+ /** Canvas pixels per observation unit along x, for a camera zoom and a data→world affine. */
44
+ export declare function pixelsPerDataUnit(zoom: number, ref?: SpatialImageRef | null): number;
45
+ /**
46
+ * The part of observation space the camera shows, padded by `margin` (a fraction of the
47
+ * viewport) so tiles just off screen are already there when a pan brings them in: napari-js's
48
+ * `worldViewport`, mapped back through the inverse of the data→world affine.
49
+ */
50
+ export declare function visibleDataRect(center: readonly [number, number], zoom: number, canvasW: number, canvasH: number, ref?: SpatialImageRef | null, margin?: number): DataRect | null;
51
+ /**
52
+ * Tiles of one level intersecting `rect`, clipped to the dataset's `bounds` (so zooming
53
+ * out over empty canvas does not ask for tiles that cannot exist). Ordered from the
54
+ * rectangle's centre outward, so the middle of the screen fills in first.
55
+ *
56
+ * Tile `g` covers `[g·s, (g+1)·s)`. The view's far edge is open — a tile starting exactly
57
+ * at `rect.x1` shows nothing — but the bounds' far edge is closed: the bounds are the
58
+ * extreme observations' coordinates, so one sits exactly on `bounds[2]`, in the tile
59
+ * starting there.
60
+ */
61
+ export declare function tilesInRect(rect: DataRect, level: number, levels: readonly SpatialTileLevel[], bounds?: SpatialBounds | null, limit?: number): TileKey[];
62
+ /** {@link tilesInRect} for a grid whose tile (0, 0) starts at `origin`. */
63
+ export declare function tilesInRectFrom(origin: readonly [number, number], rect: DataRect, level: number, levels: readonly SpatialTileLevel[], bounds?: SpatialBounds | null, limit?: number): TileKey[];
64
+ /** Area of `rect` inside `bounds` (the whole rect when there are none). */
65
+ export declare function visibleArea(rect: DataRect, bounds?: SpatialBounds | null): number;
66
+ /**
67
+ * Typical cell diameter, in observation units, used to judge how large cells appear.
68
+ * Derived from the per-observation radius when there is one; 12 µm otherwise.
69
+ */
70
+ export declare function typicalCellDiameter(radius: Float32Array | number | undefined, fallback?: number): number;
71
+ /**
72
+ * On-screen cell diameter (px) at or above which each polygon level is used. A level
73
+ * halves the vertices of the one below, so each should take over when the cell is about
74
+ * half as large on screen. Below the last finite threshold outlines are not drawn at
75
+ * all — a cell a few pixels wide is a dot, and the observation markers already draw it
76
+ * as one.
77
+ *
78
+ * Xenium's fourth level (3 vertices per cell) is deliberately never used: seen on
79
+ * screen it is a field of triangles, which reads as an artefact rather than as cells.
80
+ * The dots below 8 px say the same thing more honestly.
81
+ */
82
+ export declare const POLYGON_LEVEL_MIN_CELL_PX: number[];
83
+ /**
84
+ * Which polygon level suits this zoom, or -1 for "too small to outline".
85
+ * `detail` > 1 prefers finer levels (sharper, slower); < 1 coarser.
86
+ */
87
+ export declare function polygonLevelFor(pxPerUnit: number, cellDiameter: number, levelCount: number, detail?: number): number;
88
+ /**
89
+ * Which transcript level suits this zoom: the one whose tiles come out closest to
90
+ * `targetTilePx` on screen. Coarser levels aggregate more, so this keeps the number of
91
+ * markers per screen roughly constant however far out the camera is — the property that
92
+ * keeps the view fast.
93
+ */
94
+ export declare function transcriptLevelFor(pxPerUnit: number, levels: readonly SpatialTileLevel[], targetTilePx?: number): number;
@@ -0,0 +1,64 @@
1
+ import { Observable } from 'rxjs';
2
+ import { PlotType } from '../contracts/plot-type';
3
+ import { SpatialDataPort } from '../contracts/ports/spatial-data.port';
4
+ import { SpatialObservations } from '../contracts/spatial-dataset.contract';
5
+ import { ISpatialControls } from '../contracts/visualizer.contract';
6
+ import { RegionStore } from '../store/region-store.service';
7
+ import { SpatialSelectionStore } from '../store/spatial-selection.service';
8
+ import { VisualizerStore } from '../store/visualizer-store.service';
9
+ /** The renderer-side spatial readouts the controls surface (the napari-js backend). */
10
+ export interface SpatialRendererFeeds {
11
+ readonly transcriptEstimate$: {
12
+ asObservable(): Observable<{
13
+ points: number;
14
+ max: number;
15
+ } | null>;
16
+ };
17
+ readonly geneCountsInView$: {
18
+ asObservable(): Observable<Record<string, number> | null>;
19
+ };
20
+ readonly densityStats$: {
21
+ asObservable(): Observable<{
22
+ lo: number;
23
+ hi: number;
24
+ max: number;
25
+ } | null>;
26
+ };
27
+ /** Observations projected to canvas pixels by the 3D camera, or null when the cloud is not mounted. */
28
+ getSpatialScreenProjection(obs: SpatialObservations): Float32Array | null;
29
+ }
30
+ /** What the facade works over: the shared stores, the renderer feeds and the router's view state. */
31
+ export interface SpatialControlsContext {
32
+ readonly store: VisualizerStore;
33
+ readonly regionStore: RegionStore;
34
+ readonly selectionStore: SpatialSelectionStore;
35
+ readonly napari: SpatialRendererFeeds;
36
+ /** The plot type on screen (the 3D cloud selects in screen space). */
37
+ plotType(): PlotType;
38
+ /** The displayed slice (a volume-backed dataset selects within one section). */
39
+ zIndex(): number;
40
+ }
41
+ /**
42
+ * The spatial-omics controls (`ISpatialControls`) over a host's `SPATIAL_DATA_PORT`.
43
+ *
44
+ * Backend-neutral: the view state lives in the shared `VisualizerStore` (like the
45
+ * colormap) and the selection in the `SpatialSelectionStore`, so the controls keep
46
+ * working across a plot-type switch and a host can drive them before any backend has
47
+ * mounted. Owns its mirror of the port's dataset — dropping a stale selection and an
48
+ * unsatisfiable colour source when the dataset changes — and the subscription behind
49
+ * it, released by {@link dispose} (review CORE-30).
50
+ */
51
+ export declare class SpatialControlsFacade {
52
+ private readonly port;
53
+ private readonly ctx;
54
+ /** The controls; one object for the facade's life, so consumers can hold it. */
55
+ readonly controls: ISpatialControls;
56
+ /** Latest dataset, mirrored so `selectFromRegions()` can answer synchronously — it
57
+ * runs from a button click and must not await a round-trip. */
58
+ private dataset;
59
+ private readonly sub;
60
+ constructor(port: SpatialDataPort, ctx: SpatialControlsContext);
61
+ /** Release the port subscription (the router's injector is being destroyed). */
62
+ dispose(): void;
63
+ private build;
64
+ }
@@ -27,6 +27,7 @@ export interface DensityGrid {
27
27
  /** World size of one voxel per axis, in the observations' units. */
28
28
  voxelSize: [number, number, number];
29
29
  }
30
+ /** Kernel and observation subset for a density estimate. */
30
31
  export interface DensityOptions {
31
32
  /** Kernel σ per axis, in the observations' units. */
32
33
  sigma: [number, number, number];
@@ -44,12 +45,21 @@ export interface DensityOptions {
44
45
  */
45
46
  export declare function densityGrid(dataset: SpatialDataset, stride?: number, targetLongAxis?: number, zStride?: number): DensityGrid | null;
46
47
  /**
47
- * In-place separable Gaussian along one axis of a w x h x d field.
48
+ * A normalised 1-D Gaussian kernel of radius `ceil(3σ)` (at least 1), centre at
49
+ * index `radius`.
50
+ */
51
+ export declare function gaussianKernel(sigma: number): {
52
+ kernel: Float32Array;
53
+ radius: number;
54
+ };
55
+ /**
56
+ * In-place separable Gaussian along one axis of a w x h x d field. A 2-D field is
57
+ * the `d = 1` case.
48
58
  *
49
- * Exported because the gene-map volume estimates a different quantity on the same
50
- * lattice with the same kernel (see `spatial-expression.ts`): two copies of a
51
- * separable blur would be two chances to smooth the estimate and its normaliser
52
- * differently, which is the one thing a Nadaraya-Watson field cannot survive.
59
+ * The ONE blur for every field in this folder: the 2-D gene map, the gene-map
60
+ * volume and the density volumes all smooth through it. Two copies of a separable
61
+ * blur would be two chances to smooth an estimate and its normaliser differently,
62
+ * which is the one thing a Nadaraya-Watson field cannot survive.
53
63
  */
54
64
  export declare function blurVolumeAxis(field: Float32Array, w: number, h: number, d: number, axis: 0 | 1 | 2, sigmaVox: number): void;
55
65
  /**
@@ -19,45 +19,16 @@ import { ColormapValue } from '../contracts/display-types';
19
19
  *
20
20
  * COLOUR REPRESENTATION
21
21
  * ---------------------
22
- * Internally everything is a flat `Float32Array` of `[r,g,b,a, …]` in 0..1 —
23
- * one allocation for N points, GPU-upload shaped. napari-js 0.12.0's
24
- * `PointsLayer.faceColor` takes `RGBA[]` (an array of 4-tuples) instead, so
25
- * {@link toRgbaTuples} adapts at the boundary; when the layer accepts a typed
26
- * array the adapter goes away and the flat buffer is passed straight through.
22
+ * Everything is a flat `Float32Array` of `[r,g,b,a, …]` in 0..1 — one
23
+ * allocation for N points, GPU-upload shaped. napari-js (≥ 0.15)
24
+ * `PointsLayer.faceColor` and `Points3DLayer.colors` take it as is.
27
25
  */
28
- /** napari-js per-point colour tuple: r, g, b, a in 0..1. */
26
+ /** One RGBA colour, r, g, b, a in 0..1 (napari-js's broadcast colour). */
29
27
  export type RGBA = [number, number, number, number];
30
28
  /** Neutral grey for observations with no value (NaN, or {@link NO_CATEGORY}). */
31
29
  export declare const MISSING_COLOR: Rgb;
32
30
  /** Default alpha for muted (background / unselected) points — CosMx-style context. */
33
31
  export declare const DEFAULT_MUTED_OPACITY = 0.15;
34
- /**
35
- * Largest number of CATEGORIES whose colours survive the 3D points layer's LUT
36
- * intact.
37
- *
38
- * That layer has no per-point RGBA — it maps a per-point SCALAR through a
39
- * 256-entry colormap LUT — so a categorical palette is encoded as one contiguous
40
- * block of LUT entries per value. Measured against napari-js, every K in 2..96
41
- * blocks round-trips exactly and K=97 is the first that does not: 256 texels
42
- * cannot keep more values apart than that.
43
- *
44
- * One of those 96 blocks is spent on {@link NO_CATEGORY}, which every column can
45
- * contain, so what fits is **95 categories** — the number published here. It was
46
- * 96 while the encoder rejected at 96, which meant a 96-category column drew flat
47
- * with the panel showing no warning: the one failure this ceiling exists to
48
- * prevent, arrived at from the other direction.
49
- *
50
- * Above it the cloud draws FLAT rather than draw a lie, because subtly wrong
51
- * category colours under a confident legend is the failure nobody catches.
52
- *
53
- * A limit of that one layer, and of nothing else: the 2D markers carry per-point
54
- * RGBA, and a density volume is a scalar field per cluster. Shared here so the
55
- * renderer that enforces it and the panel that explains it cannot drift apart.
56
- */
57
- export declare const SPATIAL_3D_MAX_CATEGORIES = 95;
58
- /** LUT blocks the 3D layer can keep apart — {@link SPATIAL_3D_MAX_CATEGORIES}
59
- * plus the one reserved for a missing value. */
60
- export declare const SPATIAL_3D_LUT_BLOCKS: number;
61
32
  /**
62
33
  * Fallback categorical palette. Colour-blind-safe and stable, so a category
63
34
  * without an authored colour still lands somewhere sensible and lands there
@@ -73,12 +44,14 @@ interface MuteOptions {
73
44
  /** `1` at index i mutes observation i. Absent ⇒ nothing is muted. */
74
45
  muted?: Uint8Array | null;
75
46
  }
47
+ /** Options for {@link encodeCategorical}: a colour per category, plus muting. */
76
48
  export interface CategoricalEncodingOptions extends MuteOptions {
77
49
  /** Per-category `#rrggbb`, index-aligned with the column's categories. */
78
50
  colors: string[];
79
51
  /** Colour for {@link NO_CATEGORY}. Default {@link MISSING_COLOR}. */
80
52
  missingColor?: Rgb;
81
53
  }
54
+ /** Options for {@link encodeContinuous}: a colormap, a contrast window and scaling, plus muting. */
82
55
  export interface ContinuousEncodingOptions extends MuteOptions {
83
56
  /** 256-entry RGB table from {@link buildColormapLut}. */
84
57
  lut: Rgb[];
@@ -90,8 +63,8 @@ export interface ContinuousEncodingOptions extends MuteOptions {
90
63
  /** Colour for `NaN`. Default {@link MISSING_COLOR}. */
91
64
  missingColor?: Rgb;
92
65
  }
93
- /** Parse `#rgb` / `#rrggbb` to 0–255 RGB; unparseable input falls back to grey.
94
- * Exported so the 3D LUT path parses palettes exactly as the 2D path does. */
66
+ /** Parse a CSS colour (`#rgb` / `#rrggbb`, see {@link parseCssColor}) to 0–255 RGB; unparseable
67
+ * input falls back to grey. Exported so the tile layers parse palettes exactly as the markers do. */
95
68
  export declare function parseHex(hex: string): Rgb;
96
69
  /**
97
70
  * Per-category colours: the column's authored `colors` where present (so the
@@ -110,7 +83,9 @@ export declare function encodeContinuous(values: Float32Array, opts: ContinuousE
110
83
  * fractions (0.01 / 0.99 clips the extreme 1% at each end).
111
84
  *
112
85
  * Returns `[0, 1]` for an empty or all-missing vector so callers always get a
113
- * usable window.
86
+ * usable window. A large vector is windowed from an even sample of it — see
87
+ * `spatial/stats.ts` — because this runs on every recolour, and sorting millions
88
+ * of values each time cost most of a second.
114
89
  */
115
90
  export declare function contrastWindow(values: Float32Array, lo?: number, hi?: number): [number, number];
116
91
  /**
@@ -122,14 +97,6 @@ export declare function contrastWindow(values: Float32Array, lo?: number, hi?: n
122
97
  * often don't); it is in image pixels, like everything else in this space.
123
98
  */
124
99
  export declare function markerDiameters(observations: SpatialObservations, fallbackRadius?: number): number | Float32Array;
125
- /**
126
- * Adapt a flat RGBA buffer to the `RGBA[]` shape napari-js 0.12.0's
127
- * `PointsLayer.faceColor` accepts. One 4-element array per point — the reason
128
- * this is a named boundary rather than inlined: it is the one place the model
129
- * stops being typed-array shaped, and it is what a future napari-js taking a
130
- * `Float32Array` would delete.
131
- */
132
- export declare function toRgbaTuples(flat: Float32Array): RGBA[];
133
100
  /** Convenience: a 256-entry LUT for a colormap value, falling back to Viridis. */
134
101
  export declare function lutFor(colormapValue: unknown, reverse?: boolean): Rgb[];
135
102
  /** True when every entry of a LUT is a neutral grey. Tested on the VALUES rather
@@ -40,6 +40,10 @@ export interface ExpressionFieldOptions {
40
40
  /** Observations to include; every one when absent (a plane, a selection). */
41
41
  indices?: Uint32Array;
42
42
  }
43
+ /**
44
+ * A 2D field of kernel-weighted mean expression on a `width × height` grid, with the
45
+ * support that says where it was actually measured.
46
+ */
43
47
  export interface ExpressionField {
44
48
  width: number;
45
49
  height: number;
@@ -60,6 +64,15 @@ export interface ExpressionField {
60
64
  * than an empty one the reader has to interpret.
61
65
  */
62
66
  export declare function expressionField(obs: SpatialObservations, opts: ExpressionFieldOptions): ExpressionField | null;
67
+ /**
68
+ * Contrast window of a gene map (2-D or 3-D), from percentiles of the MEASURED pixels.
69
+ *
70
+ * `mean` is 0 wherever `support` is 0, and those zeros are not data: windowing the whole
71
+ * array pins the low percentile at 0 and slides the high one upward on any section the
72
+ * tissue does not fill, so the colours stop describing what was measured. `lo`/`hi` are
73
+ * fractions, as for `contrastWindow`; `[0, 1]` when nothing was measured.
74
+ */
75
+ export declare function fieldContrastWindow(field: Pick<ExpressionField | ExpressionVolumeField, 'mean' | 'support'>, lo?: number, hi?: number): [number, number];
63
76
  /**
64
77
  * Colour a field into RGBA8 for a `channels: 4` image source.
65
78
  *
@@ -73,28 +86,7 @@ export declare function colorExpressionField(field: ExpressionField, lut: readon
73
86
  log?: boolean;
74
87
  opacity?: number;
75
88
  }): Uint8Array;
76
- /**
77
- * The same estimator in 3D: a gene's expression over a serially sectioned
78
- * specimen, on a {@link DensityGrid} lattice.
79
- *
80
- * Two modes, and the difference between them is the difference between a
81
- * measurement and an estimate:
82
- *
83
- * - **sheets** (`interpolate` unset) blurs in-plane only, so exactly the z planes
84
- * that hold cells are filled and the gaps between sections stay empty. This is
85
- * the measured sections, stacked — the 2D gene map of each slide, at its own z.
86
- * - **volume** (`interpolate` set) also smooths along z, so the planes between
87
- * the sections carry an interpolated value. Smoothing the numerator and the
88
- * denominator together is what makes that honest: it is Nadaraya-Watson, so an
89
- * unimaged plane inherits its neighbours' MEAN rather than their sum thinned
90
- * over a gap nobody sampled. Outside the sampled range the field is zeroed —
91
- * "smoothed between the imaged sections" must not put expression in front of
92
- * the first section or behind the last.
93
- *
94
- * Individual cells are still never interpolated: consecutive sections sample
95
- * different cells, so there is nothing to interpolate along. What is interpolated
96
- * is a field, which is legitimately defined between the planes.
97
- */
89
+ /** Options for {@link expressionVolume}. */
98
90
  export interface ExpressionVolumeOptions {
99
91
  /** Kernel σ per axis, in the observations' own units. The z term is used only
100
92
  * when {@link interpolate} is set. */
@@ -107,6 +99,10 @@ export interface ExpressionVolumeOptions {
107
99
  * sheets isolated at their own planes. */
108
100
  interpolate?: boolean;
109
101
  }
102
+ /**
103
+ * The 3D counterpart of {@link ExpressionField}: kernel-weighted mean expression on a
104
+ * `width × height × depth` voxel grid, with its support.
105
+ */
110
106
  export interface ExpressionVolumeField {
111
107
  width: number;
112
108
  height: number;
@@ -118,6 +114,28 @@ export interface ExpressionVolumeField {
118
114
  /** Finite range of `mean` over the supported voxels, for a contrast window. */
119
115
  range: [number, number];
120
116
  }
117
+ /**
118
+ * The same estimator in 3D: a gene's expression over a serially sectioned
119
+ * specimen, on a {@link DensityGrid} lattice.
120
+ *
121
+ * Two modes, and the difference between them is the difference between a
122
+ * measurement and an estimate:
123
+ *
124
+ * - **sheets** (`interpolate` unset) blurs in-plane only, so exactly the z planes
125
+ * that hold cells are filled and the gaps between sections stay empty. This is
126
+ * the measured sections, stacked — the 2D gene map of each slide, at its own z.
127
+ * - **volume** (`interpolate` set) also smooths along z, so the planes between
128
+ * the sections carry an interpolated value. Smoothing the numerator and the
129
+ * denominator together is what makes that honest: it is Nadaraya-Watson, so an
130
+ * unimaged plane inherits its neighbours' MEAN rather than their sum thinned
131
+ * over a gap nobody sampled. Outside the sampled range the field is zeroed —
132
+ * "smoothed between the imaged sections" must not put expression in front of
133
+ * the first section or behind the last.
134
+ *
135
+ * Individual cells are still never interpolated: consecutive sections sample
136
+ * different cells, so there is nothing to interpolate along. What is interpolated
137
+ * is a field, which is legitimately defined between the planes.
138
+ */
121
139
  export declare function expressionVolume(obs: SpatialObservations, grid: DensityGrid, opts: ExpressionVolumeOptions): ExpressionVolumeField | null;
122
140
  /**
123
141
  * Encode a field into the uint8 scalar a `VolumeLayer` renders, windowed the same
@@ -12,6 +12,7 @@
12
12
  /** Fraction of the viewport the coordinates are fitted into, so the outermost markers are not
13
13
  * flush against the edge. Matches napari-js's own fit margin. */
14
14
  export declare const SPATIAL_FIT_MARGIN = 0.95;
15
+ /** A 2D camera framing: where to centre, and how far to zoom. */
15
16
  export interface SpatialFraming {
16
17
  /** World point to put at the centre of the viewport. */
17
18
  center: [number, number];
@@ -35,6 +35,7 @@ export interface HeatmapGroups {
35
35
  codes: Uint16Array;
36
36
  categories: readonly string[];
37
37
  }
38
+ /** Options for {@link heatmapMatrix}: the observations, scaling and size limits. */
38
39
  export interface HeatmapMatrixOptions {
39
40
  /** Observations to include; every one when absent (an ROI selection). */
40
41
  indices?: Uint32Array;
@@ -62,6 +63,7 @@ export interface HeatmapMatrixOptions {
62
63
  */
63
64
  maxCols?: number;
64
65
  }
66
+ /** Mean expression of genes (rows) per group (columns), ready for a heatmap trace. */
65
67
  export interface HeatmapMatrix {
66
68
  /** Gene names, one per row, in the order given. */
67
69
  rows: string[];