@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,25 +1,46 @@
1
- import { ChangeDetectorRef, AfterViewInit, ElementRef, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges, Type } from '@angular/core';
2
- import { Subscription } from 'rxjs';
3
- import { MenuItem, MessageService, TreeNode } from 'primeng/api';
1
+ import { AfterViewInit, ChangeDetectorRef, DestroyRef, ElementRef, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
+ import { MenuItem, MessageService } from 'primeng/api';
4
3
  import { ContextMenu } from 'primeng/contextmenu';
5
4
  import { IImageInfo } from './contracts/image.contract';
6
5
  import { ImageStatePort } from './contracts/ports/image-state.port';
7
6
  import { Polygon } from './models/region';
8
7
  import { RegionOpsService } from './region-ops.service';
9
8
  import { VisualizerStore } from './store/visualizer-store.service';
9
+ import { ImageRenderSession } from './render-session';
10
10
  import { PlotType, PlotTypeDescriptor, PlotTypeId } from './contracts/plot-type';
11
11
  import { PlotTypeContribution, PlotTypeOption } from './contracts/plot-type-contribution.contract';
12
12
  import { PlotModeController } from './plot-mode/plot-mode-controller';
13
+ import { ToolParamsModel } from './plot-mode/tool-params-model';
14
+ import { ContributionHost, PlotModePanelView, ToolDialogView } from './plot-mode/contribution-host';
13
15
  import { IVisualizer } from './contracts/visualizer.contract';
14
16
  import { SamToolService } from './toolbar/segmentation/sam-tool.service';
15
17
  import { SamPointToolService } from './toolbar/segmentation/sam-point-tool.service';
16
18
  import { CellSegmentToolService } from './toolbar/segmentation/cell-segment-tool.service';
17
- import { NumberParamSpec, SelectParamSpec, ToolParamSpec, ToolbarContribution, ToolbarDialogToolContribution, ToolbarToolContribution } from './contracts/toolbar-tool.contract';
19
+ import { SegmentationRunner } from './toolbar/segmentation/segmentation-runner';
20
+ import { ToolbarContribution, ToolbarDialogToolContribution, ToolbarToolContribution } from './contracts/toolbar-tool.contract';
18
21
  import { ToolbarToolVisibility } from './contracts/toolbar-config';
19
22
  import { VizConfig } from './contracts/viz-config';
20
23
  import { SpatialDataPort } from './contracts/ports/spatial-data.port';
24
+ import { ContextMenuActions } from './visualizer/visualizer-context-menu';
25
+ import { RegionActions } from './visualizer/region-actions';
26
+ import { ToolModes } from './visualizer/tool-modes';
27
+ import { FloatingPos } from './visualizer/floating-drag.directive';
28
+ import { IntensityInsetComponent } from './intensity-inset/intensity-inset.component';
29
+ import type { SectionAxis, SectionViews } from './contracts/section-view.contract';
30
+ import { SpatialDatasetBinder } from './visualizer/spatial-dataset-binder';
21
31
  import * as i0 from "@angular/core";
22
- export declare class VisualizerComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
32
+ /**
33
+ * The viewer (`<visualizer>`): the plot surface, its toolbar, the loading overlay and
34
+ * the dialogs it opens (Channels & Histogram, spatial-omics controls, Region Editor,
35
+ * contributed modes and tools). It orchestrates rendering through the `VISUALIZER`
36
+ * contract and reads the image from the host's `IMAGE_STATE_PORT`.
37
+ *
38
+ * OnPush. Template events re-render it; state that lands asynchronously goes through
39
+ * {@link changed} (or a signal: the loading overlay), and the collaborators that must
40
+ * render synchronously (the render session's overlay, a contributed panel's slot, the
41
+ * context menu before it opens) still call `detectChanges()`.
42
+ */
43
+ export declare class VisualizerComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy, ContextMenuActions {
23
44
  private state;
24
45
  plotService: IVisualizer;
25
46
  messageService: MessageService;
@@ -33,6 +54,8 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
33
54
  private vizConfig?;
34
55
  private spatialData?;
35
56
  private injector?;
57
+ private hostRef?;
58
+ private readonly destroyRef;
36
59
  /** Per-instance toast key. MessageService is a global singleton, so two live
37
60
  * `<visualizer>` instances (main viewer + pipeline-dialog preview) sharing
38
61
  * one key would each render the same message — a duplicate toast. A unique
@@ -51,8 +74,8 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
51
74
  * releases on destroy, so the surviving viewer picks them up.
52
75
  */
53
76
  private static readonly liveInstances;
54
- readonly vizToastKey = "sci-viz-notice";
55
- readonly vizAlertToastKey = "sci-viz-alert";
77
+ protected readonly vizToastKey = "sci-viz-notice";
78
+ protected readonly vizAlertToastKey = "sci-viz-alert";
56
79
  /**
57
80
  * Whether this instance renders the shared outlets. The owner is simply the
58
81
  * oldest live visualizer — a `Set` iterates in insertion order, so when the
@@ -62,8 +85,10 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
62
85
  * initialised would leave nobody rendering the outlets, and every notice from
63
86
  * the root service would silently vanish again.
64
87
  */
65
- get ownsSharedToasts(): boolean;
88
+ protected get ownsSharedToasts(): boolean;
89
+ /** Each new image: whether it is a z-stack. */
66
90
  isStackEvent: EventEmitter<any>;
91
+ /** Each new image: whether it is single-channel (grayscale). */
67
92
  isGrayscaleEvent: EventEmitter<any>;
68
93
  /** Which toolbar groups to show. A partial override merges over the full set,
69
94
  * so `{ specialTools: false }` hides only that group. Defaults to everything. */
@@ -76,327 +101,205 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
76
101
  testMode: boolean;
77
102
  /** Image-smoothing state for the toolbar's Smoothen toggle (OSD only).
78
103
  * Defaults to `false` so OSD shows raw pixels (nearest-neighbour). */
79
- imageSmoothingEnabled: boolean;
80
- loadingMessage: string;
81
- zoom: boolean;
104
+ protected imageSmoothingEnabled: boolean;
82
105
  fileName: string | undefined;
83
106
  private loadedFileName;
84
- imageInfo: IImageInfo | undefined;
85
- private unsub;
86
- private previewSubscription;
87
- stackLoading: boolean;
88
- imgLoading: boolean;
89
- loadingPercentage: number;
90
- cacheProgress: number | null;
91
- sharpening: boolean;
107
+ protected imageInfo: IImageInfo | undefined;
108
+ protected readonly loadingMessage: import("@angular/core").WritableSignal<string>;
109
+ /** The host is loading at zoom (the overlay message moves out of the way). */
110
+ protected readonly zoom: import("@angular/core").WritableSignal<boolean>;
111
+ protected readonly stackLoading: import("@angular/core").WritableSignal<boolean>;
112
+ protected readonly imgLoading: import("@angular/core").WritableSignal<boolean>;
113
+ protected readonly loadingPercentage: import("@angular/core").WritableSignal<number>;
114
+ protected readonly cacheProgress: import("@angular/core").WritableSignal<number | null>;
92
115
  /** A jit-service cache copy is actively in progress (determinate 0..99). Drives the cache
93
116
  * progress bar independently of `imgLoading` so the bar can't be dropped — or masked by the
94
117
  * "Sharpening preview..." overlay — mid-download if the loading flag flips early. */
95
- get isCaching(): boolean;
96
- private running;
97
- /**
98
- * Monotonic render generation. Bumped when a render starts, so a render that
99
- * has been superseded by a newer image can be recognised and made inert: its
100
- * callbacks return early instead of painting, clearing `running`, releasing
101
- * the newer render's overlay, or applying its ROIs.
102
- */
103
- private renderToken;
104
- /** Set once the template, and with it the plot div, exists (see ngAfterViewInit). */
105
- private viewReady;
106
- /** An image-less dataset whose draw waits for the view: see plotSpatialWithoutImage. */
107
- private pendingSpatialDraw;
108
- zIndex: number;
109
- maxIndex: number;
118
+ protected readonly isCaching: import("@angular/core").Signal<boolean>;
119
+ /** Emits once when this view is destroyed; the collaborators end their subscriptions on it. */
120
+ private readonly destroyed$;
121
+ /** Host image-info objects whose one-shot `initialZIndex` was already applied. */
122
+ private readonly consumedSliceHints;
123
+ protected zIndex: number;
124
+ protected maxIndex: number;
110
125
  contextMenu: ContextMenu;
111
- contextMenuItems: MenuItem[];
112
- activeDragMode: string | null;
113
- /** Whether a region action is available to undo (jit-ui#85). Mirrors the
114
- * shared RegionStore's history depth; drives the toolbar Undo button. */
115
- canUndoRegion: boolean;
116
- /** Whether an undone region action is available to redo (jit-ui#85). */
117
- canRedoRegion: boolean;
118
- /** Custom-threshold Simplify dialog (jit-ui#85). */
119
- displaySimplifyDialog: boolean;
120
- simplifyThreshold: number;
121
- /** Current region selection (array indices) — mirrored from the store so the
122
- * context-menu region actions can read it synchronously (jit-ui#85). */
123
- private selectedIndices;
124
- /** Wand sensitivity — higher = stricter (smaller selection). Matches QuPath default. */
125
- wandSensitivity: number;
126
- /** Brush diameter in image-pixel coordinates (drives the painted disc size). */
127
- brushSize: number;
128
- /** Class the brush paints while a plot mode armed it (PlotModeTools.armBrush); null = plain brush. */
129
- private brushClass;
126
+ protected contextMenuItems: MenuItem[];
127
+ /** The armed tool mode and the toolbar's tool settings. */
128
+ protected readonly tools: ToolModes;
129
+ protected get activeDragMode(): string | null;
130
+ protected set activeDragMode(mode: string | null);
131
+ protected get wandSensitivity(): number;
132
+ protected set wandSensitivity(v: number);
133
+ protected get brushSize(): number;
134
+ protected get vertexEraserRadius(): number;
135
+ protected set vertexEraserRadius(v: number);
136
+ /** Region set-operations on the selection, and the store mirrors they read (jit-ui#85). */
137
+ protected readonly regionActions: RegionActions;
138
+ /** Custom-threshold Simplify dialog visibility (see {@link RegionActions}). */
139
+ protected get displaySimplifyDialog(): boolean;
140
+ protected set displaySimplifyDialog(v: boolean);
130
141
  /** SAM model picker options + current selection (jit-ui#90 P1). Only models
131
142
  * with a hosted ONNX pair (configured via setSamModelUrls at app init) are
132
143
  * offered, so the picker can't select a model that can't run. */
133
- samModels: {
144
+ protected samModels: {
134
145
  id: string;
135
146
  label: string;
136
147
  }[];
137
- samModelId: string;
148
+ protected samModelId: string;
138
149
  /**
139
150
  * No-prompt tools registered through {@link TOOLBAR_TOOLS}, filtered to those
140
151
  * with configured models and sorted. This library registers none — a host
141
152
  * supplies them — so an open build has an empty array here and the toolbar
142
153
  * and help dialog simply omit that group.
143
154
  */
144
- contributedTools: ToolbarToolContribution[];
145
- /**
146
- * Dialog tools registered through {@link TOOLBAR_TOOLS} (`kind: 'dialog'`),
147
- * sorted. Their buttons sit with the host's own actions and show in the Image
148
- * view only; each opens a floating dialog the tool fills.
149
- */
150
- dialogTools: ToolbarDialogToolContribution[];
155
+ protected contributedTools: ToolbarToolContribution[];
156
+ /** Checkpoints and parameter values of {@link contributedTools}, and their dialog. */
157
+ protected readonly toolParams: ToolParamsModel;
158
+ /** Contributed plot modes and dialog tools, and their live sessions. */
159
+ readonly contributions: ContributionHost;
160
+ /** Dialog tools registered through {@link TOOLBAR_TOOLS} (`kind: 'dialog'`). */
161
+ protected get dialogTools(): ToolbarDialogToolContribution[];
151
162
  /** The dialog tool the user has open (its session may be between renders). */
152
- openDialogToolId: string | null;
163
+ protected get openDialogToolId(): string | null;
153
164
  /** The open dialog tool's live dialog, as the template renders it. */
154
- toolDialog: {
155
- title: string;
156
- width: string;
157
- host: HTMLElement;
158
- } | null;
159
- /** Dialog-tool sessions: the same lifecycle and isolation as contributed plot modes. */
160
- private readonly toolDialogs;
161
- /** Active checkpoint per contributed tool. */
162
- toolModelIds: Record<string, string>;
165
+ protected get toolDialog(): ToolDialogView | null;
166
+ protected readonly samToastKey: string;
163
167
  /**
164
- * Parameter values per contributed tool, seeded from each tool's own defaults
165
- * — which encode the scale and crowding its checkpoint was trained for.
168
+ * Outlet for the library's own result/error notices, keyed to this instance so they
169
+ * do not depend on the host mounting a keyless `<p-toast>` (most hosts don't, and a
170
+ * failed segmentation then looked like a dead button). Deliberately NOT the sticky
171
+ * toast's key: that is cleared when a run settles, which would wipe the result.
166
172
  */
167
- toolParams: Record<string, Record<string, unknown>>;
168
- /** Which tool's parameter dialog is open, or null. */
169
- openParamsToolId: string | null;
170
- /** SAM download/segment toast state (bound by the `sam` p-toast template). */
171
- samStatus: string;
172
- samProgress: number;
173
- samDownloading: boolean;
174
- samBusy: boolean;
175
- /** Whether the shared `sam` toast is currently shown (avoids stacking it on
176
- * every point click, which re-runs inference). */
177
- private samToastShown;
178
- readonly samToastKey: string;
179
- /**
180
- * Outlet for the library's own result/error notices.
181
- *
182
- * PrimeNG routes a message to a `<p-toast>` only when the keys match — a
183
- * keyless message reaches a keyless toast and nothing else. These notices used
184
- * to be emitted with no key, so they rendered only in hosts that happen to
185
- * mount a bare `<p-toast>` (jit-ui does, in its file-tree component). Every
186
- * other host — including this repo's own browser example — dropped them
187
- * silently, which made a failed or no-op segmentation look like a dead button:
188
- * the sticky progress toast is cleared in the same tick by hideSamToast, and
189
- * the message explaining why never appeared anywhere.
190
- *
191
- * Keyed to this component instance so the library renders its own outlet and
192
- * is not dependent on host markup. Deliberately NOT the sticky toast's key:
193
- * {@link hideSamToast} clears that key in the `finally`, which would wipe the
194
- * result the moment it was posted, and the sticky toast's custom template is
195
- * built for the live status + progress bar.
196
- */
197
- readonly resultToastKey: string;
198
- /** Subscriptions to the point tool's live feeds (status/busy/download). */
199
- private samPointSub;
200
- /** Vertex eraser radius in image-pixel coordinates. */
201
- vertexEraserRadius: number;
202
- colormapsOptions: any;
203
- reversescale: boolean;
204
- selectedColormap: any;
173
+ protected readonly resultToastKey: string;
174
+ /** Segmentation runs and their sticky progress toast. */
175
+ protected readonly segmentation: SegmentationRunner;
205
176
  /** Channels & Histogram dialog visibility (opened from the toolbar). */
206
- showChannelHistogram: boolean;
177
+ protected showChannelHistogram: boolean;
207
178
  /** Spatial-omics controls dialog visibility (toolbar button). */
208
- showSpatialControls: boolean;
179
+ protected showSpatialControls: boolean;
209
180
  /** Region Editor dialog visibility (opened from the toolbar). */
210
- showRegionEditor: boolean;
181
+ protected showRegionEditor: boolean;
211
182
  /** Region Editor dialog width. On open it is set to the configured host
212
183
  * element's current width, or — when no selector is configured / the element
213
184
  * isn't found — to a quarter of the page (see openRegionEditor). */
214
- regionEditorWidth: string;
215
- stackOptions: {
216
- name: string;
217
- val: string;
218
- }[];
219
- selectedStackOption: {
220
- name: string;
221
- val: string;
222
- } | undefined;
223
- readonly plotDivName: string;
185
+ protected regionEditorWidth: string;
186
+ protected readonly plotDivName: string;
187
+ /** The render pipeline: the newest image (or image-less dataset) always wins. */
188
+ protected readonly render: ImageRenderSession;
224
189
  plotType: PlotType;
225
- isHeatmap: boolean;
226
- activeSurface3dMode: string;
190
+ protected isHeatmap: boolean;
191
+ protected activeSurface3dMode: string;
227
192
  /** Whether the napari 3D coordinate-axes / scale gizmo is shown (volume/isosurface). */
228
- axesVisible: boolean;
229
- wireframeActive: boolean;
193
+ protected axesVisible: boolean;
194
+ protected wireframeActive: boolean;
230
195
  /** napari 3D decimate factor (1 = Full … 8 = ⅛; default ½); changing it re-plots. */
231
- resolutionScale: number;
196
+ protected resolutionScale: number;
232
197
  /** The selector's entries: the built-in plot types the active backend
233
198
  * advertises (3D gated by capability), then any contributed modes
234
199
  * ({@link PLOT_TYPE_CONTRIBUTIONS}). */
235
- plotTypeMenu: PlotTypeOption[];
200
+ protected plotTypeMenu: PlotTypeOption[];
236
201
  /**
237
202
  * The built-in plot types on offer — {@link plotTypeMenu} without contributed
238
203
  * modes. Kept with its original type so existing readers are unaffected.
239
204
  */
240
- plotTypeOptions: PlotTypeDescriptor[];
205
+ protected plotTypeOptions: PlotTypeDescriptor[];
241
206
  /**
242
207
  * What the selector shows: a built-in type or a contributed mode's id. Every
243
208
  * rendering and tool decision goes through {@link basePlotType} instead, so a
244
209
  * contributed mode behaves exactly like the built-in type it rides on.
245
210
  */
246
- selectedPlotTypeId: PlotTypeId;
211
+ protected selectedPlotTypeId: PlotTypeId;
247
212
  /**
248
213
  * The built-in plot type being rendered. With no contributed mode active this
249
214
  * is the selection itself; during one it is the mode's `baseType`. Kept with its
250
215
  * original `PlotType` type for existing readers — use {@link selectedPlotTypeId}
251
216
  * for the selector's id. Assigning selects that built-in type.
252
217
  */
253
- get selectedPlotType(): PlotType;
254
- set selectedPlotType(type: PlotType);
218
+ protected get selectedPlotType(): PlotType;
219
+ protected set selectedPlotType(type: PlotType);
255
220
  /** Contributed plot modes and their single live session. */
256
- readonly plotModes: PlotModeController;
257
- /**
258
- * The live contributed mode's side panel, as the template renders it: an
259
- * Angular component with its own injector, or a plain host element a `mount`
260
- * panel rendered into. Null while no contributed session is live.
261
- */
262
- plotModePanel: {
263
- title: string;
264
- component: Type<unknown> | null;
265
- injector: Injector | null;
266
- host: HTMLElement | null;
267
- } | null;
268
- private destroying;
221
+ get plotModes(): PlotModeController;
222
+ /** The live contributed mode's side panel; null while no contributed session is live. */
223
+ protected get plotModePanel(): PlotModePanelView | null;
269
224
  /** Where a `mount` panel's host element is attached once the dialog renders. */
270
225
  set plotModePanelSlot(ref: ElementRef<HTMLElement> | undefined);
271
226
  /** The built-in type actually rendered for {@link selectedPlotTypeId}: itself
272
227
  * for a built-in type, `baseType` for a contributed mode. */
273
- get basePlotType(): PlotType;
274
- /** Floating intensity-profile inset (LINE mode). */
275
- readonly intensityInsetDiv = "intensity-inset-plot";
276
- profilePanelPos: {
277
- x: number;
278
- y: number;
279
- };
280
- private profilePanelDragging;
281
- private profilePanelStart;
228
+ protected get basePlotType(): PlotType;
229
+ /** Div the floating intensity-profile inset is charted into. Per instance, like
230
+ * {@link plotDivName}: the backend resolves it by id, so a fixed id made two live
231
+ * viewers draw both insets into whichever div came first in the document. */
232
+ protected readonly intensityInsetDiv: string;
282
233
  /** Toolbar docking: docked across the top by default; dragging its handle
283
234
  * detaches it into a floating, movable window (frees the top row for the
284
235
  * visualization). */
285
- toolbarFloating: boolean;
286
- toolbarPos: {
236
+ protected toolbarFloating: boolean;
237
+ protected toolbarPos: {
287
238
  x: number;
288
239
  y: number;
289
240
  };
290
- private toolbarDragging;
291
- private toolbarStart;
292
- private latestProfiles;
293
- /** Drives the intensity inset panel's visibility — true whenever any
294
- * intensity-profile line exists (independent of the current plot type). */
295
- hasProfiles: boolean;
296
- private intensityProfileSub?;
297
- private viewportChangeSub?;
298
- private profileDragMoveListener?;
299
- private profileDragUpListener?;
300
- private profileResizeListener?;
241
+ /** Where a toolbar-handle drag starts from: grabbing the docked toolbar floats it. */
242
+ protected readonly toolbarDragOrigin: () => FloatingPos;
243
+ /** The floating intensity-profile inset (always mounted; shows itself while lines exist). */
244
+ inset?: IntensityInsetComponent;
301
245
  /** True while the 3D spatial cloud is the active mode. The controls drop the ROI
302
246
  * selection there: region tools are screen-space, and against an orbiting
303
247
  * camera a drawn rectangle has no fixed meaning in the data. */
304
- get isSpatial3dMode(): boolean;
305
- /** LINE plot type shows the image + draggable line ROI + intensity inset. */
306
- get isProfileMode(): boolean;
248
+ protected get isSpatial3dMode(): boolean;
249
+ /** True in a napari volume or isosurface view, where the Region Editor shows regions in 3D. */
250
+ protected get isVolumeView(): boolean;
251
+ /** Whether the user split the volume view with the slice editor (off by default; kept while
252
+ * the view shows other plot types, so a volume view opens split again). */
253
+ protected sliceEditor: boolean;
254
+ /** The slice editor's pane: the displayed slice, with every region tool, top right. */
255
+ protected readonly sliceDivName: string;
256
+ /** The left column's and the top row's shares of the slice editor (%). */
257
+ protected splitX: number;
258
+ protected splitY: number;
259
+ /** The sections through x and y shown below (nulls until the volume is cut). */
260
+ protected sections: SectionViews;
261
+ protected get sliceEditorShown(): boolean;
262
+ /**
263
+ * Split the volume view with the slice editor, or close it. The editor opens on the displayed
264
+ * slice and takes the drawing tools; closing it leaves the selection tool armed (it picks the
265
+ * surfaces in 3D) and disarms any other.
266
+ */
267
+ protected toggleSliceEditor(): Promise<void>;
268
+ /** A point picked in a section: the slice and the other section's plane move there. */
269
+ protected onSectionPick(axis: SectionAxis, at: {
270
+ u: number;
271
+ v: number;
272
+ }): void;
273
+ /** Drag a divider of the slice editor: the vertical one sets the columns, the horizontal one the rows. */
274
+ protected startPaneResize(event: PointerEvent, axis: 'x' | 'y'): void;
275
+ /** A divider's keyboard: ← → move the vertical one, ↑ ↓ the horizontal one, by 5%. */
276
+ protected nudgePaneSize(event: KeyboardEvent, axis: 'x' | 'y'): void;
277
+ private setSplit;
278
+ private relayoutFrame;
307
279
  /** True for the Image plot type, which renders as a natively pan/zoom-able
308
280
  * raster — so the backend-agnostic zoom/pan toolbar tools are hidden. The
309
281
  * component drives this off the plot type, not the active backend. */
310
- get isImageView(): boolean;
282
+ protected get isImageView(): boolean;
311
283
  /** Isosurface band as a 0–255 slider position, mapped onto the volume's real
312
284
  * intensity range by the renderer. Defaults to the full range. */
313
- isoRange: number[];
314
- /** Whether a spatial-omics dataset is currently published on
315
- * `SPATIAL_DATA_PORT` — gates the spatial plot types in the selector. */
316
- /** Bound by the toolbar, which offers the plot modes for a dataset with no image too. */
317
- hasSpatialDataset: boolean;
318
- /** The spatial dataset on offer, for drawing one that brings no image (see reloadAndPlot). */
319
- private spatialDataset;
320
- /** Whether that dataset's observations carry a z, gating the 3D spatial mode. */
321
- private hasSpatial3dDataset;
322
- /** Whether it carries a registered volume. Change detection only: a volume
323
- * appearing is what publishes it as the image, and the plot-type gates then
324
- * see an ordinary grayscale stack. */
325
- private hasSpatialVolume;
326
- /** Dataset identity + capability shape the last emission was handled at, so a
327
- * switch between two datasets of the same shape is not mistaken for a repeat. */
328
- private spatialDatasetKey;
329
- /** Dataset + geometry the currently published volume image was built from, so a
330
- * re-emitted dataset doesn't re-fetch megabytes or reset the user's scrub. */
331
- private volumeImageKey;
332
- /** Blob URLs backing that image — ours to revoke. */
333
- private volumeImageUrls;
334
- private spatialDatasetSubscription?;
335
- plotWidthSubscription?: Subscription;
336
- imageLoadingSubscription?: Subscription;
337
- imgLoadingMessageSubscription?: Subscription;
338
- isZoomSubscription?: Subscription;
339
- filenameSubscription?: Subscription;
340
- autoscaleSubscription?: Subscription;
341
- private plotContextMenuListener?;
342
- private keydownListener?;
343
- private wheelListener?;
285
+ protected isoRange: number[];
286
+ /** The spatial-omics dataset on offer and the gates it puts on the selector. */
287
+ protected readonly spatial: SpatialDatasetBinder;
288
+ /** Whether a spatial-omics dataset is published on `SPATIAL_DATA_PORT` — gates the
289
+ * spatial plot types; the toolbar offers the plot modes for an image-less one too. */
290
+ protected get hasSpatialDataset(): boolean;
291
+ /** Keyboard, wheel and context-menu handling; created once the view exists. */
292
+ private shortcuts?;
344
293
  /** Debounced z-slice scrubbing (see SliceScrubber — refactoring plan Step 7). */
345
294
  private readonly scrubber;
346
- constructor(state: ImageStatePort, plotService: IVisualizer, messageService: MessageService, ngZone: NgZone, cdr: ChangeDetectorRef, session: VisualizerStore, samTool: SamToolService, cellSegmentTool: CellSegmentToolService, samPointTool: SamPointToolService, regionOps: RegionOpsService, vizConfig?: VizConfig | undefined, toolContributions?: readonly ToolbarContribution[], spatialData?: SpatialDataPort | undefined, plotTypeContributions?: readonly PlotTypeContribution[], injector?: Injector | undefined);
347
- /**
348
- * Plot types offered in the selector for the current image:
349
- * - Outside **test mode**, only the curated default set (descriptors with a
350
- * `productionLabel`) is offered, shown under suffix-free names — Image,
351
- * Heatmap, Contour and the napari Surface / Volume / Isosurface. Test mode
352
- * exposes every backend's type under its full (backend-suffixed) label.
353
- * - 3D types hidden when the backend can't render a 3D scene.
354
- * - stack-only types (volume, isosurface) hidden unless the file is a stack —
355
- * a volume needs multiple z-slices.
356
- * - scalar-intensity types (contour, surface, isosurface) hidden for RGB
357
- * images — they map a single intensity per pixel. Image and Heatmap render
358
- * any image.
359
- * - spatial-omics types hidden until a `SpatialDataset` is published on
360
- * `SPATIAL_DATA_PORT` — the mode has nothing to draw without observations,
361
- * exactly as a volume has nothing to draw without a stack.
362
- */
363
- /**
364
- * Track whether a spatial-omics dataset is available. A dataset appearing (or
365
- * being cleared) changes which plot types make sense, so it drives the same
366
- * recompute + reconcile that the image stream and the test-mode toggle do.
367
- *
368
- * No-op when the host provides no `SPATIAL_DATA_PORT` — the spatial types then
369
- * stay hidden for the life of the component.
370
- */
295
+ constructor(state: ImageStatePort, plotService: IVisualizer, messageService: MessageService, ngZone: NgZone, cdr: ChangeDetectorRef, session: VisualizerStore, samTool: SamToolService, cellSegmentTool: CellSegmentToolService, samPointTool: SamPointToolService, regionOps: RegionOpsService, vizConfig?: VizConfig | undefined, toolContributions?: readonly ToolbarContribution[], spatialData?: SpatialDataPort | undefined, plotTypeContributions?: readonly PlotTypeContribution[], injector?: Injector | undefined, hostRef?: ElementRef<HTMLElement> | undefined, destroyRef?: DestroyRef);
296
+ /** Follow the spatial-omics dataset: a dataset appearing, switching or being cleared
297
+ * re-gates the selector exactly as the image stream and the test-mode toggle do. */
371
298
  private watchSpatialDataset;
372
- /**
373
- * Publish a dataset's reference volume AS the image, and open the 2D Image view
374
- * on it.
375
- *
376
- * The volume is a 3D image delivered in one file, so for a dataset that has no
377
- * section image it is the honest thing to put on screen: the slice bar scrubs z,
378
- * and the contrast window, colormaps and region tools all work because the
379
- * volume genuinely is the image now. The 3D cloud stays one menu pick away.
380
- *
381
- * Keyed by dataset + geometry: the dataset stream re-emits on things like a
382
- * colour-column change, and rebuilding then would re-fetch the voxels and throw
383
- * the user back to the middle slice.
384
- */
385
- private showVolumeAsImage;
386
- /** Forget the published volume image so re-selecting the dataset rebuilds it.
387
- * The URLs deliberately stay alive: the host may still be displaying that image
388
- * at this instant, and revoking under it would break every later tile read. They
389
- * are freed when the next volume replaces them, or on destroy. */
390
- private dropVolumeImage;
391
- private revokeVolumeImageUrls;
299
+ /** Recompute the selector's entries for the current image, dataset and test mode
300
+ * (see {@link computePlotTypeMenu}). */
392
301
  private computePlotTypeOptions;
393
302
  ngOnChanges(changes: SimpleChanges): void;
394
- /** If the active plot type is no longer in the offered options (e.g. test mode
395
- * turned off while a test-only type was active, or a scalar type carried onto
396
- * an RGB image), fall back to the default 2D Image view. */
397
- /** Whether the live spatial dataset brings pixels of its own — a tissue image it
398
- * registers onto, or a volume that is published as a z-stack image. */
399
- private spatialDatasetHasPixels;
400
303
  /**
401
304
  * The host published NO image — a spatial dataset that brings none does this.
402
305
  *
@@ -405,216 +308,145 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
405
308
  * `isStack`/`isGrayscale` decision is made against a file that is no longer loaded.
406
309
  */
407
310
  private onImageCleared;
311
+ /** If the active plot type is no longer in the offered options (e.g. test mode
312
+ * turned off while a test-only type was active, or a scalar type carried onto
313
+ * an RGB image), fall back to the default 2D Image view. */
408
314
  private reconcileSelectedPlotType;
409
315
  ngOnInit(): void;
316
+ /**
317
+ * Follow `source` until destroy. Host streams can emit outside the Angular zone (a
318
+ * serverless host clears its loading flag from an image decode or an OpenSeadragon
319
+ * callback); setting a signal there marks this OnPush view but schedules no change
320
+ * detection, so the update is applied inside the zone, as {@link changed} does.
321
+ */
322
+ private mirror;
323
+ /**
324
+ * State this view shows changed outside one of its template events (a stream, a
325
+ * resolved promise, a host call): mark the OnPush view for check, re-entering the
326
+ * zone when it changed outside it so a change-detection pass follows.
327
+ */
328
+ private changed;
329
+ /**
330
+ * Lay a new image out once the old view is gone: the stack flag, the slice bounds (one
331
+ * url per slice, so the last index is length-1), and the one-shot `initialZIndex` hint
332
+ * (e.g. the file the user clicked within a numbered series). The hint is consumed so
333
+ * re-delivering the same info (a plot-type switch, reloadAndPlot) does not reset the
334
+ * user's scrub; the host's object is never written to (a host store may freeze it) —
335
+ * the component keeps a copy without the hint, and remembers the host object.
336
+ */
337
+ private layOutSlices;
410
338
  ngAfterViewInit(): void;
411
339
  /** The plot div exists now: run an image-less draw that arrived before it did. */
412
340
  private onViewReady;
413
- onProfilePanelDragStart(e: MouseEvent): void;
414
- /** Grab the toolbar handle: detach it into a floating window (if still docked)
415
- * and start dragging. */
416
- onToolbarDragStart(e: MouseEvent): void;
341
+ /** What the keyboard, wheel and context-menu shortcuts act on. Their listeners live
342
+ * outside this view, so every action that changes what it shows marks it for check. */
343
+ private shortcutHost;
417
344
  /** Snap the floating toolbar back to its docked position across the top. */
418
- dockToolbar(): void;
419
- /** Render the intensity inset chart from the latest profile data. The actual
420
- * charting is owned by the visualizer service — the component just decides
421
- * when (profile mode + a fresh profile). */
422
- private renderIntensityInset;
345
+ protected dockToolbar(): void;
423
346
  /** Toolbar "Intensity" group: add another line ROI (next bright colour). */
424
- addProfileLine(): Promise<void>;
347
+ protected addProfileLine(): Promise<void>;
425
348
  ngOnDestroy(): void;
349
+ /** What the host gets through `setDiagram` — see {@link VisualizerHandle}. */
350
+ private readonly hostHandle;
426
351
  hasRegions(): boolean;
427
- /**
428
- * This method is called in mainFacade.configRequest() - DO NOT DELETE
429
- */
352
+ /** The current regions as polygons (also on the host handle). */
430
353
  getRegionPolygons(): Polygon[];
431
- /**
432
- * Select the color scale type: called by the color scale select button
433
- * @param event
434
- */
435
- toggleReverseScale(): void;
436
- /**
437
- * Select a color map: called by the color map dropdown button
438
- * @param colormapNode
439
- */
440
- selectColormap(colormapNode: TreeNode): void;
441
354
  /** Open the Channels & Histogram dialog (toolbar button). */
442
- openChannelHistogram(): void;
355
+ protected openChannelHistogram(): void;
443
356
  /** Toolbar → open the spatial-omics controls. */
444
- openSpatialControls(): void;
357
+ protected openSpatialControls(): void;
445
358
  /** Open the Region Editor dialog (toolbar button). The editor stays linked to
446
359
  * this plotting instance through the root RegionStore singleton, so it works
447
360
  * the same as the former right-panel Regions tab. */
448
- openRegionEditor(): void;
449
- /**
450
- * Called by the stack/single image dropdown button
451
- * @param showstack
452
- */
453
- selectStackOption(selectedStackOption: any): void;
454
- updateZIndex(urls?: string[]): void;
361
+ protected openRegionEditor(): void;
362
+ /** The toolbar's Single image / Stack toggle. */
363
+ protected selectStackOption(selectedStackOption: {
364
+ name: string;
365
+ val: string;
366
+ }): void;
367
+ /** Clamp the slice index into [0, maxIndex] and push it to the renderer. */
368
+ protected updateZIndex(): void;
455
369
  /**
456
370
  * Live z-slice scrub for the Image view: the renderer swaps the displayed
457
371
  * slice in place (no re-mount), so dragging the slider steps through the
458
372
  * stack the same way the heatmap frame slider does.
459
373
  */
460
- onZSlide(z: number | undefined): void;
374
+ protected onZSlide(z: number | undefined): void;
461
375
  /**
462
376
  * Live (debounced) scrub while dragging the Image-view z-slider: update the
463
377
  * slice as the user drags, but coalesce rapid changes so we don't fire a
464
378
  * slice swap on every pixel. The final value also lands via onZSlide (onSlideEnd).
465
379
  */
466
- onZScrub(z: number | undefined): void;
467
- /**
468
- * Keyboard stack navigation: ←/→ step the z-slice in the Image view, the same
469
- * way the slider does. Only active for a loaded stack in Image view, and
470
- * ignored while a form field is focused so typing isn't hijacked. Up/Down are
471
- * left to OpenSeadragon (panning).
472
- */
473
- onKeydown(e: KeyboardEvent): void;
380
+ protected onZScrub(z: number | undefined): void;
474
381
  /** Move the displayed slice by `delta`, clamped to the stack bounds. */
475
382
  stepSlice(delta: number): void;
476
- reloadAndPlot(): void;
477
- /**
478
- * Draw a spatial mode with no image behind it: the observations alone, framed on their own
479
- * extent, as the seqFISH example shows them. The image info is a placeholder naming the
480
- * dataset, so regions drawn here are kept per dataset like any image's.
481
- */
482
- private plotSpatialWithoutImage;
483
- cancelLoading(): void;
484
- downloadImage(): void;
383
+ protected reloadAndPlot(): void;
384
+ protected cancelLoading(): void;
385
+ protected downloadImage(): void;
485
386
  autoscaleImage(): void;
486
387
  /** Toolbar pixel/smooth toggle: flip smoothing and apply to the active backend. */
487
- onToggleImageSmoothing(): void;
388
+ protected onToggleImageSmoothing(): void;
488
389
  resetAxes(): void;
489
390
  toggleDragMode(mode: string): void;
490
- /** Arm `mode` (or nothing) across every tool, keeping the toolbar in step. */
491
- private applyDragMode;
492
- /** Region draw/select/edit modes routed through the region overlay. The
493
- * The vertex tools (drawpolygon/addpoint/deletepoint/move) are
494
- * handled by the OpenSeadragon overlay; Plotly's overlay maps them to no-op. */
495
- private isRegionMode;
496
391
  /** Live-update the isosurface as the range slider moves. The control is only
497
392
  * available when the active backend renders isosurfaces (ISOSURFACE mode). */
498
- onIsoRangeChange(values: number[] | undefined): void;
499
- onWandSensitivityChange(value: number | undefined): void;
500
- onBrushSizeChange(value: number | undefined): void;
501
- onVertexEraserRadiusChange(value: number | undefined): void;
393
+ protected onIsoRangeChange(values: number[] | undefined): void;
394
+ protected onWandSensitivityChange(value: number | undefined): void;
395
+ protected onBrushSizeChange(value: number | undefined): void;
396
+ protected onVertexEraserRadiusChange(value: number | undefined): void;
502
397
  zoomIn(): void;
503
398
  zoomOut(): void;
504
399
  deleteRegion(): void;
505
400
  /** Undo the most recent region action (jit-ui#85). Up to 10 steps back. */
506
- undoRegion(): void;
401
+ protected undoRegion(): void;
507
402
  /** Redo the most recently undone region action (jit-ui#85). */
508
- redoRegion(): void;
509
- /** The currently-selected regions (live store instances). */
510
- private get selectedRegions();
511
- /** Regions eligible for set-ops: closed areas (rect / closed polygon /
512
- * multi-polygon), excluding intensity-profile lines. */
513
- private opEligible;
514
- /** Image pixel dimensions for the raster ops; falls back to the selection's
515
- * extent when the image size isn't known (keeps clamping sane). */
516
- private opImageDims;
517
- /** True when ≥2 eligible regions are selected (Merge available). */
518
- get canMergeRegions(): boolean;
519
- /** True when any selected region is multi-part (Ungroup available). */
520
- get canUngroupRegions(): boolean;
521
- /** True when ≥1 eligible region is selected (Inverse / Simplify available). */
522
- get hasEligibleSelection(): boolean;
523
- /** Select every region on the image (excludes intensity-profile lines). */
403
+ protected redoRegion(): void;
524
404
  selectAllRegions(): void;
525
- /** Merge the selected regions into a single (possibly multi-part) region. */
526
405
  mergeRegions(): void;
527
- /** Split each selected multi-part region into one region per part. */
528
406
  ungroupRegions(): void;
529
- /** Replace the selection with its inverse inside the image rectangle. */
530
407
  inverseRegions(): void;
531
- /** Douglas–Peucker simplify each selected region by `thresholdPx`. */
532
408
  simplifyRegions(thresholdPx: number): void;
533
- /** Open the custom-threshold simplify dialog. */
534
409
  openSimplifyDialog(): void;
535
- /**
536
- * Commit a set-op: drop the `remove` regions, append `add`, and select the
537
- * results. Goes through setRegions so it's undo-tracked and re-rendered;
538
- * profile lines and unselected regions are preserved.
539
- */
540
- private replaceRegions;
541
410
  /** Box-prompted SAM segmentation of the drawn rectangles (jit-ui#90). A sticky
542
411
  * `sam` toast shows live status + a download progress bar (first run pulls the
543
412
  * encoder, ~170 MB); it stays open until the run finishes (bar hits 100%). */
544
- segmentRegions(): Promise<void>;
413
+ protected segmentRegions(): Promise<void>;
545
414
  /** Auto-segment cells inside each drawn rectangle with cellpose-SAM, client-side
546
415
  * (jit-ui#90). Each box is cropped (browser slide-crop) then run through the
547
416
  * cellpose-js model; the same sticky `sam` toast + progress bar is reused. */
548
- segmentCellpose(): Promise<void>;
549
- /**
550
- * Parameters currently bound by the generic parameter dialog, for whichever
551
- * tool is open. Seeded lazily: a tool's defaults are only asked for when the
552
- * user first touches it, so registering a tool costs nothing until used.
553
- */
417
+ protected segmentCellpose(): Promise<void>;
554
418
  paramsFor(toolId: string): Record<string, unknown>;
555
- /** Active checkpoint for a tool, falling back to the tool's own default. */
556
- modelIdFor(tool: ToolbarToolContribution): string;
557
- /** Switching checkpoint re-seeds the parameters, since the defaults belong to
558
- * the model rather than to the tool. */
559
- onToolModelChange(e: {
419
+ protected onToolModelChange(e: {
560
420
  toolId: string;
561
421
  modelId: string;
562
422
  }): void;
563
- /** A tool's defaults for a checkpoint, with that checkpoint's own overrides
564
- * applied on top — per-model defaults beat per-tool ones. */
565
- private seedParams;
566
- /**
567
- * Narrow a param spec for the template.
568
- *
569
- * `*ngSwitchCase` does not narrow a discriminated union in Angular's template
570
- * type checker the way a `switch` does in TypeScript, so the template asks for
571
- * the variant it has already matched on.
572
- */
573
- numberParam(p: ToolParamSpec): NumberParamSpec;
574
- selectParam(p: ToolParamSpec): SelectParamSpec;
575
- openToolParams(toolId: string): void;
576
- /** The tool whose parameter dialog is open, for the generic dialog's header
577
- * and field list. */
578
- get openParamsTool(): ToolbarToolContribution | undefined;
579
- resetToolParams(toolId: string): void;
423
+ protected openToolParams(toolId: string): void;
424
+ protected closeToolParams(): void;
425
+ protected resetToolParams(toolId: string): void;
580
426
  /** Run a contributed tool over the current view. No prompt: these sweep the
581
427
  * whole view rather than being pointed at something. Reuses the shared
582
428
  * segmentation toast so progress reads the same as the SAM/cellpose tools. */
583
- runTool(toolId: string): Promise<void>;
584
- /** Shared driver for the box-prompt segment tools: wires the tool's status +
585
- * download progress into the sticky `sam` toast, runs `op`, and reports the
586
- * region count. Keeps the toast open until the run settles (bar hits 100%). */
587
- private runSegmentWithToast;
588
- /** Show the shared sticky `sam` toast once (idempotent — re-adding would stack
589
- * a new toast on every point click). */
590
- private showSamToast;
591
- /** Dismiss the shared `sam` toast and reset its progress/spinner state. */
592
- private hideSamToast;
429
+ protected runTool(toolId: string): Promise<void>;
593
430
  /** Pick the SAM model the segment tools use (jit-ui#90 P1). */
594
- onSamModelChange(id: string): void;
431
+ protected onSamModelChange(id: string): void;
595
432
  /** Convert the selected region to a smooth bezier curve. */
596
433
  toBezierRegion(): void;
597
434
  /** Convert the selected region back to a straight-edged polygon. */
598
435
  toPolygonRegion(): void;
599
- /**
600
- * Immediate region actions on the current selection (jit-ui#85): merge,
601
- * ungroup, inverse, simplify, the Bézier conversions, and delete — the
602
- * one-shot geometry transforms, grouped apart from the tool/mode toggles and
603
- * shown only when something is selected. Each item is gated on what the
604
- * selection supports.
605
- */
606
- private buildRegionActionItems;
436
+ /** The right-click menu for the current view, armed mode and selection. */
607
437
  private buildContextMenuItems;
438
+ private contextMenuState;
439
+ /** 3D scene interaction mode (orbit / turntable / pan / zoom); no-op on a 2D-only backend. */
608
440
  toggleSurface3dMode(mode: string): void;
609
441
  resetSurfaceCamera(): void;
610
442
  /** Toggle the napari 3D coordinate-axes / scale gizmo (volume/isosurface). No-op on backends
611
443
  * that don't render one (the control method is optional). */
612
- toggleAxes(): void;
444
+ protected toggleAxes(): void;
613
445
  /** Toggle the napari surface wireframe (edges vs filled). No-op on backends without a surface. */
614
- toggleWireframe(): void;
446
+ protected toggleWireframe(): void;
615
447
  /** Change the napari 3D decimate factor. Decimation changes the fetched/assembled data, so this
616
448
  * re-plots the current 3D type at the new resolution (unlike axes/wireframe, which are live). */
617
- selectResolution(scale: number): void;
449
+ protected selectResolution(scale: number): void;
618
450
  /**
619
451
  * Switch the active plot type (heatmap, surface, contour, scatter, line,
620
452
  * scatter3d, isosurface). Keeps `isHeatmap` as the 2D-vs-3D flag the rest of
@@ -622,59 +454,12 @@ export declare class VisualizerComponent implements OnInit, OnChanges, AfterView
622
454
  * moving to a 3D type, then re-plots.
623
455
  */
624
456
  onSelectPlotType(selected: PlotTypeId): void;
625
- /**
626
- * Start the selected contributed mode's session, once its base view has
627
- * plotted. No-op for a built-in type, or when the base on screen is not the
628
- * one the mode rides on. A backend that cannot provide a viewport for it
629
- * (e.g. OSD fell back to Plotly) counts as a failed activation.
630
- */
631
- private activateSelectedPlotMode;
632
- /** Render the live mode's panel. Activation can resolve outside Angular (an
633
- * OSD callback, a contribution's own promise), hence the zone re-entry. */
634
- private showPlotModePanel;
635
- /** Drop the panel (destroying a component panel) before the session ends. */
636
- private hidePlotModePanel;
637
- /**
638
- * A contributed mode could not start. Its base type is already on screen —
639
- * the base plotted first — so just select it: nothing needs to re-plot.
640
- */
641
- private fallBackFromPlotMode;
642
- /** Run change detection; returns what it threw (logged), or null. */
643
- private detectChangesSafely;
644
457
  /** The toolbar button: open the tool's dialog, or close it if it is open. */
645
- toggleDialogTool(id: string): void;
458
+ protected toggleDialogTool(id: string): void;
646
459
  /** Close the open dialog tool: its body is torn down, then its session ends. */
647
- closeDialogTool(): void;
648
- /** Start (or restart, after a re-render) the open dialog tool's session. */
649
- private activateOpenDialogTool;
650
- /** The live dialog body's teardown, and a pending wait for its host to connect. */
651
- private toolDialogTeardown;
652
- private toolDialogFrame;
653
- /**
654
- * The session is live: render the dialog, then mount the tool's body once the host
655
- * element is in the document, so `mount()` can measure it and start widgets that need
656
- * a connected element.
657
- */
658
- private showToolDialog;
659
- /** How many animation frames to wait for the dialog to attach the body's host. */
660
- private static readonly TOOL_DIALOG_ATTACH_FRAMES;
661
- /**
662
- * Mount `tool`'s body into `host` once it is connected (the dialog may attach it a
663
- * frame later, when it moves itself to `<body>`). If it never connects within
664
- * {@link TOOL_DIALOG_ATTACH_FRAMES} it is mounted anyway, with a warning, rather than
665
- * leaving an empty dialog. A throwing `mount()` fails the session like a failed start.
666
- */
667
- private mountToolDialogBody;
668
- /** The session is about to end: tear the body down first, then drop the dialog. */
669
- private hideToolDialog;
670
- /** A dialog tool could not start: close it and say so. */
671
- private dialogToolFailed;
460
+ protected closeDialogTool(): void;
672
461
  /** Where the open dialog tool's host element is attached once its dialog renders. */
673
462
  set toolDialogSlot(ref: ElementRef<HTMLElement> | undefined);
674
- /** Toolbar tools for contributed modes. Calls can come from outside Angular, hence the zone. */
675
- private readonly plotModeTools;
676
- /** Deactivate whatever tool is armed and clear every tool mode. */
677
- private deactivateActiveTool;
678
- static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
679
- static ɵcmp: i0.ɵɵComponentDeclaration<VisualizerComponent, "visualizer", never, { "toolbarTools": { "alias": "toolbarTools"; "required": false; }; "testMode": { "alias": "testMode"; "required": false; }; }, { "isStackEvent": "isStackEvent"; "isGrayscaleEvent": "isGrayscaleEvent"; }, never, ["*"], false, never>;
463
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisualizerComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, null]>;
464
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisualizerComponent, "visualizer", never, { "toolbarTools": { "alias": "toolbarTools"; "required": false; }; "testMode": { "alias": "testMode"; "required": false; }; }, { "isStackEvent": "isStackEvent"; "isGrayscaleEvent": "isGrayscaleEvent"; }, never, ["*"], true, never>;
680
465
  }