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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/README.md +201 -460
  2. package/esm2022/index.mjs +34 -15
  3. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
  4. package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
  5. package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
  7. package/esm2022/lib/contracts/color.mjs +60 -0
  8. package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
  9. package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
  10. package/esm2022/lib/contracts/display-types.mjs +11 -1
  11. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  12. package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
  13. package/esm2022/lib/contracts/intensity.mjs +48 -5
  14. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  15. package/esm2022/lib/contracts/plot-type.mjs +134 -17
  16. package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
  17. package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
  18. package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
  19. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
  20. package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
  21. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  22. package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
  23. package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
  24. package/esm2022/lib/contracts/sam.contract.mjs +1 -1
  25. package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
  26. package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
  27. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  28. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
  29. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  30. package/esm2022/lib/contracts/viz-config.mjs +2 -1
  31. package/esm2022/lib/geometry/contour.mjs +63 -0
  32. package/esm2022/lib/geometry/loft.mjs +128 -0
  33. package/esm2022/lib/geometry/polylabel.mjs +156 -0
  34. package/esm2022/lib/geometry/raster.mjs +98 -0
  35. package/esm2022/lib/geometry/reconstruct.mjs +315 -0
  36. package/esm2022/lib/geometry/reslice-image.mjs +57 -0
  37. package/esm2022/lib/geometry/ring.mjs +201 -0
  38. package/esm2022/lib/geometry/section.mjs +215 -0
  39. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
  40. package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
  41. package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
  42. package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
  43. package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
  44. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
  45. package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +12 -9
  46. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +83 -0
  47. package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
  48. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +180 -591
  49. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
  50. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
  51. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
  52. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
  53. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +270 -0
  54. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
  55. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
  56. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
  57. package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
  58. package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
  59. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +347 -0
  60. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +427 -4207
  61. package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
  62. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +550 -0
  63. package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
  64. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
  65. package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
  66. package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
  67. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +194 -0
  68. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
  69. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
  70. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
  71. package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
  72. package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
  73. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
  74. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
  75. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
  76. package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
  77. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
  78. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
  79. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
  80. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
  81. package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
  82. package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
  83. package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
  84. package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
  85. package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
  86. package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +164 -0
  87. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +213 -716
  88. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
  89. package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
  90. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
  91. package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
  92. package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
  93. package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
  94. package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
  95. package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
  96. package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
  97. package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
  98. package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
  99. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
  100. package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
  101. package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
  102. package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
  103. package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
  104. package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
  105. package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
  106. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
  107. package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
  108. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
  109. package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
  110. package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
  111. package/esm2022/lib/implementations/region-centroids.mjs +47 -0
  112. package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
  113. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
  114. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
  115. package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
  116. package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
  117. package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
  118. package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
  119. package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
  120. package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
  121. package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
  122. package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
  123. package/esm2022/lib/models/bezier.mjs +1 -11
  124. package/esm2022/lib/models/class-preset.mjs +41 -3
  125. package/esm2022/lib/models/geometry.mjs +27 -164
  126. package/esm2022/lib/models/polygon-edit.mjs +254 -0
  127. package/esm2022/lib/models/polygon-factory.mjs +134 -0
  128. package/esm2022/lib/models/region-clone.mjs +68 -0
  129. package/esm2022/lib/models/region-geojson.mjs +411 -0
  130. package/esm2022/lib/models/region.mjs +34 -33
  131. package/esm2022/lib/models/shape.mjs +18 -16
  132. package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
  133. package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
  134. package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
  135. package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
  136. package/esm2022/lib/plot.utilities.mjs +296 -473
  137. package/esm2022/lib/processing/image-crop.mjs +1 -1
  138. package/esm2022/lib/processing/processing-image.mjs +28 -15
  139. package/esm2022/lib/provide-visualization.mjs +40 -14
  140. package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
  141. package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
  142. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +163 -0
  143. package/esm2022/lib/region-editor/file-stem.mjs +13 -0
  144. package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
  145. package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
  146. package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
  147. package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
  148. package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
  149. package/esm2022/lib/region-editor/region-editor.component.mjs +896 -660
  150. package/esm2022/lib/region-editor/region-metrics.mjs +86 -0
  151. package/esm2022/lib/region-editor/region-persistence.service.mjs +160 -0
  152. package/esm2022/lib/region-editor/region-table/region-table.component.mjs +169 -0
  153. package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
  154. package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
  155. package/esm2022/lib/region-ops.service.mjs +28 -70
  156. package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
  157. package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
  158. package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
  159. package/esm2022/lib/region-overlay/region-style.mjs +97 -0
  160. package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
  161. package/esm2022/lib/region-source/http-region-source.mjs +104 -0
  162. package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
  163. package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
  164. package/esm2022/lib/region-source/region-source.mjs +67 -0
  165. package/esm2022/lib/region-source/region-tiles.mjs +708 -0
  166. package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
  167. package/esm2022/lib/render-orchestrator.mjs +14 -11
  168. package/esm2022/lib/render-session.mjs +207 -0
  169. package/esm2022/lib/routing-visualizer.service.mjs +858 -414
  170. package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
  171. package/esm2022/lib/spatial/density-raster.mjs +14 -0
  172. package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
  173. package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
  174. package/esm2022/lib/spatial/gene-search.mjs +1 -1
  175. package/esm2022/lib/spatial/glyphs.mjs +97 -0
  176. package/esm2022/lib/spatial/lod.mjs +187 -0
  177. package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
  178. package/esm2022/lib/spatial/spatial-density.mjs +25 -16
  179. package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
  180. package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
  181. package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
  182. package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
  183. package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
  184. package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
  185. package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
  186. package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
  187. package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
  188. package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
  189. package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
  190. package/esm2022/lib/spatial/stats.mjs +71 -0
  191. package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
  192. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
  193. package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
  194. package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
  195. package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
  196. package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
  197. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
  198. package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
  199. package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
  200. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
  201. package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
  202. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
  203. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
  204. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
  205. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
  206. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
  207. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
  208. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
  209. package/esm2022/lib/store/class-color.util.mjs +53 -5
  210. package/esm2022/lib/store/class-signatures.mjs +63 -0
  211. package/esm2022/lib/store/region-history.mjs +146 -0
  212. package/esm2022/lib/store/region-scope-cache.mjs +144 -0
  213. package/esm2022/lib/store/region-selection.mjs +82 -0
  214. package/esm2022/lib/store/region-source-scope.mjs +171 -0
  215. package/esm2022/lib/store/region-store.service.mjs +986 -670
  216. package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
  217. package/esm2022/lib/store/visualizer-store.service.mjs +81 -76
  218. package/esm2022/lib/toast-outlets.mjs +5 -4
  219. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
  220. package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
  221. package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
  222. package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
  223. package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
  224. package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +120 -0
  225. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
  226. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
  227. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
  228. package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
  229. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
  230. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
  231. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
  232. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
  233. package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
  234. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
  235. package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
  236. package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
  237. package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
  238. package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +121 -0
  239. package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
  240. package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
  241. package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
  242. package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
  243. package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
  244. package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
  245. package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
  246. package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
  247. package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
  248. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
  249. package/esm2022/lib/toolbar/toolbar.component.mjs +84 -119
  250. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
  251. package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
  252. package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
  253. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
  254. package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
  255. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
  256. package/esm2022/lib/util/mark-for-check.mjs +17 -0
  257. package/esm2022/lib/util/supersede.mjs +56 -0
  258. package/esm2022/lib/visualization.module.mjs +39 -141
  259. package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
  260. package/esm2022/lib/visualizer/region-actions.mjs +149 -0
  261. package/esm2022/lib/visualizer/region-load.mjs +123 -0
  262. package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
  263. package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
  264. package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
  265. package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
  266. package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
  267. package/esm2022/lib/visualizer.component.mjs +602 -1902
  268. package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
  269. package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
  270. package/esm2022/lib/workers/spatial-math.mjs +190 -0
  271. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs +47169 -0
  272. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
  273. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs +238 -0
  274. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map +1 -0
  275. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
  276. package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
  277. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
  278. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
  279. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
  280. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  281. package/fesm2022/mask.worker.js +36 -917
  282. package/fesm2022/onnx-sam.worker.js +52 -16
  283. package/fesm2022/region-source.worker.js +1067 -0
  284. package/fesm2022/spatial-math.worker.js +471 -0
  285. package/fesm2022/tsne.worker.js +32 -15
  286. package/index.d.ts +19 -10
  287. package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
  288. package/lib/contracts/capabilities.contract.d.ts +4 -2
  289. package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
  290. package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
  291. package/lib/contracts/color.d.ts +27 -0
  292. package/lib/contracts/colormap-lut.d.ts +19 -4
  293. package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
  294. package/lib/contracts/display-types.d.ts +21 -0
  295. package/lib/contracts/image.contract.d.ts +4 -0
  296. package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
  297. package/lib/contracts/intensity.d.ts +13 -2
  298. package/lib/contracts/plot-type.d.ts +3 -1
  299. package/lib/contracts/ports/image-state.port.d.ts +6 -2
  300. package/lib/contracts/ports/preferences.port.d.ts +4 -0
  301. package/lib/contracts/ports/region-io.port.d.ts +1 -0
  302. package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
  303. package/lib/contracts/ports/tile-access.port.d.ts +1 -0
  304. package/lib/contracts/region-editor-api.contract.d.ts +85 -1
  305. package/lib/contracts/region-overlay.contract.d.ts +5 -0
  306. package/lib/contracts/region-store.contract.d.ts +22 -0
  307. package/lib/contracts/sam.contract.d.ts +7 -0
  308. package/lib/contracts/section-view.contract.d.ts +44 -0
  309. package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
  310. package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
  311. package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
  312. package/lib/contracts/visualizer.contract.d.ts +231 -54
  313. package/lib/contracts/viz-config.d.ts +9 -0
  314. package/lib/geometry/contour.d.ts +24 -0
  315. package/lib/geometry/loft.d.ts +22 -0
  316. package/lib/geometry/polylabel.d.ts +23 -0
  317. package/lib/geometry/raster.d.ts +42 -0
  318. package/lib/geometry/reconstruct.d.ts +54 -0
  319. package/lib/geometry/reslice-image.d.ts +33 -0
  320. package/lib/geometry/ring.d.ts +67 -0
  321. package/lib/geometry/section.d.ts +52 -0
  322. package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
  323. package/lib/implementations/base-store-visualizer.d.ts +61 -15
  324. package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
  325. package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
  326. package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
  327. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
  328. package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -3
  329. package/lib/implementations/napari-js/napari-loading-state.d.ts +37 -0
  330. package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
  331. package/lib/implementations/napari-js/napari-region-overlay.d.ts +68 -71
  332. package/lib/implementations/napari-js/napari-scene.d.ts +126 -0
  333. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
  334. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
  335. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
  336. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +91 -0
  337. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
  338. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
  339. package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
  340. package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
  341. package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
  342. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
  343. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +169 -883
  344. package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
  345. package/lib/implementations/napari-js/napari-volume-scene.d.ts +148 -0
  346. package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
  347. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
  348. package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
  349. package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
  350. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
  351. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
  352. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
  353. package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
  354. package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
  355. package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
  356. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
  357. package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
  358. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
  359. package/lib/implementations/osd/display-pipeline.d.ts +38 -9
  360. package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
  361. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
  362. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
  363. package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
  364. package/lib/implementations/osd/osd-coords.d.ts +6 -4
  365. package/lib/implementations/osd/osd-export.d.ts +36 -0
  366. package/lib/implementations/osd/osd-lib.d.ts +7 -0
  367. package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
  368. package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
  369. package/lib/implementations/osd/osd-region-overlay-draw.d.ts +38 -0
  370. package/lib/implementations/osd/osd-region-overlay.d.ts +46 -51
  371. package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
  372. package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
  373. package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
  374. package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
  375. package/lib/implementations/osd/osd-viewport.d.ts +77 -0
  376. package/lib/implementations/osd/osd-zoom.d.ts +6 -0
  377. package/lib/implementations/osd/simple-source.d.ts +161 -0
  378. package/lib/implementations/osd/slice-cache.d.ts +12 -3
  379. package/lib/implementations/osd/tile-client.d.ts +11 -14
  380. package/lib/implementations/osd/tile-recolor.d.ts +141 -0
  381. package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
  382. package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
  383. package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
  384. package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
  385. package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
  386. package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
  387. package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
  388. package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
  389. package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
  390. package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
  391. package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
  392. package/lib/implementations/plotly/plotly.service.d.ts +136 -401
  393. package/lib/implementations/region-centroids.d.ts +14 -0
  394. package/lib/implementations/simple-slice-access.service.d.ts +7 -4
  395. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
  396. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
  397. package/lib/implementations/tile-server/index.d.ts +5 -0
  398. package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
  399. package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
  400. package/lib/implementations/tile-server/tile-protocol.d.ts +83 -0
  401. package/lib/implementations/tile-server/transport.d.ts +62 -0
  402. package/lib/intensity/intensity-profile.d.ts +66 -0
  403. package/lib/intensity/intensity-profile.service.d.ts +108 -0
  404. package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
  405. package/lib/models/bezier.d.ts +0 -5
  406. package/lib/models/class-preset.d.ts +25 -0
  407. package/lib/models/geometry.d.ts +14 -48
  408. package/lib/models/polygon-edit.d.ts +72 -0
  409. package/lib/models/polygon-factory.d.ts +45 -0
  410. package/lib/models/region-clone.d.ts +20 -0
  411. package/lib/models/region-geojson.d.ts +57 -0
  412. package/lib/models/region.d.ts +59 -4
  413. package/lib/models/shape.d.ts +8 -0
  414. package/lib/plot-mode/contribution-host.d.ts +125 -0
  415. package/lib/plot-mode/plot-type-menu.d.ts +60 -0
  416. package/lib/plot-mode/tool-params-model.d.ts +49 -0
  417. package/lib/plot.utilities.d.ts +19 -30
  418. package/lib/processing/processing-image.d.ts +5 -2
  419. package/lib/provide-visualization.d.ts +19 -2
  420. package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
  421. package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
  422. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +86 -0
  423. package/lib/region-editor/file-stem.d.ts +7 -0
  424. package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
  425. package/lib/region-editor/mask-export.service.d.ts +54 -0
  426. package/lib/region-editor/mask-raster.d.ts +2 -8
  427. package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
  428. package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
  429. package/lib/region-editor/region-editor.component.d.ts +283 -200
  430. package/lib/region-editor/region-metrics.d.ts +34 -0
  431. package/lib/region-editor/region-persistence.service.d.ts +77 -0
  432. package/lib/region-editor/region-table/region-table.component.d.ts +89 -0
  433. package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
  434. package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
  435. package/lib/region-ops.service.d.ts +1 -7
  436. package/lib/region-overlay/region-geometry.d.ts +158 -0
  437. package/lib/region-overlay/region-hit-test.d.ts +38 -0
  438. package/lib/region-overlay/region-source-layer.d.ts +96 -0
  439. package/lib/region-overlay/region-style.d.ts +52 -0
  440. package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
  441. package/lib/region-source/http-region-source.d.ts +45 -0
  442. package/lib/region-source/region-source-ops.d.ts +89 -0
  443. package/lib/region-source/region-source-worker.d.ts +7 -0
  444. package/lib/region-source/region-source.d.ts +82 -0
  445. package/lib/region-source/region-tiles.d.ts +289 -0
  446. package/lib/region-source/worker-region-source.d.ts +65 -0
  447. package/lib/render-orchestrator.d.ts +6 -2
  448. package/lib/render-session.d.ts +75 -0
  449. package/lib/routing-visualizer.service.d.ts +248 -59
  450. package/lib/section-pane/section-pane.component.d.ts +47 -0
  451. package/lib/spatial/density-raster.d.ts +6 -0
  452. package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
  453. package/lib/spatial/embedding-compute.d.ts +21 -2
  454. package/lib/spatial/glyphs.d.ts +16 -0
  455. package/lib/spatial/lod.d.ts +94 -0
  456. package/lib/spatial/spatial-controls.facade.d.ts +64 -0
  457. package/lib/spatial/spatial-density.d.ts +15 -5
  458. package/lib/spatial/spatial-encoding.d.ts +11 -44
  459. package/lib/spatial/spatial-expression.d.ts +40 -22
  460. package/lib/spatial/spatial-framing.d.ts +1 -0
  461. package/lib/spatial/spatial-heatmap.d.ts +2 -0
  462. package/lib/spatial/spatial-hover.d.ts +4 -16
  463. package/lib/spatial/spatial-panel-model.d.ts +135 -0
  464. package/lib/spatial/spatial-selection.d.ts +21 -26
  465. package/lib/spatial/spatial-tile-merge.d.ts +41 -0
  466. package/lib/spatial/spatial-tiles.d.ts +9 -256
  467. package/lib/spatial/stats.d.ts +38 -0
  468. package/lib/spatial/transcript-grouping.d.ts +119 -0
  469. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
  470. package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
  471. package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
  472. package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
  473. package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
  474. package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
  475. package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
  476. package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
  477. package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
  478. package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
  479. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
  480. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
  481. package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
  482. package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
  483. package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
  484. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
  485. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
  486. package/lib/store/class-color.util.d.ts +39 -2
  487. package/lib/store/class-signatures.d.ts +11 -0
  488. package/lib/store/region-history.d.ts +66 -0
  489. package/lib/store/region-scope-cache.d.ts +65 -0
  490. package/lib/store/region-selection.d.ts +36 -0
  491. package/lib/store/region-source-scope.d.ts +68 -0
  492. package/lib/store/region-store.service.d.ts +312 -116
  493. package/lib/store/visualizer-store.service.d.ts +32 -33
  494. package/lib/toast-outlets.d.ts +4 -3
  495. package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
  496. package/lib/toolbar/canvas-tools.d.ts +20 -0
  497. package/lib/toolbar/crop/slide-crop.d.ts +10 -4
  498. package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
  499. package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
  500. package/lib/toolbar/region-tools/region-tools.component.d.ts +62 -0
  501. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
  502. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
  503. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
  504. package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
  505. package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
  506. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
  507. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
  508. package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
  509. package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
  510. package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
  511. package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
  512. package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
  513. package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
  514. package/lib/toolbar/stack-controls/stack-controls.component.d.ts +51 -0
  515. package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
  516. package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
  517. package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
  518. package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
  519. package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
  520. package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
  521. package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
  522. package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
  523. package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
  524. package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
  525. package/lib/toolbar/toolbar.component.d.ts +55 -84
  526. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
  527. package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
  528. package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
  529. package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
  530. package/lib/toolbar/wand/wand.service.d.ts +22 -116
  531. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
  532. package/lib/util/mark-for-check.d.ts +11 -0
  533. package/lib/util/supersede.d.ts +53 -0
  534. package/lib/visualization.module.d.ts +18 -39
  535. package/lib/visualizer/floating-drag.directive.d.ts +30 -0
  536. package/lib/visualizer/region-actions.d.ts +54 -0
  537. package/lib/visualizer/region-load.d.ts +46 -0
  538. package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
  539. package/lib/visualizer/tool-modes.d.ts +49 -0
  540. package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
  541. package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
  542. package/lib/visualizer/volume-sections.d.ts +64 -0
  543. package/lib/visualizer.component.d.ts +232 -447
  544. package/lib/workers/spatial-math-ops.d.ts +65 -0
  545. package/lib/workers/spatial-math-worker.d.ts +7 -0
  546. package/lib/workers/spatial-math.d.ts +74 -0
  547. package/package.json +12 -3
  548. package/src/lib/assets/slice.svg +23 -0
  549. package/src/lib/styles/_viz-icons-rules.scss +73 -0
  550. package/src/lib/styles/viz-icons.scss +14 -0
  551. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
  552. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
  553. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
  554. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
  555. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
  556. package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
  557. package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
  558. package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
  559. package/src/lib/assets/cell-detection.svg +0 -37
  560. package/src/lib/assets/click.svg +0 -1
  561. package/src/lib/assets/colormap-luts.json +0 -1
  562. package/src/lib/assets/edit-selection-white.svg +0 -47
  563. package/src/lib/assets/icons/colormap-earth.png +0 -0
  564. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  565. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  566. package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
  567. package/src/lib/assets/picture-segmentation.svg +0 -43
  568. package/src/lib/assets/test/download-379.svg +0 -1
  569. package/src/lib/assets/test/download-98.svg +0 -1
  570. package/src/lib/assets/test/json-1.svg +0 -1
  571. package/src/lib/assets/test/load-53.svg +0 -1
  572. package/src/lib/assets/test/mask-44.svg +0 -1
  573. package/src/lib/assets/test/mask-download-44.svg +0 -15
  574. package/src/lib/assets/test/mask-save-44.svg +0 -11
  575. package/src/lib/assets/test/overlay-1.svg +0 -1
  576. package/src/lib/assets/test/overlay-4.svg +0 -1
  577. package/src/lib/assets/test/region-26.svg +0 -1
  578. package/src/lib/assets/test/save-56.svg +0 -1
  579. package/src/lib/assets/test/upload-43.svg +0 -1
