@jax-data-science/sci-image-visualizer 0.8.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/README.md +201 -460
  2. package/esm2022/index.mjs +34 -15
  3. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
  4. package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
  5. package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
  7. package/esm2022/lib/contracts/color.mjs +60 -0
  8. package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
  9. package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
  10. package/esm2022/lib/contracts/display-types.mjs +11 -1
  11. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  12. package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
  13. package/esm2022/lib/contracts/intensity.mjs +48 -5
  14. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  15. package/esm2022/lib/contracts/plot-type.mjs +134 -17
  16. package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
  17. package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
  18. package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
  19. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
  20. package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
  21. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  22. package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
  23. package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
  24. package/esm2022/lib/contracts/sam.contract.mjs +1 -1
  25. package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
  26. package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
  27. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  28. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
  29. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  30. package/esm2022/lib/contracts/viz-config.mjs +2 -1
  31. package/esm2022/lib/geometry/contour.mjs +63 -0
  32. package/esm2022/lib/geometry/loft.mjs +128 -0
  33. package/esm2022/lib/geometry/polylabel.mjs +156 -0
  34. package/esm2022/lib/geometry/raster.mjs +98 -0
  35. package/esm2022/lib/geometry/reconstruct.mjs +315 -0
  36. package/esm2022/lib/geometry/reslice-image.mjs +57 -0
  37. package/esm2022/lib/geometry/ring.mjs +201 -0
  38. package/esm2022/lib/geometry/section.mjs +215 -0
  39. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
  40. package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
  41. package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
  42. package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
  43. package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
  44. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
  45. package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
  46. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
  47. package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
  48. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
  49. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
  50. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
  51. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
  52. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
  53. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
  54. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
  55. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
  56. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
  57. package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
  58. package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
  59. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
  60. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
  61. package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
  62. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
  63. package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
  64. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
  65. package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
  66. package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
  67. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
  68. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
  69. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
  70. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
  71. package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
  72. package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
  73. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
  74. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
  75. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
  76. package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
  77. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
  78. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
  79. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
  80. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
  81. package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
  82. package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
  83. package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
  84. package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
  85. package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
  86. package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
  87. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
  88. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
  89. package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
  90. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
  91. package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
  92. package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
  93. package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
  94. package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
  95. package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
  96. package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
  97. package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
  98. package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
  99. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
  100. package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
  101. package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
  102. package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
  103. package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
  104. package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
  105. package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
  106. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
  107. package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
  108. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
  109. package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
  110. package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
  111. package/esm2022/lib/implementations/region-centroids.mjs +47 -0
  112. package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
  113. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
  114. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
  115. package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
  116. package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
  117. package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
  118. package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
  119. package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
  120. package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
  121. package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
  122. package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
  123. package/esm2022/lib/models/bezier.mjs +1 -11
  124. package/esm2022/lib/models/class-preset.mjs +41 -3
  125. package/esm2022/lib/models/geometry.mjs +27 -164
  126. package/esm2022/lib/models/polygon-edit.mjs +254 -0
  127. package/esm2022/lib/models/polygon-factory.mjs +134 -0
  128. package/esm2022/lib/models/region-clone.mjs +68 -0
  129. package/esm2022/lib/models/region-geojson.mjs +411 -0
  130. package/esm2022/lib/models/region.mjs +34 -33
  131. package/esm2022/lib/models/shape.mjs +18 -16
  132. package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
  133. package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
  134. package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
  135. package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
  136. package/esm2022/lib/plot.utilities.mjs +296 -473
  137. package/esm2022/lib/processing/image-crop.mjs +1 -1
  138. package/esm2022/lib/processing/processing-image.mjs +28 -15
  139. package/esm2022/lib/provide-visualization.mjs +40 -14
  140. package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
  141. package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
  142. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
  143. package/esm2022/lib/region-editor/file-stem.mjs +13 -0
  144. package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
  145. package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
  146. package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
  147. package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
  148. package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
  149. package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
  150. package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
  151. package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
  152. package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
  153. package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
  154. package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
  155. package/esm2022/lib/region-ops.service.mjs +28 -70
  156. package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
  157. package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
  158. package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
  159. package/esm2022/lib/region-overlay/region-style.mjs +97 -0
  160. package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
  161. package/esm2022/lib/region-source/http-region-source.mjs +104 -0
  162. package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
  163. package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
  164. package/esm2022/lib/region-source/region-source.mjs +67 -0
  165. package/esm2022/lib/region-source/region-tiles.mjs +708 -0
  166. package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
  167. package/esm2022/lib/render-orchestrator.mjs +14 -11
  168. package/esm2022/lib/render-session.mjs +207 -0
  169. package/esm2022/lib/routing-visualizer.service.mjs +858 -414
  170. package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
  171. package/esm2022/lib/spatial/density-raster.mjs +14 -0
  172. package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
  173. package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
  174. package/esm2022/lib/spatial/gene-search.mjs +1 -1
  175. package/esm2022/lib/spatial/glyphs.mjs +97 -0
  176. package/esm2022/lib/spatial/lod.mjs +187 -0
  177. package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
  178. package/esm2022/lib/spatial/spatial-density.mjs +25 -16
  179. package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
  180. package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
  181. package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
  182. package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
  183. package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
  184. package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
  185. package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
  186. package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
  187. package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
  188. package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
  189. package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
  190. package/esm2022/lib/spatial/stats.mjs +71 -0
  191. package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
  192. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
  193. package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
  194. package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
  195. package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
  196. package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
  197. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
  198. package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
  199. package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
  200. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
  201. package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
  202. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
  203. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
  204. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
  205. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
  206. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
  207. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
  208. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
  209. package/esm2022/lib/store/class-color.util.mjs +53 -5
  210. package/esm2022/lib/store/class-signatures.mjs +63 -0
  211. package/esm2022/lib/store/region-history.mjs +146 -0
  212. package/esm2022/lib/store/region-scope-cache.mjs +144 -0
  213. package/esm2022/lib/store/region-selection.mjs +82 -0
  214. package/esm2022/lib/store/region-source-scope.mjs +171 -0
  215. package/esm2022/lib/store/region-store.service.mjs +986 -670
  216. package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
  217. package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
  218. package/esm2022/lib/toast-outlets.mjs +5 -4
  219. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
  220. package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
  221. package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
  222. package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
  223. package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
  224. package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
  225. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
  226. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
  227. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
  228. package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
  229. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
  230. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
  231. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
  232. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
  233. package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
  234. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
  235. package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
  236. package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
  237. package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
  238. package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
  239. package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
  240. package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
  241. package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
  242. package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
  243. package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
  244. package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
  245. package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
  246. package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
  247. package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
  248. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
  249. package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
  250. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
  251. package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
  252. package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
  253. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
  254. package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
  255. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
  256. package/esm2022/lib/util/mark-for-check.mjs +17 -0
  257. package/esm2022/lib/util/supersede.mjs +56 -0
  258. package/esm2022/lib/visualization.module.mjs +39 -141
  259. package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
  260. package/esm2022/lib/visualizer/region-actions.mjs +149 -0
  261. package/esm2022/lib/visualizer/region-load.mjs +123 -0
  262. package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
  263. package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
  264. package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
  265. package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
  266. package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
  267. package/esm2022/lib/visualizer.component.mjs +602 -1902
  268. package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
  269. package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
  270. package/esm2022/lib/workers/spatial-math.mjs +190 -0
  271. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
  272. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
  273. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
  274. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
  275. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
  276. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
  277. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
  278. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
  279. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
  280. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  281. package/fesm2022/mask.worker.js +36 -917
  282. package/fesm2022/onnx-sam.worker.js +52 -16
  283. package/fesm2022/region-source.worker.js +1067 -0
  284. package/fesm2022/spatial-math.worker.js +471 -0
  285. package/fesm2022/tsne.worker.js +32 -15
  286. package/index.d.ts +19 -10
  287. package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
  288. package/lib/contracts/capabilities.contract.d.ts +4 -2
  289. package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
  290. package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
  291. package/lib/contracts/color.d.ts +27 -0
  292. package/lib/contracts/colormap-lut.d.ts +19 -4
  293. package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
  294. package/lib/contracts/display-types.d.ts +21 -0
  295. package/lib/contracts/image.contract.d.ts +4 -0
  296. package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
  297. package/lib/contracts/intensity.d.ts +13 -2
  298. package/lib/contracts/plot-type.d.ts +3 -1
  299. package/lib/contracts/ports/image-state.port.d.ts +6 -2
  300. package/lib/contracts/ports/preferences.port.d.ts +4 -0
  301. package/lib/contracts/ports/region-io.port.d.ts +1 -0
  302. package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
  303. package/lib/contracts/ports/tile-access.port.d.ts +1 -0
  304. package/lib/contracts/region-editor-api.contract.d.ts +85 -1
  305. package/lib/contracts/region-overlay.contract.d.ts +5 -0
  306. package/lib/contracts/region-store.contract.d.ts +22 -0
  307. package/lib/contracts/sam.contract.d.ts +7 -0
  308. package/lib/contracts/section-view.contract.d.ts +44 -0
  309. package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
  310. package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
  311. package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
  312. package/lib/contracts/visualizer.contract.d.ts +231 -54
  313. package/lib/contracts/viz-config.d.ts +9 -0
  314. package/lib/geometry/contour.d.ts +24 -0
  315. package/lib/geometry/loft.d.ts +22 -0
  316. package/lib/geometry/polylabel.d.ts +23 -0
  317. package/lib/geometry/raster.d.ts +42 -0
  318. package/lib/geometry/reconstruct.d.ts +54 -0
  319. package/lib/geometry/reslice-image.d.ts +33 -0
  320. package/lib/geometry/ring.d.ts +67 -0
  321. package/lib/geometry/section.d.ts +52 -0
  322. package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
  323. package/lib/implementations/base-store-visualizer.d.ts +61 -15
  324. package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
  325. package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
  326. package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
  327. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
  328. package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
  329. package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
  330. package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
  331. package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
  332. package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
  333. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
  334. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
  335. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
  336. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
  337. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
  338. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
  339. package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
  340. package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
  341. package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
  342. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
  343. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
  344. package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
  345. package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
  346. package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
  347. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
  348. package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
  349. package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
  350. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
  351. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
  352. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
  353. package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
  354. package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
  355. package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
  356. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
  357. package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
  358. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
  359. package/lib/implementations/osd/display-pipeline.d.ts +38 -9
  360. package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
  361. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
  362. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
  363. package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
  364. package/lib/implementations/osd/osd-coords.d.ts +6 -4
  365. package/lib/implementations/osd/osd-export.d.ts +36 -0
  366. package/lib/implementations/osd/osd-lib.d.ts +7 -0
  367. package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
  368. package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
  369. package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
  370. package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
  371. package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
  372. package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
  373. package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
  374. package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
  375. package/lib/implementations/osd/osd-viewport.d.ts +77 -0
  376. package/lib/implementations/osd/osd-zoom.d.ts +6 -0
  377. package/lib/implementations/osd/simple-source.d.ts +161 -0
  378. package/lib/implementations/osd/slice-cache.d.ts +12 -3
  379. package/lib/implementations/osd/tile-client.d.ts +11 -14
  380. package/lib/implementations/osd/tile-recolor.d.ts +141 -0
  381. package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
  382. package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
  383. package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
  384. package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
  385. package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
  386. package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
  387. package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
  388. package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
  389. package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
  390. package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
  391. package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
  392. package/lib/implementations/plotly/plotly.service.d.ts +136 -401
  393. package/lib/implementations/region-centroids.d.ts +14 -0
  394. package/lib/implementations/simple-slice-access.service.d.ts +7 -4
  395. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
  396. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
  397. package/lib/implementations/tile-server/index.d.ts +5 -0
  398. package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
  399. package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
  400. package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
  401. package/lib/implementations/tile-server/transport.d.ts +62 -0
  402. package/lib/intensity/intensity-profile.d.ts +66 -0
  403. package/lib/intensity/intensity-profile.service.d.ts +108 -0
  404. package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
  405. package/lib/models/bezier.d.ts +0 -5
  406. package/lib/models/class-preset.d.ts +25 -0
  407. package/lib/models/geometry.d.ts +14 -48
  408. package/lib/models/polygon-edit.d.ts +72 -0
  409. package/lib/models/polygon-factory.d.ts +45 -0
  410. package/lib/models/region-clone.d.ts +20 -0
  411. package/lib/models/region-geojson.d.ts +57 -0
  412. package/lib/models/region.d.ts +59 -4
  413. package/lib/models/shape.d.ts +8 -0
  414. package/lib/plot-mode/contribution-host.d.ts +125 -0
  415. package/lib/plot-mode/plot-type-menu.d.ts +60 -0
  416. package/lib/plot-mode/tool-params-model.d.ts +49 -0
  417. package/lib/plot.utilities.d.ts +19 -30
  418. package/lib/processing/processing-image.d.ts +5 -2
  419. package/lib/provide-visualization.d.ts +19 -2
  420. package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
  421. package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
  422. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
  423. package/lib/region-editor/file-stem.d.ts +7 -0
  424. package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
  425. package/lib/region-editor/mask-export.service.d.ts +54 -0
  426. package/lib/region-editor/mask-raster.d.ts +2 -8
  427. package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
  428. package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
  429. package/lib/region-editor/region-editor.component.d.ts +283 -200
  430. package/lib/region-editor/region-metrics.d.ts +34 -0
  431. package/lib/region-editor/region-persistence.service.d.ts +77 -0
  432. package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
  433. package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
  434. package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
  435. package/lib/region-ops.service.d.ts +1 -7
  436. package/lib/region-overlay/region-geometry.d.ts +158 -0
  437. package/lib/region-overlay/region-hit-test.d.ts +38 -0
  438. package/lib/region-overlay/region-source-layer.d.ts +96 -0
  439. package/lib/region-overlay/region-style.d.ts +52 -0
  440. package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
  441. package/lib/region-source/http-region-source.d.ts +45 -0
  442. package/lib/region-source/region-source-ops.d.ts +89 -0
  443. package/lib/region-source/region-source-worker.d.ts +7 -0
  444. package/lib/region-source/region-source.d.ts +82 -0
  445. package/lib/region-source/region-tiles.d.ts +289 -0
  446. package/lib/region-source/worker-region-source.d.ts +65 -0
  447. package/lib/render-orchestrator.d.ts +6 -2
  448. package/lib/render-session.d.ts +75 -0
  449. package/lib/routing-visualizer.service.d.ts +248 -59
  450. package/lib/section-pane/section-pane.component.d.ts +47 -0
  451. package/lib/spatial/density-raster.d.ts +6 -0
  452. package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
  453. package/lib/spatial/embedding-compute.d.ts +21 -2
  454. package/lib/spatial/glyphs.d.ts +16 -0
  455. package/lib/spatial/lod.d.ts +94 -0
  456. package/lib/spatial/spatial-controls.facade.d.ts +64 -0
  457. package/lib/spatial/spatial-density.d.ts +15 -5
  458. package/lib/spatial/spatial-encoding.d.ts +11 -44
  459. package/lib/spatial/spatial-expression.d.ts +40 -22
  460. package/lib/spatial/spatial-framing.d.ts +1 -0
  461. package/lib/spatial/spatial-heatmap.d.ts +2 -0
  462. package/lib/spatial/spatial-hover.d.ts +4 -16
  463. package/lib/spatial/spatial-panel-model.d.ts +135 -0
  464. package/lib/spatial/spatial-selection.d.ts +21 -26
  465. package/lib/spatial/spatial-tile-merge.d.ts +41 -0
  466. package/lib/spatial/spatial-tiles.d.ts +9 -256
  467. package/lib/spatial/stats.d.ts +38 -0
  468. package/lib/spatial/transcript-grouping.d.ts +119 -0
  469. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
  470. package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
  471. package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
  472. package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
  473. package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
  474. package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
  475. package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
  476. package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
  477. package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
  478. package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
  479. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
  480. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
  481. package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
  482. package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
  483. package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
  484. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
  485. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
  486. package/lib/store/class-color.util.d.ts +39 -2
  487. package/lib/store/class-signatures.d.ts +11 -0
  488. package/lib/store/region-history.d.ts +66 -0
  489. package/lib/store/region-scope-cache.d.ts +65 -0
  490. package/lib/store/region-selection.d.ts +36 -0
  491. package/lib/store/region-source-scope.d.ts +68 -0
  492. package/lib/store/region-store.service.d.ts +312 -116
  493. package/lib/store/visualizer-store.service.d.ts +32 -33
  494. package/lib/toast-outlets.d.ts +4 -3
  495. package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
  496. package/lib/toolbar/canvas-tools.d.ts +20 -0
  497. package/lib/toolbar/crop/slide-crop.d.ts +10 -4
  498. package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
  499. package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
  500. package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
  501. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
  502. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
  503. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
  504. package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
  505. package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
  506. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
  507. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
  508. package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
  509. package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
  510. package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
  511. package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
  512. package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
  513. package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
  514. package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
  515. package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
  516. package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
  517. package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
  518. package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
  519. package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
  520. package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
  521. package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
  522. package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
  523. package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
  524. package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
  525. package/lib/toolbar/toolbar.component.d.ts +55 -84
  526. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
  527. package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
  528. package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
  529. package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
  530. package/lib/toolbar/wand/wand.service.d.ts +22 -116
  531. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
  532. package/lib/util/mark-for-check.d.ts +11 -0
  533. package/lib/util/supersede.d.ts +53 -0
  534. package/lib/visualization.module.d.ts +18 -39
  535. package/lib/visualizer/floating-drag.directive.d.ts +30 -0
  536. package/lib/visualizer/region-actions.d.ts +54 -0
  537. package/lib/visualizer/region-load.d.ts +46 -0
  538. package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
  539. package/lib/visualizer/tool-modes.d.ts +49 -0
  540. package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
  541. package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
  542. package/lib/visualizer/volume-sections.d.ts +64 -0
  543. package/lib/visualizer.component.d.ts +232 -447
  544. package/lib/workers/spatial-math-ops.d.ts +65 -0
  545. package/lib/workers/spatial-math-worker.d.ts +7 -0
  546. package/lib/workers/spatial-math.d.ts +74 -0
  547. package/package.json +12 -3
  548. package/src/lib/assets/slice.svg +23 -0
  549. package/src/lib/styles/_viz-icons-rules.scss +73 -0
  550. package/src/lib/styles/viz-icons.scss +14 -0
  551. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
  552. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
  553. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
  554. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
  555. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
  556. package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
  557. package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
  558. package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
  559. package/src/lib/assets/cell-detection.svg +0 -37
  560. package/src/lib/assets/click.svg +0 -1
  561. package/src/lib/assets/colormap-luts.json +0 -1
  562. package/src/lib/assets/edit-selection-white.svg +0 -47
  563. package/src/lib/assets/icons/colormap-earth.png +0 -0
  564. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  565. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  566. package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
  567. package/src/lib/assets/picture-segmentation.svg +0 -43
  568. package/src/lib/assets/test/download-379.svg +0 -1
  569. package/src/lib/assets/test/download-98.svg +0 -1
  570. package/src/lib/assets/test/json-1.svg +0 -1
  571. package/src/lib/assets/test/load-53.svg +0 -1
  572. package/src/lib/assets/test/mask-44.svg +0 -1
  573. package/src/lib/assets/test/mask-download-44.svg +0 -15
  574. package/src/lib/assets/test/mask-save-44.svg +0 -11
  575. package/src/lib/assets/test/overlay-1.svg +0 -1
  576. package/src/lib/assets/test/overlay-4.svg +0 -1
  577. package/src/lib/assets/test/region-26.svg +0 -1
  578. package/src/lib/assets/test/save-56.svg +0 -1
  579. package/src/lib/assets/test/upload-43.svg +0 -1
