@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
@@ -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[];
@@ -1,14 +1,14 @@
1
1
  /**
2
- * What is under the cursor, and what to say about it.
2
+ * What to say about the observation under the cursor.
3
3
  *
4
4
  * A coloured cloud answers "how is this annotation distributed"; it cannot answer
5
5
  * "which class is THAT" — the legend has 34 entries, several of them similar
6
6
  * colours, and matching a dot to a swatch by eye is exactly the task a tooltip
7
7
  * exists to remove.
8
8
  *
9
- * Pure — no DOM, no camera, no data access. The renderer supplies screen
10
- * positions (it owns the projection) and the active colour source; everything
11
- * here is arithmetic and string formatting, so it is tested directly.
9
+ * Pure — no DOM, no camera, no data access. Finding the observation is the
10
+ * renderer's (napari-js picks on the layers it drew); this is string formatting
11
+ * over the active colour source, so it is tested directly.
12
12
  */
13
13
  /** The colour source a tooltip describes, as the renderer already has it. */
14
14
  export type HoverSource = {
@@ -26,18 +26,6 @@ export type HoverSource = {
26
26
  /** Unit for the value, when the dataset declares one. */
27
27
  unit?: string;
28
28
  };
29
- /**
30
- * Index of the drawn observation nearest `(x, y)` within `maxDist` screen pixels,
31
- * or -1.
32
- *
33
- * `screen` is `[x0, y0, x1, y1, …]` indexed BY OBSERVATION, with NaN for anything
34
- * not currently drawn — off screen, behind the eye, or on a hidden section. NaN
35
- * fails every comparison, so those are skipped without a special case.
36
- *
37
- * Ties go to the LATER observation, which is the one drawn on top and therefore
38
- * the one the user believes they are pointing at.
39
- */
40
- export declare function nearestObservation(screen: Float32Array, x: number, y: number, maxDist: number): number;
41
29
  /**
42
30
  * The tooltip's lines for one observation: what it is, then which column said so.
43
31
  *
@@ -0,0 +1,135 @@
1
+ import type { CategoricalColumnMeta, SpatialColumnMeta, SpatialDataset, SpatialMarkerGenes } from '../contracts/spatial-dataset.contract';
2
+ import type { SpatialCategoricalView } from '../contracts/visualizer.contract';
3
+ import type { ColormapValue, SpatialViewState, TranscriptGlyphName } from '../contracts/display-types';
4
+ import type { Rgb } from '../contracts/colormap-lut';
5
+ /**
6
+ * Pure model of the spatial-omics panel: the option lists, rows and patches its controls
7
+ * show and write, as functions of the dataset and the view. No Angular and no state, so
8
+ * every rule here is unit-tested without a TestBed and shared by whichever panel shows it.
9
+ */
10
+ /** A labelled dropdown option. */
11
+ export interface PanelOption<T> {
12
+ label: string;
13
+ value: T;
14
+ }
15
+ /** A gene name as a dropdown option. Objects rather than bare strings because the
16
+ * dropdown filters on a named field (`filterBy="label"`), which a string has not. */
17
+ export declare function geneOption(name: string): PanelOption<string>;
18
+ /** A transcript glyph choice, with an SVG `points` string for its preview. */
19
+ export interface GlyphOption extends PanelOption<TranscriptGlyphName> {
20
+ points: string;
21
+ }
22
+ /** Glyph choices with an SVG `points` string for the preview. */
23
+ export declare const GLYPH_OPTIONS: GlyphOption[];
24
+ /** The preview outline of `glyph`, or `''` for an unknown one. */
25
+ export declare function glyphPoints(glyph: TranscriptGlyphName): string;
26
+ /** Outlier clipping presets, as `[lo, hi]` percentile fractions. */
27
+ export declare const CLIP_OPTIONS: PanelOption<[number, number]>[];
28
+ /**
29
+ * `group,gene` rows (CSV or TSV, header optional) → gene groups, in file order.
30
+ */
31
+ export declare function parseGeneGroups(text: string): {
32
+ name: string;
33
+ genes: string[];
34
+ }[];
35
+ /** `name — 2 categories` / `name — counts`: a column as the pickers list it. */
36
+ export declare function columnLabel(c: SpatialColumnMeta): string;
37
+ /** Colour-by column choices — "None" plus every column the dataset declares. */
38
+ export declare function columnOptions(ds: SpatialDataset | null): PanelOption<string | null>[];
39
+ /** The option lists of the cell and transcript controls, which depend on the dataset only. */
40
+ export interface TileOptions {
41
+ cellSetOptions: PanelOption<string>[];
42
+ transcriptModeOptions: PanelOption<SpatialViewState['transcriptMode']>[];
43
+ cellColorOptions: PanelOption<SpatialViewState['cellColorMode']>[];
44
+ }
45
+ /** {@link TileOptions} for `ds`: short labels, cell set first, "Both" when there are two —
46
+ * as Xenium Explorer. */
47
+ export declare function tileOptions(ds: SpatialDataset | null): TileOptions;
48
+ /** A section of the group picker. */
49
+ export interface GroupOptionSection {
50
+ label: string;
51
+ items: PanelOption<string>[];
52
+ }
53
+ /** The value the group picker uses for a family of columns. */
54
+ export declare const FAMILY_PREFIX = "family:";
55
+ /**
56
+ * The group picker: categorical columns under their section heading, a family of
57
+ * variants (k-means at k = 2…10) listed once. Values are a column name, or
58
+ * `family:<id>` for a family. The segmentation method is not a grouping of cells.
59
+ */
60
+ export declare function groupOptions(ds: SpatialDataset | null): GroupOptionSection[];
61
+ /** The group picker's value for the active group column: its family's entry, or itself. */
62
+ export declare function groupEntryFor(ds: SpatialDataset | null, column: string | null): string | null;
63
+ /** The columns of family `id`, in dataset order. */
64
+ export declare function familyMembers(ds: SpatialDataset | null, id: string): CategoricalColumnMeta[];
65
+ /** Variants of the active column's family (k = 2…10), or none when it has no family. */
66
+ export declare function groupVariantOptions(ds: SpatialDataset | null, column: string | null): PanelOption<string>[];
67
+ /** One row of the groups list: a category with its colour and cell count. */
68
+ export interface GroupRow {
69
+ label: string;
70
+ color: string;
71
+ count: number;
72
+ }
73
+ /** A grouping's categories with colours and cell counts, largest first, and their total. */
74
+ export declare function countGroupRows(v: Pick<SpatialCategoricalView, 'categories' | 'colors' | 'codes'>): {
75
+ rows: GroupRow[];
76
+ total: number;
77
+ };
78
+ /** `list` with `items` removed (`on`) or added (`!on`) — a hidden-set toggle. */
79
+ export declare function toggleHidden(list: readonly string[], items: readonly string[], on: boolean): string[];
80
+ /** One node of the selected-genes tree: a named gene group, or the ungrouped rest (`null`). */
81
+ export interface GeneTreeNode {
82
+ name: string | null;
83
+ genes: string[];
84
+ }
85
+ /** The selected genes as Explorer's tree: named groups, then the ungrouped ones. */
86
+ export declare function buildGeneTree(selected: readonly string[], groups: readonly {
87
+ name: string;
88
+ genes: readonly string[];
89
+ }[]): GeneTreeNode[];
90
+ /** Every categorical column but the segmentation method, which says nothing about genes. */
91
+ export declare function markerColumnOptions(columns: readonly SpatialColumnMeta[] | undefined): PanelOption<string>[];
92
+ /**
93
+ * Each picked cluster's marker genes as a gene group named after it. A gene that marks
94
+ * several clusters goes to the one it scores highest in, so the tree lists it once;
95
+ * clusters left with no gene are dropped.
96
+ */
97
+ export declare function markerGeneGroups(result: Pick<SpatialMarkerGenes, 'groups'>, picked: ReadonlySet<string>): {
98
+ name: string;
99
+ genes: string[];
100
+ }[];
101
+ /** `groups` merged into the view's gene groups (replacing any of the same name). */
102
+ export declare function withGeneGroups(view: Pick<SpatialViewState, 'transcriptGeneGroups'>, groups: {
103
+ name: string;
104
+ genes: string[];
105
+ }[]): SpatialViewState['transcriptGeneGroups'];
106
+ /**
107
+ * The patch that adds marker groups: the groups, their genes appended to the selection,
108
+ * transcripts coloured by cluster (as their cells are), and switched on when off.
109
+ */
110
+ export declare function markerGenesPatch(view: Pick<SpatialViewState, 'transcriptGeneGroups' | 'transcriptGenes' | 'transcriptMode'>, groups: {
111
+ name: string;
112
+ genes: string[];
113
+ }[]): Partial<SpatialViewState>;
114
+ /** The patch that imports gene groups: the groups, and their genes added to the selection. */
115
+ export declare function importGeneGroupsPatch(view: Pick<SpatialViewState, 'transcriptGeneGroups' | 'transcriptGenes'>, groups: {
116
+ name: string;
117
+ genes: string[];
118
+ }[]): Partial<SpatialViewState>;
119
+ /** `linear-gradient(...)` sampling `lut` at `steps + 1` evenly spaced stops. */
120
+ export declare function gradientCss(lut: readonly Rgb[], steps?: number): string;
121
+ /**
122
+ * The continuous colour bar, resolved exactly the way the renderer resolves its colours —
123
+ * the same override, the same grey fallback. Built from `lutFor` alone, this bar showed a
124
+ * black-to-white ramp while the canvas drew Viridis, which makes the key worse than none.
125
+ */
126
+ export declare function continuousColorBarCss(colormap: unknown, reverse: boolean, override: ColormapValue | null): string;
127
+ /** The density map's colour bar: its own colormap, Inferno by default. */
128
+ export declare function densityColorBarCss(colormap: SpatialViewState['densityColormap']): string;
129
+ /** The middle of a section stack: where a "one section" picker opens, rather than on the
130
+ * first section, which for a brain is a nearly empty olfactory-bulb slide. */
131
+ export declare function middleSection(sections: ArrayLike<number> | null): number;
132
+ /** "12 of 53" — 1-based, because the sections are slides, not array slots; `''` with none. */
133
+ export declare function sectionLabel(sections: ArrayLike<number> | null, at: number | null): string;
134
+ /** Why "All genes" is not offered yet, while the server builds its pyramid; null otherwise. */
135
+ export declare function allGenesPreparingNote(ds: SpatialDataset | null): string | null;
@@ -1,5 +1,6 @@
1
1
  import { Region } from '../models/region';
2
- import { SpatialImageRef, SpatialObservations } from '../contracts/spatial-dataset.contract';
2
+ import { RingBounds as Bounds } from '../geometry/ring';
3
+ import { SpatialImageRef, SpatialObservations, SpatialSelectionMask } from '../contracts/spatial-dataset.contract';
3
4
  /**
4
5
  * Which observations fall inside a set of drawn regions.
5
6
  *
@@ -19,11 +20,8 @@ import { SpatialImageRef, SpatialObservations } from '../contracts/spatial-datas
19
20
  * dataset's own frame and reach the world through `imageRef` — so they are
20
21
  * transformed forward before testing, matching exactly what the renderer draws.
21
22
  */
22
- /** A selection over N observations: `mask[i] === 1` when i is selected. */
23
- export interface SpatialSelectionMask {
24
- mask: Uint8Array;
25
- count: number;
26
- }
23
+ /** Moved to the dataset contract (a pure data type); re-exported here for existing importers. */
24
+ export type { SpatialSelectionMask };
27
25
  /** An empty selection over `count` observations. */
28
26
  export declare function emptySelection(count?: number): SpatialSelectionMask;
29
27
  /** Number of set entries in a mask. */
@@ -36,15 +34,13 @@ export declare function maskToIndices(mask: Uint8Array): Uint32Array;
36
34
  * unselected observation is muted — the CosMx highlight-vs-mute rule.
37
35
  */
38
36
  export declare function mutedFromSelection(selection: SpatialSelectionMask): Uint8Array | null;
39
- /** Even-odd ray cast: is (px, py) inside the closed ring xs/ys? */
37
+ /**
38
+ * Even-odd ray cast: is (px, py) inside the closed ring xs/ys?
39
+ *
40
+ * Public API kept with its (ring, point) argument order; the test itself is
41
+ * the shared `geometry/ring` one the region overlays and tools use.
42
+ */
40
43
  export declare function pointInRing(xs: readonly number[], ys: readonly number[], px: number, py: number): boolean;
41
- /** Axis-aligned bounds of a ring, for a cheap reject before the ray cast. */
42
- interface Bounds {
43
- minX: number;
44
- minY: number;
45
- maxX: number;
46
- maxY: number;
47
- }
48
44
  /** A region flattened to something testable: bounds + a hit test. */
49
45
  interface Shape {
50
46
  bounds: Bounds;
@@ -56,6 +52,16 @@ interface Shape {
56
52
  * rectangle — so those never contribute to a selection.
57
53
  */
58
54
  export declare function regionShapes(region: Region): Shape[];
55
+ /**
56
+ * A selection from an explicit list of observation indices.
57
+ *
58
+ * What a lasso in a linked plot produces: the plot knows which points the user drew
59
+ * around, and the map needs that as a mask over ALL observations. Out-of-range and
60
+ * duplicate indices are ignored rather than rejected — a plot may hand back the same
61
+ * point twice, and a stale index from a plot drawn before a dataset change must not
62
+ * throw in the middle of a selection gesture.
63
+ */
64
+ export declare function selectByIndices(indices: Iterable<number>, observationCount: number): SpatialSelectionMask;
59
65
  /**
60
66
  * Observations inside ANY of `regions` (union). Coordinates are transformed by
61
67
  * `imageRef` first, so the test happens in the same world space the regions were
@@ -68,16 +74,6 @@ export declare function regionShapes(region: Region): Shape[];
68
74
  * indexed by observation, so every consumer (charts, legend, the 3D cloud) reads it
69
75
  * the same way.
70
76
  */
71
- /**
72
- * A selection from an explicit list of observation indices.
73
- *
74
- * What a lasso in a linked plot produces: the plot knows which points the user drew
75
- * around, and the map needs that as a mask over ALL observations. Out-of-range and
76
- * duplicate indices are ignored rather than rejected — a plot may hand back the same
77
- * point twice, and a stale index from a plot drawn before a dataset change must not
78
- * throw in the middle of a selection gesture.
79
- */
80
- export declare function selectByIndices(indices: Iterable<number>, observationCount: number): SpatialSelectionMask;
81
77
  export declare function selectInRegions(observations: SpatialObservations, imageRef: SpatialImageRef | undefined, regions: readonly Region[], candidates?: Uint32Array): SpatialSelectionMask;
82
78
  /**
83
79
  * Select observations whose SCREEN projection falls inside the drawn regions.
@@ -99,7 +95,6 @@ export declare function selectInRegions(observations: SpatialObservations, image
99
95
  * never selected.
100
96
  */
101
97
  export declare function selectInRegionsProjected(screen: Float32Array, count: number, regions: readonly Region[]): SpatialSelectionMask;
102
- /** Every observation whose categorical code equals `code` — the legend click. */
103
98
  /**
104
99
  * Whether two selections hold exactly the same observations.
105
100
  *
@@ -109,5 +104,5 @@ export declare function selectInRegionsProjected(screen: Float32Array, count: nu
109
104
  * Counts are compared first, so two different selections usually cost nothing.
110
105
  */
111
106
  export declare function sameSelection(a: SpatialSelectionMask, b: SpatialSelectionMask): boolean;
107
+ /** Every observation whose categorical code equals `code` — the legend click. */
112
108
  export declare function selectByCategory(codes: Uint16Array, code: number): SpatialSelectionMask;
113
- export {};
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Merging and filtering of the spatial-tile wire format (observation ids, NO_CATEGORY): the
3
+ * pieces of the 2D view's tile loop that are pure — concatenating tiles, dropping hidden
4
+ * groups and genes, and the density-grid markers of a zoomed-out gene selection.
5
+ *
6
+ * These work on SIV's own tile contract, so they stay in SIV rather than moving to napari-js.
7
+ */
8
+ import type { SpatialViewState } from '../contracts/display-types';
9
+ import { SpatialDensityRaster, SpatialPolygonTile, SpatialTranscriptTile } from '../contracts/spatial-dataset.contract';
10
+ import type { DataRect } from './lod';
11
+ /** Rings whose owning cell is in a switched-off group removed. */
12
+ export declare function filterRings(rings: SpatialPolygonTile, hidden: {
13
+ codes: Uint16Array;
14
+ hidden: Uint8Array;
15
+ } | null): SpatialPolygonTile;
16
+ /** Slots (indices into the selected genes) switched off with their eye toggle. */
17
+ export declare function hiddenGeneSlots(view: SpatialViewState): Uint8Array | null;
18
+ /** Entries in a hidden group's cell, or of a hidden gene, removed (with their sizes). */
19
+ export declare function filterTranscripts(t: SpatialTranscriptTile, px: Float32Array, hidden: {
20
+ codes: Uint16Array;
21
+ hidden: Uint8Array;
22
+ } | null, hiddenGenes: Uint8Array | null): {
23
+ merged: SpatialTranscriptTile;
24
+ px: Float32Array;
25
+ };
26
+ /** The median of `v`, from a sample of about 1024 values. */
27
+ export declare function median(v: Float32Array): number;
28
+ /** Concatenate tiles' rings into one set, dropping rings already seen (a cell straddling
29
+ * two tiles may be listed by both). */
30
+ export declare function mergePolygonTiles(tiles: SpatialPolygonTile[]): SpatialPolygonTile;
31
+ /** Concatenate transcript tiles, stopping at `limit` entries. */
32
+ export declare function mergeTranscriptTiles(tiles: SpatialTranscriptTile[], limit?: number): SpatialTranscriptTile;
33
+ /**
34
+ * One marker per (cluster, `bin` square) from per-cluster density grids: the counts of the grid
35
+ * cells inside `area` summed per square, at their count-weighted centre. `slots[c]` is the gene
36
+ * slot whose icon cluster c's markers take.
37
+ */
38
+ export declare function clusterMarkers(rasters: SpatialDensityRaster[], slots: number[], bin: number, area: DataRect): {
39
+ tile: SpatialTranscriptTile;
40
+ group: Int32Array;
41
+ };