@@ -1,112 +1,162 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
- import { OverlayPanel } from 'primeng/overlaypanel';
3
2
  import { Region } from '../models/region';
4
3
  import { PresetSet, ClassPreset } from '../models/class-preset';
5
4
  import { ConfirmationService, MessageService } from 'primeng/api';
6
5
  import { IRegionEditorApi } from '../contracts/region-editor-api.contract';
7
- import { RegionIoPort } from '../contracts/ports/region-io.port';
6
+ import { RegionPersistenceService } from './region-persistence.service';
7
+ import { ClassColorEdit } from './region-color-dialog/region-color-dialog.component';
8
+ import { ClassTreePick } from './class-tree/class-tree.component';
9
+ import type { RegionSourceView } from '../region-source/region-source';
10
+ import type { RegionClassNode } from '../region-source/region-tiles';
11
+ import { MaskExportService, MaskMode } from './mask-export.service';
12
+ import { PixelSize } from './region-metrics';
8
13
  import * as i0 from "@angular/core";
9
14
  export declare class RegionEditorComponent implements OnInit, OnDestroy {
10
15
  private regionApi;
11
- messageService: MessageService;
16
+ private messageService;
12
17
  private confirmationService;
13
- private regionIo;
14
- protected readonly Array: ArrayConstructor;
15
- overlayPanel: OverlayPanel;
16
- regions: Region[];
17
- regionsCopy: Region[];
18
- selectedRegions: Region[];
19
- showShapeLabel: boolean;
20
- shapeColor: string;
21
- fillColor: string;
22
- displayHelpDialog: boolean;
23
- showColorDialog: boolean;
18
+ private persistence;
19
+ private maskExport;
20
+ private overlayPanel;
21
+ /**
22
+ * Whether the editor is on screen (its dialog open). Closed, it asks the region source nothing:
23
+ * its page of features, its class counts and, in a volume view, its classes' volumes are each a
24
+ * request over the whole set (a stack's every slice), and they competed with the volume's own
25
+ * slice loading for nothing anyone could see. Opened, it reads them again.
26
+ */
27
+ set active(value: boolean);
28
+ private isActive;
29
+ protected regions: Region[];
30
+ protected selectedRegions: Region[];
31
+ protected showShapeLabel: boolean;
32
+ protected shapeColor: string;
33
+ protected fillColor: string;
34
+ protected displayHelpDialog: boolean;
35
+ protected showColorDialog: boolean;
24
36
  /** One colour editor per unique class among the selected regions, shown in the
25
37
  * "edit colour of selected regions" dialog. Unclassified regions (no label)
26
38
  * are grouped under a single entry with an empty `label`. */
27
- classColorEdits: {
28
- label: string;
29
- color: string;
30
- }[];
31
- labelColors: Map<string, string>;
32
- selectedLabelColor: string;
39
+ protected classColorEdits: ClassColorEdit[];
33
40
  /** "Edit class on selected rows" popup: chosen existing class, and a new-class name. */
34
- bulkClass: string;
35
- newBulkClass: string;
41
+ protected bulkClass: string;
42
+ protected newBulkClass: string;
36
43
  /** Local mirror of the per-user preset set (chip strip, Class dropdown, dialog). */
37
- presetSet: PresetSet;
38
- /** Class applied to newly drawn/added regions and to bulk chip-clicks. */
39
- activeClass: string | null;
40
- showManageDialog: boolean;
44
+ protected presetSet: PresetSet;
45
+ /** The class last picked in the panel; a chip-click applies it to the selected rows. */
46
+ protected activeClass: string | null;
47
+ protected showManageDialog: boolean;
41
48
  /** Working copy edited inside the Manage-classes dialog; committed on Apply/Done. */
42
- presetDraft: PresetSet | null;
49
+ protected presetDraft: PresetSet | null;
43
50
  /** class name (match-mode keyed) → number of regions currently using it. */
44
- classCounts: Map<string, number>;
51
+ protected classCounts: Map<string, number>;
45
52
  /** Fallback class that a region reverts to when its class is deleted (jit-ui#70). */
46
- readonly defaultClassName = "Region";
53
+ protected readonly defaultClassName = "Region";
47
54
  /** Classes as shown in the panel: sorted by region count (desc), then name. */
48
- displayClasses: ClassPreset[];
49
- readonly matchModeOptions: {
50
- label: string;
51
- value: string;
52
- }[];
53
- paginatorFirst: number;
54
- paginatorRows: number;
55
- readonly rowsPerPageOptions: number[];
56
- /** Regions whose Class cell is currently in edit mode.
57
- * Using object identity as the key avoids needing a unique id field. */
58
- editingLabelRegions: Set<any>;
59
- showSaveAsDialog: boolean;
60
- saveAsFilename: string;
61
- saveAsFileExists: boolean;
55
+ protected displayClasses: ClassPreset[];
56
+ protected paginatorFirst: number;
57
+ protected paginatorRows: number;
58
+ protected readonly rowsPerPageOptions: number[];
59
+ /** Regions whose Class cell is currently in edit mode → the label being typed.
60
+ * The draft is committed on Enter and discarded on Escape/✕, so typing never
61
+ * writes into the store's region (RT-18). Keyed by object identity, which
62
+ * avoids needing a unique id field. */
63
+ protected editingLabelRegions: Map<Region, string>;
64
+ protected showSaveAsDialog: boolean;
65
+ /**
66
+ * The slice's region source (a large region set drawn by level of detail), or null. Its
67
+ * features are rows of the table after the regions — stand-ins until one is selected or edited,
68
+ * which takes it into the regions — and its classes count in the classes panel.
69
+ */
70
+ protected sourceView: RegionSourceView | null;
71
+ /** Features still in the source (the table's rows after the regions). */
72
+ private sourceTotal;
73
+ /** Stand-in rows for the source features on the current page. */
74
+ private sourceRows;
75
+ /** Features per class still in the source. */
76
+ private sourceClassCounts;
77
+ /** The stand-in rows (rows of a source feature, not of a region). */
78
+ private readonly standIns;
79
+ private standInSeq;
80
+ /** Bumped per source refresh, so a late answer is dropped. */
81
+ private sourceRequest;
82
+ /** The classes the table's Class column offers: the presets and the region source's classes
83
+ * (a dropdown can only show a value that is one of its options). */
84
+ protected tablePresetSet: PresetSet;
85
+ /** Whether regions are drawn filled (the atlas look) rather than outlined. */
86
+ protected regionsFilled: boolean;
87
+ /** Whether a volume view is on screen (classes can then be shown in 3D). */
88
+ protected volumeView: boolean;
89
+ /** Whether the volume view's slice pane is wanted (one slice edited beside the 3D view). */
90
+ private slicePane;
91
+ /** Whether the volume view draws the regions through the volume (see toggleThroughVolume). */
92
+ protected regionsThroughVolume: boolean;
93
+ /** Classes shown in 3D in the volume view, each with the classes its surface covers. */
94
+ protected shown3d: Map<string, string[]>;
95
+ /** The classes of the class tree's pick (it and its subtree), as long as the pick holds. */
96
+ private pickedClasses;
97
+ /** The selected rows' classes, marked in the class lists. */
98
+ protected markedClasses: ReadonlySet<string>;
99
+ /** The surfaces highlighted in the volume view (their keys, joined). */
100
+ private highlighted3d;
101
+ /** The colour each shown surface was last drawn in. */
102
+ private colors3d;
103
+ /** Their names, for the class lists' toggles (a new set per change, for OnPush). */
104
+ protected shown3dNames: ReadonlySet<string>;
105
+ /** The classes hidden from view (their regions, source features and surfaces). */
106
+ protected hiddenClasses: ReadonlySet<string>;
107
+ /** Whether a region set's class hierarchy is shown as a tree (rather than the class list). */
108
+ protected classTreeView: boolean;
109
+ /** The class picked last in the class tree. */
110
+ protected pickedClass: string | null;
111
+ /** Regions per class (the regions' and the source's), for the class tree. */
112
+ protected treeCounts: Map<string, number>;
113
+ /** A class's colour, for the class tree: a new function per colour change, so the tree repaints. */
114
+ protected treeColor: (name: string) => string;
115
+ protected saveAsFilename: string;
116
+ protected saveAsFileExists: boolean;
62
117
  /** True while a GeoJSON persist is serializing/uploading — drives the dialog's
63
118
  * progress bar and Cancel button (parity with the Save-mask dialog). */
64
- saveAsBusy: boolean;
65
- private _saveAsCheck$;
119
+ protected saveAsBusy: boolean;
120
+ /** The running GeoJSON save; unsubscribing cancels it (Cancel / destroy). */
66
121
  private _saveAsSub?;
67
- /** Handle for the deferred-serialize timer so Cancel/destroy can abort it
68
- * before it fires (otherwise the upload would still start). */
69
- private _saveAsTimer?;
70
- showExportDialog: boolean;
71
- exportFilename: string;
72
- showSaveMaskDialog: boolean;
73
- saveMaskFilename: string;
122
+ /** Save-as file names to check for an existing file (debounced). */
123
+ private readonly saveAsCheck$;
124
+ protected showExportDialog: boolean;
125
+ protected exportFilename: string;
126
+ protected showSaveMaskDialog: boolean;
127
+ protected saveMaskFilename: string;
74
128
  /** Mask type chosen in the Save-mask dialog: a binary foreground/background
75
129
  * mask, or a multi-class mask with a distinct id per region. */
76
- maskMode: 'binary' | 'multiclass';
130
+ protected maskMode: MaskMode;
77
131
  /** True while the mask worker is rasterizing/encoding — drives the progress
78
132
  * bar and the Cancel button in the dialog. */
79
- maskBusy: boolean;
133
+ protected maskBusy: boolean;
80
134
  /** 0–100 rasterization progress; switches to indeterminate during encoding. */
81
- maskProgress: number;
82
- maskEncoding: boolean;
83
- private maskWorker?;
84
- private pendingMaskFilename;
135
+ protected maskProgress: number;
136
+ protected maskEncoding: boolean;
137
+ /** The running mask export; unsubscribing cancels it (terminates its worker). */
138
+ private maskJob?;
85
139
  /**
86
140
  * PrimeNG p-table multi-selection mode toggle. When true, single-click
87
141
  * selects one row (replacing prior); meta/ctrl-click toggles a row in/out
88
142
  * of the selection. When false, every click toggles. Default true to
89
143
  * match the most common spreadsheet-like UX.
90
144
  */
91
- metaKey: boolean;
145
+ protected metaKey: boolean;
92
146
  private _updatingFromEditor;
93
147
  private _suppressSelectionSyncToPlot;
94
- private _regionSub;
95
- private _selectedIdxSub;
96
- private _metaSub;
97
- private _presetSub;
148
+ private readonly destroyRef;
149
+ private readonly cdr;
150
+ private readonly zone;
151
+ /** Re-render this OnPush view, re-entering the zone when the change came from outside it. */
152
+ private changed;
98
153
  /** Physical pixel size (µm/pixel) of the active image, for region areas in
99
- * µm². Undefined when the format reports no physical size. */
100
- private mppX?;
101
- private mppY?;
102
- constructor(regionApi: IRegionEditorApi, messageService: MessageService, confirmationService: ConfirmationService, regionIo: RegionIoPort);
103
- /**
104
- * Deep copy of regions for dirty-tracking (`regionsCopy`). Returns plain-object
105
- * clones — only structural equality matters here, not prototypes.
106
- * TODO: replace with `structuredClone` once verified.
107
- */
108
- private deepClone;
154
+ * µm²; empty when the format reports no physical size. */
155
+ protected mpp: PixelSize;
156
+ constructor(regionApi: IRegionEditorApi, messageService: MessageService, confirmationService: ConfirmationService, persistence: RegionPersistenceService, maskExport: MaskExportService);
109
157
  ngOnInit(): void;
158
+ /** Cancels a running GeoJSON save (aborts its upload) and mask export (terminates
159
+ * its worker); the API subscriptions end through `takeUntilDestroyed`. */
110
160
  ngOnDestroy(): void;
111
161
  /**
112
162
  * Table → Plot: PrimeNG fires onRowSelect/onRowUnselect after updating
@@ -114,96 +164,137 @@ export declare class RegionEditorComponent implements OnInit, OnDestroy {
114
164
  * the package maps them to its internal index space (which includes the
115
165
  * intensity-profile lines the editor never sees).
116
166
  */
117
- onSelectionChanged(): void;
167
+ protected onSelectionChanged(): void;
168
+ /** Whether the slice has a region source: it then has regions to save even with an empty table. */
169
+ protected get hasRegionSource(): boolean;
170
+ /** Rows in the table: the regions, then the features still in the region source. */
171
+ protected get tableTotal(): number;
172
+ /** The class hierarchy of the slice's region source, when it has one (the classes as a tree). */
173
+ protected get classHierarchy(): RegionClassNode[] | null;
174
+ /** Whether `row` is a region-source feature's stand-in rather than a region. */
175
+ protected isSourceRow(row: Region): boolean;
176
+ private sourceIds;
177
+ /** A table row for a source feature: no geometry until it is taken. */
178
+ private standIn;
118
179
  /**
119
- * Apply classification colours and refresh the label→colour map for regions
120
- * coming from the visualizer. The visualizer hands back neutral `Region`
121
- * objects with bounds, colour and label already populated, so the editor no
122
- * longer parses any backend-specific shape format — it only fills in a
123
- * fallback colour and rebuilds its local label→colour lookup.
180
+ * Re-read the source part of the table (the stand-ins on the current page, the count) and the
181
+ * source's class counts. The page holds regions first, so its source rows start at
182
+ * `max(first, regions)` − regions.
124
183
  */
125
- private applyRegionColors;
184
+ private refreshSource;
185
+ /** Take a source row's feature into the regions, then run `then` on the region it became. */
186
+ private takeThen;
187
+ /** Toggle the filled (atlas) look: each region filled in its colour, labels inside. */
188
+ /** In a volume view: the regions drawn through the volume, or hidden behind what it shows. */
189
+ protected toggleThroughVolume(): void;
190
+ protected toggleFill(): void;
126
191
  /**
127
- * Push edits from the editor to the diagram in live-edit mode (no save /
128
- * cancel buttons). The `_updatingFromEditor` guard is still used so the
129
- * resulting regionUpdateEvent doesn't bounce back as an external change.
192
+ * Show or hide a class in the volume view as a 3D reconstruction — a tree node with every class
193
+ * under it, as one surface in its colour.
130
194
  */
131
- private setRegionsFromEditor;
132
- /** Set one region's outline colour from the per-row picker and commit live.
133
- * Remembers it as the label's colour so same-class regions added later match
134
- * (jit-ui#85 — the Region Editor's per-region Color column). */
135
- changeRegionColor(region: Region, color: string): void;
136
- addRectangle(): void;
195
+ protected toggleClass3d(name: string, classes?: string[]): void;
196
+ /** Hide (or show again) these classes' regions, wherever they are drawn. */
197
+ protected setClassesHidden(classes: readonly string[], hidden: boolean): void;
198
+ /** The surfaces shown in 3D, in their classes' colours now. */
199
+ private groups3d;
200
+ /** The classes selected now: the class tree's pick (with its subtree) and the selected rows'. */
201
+ private selectedClassNames;
137
202
  /**
138
- * Update the label of the region on enter key pressed (when editing a label cell in the table)
139
- * @param region
140
- * @param setRegion
203
+ * Highlight, in the volume view, the surfaces holding a selected class (focus + context: they
204
+ * turn near opaque, the others fade), and mark the selected rows' classes in the class lists.
141
205
  */
142
- labelRegionUpdate(region: Region, setRegion?: boolean): void;
143
- xRectUpdate(region: Region, event: any): void;
144
- yRectUpdate(region: Region, event: any): void;
145
- widthRectUpdate(region: Region, event: any): void;
146
- heightRectUpdate(region: Region, event: any): void;
147
- onPageChange(event: {
148
- first?: number;
149
- rows?: number;
150
- }): void;
151
- /** Select every region in the table (and highlight them on the diagram). */
152
- selectAllRegions(): void;
153
- deleteSelectedRegions(): void;
154
- clearAllRegions(): void;
155
- addPolygon(): void;
156
- deleteRegion(shapeIdx: number): void;
157
- private clampPaginatorFirst;
158
- changeShowShapeLabel(showLabel: boolean): void;
159
- isEditingLabel(region: any): boolean;
160
- startEditLabel(region: any, event?: Event): void;
161
- stopEditLabel(region: any, commit: boolean, event?: Event): void;
162
- isRectangle(region: Region): boolean;
206
+ private updateSelectionHighlight;
207
+ /** A surface clicked in the volume view: pick its class as the tree would; beside them, clear. */
208
+ private onPicked3d;
209
+ /** A class colour changed (its swatch, or Manage): repaint the surfaces shown in 3D whose colour it changed. */
210
+ private recolor3d;
211
+ private show3d;
212
+ /** Pick a class in the class tree: select its regions and its subclasses', the source's taken. */
213
+ protected pickClasses(pick: ClassTreePick): Promise<void>;
214
+ /**
215
+ * Rows for regions coming from the visualizer: neutral `Region`s with bounds,
216
+ * colour and label already populated. A region without a colour is shown with
217
+ * its classification colour (or the default shape colour) — as a copy: the
218
+ * store's instances are shared with its undo history and must not be changed
219
+ * in place (RT-1).
220
+ */
221
+ private applyRegionColors;
163
222
  /**
164
- * Region area for display: in µm² (or mm²) when the image reports a physical
165
- * pixel size, otherwise in px². Empty string for degenerate regions.
223
+ * The editor's one write path (RT-1): make `next` the table's rows and commit
224
+ * them to the store — live, as one undoable step (isRegionSaveOn=true; the
225
+ * router keeps the intensity-profile lines). Rows are the store's instances,
226
+ * so an edit passes copies ({@link patchRegions}), never changed rows. The
227
+ * resulting region-update event is ignored (`_updatingFromEditor`), so the
228
+ * class list and counts are refreshed here (a typed class is added; jit-ui#70).
166
229
  */
167
- regionArea(region: Region): string;
230
+ private commit;
168
231
  /**
169
- * Choose the physical pixel size (µm/pixel) for area display from the image
170
- * meta. The calibration may sit on any channel entry — not necessarily [0] —
171
- * so pick the first entry with a positive mppX (mirrors
172
- * PlotlyService.currentMpp). Falls back to square pixels (mppY = mppX) when
173
- * only one axis is reported, so a scaled image shows µm²/mm² rather than px².
232
+ * Copy-on-write edit (review RT-1). The editor's rows are the region store's
233
+ * live instances, and the store takes its undo snapshot only when the edit is
234
+ * committed — so an edit must replace a region with a patched copy (and any
235
+ * bounds it changes with new bounds), never mutate the instance the store
236
+ * holds. Returns the copies by original; the selection and an open label edit
237
+ * follow them.
174
238
  */
175
- private pickMpp;
176
- /** Pixel area: width·height for rectangles, shoelace formula for polygons.
177
- * Interior rings (holes) are subtracted, so a donut reports the annulus area,
178
- * not the filled exterior (jit-ui#85). */
179
- private areaInPixels;
180
- /** Polygon area: exterior shoelace minus each interior ring (hole). */
181
- private polygonArea;
182
- /** Absolute shoelace area of a single ring. */
183
- private ringArea;
184
- private fmtArea;
239
+ private patchRegions;
240
+ /** Set one region's outline colour (an explicit override) and commit live. */
241
+ protected changeRegionColor(region: Region, color: string): void;
185
242
  /**
186
- * This method rounds all the rectangle regions lengths to multiple of 512
243
+ * After a label edit on `region`: give every labelled row without a colour its
244
+ * class colour (preset or fallback, as the store will), and commit when
245
+ * `commit` is set.
187
246
  */
188
- roundRectangleLengths(): void;
247
+ protected labelRegionUpdate(region: Region, commit?: boolean): void;
248
+ /** Labelled rows without a colour get their class colour (copies). */
249
+ private fillClassColors;
250
+ /** The current page of the table. Memoized on (regions, first, rows), so
251
+ * change detection doesn't hand p-table a new array every tick (RT-20). */
252
+ protected get pagedRegions(): Region[];
253
+ /** In a volume view, each class's volume over the whole stack, for the table (null: areas). */
254
+ protected tableVolumes: ReadonlyMap<string, number | null> | null;
255
+ /** Bumped when the regions change, so a volume computed before is dropped. */
256
+ private volumeRequest;
257
+ /** Compute the volumes of the classes on the table's page that are not known yet. */
258
+ private requestVolumes;
259
+ /** The regions changed (or the view did): forget the volumes and compute the page's again. */
260
+ private resetVolumes;
261
+ private _pageKey;
262
+ private _page;
263
+ protected onPageChange(event: {
264
+ first?: number;
265
+ rows?: number;
266
+ }): void;
267
+ /** Select every region in the table (and highlight them on the diagram), the source's taken. */
268
+ protected selectAllRegions(): Promise<void>;
269
+ protected deleteSelectedRegions(): void;
270
+ protected clearAllRegions(): void;
271
+ /** Delete every feature still in the slice's region source (with "Delete all regions"). */
272
+ private deleteAllSourceFeatures;
273
+ protected deleteRegion(shapeIdx: number): void;
274
+ private clampPaginatorFirst;
275
+ protected changeShowShapeLabel(showLabel: boolean): void;
276
+ protected isEditingLabel(region: Region): boolean;
277
+ protected startEditLabel(region: Region, event?: Event): void;
278
+ /** The label typed so far for a row in edit mode (no re-render needed). */
279
+ protected setLabelDraft(region: Region, value: string): void;
280
+ protected stopEditLabel(region: Region, commit: boolean, event?: Event): void;
281
+ /** Region area for display (µm²/mm² when the image is scaled, else px²);
282
+ * empty for a degenerate region. See `region-metrics`. */
283
+ protected regionArea(region: Region): string;
189
284
  /**
190
- * Stop key arrow event propagation
191
- * @param event
285
+ * This method rounds all the rectangle regions lengths to multiple of 512
192
286
  */
193
- disableArrowKeys(event: any): void;
194
- changeShapeColor(event: any): void;
195
- showHelp(): void;
287
+ protected roundRectangleLengths(): void;
288
+ protected showHelp(): void;
196
289
  /** Open the colour dialog for the currently-selected region(s), building one
197
290
  * colour picker per unique class in the selection. Each picker is seeded with
198
- * the class's current colour (the label→colour map, falling back to the first
199
- * selected region of that class). */
200
- openColorDialog(): void;
201
- /** Apply each class's chosen colour to the selected regions of that class and
202
- * commit live. Remembers the colour per class so same-class regions added
203
- * later match. */
204
- applyColorToSelected(): void;
291
+ * the first selected region of that class's colour (else the class colour). */
292
+ protected openColorDialog(): void;
293
+ /** Apply each class's chosen colour to the selected regions of that class (an
294
+ * explicit override) and commit live. */
295
+ protected applyColorToSelected(edits?: ClassColorEdit[]): void;
205
296
  /** Resolve the display colour for a class name (preset colour or deterministic fallback). */
206
- colorForName(name?: string): string;
297
+ protected colorForName(name?: string): string;
207
298
  /**
208
299
  * Ensure every class label present in the loaded regions exists in the preset
209
300
  * list, auto-adding any that are missing (using the region's already-resolved
@@ -213,93 +304,85 @@ export declare class RegionEditorComponent implements OnInit, OnDestroy {
213
304
  * labels are ignored. (jit-ui#70)
214
305
  */
215
306
  private syncClassesFromRegions;
216
- /** Rebuild the per-class region counts shown in the panel. */
307
+ /**
308
+ * Whether the classes count every slice of the stack: in a volume view (the whole stack on
309
+ * screen), unless its slice pane shows one slice. The table lists the slice's regions anyway.
310
+ */
311
+ private get stackCounts();
312
+ /** Rebuild the per-class region counts shown in the panel (the stack's, see stackCounts). */
217
313
  private recomputeClassCounts;
218
- /** Rebuild the panel's display order — most-used classes first, then by name. */
314
+ /** Rebuild the panel's display order — most-used classes first, then by name. A class only
315
+ * the region source has is listed too, in its colour. */
219
316
  private updateDisplayClasses;
220
- /** trackBy for the class rows so re-sorting doesn't re-create the pickers. */
221
- trackByClassName: (_: number, c: ClassPreset) => string;
222
317
  /** Number of regions currently using a class (keyed by the active match mode). */
223
- classCount(name: string): number;
318
+ protected classCount(name: string): number;
224
319
  /** Recolour a class from its panel swatch and repaint its (non-overridden) regions. */
225
- setClassColor(name: string, color: string): void;
226
- /** Tooltip for a class's delete button in the panel. */
227
- deleteClassTooltip(name: string): string;
320
+ protected setClassColor(name: string, color: string): void;
228
321
  /** Remove a class. Any regions still using it fall back to the default
229
322
  * "Region" class, so they aren't orphaned (and the class isn't immediately
230
323
  * re-added from its regions by syncClassesFromRegions). */
231
- deleteClass(name: string): void;
324
+ protected deleteClass(name: string): void;
232
325
  /** Regions labelled with any of `removedNames` revert to the default
233
326
  * {@link defaultClassName} ("Region"): its class colour, override cleared.
234
327
  * Skips the default itself so deleting "Region" can't self-reassign. (jit-ui#70) */
235
328
  private reassignRegionsToDefaultClass;
236
329
  /** Stamp a class (and its preset/fallback colour) onto one region from the Class
237
330
  * dropdown; choosing a class opts the region back into the preset colour. */
238
- applyPresetToRegion(region: Region, className: string): void;
331
+ protected applyPresetToRegion(region: Region, className: string): void;
239
332
  /** Make a class active (used for new regions) and, if rows are selected, apply
240
333
  * it to them in one commit. */
241
- selectActiveClass(name: string): void;
334
+ protected selectActiveClass(name: string): void;
242
335
  /** Apply a class (label + preset/fallback colour) to the current selection and commit. */
243
336
  private applyClassToSelected;
244
337
  /** "Edit class on selected rows" popup — apply the chosen existing class. */
245
- applyBulkClass(): void;
338
+ protected applyBulkClass(): void;
246
339
  /** "Edit class on selected rows" popup — add a new class and set it on the selection. */
247
- addAndApplyBulkClass(): void;
248
- openManageDialog(): void;
340
+ protected addAndApplyBulkClass(): void;
341
+ protected openManageDialog(): void;
249
342
  private clonePresetSet;
250
- addPresetClass(): void;
251
- removePresetClass(i: number): void;
252
- addFallbackColor(): void;
253
- removeFallbackColor(i: number): void;
254
343
  /** Commit the draft: drop blank/duplicate names, persist, and recolour
255
344
  * non-overridden regions with the updated presets. */
256
- applyManageDialog(close: boolean): void;
257
- resetPresetsToDefaults(): void;
258
- exportPresets(): void;
259
- importPresets(event: Event): void;
260
- importRois(event: Event): void;
345
+ protected applyManageDialog(close: boolean): void;
346
+ protected resetPresetsToDefaults(): void;
347
+ protected exportPresets(): void;
348
+ protected importPresets(event: Event): void;
349
+ /** Validate and apply an imported annotation-classes JSON file. */
350
+ private applyImportedPresets;
351
+ protected importRois(event: Event): void;
261
352
  /**
262
- * Regions to serialize on save/export. For a single-file z-stack the store
263
- * keeps only the current slice live, so pull EVERY slice's annotations (each
264
- * tagged with its zero-based Region.z) to write one combined z-indexed
265
- * geojson (jit-ui#93). Otherwise (single-plane image, or a folder stack whose
266
- * slices save to their own per-slice files) the current set. (jit-ui#93)
353
+ * Replace the regions with an imported GeoJSON file's, and the slice's region source with them.
354
+ * A large file becomes the slice's region source instead (drawn by level of detail; listed above
355
+ * the table), the table emptied.
267
356
  */
357
+ private applyImportedRois;
358
+ /** Regions to serialize on save/export (every slice for a combined z-stack). */
268
359
  private regionsForSave;
269
- exportRois(): void;
270
- confirmExport(): void;
360
+ protected exportRois(): void;
361
+ protected confirmExport(): void;
271
362
  /** Open the "Save mask" dialog, seeded with `<image-stem>_mask.png`. */
272
- openSaveMaskDialog(): void;
363
+ protected openSaveMaskDialog(): void;
273
364
  /**
274
365
  * Rasterize the regions to the chosen mask type and download as a PNG. The
275
- * heavy work (full-res rasterize + PNG encode) runs in a Web Worker so the UI
276
- * never freezes on large/whole-slide images and the job can be cancelled
277
- * (jit-ui#95). The dialog stays open showing a progress bar until done.
366
+ * heavy work runs in a Web Worker ({@link MaskExportService}) so the UI never
367
+ * freezes on whole-slide images and the job can be cancelled (jit-ui#95);
368
+ * the dialog stays open with a progress bar until done.
278
369
  */
279
- confirmSaveMask(): void;
280
- /** Cancel an in-progress mask export: terminate the worker and reset state. */
281
- cancelSaveMask(): void;
282
- /** Worker factory — async so the worker module (and its `import.meta.url`,
283
- * which the CommonJS test compile rejects) is loaded via a dynamic import,
284
- * exactly like the segmentation worker. Overridable in tests. */
285
- protected createMaskWorker(): Promise<Worker>;
370
+ protected confirmSaveMask(): void;
371
+ /** Cancel an in-progress mask export (terminates its worker) and reset state. */
372
+ protected cancelSaveMask(): void;
286
373
  private finishMask;
287
374
  private maskError;
288
- private teardownMaskWorker;
289
- persistRegions(): void;
290
- /**
291
- * Save a folder stack's regions as one geojson per slice-file (jit-ui#93).
292
- * Groups the store's per-slice regions by slice index and serializes each on
293
- * the default plane (z=0) — each slice-file is itself one plane, and the
294
- * loader re-derives the slice index from the file's position in the series.
295
- * Slices cleared since load are included (empty) so their file is overwritten.
296
- */
375
+ protected persistRegions(): void;
376
+ /** Save a folder stack's regions as one geojson per slice-file (jit-ui#93).
377
+ * No dialog covers the toolbar meanwhile, so a Save while one is uploading
378
+ * is ignored rather than starting a second write (and orphaning the first). */
297
379
  private saveStackSlices;
298
- checkSaveAsFileExists(): void;
299
- confirmSaveAs(): void;
380
+ protected checkSaveAsFileExists(): void;
381
+ protected confirmSaveAs(): void;
300
382
  /** Cancel an in-progress GeoJSON persist: abort the deferred serialize and/or
301
383
  * the in-flight upload, and reset state. */
302
- cancelSaveAs(): void;
384
+ protected cancelSaveAs(): void;
385
+ private toast;
303
386
  static ɵfac: i0.ɵɵFactoryDeclaration<RegionEditorComponent, never>;
304
- static ɵcmp: i0.ɵɵComponentDeclaration<RegionEditorComponent, "region-editor", never, {}, {}, never, never, false, never>;
387
+ static ɵcmp: i0.ɵɵComponentDeclaration<RegionEditorComponent, "region-editor", never, { "active": { "alias": "active"; "required": false; }; }, {}, never, never, true, never>;
305
388
  }
