@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
@@ -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
+ };
@@ -1,259 +1,12 @@
1
1
  /**
2
- * Level-of-detail planning for tiled spatial geometry — cell outlines and transcripts.
2
+ * Spatial tile helpers, re-exported from the modules they now live in.
3
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, which tiles are on
7
- * screen, how big a transcript marker should be. Everything here is pure, so the policy
8
- * — the part that decides whether the view is fast and legible — is testable without a
9
- * GPU.
10
- *
11
- * Observation units map onto world units through the dataset's `imageRef` affine
12
- * (`world = data · scale + translate`), so "pixels per observation unit" is
13
- * `zoom · scale`. For a Xenium bundle the data unit is the micron and the world unit the
14
- * morphology pixel.
15
- */
16
- import type { SpatialBounds, SpatialImageRef, SpatialTileLevel, SpatialTranscriptTile } from '../contracts/spatial-dataset.contract';
17
- import type { SpatialViewState } from '../contracts/display-types';
18
- import type { SpatialDataset } from '../contracts/spatial-dataset.contract';
19
- /** A rectangle in observation coordinates. */
20
- export interface DataRect {
21
- x0: number;
22
- y0: number;
23
- x1: number;
24
- y1: number;
25
- }
26
- /** Tile address. */
27
- export interface TileKey {
28
- level: number;
29
- gx: number;
30
- gy: number;
31
- }
32
- /** Whether cell outlines are drawn: the user's choice, else on when the dataset has any. */
33
- export declare function cellsShown(dataset: Pick<SpatialDataset, 'polygonTiles' | 'polygons'> | null, view: Pick<SpatialViewState, 'showCells'>): boolean;
34
- /** A column holding a hand-curated cell-type annotation, by naming convention. */
35
- export declare function isCuratedColumn(name: string): boolean;
36
- /**
37
- * The categorical column that names each cell's type: the view's choice when it is a
38
- * column of this dataset, else the first categorical column that is not a curated
39
- * annotation (a pipeline's clustering is the default; curation is opted into), else
40
- * any categorical column.
41
- */
42
- export declare function cellTypeColumnFor(dataset: SpatialDataset, view: Pick<SpatialViewState, 'cellTypeColumn'>): string | null;
43
- export declare function tileId(k: TileKey): string;
44
- /** Canvas pixels per observation unit along x, for a camera zoom and a data→world affine. */
45
- export declare function pixelsPerDataUnit(zoom: number, ref?: SpatialImageRef | null): number;
46
- /**
47
- * The part of observation space the camera shows, padded by `margin` (a fraction of the
48
- * viewport) so tiles just off screen are already there when a pan brings them in.
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
- export declare function tilesInRect(rect: DataRect, level: number, levels: readonly SpatialTileLevel[], bounds?: SpatialBounds | null, limit?: number): TileKey[];
57
- /**
58
- * Typical cell diameter, in observation units, used to judge how large cells appear.
59
- * Derived from the per-observation radius when there is one; 12 µm otherwise.
60
- */
61
- export declare function typicalCellDiameter(radius: Float32Array | number | undefined, fallback?: number): number;
62
- /**
63
- * On-screen cell diameter (px) at or above which each polygon level is used. A level
64
- * halves the vertices of the one below, so each should take over when the cell is about
65
- * half as large on screen. Below the last finite threshold outlines are not drawn at
66
- * all — a cell a few pixels wide is a dot, and the observation markers already draw it
67
- * as one.
68
- *
69
- * Xenium's fourth level (3 vertices per cell) is deliberately never used: seen on
70
- * screen it is a field of triangles, which reads as an artefact rather than as cells.
71
- * The dots below 8 px say the same thing more honestly.
72
- */
73
- export declare const POLYGON_LEVEL_MIN_CELL_PX: number[];
74
- /**
75
- * Which polygon level suits this zoom, or -1 for "too small to outline".
76
- * `detail` > 1 prefers finer levels (sharper, slower); < 1 coarser.
77
- */
78
- export declare function polygonLevelFor(pxPerUnit: number, cellDiameter: number, levelCount: number, detail?: number): number;
79
- /**
80
- * Which transcript level suits this zoom: the one whose tiles come out closest to
81
- * `targetTilePx` on screen. Coarser levels aggregate more, so this keeps the number of
82
- * markers per screen roughly constant however far out the camera is — the property that
83
- * keeps the view fast.
84
- */
85
- export declare function transcriptLevelFor(pxPerUnit: number, levels: readonly SpatialTileLevel[], targetTilePx?: number): number;
86
- /**
87
- * The bin a selection of genes is grouped into at this zoom, in observation units, or null
88
- * to draw every transcript. Bins follow the all-gene pyramid's ladder (`baseBin` × 2^m) so a
89
- * gene selection and "all genes" group alike: the finest bin whose markers land at least
90
- * `spacingPx` apart on screen. Once the finest bin is that wide, transcripts are drawn as
91
- * themselves.
92
- */
93
- export declare function geneBinSize(pxPerUnit: number, baseBin: number, levels?: number, spacingPx?: number): number | null;
94
- /** The entries of `t` inside `rect` (observation units). */
95
- export declare function clipTranscripts(t: SpatialTranscriptTile, rect: DataRect): SpatialTranscriptTile;
96
- /**
97
- * Group transcripts into `bin`-wide squares of a grid anchored at the origin (so a pan does
98
- * not move them), one entry per (group, square): `groupOf(gene slot)` says which group a gene
99
- * is in — its cluster in the gene tree, or itself. Each entry sits at its transcripts'
100
- * centroid, weighted by how many each stands for; it takes the gene and the cell holding most
101
- * of them, each summed over all its transcripts in the entry. `group[i]` is entry i's group.
102
- */
103
- export declare function groupTranscripts(t: SpatialTranscriptTile, bin: number, groupOf?: (geneSlot: number) => number): {
104
- tile: SpatialTranscriptTile;
105
- group: Int32Array;
106
- };
107
- /**
108
- * The colour of each gene-tree cluster of a selection, for colouring transcripts by cluster: a
109
- * cluster named like a group of the cells' grouping takes that group's colour (its cells and its
110
- * transcripts agree); the others take palette colours in tree order. Clusters are the tree's
111
- * groups holding a selected gene, then each ungrouped selected gene on its own. Every gene of a
112
- * cluster gets the same colour — the tree's swatches and the markers use this one map.
113
- */
114
- export declare function clusterColorMap(genes: readonly string[], groups: readonly {
115
- name: string;
116
- genes: readonly string[];
117
- }[], cellColors: ReadonlyMap<string, string>, palette: readonly string[]): Map<string, string>;
118
- /** The cluster a selected gene is in: its first gene-tree group holding it, else itself. */
119
- export declare function clusterOfGene(gene: string, groups: readonly {
120
- name: string;
121
- genes: readonly string[];
122
- }[]): string;
123
- /** Smallest and largest transcript marker, in canvas pixels. */
124
- export declare const TRANSCRIPT_MIN_PX = 4;
125
- export declare const TRANSCRIPT_MAX_PX = 32;
126
- /**
127
- * Physical diameter a single transcript is drawn at, in µm — clearly larger than the
128
- * imaged spot (~0.3 µm) so it stays legible, and small enough that neighbouring
129
- * molecules inside one cell stay apart.
130
- */
131
- export declare const TRANSCRIPT_PHYSICAL_UM = 1.2;
132
- /**
133
- * Marker diameter in canvas pixels for an entry standing for `weight` transcripts.
134
- *
135
- * The convention spatial viewers share (deck.gl's `radiusMinPixels`/`radiusMaxPixels`,
136
- * Xenium Explorer's transcript size): a PHYSICAL size, clamped to a screen-pixel range.
137
- * Zoomed out, markers sit at the minimum and never vanish; zoomed in, they grow with the
138
- * tissue instead of shrinking to specks next to cells hundreds of pixels wide. A fixed
139
- * screen size does the opposite at high zoom, which is what made transcripts disappear
140
- * at pixel-level zoom.
141
- *
142
- * Aggregates grow with the cube root of their count: area ∝ count would let one dense
143
- * aggregate swallow its neighbours, the cube root keeps a 1000-transcript cluster clearly
144
- * larger than a 10-transcript one without covering the tile.
145
- *
146
- * `pxPerMicron` is omitted for data with no known physical unit; the marker is then
147
- * screen-sized only.
148
- */
149
- export declare function transcriptMarkerPx(weight: number, scale?: number, pxPerMicron?: number): number;
150
- /** Marker shapes for the transcript "icon" mode. All star-convex, so a fan fills them. */
151
- export declare const TRANSCRIPT_GLYPHS: readonly ["circle", "star", "triangle", "square", "diamond", "cross", "hexagon", "triangle-down", "pentagon", "x"];
152
- export type TranscriptGlyph = typeof TRANSCRIPT_GLYPHS[number];
153
- /** Unit outline of a glyph, radius ≈ 1, centred on the origin, as `[x0, y0, x1, y1, …]`. */
154
- export declare function glyphOutline(glyph: TranscriptGlyph): Float32Array;
155
- /** The glyph a gene gets by default: by its position in the selected list. */
156
- export declare function defaultGlyphFor(slot: number): TranscriptGlyph;
157
- /**
158
- * Expand point markers into glyph rings for a shapes layer: entry `i` becomes a copy of
159
- * `glyphs[gene[i]]` scaled to `radius[i]` and centred on `(x[i], y[i])`.
160
- */
161
- export declare function glyphRings(x: Float32Array, y: Float32Array, radius: Float32Array, glyphOf: (i: number) => Float32Array): {
162
- coords: Float32Array;
163
- offsets: Uint32Array;
164
- };
165
- /**
166
- * A shapes layer colours through a colormap LUT, not per-shape RGBA. A categorical
167
- * palette becomes a piecewise-constant colormap: category `c` of `n` owns the band
168
- * `[c/n, (c+1)/n)`, and a shape takes the value at its band's centre, so the LUT's
169
- * linear filtering never blends two categories.
170
- *
171
- * Returns the stops (linear 0..1 RGB) and a function mapping a category code to the
172
- * value to hand the layer. `missing` is the colour of the extra band used for "no
173
- * category".
174
- */
175
- export declare function discreteColormapStops(rgb: readonly (readonly [number, number, number])[], missing: readonly [number, number, number]): {
176
- stops: {
177
- t: number;
178
- color: [number, number, number];
179
- }[];
180
- valueOf: (code: number) => number;
181
- };
182
- /**
183
- * Separable Gaussian blur of a row-major raster, `sigma` in raster cells.
184
- *
185
- * A per-gene count raster at 10 µm is mostly zeros and ones — drawn as-is it is speckle,
186
- * not a density. A σ of one to two cells (10–20 µm, about a cell diameter) turns it into
187
- * a field that reads as territory while keeping structures a few cells wide.
188
- */
189
- export declare function smoothRaster(values: Float32Array, rows: number, cols: number, sigma: number): Float32Array;
190
- /**
191
- * Colour a density raster as RGBA bytes: log-scaled, windowed at a high percentile of the
192
- * non-zero values, and faded in from transparent so empty tissue shows what is under it.
193
- */
194
- export declare function colorDensity(values: Float32Array, lut: readonly (readonly [number, number, number])[], opacity: number, { log, percentile }?: {
195
- log?: boolean | undefined;
196
- percentile?: number | undefined;
197
- }): Uint8Array;
198
- /** Smallest on-screen spacing between groups, in px — below it groups read as noise. */
199
- export declare const GROUP_MIN_SPACING_PX = 14;
200
- /** Area of `rect` inside `bounds` (the whole rect when there are none). */
201
- export declare function visibleArea(rect: DataRect, bounds?: SpatialBounds | null): number;
202
- export type AllGenesPlan = {
203
- kind: 'individual';
204
- } | {
205
- kind: 'bins';
206
- level: number;
207
- } | {
208
- kind: 'none';
209
- };
210
- /**
211
- * How to draw every transcript in view without exceeding `budget` markers.
212
- *
213
- * - The transcripts themselves, once the estimated count in view fits the budget.
214
- * - Otherwise the finest pyramid level whose bins are at least `minSpacingPx` apart on
215
- * screen and number no more than the budget — groups big enough to read, few enough
216
- * to draw.
217
- *
218
- * The count in view is estimated from the average density, which over- or under-shoots
219
- * locally; the renderer still caps what it draws, so an estimate is enough to choose.
220
- */
221
- export declare function allGenesPlan(o: {
222
- rect: DataRect;
223
- bounds: SpatialBounds;
224
- total: number;
225
- pxPerUnit: number;
226
- levels: readonly {
227
- binSize: number;
228
- }[];
229
- budget: number;
230
- canIndividual: boolean;
231
- minSpacingPx?: number;
232
- }): AllGenesPlan;
233
- /**
234
- * Diameter in px of a group of `count` transcripts in a bin `binPx` wide, where
235
- * `refCount` is a typical busy bin in view (its 95th percentile).
236
- *
237
- * Area grows with the count — a bin with a quarter of the transcripts gets half the
238
- * diameter — between a third of the bin (so a sparse bin is still visible) and a little
239
- * over the full bin (so dense neighbours just touch rather than pile up).
240
- */
241
- export declare function groupedMarkerPx(count: number, refCount: number, binPx: number, scale?: number): number;
242
- /** The `p` quantile (0..1) of a count vector — a sample of it for large vectors. */
243
- export declare function quantileOf(values: ArrayLike<number>, p: number): number;
244
- /** {@link tilesInRect} for a grid whose tile (0, 0) starts at `origin`. */
245
- export declare function tilesInRectFrom(origin: readonly [number, number], rect: DataRect, level: number, levels: readonly SpatialTileLevel[], bounds?: SpatialBounds | null, limit?: number): TileKey[];
246
- /** A density window from the non-empty bins: 1st to 99th percentile. */
247
- export declare function densityAutoRange(values: ArrayLike<number>): [number, number];
248
- /**
249
- * Colour density bins through `lut` over the window `[lo, hi]` — Xenium Explorer's
250
- * "scale threshold". Bins at or below `lo` are transparent, so empty tissue shows the
251
- * image under it; bins at or above `hi` saturate.
252
- */
253
- export declare function colorDensityWindow(values: ArrayLike<number>, lut: readonly (readonly [number, number, number])[], opacity: number, lo: number, hi: number): Uint8Array;
254
- /**
255
- * Inferno (matplotlib), as an inline `[stop, colour]` scale: the density map's default,
256
- * as in Xenium Explorer. Inline because the colormap tree's `INFERNO_LUT` key is resolved
257
- * at runtime by the store, which the renderer does not see.
4
+ * @deprecated Kept for one release so existing imports keep working. Import from
5
+ * `./lod` (level of detail, tiles in view), `./transcript-grouping` (grouping, marker
6
+ * sizing, cluster colours), `./glyphs` (transcript icons) or `./density-raster` (density
7
+ * window and scale) instead.
258
8
  */
