@jax-data-science/sci-image-visualizer 0.1.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 (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +404 -0
  3. package/esm2022/index.mjs +52 -0
  4. package/esm2022/jax-data-science-sci-image-visualizer.mjs +5 -0
  5. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +398 -0
  6. package/esm2022/lib/contracts/capabilities.contract.mjs +32 -0
  7. package/esm2022/lib/contracts/cell-segmenter.contract.mjs +12 -0
  8. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +14 -0
  9. package/esm2022/lib/contracts/colormap-lut.mjs +95 -0
  10. package/esm2022/lib/contracts/coordinate-transform.contract.mjs +2 -0
  11. package/esm2022/lib/contracts/display-types.mjs +8 -0
  12. package/esm2022/lib/contracts/image.contract.mjs +11 -0
  13. package/esm2022/lib/contracts/intensity.mjs +28 -0
  14. package/esm2022/lib/contracts/plot-type.mjs +112 -0
  15. package/esm2022/lib/contracts/ports/image-state.port.mjs +3 -0
  16. package/esm2022/lib/contracts/ports/preferences.port.mjs +3 -0
  17. package/esm2022/lib/contracts/ports/region-io.port.mjs +3 -0
  18. package/esm2022/lib/contracts/ports/tile-access.port.mjs +3 -0
  19. package/esm2022/lib/contracts/region-editor-api.contract.mjs +4 -0
  20. package/esm2022/lib/contracts/region-overlay.contract.mjs +2 -0
  21. package/esm2022/lib/contracts/region-store.contract.mjs +2 -0
  22. package/esm2022/lib/contracts/sam.contract.mjs +12 -0
  23. package/esm2022/lib/contracts/toolbar-config.mjs +8 -0
  24. package/esm2022/lib/contracts/visualizer.contract.mjs +10 -0
  25. package/esm2022/lib/contracts/viz-config.mjs +3 -0
  26. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +260 -0
  27. package/esm2022/lib/implementations/base-store-visualizer.mjs +76 -0
  28. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +106 -0
  29. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +847 -0
  30. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +92 -0
  31. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +2283 -0
  32. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +126 -0
  33. package/esm2022/lib/implementations/osd/display-pipeline.mjs +143 -0
  34. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +217 -0
  35. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +1780 -0
  36. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +25 -0
  37. package/esm2022/lib/implementations/osd/osd-coords.mjs +53 -0
  38. package/esm2022/lib/implementations/osd/osd-lib.mjs +20 -0
  39. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +1237 -0
  40. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +88 -0
  41. package/esm2022/lib/implementations/osd/slice-cache.mjs +488 -0
  42. package/esm2022/lib/implementations/osd/tile-client.mjs +29 -0
  43. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +37 -0
  44. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +31 -0
  45. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +183 -0
  46. package/esm2022/lib/implementations/plotly/plotly.service.mjs +2137 -0
  47. package/esm2022/lib/implementations/simple-slice-access.service.mjs +99 -0
  48. package/esm2022/lib/models/bezier.mjs +120 -0
  49. package/esm2022/lib/models/class-preset.mjs +46 -0
  50. package/esm2022/lib/models/geometry.mjs +198 -0
  51. package/esm2022/lib/models/region.mjs +166 -0
  52. package/esm2022/lib/models/shape.mjs +53 -0
  53. package/esm2022/lib/plot.utilities.mjs +693 -0
  54. package/esm2022/lib/processing/image-converter.service.mjs +90 -0
  55. package/esm2022/lib/processing/image-crop.mjs +62 -0
  56. package/esm2022/lib/processing/processing-image.mjs +50 -0
  57. package/esm2022/lib/provide-visualization.mjs +63 -0
  58. package/esm2022/lib/region-editor/mask-raster.mjs +95 -0
  59. package/esm2022/lib/region-editor/mask-worker.mjs +10 -0
  60. package/esm2022/lib/region-editor/region-editor.component.mjs +1190 -0
  61. package/esm2022/lib/region-ops.service.mjs +301 -0
  62. package/esm2022/lib/render-orchestrator.mjs +87 -0
  63. package/esm2022/lib/routing-visualizer.service.mjs +533 -0
  64. package/esm2022/lib/store/class-color.util.mjs +52 -0
  65. package/esm2022/lib/store/region-store.service.mjs +1029 -0
  66. package/esm2022/lib/store/visualizer-store.service.mjs +352 -0
  67. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +546 -0
  68. package/esm2022/lib/toolbar/crop/slide-crop.mjs +57 -0
  69. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +115 -0
  70. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +84 -0
  71. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +133 -0
  72. package/esm2022/lib/toolbar/segmentation/ort-runtime-config.mjs +31 -0
  73. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +108 -0
  74. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +159 -0
  75. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +255 -0
  76. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +94 -0
  77. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +188 -0
  78. package/esm2022/lib/toolbar/toolbar.component.mjs +311 -0
  79. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +234 -0
  80. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +499 -0
  81. package/esm2022/lib/toolbar/wand/wand.service.mjs +921 -0
  82. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +157 -0
  83. package/esm2022/lib/visualization.module.mjs +162 -0
  84. package/esm2022/lib/visualizer.component.mjs +1597 -0
  85. package/fesm2022/jax-data-science-sci-image-visualizer-mask-worker-uhepXUhM.mjs +12 -0
  86. package/fesm2022/jax-data-science-sci-image-visualizer-mask-worker-uhepXUhM.mjs.map +1 -0
  87. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-ci1q0xnJ.mjs +327 -0
  88. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-ci1q0xnJ.mjs.map +1 -0
  89. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +21314 -0
  90. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -0
  91. package/fesm2022/mask.worker.js +989 -0
  92. package/fesm2022/onnx-sam.worker.js +202 -0
  93. package/index.d.ts +39 -0
  94. package/lib/channel-histogram/channel-histogram.component.d.ts +112 -0
  95. package/lib/contracts/capabilities.contract.d.ts +30 -0
  96. package/lib/contracts/cell-segmenter.contract.d.ts +40 -0
  97. package/lib/contracts/channel-histogram-api.contract.d.ts +98 -0
  98. package/lib/contracts/colormap-lut.d.ts +21 -0
  99. package/lib/contracts/coordinate-transform.contract.d.ts +43 -0
  100. package/lib/contracts/display-types.d.ts +41 -0
  101. package/lib/contracts/image.contract.d.ts +72 -0
  102. package/lib/contracts/intensity.d.ts +18 -0
  103. package/lib/contracts/plot-type.d.ts +108 -0
  104. package/lib/contracts/ports/image-state.port.d.ts +29 -0
  105. package/lib/contracts/ports/preferences.port.d.ts +19 -0
  106. package/lib/contracts/ports/region-io.port.d.ts +29 -0
  107. package/lib/contracts/ports/tile-access.port.d.ts +27 -0
  108. package/lib/contracts/region-editor-api.contract.d.ts +83 -0
  109. package/lib/contracts/region-overlay.contract.d.ts +47 -0
  110. package/lib/contracts/region-store.contract.d.ts +74 -0
  111. package/lib/contracts/sam.contract.d.ts +98 -0
  112. package/lib/contracts/toolbar-config.d.ts +24 -0
  113. package/lib/contracts/visualizer.contract.d.ts +346 -0
  114. package/lib/contracts/viz-config.d.ts +25 -0
  115. package/lib/hex-color-picker/hex-color-picker.component.d.ts +47 -0
  116. package/lib/implementations/base-store-visualizer.d.ts +71 -0
  117. package/lib/implementations/napari-js/napari-axes-labels.d.ts +47 -0
  118. package/lib/implementations/napari-js/napari-region-overlay.d.ts +115 -0
  119. package/lib/implementations/napari-js/napari-scale-bar.d.ts +31 -0
  120. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +455 -0
  121. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +46 -0
  122. package/lib/implementations/osd/display-pipeline.d.ts +47 -0
  123. package/lib/implementations/osd/histogram-sampler.d.ts +85 -0
  124. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +476 -0
  125. package/lib/implementations/osd/osd-coordinate-transform.d.ts +17 -0
  126. package/lib/implementations/osd/osd-coords.d.ts +16 -0
  127. package/lib/implementations/osd/osd-lib.d.ts +19 -0
  128. package/lib/implementations/osd/osd-region-overlay.d.ts +191 -0
  129. package/lib/implementations/osd/osd-scale-bar.d.ts +17 -0
  130. package/lib/implementations/osd/slice-cache.d.ts +161 -0
  131. package/lib/implementations/osd/tile-client.d.ts +32 -0
  132. package/lib/implementations/plotly/plotly-coordinate-transform.d.ts +19 -0
  133. package/lib/implementations/plotly/plotly-region-overlay.d.ts +23 -0
  134. package/lib/implementations/plotly/plotly-trace-builders.d.ts +60 -0
  135. package/lib/implementations/plotly/plotly.service.d.ts +594 -0
  136. package/lib/implementations/simple-slice-access.service.d.ts +64 -0
  137. package/lib/models/bezier.d.ts +59 -0
  138. package/lib/models/class-preset.d.ts +39 -0
  139. package/lib/models/geometry.d.ts +66 -0
  140. package/lib/models/region.d.ts +132 -0
  141. package/lib/models/shape.d.ts +44 -0
  142. package/lib/plot.utilities.d.ts +107 -0
  143. package/lib/processing/image-converter.service.d.ts +28 -0
  144. package/lib/processing/image-crop.d.ts +18 -0
  145. package/lib/processing/processing-image.d.ts +17 -0
  146. package/lib/provide-visualization.d.ts +34 -0
  147. package/lib/region-editor/mask-raster.d.ts +61 -0
  148. package/lib/region-editor/mask-worker.d.ts +7 -0
  149. package/lib/region-editor/region-editor.component.d.ts +305 -0
  150. package/lib/region-ops.service.d.ts +92 -0
  151. package/lib/render-orchestrator.d.ts +59 -0
  152. package/lib/routing-visualizer.service.d.ts +227 -0
  153. package/lib/store/class-color.util.d.ts +26 -0
  154. package/lib/store/region-store.service.d.ts +315 -0
  155. package/lib/store/visualizer-store.service.d.ts +123 -0
  156. package/lib/toolbar/brush/brush-tool.service.d.ts +143 -0
  157. package/lib/toolbar/crop/slide-crop.d.ts +30 -0
  158. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +32 -0
  159. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +39 -0
  160. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +25 -0
  161. package/lib/toolbar/segmentation/ort-runtime-config.d.ts +4 -0
  162. package/lib/toolbar/segmentation/sam-model-registry.d.ts +36 -0
  163. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +48 -0
  164. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +59 -0
  165. package/lib/toolbar/segmentation/sam-prompt.d.ts +34 -0
  166. package/lib/toolbar/segmentation/sam-tool.service.d.ts +50 -0
  167. package/lib/toolbar/toolbar.component.d.ts +167 -0
  168. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +64 -0
  169. package/lib/toolbar/wand/wand-tool.service.d.ts +149 -0
  170. package/lib/toolbar/wand/wand.service.d.ts +133 -0
  171. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +49 -0
  172. package/lib/visualization.module.d.ts +45 -0
  173. package/lib/visualizer.component.d.ts +378 -0
  174. package/package.json +73 -0
  175. package/src/lib/assets/3d-coordinates.svg +49 -0
  176. package/src/lib/assets/cells.svg +1 -0
  177. package/src/lib/assets/click.svg +1 -0
  178. package/src/lib/assets/colormap-luts.json +1 -0
  179. package/src/lib/assets/contour.svg +48 -0
  180. package/src/lib/assets/cube-3d.svg +1 -0
  181. package/src/lib/assets/edit-selection-white.svg +47 -0
  182. package/src/lib/assets/heatmap.svg +1 -0
  183. package/src/lib/assets/icons/colormap-Pastel1.png +0 -0
  184. package/src/lib/assets/icons/colormap-accent.png +0 -0
  185. package/src/lib/assets/icons/colormap-afmhot.png +0 -0
  186. package/src/lib/assets/icons/colormap-autumn.png +0 -0
  187. package/src/lib/assets/icons/colormap-berlin.png +0 -0
  188. package/src/lib/assets/icons/colormap-binary.png +0 -0
  189. package/src/lib/assets/icons/colormap-blackbody.png +0 -0
  190. package/src/lib/assets/icons/colormap-bluered.png +0 -0
  191. package/src/lib/assets/icons/colormap-blues.png +0 -0
  192. package/src/lib/assets/icons/colormap-bone.png +0 -0
  193. package/src/lib/assets/icons/colormap-brbg.png +0 -0
  194. package/src/lib/assets/icons/colormap-brg.png +0 -0
  195. package/src/lib/assets/icons/colormap-bugn.png +0 -0
  196. package/src/lib/assets/icons/colormap-bupu.png +0 -0
  197. package/src/lib/assets/icons/colormap-bwr.png +0 -0
  198. package/src/lib/assets/icons/colormap-cividis.png +0 -0
  199. package/src/lib/assets/icons/colormap-cmrmap.png +0 -0
  200. package/src/lib/assets/icons/colormap-cool.png +0 -0
  201. package/src/lib/assets/icons/colormap-coolwarm.png +0 -0
  202. package/src/lib/assets/icons/colormap-copper.png +0 -0
  203. package/src/lib/assets/icons/colormap-cubehelix.png +0 -0
  204. package/src/lib/assets/icons/colormap-dark2.png +0 -0
  205. package/src/lib/assets/icons/colormap-earth.png +0 -0
  206. package/src/lib/assets/icons/colormap-electric.png +0 -0
  207. package/src/lib/assets/icons/colormap-flag.png +0 -0
  208. package/src/lib/assets/icons/colormap-gist_earth.png +0 -0
  209. package/src/lib/assets/icons/colormap-gist_gray.png +0 -0
  210. package/src/lib/assets/icons/colormap-gist_heat.png +0 -0
  211. package/src/lib/assets/icons/colormap-gist_ncar.png +0 -0
  212. package/src/lib/assets/icons/colormap-gist_rainbow.png +0 -0
  213. package/src/lib/assets/icons/colormap-gist_stern.png +0 -0
  214. package/src/lib/assets/icons/colormap-gist_yarg.png +0 -0
  215. package/src/lib/assets/icons/colormap-gnbu.png +0 -0
  216. package/src/lib/assets/icons/colormap-gnuplot.png +0 -0
  217. package/src/lib/assets/icons/colormap-gnuplot2.png +0 -0
  218. package/src/lib/assets/icons/colormap-gray.png +0 -0
  219. package/src/lib/assets/icons/colormap-greens-inv.png +0 -0
  220. package/src/lib/assets/icons/colormap-greens.png +0 -0
  221. package/src/lib/assets/icons/colormap-greys-inv.png +0 -0
  222. package/src/lib/assets/icons/colormap-greys.png +0 -0
  223. package/src/lib/assets/icons/colormap-hot.png +0 -0
  224. package/src/lib/assets/icons/colormap-hsv.png +0 -0
  225. package/src/lib/assets/icons/colormap-inferno.png +0 -0
  226. package/src/lib/assets/icons/colormap-jet.png +0 -0
  227. package/src/lib/assets/icons/colormap-magma.png +0 -0
  228. package/src/lib/assets/icons/colormap-managua.png +0 -0
  229. package/src/lib/assets/icons/colormap-nipy_spectral.png +0 -0
  230. package/src/lib/assets/icons/colormap-ocean.png +0 -0
  231. package/src/lib/assets/icons/colormap-oranges.png +0 -0
  232. package/src/lib/assets/icons/colormap-orrd.png +0 -0
  233. package/src/lib/assets/icons/colormap-pastel2.png +0 -0
  234. package/src/lib/assets/icons/colormap-picnic.png +0 -0
  235. package/src/lib/assets/icons/colormap-pink.png +0 -0
  236. package/src/lib/assets/icons/colormap-piyg.png +0 -0
  237. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  238. package/src/lib/assets/icons/colormap-plasma.png +0 -0
  239. package/src/lib/assets/icons/colormap-portland.png +0 -0
  240. package/src/lib/assets/icons/colormap-prgn.png +0 -0
  241. package/src/lib/assets/icons/colormap-prism.png +0 -0
  242. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  243. package/src/lib/assets/icons/colormap-pubugn.png +0 -0
  244. package/src/lib/assets/icons/colormap-puor.png +0 -0
  245. package/src/lib/assets/icons/colormap-purd.png +0 -0
  246. package/src/lib/assets/icons/colormap-purples.png +0 -0
  247. package/src/lib/assets/icons/colormap-rainbow.png +0 -0
  248. package/src/lib/assets/icons/colormap-rdbu.png +0 -0
  249. package/src/lib/assets/icons/colormap-rdgy.png +0 -0
  250. package/src/lib/assets/icons/colormap-rdpu.png +0 -0
  251. package/src/lib/assets/icons/colormap-rdylbu.png +0 -0
  252. package/src/lib/assets/icons/colormap-rdylgn.png +0 -0
  253. package/src/lib/assets/icons/colormap-reds.png +0 -0
  254. package/src/lib/assets/icons/colormap-seismic.png +0 -0
  255. package/src/lib/assets/icons/colormap-set1.png +0 -0
  256. package/src/lib/assets/icons/colormap-set2.png +0 -0
  257. package/src/lib/assets/icons/colormap-set3.png +0 -0
  258. package/src/lib/assets/icons/colormap-spectral.png +0 -0
  259. package/src/lib/assets/icons/colormap-spring.png +0 -0
  260. package/src/lib/assets/icons/colormap-summer.png +0 -0
  261. package/src/lib/assets/icons/colormap-tab10.png +0 -0
  262. package/src/lib/assets/icons/colormap-tab20.png +0 -0
  263. package/src/lib/assets/icons/colormap-tab20b.png +0 -0
  264. package/src/lib/assets/icons/colormap-tab20c.png +0 -0
  265. package/src/lib/assets/icons/colormap-terrain.png +0 -0
  266. package/src/lib/assets/icons/colormap-turbo.png +0 -0
  267. package/src/lib/assets/icons/colormap-twilight.png +0 -0
  268. package/src/lib/assets/icons/colormap-twilight_shifted.png +0 -0
  269. package/src/lib/assets/icons/colormap-vanimo.png +0 -0
  270. package/src/lib/assets/icons/colormap-viridis.png +0 -0
  271. package/src/lib/assets/icons/colormap-winter.png +0 -0
  272. package/src/lib/assets/icons/colormap-wistia.png +0 -0
  273. package/src/lib/assets/icons/colormap-ylgn.png +0 -0
  274. package/src/lib/assets/icons/colormap-ylgnbu-inv.png +0 -0
  275. package/src/lib/assets/icons/colormap-ylgnbu.png +0 -0
  276. package/src/lib/assets/icons/colormap-ylorbr.png +0 -0
  277. package/src/lib/assets/icons/colormap-ylorrd-inv.png +0 -0
  278. package/src/lib/assets/icons/colormap-ylorrd.png +0 -0
  279. package/src/lib/assets/interactive-segmentation-cursor.svg +1 -0
  280. package/src/lib/assets/invert.svg +1 -0
  281. package/src/lib/assets/isosurface.svg +7 -0
  282. package/src/lib/assets/mask.svg +1 -0
  283. package/src/lib/assets/paintbrush.svg +1 -0
  284. package/src/lib/assets/picture-segmentation.svg +43 -0
  285. package/src/lib/assets/polygon-vertices.svg +13 -0
  286. package/src/lib/assets/polyline.svg +3 -0
  287. package/src/lib/assets/redo.svg +39 -0
  288. package/src/lib/assets/region-editor.svg +37 -0
  289. package/src/lib/assets/region-move.svg +7 -0
  290. package/src/lib/assets/smooth.svg +56 -0
  291. package/src/lib/assets/spline-chart.svg +7 -0
  292. package/src/lib/assets/surface.svg +37 -0
  293. package/src/lib/assets/test/download-379.svg +1 -0
  294. package/src/lib/assets/test/download-98.svg +1 -0
  295. package/src/lib/assets/test/json-1.svg +1 -0
  296. package/src/lib/assets/test/load-53.svg +1 -0
  297. package/src/lib/assets/test/mask-44.svg +1 -0
  298. package/src/lib/assets/test/mask-download-44.svg +15 -0
  299. package/src/lib/assets/test/mask-save-44.svg +11 -0
  300. package/src/lib/assets/test/overlay-1.svg +1 -0
  301. package/src/lib/assets/test/overlay-4.svg +1 -0
  302. package/src/lib/assets/test/region-26.svg +1 -0
  303. package/src/lib/assets/test/save-56.svg +1 -0
  304. package/src/lib/assets/test/upload-43.svg +1 -0
  305. package/src/lib/assets/to-bezier.svg +15 -0
  306. package/src/lib/assets/to-polygon.svg +11 -0
  307. package/src/lib/assets/undo.svg +38 -0
  308. package/src/lib/assets/vertex-add.svg +12 -0
  309. package/src/lib/assets/vertex-delete.svg +12 -0
  310. package/src/lib/assets/wand.svg +54 -0
  311. package/src/lib/assets/zoom-box.svg +10 -0
@@ -0,0 +1,25 @@
1
+ import { elementToImage, imageToElement } from './osd-coords';
2
+ /**
3
+ * OpenSeadragon implementation of {@link ICoordinateTransform}. "Data coords"
4
+ * here are image-pixel coordinates (OSD's native shape space), obtained from the
5
+ * viewport API. This is the reason the tools can run over OSD at all: the
6
+ * viewport gives a clean screen<->image mapping that holds across pan/zoom.
7
+ */
8
+ export class OsdCoordinateTransform {
9
+ constructor(viewer) {
10
+ this.viewer = viewer;
11
+ }
12
+ isReady() {
13
+ return !!this.viewer?.viewport && this.viewer.world?.getItemCount() > 0;
14
+ }
15
+ clientToData(clientX, clientY) {
16
+ const rect = this.viewer.canvas.getBoundingClientRect();
17
+ return elementToImage(this.viewer, clientX - rect.left, clientY - rect.top);
18
+ }
19
+ dataLengthToScreen(dataLength) {
20
+ const a = imageToElement(this.viewer, 0, 0);
21
+ const b = imageToElement(this.viewer, dataLength, 0);
22
+ return Math.abs(b.x - a.x);
23
+ }
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLWNvb3JkaW5hdGUtdHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC1jb29yZGluYXRlLXRyYW5zZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU5RDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFFakMsWUFBb0IsTUFBVztRQUFYLFdBQU0sR0FBTixNQUFNLENBQUs7SUFBRyxDQUFDO0lBRW5DLE9BQU87UUFDTCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFlLEVBQUUsT0FBZTtRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBa0I7UUFDbkMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvb3JkaW5hdGVUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY29vcmRpbmF0ZS10cmFuc2Zvcm0uY29udHJhY3QnO1xuaW1wb3J0IHsgZWxlbWVudFRvSW1hZ2UsIGltYWdlVG9FbGVtZW50IH0gZnJvbSAnLi9vc2QtY29vcmRzJztcblxuLyoqXG4gKiBPcGVuU2VhZHJhZ29uIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBJQ29vcmRpbmF0ZVRyYW5zZm9ybX0uIFwiRGF0YSBjb29yZHNcIlxuICogaGVyZSBhcmUgaW1hZ2UtcGl4ZWwgY29vcmRpbmF0ZXMgKE9TRCdzIG5hdGl2ZSBzaGFwZSBzcGFjZSksIG9idGFpbmVkIGZyb20gdGhlXG4gKiB2aWV3cG9ydCBBUEkuIFRoaXMgaXMgdGhlIHJlYXNvbiB0aGUgdG9vbHMgY2FuIHJ1biBvdmVyIE9TRCBhdCBhbGw6IHRoZVxuICogdmlld3BvcnQgZ2l2ZXMgYSBjbGVhbiBzY3JlZW48LT5pbWFnZSBtYXBwaW5nIHRoYXQgaG9sZHMgYWNyb3NzIHBhbi96b29tLlxuICovXG5leHBvcnQgY2xhc3MgT3NkQ29vcmRpbmF0ZVRyYW5zZm9ybSBpbXBsZW1lbnRzIElDb29yZGluYXRlVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZpZXdlcjogYW55KSB7fVxuXG4gIGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy52aWV3ZXI/LnZpZXdwb3J0ICYmIHRoaXMudmlld2VyLndvcmxkPy5nZXRJdGVtQ291bnQoKSA+IDA7XG4gIH1cblxuICBjbGllbnRUb0RhdGEoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnZpZXdlci5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIGVsZW1lbnRUb0ltYWdlKHRoaXMudmlld2VyLCBjbGllbnRYIC0gcmVjdC5sZWZ0LCBjbGllbnRZIC0gcmVjdC50b3ApO1xuICB9XG5cbiAgZGF0YUxlbmd0aFRvU2NyZWVuKGRhdGFMZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYSA9IGltYWdlVG9FbGVtZW50KHRoaXMudmlld2VyLCAwLCAwKTtcbiAgICBjb25zdCBiID0gaW1hZ2VUb0VsZW1lbnQodGhpcy52aWV3ZXIsIGRhdGFMZW5ndGgsIDApO1xuICAgIHJldHVybiBNYXRoLmFicyhiLnggLSBhLngpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { OSD } from './osd-lib';
2
+ /**
3
+ * Coordinate conversions between screen (viewer-element) pixels, the OSD viewport,
4
+ * and image (data) pixels.
5
+ *
6
+ * With the stack-slice cache the world holds several tiled images at once, which
7
+ * makes the `Viewport.*` image conversions ambiguous — OpenSeadragon logs
8
+ * "not accurate with multi-image; use TiledImage.* instead". All slices share the
9
+ * same dimensions and placement, so we route the image<->viewport step through a
10
+ * single reference tiled image (world item 0) and keep the viewport<->element
11
+ * step on the viewport (which is unambiguous). Falls back to the viewport methods
12
+ * when the world is empty.
13
+ */
14
+ const osd = OSD;
15
+ /** Reference tiled image for image<->viewport conversions (any slice works since
16
+ * they share geometry). */
17
+ function refItem(viewer) {
18
+ return viewer?.world?.getItemCount?.() > 0 ? viewer.world.getItemAt(0) : null;
19
+ }
20
+ /** Viewer-element pixel -> image (data) coordinates. */
21
+ export function elementToImage(viewer, x, y) {
22
+ const vp = viewer.viewport;
23
+ const pt = new osd.Point(x, y);
24
+ const item = refItem(viewer);
25
+ const img = item
26
+ ? item.viewportToImageCoordinates(vp.viewerElementToViewportCoordinates(pt))
27
+ : vp.viewerElementToImageCoordinates(pt);
28
+ return { x: img.x, y: img.y };
29
+ }
30
+ /** Image (data) coordinates -> viewer-element pixel point. */
31
+ export function imageToElement(viewer, x, y) {
32
+ const vp = viewer.viewport;
33
+ const pt = new osd.Point(x, y);
34
+ const item = refItem(viewer);
35
+ const p = item
36
+ ? vp.viewportToViewerElementCoordinates(item.imageToViewportCoordinates(pt))
37
+ : vp.imageToViewerElementCoordinates(pt);
38
+ return { x: p.x, y: p.y };
39
+ }
40
+ /** Image-space rectangle -> viewport rectangle (for fitBounds). */
41
+ export function imageRectToViewport(viewer, x, y, w, h) {
42
+ const rect = new osd.Rect(x, y, w, h);
43
+ const item = refItem(viewer);
44
+ return item ? item.imageToViewportRectangle(rect) : viewer.viewport.imageToViewportRectangle(rect);
45
+ }
46
+ /** Viewport rectangle -> image (data) rectangle. Routes through world item 0 so
47
+ * it stays accurate when the world holds multiple images (stack slices /
48
+ * per-channel layers); falls back to the viewport when the world is empty. */
49
+ export function viewportRectToImage(viewer, vpRect) {
50
+ const item = refItem(viewer);
51
+ return item ? item.viewportToImageRectangle(vpRect) : viewer.viewport.viewportToImageRectangle(vpRect);
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLWNvb3Jkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL29zZC9vc2QtY29vcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLEdBQUcsR0FBUSxHQUFHLENBQUM7QUFFckI7NEJBQzRCO0FBQzVCLFNBQVMsT0FBTyxDQUFDLE1BQVc7SUFDMUIsT0FBTyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hGLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFXLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDOUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUMzQixNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJO1FBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNoQyxDQUFDO0FBRUQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBVyxFQUFFLENBQVMsRUFBRSxDQUFTO0lBQzlELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSTtRQUNaLENBQUMsQ0FBQyxFQUFFLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxFQUFFLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUVELG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBVyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDekYsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JHLENBQUM7QUFFRDs7K0VBRStFO0FBQy9FLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFXLEVBQUUsTUFBVztJQUMxRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT1NEIH0gZnJvbSAnLi9vc2QtbGliJztcblxuLyoqXG4gKiBDb29yZGluYXRlIGNvbnZlcnNpb25zIGJldHdlZW4gc2NyZWVuICh2aWV3ZXItZWxlbWVudCkgcGl4ZWxzLCB0aGUgT1NEIHZpZXdwb3J0LFxuICogYW5kIGltYWdlIChkYXRhKSBwaXhlbHMuXG4gKlxuICogV2l0aCB0aGUgc3RhY2stc2xpY2UgY2FjaGUgdGhlIHdvcmxkIGhvbGRzIHNldmVyYWwgdGlsZWQgaW1hZ2VzIGF0IG9uY2UsIHdoaWNoXG4gKiBtYWtlcyB0aGUgYFZpZXdwb3J0LipgIGltYWdlIGNvbnZlcnNpb25zIGFtYmlndW91cyDigJQgT3BlblNlYWRyYWdvbiBsb2dzXG4gKiBcIm5vdCBhY2N1cmF0ZSB3aXRoIG11bHRpLWltYWdlOyB1c2UgVGlsZWRJbWFnZS4qIGluc3RlYWRcIi4gQWxsIHNsaWNlcyBzaGFyZSB0aGVcbiAqIHNhbWUgZGltZW5zaW9ucyBhbmQgcGxhY2VtZW50LCBzbyB3ZSByb3V0ZSB0aGUgaW1hZ2U8LT52aWV3cG9ydCBzdGVwIHRocm91Z2ggYVxuICogc2luZ2xlIHJlZmVyZW5jZSB0aWxlZCBpbWFnZSAod29ybGQgaXRlbSAwKSBhbmQga2VlcCB0aGUgdmlld3BvcnQ8LT5lbGVtZW50XG4gKiBzdGVwIG9uIHRoZSB2aWV3cG9ydCAod2hpY2ggaXMgdW5hbWJpZ3VvdXMpLiBGYWxscyBiYWNrIHRvIHRoZSB2aWV3cG9ydCBtZXRob2RzXG4gKiB3aGVuIHRoZSB3b3JsZCBpcyBlbXB0eS5cbiAqL1xuY29uc3Qgb3NkOiBhbnkgPSBPU0Q7XG5cbi8qKiBSZWZlcmVuY2UgdGlsZWQgaW1hZ2UgZm9yIGltYWdlPC0+dmlld3BvcnQgY29udmVyc2lvbnMgKGFueSBzbGljZSB3b3JrcyBzaW5jZVxuICogIHRoZXkgc2hhcmUgZ2VvbWV0cnkpLiAqL1xuZnVuY3Rpb24gcmVmSXRlbSh2aWV3ZXI6IGFueSk6IGFueSB8IG51bGwge1xuICByZXR1cm4gdmlld2VyPy53b3JsZD8uZ2V0SXRlbUNvdW50Py4oKSA+IDAgPyB2aWV3ZXIud29ybGQuZ2V0SXRlbUF0KDApIDogbnVsbDtcbn1cblxuLyoqIFZpZXdlci1lbGVtZW50IHBpeGVsIC0+IGltYWdlIChkYXRhKSBjb29yZGluYXRlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50VG9JbWFnZSh2aWV3ZXI6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICBjb25zdCB2cCA9IHZpZXdlci52aWV3cG9ydDtcbiAgY29uc3QgcHQgPSBuZXcgb3NkLlBvaW50KHgsIHkpO1xuICBjb25zdCBpdGVtID0gcmVmSXRlbSh2aWV3ZXIpO1xuICBjb25zdCBpbWcgPSBpdGVtXG4gICAgPyBpdGVtLnZpZXdwb3J0VG9JbWFnZUNvb3JkaW5hdGVzKHZwLnZpZXdlckVsZW1lbnRUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMocHQpKVxuICAgIDogdnAudmlld2VyRWxlbWVudFRvSW1hZ2VDb29yZGluYXRlcyhwdCk7XG4gIHJldHVybiB7IHg6IGltZy54LCB5OiBpbWcueSB9O1xufVxuXG4vKiogSW1hZ2UgKGRhdGEpIGNvb3JkaW5hdGVzIC0+IHZpZXdlci1lbGVtZW50IHBpeGVsIHBvaW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltYWdlVG9FbGVtZW50KHZpZXdlcjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gIGNvbnN0IHZwID0gdmlld2VyLnZpZXdwb3J0O1xuICBjb25zdCBwdCA9IG5ldyBvc2QuUG9pbnQoeCwgeSk7XG4gIGNvbnN0IGl0ZW0gPSByZWZJdGVtKHZpZXdlcik7XG4gIGNvbnN0IHAgPSBpdGVtXG4gICAgPyB2cC52aWV3cG9ydFRvVmlld2VyRWxlbWVudENvb3JkaW5hdGVzKGl0ZW0uaW1hZ2VUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMocHQpKVxuICAgIDogdnAuaW1hZ2VUb1ZpZXdlckVsZW1lbnRDb29yZGluYXRlcyhwdCk7XG4gIHJldHVybiB7IHg6IHAueCwgeTogcC55IH07XG59XG5cbi8qKiBJbWFnZS1zcGFjZSByZWN0YW5nbGUgLT4gdmlld3BvcnQgcmVjdGFuZ2xlIChmb3IgZml0Qm91bmRzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlY3RUb1ZpZXdwb3J0KHZpZXdlcjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIpOiBhbnkge1xuICBjb25zdCByZWN0ID0gbmV3IG9zZC5SZWN0KHgsIHksIHcsIGgpO1xuICBjb25zdCBpdGVtID0gcmVmSXRlbSh2aWV3ZXIpO1xuICByZXR1cm4gaXRlbSA/IGl0ZW0uaW1hZ2VUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIDogdmlld2VyLnZpZXdwb3J0LmltYWdlVG9WaWV3cG9ydFJlY3RhbmdsZShyZWN0KTtcbn1cblxuLyoqIFZpZXdwb3J0IHJlY3RhbmdsZSAtPiBpbWFnZSAoZGF0YSkgcmVjdGFuZ2xlLiBSb3V0ZXMgdGhyb3VnaCB3b3JsZCBpdGVtIDAgc29cbiAqICBpdCBzdGF5cyBhY2N1cmF0ZSB3aGVuIHRoZSB3b3JsZCBob2xkcyBtdWx0aXBsZSBpbWFnZXMgKHN0YWNrIHNsaWNlcyAvXG4gKiAgcGVyLWNoYW5uZWwgbGF5ZXJzKTsgZmFsbHMgYmFjayB0byB0aGUgdmlld3BvcnQgd2hlbiB0aGUgd29ybGQgaXMgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdmlld3BvcnRSZWN0VG9JbWFnZSh2aWV3ZXI6IGFueSwgdnBSZWN0OiBhbnkpOiBhbnkge1xuICBjb25zdCBpdGVtID0gcmVmSXRlbSh2aWV3ZXIpO1xuICByZXR1cm4gaXRlbSA/IGl0ZW0udmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHZwUmVjdCkgOiB2aWV3ZXIudmlld3BvcnQudmlld3BvcnRUb0ltYWdlUmVjdGFuZ2xlKHZwUmVjdCk7XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import * as OpenSeadragon from 'openseadragon';
2
+ /**
3
+ * The real OpenSeadragon object, normalized for the packaged (FESM) build.
4
+ *
5
+ * OpenSeadragon ships as plain CommonJS (`module.exports = OpenSeadragon`, no
6
+ * `__esModule` flag). Bundled into this library's FESM and re-bundled by a
7
+ * consuming app, `import * as OpenSeadragon` resolves to a synthesized ES
8
+ * namespace whose only reliable slot is `.default` (the real `module.exports`).
9
+ * The factory itself and every static member (Viewer, Point, Rect, TileSource, …)
10
+ * live on that object, NOT on the namespace — so `OpenSeadragon(...)` or
11
+ * `new OpenSeadragon.Point()` against the namespace fail once packaged
12
+ * ("is not a function" / "not a constructor"). Normalize ONCE here and import
13
+ * { OSD } wherever a runtime VALUE is needed; import the `openseadragon` namespace
14
+ * directly only for its TYPES (e.g. `OpenSeadragon.Viewer`).
15
+ *
16
+ * (plotly.js-dist-min needs no equivalent: it sets `__esModule`, so webpack gives
17
+ * it real named exports and plain member access works.)
18
+ */
19
+ export const OSD = OpenSeadragon.default ?? OpenSeadragon;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLWxpYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL29zZC9vc2QtbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBRS9DOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUNiLGFBQXFCLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIE9wZW5TZWFkcmFnb24gZnJvbSAnb3BlbnNlYWRyYWdvbic7XG5cbi8qKlxuICogVGhlIHJlYWwgT3BlblNlYWRyYWdvbiBvYmplY3QsIG5vcm1hbGl6ZWQgZm9yIHRoZSBwYWNrYWdlZCAoRkVTTSkgYnVpbGQuXG4gKlxuICogT3BlblNlYWRyYWdvbiBzaGlwcyBhcyBwbGFpbiBDb21tb25KUyAoYG1vZHVsZS5leHBvcnRzID0gT3BlblNlYWRyYWdvbmAsIG5vXG4gKiBgX19lc01vZHVsZWAgZmxhZykuIEJ1bmRsZWQgaW50byB0aGlzIGxpYnJhcnkncyBGRVNNIGFuZCByZS1idW5kbGVkIGJ5IGFcbiAqIGNvbnN1bWluZyBhcHAsIGBpbXBvcnQgKiBhcyBPcGVuU2VhZHJhZ29uYCByZXNvbHZlcyB0byBhIHN5bnRoZXNpemVkIEVTXG4gKiBuYW1lc3BhY2Ugd2hvc2Ugb25seSByZWxpYWJsZSBzbG90IGlzIGAuZGVmYXVsdGAgKHRoZSByZWFsIGBtb2R1bGUuZXhwb3J0c2ApLlxuICogVGhlIGZhY3RvcnkgaXRzZWxmIGFuZCBldmVyeSBzdGF0aWMgbWVtYmVyIChWaWV3ZXIsIFBvaW50LCBSZWN0LCBUaWxlU291cmNlLCDigKYpXG4gKiBsaXZlIG9uIHRoYXQgb2JqZWN0LCBOT1Qgb24gdGhlIG5hbWVzcGFjZSDigJQgc28gYE9wZW5TZWFkcmFnb24oLi4uKWAgb3JcbiAqIGBuZXcgT3BlblNlYWRyYWdvbi5Qb2ludCgpYCBhZ2FpbnN0IHRoZSBuYW1lc3BhY2UgZmFpbCBvbmNlIHBhY2thZ2VkXG4gKiAoXCJpcyBub3QgYSBmdW5jdGlvblwiIC8gXCJub3QgYSBjb25zdHJ1Y3RvclwiKS4gTm9ybWFsaXplIE9OQ0UgaGVyZSBhbmQgaW1wb3J0XG4gKiB7IE9TRCB9IHdoZXJldmVyIGEgcnVudGltZSBWQUxVRSBpcyBuZWVkZWQ7IGltcG9ydCB0aGUgYG9wZW5zZWFkcmFnb25gIG5hbWVzcGFjZVxuICogZGlyZWN0bHkgb25seSBmb3IgaXRzIFRZUEVTIChlLmcuIGBPcGVuU2VhZHJhZ29uLlZpZXdlcmApLlxuICpcbiAqIChwbG90bHkuanMtZGlzdC1taW4gbmVlZHMgbm8gZXF1aXZhbGVudDogaXQgc2V0cyBgX19lc01vZHVsZWAsIHNvIHdlYnBhY2sgZ2l2ZXNcbiAqIGl0IHJlYWwgbmFtZWQgZXhwb3J0cyBhbmQgcGxhaW4gbWVtYmVyIGFjY2VzcyB3b3Jrcy4pXG4gKi9cbmV4cG9ydCBjb25zdCBPU0Q6IHR5cGVvZiBPcGVuU2VhZHJhZ29uID1cbiAgKE9wZW5TZWFkcmFnb24gYXMgYW55KS5kZWZhdWx0ID8/IE9wZW5TZWFkcmFnb247XG4iXX0=