@@ -0,0 +1,34 @@
1
+ import { Region } from '../models/region';
2
+ import { IImageMetadata } from '../contracts/image.contract';
3
+ /** Physical pixel size (µm/pixel); both undefined when the image is unscaled. */
4
+ export interface PixelSize {
5
+ mppX?: number;
6
+ mppY?: number;
7
+ /** Spacing between slices (µm), when the stack declares it. */
8
+ mppZ?: number;
9
+ }
10
+ /**
11
+ * Choose the physical pixel size for area display from the image meta. The
12
+ * calibration may sit on any channel entry, not necessarily [0], so take the
13
+ * first entry with a positive mppX (as PlotlyService.currentMpp does). With
14
+ * only one axis reported, pixels are square (mppY = mppX), so a scaled image
15
+ * shows µm²/mm² rather than px².
16
+ */
17
+ export declare function pickMpp(meta: IImageMetadata[] | undefined): PixelSize;
18
+ /**
19
+ * A region's area in px²: width·height for a rectangle, shoelace for a polygon
20
+ * with each interior ring (hole) subtracted (a donut reports the annulus), and
21
+ * the sum of the parts for a multi-polygon (jit-ui#85). 0 for anything else.
22
+ */
23
+ export declare function regionAreaPx(region: Pick<Region, 'bounds'>): number;
24
+ /**
25
+ * An area for display: µm² (mm² from 1e6 µm²) when the pixel size is known,
26
+ * otherwise px². Empty for a degenerate (non-positive) area.
27
+ */
28
+ export declare function formatArea(px: number, mpp?: PixelSize): string;
29
+ /**
30
+ * A volume in px² × slices for display: mm³ (three significant digits) from 0.001 mm³, µm³ below,
31
+ * when the pixel size and the slice spacing are known; otherwise voxels (one pixel by one slice).
32
+ * Empty for a non-positive volume.
33
+ */
34
+ export declare function formatVolume(pxSlices: number, mpp?: PixelSize): string;