@@ -0,0 +1,108 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Observable } from 'rxjs';
4
+ import { IIntensityControls, IntensityProfile } from '../contracts/visualizer.contract';
5
+ import { IImageInfo } from '../contracts/image.contract';
6
+ import { TileAccessPort } from '../contracts/ports/tile-access.port';
7
+ import { ImageStatePort } from '../contracts/ports/image-state.port';
8
+ import { Region } from '../models/region';
9
+ import { RegionStore } from '../store/region-store.service';
10
+ import { ProfileLine } from './intensity-profile';
11
+ import * as i0 from "@angular/core";
12
+ /** The pixels the profiles are sampled from, and the image they belong to. */
13
+ export interface IntensityFrames {
14
+ /** Per-z-plane pixel matrices (grayscale numbers or `[r, g, b]` cells). */
15
+ frames: any[];
16
+ /** [xRatio, yRatio]: image units per frame pixel. */
17
+ ratios: number[];
18
+ /** Image coordinate of the frames' pixel (0,0); [0,0] unless a zoom crop. */
19
+ origin?: [number, number];
20
+ }
21
+ /** The image the frames come from: its extent (for line placement) and its
22
+ * metadata (pixel size, grayscale). */
23
+ export interface IntensityImage {
24
+ imageInfo: IImageInfo;
25
+ /** [x0, x1, y0, y1] in image units. */
26
+ extent: number[];
27
+ /** The displayed z-plane, when the frames hold a stack. */
28
+ frameIndex?: () => number;
29
+ }
30
+ /**
31
+ * Intensity profiles along line ROIs (PlotType.LINE), for every backend.
32
+ *
33
+ * Profile lines are ordinary RegionStore regions tagged `kind: 'profile'`; any
34
+ * region change re-samples and re-emits every line's profile. The service owns
35
+ * its OWN sampling frames — a backend's tool readback never doubles as the
36
+ * profile source (OSD-PLOTLY-2) — filled by Plotly when it renders or high-def
37
+ * zooms, and fetched here for the other backends: the displayed slice
38
+ * ({@link ensureIntensitySampling}) and, on zoom/pan, a display-resolution
39
+ * crop of the visible region ({@link refreshIntensitySamplingForRoi}). Every
40
+ * sampling write supersedes the async ones before it.
41
+ *
42
+ * Per viewer: listed in `provideVisualization()` with the RegionStore it
43
+ * listens to.
44
+ */
45
+ export declare class IntensityProfileService implements IIntensityControls, OnDestroy {
46
+ private readonly http;
47
+ private readonly tiles;
48
+ private readonly regionStore;
49
+ private frames;
50
+ private image;
51
+ /** The last visible image-pixel rect a backend reported (new lines go there). */
52
+ private lastVisibleRoi;
53
+ /** Palette cursor (never reset on delete, so colours keep cycling). */
54
+ private colorSeq;
55
+ /** Bumped by every sampling write request: an async fetch lands only if no
56
+ * newer one was requested meanwhile. */
57
+ private gen;
58
+ /** The element whose parent sizes a crop request (the viewer's plot div). */
59
+ private elementId;
60
+ /** The host's selected file, so a crop for a previous file is dropped. */
61
+ private fileName;
62
+ private readonly profiles$;
63
+ private readonly subs;
64
+ private readonly utils;
65
+ constructor(http: HttpClient, tiles: TileAccessPort, state: ImageStatePort, regionStore: RegionStore);
66
+ ngOnDestroy(): void;
67
+ /** Every profile line's profile, re-emitted whenever one is added, moved or removed. */
68
+ getIntensityProfile$(): Observable<IntensityProfile[]>;
69
+ /** The element (by id) whose size a crop request is made for. */
70
+ setSamplingElement(id: string): void;
71
+ /** Supersede every sampling fetch in flight; returns the new generation. */
72
+ supersede(): number;
73
+ /** Whether `gen` (from {@link supersede}) is still the latest sampling request. */
74
+ isCurrent(gen: number): boolean;
75
+ /** Sample from these frames from now on — of `image`, or of the image already set. */
76
+ setFrames(frames: IntensityFrames, image?: IntensityImage): void;
77
+ /**
78
+ * Fetch the displayed slice's preview for sampling (the same pixels a heatmap
79
+ * would sample), for a backend that has no frames of its own (OpenSeadragon,
80
+ * napari-js). Re-emits the profiles once loaded.
81
+ */
82
+ ensureIntensitySampling(imageInfo: IImageInfo, zIndex: number): Promise<void>;
83
+ /**
84
+ * Re-fetch the given image-pixel ROI at the display resolution and sample from
85
+ * it, so the profile reflects the data at the current zoom level. Also
86
+ * remembers the ROI, so a new line is placed inside it.
87
+ */
88
+ refreshIntensitySamplingForRoi(x: number, y: number, width: number, height: number, zIndex: number): void;
89
+ /**
90
+ * Add another profile line: a horizontal open 2-point polyline in the next
91
+ * palette colour, placed by {@link placeProfileLine}, added to the shared
92
+ * store so every backend renders and drags it (and excluded from the Regions
93
+ * tab and exports by its kind). Null until an image extent is known.
94
+ */
95
+ addProfileLine(): Region | null;
96
+ /** Recompute and broadcast every profile line's profile (tagged with the
97
+ * line's id and colour, so the inset trace matches its line). */
98
+ emitProfiles(): void;
99
+ /** Sample the active frame along `line` (see sampleLine). */
100
+ computeIntensityProfile(line: ProfileLine): IntensityProfile;
101
+ /** The profile-line regions in the store. */
102
+ private profileRegions;
103
+ /** Fetch one slice through HttpClient (auth interceptors apply) and decode it. */
104
+ private loadSlice;
105
+ private toMatrix;
106
+ static ɵfac: i0.ɵɵFactoryDeclaration<IntensityProfileService, never>;
107
+ static ɵprov: i0.ɵɵInjectableDeclaration<IntensityProfileService>;
108
+ }
@@ -0,0 +1,58 @@
1
+ import { ChangeDetectorRef, DestroyRef, NgZone, OnDestroy, OnInit } from '@angular/core';
2
+ import { IImageInfo } from '../contracts/image.contract';
3
+ import { IVisualizer } from '../contracts/visualizer.contract';
4
+ import { Region } from '../models/region';
5
+ import { FloatingPos } from '../visualizer/floating-drag.directive';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * The floating, draggable intensity-profile inset: shown while any intensity line
9
+ * exists, charting one trace per line as lines are added, moved or removed.
10
+ *
11
+ * Owns the profile and viewport-change subscriptions, the window-resize reflow, the
12
+ * drag and the per-instance chart div id it is given. The chart itself is drawn by the
13
+ * backend (`IVisualizer.renderIntensityInset`) so this never reaches a charting
14
+ * library. Fixed to the viewport, outside the plot div, so it is not clipped to the
15
+ * canvas.
16
+ *
17
+ * OnPush, with its view state in signals: the profile stream may fire outside the zone.
18
+ */
19
+ export declare class IntensityInsetComponent implements OnInit, OnDestroy {
20
+ private readonly visualizer;
21
+ private readonly cdr;
22
+ private readonly zone;
23
+ private readonly destroyRef;
24
+ /** Id of the chart div — unique per viewer: the backend resolves it by id. */
25
+ divId: string;
26
+ /** Id of the viewer's plot div: the inset parks near its top-right corner. */
27
+ plotDivName: string;
28
+ /** The displayed slice, re-sampled at when the view settles. */
29
+ zIndex: number;
30
+ /** The Image view (OSD), whose line sampling is fed from preview frames. */
31
+ imageView: boolean;
32
+ /** The image shown (the Image view samples its lines from it). */
33
+ imageInfo: IImageInfo | undefined;
34
+ /** True whenever any intensity-profile line exists (whatever the plot type). */
35
+ protected readonly hasProfiles: import("@angular/core").WritableSignal<boolean>;
36
+ protected readonly pos: import("@angular/core").WritableSignal<FloatingPos>;
37
+ /** Where a header drag starts from. */
38
+ protected readonly dragOrigin: () => FloatingPos;
39
+ private profiles;
40
+ private readonly onResize;
41
+ constructor(visualizer: IVisualizer, cdr: ChangeDetectorRef, zone: NgZone, destroyRef: DestroyRef);
42
+ ngOnInit(): void;
43
+ /** Removes the window resize listener; the streams end through `takeUntilDestroyed`. */
44
+ ngOnDestroy(): void;
45
+ /** The canvas was resized: reflow the chart a tick later, once the panel has settled. */
46
+ reflow(): void;
47
+ /** A slice was committed: keep the lines sampled from it (Image view). */
48
+ sliceCommitted(z: number): void;
49
+ /**
50
+ * Add another line ROI (next bright colour) and select it on the active backend so
51
+ * it is ready to move or delete. The first line parks the inset near the plot's
52
+ * top-right. Resolves the new line, or null when no image extent is known yet.
53
+ */
54
+ addProfileLine(): Promise<Region | null>;
55
+ private render;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<IntensityInsetComponent, never>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<IntensityInsetComponent, "viz-intensity-inset", never, { "divId": { "alias": "divId"; "required": false; }; "plotDivName": { "alias": "plotDivName"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "imageView": { "alias": "imageView"; "required": false; }; "imageInfo": { "alias": "imageInfo"; "required": false; }; }, {}, never, never, true, never>;
58
+ }
@@ -52,8 +52,3 @@ export declare function resolveHandles(xs: number[], ys: number[], closed: boole
52
52
  * closed ring returns to its first point.
53
53
  */
54
54
  export declare function bezierCurveFromHandles(xs: number[], ys: number[], handles: AnchorHandle[], closed: boolean): CurvePoints;
55
- /**
56
- * Flatten the smooth Catmull-Rom bezier through the anchors (no custom handles).
57
- * Falls back to the anchors when there are too few to form a curve.
58
- */
59
- export declare function bezierCurve(xs: number[], ys: number[], closed: boolean): CurvePoints;
@@ -5,7 +5,12 @@
5
5
  * The `PresetSet` is the per-user, server-persisted source of truth for region colours;
6
6
  * see `class-color.util.ts` for the deterministic colour-resolution engine.
7
7
  */
8
+ /** Where a preset class came from: added by the user, one of the built-in
9
+ * defaults, or auto-promoted from an unknown region label. */
8
10
  export type PresetSource = 'user' | 'default' | 'auto';
11
+ /** One annotation class and its colour: regions whose `label` matches
12
+ * `name` (per the set's {@link MatchMode}) draw in `color` unless their colour
13
+ * was overridden by hand. */
9
14
  export interface ClassPreset {
10
15
  /** The class name — matched against `Region.label`. */
11
16
  name: string;
@@ -16,7 +21,14 @@ export interface ClassPreset {
16
21
  /** Provenance; `'auto'` = added by opt-in fallback promotion. */
17
22
  source?: PresetSource;
18
23
  }
24
+ /** How a region label is matched to a preset name: `'exact'` compares the
25
+ * strings as is; `'normalized'` trims and lower-cases both first. */
19
26
  export type MatchMode = 'exact' | 'normalized';
27
+ /**
28
+ * The per-user class-colour configuration (server-persisted through the
29
+ * preferences port): the preset classes, the palette for labels outside them,
30
+ * and the matching rules. Resolved into region colours by `class-color.util.ts`.
31
+ */
20
32
  export interface PresetSet {
21
33
  /** Ordered list of preset classes. */
22
34
  classes: ClassPreset[];
@@ -26,6 +38,13 @@ export interface PresetSet {
26
38
  autoPromote: boolean;
27
39
  /** Label matching against `Region.label` (default `'exact'`). */
28
40
  matchMode: MatchMode;
41
+ /**
42
+ * Class colours that imported GeoJSON carried for classes with no preset, keyed by the
43
+ * match mode's key (see `presetKey`). They come before the fallback palette, so an imported
44
+ * file keeps its own colours. Session-only: never persisted, and absent from a set a caller
45
+ * saves or exports.
46
+ */
47
+ importedColors?: Readonly<Record<string, string>>;
29
48
  }
30
49
  /**
31
50
  * Fallback palette for classes not present in the preset set — reasonably distinct hues.
@@ -37,3 +56,9 @@ export declare const DEFAULT_FALLBACK_PALETTE: string[];
37
56
  export declare function defaultPresetSet(): PresetSet;
38
57
  /** True when the set has no usable classes (e.g. the server returned an empty/blank record). */
39
58
  export declare function isEmptyPresetSet(set: PresetSet | null | undefined): boolean;
59
+ /**
60
+ * Validate an untrusted value (e.g. an imported JSON file) as a preset set.
61
+ * Returns a clean copy — only well-formed `{ name, color }` classes, defaults
62
+ * for missing optional fields — or null when it has no usable classes.
63
+ */
64
+ export declare function parsePresetSet(value: unknown): PresetSet | null;
@@ -1,66 +1,32 @@
1
1
  /**
2
- * Pure geometry helpers extracted from PlotlyService.
2
+ * Pure SVG-path helpers (build and parse a vertex ring as a Plotly path).
3
3
  *
4
- * No DOM access, no service state, no `this` — every function is testable
5
- * in isolation. Keep it that way: this module is the dumping ground for
6
- * shape/mask/SVG-path utilities the wand, vertex eraser, and region editor
7
- * share. If a helper grows a `this.shapes` reference, it doesn't belong here.
4
+ * No DOM access, no service state, no `this`. Mask and ring geometry (the
5
+ * rasterizer, mask set operations, point-in-ring, simplification, contour
6
+ * tracing) lives in `src/lib/geometry/`.
8
7
  */
9
- /** A bbox-relative binary mask (1 = filled, 0 = empty). */
10
- export interface BBoxMask {
11
- bx: number;
12
- by: number;
13
- bw: number;
14
- bh: number;
15
- mask: Uint8Array;
16
- }
17
8
  /** Parsed single-subpath polygon vertices. */
18
9
  export interface PolygonVertices {
19
10
  xpoints: number[];
20
11
  ypoints: number[];
21
12
  }
22
13
  /**
23
- * Parse a single-subpath `M x,y L x,y ... Z` path into vertex arrays.
14
+ * Split a single-subpath `M x,y L x,y ... [Z]` path into vertex arrays, plus
15
+ * whether it is closed (ends in `Z`). No validation: a coordinate that doesn't
16
+ * parse comes back as NaN. See {@link parseSvgPathPolygon} for the checked form.
17
+ */
18
+ export declare function parseSvgPath(path: string): PolygonVertices & {
19
+ closed: boolean;
20
+ };
21
+ /**
22
+ * Parse a single-subpath `M x,y L x,y ... [Z]` path into vertex arrays.
24
23
  *
25
24
  * Returns null for paths we can't safely round-trip (multi-subpath, curves,
26
- * fewer than three vertices). The wand only adopts shapes it produced or
27
- * that Plotly's drawclosedpath produces, both of which are single-subpath
28
- * polygons.
25
+ * non-numeric coordinates, fewer than three vertices).
29
26
  */
30
27
  export declare function parseSvgPathPolygon(path: string): PolygonVertices | null;
31
- /**
32
- * Build a closed SVG path string `M x,y L x,y L ... Z` from vertex arrays.
33
- * Returns '' for fewer than three vertices (degenerate).
34
- */
35
- export declare function polygonToSvgPath(xpoints: number[], ypoints: number[]): string;
36
28
  /**
37
29
  * Build an SVG path string from vertex arrays. Closed polygons end with `Z`,
38
30
  * open polylines do not. Returns '' for fewer than two vertices (degenerate).
39
31
  */
40
32
  export declare function verticesToSvgPath(xs: number[], ys: number[], closed: boolean): string;
41
- /**
42
- * Compare two Plotly shape objects for "same region" — used by the wand to
43
- * avoid appending duplicates when the user pushes the same find result more
44
- * than once. Polygons compare by SVG path string, rectangles compare by
45
- * (x0, y0, x1, y1).
46
- */
47
- export declare function shapesEqual(a: any, b: any): boolean;
48
- /** Returns true if the two bbox-relative masks share at least one set pixel. */
49
- export declare function masksOverlap(a: BBoxMask, b: BBoxMask): boolean;
50
- /**
51
- * Allocate a fresh accumulator covering both masks and OR them in. The
52
- * resulting mask's bbox is the smallest rectangle containing both inputs.
53
- */
54
- export declare function unionMasks(a: BBoxMask, b: BBoxMask): BBoxMask;
55
- /**
56
- * Simplify a closed ring with the Douglas–Peucker algorithm (jit-ui#85):
57
- * drop every vertex that lies within `epsilon` pixels (the "altitude
58
- * threshold") of the line between its kept neighbours. Anchored at vertex 0
59
- * (the ring is closed by appending it). Rings of ≤ 3 vertices, or a
60
- * non-positive epsilon, are returned unchanged. Output keeps the closed-ring
61
- * convention (no repeated closing point).
62
- */
63
- export declare function simplifyRing(xs: number[], ys: number[], epsilon: number): {
64
- xs: number[];
65
- ys: number[];
66
- };
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Copy-on-write polygon edits (review RT-13, RegionStore split "polygon-edit").
3
+ *
4
+ * Every function takes a polygon and returns a NEW {@link Polygon} with the
5
+ * edit applied — or null when the edit does not apply (an index out of range,
6
+ * a vertex delete that would degenerate the ring, …), so a caller can skip its
7
+ * undo step. The input is never mutated: arrays the edit does not touch are
8
+ * shared with it (structural sharing), arrays it does touch are copied. That
9
+ * is what lets `RegionStore` keep shallow undo snapshots instead of deep
10
+ * clones: an instance in a snapshot is never changed after the fact.
11
+ *
12
+ * Pure: no DOM, no store. Coordinates are image pixels; bézier handle offsets
13
+ * are relative to their anchor, as on {@link Polygon}.
14
+ */
15
+ import { MultiPolygon, Polygon, Rectangle } from './region';
16
+ /** Move exterior vertex `index` to (x, y). Null when `index` is out of range. */
17
+ export declare function moveVertex(p: Polygon, index: number, x: number, y: number): Polygon | null;
18
+ /**
19
+ * Insert a vertex at (x, y) after `segIndex` (the start vertex of the edge),
20
+ * clamped to the ring. A bézier polygon with stored handles gives the new
21
+ * vertex smooth handles from its neighbours and keeps the others' (possibly
22
+ * hand-edited) handles.
23
+ */
24
+ export declare function addVertex(p: Polygon, segIndex: number, x: number, y: number): Polygon;
25
+ /**
26
+ * Delete exterior vertex `index`. Null when out of range, or when it would
27
+ * leave fewer than 3 vertices (2 for an open polyline).
28
+ */
29
+ export declare function deleteVertex(p: Polygon, index: number): Polygon | null;
30
+ /** Move vertex `index` of hole `holeIndex` to (x, y). Null when either is out of range. */
31
+ export declare function moveHoleVertex(p: Polygon, holeIndex: number, index: number, x: number, y: number): Polygon | null;
32
+ /**
33
+ * Insert a vertex at (x, y) on hole `holeIndex`, after `segIndex`. A bézier
34
+ * polygon re-seeds its hole handles so they stay parallel to the rings. Null
35
+ * for an out-of-range hole.
36
+ */
37
+ export declare function addHoleVertex(p: Polygon, holeIndex: number, segIndex: number, x: number, y: number): Polygon | null;
38
+ /**
39
+ * Delete vertex `index` of hole `holeIndex`. Taking a ring below 3 vertices
40
+ * drops the whole hole (it would bound no area). Null when out of range.
41
+ */
42
+ export declare function deleteHoleVertex(p: Polygon, holeIndex: number, index: number): Polygon | null;
43
+ /**
44
+ * Per-hole bézier handles seeded from the Catmull-Rom default, parallel to
45
+ * `holes` (both undefined without holes).
46
+ */
47
+ export declare function seededHoleHandles(holes: number[][][] | undefined): Pick<Polygon, 'holeHandlesIn' | 'holeHandlesOut'>;
48
+ /**
49
+ * Turn bézier on — seeding editable handles (holes included) from the smooth
50
+ * default — or off, dropping every handle. The anchors never move. Null when
51
+ * the polygon is already in that state.
52
+ */
53
+ export declare function setBezier(p: Polygon, bezier: boolean): Polygon | null;
54
+ /**
55
+ * Move the `side` control point of exterior vertex `index` to the absolute
56
+ * point (x, y). Handles missing from a bézier polygon are seeded from the
57
+ * default first. Null for a non-bézier polygon or an out-of-range index.
58
+ */
59
+ export declare function moveBezierHandle(p: Polygon, index: number, side: 'in' | 'out', x: number, y: number): Polygon | null;
60
+ /**
61
+ * Move the `side` control point of vertex `index` on hole `holeIndex` to the
62
+ * absolute point (x, y), seeding the hole handles first when missing. Null for
63
+ * a non-bézier polygon or an out-of-range hole/index.
64
+ */
65
+ export declare function moveHoleBezierHandle(p: Polygon, holeIndex: number, index: number, side: 'in' | 'out', x: number, y: number): Polygon | null;
66
+ /**
67
+ * A polygon moved by (dx, dy): its vertices and holes (bézier offsets are
68
+ * relative, so they carry over). `round` snaps the moved coordinates.
69
+ */
70
+ export declare function translatePolygon(p: Polygon, dx: number, dy: number, round?: (v: number) => number): Polygon;
71
+ /** Any region geometry moved by (dx, dy) (see {@link translatePolygon}). */
72
+ export declare function translateBounds(b: Rectangle | Polygon | MultiPolygon, dx: number, dy: number, round?: (v: number) => number): Rectangle | Polygon | MultiPolygon;
@@ -0,0 +1,45 @@
1
+ import { MultiPolygon, Polygon, Rectangle, Region } from './region';
2
+ /**
3
+ * Polygon / Region construction and cloning in one place, so callers stop
4
+ * hand-filling `npoints`, `xpoints`, `ypoints`, `coordinates` and `closed`
5
+ * (three redundant views of one ring that every mutator must keep in sync).
6
+ */
7
+ /** Options for {@link makePolygon}. */
8
+ export interface MakePolygonOptions {
9
+ /** false for an open polyline; default true. */
10
+ closed?: boolean;
11
+ /** Interior rings; omitted when absent or empty. */
12
+ holes?: number[][][];
13
+ bezier?: boolean;
14
+ }
15
+ /** A Polygon over the given vertex arrays (taken by reference). */
16
+ export declare function makePolygon(xs: number[], ys: number[], opts?: MakePolygonOptions): Polygon;
17
+ /** The four corners of a rectangle as a closed ring (clockwise from top-left). */
18
+ export declare function rectToRing(r: Pick<Rectangle, 'x' | 'y' | 'width' | 'height'>): {
19
+ xs: number[];
20
+ ys: number[];
21
+ };
22
+ /** A deep copy of a polygon: vertices, holes and every bézier handle. */
23
+ export declare function clonePolygon(p: Polygon): Polygon;
24
+ /** A deep copy of any region geometry. */
25
+ export declare function cloneBounds(bounds: Rectangle | Polygon | MultiPolygon): Rectangle | Polygon | MultiPolygon;
26
+ /**
27
+ * A copy of `existing` (id, name, label, colour, colour override, source,
28
+ * file name, kind, z, …) with new geometry and optional extra fields. Use it
29
+ * whenever a tool edits a region's shape, so the edit never drops metadata and
30
+ * never mutates the store's instance.
31
+ */
32
+ export declare function replaceBounds(existing: Region, bounds: Region['bounds'], patch?: Partial<Region>): Region;
33
+ /**
34
+ * The closed polygons a region covers, for image-processing consumers (crop,
35
+ * segmentation requests): a rectangle's four corners, a closed polygon with its
36
+ * holes (a bézier region as its flattened curve), one polygon per part of a
37
+ * multi-polygon. Open polylines cover no area and yield nothing. Coordinates
38
+ * are rounded to whole pixels.
39
+ */
40
+ export declare function regionPolygons(region: Region): Polygon[];
41
+ /**
42
+ * The open polylines a region traces (a polyline, or a multi-polygon's open parts), as interleaved
43
+ * `x, y` image px; a bézier polyline as its flattened curve. Closed shapes yield nothing.
44
+ */
45
+ export declare function regionPolylines(region: Region): Float64Array[];
@@ -0,0 +1,20 @@
1
+ import { Polygon, Region } from './region';
2
+ /**
3
+ * Copy-on-write region copies and geometry equality (RT-13). Stored regions
4
+ * are shared with the undo history, so a change is always a copy; these
5
+ * helpers return the input unchanged when the patch would not change it.
6
+ * (Deep geometry copies are `cloneBounds` / `clonePolygon` in `polygon-factory`.)
7
+ */
8
+ /** A shallow copy of `r` with `patch` applied; `r` itself is never changed. */
9
+ export declare function withRegionPatch(r: Region, patch: Partial<Region>): Region;
10
+ /** `r` tagged with slice `z`: itself when it already is, else a copy. */
11
+ export declare function withRegionZ(r: Region, z: number): Region;
12
+ /**
13
+ * True when two regions have the same geometry: equal rectangles, or polygons
14
+ * (each part of a multi-polygon, in order) with the same vertices, open/closed
15
+ * state and holes. Bézier handles, labels and colours are not compared. Mixed
16
+ * kinds are never equal.
17
+ */
18
+ export declare function regionsEqual(a: Region, b: Region): boolean;
19
+ /** Same vertices, open/closed state and holes (see {@link regionsEqual}). */
20
+ export declare function polygonsEqual(pa: Polygon, pb: Polygon): boolean;
@@ -0,0 +1,57 @@
1
+ import { Region } from './region';
2
+ /**
3
+ * Parse a GeoJSON FeatureCollection string (QuPath-compatible) into regions.
4
+ * Throws on invalid JSON, a missing `features` key, or a feature without
5
+ * coordinates.
6
+ */
7
+ export declare function regionsFromGeoJson(geoJsonStr: string): Region[];
8
+ /** A feature's `classification`: QuPath's `{name, color}`, or a bare name. */
9
+ type Classification = string | {
10
+ name?: string;
11
+ color?: number[];
12
+ };
13
+ /** The parts of a GeoJSON feature the reader looks at, JIT's bezier extras
14
+ * included. Parsed from a file, so nothing here is guaranteed. */
15
+ export interface GeoJsonFeature {
16
+ id?: string | number;
17
+ geometry: {
18
+ type?: string;
19
+ coordinates?: unknown;
20
+ plane?: {
21
+ z?: number;
22
+ };
23
+ };
24
+ properties?: {
25
+ id?: string | number;
26
+ classification?: Classification;
27
+ isBezier?: boolean;
28
+ bezierAnchors?: number[][];
29
+ bezierHandlesIn?: number[][];
30
+ bezierHandlesOut?: number[][];
31
+ holes?: number[][][];
32
+ holeHandlesIn?: number[][][];
33
+ holeHandlesOut?: number[][][];
34
+ };
35
+ }
36
+ /**
37
+ * One GeoJSON feature as the region `shape<idx>`. Throws on a feature without coordinates.
38
+ * The feature's id becomes {@link Region.sourceId} (or `sourceId`, when given: a region source's
39
+ * id for the feature) and its other properties {@link Region.properties}.
40
+ */
41
+ export declare function regionFromGeoJsonFeature(feature: GeoJsonFeature, idx: number, sourceId?: string): Region;
42
+ /**
43
+ * Serialise regions as a GeoJSON FeatureCollection string (QuPath-compatible),
44
+ * leaving out intensity-profile lines.
45
+ */
46
+ export declare function regionsToGeoJson(rois: readonly Region[]): string;
47
+ /**
48
+ * A region as a GeoJSON feature; null for a region without bounds. Its {@link Region.sourceId}
49
+ * is the feature's `id` and its {@link Region.properties} come along beside the classification.
50
+ */
51
+ export declare function featureFromRegion(roi: Region): object | null;
52
+ /**
53
+ * Download a GeoJSON string as `<baseName without extension>.geojson`
54
+ * (`rois.geojson` without a base name).
55
+ */
56
+ export declare function downloadGeoJson(jsonString: string, baseName?: string): void;
57
+ export {};
@@ -1,9 +1,20 @@
1
1
  import { ShapeSelection } from './shape';
2
+ /**
3
+ * One annotation region — the backend-neutral model every renderer (Plotly,
4
+ * OpenSeadragon, napari-js), the RegionStore, the Region Editor and the
5
+ * GeoJSON/QuPath import/export share.
6
+ *
7
+ * Geometry lives in {@link bounds}, in full-resolution image-pixel
8
+ * coordinates (x right, y down) of slice {@link z}. A region with no bounds
9
+ * (`null`/absent) is kept but draws nowhere. Regions that arrive as JSON are
10
+ * rebuilt into class instances by {@link hydrateBounds} on their way into the
11
+ * store, so `bounds instanceof Rectangle` etc. can be relied on downstream.
12
+ */
2
13
  export declare class Region {
3
- /** Stable, unique identity for selection and equality. Minted by
4
- * PlotlyService when a region first enters the system. Never derived
5
- * from array index — name collisions across delete/add cycles must
6
- * not break PrimeNG row selection. */
14
+ /** Stable, unique identity for selection and equality. Minted by the
15
+ * RegionStore when a region first enters it. Never derived from array
16
+ * index — name collisions across delete/add cycles must not break PrimeNG
17
+ * row selection. */
7
18
  id: number;
8
19
  name: string;
9
20
  bounds?: Rectangle | Polygon | MultiPolygon | null;
@@ -24,6 +35,25 @@ export declare class Region {
24
35
  * through the store, so the marker has to travel with the data.
25
36
  */
26
37
  source?: string;
38
+ /**
39
+ * The id of the GeoJSON feature this region was read from (the feature's `id`, else
40
+ * `properties.id`; for a tiled region source, else its position in the file). Written back
41
+ * as the feature's `id` on export, so a region keeps its identity through a save. A region
42
+ * taken out of a region source for editing carries it, and the source stops drawing that
43
+ * feature while it does.
44
+ */
45
+ sourceId?: string;
46
+ /**
47
+ * A region source feature's area (image px²) while it stands in for the feature in the Region
48
+ * Editor's table: such a row has no geometry until the feature is taken.
49
+ */
50
+ sourceArea?: number;
51
+ /**
52
+ * The feature's other GeoJSON properties (everything but the ones SIV reads and writes:
53
+ * `classification`, `id` and the bézier fields), carried through untouched so a save keeps
54
+ * them, e.g. an atlas structure's acronym and id.
55
+ */
56
+ properties?: Readonly<Record<string, unknown>>;
27
57
  color?: string;
28
58
  label?: string;
29
59
  /** True when the user set this region's colour explicitly (Region Editor Color
@@ -37,6 +67,7 @@ export declare class Region {
37
67
  * or a region drawn without a slice context (jit-ui#93). */
38
68
  z: number;
39
69
  shapeColor?: string | undefined;
70
+ /** @deprecated Unused by the library; will be removed in the next minor release. */
40
71
  bytesPerPixel: number;
41
72
  /**
42
73
  * resolution is the resolution at which the region
@@ -49,13 +80,19 @@ export declare class Region {
49
80
  * at resolution = 0
50
81
  */
51
82
  resolution: number;
83
+ /** @deprecated Unused by the library; will be removed in the next minor release. */
52
84
  cropped: boolean;
85
+ /** @deprecated Unused by the library; will be removed in the next minor release. */
53
86
  tileNumber: number;
54
87
  tileCoordinates: number[] | null;
55
88
  /** True for intensity-profile line ROIs (the intensity tool's lines). These are
56
89
  * NOT annotation regions: they never appear in the Region Editor and editor
57
90
  * operations (select/save/delete) must never touch them. */
58
91
  isProfile(): boolean;
92
+ /**
93
+ * A debug string: the rectangle's box, or the polygon's SVG path.
94
+ * @deprecated Unused by the library; will be removed in the next minor release.
95
+ */
59
96
  toString(): string;
60
97
  /**
61
98
  * Returns a ShapeSelection object that can be used to
@@ -67,12 +104,23 @@ export declare class Region {
67
104
  isRectangle(bnds: any): bnds is Rectangle;
68
105
  isPolygon(bnds: any): bnds is Polygon;
69
106
  }
107
+ /** An axis-aligned box in image-pixel coordinates: (`x`, `y`) is the top-left
108
+ * (minimum) corner, `width`/`height` extend right/down. */
70
109
  export declare class Rectangle {
71
110
  x: number;
72
111
  y: number;
73
112
  width: number;
74
113
  height: number;
75
114
  }
115
+ /**
116
+ * A polygon or open polyline in image-pixel coordinates, optionally with holes
117
+ * and smoothed into a bézier curve.
118
+ *
119
+ * The vertices are stored twice and must agree: as the parallel `xpoints` /
120
+ * `ypoints` arrays (length `npoints`; the Java/JIT wire shape) and as
121
+ * `coordinates` `[x, y]` pairs (what GeoJSON export reads). The ring is
122
+ * implicitly closed — the first vertex is not repeated at the end.
123
+ */
76
124
  export declare class Polygon {
77
125
  npoints: number;
78
126
  xpoints: number[];
@@ -132,6 +180,13 @@ export declare class MultiPolygon {
132
180
  /** One or more disjoint closed polygons (each may have holes). */
133
181
  polygons: Polygon[];
134
182
  }
183
+ /**
184
+ * A region's geometry as a host may supply it: a {@link Rectangle} or
185
+ * {@link Polygon} instance, or a plain object with the same fields (e.g. parsed
186
+ * JSON, possibly with only some of them). Image-pixel coordinates. Plain objects
187
+ * become class instances via {@link hydrateBounds} when they enter the store;
188
+ * {@link Region.bounds} itself is always an instance (or a {@link MultiPolygon}).
189
+ */
135
190
  export type Bounds = Rectangle | Polygon | {
136
191
  x?: number;
137
192
  y?: number;
@@ -1,5 +1,13 @@
1
1
  import { Region } from './region';
2
2
  import { Datum, Font, Shape, ShapeLabel, ShapeLine, XAxisName, YAxisName } from 'plotly.js-dist-min';
3
+ /**
4
+ * A {@link Region} projected to a Plotly layout shape (`rect` or SVG `path`),
5
+ * carrying the region's identity, class label and file name along so it
6
+ * round-trips through Plotly's relayout. Coordinates are the plot's data
7
+ * coordinates, which are the region's image pixels. Built by
8
+ * {@link Region.getShape}; {@link getRegion} converts back (only `rect` and
9
+ * `path` shapes — anything else throws).
10
+ */
3
11
  export declare class ShapeSelection implements Shape {
4
12
  /** Stable, unique identity carried alongside the shape so it round-trips
5
13
  * through Plotly's relayout untouched. Plotly preserves unknown