259
- export declare const INFERNO_SCALE: [number, string][];
9
+ export * from './lod';
10
+ export * from './transcript-grouping';
11
+ export * from './glyphs';
12
+ export * from './density-raster';
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Percentiles for the spatial code: one "collect, sort, index" routine instead of one per
3
+ * caller.
4
+ *
5
+ * The callers used to differ in rounding (`round(p·(n-1))` against `floor(p·n)`), in
6
+ * sampling and in filtering, so windows computed for the same data in different views
7
+ * could disagree. Here there is one rule for each:
8
+ *
9
+ * - **Rank**: `round(p·(n-1))` — the nearest rank. `floor(p·n)` is biased upward and
10
+ * hands back the maximum for `p = 0.99` on a hundred values, outlier included.
11
+ * - **Sort**: a typed-array sort, which is native and numeric — several times faster
12
+ * than a comparator sort of a boxed `number[]`, and far lighter on the heap.
13
+ * - **Sample**: past `2·sampleSize` qualifying values, every `floor(count/sampleSize)`-th
14
+ * one, which is plenty for a display window and keeps a 3.7M-cell recolour from
15
+ * sorting 3.7M values.
16
+ */
17
+ export interface QuantileOptions {
18
+ /** Which values count: every finite one (the default), or only those above zero. */
19
+ filter?: 'finite' | 'positive';
20
+ /** Count index `i` only where `where[i] > 0` — e.g. a field's support. */
21
+ where?: ArrayLike<number>;
22
+ /** Sample down to about this many values (see the module doc); unsampled when absent. */
23
+ sampleSize?: number;
24
+ }
25
+ /**
26
+ * The `ps` quantiles (each 0..1, clamped) of the values that qualify, or null when none do.
27
+ */
28
+ export declare function quantiles(values: ArrayLike<number>, ps: readonly number[], opts?: QuantileOptions): number[] | null;
29
+ /** One quantile; see {@link quantiles}. */
30
+ export declare function quantile(values: ArrayLike<number>, p: number, opts?: QuantileOptions): number | null;
31
+ /** Sample size for a contrast window: a display window does not need every value. */
32
+ export declare const WINDOW_SAMPLE_SIZE = 65536;
33
+ /**
34
+ * A `[lo, hi]` percentile window over the qualifying values, never flat or inverted
35
+ * (a flat window would divide by zero downstream, so it is widened by one), and `[0, 1]`
36
+ * when nothing qualifies, so callers always get a usable window.
37
+ */
38
+ export declare function percentileWindow(values: ArrayLike<number>, lo: number, hi: number, opts?: QuantileOptions): [number, number];