@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,77 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Region } from '../models/region';
3
+ import { IRegionEditorApi } from '../contracts/region-editor-api.contract';
4
+ import { RegionIoPort } from '../contracts/ports/region-io.port';
5
+ import * as i0 from "@angular/core";
6
+ /** One slice-file's serialized regions (folder stack, jit-ui#93). */
7
+ export interface SliceGeoJson {
8
+ z: number;
9
+ geoJsonStr: string;
10
+ }
11
+ /**
12
+ * Region file I/O for the Region Editor: default file names, GeoJSON download
13
+ * (export), save to the host through {@link RegionIoPort} (with a debounced
14
+ * "file exists" check), per-slice saves for folder stacks, and reading an
15
+ * imported file. Provided by the editor; it holds no state — the editor owns
16
+ * the dialogs, the toasts and the running jobs.
17
+ */
18
+ export declare class RegionPersistenceService {
19
+ private readonly api;
20
+ private readonly io;
21
+ constructor(api: IRegionEditorApi, io: RegionIoPort);
22
+ /** The selected image's file name, if any. */
23
+ selectedFileName(): string | undefined;
24
+ /** `<image-stem>.geojson` for a server save; undefined with no image selected. */
25
+ defaultSaveName(): string | undefined;
26
+ /** `<image-stem>.geojson` (or `rois.geojson`) for a download. */
27
+ defaultExportName(): string;
28
+ /** `<image-stem>_mask.png` (or `regions_mask.png`) for a mask download. */
29
+ defaultMaskName(): string;
30
+ /** True when a save writes one geojson per slice-file (folder stack, jit-ui#93). */
31
+ savesPerSlice(): boolean;
32
+ /**
33
+ * Regions to serialize on save/export. For a single-file z-stack the store
34
+ * keeps only the current slice live, so take EVERY slice's annotations (each
35
+ * tagged with its zero-based Region.z) for one combined z-indexed geojson
36
+ * (jit-ui#93); otherwise `live` (single plane, or a folder stack whose slices
37
+ * save to their own files).
38
+ */
39
+ regionsForSave(live: Region[]): Region[];
40
+ /**
41
+ * Whether each file name in `names` already exists on the host, debounced
42
+ * 400 ms; a newer name supersedes an in-flight check. A failed check reads as
43
+ * "does not exist" and later checks keep working.
44
+ */
45
+ fileExists(names: Observable<string>): Observable<boolean>;
46
+ /**
47
+ * `regions` as GeoJSON, merged with the image's region source when it has one (the source's
48
+ * features that were not taken or deleted, then `regions`); `slice` names a folder stack's
49
+ * slice.
50
+ */
51
+ serialize(regions: Region[], slice?: number): Promise<string>;
52
+ /** Download `regions` (with the region source behind them) as a GeoJSON file named `filename`. */
53
+ download(regions: Region[], filename: string): Promise<void>;
54
+ /**
55
+ * Save `regions()` to the host as `filename`. Serializing is deferred one
56
+ * tick (so a progress indicator paints before a large synchronous
57
+ * serialize); unsubscribing before then cancels the save entirely, and after
58
+ * it cancels the upload. A serialize failure is an error, like an upload one.
59
+ */
60
+ save(regions: () => Region[], filename: string): Observable<void>;
61
+ /**
62
+ * A folder stack's regions as one geojson per slice-file (jit-ui#93), each
63
+ * serialized on the default plane (z=0): every slice-file is one plane, and
64
+ * the loader re-derives the slice index from the file's position. Slices
65
+ * cleared since load are included (empty) so their file is overwritten, and so are slices
66
+ * whose region source lost features; a slice with a region source keeps the features still
67
+ * in it.
68
+ */
69
+ sliceGeoJsons(): Promise<SliceGeoJson[]>;
70
+ /** Write per-slice geojsons through the host port. */
71
+ saveSlices(slices: SliceGeoJson[]): Observable<void>;
72
+ /** Read the file chosen in a file input's change event as text, then call
73
+ * `onText`. No-op when no file was chosen. */
74
+ readChosenFile(event: Event, onText: (text: string) => void): void;
75
+ static ɵfac: i0.ɵɵFactoryDeclaration<RegionPersistenceService, never>;
76
+ static ɵprov: i0.ɵɵInjectableDeclaration<RegionPersistenceService>;
77
+ }
@@ -0,0 +1,89 @@
1
+ import { EventEmitter, OnChanges } from '@angular/core';
2
+ import { Region } from '../../models/region';
3
+ import { PresetSet } from '../../models/class-preset';
4
+ import { PixelSize } from '../region-metrics';
5
+ import * as i0 from "@angular/core";
6
+ /** A page change from the paginator. */
7
+ export interface RegionPage {
8
+ first: number;
9
+ rows: number;
10
+ }
11
+ /**
12
+ * The Region Editor's regions table and paginator: one page of rows with a
13
+ * class dropdown (or an inline label editor), the area, and a delete button.
14
+ * Presentational and OnPush: the editor owns the rows, the selection, the
15
+ * paging and the label drafts, and applies every edit through its one
16
+ * copy-on-write commit path — the table never changes a {@link Region}.
17
+ */
18
+ export declare class RegionTableComponent implements OnChanges {
19
+ /** The rows on the current page. */
20
+ page: Region[];
21
+ /** Total number of rows (all pages). */
22
+ total: number;
23
+ /** Index of the page's first row across all pages. */
24
+ first: number;
25
+ /** Rows per page. */
26
+ rows: number;
27
+ /** The paginator's rows-per-page choices. */
28
+ rowsPerPageOptions: number[];
29
+ /** Ctrl/Cmd-click toggles a row (PrimeNG metaKeySelection). */
30
+ metaKey: boolean;
31
+ /** The selected rows. */
32
+ selection: Region[];
33
+ /** The table's selection changed (any row click). */
34
+ selectionChange: EventEmitter<Region[]>;
35
+ /** A row was selected or unselected (after {@link selectionChange}). */
36
+ rowSelect: EventEmitter<void>;
37
+ /** Classes for the per-row dropdown, and their colours. */
38
+ presetSet: PresetSet;
39
+ /** Swatch colour of an unlabelled row. */
40
+ defaultColor: string;
41
+ /** Pixel size for the area column. */
42
+ mpp: PixelSize;
43
+ /**
44
+ * In a volume view, each class's volume over the whole stack (px² × slices; null while it is
45
+ * computed): the column shows the row's class volume instead of its area. Null: areas.
46
+ */
47
+ volumes: ReadonlyMap<string, number | null> | null;
48
+ /** Rows whose label is being edited → the typed draft. A new map per start/stop. */
49
+ labelDrafts: Map<Region, string>;
50
+ /** A row's pencil: start editing its label. */
51
+ labelEditStart: EventEmitter<Region>;
52
+ /** The inline label editor's text changed. */
53
+ labelDraftChange: EventEmitter<{
54
+ region: Region;
55
+ value: string;
56
+ }>;
57
+ /** The inline label editor closed: Enter commits, Escape / close cancels. */
58
+ labelEditStop: EventEmitter<{
59
+ region: Region;
60
+ commit: boolean;
61
+ }>;
62
+ /** A class was picked in a row's dropdown. */
63
+ classPick: EventEmitter<{
64
+ region: Region;
65
+ name: string;
66
+ }>;
67
+ /** A row's trash button: the row's index across all pages. */
68
+ deleteRow: EventEmitter<number>;
69
+ /** The paginator moved or changed its page size. */
70
+ pageChange: EventEmitter<RegionPage>;
71
+ /** Per row of {@link page}: its class swatch colour and formatted area (or class volume),
72
+ * derived when an input changes instead of per check (the area walks the region's geometry). */
73
+ protected rowView: Map<Region, {
74
+ color: string;
75
+ measure: string;
76
+ }>;
77
+ ngOnChanges(): void;
78
+ private measure;
79
+ private classColor;
80
+ private area;
81
+ protected startEdit(region: Region, event: Event): void;
82
+ protected stopEdit(region: Region, commit: boolean, event: Event): void;
83
+ protected onPage(event: {
84
+ first?: number;
85
+ rows?: number;
86
+ }): void;
87
+ static ɵfac: i0.ɵɵFactoryDeclaration<RegionTableComponent, never>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<RegionTableComponent, "region-table", never, { "page": { "alias": "page"; "required": false; }; "total": { "alias": "total"; "required": false; }; "first": { "alias": "first"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; }; "metaKey": { "alias": "metaKey"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "presetSet": { "alias": "presetSet"; "required": false; }; "defaultColor": { "alias": "defaultColor"; "required": false; }; "mpp": { "alias": "mpp"; "required": false; }; "volumes": { "alias": "volumes"; "required": false; }; "labelDrafts": { "alias": "labelDrafts"; "required": false; }; }, { "selectionChange": "selectionChange"; "rowSelect": "rowSelect"; "labelEditStart": "labelEditStart"; "labelDraftChange": "labelDraftChange"; "labelEditStop": "labelEditStop"; "classPick": "classPick"; "deleteRow": "deleteRow"; "pageChange": "pageChange"; }, never, never, true, never>;
89
+ }
@@ -0,0 +1,36 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { MaskMode } from '../mask-export.service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * The Region Editor's "Save mask" dialog: filename + mask type while idle, a
6
+ * progress bar (rasterize, then encode) with a Cancel button while the export
7
+ * runs. Presentational — the editor owns the state and the export
8
+ * ({@link MaskExportService}); the dialog only reports edits and clicks.
9
+ */
10
+ export declare class SaveMaskDialogComponent {
11
+ /** The dialog is open. */
12
+ visible: boolean;
13
+ /** The dialog was closed (`false`); two-way with {@link visible}. */
14
+ visibleChange: EventEmitter<boolean>;
15
+ /** The PNG filename. */
16
+ filename: string;
17
+ /** The filename was edited; two-way with {@link filename}. */
18
+ filenameChange: EventEmitter<string>;
19
+ /** The mask type: binary, or one label value per class. */
20
+ mode: MaskMode;
21
+ /** The mask type was changed; two-way with {@link mode}. */
22
+ modeChange: EventEmitter<MaskMode>;
23
+ /** True while the export runs (the form is replaced by progress). */
24
+ busy: boolean;
25
+ /** 0–100 rasterization progress. */
26
+ progress: number;
27
+ /** True once rasterizing is done and the PNG is being encoded. */
28
+ encoding: boolean;
29
+ /** Download clicked with a non-blank filename. */
30
+ confirm: EventEmitter<void>;
31
+ /** Cancel clicked while the export runs. */
32
+ cancelExport: EventEmitter<void>;
33
+ protected close(): void;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<SaveMaskDialogComponent, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<SaveMaskDialogComponent, "region-save-mask-dialog", never, { "visible": { "alias": "visible"; "required": false; }; "filename": { "alias": "filename"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "busy": { "alias": "busy"; "required": false; }; "progress": { "alias": "progress"; "required": false; }; "encoding": { "alias": "encoding"; "required": false; }; }, { "visibleChange": "visibleChange"; "filenameChange": "filenameChange"; "modeChange": "modeChange"; "confirm": "confirm"; "cancelExport": "cancelExport"; }, never, never, true, never>;
36
+ }
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * A GeoJSON filename dialog, used by the Region Editor for both "Save Regions
5
+ * As" (server save: overwrite warning, progress + Cancel while busy) and
6
+ * "Export Regions" (download). Presentational — the editor owns the state and
7
+ * the I/O ({@link RegionPersistenceService}).
8
+ */
9
+ export declare class SaveRegionsDialogComponent {
10
+ /** The dialog title. */
11
+ header: string;
12
+ /** The confirm button's label. */
13
+ confirmLabel: string;
14
+ /** The confirm button's PrimeIcons class. */
15
+ confirmIcon: string;
16
+ /** id of the filename input (unique per dialog instance). */
17
+ inputId: string;
18
+ /** The dialog is open. */
19
+ visible: boolean;
20
+ /** The dialog was closed (`false`); two-way with {@link visible}. */
21
+ visibleChange: EventEmitter<boolean>;
22
+ /** The GeoJSON filename. */
23
+ filename: string;
24
+ /** The filename was edited; two-way with {@link filename}. */
25
+ filenameChange: EventEmitter<string>;
26
+ /** Shows the "will be overwritten" warning. */
27
+ fileExists: boolean;
28
+ /** True while the save runs (the form is replaced by progress). */
29
+ busy: boolean;
30
+ /** Save/Export clicked with a non-blank filename. */
31
+ confirm: EventEmitter<void>;
32
+ /** Cancel clicked while the save runs. */
33
+ cancelSave: EventEmitter<void>;
34
+ protected close(): void;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<SaveRegionsDialogComponent, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<SaveRegionsDialogComponent, "region-save-regions-dialog", never, { "header": { "alias": "header"; "required": false; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; }; "confirmIcon": { "alias": "confirmIcon"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "filename": { "alias": "filename"; "required": false; }; "fileExists": { "alias": "fileExists"; "required": false; }; "busy": { "alias": "busy"; "required": false; }; }, { "visibleChange": "visibleChange"; "filenameChange": "filenameChange"; "confirm": "confirm"; "cancelSave": "cancelSave"; }, never, never, true, never>;
37
+ }
@@ -1,11 +1,10 @@
1
1
  import { Region } from './models/region';
2
- import { WandService } from './toolbar/wand/wand.service';
3
2
  import * as i0 from "@angular/core";
4
3
  /**
5
4
  * Pure (DOM-free) region set-operations — merge / inverse / ungroup (jit-ui#85).
6
5
  *
7
6
  * Raster-based, reusing the wand/brush mask pipeline
8
- * ({@link WandService.rasterizePolygon} → {@link WandService.maskToPolygons}),
7
+ * ({@link rasterizePolygon} → {@link maskToPolygons}, the pure `geometry/` modules),
9
8
  * so "select + merge" yields the same geometry as brushing regions together:
10
9
  * one engine, one set of behaviours, holes + multi-part results for free.
11
10
  *
@@ -15,7 +14,6 @@ import * as i0 from "@angular/core";
15
14
  * image pixels throughout.
16
15
  */
17
16
  export declare class RegionOpsService {
18
- private wand;
19
17
  /**
20
18
  * Largest raster (in pixels) a region set-op will allocate on the main thread.
21
19
  * Selections whose clipped bbox exceeds this are rasterized at a proportional
@@ -25,7 +23,6 @@ export declare class RegionOpsService {
25
23
  * large-extent selections (small selections keep full resolution).
26
24
  */
27
25
  private static readonly MAX_OP_PIXELS;
28
- constructor(wand: WandService);
29
26
  /**
30
27
  * Geometric union of `regions` into a single region: a {@link Polygon} when
31
28
  * the union is one connected piece, a {@link MultiPolygon} when it stays
@@ -51,8 +48,6 @@ export declare class RegionOpsService {
51
48
  * no full-image buffer is ever allocated.
52
49
  */
53
50
  inverse(regions: Region[], imageWidth: number, imageHeight: number): Region | null;
54
- /** A closed straight-edged Polygon from parallel coord arrays. */
55
- private ringPolygon;
56
51
  /**
57
52
  * Split a region into its disjoint parts — one region per {@link MultiPolygon}
58
53
  * part. A single connected {@link Polygon}/{@link Rectangle} has nothing to
@@ -86,7 +81,6 @@ export declare class RegionOpsService {
86
81
  * inheriting colour/label from `proto`. Null when there are no parts. */
87
82
  private regionFromParts;
88
83
  private makeRegion;
89
- private clonePolygon;
90
84
  static ɵfac: i0.ɵɵFactoryDeclaration<RegionOpsService, never>;
91
85
  static ɵprov: i0.ɵɵInjectableDeclaration<RegionOpsService>;
92
86
  }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Region-overlay geometry shared by the OpenSeadragon and napari overlays
3
+ * (review NAPARI-BOUNDARY-13, OSD-PLOTLY-16).
4
+ *
5
+ * Both overlays used to carry their own copy of this code, and the copies had
6
+ * drifted: napari's hit test ignored holes, multi-part regions and open
7
+ * polylines, its bézier path drew straight edges without stored handles, and it
8
+ * rendered nothing for a MultiPolygon. Everything here is pure — no DOM, no
9
+ * viewer — so the overlays are left with gestures and DOM.
10
+ *
11
+ * Coordinates: regions are in WORLD (image-pixel) space. Functions that need a
12
+ * screen-space tolerance (an open polyline's hit width, a handle's grab
13
+ * radius) take a {@link ToScreen} projection and measure in its pixels, so they
14
+ * stay usable at any zoom. Point-in-ring and ring bounds come from
15
+ * `geometry/ring`.
16
+ */
17
+ import { Polygon, Region } from '../models/region';
18
+ import { AnchorHandle } from '../models/bezier';
19
+ /** World → screen projection, e.g. image → element pixels. */
20
+ export type ToScreen = (x: number, y: number) => readonly [number, number];
21
+ /** The identity projection: path data stays in world coordinates. */
22
+ export declare const WORLD: ToScreen;
23
+ /** An axis-aligned box (inclusive corners). */
24
+ export interface BBox {
25
+ x0: number;
26
+ y0: number;
27
+ x1: number;
28
+ y1: number;
29
+ }
30
+ /** Screen-px distance from an open polyline within which a point is on it. */
31
+ export declare const OPEN_PATH_TOL_PX = 6;
32
+ type AnyBounds = Region['bounds'] | Record<string, unknown>;
33
+ /**
34
+ * Discriminate a region's bounds. Class instances first; plain objects with the
35
+ * right fields too, so a region that skipped the store's hydration (JSON from a
36
+ * host) still draws and hit-tests (jit-ui#124).
37
+ */
38
+ export declare function boundsKind(b: AnyBounds | null | undefined): 'rect' | 'poly' | 'multi' | null;
39
+ /** A polygon's ring as parallel arrays: the exterior for `ring` -1, else hole `ring`. */
40
+ export declare function ringOf(p: Polygon, ring: number): {
41
+ xs: number[];
42
+ ys: number[];
43
+ };
44
+ /**
45
+ * A polygon ring's bézier handles (absolute, world space): the stored offsets
46
+ * when present, else the Catmull-Rom default the curve is drawn with. Holes are
47
+ * always closed.
48
+ */
49
+ export declare function ringHandles(p: Polygon, ring: number): AnchorHandle[];
50
+ /**
51
+ * A region's axis-aligned bounding box in world coordinates (every part of a
52
+ * multi-polygon), or null for empty geometry. Loops rather than
53
+ * `Math.min(...spread)`, which throws on a large imported annotation.
54
+ */
55
+ export declare function regionBBox(region: Pick<Region, 'bounds'>): BBox | null;
56
+ /** Shortest distance from (px,py) to the segment (ax,ay)–(bx,by), in the units given. */
57
+ export declare function segmentDistance(px: number, py: number, ax: number, ay: number, bx: number, by: number): number;
58
+ /** Options for {@link regionContains}. */
59
+ export interface ContainsOptions {
60
+ /** Projection the open-polyline tolerance is measured in. Default: world units. */
61
+ toScreen?: ToScreen;
62
+ /** Open-polyline hit width, in `toScreen` pixels. Default {@link OPEN_PATH_TOL_PX}. */
63
+ tolPx?: number;
64
+ }
65
+ /**
66
+ * Whether world point (x, y) lands on `region`: a rectangle by its (inclusive)
67
+ * box; a closed polygon by its exterior minus its holes; a multi-polygon by any
68
+ * part (minus that part's holes); an open polyline — which has no interior —
69
+ * within `tolPx` screen pixels of its line.
70
+ */
71
+ export declare function regionContains(region: Pick<Region, 'bounds'>, x: number, y: number, opts?: ContainsOptions): boolean;
72
+ /** Index of the topmost (last) region containing (x, y), or -1. */
73
+ export declare function topmostRegionAt<R extends Pick<Region, 'bounds'>>(regions: ReadonlyArray<R>, x: number, y: number, opts?: ContainsOptions & {
74
+ skip?: (r: R) => boolean;
75
+ }): number;
76
+ /**
77
+ * Indices of every region whose bounding box intersects the world box
78
+ * [x0,y0]–[x1,y1] (rubber-band selection). `skipProfiles` leaves out
79
+ * intensity-profile lines, `skip` any other region.
80
+ */
81
+ export declare function regionsInRect(regions: ReadonlyArray<Region>, x0: number, y0: number, x1: number, y1: number, opts?: {
82
+ skipProfiles?: boolean;
83
+ skip?: (r: Region) => boolean;
84
+ }): number[];
85
+ /** The handle offsets a bézier ring is drawn with; absent arrays fall back to the default. */
86
+ export interface RingHandleOffsets {
87
+ in?: number[][];
88
+ out?: number[][];
89
+ }
90
+ /**
91
+ * SVG path `d` for one ring or polyline, projected through `toScreen`.
92
+ * Straight edges without `handles`; with `handles`, cubic segments through the
93
+ * stored offsets, or the Catmull-Rom default when they are missing or do not
94
+ * match the ring (via `resolveHandles`). Closed rings end in `Z`. '' for fewer
95
+ * than two vertices.
96
+ */
97
+ export declare function ringPathD(xs: number[], ys: number[], closed: boolean, toScreen: ToScreen, handles?: RingHandleOffsets): string;
98
+ /**
99
+ * SVG path `d` for a whole region: a rectangle's four corners; a polygon's
100
+ * exterior (curved for a bézier region) followed by one subpath per hole
101
+ * (curved too for a bézier donut); a multi-polygon's parts with their holes.
102
+ * Holes need `fill-rule: evenodd` (see {@link regionHasHoles}).
103
+ */
104
+ export declare function regionPathD(region: Pick<Region, 'bounds'>, toScreen?: ToScreen): string;
105
+ /** True when the region draws as several subpaths that need `fill-rule: evenodd`. */
106
+ export declare function regionHasHoles(region: Pick<Region, 'bounds'>): boolean;
107
+ /** What a pointer grabbed on the selected region (see {@link hitHandle}). */
108
+ export type HandleHit =
109
+ /** A rectangle corner; `anchor` is the opposite (fixed) corner for a resize. */
110
+ {
111
+ kind: 'corner';
112
+ index: number;
113
+ anchor: [number, number];
114
+ }
115
+ /** A polygon vertex: `ring` -1 for the exterior, else the hole index. */
116
+ | {
117
+ kind: 'vertex';
118
+ ring: number;
119
+ index: number;
120
+ }
121
+ /** A bézier control point of vertex `index` on `ring`. */
122
+ | {
123
+ kind: 'bezier';
124
+ ring: number;
125
+ index: number;
126
+ side: 'in' | 'out';
127
+ };
128
+ /**
129
+ * The handle of `region` under screen point (sx, sy) within `radius` screen
130
+ * pixels, or null. Rectangles have four corners. Polygons: every bézier
131
+ * control point first (exterior, then each hole; they sit off the anchors, so
132
+ * they must win), then the vertices (exterior, then each hole). Pass
133
+ * `{ bezier: false }` to test vertices only.
134
+ */
135
+ export declare function hitHandle(region: Pick<Region, 'bounds'>, sx: number, sy: number, toScreen: ToScreen, radius: number, opts?: {
136
+ bezier?: boolean;
137
+ }): HandleHit | null;
138
+ /**
139
+ * The polygon edge nearest screen point (sx, sy), across the exterior and every
140
+ * hole: its ring (-1 = exterior), the index of its start vertex, and the
141
+ * distance in screen pixels. Null when the region is not a polygon.
142
+ */
143
+ export declare function nearestEdge(region: Pick<Region, 'bounds'>, sx: number, sy: number, toScreen: ToScreen): {
144
+ ring: number;
145
+ segIndex: number;
146
+ dist: number;
147
+ } | null;
148
+ /**
149
+ * The polygon vertex nearest world point (x, y), across the exterior and every
150
+ * hole, with its distance in world units. Null when the region is not a
151
+ * polygon or has no vertices.
152
+ */
153
+ export declare function nearestVertex(region: Pick<Region, 'bounds'>, x: number, y: number): {
154
+ ring: number;
155
+ index: number;
156
+ dist: number;
157
+ } | null;
158
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Screen-space hit testing for a selected rectangle's move/resize zones, and the
3
+ * resize those zones drive. Pure; shared by the SVG region overlays. (Vertex,
4
+ * bezier-handle and edge hits on polygons live in `region-geometry.ts`:
5
+ * `hitHandle` and `nearestEdge`.)
6
+ */
7
+ /** Move/resize zones on the selected rectangle. */
8
+ export type EditZone = 'move' | 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
9
+ /** The cursor that advertises each zone. */
10
+ export declare const ZONE_CURSOR: Readonly<Record<EditZone, string>>;
11
+ /** Screen-pixel tolerance for grabbing an edge, corner or vertex handle. */
12
+ export declare const EDIT_TOL_PX = 8;
13
+ /** A screen-space box: left, top, right, bottom. */
14
+ export interface ScreenBox {
15
+ x0: number;
16
+ y0: number;
17
+ x1: number;
18
+ y1: number;
19
+ }
20
+ /**
21
+ * Classify a screen point against a screen-space rectangle: a corner, an edge
22
+ * (within `tolPx`), the body, or null when outside (beyond the tolerance).
23
+ */
24
+ export declare function rectZone(px: number, py: number, box: ScreenBox, tolPx?: number): EditZone | null;
25
+ /** An image-space rectangle. */
26
+ export interface RectBox {
27
+ x: number;
28
+ y: number;
29
+ width: number;
30
+ height: number;
31
+ }
32
+ /**
33
+ * The rectangle `orig` moved or resized through `zone` by the total drag
34
+ * (`dx`, `dy`), normalised (a drag past the opposite edge flips it) and rounded
35
+ * to whole pixels. Absolute from the gesture-start box, so applying it on every
36
+ * frame is idempotent.
37
+ */
38
+ export declare function resizeRect(orig: RectBox, zone: EditZone, dx: number, dy: number): RectBox;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Draws a region source (see `region-source`) under the editable regions, at the level of detail
3
+ * the zoom calls for, from the tiles in view only — the way the spatial views draw cell outlines.
4
+ * Shared by the OpenSeadragon and napari overlays: both hand it their svg and their world → svg
5
+ * camera affine, as they do their {@link SvgRegionRenderer}.
6
+ *
7
+ * One `<path>` per colour (every ring of every feature of that colour, even-odd), in world
8
+ * coordinates inside one transformed group, so a camera move rewrites one attribute. The tiles in
9
+ * view are re-planned once the camera settles; while a finer tile loads its coarser parent is
10
+ * drawn instead, so zooming in sharpens the outlines rather than blanking them. Features taken
11
+ * into the working set (selected, edited) or deleted are not drawn: the region renderer draws the
12
+ * taken ones as ordinary regions.
13
+ *
14
+ * It also answers what is under a point, from the features drawn, for the overlays' selection.
15
+ */
16
+ import type { Observable } from 'rxjs';
17
+ import { RegionSourceView } from '../region-source/region-source';
18
+ import { TileFeature } from '../region-source/region-tiles';
19
+ import { Affine } from './svg-region-renderer';
20
+ /** Wait this long after the last camera change before planning tiles (ms). */
21
+ export declare const SOURCE_REPLAN_MS = 90;
22
+ /** The view is padded by this fraction on each side, so a short pan finds its tiles loaded. */
23
+ export declare const SOURCE_VIEW_MARGIN = 0.25;
24
+ /** At most this many tiles in view. */
25
+ export declare const SOURCE_MAX_TILES = 256;
26
+ /** A rubber band takes at most this many source features into the working set. */
27
+ export declare const SOURCE_MARQUEE_LIMIT = 2000;
28
+ /** The svg size (local px), for the part of the world in view. */
29
+ export type SvgSize = () => {
30
+ width: number;
31
+ height: number;
32
+ };
33
+ export declare class RegionSourceLayer {
34
+ private readonly svg;
35
+ private readonly size;
36
+ private readonly group;
37
+ private camera;
38
+ /** Class labels inside the features, in screen space over the outlines. */
39
+ private readonly labelLayer;
40
+ /** Class name → depth in the source's class hierarchy (parents draw under their children). */
41
+ private depthOf;
42
+ /** Class name → its parent class in the source's class hierarchy. */
43
+ private parentOf;
44
+ private view;
45
+ private visible;
46
+ private readonly sub;
47
+ /** Loaded tiles of the current source and plane, by id, least recently used first. */
48
+ private readonly tiles;
49
+ /** The tiles the view wants now. */
50
+ private wanted;
51
+ /** The features drawn, by id (each at the finest level loaded). */
52
+ private drawn;
53
+ private loading;
54
+ private replanTimer;
55
+ private drawFrame;
56
+ constructor(svg: SVGSVGElement, view$: Observable<RegionSourceView | null>, size?: SvgSize);
57
+ /** Follow the camera: rewrite the transform now, re-plan the tiles once it settles. */
58
+ setCamera(affine: Affine): void;
59
+ /** Show or hide the source with the regions. */
60
+ setVisible(visible: boolean): void;
61
+ /**
62
+ * The source feature under world point (x, y) — inside an area, or within `tolerancePx`
63
+ * screen pixels of a polyline — from the features drawn; the innermost of nested ones.
64
+ */
65
+ featureAt(x: number, y: number, tolerancePx?: number): TileFeature | null;
66
+ /** The drawn source features whose box meets the world box (the rubber band's rule). */
67
+ featuresInRect(x0: number, y0: number, x1: number, y1: number): TileFeature[];
68
+ destroy(): void;
69
+ private setView;
70
+ /** The layer is the svg's first child (under the regions) while it shows a source. */
71
+ private attach;
72
+ private applyCamera;
73
+ /** Screen px per world unit. */
74
+ private scale;
75
+ /** The world box in view, padded by the margin; null when the svg has no size yet. */
76
+ private viewRect;
77
+ /** Work out the tiles the view needs, draw what is loaded, and load the rest. */
78
+ private replan;
79
+ private keep;
80
+ private scheduleDraw;
81
+ /**
82
+ * Rebuild the paths from the wanted tiles that are loaded, a missing tile's nearest loaded
83
+ * ancestor standing in for it; each feature once, at the finest level loaded.
84
+ */
85
+ private draw;
86
+ /**
87
+ * The drawn features as paths: one per colour when outlined; filled, in paint order — parents
88
+ * (by the class hierarchy) and then larger features first, so what lies inside paints over
89
+ * them — one path per run of a colour.
90
+ */
91
+ private runs;
92
+ /** Class labels inside the drawn features (each part where it fits), when labels are on. */
93
+ private drawLabels;
94
+ /** The loaded tile for `key`, else its nearest loaded coarser ancestor. */
95
+ private loadedOrAncestor;
96
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * How regions are drawn, shared by the OpenSeadragon and napari overlays and the region-source
3
+ * layer, so a feature looks the same before and after it is taken into the regions.
4
+ *
5
+ * Two looks: **outlines** (the default — each region stroked in its colour, filled only while
6
+ * selected) and **filled**, an atlas's look (each region filled in its colour, with thin outlines,
7
+ * the selection in a highlight colour, labels centred inside each part).
8
+ */
9
+ import { Region } from '../models/region';
10
+ import type { Project, ScreenLayer } from './svg-region-renderer';
11
+ /** The region look (see the module doc). */
12
+ export interface RegionStyle {
13
+ /** Fill each region at this opacity; 0 draws outlines only. */
14
+ fillOpacity: number;
15
+ /** Outline colour of a filled region; null: its own colour. */
16
+ stroke: string | null;
17
+ /** Outline width of a filled region, screen px; null: 1. */
18
+ strokeWidth: number | null;
19
+ /** Fill colour of a selected filled region; null: {@link DEFAULT_HIGHLIGHT}. */
20
+ highlight: string | null;
21
+ }
22
+ export declare const DEFAULT_REGION_STYLE: RegionStyle;
23
+ /** A selected region's fill in the filled look, unless the style names one (the Allen atlas's). */
24
+ export declare const DEFAULT_HIGHLIGHT = "#a020f0";
25
+ /** Whether `style` is the filled look. */
26
+ export declare function isFilled(style: RegionStyle): boolean;
27
+ /** The paint of one region shape. */
28
+ export interface ShapePaint {
29
+ fill: string;
30
+ fillOpacity: number;
31
+ stroke: string;
32
+ strokeWidth: number;
33
+ }
34
+ /** The paint of a region of colour `color`, selected or not, in `style`. */
35
+ export declare function shapePaint(color: string, selected: boolean, style?: RegionStyle): ShapePaint;
36
+ /** Set `paint` on an SVG shape. */
37
+ export declare function applyPaint(el: SVGElement, paint: ShapePaint): void;
38
+ /** A point to label a part at, and the room around it (image px). */
39
+ export interface LabelSpot {
40
+ x: number;
41
+ y: number;
42
+ room: number;
43
+ }
44
+ /** Where to label `region`: each part's pole of inaccessibility (a rectangle's centre). */
45
+ export declare function regionLabelSpots(region: Region): LabelSpot[];
46
+ /**
47
+ * A class label centred at `spot`, shown only while it fits: the room around the spot, on screen,
48
+ * at least half the text's width (and a few pixels). Re-checked on every camera move.
49
+ */
50
+ export declare function placeInsideLabel(layer: ScreenLayer, text: string, spot: LabelSpot, color?: string): SVGTextElement;
51
+ /** Whether a label `halfWidth` px wide fits around `spot` through `project`. */
52
+ export declare function labelFits(project: Project, spot: LabelSpot, halfWidth: number): boolean;