@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,14 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /** The standard LUT pseudo-colours (mirrors Fiji's Merge Channels palette) for
3
+ * quick per-channel assignment. */
4
+ export const LUT_COLORS = [
5
+ { name: 'Red', color: '#ff0000' },
6
+ { name: 'Green', color: '#00ff00' },
7
+ { name: 'Blue', color: '#0000ff' },
8
+ { name: 'Gray', color: '#ffffff' },
9
+ { name: 'Cyan', color: '#00ffff' },
10
+ { name: 'Magenta', color: '#ff00ff' },
11
+ { name: 'Yellow', color: '#ffff00' },
12
+ ];
13
+ export const CHANNEL_HISTOGRAM_API = new InjectionToken('CHANNEL_HISTOGRAM_API');
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQi9DO29DQUNvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQW1EO0lBQ3hFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQ3JDLENBQUM7QUFvRkYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IENvbG9ybWFwTm9kZSB9IGZyb20gJy4vZGlzcGxheS10eXBlcyc7XG5cbi8qKlxuICogRGlzcGxheSBzdGF0ZSBmb3Igb25lIGltYWdlIGNoYW5uZWwgaW4gdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUuXG4gKiBgbWluYC9gbWF4YCBhcmUgdGhlIGRpc3BsYXkgd2luZG93IChjb250cmFzdC9icmlnaHRuZXNzKSBpbiByYXcgMC4uMjU1IHNwYWNlO1xuICogYGdhbW1hYCBzaGFwZXMgdGhlIHRyYW5zZmVyIGN1cnZlOyBgY29sb3JgIGlzIHRoZSBjaGFubmVsJ3MgZGlzcGxheSB0aW50XG4gKiAodXNlZCB3aGVuIGNvbXBvc2l0aW5nIG11bHRpcGxlIGNoYW5uZWxzKTsgYHZpc2libGVgIHRvZ2dsZXMgaXQgb24vb2ZmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDaGFubmVsU3RhdGUge1xuICBpbmRleDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IHRpbnQgYXMgYCNycmdnYmJgLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIGdhbW1hOiBudW1iZXI7XG4gIHZpc2libGU6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgc3RhbmRhcmQgTFVUIHBzZXVkby1jb2xvdXJzIChtaXJyb3JzIEZpamkncyBNZXJnZSBDaGFubmVscyBwYWxldHRlKSBmb3JcbiAqICBxdWljayBwZXItY2hhbm5lbCBhc3NpZ25tZW50LiAqL1xuZXhwb3J0IGNvbnN0IExVVF9DT0xPUlM6IFJlYWRvbmx5QXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbG9yOiBzdHJpbmcgfT4gPSBbXG4gIHsgbmFtZTogJ1JlZCcsIGNvbG9yOiAnI2ZmMDAwMCcgfSxcbiAgeyBuYW1lOiAnR3JlZW4nLCBjb2xvcjogJyMwMGZmMDAnIH0sXG4gIHsgbmFtZTogJ0JsdWUnLCBjb2xvcjogJyMwMDAwZmYnIH0sXG4gIHsgbmFtZTogJ0dyYXknLCBjb2xvcjogJyNmZmZmZmYnIH0sXG4gIHsgbmFtZTogJ0N5YW4nLCBjb2xvcjogJyMwMGZmZmYnIH0sXG4gIHsgbmFtZTogJ01hZ2VudGEnLCBjb2xvcjogJyNmZjAwZmYnIH0sXG4gIHsgbmFtZTogJ1llbGxvdycsIGNvbG9yOiAnI2ZmZmYwMCcgfSxcbl07XG5cbi8qKiBBIGJpbm5lZCBpbnRlbnNpdHkgaGlzdG9ncmFtIGZvciBvbmUgY2hhbm5lbC5cbiAqXG4gKiBUaGUgOC1iaXQgY2xpZW50IHBhdGggKFJHQiAvIDgtYml0IGdyYXlzY2FsZSwgc2FtcGxlZCBmcm9tIGRpc3BsYXllZCB0aWxlcylcbiAqIGxlYXZlcyB0aGUgbmF0aXZlIGZpZWxkcyB1bmRlZmluZWQgYW5kIGBiaW5zYCBzcGFuIDAuLjI1NS4gVGhlIG5hdGl2ZSBwYXRoXG4gKiAoPjgtYml0IGltYWdlcywgZnJvbSB0aGUgc2VydmVyIGAvaGlzdG9ncmFtYCBlbmRwb2ludCkgZmlsbHMgYGJpdERlcHRoYCxcbiAqIGByYW5nZU1pbmAvYHJhbmdlTWF4YCAodGhlIHBpeGVsLXR5cGUgc3BhbiB0aGUgYmlucyBjb3ZlcikgYW5kXG4gKiBgb2JzZXJ2ZWRNaW5gL2BvYnNlcnZlZE1heGAgKHRoZSBhY3R1YWwgZXh0cmVtZXMgc2VlbiksIHNvIHRoZSBkaWFsb2cgY2FuXG4gKiBsYWJlbCB0aGUgd2luZG93L2F4aXMgaW4gbmF0aXZlIHVuaXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSGlzdG9ncmFtIHtcbiAgLyoqIExlZnQgZWRnZSBvZiBlYWNoIGJpbiAoMC4uMjU1IGZvciB0aGUgOC1iaXQgcGF0aCwgbmF0aXZlIHVuaXRzIG90aGVyd2lzZSkuICovXG4gIGJpbnM6IG51bWJlcltdO1xuICAvKiogUGl4ZWwgY291bnQgcGVyIGJpbiwgbGVuZ3RoID0gYmluIGNvdW50LiAqL1xuICBjb3VudHM6IG51bWJlcltdO1xuICAvKiogTGFyZ2VzdCBiaW4gY291bnQsIGZvciB5LWF4aXMgc2NhbGluZy4gKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOYXRpdmUgYml0IGRlcHRoICg4LCAxNiwg4oCmKSDigJQgcHJlc2VudCBvbmx5IG9uIHRoZSBuYXRpdmUgc2VydmVyIHBhdGguICovXG4gIGJpdERlcHRoPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSByYW5nZSB0aGUgYmlucyBzcGFuIChlLmcuIDAuLjY1NTM1KSwgbmF0aXZlIHBhdGggb25seS4gKi9cbiAgcmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJhbmdlTWF4PzogbnVtYmVyO1xuICAvKiogQWN0dWFsIG1pbi9tYXggcGl4ZWwgb2JzZXJ2ZWQgKGF1dG8tY29udHJhc3Qgc2VlZCksIG5hdGl2ZSBwYXRoIG9ubHkuICovXG4gIG9ic2VydmVkTWluPzogbnVtYmVyO1xuICBvYnNlcnZlZE1heD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQdWJsaWMsIGltcGxlbWVudGF0aW9uLWFnbm9zdGljIHN1cmZhY2UgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUgKGFuXG4gKiBleHRlcm5hbCBjb25zdW1lciBvZiB0aGUgdmlzdWFsaXphdGlvbiBwYWNrYWdlKSBkZXBlbmRzIG9uLiBJdCBleHBvc2VzIHRoZVxuICogcGVyLWNoYW5uZWwgZGlzcGxheSB3aW5kb3cvZ2FtbWEvdmlzaWJpbGl0eSwgYW4gaW50ZW5zaXR5IGhpc3RvZ3JhbSBjb21wdXRlZFxuICogZnJvbSB0aGUgY3VycmVudGx5LWRpc3BsYXllZCBwaXhlbHMsIGFuZCB0aGUgTFVUL2NvbG9ybWFwIGNvbnRyb2xzIHRoYXQgdXNlZFxuICogdG8gbGl2ZSBpbiB0aGUgdG9vbGJhci4gVGhlIHBhbmUgaW5qZWN0cyB0aGlzIHZpYSB7QGxpbmsgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJfVxuICogKGJvdW5kIHRvIHRoZSBjb25jcmV0ZSBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCB3aXRoIGB1c2VFeGlzdGluZ2ApIHNvIGl0XG4gKiBuZXZlciByZWFjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbi4gRXZlcnkgc2V0dGVyIGxpdmUtdXBkYXRlcyB3aGljaGV2ZXIgYmFja2VuZFxuICogKFBsb3RseSBvciBPcGVuU2VhZHJhZ29uKSBpcyBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5uZWxIaXN0b2dyYW1BcGkge1xuICAvLyDilIDilIAgY2hhbm5lbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBUaGUgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgaW1hZ2UgKDEgZm9yIGdyYXlzY2FsZSwgMyBmb3IgUkdCKS4gKi9cbiAgZ2V0Q2hhbm5lbHMkKCk6IE9ic2VydmFibGU8SUNoYW5uZWxTdGF0ZVtdPjtcbiAgLyoqIFBhdGNoIG9uZSBjaGFubmVsJ3Mgc3RhdGUgKHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5L2NvbG9yKTsgbGl2ZS11cGRhdGVzLiAqL1xuICBzZXRDaGFubmVsU3RhdGUoaW5kZXg6IG51bWJlciwgcGFydGlhbDogUGFydGlhbDxJQ2hhbm5lbFN0YXRlPik6IHZvaWQ7XG4gIC8qKiBBdXRvLXdpbmRvdyB0aGUgZ2l2ZW4gY2hhbm5lbHMgYnkgc2F0dXJhdGluZyBgc2F0dXJhdGlvbmAgKDAuLjEpIG9mIHBpeGVsc1xuICAgKiAgYXQgZWFjaCBlbmQgb2YgdGhlaXIgaGlzdG9ncmFtLiAqL1xuICBhdXRvQ29udHJhc3QoaW5kaWNlczogbnVtYmVyW10sIHNhdHVyYXRpb246IG51bWJlcik6IHZvaWQ7XG4gIC8qKiBSZXNldCB0aGUgZ2l2ZW4gY2hhbm5lbHMgdG8gdGhlaXIgZGVyaXZlZCBkZWZhdWx0czogZnVsbCBkaXNwbGF5IHJhbmdlXG4gICAqICAoMC4uMjU1KSwgZ2FtbWEgMSwgYW5kIHRoZSBjaGFubmVsJ3MgZGVmYXVsdCB0aW50IGNvbG91ci4gKi9cbiAgcmVzZXRDb250cmFzdChpbmRpY2VzOiBudW1iZXJbXSk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGhpc3RvZ3JhbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIEJpbm5lZCBoaXN0b2dyYW0gZm9yIGEgY2hhbm5lbCBmcm9tIHRoZSBkaXNwbGF5ZWQgcGl4ZWxzLCBvciBudWxsIHdoZW4gbm9cbiAgICogIGltYWdlL3BpeGVscyBhcmUgYXZhaWxhYmxlLiBTeW5jaHJvbm91cyA4LWJpdCBwYXRoICh1c2VkIGJ5IGF1dG8tY29udHJhc3QpLiAqL1xuICBnZXRIaXN0b2dyYW0oY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IElIaXN0b2dyYW0gfCBudWxsO1xuICAvKiogSGlzdG9ncmFtIGZvciBhIGNoYW5uZWwgYXMgYW4gYXN5bmMgc3RyZWFtOiBlbWl0cyB0aGUgKipuYXRpdmUqKiBiaXQtZGVwdGhcbiAgICogIGhpc3RvZ3JhbSAoZnJvbSB0aGUgc2VydmVyKSBmb3IgPjgtYml0IGltYWdlcywgZWxzZSB0aGUgOC1iaXQgY2xpZW50XG4gICAqICBoaXN0b2dyYW0uIFRoZSBkaWFsb2cgdXNlcyB0aGlzIHNvIDE2LWJpdCBzdGFja3MgZ2V0IGEgdHJ1ZSBkaXN0cmlidXRpb24uICovXG4gIGdldEhpc3RvZ3JhbSQoY2hhbm5lbEluZGV4OiBudW1iZXIsIGJpbnM6IG51bWJlcik6IE9ic2VydmFibGU8SUhpc3RvZ3JhbSB8IG51bGw+O1xuXG4gIC8vIOKUgOKUgCBkaXNwbGF5IG9wdGlvbnMgKG1vdmVkIG91dCBvZiB0aGUgdG9vbGJhcikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldENvbG9ybWFwKCk6IE9ic2VydmFibGU8Q29sb3JtYXBOb2RlIHwgbnVsbD47XG4gIHNldENvbG9ybWFwKGNvbG9ybWFwOiBDb2xvcm1hcE5vZGUpOiB2b2lkO1xuICBnZXRDb2xvcm1hcE9wdGlvbnMoKTogQ29sb3JtYXBOb2RlW107XG4gIGdldFJldmVyc2VTY2FsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRSZXZlcnNlU2NhbGUocmV2ZXJzZTogYm9vbGVhbik6IHZvaWQ7XG4gIGdldEdyYXlzY2FsZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2V0R3JheXNjYWxlKG9uOiBib29sZWFuKTogdm9pZDtcbiAgZ2V0SW52ZXJ0JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRJbnZlcnQob246IGJvb2xlYW4pOiB2b2lkO1xuXG4gIC8vIOKUgOKUgCBpbWFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0SW1hZ2VNZXRhKCk6IE9ic2VydmFibGU8SUltYWdlTWV0YWRhdGFbXT47XG5cbiAgLyoqIEV4cG9ydCB0aGUgZGlzcGxheWVkIGltYWdlIOKAlCBjb21wb3NpdGVkIHdpdGggdGhlIGN1cnJlbnQgcGVyLWNoYW5uZWxcbiAgICogIHBzZXVkby1jb2xvdXJzIC8gd2luZG93IC8gY29sb3JtYXAg4oCUIGFzIGEgcHVibGljYXRpb24tcmVhZHkgUE5HIGRvd25sb2FkLiAqL1xuICBleHBvcnRDb21wb3NpdGUoKTogdm9pZDtcblxuICAvKiogRXhwb3J0IHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEg4oCUIGFsbCAob3IgdGhlIHZpc2libGUpIGNoYW5uZWxzIGF0IG5hdGl2ZVxuICAgKiAgYml0IGRlcHRoIOKAlCBhcyBhIGRhdGEtcHJlc2VydmluZyBtdWx0aS1iYW5kIFRJRkYgZG93bmxvYWQuIFNlcnZlci1zaWRlLCBzb1xuICAgKiAgaXQga2VlcHMgdHJ1ZSAxNi1iaXQgdmFsdWVzICh0aGUgUE5HIGNvbXBvc2l0ZSBpcyBhbiA4LWJpdCBmaWd1cmUpLiBPbmx5XG4gICAqICBtZWFuaW5nZnVsIGZvciA+OC1iaXQgaW1hZ2VzOyBhIG5vLW9wIG9uIGJhY2tlbmRzIHRoYXQgY2FuJ3QgcHJvdmlkZSBpdC4gKi9cbiAgZXhwb3J0RGF0YSgpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJID0gbmV3IEluamVjdGlvblRva2VuPElDaGFubmVsSGlzdG9ncmFtQXBpPignQ0hBTk5FTF9ISVNUT0dSQU1fQVBJJyk7XG4iXX0=
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Colormap → RGB lookup-table builder.
3
+ *
4
+ * Lets a non-Plotly backend (OpenSeadragon) recolor grayscale pixels with the
5
+ * exact same colormaps the Plotly heatmap uses. The input is a colormap value
6
+ * straight from `COLORMAP_OPTIONS` (see plot.utilities) — the same value handed
7
+ * to Plotly's `colorscale` — so the two surfaces stay in lock-step.
8
+ *
9
+ * A colormap value is either:
10
+ * - an array of `[stop, color]` pairs (the matplotlib `*_LUT` constants), or
11
+ * - a Plotly built-in scale *name* string (e.g. 'Viridis', 'Reds').
12
+ * `color` may be `'rgb(r, g, b)'` or `'#rrggbb'`/`'#rgb'`.
13
+ */
14
+ /**
15
+ * Plotly's built-in named colorscales (copied verbatim from plotly.js
16
+ * `components/colorscale/scales.js`), for the `COLORMAP_OPTIONS` entries whose
17
+ * `value` is a name string rather than an inline LUT array.
18
+ */
19
+ const BUILTIN_SCALES = {
20
+ Greys: [[0, 'rgb(0,0,0)'], [1, 'rgb(255,255,255)']],
21
+ YlGnBu: [[0, 'rgb(8,29,88)'], [0.125, 'rgb(37,52,148)'], [0.25, 'rgb(34,94,168)'], [0.375, 'rgb(29,145,192)'], [0.5, 'rgb(65,182,196)'], [0.625, 'rgb(127,205,187)'], [0.75, 'rgb(199,233,180)'], [0.875, 'rgb(237,248,217)'], [1, 'rgb(255,255,217)']],
22
+ Greens: [[0, 'rgb(0,68,27)'], [0.125, 'rgb(0,109,44)'], [0.25, 'rgb(35,139,69)'], [0.375, 'rgb(65,171,93)'], [0.5, 'rgb(116,196,118)'], [0.625, 'rgb(161,217,155)'], [0.75, 'rgb(199,233,192)'], [0.875, 'rgb(229,245,224)'], [1, 'rgb(247,252,245)']],
23
+ YlOrRd: [[0, 'rgb(128,0,38)'], [0.125, 'rgb(189,0,38)'], [0.25, 'rgb(227,26,28)'], [0.375, 'rgb(252,78,42)'], [0.5, 'rgb(253,141,60)'], [0.625, 'rgb(254,178,76)'], [0.75, 'rgb(254,217,118)'], [0.875, 'rgb(255,237,160)'], [1, 'rgb(255,255,204)']],
24
+ Bluered: [[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']],
25
+ RdBu: [[0, 'rgb(5,10,172)'], [0.35, 'rgb(106,137,247)'], [0.5, 'rgb(190,190,190)'], [0.6, 'rgb(220,170,132)'], [0.7, 'rgb(230,145,90)'], [1, 'rgb(178,10,28)']],
26
+ Reds: [[0, 'rgb(220,220,220)'], [0.2, 'rgb(245,195,157)'], [0.4, 'rgb(245,160,105)'], [1, 'rgb(178,10,28)']],
27
+ Blues: [[0, 'rgb(5,10,172)'], [0.35, 'rgb(40,60,190)'], [0.5, 'rgb(70,100,245)'], [0.6, 'rgb(90,120,245)'], [0.7, 'rgb(106,137,247)'], [1, 'rgb(220,220,220)']],
28
+ Picnic: [[0, 'rgb(0,0,255)'], [0.1, 'rgb(51,153,255)'], [0.2, 'rgb(102,204,255)'], [0.3, 'rgb(153,204,255)'], [0.4, 'rgb(204,204,255)'], [0.5, 'rgb(255,255,255)'], [0.6, 'rgb(255,204,255)'], [0.7, 'rgb(255,153,255)'], [0.8, 'rgb(255,102,204)'], [0.9, 'rgb(255,102,102)'], [1, 'rgb(255,0,0)']],
29
+ Rainbow: [[0, 'rgb(150,0,90)'], [0.125, 'rgb(0,0,200)'], [0.25, 'rgb(0,25,255)'], [0.375, 'rgb(0,152,255)'], [0.5, 'rgb(44,255,150)'], [0.625, 'rgb(151,255,0)'], [0.75, 'rgb(255,234,0)'], [0.875, 'rgb(255,111,0)'], [1, 'rgb(255,0,0)']],
30
+ Portland: [[0, 'rgb(12,51,131)'], [0.25, 'rgb(10,136,186)'], [0.5, 'rgb(242,211,56)'], [0.75, 'rgb(242,143,56)'], [1, 'rgb(217,30,30)']],
31
+ Jet: [[0, 'rgb(0,0,131)'], [0.125, 'rgb(0,60,170)'], [0.375, 'rgb(5,255,255)'], [0.625, 'rgb(255,255,0)'], [0.875, 'rgb(250,0,0)'], [1, 'rgb(128,0,0)']],
32
+ Hot: [[0, 'rgb(0,0,0)'], [0.3, 'rgb(230,0,0)'], [0.6, 'rgb(255,210,0)'], [1, 'rgb(255,255,255)']],
33
+ Blackbody: [[0, 'rgb(0,0,0)'], [0.2, 'rgb(230,0,0)'], [0.4, 'rgb(230,210,0)'], [0.7, 'rgb(255,255,255)'], [1, 'rgb(160,200,255)']],
34
+ Earth: [[0, 'rgb(0,0,130)'], [0.1, 'rgb(0,180,180)'], [0.2, 'rgb(40,210,40)'], [0.4, 'rgb(230,230,50)'], [0.6, 'rgb(120,70,20)'], [1, 'rgb(255,255,255)']],
35
+ Electric: [[0, 'rgb(0,0,0)'], [0.15, 'rgb(30,0,100)'], [0.4, 'rgb(120,0,100)'], [0.6, 'rgb(160,90,0)'], [0.8, 'rgb(230,200,0)'], [1, 'rgb(255,250,220)']],
36
+ Viridis: [[0, '#440154'], [0.06274509803921569, '#48186a'], [0.12549019607843137, '#472d7b'], [0.18823529411764706, '#424086'], [0.25098039215686274, '#3b528b'], [0.3137254901960784, '#33638d'], [0.3764705882352941, '#2c728e'], [0.4392156862745098, '#26828e'], [0.5019607843137255, '#21918c'], [0.5647058823529412, '#1fa088'], [0.6274509803921569, '#28ae80'], [0.6901960784313725, '#3fbc73'], [0.7529411764705882, '#5ec962'], [0.8156862745098039, '#84d44b'], [0.8784313725490196, '#addc30'], [0.9411764705882353, '#d8e219'], [1, '#fde725']],
37
+ Cividis: [[0, 'rgb(0,32,76)'], [0.058824, 'rgb(0,42,102)'], [0.117647, 'rgb(0,52,110)'], [0.176471, 'rgb(39,63,108)'], [0.235294, 'rgb(60,74,107)'], [0.294118, 'rgb(76,85,107)'], [0.352941, 'rgb(91,95,109)'], [0.411765, 'rgb(104,106,112)'], [0.470588, 'rgb(117,117,117)'], [0.529412, 'rgb(131,129,120)'], [0.588235, 'rgb(146,140,120)'], [0.647059, 'rgb(161,152,118)'], [0.705882, 'rgb(176,165,114)'], [0.764706, 'rgb(192,177,109)'], [0.823529, 'rgb(209,191,102)'], [0.882353, 'rgb(225,204,92)'], [0.941176, 'rgb(243,219,79)'], [1, 'rgb(255,233,69)']],
38
+ };
39
+ /** Parse a Plotly colorscale color (`rgb(r,g,b)` or `#rrggbb`/`#rgb`) to RGB. */
40
+ function parseColor(c) {
41
+ const s = (c || '').trim();
42
+ const hex = s.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
43
+ if (hex) {
44
+ let h = hex[1];
45
+ if (h.length === 3)
46
+ h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
47
+ return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
48
+ }
49
+ const rgb = s.match(/rgba?\(([^)]+)\)/i);
50
+ if (rgb) {
51
+ const p = rgb[1].split(',').map((v) => parseFloat(v.trim()));
52
+ return [Math.round(p[0]) || 0, Math.round(p[1]) || 0, Math.round(p[2]) || 0];
53
+ }
54
+ return [0, 0, 0];
55
+ }
56
+ /**
57
+ * Build a 256-entry RGB lookup table from a `COLORMAP_OPTIONS` value, indexed by
58
+ * grayscale value 0–255. Returns null if the value can't be resolved to a scale.
59
+ * @param value array of `[stop, color]` pairs, or a Plotly built-in name string
60
+ * @param reverse mirror the scale (matches Plotly's `reversescale`)
61
+ */
62
+ export function buildColormapLut(value, reverse = false) {
63
+ let scale = null;
64
+ if (Array.isArray(value))
65
+ scale = value;
66
+ else if (typeof value === 'string')
67
+ scale = BUILTIN_SCALES[value] ?? null;
68
+ if (!scale || scale.length < 2)
69
+ return null;
70
+ // Normalise + sort the control points.
71
+ const stops = scale
72
+ .map((s) => [Number(s[0]), parseColor(String(s[1]))])
73
+ .sort((a, b) => a[0] - b[0]);
74
+ const lut = new Array(256);
75
+ for (let i = 0; i < 256; i++) {
76
+ const t = i / 255;
77
+ // Find the bracketing control points for t.
78
+ let k = 0;
79
+ while (k < stops.length - 2 && stops[k + 1][0] < t)
80
+ k++;
81
+ const [t0, c0] = stops[k];
82
+ const [t1, c1] = stops[k + 1];
83
+ const span = t1 - t0 || 1;
84
+ const f = Math.max(0, Math.min(1, (t - t0) / span));
85
+ lut[i] = [
86
+ Math.round(c0[0] + (c1[0] - c0[0]) * f),
87
+ Math.round(c0[1] + (c1[1] - c0[1]) * f),
88
+ Math.round(c0[2] + (c1[2] - c0[2]) * f),
89
+ ];
90
+ }
91
+ if (reverse)
92
+ lut.reverse();
93
+ return lut;
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JtYXAtbHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY29sb3JtYXAtbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUtIOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdlAsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN0UCxNQUFNLEVB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RUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sb3JtYXAg4oaSIFJHQiBsb29rdXAtdGFibGUgYnVpbGRlci5cbiAqXG4gKiBMZXRzIGEgbm9uLVBsb3RseSBiYWNrZW5kIChPcGVuU2VhZHJhZ29uKSByZWNvbG9yIGdyYXlzY2FsZSBwaXhlbHMgd2l0aCB0aGVcbiAqIGV4YWN0IHNhbWUgY29sb3JtYXBzIHRoZSBQbG90bHkgaGVhdG1hcCB1c2VzLiBUaGUgaW5wdXQgaXMgYSBjb2xvcm1hcCB2YWx1ZVxuICogc3RyYWlnaHQgZnJvbSBgQ09MT1JNQVBfT1BUSU9OU2AgKHNlZSBwbG90LnV0aWxpdGllcykg4oCUIHRoZSBzYW1lIHZhbHVlIGhhbmRlZFxuICogdG8gUGxvdGx5J3MgYGNvbG9yc2NhbGVgIOKAlCBzbyB0aGUgdHdvIHN1cmZhY2VzIHN0YXkgaW4gbG9jay1zdGVwLlxuICpcbiAqIEEgY29sb3JtYXAgdmFsdWUgaXMgZWl0aGVyOlxuICogICAtIGFuIGFycmF5IG9mIGBbc3RvcCwgY29sb3JdYCBwYWlycyAodGhlIG1hdHBsb3RsaWIgYCpfTFVUYCBjb25zdGFudHMpLCBvclxuICogICAtIGEgUGxvdGx5IGJ1aWx0LWluIHNjYWxlICpuYW1lKiBzdHJpbmcgKGUuZy4gJ1ZpcmlkaXMnLCAnUmVkcycpLlxuICogYGNvbG9yYCBtYXkgYmUgYCdyZ2IociwgZywgYiknYCBvciBgJyNycmdnYmInYC9gJyNyZ2InYC5cbiAqL1xuXG5leHBvcnQgdHlwZSBSZ2IgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG50eXBlIFN0b3AgPSBbbnVtYmVyLCBzdHJpbmddO1xuXG4vKipcbiAqIFBsb3RseSdzIGJ1aWx0LWluIG5hbWVkIGNvbG9yc2NhbGVzIChjb3BpZWQgdmVyYmF0aW0gZnJvbSBwbG90bHkuanNcbiAqIGBjb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzLmpzYCksIGZvciB0aGUgYENPTE9STUFQX09QVElPTlNgIGVudHJpZXMgd2hvc2VcbiAqIGB2YWx1ZWAgaXMgYSBuYW1lIHN0cmluZyByYXRoZXIgdGhhbiBhbiBpbmxpbmUgTFVUIGFycmF5LlxuICovXG5jb25zdCBCVUlMVElOX1NDQUxFUzogUmVjb3JkPHN0cmluZywgU3RvcFtdPiA9IHtcbiAgR3JleXM6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBZbEduQnU6IFtbMCwgJ3JnYig4LDI5LDg4KSddLCBbMC4xMjUsICdyZ2IoMzcsNTIsMTQ4KSddLCBbMC4yNSwgJ3JnYigzNCw5NCwxNjgpJ10sIFswLjM3NSwgJ3JnYigyOSwxNDUsMTkyKSddLCBbMC41LCAncmdiKDY1LDE4MiwxOTYpJ10sIFswLjYyNSwgJ3JnYigxMjcsMjA1LDE4NyknXSwgWzAuNzUsICdyZ2IoMTk5LDIzMywxODApJ10sIFswLjg3NSwgJ3JnYigyMzcsMjQ4LDIxNyknXSwgWzEsICdyZ2IoMjU1LDI1NSwyMTcpJ11dLFxuICBHcmVlbnM6IFtbMCwgJ3JnYigwLDY4LDI3KSddLCBbMC4xMjUsICdyZ2IoMCwxMDksNDQpJ10sIFswLjI1LCAncmdiKDM1LDEzOSw2OSknXSwgWzAuMzc1LCAncmdiKDY1LDE3MSw5MyknXSwgWzAuNSwgJ3JnYigxMTYsMTk2LDExOCknXSwgWzAuNjI1LCAncmdiKDE2MSwyMTcsMTU1KSddLCBbMC43NSwgJ3JnYigxOTksMjMzLDE5MiknXSwgWzAuODc1LCAncmdiKDIyOSwyNDUsMjI0KSddLCBbMSwgJ3JnYigyNDcsMjUyLDI0NSknXV0sXG4gIFlsT3JSZDogW1swLCAncmdiKDEyOCwwLDM4KSddLCBbMC4xMjUsICdyZ2IoMTg5LDAsMzgpJ10sIFswLjI1LCAncmdiKDIyNywyNiwyOCknXSwgWzAuMzc1LCAncmdiKDI1Miw3OCw0MiknXSwgWzAuNSwgJ3JnYigyNTMsMTQxLDYwKSddLCBbMC42MjUsICdyZ2IoMjU0LDE3OCw3NiknXSwgWzAuNzUsICdyZ2IoMjU0LDIxNywxMTgpJ10sIFswLjg3NSwgJ3JnYigyNTUsMjM3LDE2MCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyMDQpJ11dLFxuICBCbHVlcmVkOiBbWzAsICdyZ2IoMCwwLDI1NSknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFJkQnU6IFtbMCwgJ3JnYig1LDEwLDE3MiknXSwgWzAuMzUsICdyZ2IoMTA2LDEzNywyNDcpJ10sIFswLjUsICdyZ2IoMTkwLDE5MCwxOTApJ10sIFswLjYsICdyZ2IoMjIwLDE3MCwxMzIpJ10sIFswLjcsICdyZ2IoMjMwLDE0NSw5MCknXSwgWzEsICdyZ2IoMTc4LDEwLDI4KSddXSxcbiAgUmVkczogW1swLCAncmdiKDIyMCwyMjAsMjIwKSddLCBbMC4yLCAncmdiKDI0NSwxOTUsMTU3KSddLCBbMC40LCAncmdiKDI0NSwxNjAsMTA1KSddLCBbMSwgJ3JnYigxNzgsMTAsMjgpJ11dLFxuICBCbHVlczogW1swLCAncmdiKDUsMTAsMTcyKSddLCBbMC4zNSwgJ3JnYig0MCw2MCwxOTApJ10sIFswLjUsICdyZ2IoNzAsMTAwLDI0NSknXSwgWzAuNiwgJ3JnYig5MCwxMjAsMjQ1KSddLCBbMC43LCAncmdiKDEwNiwxMzcsMjQ3KSddLCBbMSwgJ3JnYigyMjAsMjIwLDIyMCknXV0sXG4gIFBpY25pYzogW1swLCAncmdiKDAsMCwyNTUpJ10sIFswLjEsICdyZ2IoNTEsMTUzLDI1NSknXSwgWzAuMiwgJ3JnYigxMDIsMjA0LDI1NSknXSwgWzAuMywgJ3JnYigxNTMsMjA0LDI1NSknXSwgWzAuNCwgJ3JnYigyMDQsMjA0LDI1NSknXSwgWzAuNSwgJ3JnYigyNTUsMjU1LDI1NSknXSwgWzAuNiwgJ3JnYigyNTUsMjA0LDI1NSknXSwgWzAuNywgJ3JnYigyNTUsMTUzLDI1NSknXSwgWzAuOCwgJ3JnYigyNTUsMTAyLDIwNCknXSwgWzAuOSwgJ3JnYigyNTUsMTAyLDEwMiknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFJhaW5ib3c6IFtbMCwgJ3JnYigxNTAsMCw5MCknXSwgWzAuMTI1LCAncmdiKDAsMCwyMDApJ10sIFswLjI1LCAncmdiKDAsMjUsMjU1KSddLCBbMC4zNzUsICdyZ2IoMCwxNTIsMjU1KSddLCBbMC41LCAncmdiKDQ0LDI1NSwxNTApJ10sIFswLjYyNSwgJ3JnYigxNTEsMjU1LDApJ10sIFswLjc1LCAncmdiKDI1NSwyMzQsMCknXSwgWzAuODc1LCAncmdiKDI1NSwxMTEsMCknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFBvcnRsYW5kOiBbWzAsICdyZ2IoMTIsNTEsMTMxKSddLCBbMC4yNSwgJ3JnYigxMCwxMzYsMTg2KSddLCBbMC41LCAncmdiKDI0MiwyMTEsNTYpJ10sIFswLjc1LCAncmdiKDI0MiwxNDMsNTYpJ10sIFsxLCAncmdiKDIxNywzMCwzMCknXV0sXG4gIEpldDogW1swLCAncmdiKDAsMCwxMzEpJ10sIFswLjEyNSwgJ3JnYigwLDYwLDE3MCknXSwgWzAuMzc1LCAncmdiKDUsMjU1LDI1NSknXSwgWzAuNjI1LCAncmdiKDI1NSwyNTUsMCknXSwgWzAuODc1LCAncmdiKDI1MCwwLDApJ10sIFsxLCAncmdiKDEyOCwwLDApJ11dLFxuICBIb3Q6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzAuMywgJ3JnYigyMzAsMCwwKSddLCBbMC42LCAncmdiKDI1NSwyMTAsMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBCbGFja2JvZHk6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzAuMiwgJ3JnYigyMzAsMCwwKSddLCBbMC40LCAncmdiKDIzMCwyMTAsMCknXSwgWzAuNywgJ3JnYigyNTUsMjU1LDI1NSknXSwgWzEsICdyZ2IoMTYwLDIwMCwyNTUpJ11dLFxuICBFYXJ0aDogW1swLCAncmdiKDAsMCwxMzApJ10sIFswLjEsICdyZ2IoMCwxODAsMTgwKSddLCBbMC4yLCAncmdiKDQwLDIxMCw0MCknXSwgWzAuNCwgJ3JnYigyMzAsMjMwLDUwKSddLCBbMC42LCAncmdiKDEyMCw3MCwyMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBFbGVjdHJpYzogW1swLCAncmdiKDAsMCwwKSddLCBbMC4xNSwgJ3JnYigzMCwwLDEwMCknXSwgWzAuNCwgJ3JnYigxMjAsMCwxMDApJ10sIFswLjYsICdyZ2IoMTYwLDkwLDApJ10sIFswLjgsICdyZ2IoMjMwLDIwMCwwKSddLCBbMSwgJ3JnYigyNTUsMjUwLDIyMCknXV0sXG4gIFZpcmlkaXM6IFtbMCwgJyM0NDAxNTQnXSwgWzAuMDYyNzQ1MDk4MDM5MjE1NjksICcjNDgxODZhJ10sIFswLjEyNTQ5MDE5NjA3ODQzMTM3LCAnIzQ3MmQ3YiddLCBbMC4xODgyMzUyOTQxMTc2NDcwNiwgJyM0MjQwODYnXSwgWzAuMjUwOTgwMzkyMTU2ODYyNzQsICcjM2I1MjhiJ10sIFswLjMxMzcyNTQ5MDE5NjA3ODQsICcjMzM2MzhkJ10sIFswLjM3NjQ3MDU4ODIzNTI5NDEsICcjMmM3MjhlJ10sIFswLjQzOTIxNTY4NjI3NDUwOTgsICcjMjY4MjhlJ10sIFswLjUwMTk2MDc4NDMxMzcyNTUsICcjMjE5MThjJ10sIFswLjU2NDcwNTg4MjM1Mjk0MTIsICcjMWZhMDg4J10sIFswLjYyNzQ1MDk4MDM5MjE1NjksICcjMjhhZTgwJ10sIFswLjY5MDE5NjA3ODQzMTM3MjUsICcjM2ZiYzczJ10sIFswLjc1Mjk0MTE3NjQ3MDU4ODIsICcjNWVjOTYyJ10sIFswLjgxNTY4NjI3NDUwOTgwMzksICcjODRkNDRiJ10sIFswLjg3ODQzMTM3MjU0OTAxOTYsICcjYWRkYzMwJ10sIFswLjk0MTE3NjQ3MDU4ODIzNTMsICcjZDhlMjE5J10sIFsxLCAnI2ZkZTcyNSddXSxcbiAgQ2l2aWRpczogW1swLCAncmdiKDAsMzIsNzYpJ10sIFswLjA1ODgyNCwgJ3JnYigwLDQyLDEwMiknXSwgWzAuMTE3NjQ3LCAncmdiKDAsNTIsMTEwKSddLCBbMC4xNzY0NzEsICdyZ2IoMzksNjMsMTA4KSddLCBbMC4yMzUyOTQsICdyZ2IoNjAsNzQsMTA3KSddLCBbMC4yOTQxMTgsICdyZ2IoNzYsODUsMTA3KSddLCBbMC4zNTI5NDEsICdyZ2IoOTEsOTUsMTA5KSddLCBbMC40MTE3NjUsICdyZ2IoMTA0LDEwNiwxMTIpJ10sIFswLjQ3MDU4OCwgJ3JnYigxMTcsMTE3LDExNyknXSwgWzAuNTI5NDEyLCAncmdiKDEzMSwxMjksMTIwKSddLCBbMC41ODgyMzUsICdyZ2IoMTQ2LDE0MCwxMjApJ10sIFswLjY0NzA1OSwgJ3JnYigxNjEsMTUyLDExOCknXSwgWzAuNzA1ODgyLCAncmdiKDE3NiwxNjUsMTE0KSddLCBbMC43NjQ3MDYsICdyZ2IoMTkyLDE3NywxMDkpJ10sIFswLjgyMzUyOSwgJ3JnYigyMDksMTkxLDEwMiknXSwgWzAuODgyMzUzLCAncmdiKDIyNSwyMDQsOTIpJ10sIFswLjk0MTE3NiwgJ3JnYigyNDMsMjE5LDc5KSddLCBbMSwgJ3JnYigyNTUsMjMzLDY5KSddXSxcbn07XG5cbi8qKiBQYXJzZSBhIFBsb3RseSBjb2xvcnNjYWxlIGNvbG9yIChgcmdiKHIsZyxiKWAgb3IgYCNycmdnYmJgL2AjcmdiYCkgdG8gUkdCLiAqL1xuZnVuY3Rpb24gcGFyc2VDb2xvcihjOiBzdHJpbmcpOiBSZ2Ige1xuICBjb25zdCBzID0gKGMgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgaGV4ID0gcy5tYXRjaCgvXiMoWzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pKTtcbiAgaWYgKGhleCkge1xuICAgIGxldCBoID0gaGV4WzFdO1xuICAgIGlmIChoLmxlbmd0aCA9PT0gMykgaCA9IGhbMF0gKyBoWzBdICsgaFsxXSArIGhbMV0gKyBoWzJdICsgaFsyXTtcbiAgICByZXR1cm4gW3BhcnNlSW50KGguc2xpY2UoMCwgMiksIDE2KSwgcGFyc2VJbnQoaC5zbGljZSgyLCA0KSwgMTYpLCBwYXJzZUludChoLnNsaWNlKDQsIDYpLCAxNildO1xuICB9XG4gIGNvbnN0IHJnYiA9IHMubWF0Y2goL3JnYmE/XFwoKFteKV0rKVxcKS9pKTtcbiAgaWYgKHJnYikge1xuICAgIGNvbnN0IHAgPSByZ2JbMV0uc3BsaXQoJywnKS5tYXAoKHYpID0+IHBhcnNlRmxvYXQodi50cmltKCkpKTtcbiAgICByZXR1cm4gW01hdGgucm91bmQocFswXSkgfHwgMCwgTWF0aC5yb3VuZChwWzFdKSB8fCAwLCBNYXRoLnJvdW5kKHBbMl0pIHx8IDBdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgMF07XG59XG5cbi8qKlxuICogQnVpbGQgYSAyNTYtZW50cnkgUkdCIGxvb2t1cCB0YWJsZSBmcm9tIGEgYENPTE9STUFQX09QVElPTlNgIHZhbHVlLCBpbmRleGVkIGJ5XG4gKiBncmF5c2NhbGUgdmFsdWUgMOKAkzI1NS4gUmV0dXJucyBudWxsIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSByZXNvbHZlZCB0byBhIHNjYWxlLlxuICogQHBhcmFtIHZhbHVlICBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMsIG9yIGEgUGxvdGx5IGJ1aWx0LWluIG5hbWUgc3RyaW5nXG4gKiBAcGFyYW0gcmV2ZXJzZSAgbWlycm9yIHRoZSBzY2FsZSAobWF0Y2hlcyBQbG90bHkncyBgcmV2ZXJzZXNjYWxlYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29sb3JtYXBMdXQodmFsdWU6IHVua25vd24sIHJldmVyc2UgPSBmYWxzZSk6IFJnYltdIHwgbnVsbCB7XG4gIGxldCBzY2FsZTogU3RvcFtdIHwgbnVsbCA9IG51bGw7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgc2NhbGUgPSB2YWx1ZSBhcyBTdG9wW107XG4gIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHNjYWxlID0gQlVJTFRJTl9TQ0FMRVNbdmFsdWVdID8/IG51bGw7XG4gIGlmICghc2NhbGUgfHwgc2NhbGUubGVuZ3RoIDwgMikgcmV0dXJuIG51bGw7XG5cbiAgLy8gTm9ybWFsaXNlICsgc29ydCB0aGUgY29udHJvbCBwb2ludHMuXG4gIGNvbnN0IHN0b3BzID0gc2NhbGVcbiAgICAubWFwKChzKSA9PiBbTnVtYmVyKHNbMF0pLCBwYXJzZUNvbG9yKFN0cmluZyhzWzFdKSldIGFzIFtudW1iZXIsIFJnYl0pXG4gICAgLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKTtcblxuICBjb25zdCBsdXQ6IFJnYltdID0gbmV3IEFycmF5KDI1Nik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICBjb25zdCB0ID0gaSAvIDI1NTtcbiAgICAvLyBGaW5kIHRoZSBicmFja2V0aW5nIGNvbnRyb2wgcG9pbnRzIGZvciB0LlxuICAgIGxldCBrID0gMDtcbiAgICB3aGlsZSAoayA8IHN0b3BzLmxlbmd0aCAtIDIgJiYgc3RvcHNbayArIDFdWzBdIDwgdCkgaysrO1xuICAgIGNvbnN0IFt0MCwgYzBdID0gc3RvcHNba107XG4gICAgY29uc3QgW3QxLCBjMV0gPSBzdG9wc1trICsgMV07XG4gICAgY29uc3Qgc3BhbiA9IHQxIC0gdDAgfHwgMTtcbiAgICBjb25zdCBmID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKHQgLSB0MCkgLyBzcGFuKSk7XG4gICAgbHV0W2ldID0gW1xuICAgICAgTWF0aC5yb3VuZChjMFswXSArIChjMVswXSAtIGMwWzBdKSAqIGYpLFxuICAgICAgTWF0aC5yb3VuZChjMFsxXSArIChjMVsxXSAtIGMwWzFdKSAqIGYpLFxuICAgICAgTWF0aC5yb3VuZChjMFsyXSArIChjMVsyXSAtIGMwWzJdKSAqIGYpLFxuICAgIF07XG4gIH1cbiAgaWYgKHJldmVyc2UpIGx1dC5yZXZlcnNlKCk7XG4gIHJldHVybiBsdXQ7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZS10cmFuc2Zvcm0uY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5cbi8qKlxuICogVGhlIHZpZXdwb3J0IG1hdGggdGhlIG9uLWNhbnZhcyB0b29scyAod2FuZCwgdmVydGV4IGVyYXNlcikgbmVlZCwgYWJzdHJhY3RlZFxuICogYXdheSBmcm9tIGFueSBzcGVjaWZpYyBiYWNrZW5kLiBQbG90bHkgaW1wbGVtZW50cyBpdCBvdmVyIGl0cyBheGlzIG9iamVjdHNcbiAqIChgX2Z1bGxMYXlvdXQueGF4aXMveWF4aXNgKSwgT3BlblNlYWRyYWdvbiBvdmVyIGl0cyB2aWV3cG9ydCBBUEkuIFRoaXMgaXMgd2hhdFxuICogbGV0cyB0aGUgdG9vbHMgcnVuIG9uIGVpdGhlciBiYWNrZW5kLlxuICpcbiAqIFwiRGF0YSBjb29yZGluYXRlc1wiIGFyZSB0aGUgYmFja2VuZCdzIHNoYXBlIGNvb3JkaW5hdGUgc3BhY2U6IFBsb3RseSBkYXRhXG4gKiBjb29yZHMgZm9yIFBsb3RseSwgaW1hZ2UtcGl4ZWwgY29vcmRzIGZvciBPcGVuU2VhZHJhZ29uLiBUaGUgdG9vbHMgY29udmVydFxuICogZGF0YSAtPiBpbWFnZS1tYXRyaXggdXNpbmcgdGhlIHBlci1pbWFnZSByYXRpbyB0aGV5IGFscmVhZHkgZ2V0IGZyb20gdGhlIGhvc3RcbiAqIChgZ2V0Q2FjaGVkSW1hZ2VEYXRhKCkucmF0aW9zYCAvIGBnZXRDYWNoZWRJbWFnZVJhdGlvKClgKSwgc28gdGhhdCBkaXZpc2lvblxuICogc3RheXMgaW4gdGhlIHRvb2wgYW5kIHRoZSB0cmFuc2Zvcm0gc3RheXMgcHVyZWx5IHNjcmVlbjwtPmRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvb3JkaW5hdGVUcmFuc2Zvcm0ge1xuICAvKiogQ2xpZW50IChtb3VzZSBldmVudCkgcGl4ZWwgLT4gZGF0YSBjb29yZGluYXRlcy4gKi9cbiAgY2xpZW50VG9EYXRhKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICAvKiogQSBsZW5ndGggaW4gZGF0YSBjb29yZGluYXRlcyAtPiBsZW5ndGggaW4gc2NyZWVuIHBpeGVscy4gKi9cbiAgZGF0YUxlbmd0aFRvU2NyZWVuKGRhdGFMZW5ndGg6IG51bWJlcik6IG51bWJlcjtcbiAgLyoqIFRydWUgb25jZSB0aGUgdmlld3BvcnQgaXMgbGFpZCBvdXQgYW5kIGNvbnZlcnNpb25zIGFyZSB2YWxpZC4gKi9cbiAgaXNSZWFkeSgpOiBib29sZWFuO1xufVxuXG4vKiogV2hhdCBhIGJhY2tlbmQgc3VwcGxpZXMgc28gdGhlIHRvb2xzIGNhbiBhdHRhY2ggKyBjb252ZXJ0IGNvb3JkaW5hdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVmlld3BvcnRIb3N0IHtcbiAgLyoqIFRoZSBlbGVtZW50IHRoZSB0b29sJ3MgY2FudmFzIG92ZXJsYXkgYXR0YWNoZXMgdG8gKGZpbGxzIHRoZSBwbG90IGFyZWEpLiAqL1xuICBnZXRPdmVybGF5Q29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgLyoqIExpdmUgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gZm9yIHRoZSBjdXJyZW50IHZpZXdwb3J0IHN0YXRlLiAqL1xuICBnZXRDb29yZGluYXRlVHJhbnNmb3JtKCk6IElDb29yZGluYXRlVHJhbnNmb3JtO1xufVxuXG4vKipcbiAqIFJlZ2lvbiByZWFkL3dyaXRlIGFjY2VzcyBmb3IgdGhlIG9uLWNhbnZhcyB0b29scywgaW4gdGhlIGJhY2tlbmQtbmV1dHJhbFxuICoge0BsaW5rIFJlZ2lvbn0gbW9kZWwg4oCUIHNvIHRoZSB3YW5kIGFuZCB2ZXJ0ZXggZXJhc2VyIG9wZXJhdGUgb24gcmVnaW9ucywgbm90XG4gKiBhIGJhY2tlbmQncyBvd24gc2hhcGUgcmVwcmVzZW50YXRpb24uIEJvdGggYmFja2VuZHMgaW1wbGVtZW50IHRoaXMgYnlcbiAqIGRlbGVnYXRpbmcgdG8gdGhlIHNoYXJlZCBSZWdpb25TdG9yZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVnaW9uRGF0YUhvc3Qge1xuICAvKiogQ3VycmVudCByZWdpb25zIChuZXV0cmFsIG1vZGVsKS4gKi9cbiAgZ2V0UmVnaW9ucygpOiBSZWdpb25bXTtcbiAgLyoqIENvbW1pdCB0aGUgKHBvc3NpYmx5IG11dGF0ZWQpIHJlZ2lvbiBzZXQ7IHRoZSBiYWNrZW5kIHJlbmRlcnMgKyBlbWl0cy4gKi9cbiAgc2V0UmVnaW9ucyhyZWdpb25zOiBSZWdpb25bXSk6IHZvaWQ7XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Publication-critical types that were `any` on the public contracts
3
+ * (refactoring plan, Step 6). Deliberately permissive — every field optional —
4
+ * so existing hosts (which pass PrimeNG `TreeNode`s and plain option objects)
5
+ * keep compiling unchanged while consumers finally get named shapes.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL2Rpc3BsYXktdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpY2F0aW9uLWNyaXRpY2FsIHR5cGVzIHRoYXQgd2VyZSBgYW55YCBvbiB0aGUgcHVibGljIGNvbnRyYWN0c1xuICogKHJlZmFjdG9yaW5nIHBsYW4sIFN0ZXAgNikuIERlbGliZXJhdGVseSBwZXJtaXNzaXZlIOKAlCBldmVyeSBmaWVsZCBvcHRpb25hbCDigJRcbiAqIHNvIGV4aXN0aW5nIGhvc3RzICh3aGljaCBwYXNzIFByaW1lTkcgYFRyZWVOb2RlYHMgYW5kIHBsYWluIG9wdGlvbiBvYmplY3RzKVxuICoga2VlcCBjb21waWxpbmcgdW5jaGFuZ2VkIHdoaWxlIGNvbnN1bWVycyBmaW5hbGx5IGdldCBuYW1lZCBzaGFwZXMuXG4gKi9cblxuLyoqIEEgY29sb3JtYXAgdmFsdWUgYXMgUGxvdGx5IHVuZGVyc3RhbmRzIGl0OiBhIGJ1aWx0LWluIHNjYWxlIG5hbWUgKGUuZy5cbiAqICAnVmlyaWRpcycpIG9yIGFuIGlubGluZSBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMuICovXG5leHBvcnQgdHlwZSBDb2xvcm1hcFZhbHVlID0gc3RyaW5nIHwgQXJyYXk8W251bWJlciwgc3RyaW5nXT47XG5cbi8qKiBPbmUgbm9kZSBvZiB0aGUgY29sb3JtYXAgc2VsZWN0b3IgdHJlZSAoc3RydWN0dXJhbGx5IGNvbXBhdGlibGUgd2l0aCB0aGVcbiAqICBQcmltZU5HIGBUcmVlTm9kZWBzIHRoZSBob3N0IHBhc3Nlcyk6IGdyb3VwIG5vZGVzIGNhcnJ5IGBjaGlsZHJlbmAsIGxlYWZcbiAqICBub2RlcyBjYXJyeSB0aGUgc2NhbGUgaW4gYGRhdGEudmFsdWVgICgrIGEgcHJldmlldyBpbWFnZSBpbiBgZGF0YS5zcmNgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JtYXBOb2RlIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGRhdGE/OiB7IHZhbHVlPzogQ29sb3JtYXBWYWx1ZTsgc3JjPzogc3RyaW5nIH07XG4gIGNoaWxkcmVuPzogQ29sb3JtYXBOb2RlW107XG59XG5cbi8qKiBNYWdpYy13YW5kIHBpeGVsLWNvbXBhcmlzb24gc3BhY2UuICovXG5leHBvcnQgdHlwZSBXYW5kVHlwZSA9ICdHUkFZJyB8ICdSR0InIHwgJ0xBQl9ESVNUQU5DRSc7XG5cbi8qKiBPcHRpb25zIGZvciB0aGUgbWFnaWMtd2FuZCB0b29sIChRdVBhdGgtc3R5bGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJV2FuZE9wdGlvbnMge1xuICB0eXBlPzogV2FuZFR5cGU7XG4gIC8qKiBHYXVzc2lhbiBzaWdtYSBhcHBsaWVkIHRvIHRoZSBwYXRjaCBiZWZvcmUgdGhyZXNob2xkaW5nLiAqL1xuICBzaWdtYT86IG51bWJlcjtcbiAgLyoqIEhpZ2hlciA9IHN0cmljdGVyIChzbWFsbGVyIHNlbGVjdGlvbikgZm9yIEdSQVkvUkdCOyBoaWdoZXIgPSBsb29zZXIgZm9yXG4gICAqICBMQUJfRElTVEFOQ0Ug4oCUIG1hdGNoZXMgUXVQYXRoLiAqL1xuICBzZW5zaXRpdml0eT86IG51bWJlcjtcbiAgLyoqIFNxdWFyZSBwYXRjaCBzaXplIGluIHBpeGVscyAobXVzdCBiZSBvZGQpLiAqL1xuICBwYXRjaFNpemU/OiBudW1iZXI7XG4gIC8qKiBXaGVuIHRydWUsIHNraXAgYmx1ci90aHJlc2hvbGQgYW5kIGZsb29kLWZpbGwgYXQgZXhhY3QtbWF0Y2hcbiAgICogIChDbWQvQ3RybC1jbGljayBpbiBRdVBhdGgpLiAqL1xuICBzaW1wbGVNb2RlPzogYm9vbGVhbjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHRoZSBicnVzaCByZWdpb24gdG9vbCAoUXVQYXRoLXN0eWxlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJydXNoT3B0aW9ucyB7XG4gIC8qKiBCcnVzaCBkaWFtZXRlciBpbiBtYXRyaXggKGltYWdlKSBwaXhlbHMuICovXG4gIHNpemU/OiBudW1iZXI7XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Library-owned data interfaces for the image the visualization renders.
3
+ *
4
+ * The visualization package must not import the host app's concrete models
5
+ * (`main/models/file-info`), or it can't become a standalone library. These
6
+ * slim interfaces declare only the fields the library reads/writes; the host's
7
+ * `ImageInfo`/`ImageMetadata` classes are pure data holders that satisfy them
8
+ * structurally, so the host keeps passing its own instances unchanged.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9pbWFnZS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGlicmFyeS1vd25lZCBkYXRhIGludGVyZmFjZXMgZm9yIHRoZSBpbWFnZSB0aGUgdmlzdWFsaXphdGlvbiByZW5kZXJzLlxuICpcbiAqIFRoZSB2aXN1YWxpemF0aW9uIHBhY2thZ2UgbXVzdCBub3QgaW1wb3J0IHRoZSBob3N0IGFwcCdzIGNvbmNyZXRlIG1vZGVsc1xuICogKGBtYWluL21vZGVscy9maWxlLWluZm9gKSwgb3IgaXQgY2FuJ3QgYmVjb21lIGEgc3RhbmRhbG9uZSBsaWJyYXJ5LiBUaGVzZVxuICogc2xpbSBpbnRlcmZhY2VzIGRlY2xhcmUgb25seSB0aGUgZmllbGRzIHRoZSBsaWJyYXJ5IHJlYWRzL3dyaXRlczsgdGhlIGhvc3Qnc1xuICogYEltYWdlSW5mb2AvYEltYWdlTWV0YWRhdGFgIGNsYXNzZXMgYXJlIHB1cmUgZGF0YSBob2xkZXJzIHRoYXQgc2F0aXNmeSB0aGVtXG4gKiBzdHJ1Y3R1cmFsbHksIHNvIHRoZSBob3N0IGtlZXBzIHBhc3NpbmcgaXRzIG93biBpbnN0YW5jZXMgdW5jaGFuZ2VkLlxuICovXG5cbi8qKiBQZXItY2hhbm5lbCBtZXRhZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgZGVzY3JpcHRvciAoaXNzdWUgIzc2KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5uZWxJbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU3VnZ2VzdGVkIGRpc3BsYXkgdGludCBhcyBcIiNSUkdHQkJcIi4gKi9cbiAgY29sb3I6IHN0cmluZztcbiAgLyoqIEVtYmVkZGVkIDI1Ni1lbnRyeSBkaXNwbGF5IExVVCBhcyBcIiNSUkdHQkJcIiAoaW50ZW5zaXR54oaSY29sb3IpLCBvclxuICAgKiAgbnVsbC91bmRlZmluZWQgd2hlbiB0aGUgZmlsZSBoYXMgbm8gcGFsZXR0ZSBmb3IgdGhpcyBjaGFubmVsLiAqL1xuICBsdXQ/OiBzdHJpbmdbXSB8IG51bGw7XG4gIGJpdERlcHRoPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSBtaW5pbXVtIChlLmcuIDAgZm9yIHVuc2lnbmVkKS4gTmF0aXZlLXVuaXQgZmxvb3Igb2YgdGhlIHdpbmRvdy4gKi9cbiAgbWluQWxsb3dlZD86IG51bWJlcjtcbiAgLyoqIFBpeGVsLXR5cGUgbWF4aW11bSAoZS5nLiA2NTUzNSBmb3IgdW5zaWduZWQgMTYtYml0KS4gTmF0aXZlLXVuaXQgY2VpbGluZy4gKi9cbiAgbWF4QWxsb3dlZD86IG51bWJlcjtcbn1cblxuLyoqIFBlci1zZXJpZXMgaW1hZ2UgbWV0YWRhdGEgKHBoeXNpY2FsIHNpemUgKyBkaW1lbnNpb25zKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTWV0YWRhdGEge1xuICBjaGFubmVsQ291bnQ6IG51bWJlcjtcbiAgcmdiQ2hhbm5lbHM6IG51bWJlcjtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHo6IG51bWJlcjtcbiAgLyoqIFBoeXNpY2FsIHBpeGVsIHNpemUgaW4gwrVtOyBudWxsL3VuZGVmaW5lZCB3aGVuIHRoZSBmb3JtYXQgcmVwb3J0cyBub25lLiAqL1xuICBtcHBYPzogbnVtYmVyIHwgbnVsbDtcbiAgbXBwWT86IG51bWJlciB8IG51bGw7XG4gIC8qKiBQZXItY2hhbm5lbCBuYW1lL2NvbG9yL0xVVCBmb3IgbXVsdGljaGFubmVsIChub24tUkdCKSBpbWFnZXMsIHdoZW4ga25vd24uICovXG4gIGNoYW5uZWxJbmZvPzogSUNoYW5uZWxJbmZvW10gfCBudWxsO1xufVxuXG4vKiogVGhlIGltYWdlIGN1cnJlbnRseSBiZWluZyB2aXN1YWxpemVkLiBGaWVsZCBvcHRpb25hbGl0eSBtaXJyb3JzIHRoZSBob3N0J3NcbiAqICBgSW1hZ2VJbmZvYCBzbyBpdHMgaW5zdGFuY2VzIGFyZSBhc3NpZ25hYmxlIHRvIHRoaXMgaW50ZXJmYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VJbmZvIHtcbiAgaXNHcmF5c2NhbGU6IGJvb2xlYW47XG4gIHRydWVJbWFnZVNpemU6IG51bWJlcltdO1xuICB1cmxzOiBzdHJpbmdbXTtcbiAgLyoqIE9wdGlvbmFsIHNtYWxsLXRpZXIgVVJMcyAoZmFzdCBibHVycnkgcGxhY2Vob2xkZXIpLCAxOjEgd2l0aCBgdXJsc2AuICovXG4gIHNtYWxsVXJscz86IHN0cmluZ1tdO1xuICBpc1N0YWNrOiBib29sZWFuO1xuICBzaG93U3RhY2s6IGJvb2xlYW47XG4gIHNjYWxlUmF0aW86IGJvb2xlYW47XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHJvaUpzb25TdHI/OiBzdHJpbmc7XG4gIC8qKiBQZXItc2xpY2UgUk9JIEdlb0pTT04sIGFsaWduZWQgMToxIHdpdGggYHVybHNgLCBmb3IgYSBmb2xkZXIgc3RhY2sgd2hlcmVcbiAgICogIGVhY2ggc2xpY2UgaXMgYSBzZXBhcmF0ZSBmaWxlIHdpdGggaXRzIG93biBzaWJsaW5nIGA8c3RlbT4uZ2VvanNvbmBcbiAgICogIChgbnVsbGAgZm9yIHNsaWNlcyB3aXRob3V0IG9uZSkuIFdoZW4gcHJlc2VudCwgdGhlIGNvbXBvbmVudCBhcHBsaWVzXG4gICAqICBgcm9pSnNvblN0cnNbel1gIGZvciB0aGUgZGlzcGxheWVkIHNsaWNlIGFuZCBzd2FwcyBpdCBvbiBzY3J1YiDigJQgYXNcbiAgICogIG9wcG9zZWQgdG8gdGhlIHNjYWxhciBgcm9pSnNvblN0cmAsIHdoaWNoIGlzIG9uZSBST0kgc2V0IGZvciB0aGUgd2hvbGVcbiAgICogIGltYWdlIChhIHNpbmdsZSBmaWxlIG9yIGEgc2VydmVyIHotc3RhY2spLiAoaml0LXVpIzkzKSAqL1xuICByb2lKc29uU3Rycz86IChzdHJpbmcgfCBudWxsKVtdO1xuICBpbWFnZU1ldGE6IElJbWFnZU1ldGFkYXRhW107XG4gIC8qKiBIb3cgdGhlIE9wZW5TZWFkcmFnb24gYmFja2VuZCBzaG91bGQgc291cmNlIHRoaXMgaW1hZ2UuXG4gICAqICAtIGB0cnVlYC9hYnNlbnQgKGRlZmF1bHQpOiBzZXJ2ZXItdGlsZWQg4oCUIE9TRCBwb2xscyBgL3RpbGVzL2luZm9gIGZvciBhXG4gICAqICAgIHB5cmFtaWQgYW5kIGZldGNoZXMgdGlsZXMgZnJvbSB0aGUgc2xpZGUtY3JvcCBzZXJ2ZXIgKHdob2xlLXNsaWRlIHBhdGgpLlxuICAgKiAgLSBgZmFsc2VgOiBhIHNlbGYtY29udGFpbmVkLCBkaXJlY3RseS1sb2FkYWJsZSBpbWFnZSDigJQgYHVybHNbekluZGV4XWAgaXMgYVxuICAgKiAgICBjb21wbGV0ZSBpbWFnZSAoZS5nLiBhIGBibG9iOmAgVVJMIGJ1aWx0IGZyb20gYSBjbGllbnQtc2lkZSBwaXhlbCBidWZmZXIpLFxuICAgKiAgICBvcGVuZWQgdmlhIE9TRCdzIHNpbmdsZS1pbWFnZSBzb3VyY2Ugd2l0aCBubyB0aWxlIHNlcnZlci4gTGV0cyBpbi1tZW1vcnlcbiAgICogICAgaW1hZ2VzICh0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgdXNlIHRoZSBPU0Qgdmlld2VyIHdpdGhvdXQgYSByb3VuZC10cmlwLiAqL1xuICB0aWxlZD86IGJvb2xlYW47XG4gIC8qKiBPbmUtc2hvdCBoaW50OiBvcGVuIHRoZSBzdGFjayBvbiB0aGlzIHNsaWNlIGluc3RlYWQgb2Ygc2xpY2UgMCAoZS5nLiB0aGVcbiAgICogIGhvc3QgY2xpY2tlZCBhIHNwZWNpZmljIGZpbGUgd2l0aGluIGEgbnVtYmVyZWQgaW1hZ2Ugc2VyaWVzKS4gVGhlXG4gICAqICBjb21wb25lbnQgY29uc3VtZXMgYW5kIGNsZWFycyB0aGlzIHRoZSBmaXJzdCB0aW1lIGl0IHNlZXMgdGhlIG9iamVjdCwgc29cbiAgICogIHJlLWRlbGl2ZXJpbmcgdGhlIHNhbWUgSW1hZ2VJbmZvIChlLmcuIGEgcGxvdC10eXBlIHN3aXRjaCkgZG9lc24ndCByZXNldFxuICAgKiAgdGhlIHVzZXIncyBjdXJyZW50IHNjcnViIHBvc2l0aW9uLiAqL1xuICBpbml0aWFsWkluZGV4PzogbnVtYmVyO1xufVxuIl19
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared intensity helpers (refactoring plan, Step 5). The two backends use
3
+ * two DIFFERENT scalar projections by design — do not unify them:
4
+ * - Plotly projects `[r,g,b]` frame cells with ITU-R BT.601 luminance (matches
5
+ * what its heatmap has always rendered);
6
+ * - the OSD tile path takes the max of the decoded RGBA channels (single-band
7
+ * tiles encode gray as r=g=b, so max is exact; it also tolerates tinted
8
+ * pixels).
9
+ */
10
+ /** ITU-R BT.601 luminance for an RGB pixel (Plotly's scalar projection). */
11
+ export function bt601Luminance(r, g, b) {
12
+ return 0.299 * r + 0.587 * g + 0.114 * b;
13
+ }
14
+ /** Max of the three channels (the OSD tile path's scalar projection).
15
+ * NOTE: the per-pixel recolor loop in `osd/display-pipeline.ts` keeps this
16
+ * inlined on purpose — it runs ~262k times per tile. */
17
+ export function maxRgb(r, g, b) {
18
+ return r >= g ? (r >= b ? r : b) : g >= b ? g : b;
19
+ }
20
+ /** Wrap 256 raw bin counts as an IHistogram (0..255 left edges + max). */
21
+ export function histogram256(counts) {
22
+ return {
23
+ bins: Array.from({ length: 256 }, (_, i) => i),
24
+ counts,
25
+ max: counts.reduce((m, c) => (c > m ? c : m), 0),
26
+ };
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZW5zaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvaW50ZW5zaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7OztHQVFHO0FBRUgsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO0lBQzVELE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEOzt5REFFeUQ7QUFDekQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFnQjtJQUMzQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTTtRQUNOLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElIaXN0b2dyYW0gfSBmcm9tICcuL2NoYW5uZWwtaGlzdG9ncmFtLWFwaS5jb250cmFjdCc7XG5cbi8qKlxuICogU2hhcmVkIGludGVuc2l0eSBoZWxwZXJzIChyZWZhY3RvcmluZyBwbGFuLCBTdGVwIDUpLiBUaGUgdHdvIGJhY2tlbmRzIHVzZVxuICogdHdvIERJRkZFUkVOVCBzY2FsYXIgcHJvamVjdGlvbnMgYnkgZGVzaWduIOKAlCBkbyBub3QgdW5pZnkgdGhlbTpcbiAqICAtIFBsb3RseSBwcm9qZWN0cyBgW3IsZyxiXWAgZnJhbWUgY2VsbHMgd2l0aCBJVFUtUiBCVC42MDEgbHVtaW5hbmNlIChtYXRjaGVzXG4gKiAgICB3aGF0IGl0cyBoZWF0bWFwIGhhcyBhbHdheXMgcmVuZGVyZWQpO1xuICogIC0gdGhlIE9TRCB0aWxlIHBhdGggdGFrZXMgdGhlIG1heCBvZiB0aGUgZGVjb2RlZCBSR0JBIGNoYW5uZWxzIChzaW5nbGUtYmFuZFxuICogICAgdGlsZXMgZW5jb2RlIGdyYXkgYXMgcj1nPWIsIHNvIG1heCBpcyBleGFjdDsgaXQgYWxzbyB0b2xlcmF0ZXMgdGludGVkXG4gKiAgICBwaXhlbHMpLlxuICovXG5cbi8qKiBJVFUtUiBCVC42MDEgbHVtaW5hbmNlIGZvciBhbiBSR0IgcGl4ZWwgKFBsb3RseSdzIHNjYWxhciBwcm9qZWN0aW9uKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidDYwMUx1bWluYW5jZShyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDAuMjk5ICogciArIDAuNTg3ICogZyArIDAuMTE0ICogYjtcbn1cblxuLyoqIE1heCBvZiB0aGUgdGhyZWUgY2hhbm5lbHMgKHRoZSBPU0QgdGlsZSBwYXRoJ3Mgc2NhbGFyIHByb2plY3Rpb24pLlxuICogIE5PVEU6IHRoZSBwZXItcGl4ZWwgcmVjb2xvciBsb29wIGluIGBvc2QvZGlzcGxheS1waXBlbGluZS50c2Aga2VlcHMgdGhpc1xuICogIGlubGluZWQgb24gcHVycG9zZSDigJQgaXQgcnVucyB+MjYyayB0aW1lcyBwZXIgdGlsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhSZ2IocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiByID49IGcgPyAociA+PSBiID8gciA6IGIpIDogZyA+PSBiID8gZyA6IGI7XG59XG5cbi8qKiBXcmFwIDI1NiByYXcgYmluIGNvdW50cyBhcyBhbiBJSGlzdG9ncmFtICgwLi4yNTUgbGVmdCBlZGdlcyArIG1heCkuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9ncmFtMjU2KGNvdW50czogbnVtYmVyW10pOiBJSGlzdG9ncmFtIHtcbiAgcmV0dXJuIHtcbiAgICBiaW5zOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF8sIGkpID0+IGkpLFxuICAgIGNvdW50cyxcbiAgICBtYXg6IGNvdW50cy5yZWR1Y2UoKG0sIGMpID0+IChjID4gbSA/IGMgOiBtKSwgMCksXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,112 @@
1
+ /**
2
+ * The kind of rendering a viewer backend should produce for the loaded data.
3
+ *
4
+ * Lives in `contracts/` (rather than inside a specific backend) because it is
5
+ * part of the backend-neutral plotting contract: both the Plotly backend and
6
+ * any future backend (e.g. OpenSeadragon) accept a `PlotType` on `plot()`.
7
+ *
8
+ * NOTE: a backend may not support every type — 3D types (`SURFACE`,
9
+ * `SCATTER3D`, `ISOSURFACE`) are gated behind `ViewerFeature.Surface3D` in the
10
+ * capabilities contract, so a 2D-only backend can advertise that it can't
11
+ * render them and the UI can hide the option.
12
+ */
13
+ export var PlotType;
14
+ (function (PlotType) {
15
+ /** Natively-tiled, zoomable raster rendered by OpenSeadragon (the default
16
+ * view for an image). Heatmap remains the Plotly scalar-image rendering. */
17
+ PlotType["IMAGE"] = "image";
18
+ PlotType["HEATMAP"] = "heatmap";
19
+ PlotType["SURFACE"] = "surface";
20
+ PlotType["CONTOUR"] = "contour";
21
+ PlotType["SCATTER"] = "scatter";
22
+ // LINE: reserved/stubbed — intensity profiles are now Region-based (kept for future use)
23
+ PlotType["LINE"] = "line";
24
+ PlotType["SCATTER3D"] = "scatter3d";
25
+ PlotType["ISOSURFACE"] = "isosurface";
26
+ /** WebGPU napari-js renderings (jit-ui#102), selectable alongside the OSD/Plotly types. The 3D
27
+ * types take a runtime decimate factor (Full / ½ / ¼ / ⅛) instead of fixed hi/lo-res variants. */
28
+ PlotType["NAPARI_IMAGE"] = "napari-image";
29
+ PlotType["NAPARI_VOLUME"] = "napari-volume";
30
+ PlotType["NAPARI_ISOSURFACE"] = "napari-isosurface";
31
+ /** WebGPU height-field surface mesh (z = intensity), the napari-js analog of Plotly SURFACE. */
32
+ PlotType["NAPARI_SURFACE"] = "napari-surface";
33
+ /** WebGPU 2D scatter of region centroids (napari-js analog of Plotly SCATTER). */
34
+ PlotType["NAPARI_SCATTER"] = "napari-scatter";
35
+ /** WebGPU 3D scatter of the downsampled voxel cloud (napari-js analog of Plotly SCATTER3D). */
36
+ PlotType["NAPARI_SCATTER3D"] = "napari-scatter3d";
37
+ })(PlotType || (PlotType = {}));
38
+ /**
39
+ * Single source of truth for plot-type metadata. LINE is intentionally absent —
40
+ * intensity profiles are now Region-based line ROIs (available in Heatmap/Image
41
+ * mode), so LINE is no longer offered in the selector (the enum member is kept
42
+ * for future use). Hence the `Partial` record.
43
+ */
44
+ // Dropdown order = insertion order: Image (OSD) default at the top, then all Plotly plot modes
45
+ // grouped, then all napari-js WebGPU modes grouped.
46
+ // `productionLabel` marks the curated default-selector set (jit-ui#70 follow-up):
47
+ // - IMAGE / HEATMAP / CONTOUR (2D) and the napari SURFACE / VOLUME / ISOSURFACE
48
+ // (3D) are the modes shown by default, under suffix-free names.
49
+ // - Everything else (all Scatters, NAPARI_IMAGE, and the Plotly SURFACE /
50
+ // ISOSURFACE that the napari versions supersede) is test-only — no
51
+ // `productionLabel`, so it appears only when the host enables test mode.
52
+ export const PLOT_TYPE_DESCRIPTORS = {
53
+ // ── Default ──
54
+ [PlotType.IMAGE]: { type: PlotType.IMAGE, label: 'Image (OSD)', productionLabel: 'Image', icon: 'pi pi-image', dimensions: '2d', source: 'image' },
55
+ // ── Plotly ──
56
+ [PlotType.HEATMAP]: { type: PlotType.HEATMAP, label: 'Heatmap (Plotly)', productionLabel: 'Heatmap', icon: 'assets/plotting/heatmap.svg', dimensions: '2d', source: 'image' },
57
+ [PlotType.CONTOUR]: { type: PlotType.CONTOUR, label: 'Contour (Plotly)', productionLabel: 'Contour', icon: 'assets/plotting/contour.svg', dimensions: '2d', source: 'image', requiresGrayscale: true },
58
+ [PlotType.SCATTER]: { type: PlotType.SCATTER, label: 'Scatter 2D (Plotly)', icon: 'pi pi-chart-scatter', dimensions: '2d', source: 'regions' },
59
+ [PlotType.SURFACE]: { type: PlotType.SURFACE, label: 'Surface (Plotly)', icon: 'assets/plotting/surface.svg', dimensions: '3d', source: 'image', requiresGrayscale: true },
60
+ [PlotType.SCATTER3D]: { type: PlotType.SCATTER3D, label: 'Scatter 3D (Plotly)', icon: 'assets/plotting/3d-coordinates.svg', dimensions: '3d', source: 'image', requiresStack: true, requiresGrayscale: true },
61
+ [PlotType.ISOSURFACE]: { type: PlotType.ISOSURFACE, label: 'Isosurface (Plotly)', icon: 'assets/plotting/isosurface.svg', dimensions: '3d', source: 'image', requiresStack: true, requiresGrayscale: true },
62
+ // ── napari-js WebGPU (jit-ui#102). The 3D types take a runtime decimate factor. ──
63
+ [PlotType.NAPARI_IMAGE]: { type: PlotType.NAPARI_IMAGE, label: 'Image (napari · WebGPU)', icon: 'pi pi-image', dimensions: '2d', source: 'image' },
64
+ [PlotType.NAPARI_SCATTER]: { type: PlotType.NAPARI_SCATTER, label: 'Scatter 2D (napari · WebGPU)', icon: 'pi pi-chart-scatter', dimensions: '2d', source: 'regions' },
65
+ [PlotType.NAPARI_SURFACE]: { type: PlotType.NAPARI_SURFACE, label: 'Surface (napari · WebGPU)', productionLabel: 'Surface', icon: 'assets/plotting/surface.svg', dimensions: '3d', source: 'image', requiresGrayscale: true },
66
+ [PlotType.NAPARI_SCATTER3D]: { type: PlotType.NAPARI_SCATTER3D, label: 'Scatter 3D (napari · WebGPU)', icon: 'assets/plotting/3d-coordinates.svg', dimensions: '3d', source: 'image', requiresStack: true, requiresGrayscale: true },
67
+ [PlotType.NAPARI_VOLUME]: { type: PlotType.NAPARI_VOLUME, label: 'Volume (napari · WebGPU)', productionLabel: 'Volume', icon: 'assets/plotting/cube-3d.svg', dimensions: '3d', source: 'image', requiresStack: true, requiresGrayscale: true },
68
+ [PlotType.NAPARI_ISOSURFACE]: { type: PlotType.NAPARI_ISOSURFACE, label: 'Isosurface (napari · WebGPU)', productionLabel: 'Isosurface', icon: 'assets/plotting/isosurface.svg', dimensions: '3d', source: 'image', requiresStack: true, requiresGrayscale: true },
69
+ };
70
+ export function getPlotTypeDescriptor(type) {
71
+ return PLOT_TYPE_DESCRIPTORS[type];
72
+ }
73
+ export function isThreeDimensional(type) {
74
+ return PLOT_TYPE_DESCRIPTORS[type]?.dimensions === '3d';
75
+ }
76
+ // ── napari-js 3D plot-type predicates ────────────────────────────────────────
77
+ /** napari-js volume. */
78
+ export function isNapariVolume(type) {
79
+ return type === PlotType.NAPARI_VOLUME;
80
+ }
81
+ /** napari-js isosurface. */
82
+ export function isNapariIsosurface(type) {
83
+ return type === PlotType.NAPARI_ISOSURFACE;
84
+ }
85
+ /** napari-js height-field surface mesh. */
86
+ export function isNapariSurface(type) {
87
+ return type === PlotType.NAPARI_SURFACE;
88
+ }
89
+ /** napari-js 2D scatter (region centroids). */
90
+ export function isNapariScatter(type) {
91
+ return type === PlotType.NAPARI_SCATTER;
92
+ }
93
+ /** napari-js 3D scatter (voxel point cloud). */
94
+ export function isNapariScatter3d(type) {
95
+ return type === PlotType.NAPARI_SCATTER3D;
96
+ }
97
+ /** Any napari-js 3D plot type (volume, isosurface, surface, or 3D scatter). Resolution is a runtime
98
+ * decimate factor (Full / ½ / ¼ / ⅛) — see the service's `resolutionScale`. */
99
+ export function isNapari3d(type) {
100
+ return (isNapariVolume(type) || isNapariIsosurface(type) || isNapariSurface(type) || isNapariScatter3d(type));
101
+ }
102
+ /** Decimate factors offered by the Resolution control (1 = Full … 8 = ⅛). */
103
+ export const NAPARI_DECIMATE_OPTIONS = [
104
+ { label: 'Full', value: 1 },
105
+ { label: '½', value: 2 },
106
+ { label: '¼', value: 4 },
107
+ { label: '⅛', value: 8 },
108
+ ];
109
+ /** Default decimate factor: ¼. The caps are set so ¼ is a sensible default resolution while ½ and
110
+ * Full offer 2× and 4× the detail for opt-in high-resolution renders. */
111
+ export const NAPARI_DEFAULT_DECIMATE = 4;
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvdC10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvcGxvdC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFOLElBQVksUUF1Qlg7QUF2QkQsV0FBWSxRQUFRO0lBQ2xCO2lGQUM2RTtJQUM3RSwyQkFBZSxDQUFBO0lBQ2YsK0JBQW1CLENBQUE7SUFDbkIsK0JBQW1CLENBQUE7SUFDbkIsK0JBQW1CLENBQUE7SUFDbkIsK0JBQW1CLENBQUE7SUFDbkIseUZBQXlGO0lBQ3pGLHlCQUFhLENBQUE7SUFDYixtQ0FBdUIsQ0FBQTtJQUN2QixxQ0FBeUIsQ0FBQTtJQUN6Qjt1R0FDbUc7SUFDbkcseUNBQTZCLENBQUE7SUFDN0IsMkNBQStCLENBQUE7SUFDL0IsbURBQXVDLENBQUE7SUFDdkMsZ0dBQWdHO0lBQ2hHLDZDQUFpQyxDQUFBO0lBQ2pDLGtGQUFrRjtJQUNsRiw2Q0FBaUMsQ0FBQTtJQUNqQywrRkFBK0Y7SUFDL0YsaURBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQXZCVyxRQUFRLEtBQVIsUUFBUSxRQXVCbkI7QUFnREQ7Ozs7O0dBS0c7QUFDSCwrRkFBK0Y7QUFDL0Ysb0RBQW9EO0FBQ3BELGtGQUFrRjtBQUNsRixpRkFBaUY7QUFDakYsbUVBQW1FO0FBQ25FLDJFQUEyRTtBQUMzRSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFrRDtJQUNsRixnQkFBZ0I7SUFDaEIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBTyxLQUFLLEVBQUUsYUFBYSxFQUFZLGVBQWUsRUFBRSxPQUFPLEVBQU8sSUFBSSxFQUFFLGFBQWEsRUFBcUIsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQzlM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SUFBYztJQUM1QyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsY0FBYyxDQUFDO0FBQzFDLENBQUM7QUFDRCwrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFjO0lBQzVDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUM7QUFDMUMsQ0FBQztBQUNELGdEQUFnRDtBQUNoRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYztJQUM5QyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7QUFDNUMsQ0FBQztBQUNEO2dGQUNnRjtBQUNoRixNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWM7SUFDdkMsT0FBTyxDQUNMLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQ3JHLENBQUM7QUFDSixDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF1QztJQUN6RSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUMzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtDQUN6QixDQUFDO0FBRUY7MEVBQzBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGtpbmQgb2YgcmVuZGVyaW5nIGEgdmlld2VyIGJhY2tlbmQgc2hvdWxkIHByb2R1Y2UgZm9yIHRoZSBsb2FkZWQgZGF0YS5cbiAqXG4gKiBMaXZlcyBpbiBgY29udHJhY3RzL2AgKHJhdGhlciB0aGFuIGluc2lkZSBhIHNwZWNpZmljIGJhY2tlbmQpIGJlY2F1c2UgaXQgaXNcbiAqIHBhcnQgb2YgdGhlIGJhY2tlbmQtbmV1dHJhbCBwbG90dGluZyBjb250cmFjdDogYm90aCB0aGUgUGxvdGx5IGJhY2tlbmQgYW5kXG4gKiBhbnkgZnV0dXJlIGJhY2tlbmQgKGUuZy4gT3BlblNlYWRyYWdvbikgYWNjZXB0IGEgYFBsb3RUeXBlYCBvbiBgcGxvdCgpYC5cbiAqXG4gKiBOT1RFOiBhIGJhY2tlbmQgbWF5IG5vdCBzdXBwb3J0IGV2ZXJ5IHR5cGUg4oCUIDNEIHR5cGVzIChgU1VSRkFDRWAsXG4gKiBgU0NBVFRFUjNEYCwgYElTT1NVUkZBQ0VgKSBhcmUgZ2F0ZWQgYmVoaW5kIGBWaWV3ZXJGZWF0dXJlLlN1cmZhY2UzRGAgaW4gdGhlXG4gKiBjYXBhYmlsaXRpZXMgY29udHJhY3QsIHNvIGEgMkQtb25seSBiYWNrZW5kIGNhbiBhZHZlcnRpc2UgdGhhdCBpdCBjYW4ndFxuICogcmVuZGVyIHRoZW0gYW5kIHRoZSBVSSBjYW4gaGlkZSB0aGUgb3B0aW9uLlxuICovXG5leHBvcnQgZW51bSBQbG90VHlwZSB7XG4gIC8qKiBOYXRpdmVseS10aWxlZCwgem9vbWFibGUgcmFzdGVyIHJlbmRlcmVkIGJ5IE9wZW5TZWFkcmFnb24gKHRoZSBkZWZhdWx0XG4gICAqICB2aWV3IGZvciBhbiBpbWFnZSkuIEhlYXRtYXAgcmVtYWlucyB0aGUgUGxvdGx5IHNjYWxhci1pbWFnZSByZW5kZXJpbmcuICovXG4gIElNQUdFID0gJ2ltYWdlJyxcbiAgSEVBVE1BUCA9ICdoZWF0bWFwJyxcbiAgU1VSRkFDRSA9ICdzdXJmYWNlJyxcbiAgQ09OVE9VUiA9ICdjb250b3VyJyxcbiAgU0NBVFRFUiA9ICdzY2F0dGVyJyxcbiAgLy8gTElORTogcmVzZXJ2ZWQvc3R1YmJlZCDigJQgaW50ZW5zaXR5IHByb2ZpbGVzIGFyZSBub3cgUmVnaW9uLWJhc2VkIChrZXB0IGZvciBmdXR1cmUgdXNlKVxuICBMSU5FID0gJ2xpbmUnLFxuICBTQ0FUVEVSM0QgPSAnc2NhdHRlcjNkJyxcbiAgSVNPU1VSRkFDRSA9ICdpc29zdXJmYWNlJyxcbiAgLyoqIFdlYkdQVSBuYXBhcmktanMgcmVuZGVyaW5ncyAoaml0LXVpIzEwMiksIHNlbGVjdGFibGUgYWxvbmdzaWRlIHRoZSBPU0QvUGxvdGx5IHR5cGVzLiBUaGUgM0RcbiAgICogIHR5cGVzIHRha2UgYSBydW50aW1lIGRlY2ltYXRlIGZhY3RvciAoRnVsbCAvIMK9IC8gwrwgLyDihZspIGluc3RlYWQgb2YgZml4ZWQgaGkvbG8tcmVzIHZhcmlhbnRzLiAqL1xuICBOQVBBUklfSU1BR0UgPSAnbmFwYXJpLWltYWdlJyxcbiAgTkFQQVJJX1ZPTFVNRSA9ICduYXBhcmktdm9sdW1lJyxcbiAgTkFQQVJJX0lTT1NVUkZBQ0UgPSAnbmFwYXJpLWlzb3N1cmZhY2UnLFxuICAvKiogV2ViR1BVIGhlaWdodC1maWVsZCBzdXJmYWNlIG1lc2ggKHogPSBpbnRlbnNpdHkpLCB0aGUgbmFwYXJpLWpzIGFuYWxvZyBvZiBQbG90bHkgU1VSRkFDRS4gKi9cbiAgTkFQQVJJX1NVUkZBQ0UgPSAnbmFwYXJpLXN1cmZhY2UnLFxuICAvKiogV2ViR1BVIDJEIHNjYXR0ZXIgb2YgcmVnaW9uIGNlbnRyb2lkcyAobmFwYXJpLWpzIGFuYWxvZyBvZiBQbG90bHkgU0NBVFRFUikuICovXG4gIE5BUEFSSV9TQ0FUVEVSID0gJ25hcGFyaS1zY2F0dGVyJyxcbiAgLyoqIFdlYkdQVSAzRCBzY2F0dGVyIG9mIHRoZSBkb3duc2FtcGxlZCB2b3hlbCBjbG91ZCAobmFwYXJpLWpzIGFuYWxvZyBvZiBQbG90bHkgU0NBVFRFUjNEKS4gKi9cbiAgTkFQQVJJX1NDQVRURVIzRCA9ICduYXBhcmktc2NhdHRlcjNkJyxcbn1cblxuLyoqIEhvdyBtYW55IHNwYXRpYWwgZGltZW5zaW9ucyBhIHBsb3QgdHlwZSByZW5kZXJzIGluLiAqL1xuZXhwb3J0IHR5cGUgUGxvdERpbWVuc2lvbnMgPSAnMmQnIHwgJzNkJztcblxuLyoqXG4gKiBXaGVyZSBhIHBsb3QgdHlwZSBwdWxscyBpdHMgZGF0YSBmcm9tOlxuICogIC0gYGltYWdlYCAgIOKAlCB0aGUgbG9hZGVkIHBpeGVsIG1hdHJpY2VzIC8gei1zdGFjayAoSEVBVE1BUCwgU1VSRkFDRSwg4oCmKVxuICogIC0gYHJlZ2lvbnNgIOKAlCB0aGUgZHJhd24vZGVyaXZlZCByZWdpb25zIChTQ0FUVEVSIG9mIHJlZ2lvbiBjZW50cm9pZHMsIOKApilcbiAqL1xuZXhwb3J0IHR5cGUgUGxvdERhdGFTb3VyY2UgPSAnaW1hZ2UnIHwgJ3JlZ2lvbnMnO1xuXG4vKipcbiAqIEJhY2tlbmQtbmV1dHJhbCBtZXRhZGF0YSBhYm91dCBhIHBsb3QgdHlwZS4gRHJpdmVzIFVJIGFmZm9yZGFuY2VzICh3aGljaFxuICogdHlwZXMgYXJlIDNELCB3aGljaCBuZWVkIGFuIGltYWdlIHN0YWNrLCBob3cgdG8gbGFiZWwgdGhlbSBpbiBhIGRyb3Bkb3duKVxuICogd2l0aG91dCBhbnkgYmFja2VuZCdzIHRyYWNlLWJ1aWxkaW5nIGxvZ2ljIGxlYWtpbmcgaW50byB0aGUgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdFR5cGVEZXNjcmlwdG9yIHtcbiAgdHlwZTogUGxvdFR5cGU7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgbWVudXMvZHJvcGRvd25zLiBTaG93biBpbiAqKnRlc3QgbW9kZSoqLCB3aGVyZVxuICAgKiAgZXZlcnkgYmFja2VuZCdzIHR5cGUgaXMgb2ZmZXJlZCwgc28gaXQgY2FycmllcyB0aGUgYmFja2VuZCBzdWZmaXggKGUuZy5cbiAgICogIFwiU3VyZmFjZSAobmFwYXJpIMK3IFdlYkdQVSlcIikgdG8gZGlzYW1iaWd1YXRlIHNhbWUtbmFtZWQgbW9kZXMuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMYWJlbCBzaG93biBpbiB0aGUgKipkZWZhdWx0IChub24tdGVzdCkgc2VsZWN0b3IqKiwgd2hlcmUgYSBzaW5nbGUgY3VyYXRlZFxuICAgKiBtb2RlIG93bnMgZWFjaCBuYW1lIOKAlCBzbyBpdCBkcm9wcyB0aGUgYmFja2VuZCBzdWZmaXggKGUuZy4ganVzdCBcIlN1cmZhY2VcIikuXG4gICAqIEEgdHlwZSBXSVRIT1VUIGEgYHByb2R1Y3Rpb25MYWJlbGAgaXMgKip0ZXN0LW9ubHkqKjogaGlkZGVuIGZyb20gdGhlIGRlZmF1bHRcbiAgICogc2VsZWN0b3IgYW5kIHNob3duIG9ubHkgd2hlbiB0aGUgaG9zdCBlbmFibGVzIHRlc3QgbW9kZS4gVGhpcyBpcyB0aGUgc2luZ2xlXG4gICAqIGtub2IgdGhhdCBjdXJhdGVzIHRoZSBkZWZhdWx0IHBsb3QtbW9kZSBsaXN0IChqYXgtaW1hZ2UtdmlzdWFsaXphdGlvbikuXG4gICAqL1xuICBwcm9kdWN0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJY29uIHNob3duIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYWJlbCBpbiB0aGUgcGxvdC10eXBlIHNlbGVjdG9yLiBFaXRoZXIgYVxuICAgKiBQcmltZU5HIGljb24gY2xhc3MgKHN0YXJ0cyB3aXRoIGBwaSBgLCBlLmcuIGBwaSBwaS1pbWFnZWApIHJlbmRlcmVkIGFzIGFcbiAgICogZm9udCBnbHlwaCwgb3IgYSBzZXJ2ZWQgU1ZHIGFzc2V0IHBhdGggKGUuZy4gYGFzc2V0cy9wbG90dGluZy9zdXJmYWNlLnN2Z2ApXG4gICAqIHJlbmRlcmVkIGFzIGFuIGA8aW1nPmAuIEJvdGggYXJlIHRpbnRlZCB0byB0aGUgdG9vbGJhcidzIHByaW1hcnkgYmx1ZS5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRpbWVuc2lvbnM6IFBsb3REaW1lbnNpb25zO1xuICBzb3VyY2U6IFBsb3REYXRhU291cmNlO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSB0eXBlIG9ubHkgbWFrZXMgc2Vuc2Ugb3ZlciBhIG11bHRpLWZyYW1lIHotc3RhY2suICovXG4gIHJlcXVpcmVzU3RhY2s/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSB0eXBlIG1hcHMgYSBzaW5nbGUgc2NhbGFyIGludGVuc2l0eSBwZXIgcGl4ZWwgKGNvbnRvdXIsXG4gICAqICBzdXJmYWNlLCBpbnRlbnNpdHkgcHJvZmlsZSwgaXNvc3VyZmFjZSkg4oCUIG9ubHkgbWVhbmluZ2Z1bCBmb3IgZ3JheXNjYWxlLlxuICAgKiAgSW1hZ2UvSGVhdG1hcCByZW5kZXIgUkdCIGZpbmU7IFNjYXR0ZXIgdXNlcyByZWdpb25zLiAqL1xuICByZXF1aXJlc0dyYXlzY2FsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgcGxvdC10eXBlIG1ldGFkYXRhLiBMSU5FIGlzIGludGVudGlvbmFsbHkgYWJzZW50IOKAlFxuICogaW50ZW5zaXR5IHByb2ZpbGVzIGFyZSBub3cgUmVnaW9uLWJhc2VkIGxpbmUgUk9JcyAoYXZhaWxhYmxlIGluIEhlYXRtYXAvSW1hZ2VcbiAqIG1vZGUpLCBzbyBMSU5FIGlzIG5vIGxvbmdlciBvZmZlcmVkIGluIHRoZSBzZWxlY3RvciAodGhlIGVudW0gbWVtYmVyIGlzIGtlcHRcbiAqIGZvciBmdXR1cmUgdXNlKS4gSGVuY2UgdGhlIGBQYXJ0aWFsYCByZWNvcmQuXG4gKi9cbi8vIERyb3Bkb3duIG9yZGVyID0gaW5zZXJ0aW9uIG9yZGVyOiBJbWFnZSAoT1NEKSBkZWZhdWx0IGF0IHRoZSB0b3AsIHRoZW4gYWxsIFBsb3RseSBwbG90IG1vZGVzXG4vLyBncm91cGVkLCB0aGVuIGFsbCBuYXBhcmktanMgV2ViR1BVIG1vZGVzIGdyb3VwZWQuXG4vLyBgcHJvZHVjdGlvbkxhYmVsYCBtYXJrcyB0aGUgY3VyYXRlZCBkZWZhdWx0LXNlbGVjdG9yIHNldCAoaml0LXVpIzcwIGZvbGxvdy11cCk6XG4vLyAgLSBJTUFHRSAvIEhFQVRNQVAgLyBDT05UT1VSICgyRCkgYW5kIHRoZSBuYXBhcmkgU1VSRkFDRSAvIFZPTFVNRSAvIElTT1NVUkZBQ0Vcbi8vICAgICgzRCkgYXJlIHRoZSBtb2RlcyBzaG93biBieSBkZWZhdWx0LCB1bmRlciBzdWZmaXgtZnJlZSBuYW1lcy5cbi8vICAtIEV2ZXJ5dGhpbmcgZWxzZSAoYWxsIFNjYXR0ZXJzLCBOQVBBUklfSU1BR0UsIGFuZCB0aGUgUGxvdGx5IFNVUkZBQ0UgL1xuLy8gICAgSVNPU1VSRkFDRSB0aGF0IHRoZSBuYXBhcmkgdmVyc2lvbnMgc3VwZXJzZWRlKSBpcyB0ZXN0LW9ubHkg4oCUIG5vXG4vLyAgICBgcHJvZHVjdGlvbkxhYmVsYCwgc28gaXQgYXBwZWFycyBvbmx5IHdoZW4gdGhlIGhvc3QgZW5hYmxlcyB0ZXN0IG1vZGUuXG5leHBvcnQgY29uc3QgUExPVF9UWVBFX0RFU0NSSVBUT1JTOiBQYXJ0aWFsPFJlY29yZDxQbG90VHlwZSwgUGxvdFR5cGVEZXNjcmlwdG9yPj4gPSB7XG4gIC8vIOKUgOKUgCBEZWZhdWx0IOKUgOKUgFxuICBbUGxvdFR5cGUuSU1BR0VdOiAgICAgIHsgdHlwZTogUGxvdFR5cGUuSU1BR0UsICAgICAgbGFiZWw6ICdJbWFnZSAoT1NEKScsICAgICAgICAgICBwcm9kdWN0aW9uTGFiZWw6ICdJbWFnZScsICAgICAgaWNvbjogJ3BpIHBpLWltYWdlJywgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbnM6ICcyZCcsIHNvdXJjZTogJ2ltYWdlJyB9LFxuICAvLyDilIDilIAgUGxvdGx5IOKUgOKUgFxuICBbUGxvdFR5cGUuSEVBVE1BUF06ICAgIHsgdHlwZTogUGxvdFR5cGUuSEVBVE1BUCwgICAgbGFiZWw6ICdIZWF0bWFwIChQbG90bHkpJywgICAgICBwcm9kdWN0aW9uTGFiZWw6ICdIZWF0bWFwJywgICAgaWNvbjogJ2Fzc2V0cy9wbG90dGluZy9oZWF0bWFwLnN2ZycsICAgIGRpbWVuc2lvbnM6ICcyZCcsIHNvdXJjZTogJ2ltYWdlJyB9LFxuICBbUGxvdFR5cGUuQ09OVE9VUl06ICAgIHsgdHlwZTogUGxvdFR5cGUuQ09OVE9VUiwgICAgbGFiZWw6ICdDb250b3VyIChQbG90bHkpJywgICAgICBwcm9kdWN0aW9uTGFiZWw6ICdDb250b3VyJywgICAgaWNvbjogJ2Fzc2V0cy9wbG90dGluZy9jb250b3VyLnN2ZycsICAgIGRpbWVuc2lvbnM6ICcyZCcsIHNvdXJjZTogJ2ltYWdlJywgcmVxdWlyZXNHcmF5c2NhbGU6IHRydWUgfSxcbiAgW1Bsb3RUeXBlLlNDQVRURVJdOiAgICB7IHR5cGU6IFBsb3RUeXBlLlNDQVRURVIsICAgIGxhYmVsOiAnU2NhdHRlciAyRCAoUGxvdGx5KScsICAgaWNvbjogJ3BpIHBpLWNoYXJ0LXNjYXR0ZXInLCAgICAgICAgICAgIGRpbWVuc2lvbnM6ICcyZCcsIHNvdXJjZTogJ3JlZ2lvbnMnIH0sXG4gIFtQbG90VHlwZS5TVVJGQUNFXTogICAgeyB0eXBlOiBQbG90VHlwZS5TVVJGQUNFLCAgICBsYWJlbDogJ1N1cmZhY2UgKFBsb3RseSknLCAgICAgIGljb246ICdhc3NldHMvcGxvdHRpbmcvc3VyZmFjZS5zdmcnLCAgICBkaW1lbnNpb25zOiAnM2QnLCBzb3VyY2U6ICdpbWFnZScsIHJlcXVpcmVzR3JheXNjYWxlOiB0cnVlIH0sXG4gIFtQbG90VHlwZS5TQ0FUVEVSM0RdOiAgeyB0eXBlOiBQbG90VHlwZS5TQ0FUVEVSM0QsICBsYWJlbDogJ1NjYXR0ZXIgM0QgKFBsb3RseSknLCAgIGljb246ICdhc3NldHMvcGxvdHRpbmcvM2QtY29vcmRpbmF0ZXMuc3ZnJywgZGltZW5zaW9uczogJzNkJywgc291cmNlOiAnaW1hZ2UnLCByZXF1aXJlc1N0YWNrOiB0cnVlLCByZXF1aXJlc0dyYXlzY2FsZTogdHJ1ZSB9LFxuICBbUGxvdFR5cGUuSVNPU1VSRkFDRV06IHsgdHlwZTogUGxvdFR5cGUuSVNPU1VSRkFDRSwgbGFiZWw6ICdJc29zdXJmYWNlIChQbG90bHkpJywgICBpY29uOiAnYXNzZXRzL3Bsb3R0aW5nL2lzb3N1cmZhY2Uuc3ZnJywgZGltZW5zaW9uczogJzNkJywgc291cmNlOiAnaW1hZ2UnLCByZXF1aXJlc1N0YWNrOiB0cnVlLCByZXF1aXJlc0dyYXlzY2FsZTogdHJ1ZSB9LFxuICAvLyDilIDilIAgbmFwYXJpLWpzIFdlYkdQVSAoaml0LXVpIzEwMikuIFRoZSAzRCB0eXBlcyB0YWtlIGEgcnVudGltZSBkZWNpbWF0ZSBmYWN0b3IuIOKUgOKUgFxuICBbUGxvdFR5cGUuTkFQQVJJX0lNQUdFXTogICAgICB7IHR5cGU6IFBsb3RUeXBlLk5BUEFSSV9JTUFHRSwgICAgICBsYWJlbDogJ0ltYWdlIChuYXBhcmkgwrcgV2ViR1BVKScsICAgICAgaWNvbjogJ3BpIHBpLWltYWdlJywgICAgICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25zOiAnMmQnLCBzb3VyY2U6ICdpbWFnZScgfSxcbiAgW1Bsb3RUeXBlLk5BUEFSSV9TQ0FUVEVSXTogICAgeyB0eXBlOiBQbG90VHlwZS5OQVBBUklfU0NBVFRFUiwgICAgbGFiZWw6ICdTY2F0dGVyIDJEIChuYXBhcmkgwrcgV2ViR1BVKScsIGljb246ICdwaSBwaS1jaGFydC1zY2F0dGVyJywgICAgICAgICAgICAgICAgZGltZW5zaW9uczogJzJkJywgc291cmNlOiAncmVnaW9ucycgfSxcbiAgW1Bsb3RUeXBlLk5BUEFSSV9TVVJGQUNFXTogICAgeyB0eXBlOiBQbG90VHlwZS5OQVBBUklfU1VSRkFDRSwgICAgbGFiZWw6ICdTdXJmYWNlIChuYXBhcmkgwrcgV2ViR1BVKScsICAgIHByb2R1Y3Rpb25MYWJlbDogJ1N1cmZhY2UnLCAgICBpY29uOiAnYXNzZXRzL3Bsb3R0aW5nL3N1cmZhY2Uuc3ZnJywgICAgICAgIGRpbWVuc2lvbnM6ICczZCcsIHNvdXJjZTogJ2ltYWdlJywgcmVxdWlyZXNHcmF5c2NhbGU6IHRydWUgfSxcbiAgW1Bsb3RUeXBlLk5BUEFSSV9TQ0FUVEVSM0RdOiAgeyB0eXBlOiBQbG90VHlwZS5OQVBBUklfU0NBVFRFUjNELCAgbGFiZWw6ICdTY2F0dGVyIDNEIChuYXBhcmkgwrcgV2ViR1BVKScsIGljb246ICdhc3NldHMvcGxvdHRpbmcvM2QtY29vcmRpbmF0ZXMuc3ZnJywgZGltZW5zaW9uczogJzNkJywgc291cmNlOiAnaW1hZ2UnLCByZXF1aXJlc1N0YWNrOiB0cnVlLCByZXF1aXJlc0dyYXlzY2FsZTogdHJ1ZSB9LFxuICBbUGxvdFR5cGUuTkFQQVJJX1ZPTFVNRV06ICAgICB7IHR5cGU6IFBsb3RUeXBlLk5BUEFSSV9WT0xVTUUsICAgICBsYWJlbDogJ1ZvbHVtZSAobmFwYXJpIMK3IFdlYkdQVSknLCAgICAgcHJvZHVjdGlvbkxhYmVsOiAnVm9sdW1lJywgICAgIGljb246ICdhc3NldHMvcGxvdHRpbmcvY3ViZS0zZC5zdmcnLCAgICAgICAgZGltZW5zaW9uczogJzNkJywgc291cmNlOiAnaW1hZ2UnLCByZXF1aXJlc1N0YWNrOiB0cnVlLCByZXF1aXJlc0dyYXlzY2FsZTogdHJ1ZSB9LFxuICBbUGxvdFR5cGUuTkFQQVJJX0lTT1NVUkZBQ0VdOiB7IHR5cGU6IFBsb3RUeXBlLk5BUEFSSV9JU09TVVJGQUNFLCBsYWJlbDogJ0lzb3N1cmZhY2UgKG5hcGFyaSDCtyBXZWJHUFUpJywgcHJvZHVjdGlvbkxhYmVsOiAnSXNvc3VyZmFjZScsIGljb246ICdhc3NldHMvcGxvdHRpbmcvaXNvc3VyZmFjZS5zdmcnLCAgICAgZGltZW5zaW9uczogJzNkJywgc291cmNlOiAnaW1hZ2UnLCByZXF1aXJlc1N0YWNrOiB0cnVlLCByZXF1aXJlc0dyYXlzY2FsZTogdHJ1ZSB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBsb3RUeXBlRGVzY3JpcHRvcih0eXBlOiBQbG90VHlwZSk6IFBsb3RUeXBlRGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBQTE9UX1RZUEVfREVTQ1JJUFRPUlNbdHlwZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RocmVlRGltZW5zaW9uYWwodHlwZTogUGxvdFR5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIFBMT1RfVFlQRV9ERVNDUklQVE9SU1t0eXBlXT8uZGltZW5zaW9ucyA9PT0gJzNkJztcbn1cblxuLy8g4pSA4pSAIG5hcGFyaS1qcyAzRCBwbG90LXR5cGUgcHJlZGljYXRlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8qKiBuYXBhcmktanMgdm9sdW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFwYXJpVm9sdW1lKHR5cGU6IFBsb3RUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlID09PSBQbG90VHlwZS5OQVBBUklfVk9MVU1FO1xufVxuLyoqIG5hcGFyaS1qcyBpc29zdXJmYWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFwYXJpSXNvc3VyZmFjZSh0eXBlOiBQbG90VHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZSA9PT0gUGxvdFR5cGUuTkFQQVJJX0lTT1NVUkZBQ0U7XG59XG4vKiogbmFwYXJpLWpzIGhlaWdodC1maWVsZCBzdXJmYWNlIG1lc2guICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYXBhcmlTdXJmYWNlKHR5cGU6IFBsb3RUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlID09PSBQbG90VHlwZS5OQVBBUklfU1VSRkFDRTtcbn1cbi8qKiBuYXBhcmktanMgMkQgc2NhdHRlciAocmVnaW9uIGNlbnRyb2lkcykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYXBhcmlTY2F0dGVyKHR5cGU6IFBsb3RUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlID09PSBQbG90VHlwZS5OQVBBUklfU0NBVFRFUjtcbn1cbi8qKiBuYXBhcmktanMgM0Qgc2NhdHRlciAodm94ZWwgcG9pbnQgY2xvdWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFwYXJpU2NhdHRlcjNkKHR5cGU6IFBsb3RUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlID09PSBQbG90VHlwZS5OQVBBUklfU0NBVFRFUjNEO1xufVxuLyoqIEFueSBuYXBhcmktanMgM0QgcGxvdCB0eXBlICh2b2x1bWUsIGlzb3N1cmZhY2UsIHN1cmZhY2UsIG9yIDNEIHNjYXR0ZXIpLiBSZXNvbHV0aW9uIGlzIGEgcnVudGltZVxuICogIGRlY2ltYXRlIGZhY3RvciAoRnVsbCAvIMK9IC8gwrwgLyDihZspIOKAlCBzZWUgdGhlIHNlcnZpY2UncyBgcmVzb2x1dGlvblNjYWxlYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hcGFyaTNkKHR5cGU6IFBsb3RUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaXNOYXBhcmlWb2x1bWUodHlwZSkgfHwgaXNOYXBhcmlJc29zdXJmYWNlKHR5cGUpIHx8IGlzTmFwYXJpU3VyZmFjZSh0eXBlKSB8fCBpc05hcGFyaVNjYXR0ZXIzZCh0eXBlKVxuICApO1xufVxuXG4vKiogRGVjaW1hdGUgZmFjdG9ycyBvZmZlcmVkIGJ5IHRoZSBSZXNvbHV0aW9uIGNvbnRyb2wgKDEgPSBGdWxsIOKApiA4ID0g4oWbKS4gKi9cbmV4cG9ydCBjb25zdCBOQVBBUklfREVDSU1BVEVfT1BUSU9OUzogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIH1bXSA9IFtcbiAgeyBsYWJlbDogJ0Z1bGwnLCB2YWx1ZTogMSB9LFxuICB7IGxhYmVsOiAnwr0nLCB2YWx1ZTogMiB9LFxuICB7IGxhYmVsOiAnwrwnLCB2YWx1ZTogNCB9LFxuICB7IGxhYmVsOiAn4oWbJywgdmFsdWU6IDggfSxcbl07XG5cbi8qKiBEZWZhdWx0IGRlY2ltYXRlIGZhY3RvcjogwrwuIFRoZSBjYXBzIGFyZSBzZXQgc28gwrwgaXMgYSBzZW5zaWJsZSBkZWZhdWx0IHJlc29sdXRpb24gd2hpbGUgwr0gYW5kXG4gKiAgRnVsbCBvZmZlciAyw5cgYW5kIDTDlyB0aGUgZGV0YWlsIGZvciBvcHQtaW4gaGlnaC1yZXNvbHV0aW9uIHJlbmRlcnMuICovXG5leHBvcnQgY29uc3QgTkFQQVJJX0RFRkFVTFRfREVDSU1BVEUgPSA0O1xuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const IMAGE_STATE_PORT = new InjectionToken('IMAGE_STATE_PORT');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utc3RhdGUucG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3BvcnRzL2ltYWdlLXN0YXRlLnBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWlDL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWlCLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUltYWdlSW5mbyB9IGZyb20gJy4uL2ltYWdlLmNvbnRyYWN0JztcblxuLyoqXG4gKiBIb3N0IGltYWdlL2xvYWRpbmcvem9vbSBzdGF0ZSwgaW52ZXJ0ZWQgYXMgYSBwb3J0IHNvIHRoZSB2aXN1YWxpemF0aW9uIGxpYnJhcnlcbiAqIGRvZXNuJ3QgaW1wb3J0IHRoZSBhcHAncyBgTWFpblN0YXRlYC9gTWFpbkZhY2FkZWAuIFRoZSBob3N0IHN1cHBsaWVzIGFuIGFkYXB0ZXJcbiAqIHRoYXQgZGVsZWdhdGVzIHRvIHRob3NlLiBSZWFkIG1ldGhvZHMgcmV0dXJuIHRoZSBob3N0J3MgbGl2ZSBzdHJlYW1zOyB3cml0ZVxuICogbWV0aG9kcyBwdXNoIHN0YXRlIGJhY2sgdG8gdGhlIGhvc3QgKGUuZy4gbG9hZGluZyBmbGFncywgdGhlIHVwZGF0ZWQgaW1hZ2UpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU3RhdGVQb3J0IHtcbiAgLy8g4pSA4pSAIHJlYWRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRGaWxlbmFtZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBpc0ltYWdlQ2FjaGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBnZXRJbWFnZUluZm8kKCk6IE9ic2VydmFibGU8SUltYWdlSW5mbyB8IG51bGw+O1xuICBnZXRJbWFnZUxvYWRpbmdNZXNzYWdlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldENhY2hlUHJvZ3Jlc3MkKCk6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIGdldFBhbmVsV2lkdGgkKCk6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgaXNJbWFnZUxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzWm9vbSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAvLyDilIDilIAgd3JpdGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogUHVzaCBhbiB1cGRhdGVkIGltYWdlIGRlc2NyaXB0b3IgdG8gdGhlIGhvc3QgKHBhcnRpYWwg4oCUIG9ubHkgc2V0IGZpZWxkcykuICovXG4gIHNldEltYWdlSW5mbyhpbmZvOiBQYXJ0aWFsPElJbWFnZUluZm8+KTogdm9pZDtcbiAgc2V0SW1hZ2VMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBzZXRJbWFnZUxvYWRpbmdNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XG4gIHNldFpvb20oem9vbTogYm9vbGVhbik6IHZvaWQ7XG4gIHNldEltYWdlQ2FjaGVkKGNhY2hlZDogYm9vbGVhbik6IHZvaWQ7XG4gIHNldExvYWRpbmdFcnJvcihlcnJvcjogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgYWN0aXZlIGRpYWdyYW0vdmlzdWFsaXphdGlvbiBjb21wb25lbnQgd2l0aCB0aGUgaG9zdC4gKi9cbiAgc2V0RGlhZ3JhbShkaWFncmFtOiB1bmtub3duKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IElNQUdFX1NUQVRFX1BPUlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48SW1hZ2VTdGF0ZVBvcnQ+KCdJTUFHRV9TVEFURV9QT1JUJyk7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const PREFERENCES_PORT = new InjectionToken('PREFERENCES_PORT');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyZW5jZXMucG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3BvcnRzL3ByZWZlcmVuY2VzLnBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXFCL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWtCLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlc2V0U2V0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NsYXNzLXByZXNldCc7XG5cbi8qKlxuICogUG9ydCBmb3IgcGVyc2lzdGluZyB0aGUgcGVyLXVzZXIgYW5ub3RhdGlvbi1jbGFzcyBwcmVzZXQgc2V0IChqaXQtdWkjNzApLlxuICpcbiAqIFRoZSBsaWJyYXJ5IGRlZmluZXMgdGhlIGNvbnRyYWN0OyB0aGUgYXBwIHN1cHBsaWVzIGFuIGFkYXB0ZXIgdGhhdCB0YWxrcyB0byB0aGVcbiAqIGppdC1zZXJ2aWNlIGAvYXBpL3ByZWZlcmVuY2VzL2Fubm90YXRpb24tY2xhc3Nlc2AgZW5kcG9pbnQuIFRoZSB1c2VyIGlzIGtleWVkXG4gKiBzZXJ2ZXItc2lkZSBmcm9tIHRoZSBhdXRoZW50aWNhdGVkIEpXVCwgc28gbm8gdXNlciBpZCBpcyBwYXNzZWQgaGVyZS5cbiAqXG4gKiBNaXJyb3JzIGBSZWdpb25Jb1BvcnRgIC8gYFJFR0lPTl9JT19QT1JUYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVmZXJlbmNlc1BvcnQge1xuICAvKiogTG9hZCB0aGUgY3VycmVudCB1c2VyJ3MgcHJlc2V0IHNldDsgcmVzb2x2ZXMgdG8gYG51bGxgIGlmIG5vbmUgaGFzIGJlZW4gc2F2ZWQgeWV0LiAqL1xuICBsb2FkUHJlc2V0U2V0KCk6IE9ic2VydmFibGU8UHJlc2V0U2V0IHwgbnVsbD47XG5cbiAgLyoqIFBlcnNpc3QgKHVwc2VydCkgdGhlIGN1cnJlbnQgdXNlcidzIHByZXNldCBzZXQuICovXG4gIHNhdmVQcmVzZXRTZXQoc2V0OiBQcmVzZXRTZXQpOiBPYnNlcnZhYmxlPHZvaWQ+O1xufVxuXG5leHBvcnQgY29uc3QgUFJFRkVSRU5DRVNfUE9SVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQcmVmZXJlbmNlc1BvcnQ+KCdQUkVGRVJFTkNFU19QT1JUJyk7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const REGION_IO_PORT = new InjectionToken('REGION_IO_PORT');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLWlvLnBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9wb3J0cy9yZWdpb24taW8ucG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkIvQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQWUsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogUmVnaW9uIGZpbGUgSS9PLCBpbnZlcnRlZCBhcyBhIHBvcnQgc28gdGhlIHZpc3VhbGl6YXRpb24gbGlicmFyeSdzIHJlZ2lvblxuICogZWRpdG9yIGRvZXNuJ3QgaW1wb3J0IHRoZSBhcHAncyBgRmlsZXNTZXJ2aWNlYCAodGhlIGxpYnJhcnkgcGVyZm9ybXMgbm8gYmFja2VuZFxuICogcmVxdWVzdHMgaXRzZWxmKS4gVGhlIGhvc3Qgc3VwcGxpZXMgYW4gYWRhcHRlciB0aGF0IGRlbGVnYXRlcyB0byBpdHMgZmlsZVxuICogc2VydmljZTsgdGhlIGVkaXRvciBvbmx5IG5lZWRzIHRoZSBzZWxlY3RlZCBmaWxlJ3MgbmFtZSAodG8gZGVyaXZlIGRlZmF1bHQgUk9JXG4gKiBmaWxlbmFtZXMpLCBhbiBleGlzdGVuY2UgY2hlY2ssIGFuZCBhIHNhdmUuIEJvdW5kIHRvIHtAbGluayBSRUdJT05fSU9fUE9SVH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uSW9Qb3J0IHtcbiAgLyoqIE5hbWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmaWxlIChlLmcuIFwiaW1hZ2UudGlmXCIpLCBvciB1bmRlZmluZWQgd2hlblxuICAgKiAgbm9uZSBpcyBzZWxlY3RlZC4gVXNlZCB0byBkZXJpdmUgYSBkZWZhdWx0IFJPSSBmaWxlbmFtZSBzdGVtLiAqL1xuICBnZXRTZWxlY3RlZEZpbGVOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIFdoZXRoZXIgYW4gUk9JIGZpbGUgbmFtZWQgYG5hbWVgIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgc2VsZWN0ZWQgZmlsZS4gKi9cbiAgcm9pRmlsZUV4aXN0cyhuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogUGVyc2lzdCB0aGUgcmVnaW9ucyAoYWxyZWFkeSBzZXJpYWxpemVkIHRvIGEgR2VvSlNPTiBzdHJpbmcpIGFzIGBmaWxlbmFtZWAuICovXG4gIHNhdmVHZW9Kc29uKGdlb0pzb25TdHI6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD47XG4gIC8qKlxuICAgKiBQZXJzaXN0IGEgZm9sZGVyLXN0YWNrJ3MgcmVnaW9ucyBhcyBvbmUgZ2VvanNvbiBwZXIgc2xpY2UtZmlsZSAoaml0LXVpIzkzKS5cbiAgICogRWFjaCBlbnRyeSdzIGB6YCBpcyB0aGUgemVyby1iYXNlZCBzbGljZSBpbmRleDsgdGhlIGhvc3QgbWFwcyBpdCB0byB0aGF0XG4gICAqIHNsaWNlLWZpbGUncyBzaWJsaW5nIGA8c3RlbT4uZ2VvanNvbmAgaW4gdGhlIHNhbWUgZm9sZGVyLiBDb21wbGV0ZXMgb25jZVxuICAgKiBldmVyeSBzbGljZSBoYXMgYmVlbiB3cml0dGVuLiAoaml0LXVpIzkzKVxuICAgKi9cbiAgc2F2ZVNsaWNlR2VvSnNvbnMoc2xpY2VzOiB7IHo6IG51bWJlcjsgZ2VvSnNvblN0cjogc3RyaW5nIH1bXSk6IE9ic2VydmFibGU8dm9pZD47XG59XG5cbmV4cG9ydCBjb25zdCBSRUdJT05fSU9fUE9SVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZWdpb25Jb1BvcnQ+KCdSRUdJT05fSU9fUE9SVCcpO1xuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const TILE_ACCESS_PORT = new InjectionToken('TILE_ACCESS_PORT');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1hY2Nlc3MucG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3BvcnRzL3RpbGUtYWNjZXNzLnBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQStCL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWlCLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JlZ2lvbic7XG5cbi8qKlxuICogRmlsZS90aWxlL3pvb20gYmFja2VuZCwgaW52ZXJ0ZWQgYXMgYSBwb3J0IHNvIHRoZSB2aXN1YWxpemF0aW9uIGxpYnJhcnkgZG9lc24ndFxuICogaW1wb3J0IHRoZSBhcHAncyBgRmlsZXNTZXJ2aWNlYCAobm9yIGl0cyBgWm9vbVJlcXVlc3RgL2BEaXNwbGF5VHlwZWAgcmVxdWVzdFxuICogbW9kZWxzKS4gVGhlIGhvc3Qgc3VwcGxpZXMgYW4gYWRhcHRlciB0aGF0IGJ1aWxkcyB0aGUgY29uY3JldGUgcmVxdWVzdCBmcm9tXG4gKiB0aGVzZSBsaWJyYXJ5LW5hdGl2ZSBhcmd1bWVudHMgYW5kIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlQWNjZXNzUG9ydCB7XG4gIC8qKiBCYXNlNjQtZW5jb2RlZCBpbmZvIGZvciB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZpbGUgKHVzZWQgZm9yIGAvdGlsZWAgYW5kXG4gICAqICBgL3RpbGVzL2luZm9gIHJlcXVlc3RzKSwgb3IgbnVsbCB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQuIENvbGxhcHNlcyB0aGVcbiAgICogIGhvc3QncyBgZ2V0U2VsZWN0ZWRGaWxlSW5mbygpYCArIGBlbmNvZGUocmF3RGF0YSlgLiAqL1xuICBnZXRTZWxlY3RlZEluZm9CNjQoKTogc3RyaW5nIHwgbnVsbDtcblxuICAvKiogU2VydmVyLXNpZGUgY3JvcC96b29tIG9mIHRoZSBjdXJyZW50IGltYWdlIHRvIGByb2lgOyByZXNvbHZlcyB0byByYXcgaW1hZ2VcbiAgICogIGJ5dGVzLiBgc2NyZWVuYCBpcyB0aGUgb24tc2NyZWVuIGRpYWdyYW0gcmVjdGFuZ2xlLiBUaGUgaG9zdCBidWlsZHMgdGhlXG4gICAqICByZXF1ZXN0IChpbmNsdWRpbmcgdGhlIHNlbGVjdGVkIGZpbGUpIGludGVybmFsbHkuICovXG4gIHpvb21PblJlZ2lvbihyb2k6IFJlY3RhbmdsZSwgc2NyZWVuOiBSZWN0YW5nbGUsIHpJbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxBcnJheUJ1ZmZlcj47XG5cbiAgLyoqIFN3aXRjaCB0aGUgaG9zdCdzIGRpc3BsYXkgYmFjayB0byB0aGUgZGlhZ3JhbSB2aWV3IChyZXBsYWNlcyB0aGUgYXBwJ3NcbiAgICogIGBzZWxlY3REaXNwbGF5VHlwZShEaXNwbGF5VHlwZS5EaWFncmFtKWApLiAqL1xuICBzZWxlY3REaWFncmFtRGlzcGxheSgpOiB2b2lkO1xuXG4gIC8qKiBBdXRoIGhlYWRlcnMgKGUuZy4gYEF1dGhvcml6YXRpb246IEJlYXJlciDigKZgKSBmb3IgT1NEJ3Mgb3duIHRpbGUgZmV0Y2hlc1xuICAgKiAgKGl0cyBBSkFYIGxvYWRlciArIHByZWZldGNoIGJ5cGFzcyBBbmd1bGFyJ3MgSHR0cENsaWVudCBpbnRlcmNlcHRvciwgc28gdGhlXG4gICAqICBob3N0IHN1cHBsaWVzIHRoZW0pLiBIaWRlcyB0aGUgYXBwJ3MgQXV0aDAgZGVwZW5kZW5jeSBmcm9tIHRoZSBsaWJyYXJ5LiAqL1xuICBnZXRBdXRoSGVhZGVycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xufVxuXG5leHBvcnQgY29uc3QgVElMRV9BQ0NFU1NfUE9SVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUaWxlQWNjZXNzUG9ydD4oJ1RJTEVfQUNDRVNTX1BPUlQnKTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /** DI token the Region Editor injects instead of the concrete service. */
3
+ export const REGION_EDITOR_API = new InjectionToken('REGION_EDITOR_API');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLWVkaXRvci1hcGkuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9yZWdpb24tZWRpdG9yLWFwaS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBZ0cvQywwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQW1CLG1CQUFtQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5pbXBvcnQgeyBDbGFzc1ByZXNldCwgUHJlc2V0U2V0IH0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzLXByZXNldCc7XG5pbXBvcnQgeyBJSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4vaW1hZ2UuY29udHJhY3QnO1xuXG4vKipcbiAqIFB1YmxpYywgaW1wbGVtZW50YXRpb24tYWdub3N0aWMgc3VyZmFjZSB0aGF0IHRoZSBSZWdpb24gRWRpdG9yIChhbiAqZXh0ZXJuYWwqXG4gKiBjb25zdW1lciBvZiB0aGUgdmlzdWFsaXphdGlvbiBwYWNrYWdlKSBkZXBlbmRzIG9uLiBJdCBkZWFscyBvbmx5IGluXG4gKiAqKmFubm90YXRpb24qKiByZWdpb25zIOKAlCBpbnRlbnNpdHktcHJvZmlsZSBsaW5lcyAoYFJlZ2lvbi5pc1Byb2ZpbGUoKWApIGFyZVxuICogb3duZWQgYnkgdGhlIGludGVuc2l0eSB0b29sIGFuZCBhcmUgZmlsdGVyZWQgb3V0IC8gcHJlc2VydmVkIGludGVybmFsbHksIHNvXG4gKiB0aGUgZWRpdG9yIG5ldmVyIHNlZXMgb3IgZGlzdHVyYnMgdGhlbS5cbiAqXG4gKiBUaGUgZWRpdG9yIGluamVjdHMgdGhpcyB2aWEge0BsaW5rIFJFR0lPTl9FRElUT1JfQVBJfSAoYm91bmQgdG8gdGhlIGNvbmNyZXRlXG4gKiBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCB3aXRoIGB1c2VFeGlzdGluZ2ApIGluc3RlYWQgb2YgaW1wb3J0aW5nIHRoZVxuICogc2VydmljZSBjbGFzcywgc28gaXQgY2Fubm90IHJlYWNoIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB0aGUgYm91bmRhcnlcbiAqIHRoYXQgbGV0cyBgc2VydmljZXMvdmlzdWFsaXphdGlvbmAgYmVjb21lIGEgbGlicmFyeSB3aG9zZSBvbmx5IHB1YmxpYyBzdXJmYWNlXG4gKiBpcyB0aGUgY29udHJhY3RzLlxuICpcbiAqIFNlbGVjdGlvbiBpcyBleHByZXNzZWQgaW4gdGVybXMgb2Yge0BsaW5rIFJlZ2lvbn1zLCBub3QgYXJyYXkgaW5kaWNlcyDigJQgdGhlXG4gKiBpbmRleCBzcGFjZSAod2hpY2ggaW5jbHVkZXMgcHJvZmlsZSBsaW5lcykgc3RheXMgaW50ZXJuYWwgdG8gdGhlIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZ2lvbkVkaXRvckFwaSB7XG4gIC8vIOKUgOKUgCBkaXNwbGF5IGRlZmF1bHRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRTaG93U2hhcGVMYWJlbCgpOiBib29sZWFuO1xuICBnZXRTaGFwZUNvbG9yKCk6IHN0cmluZztcbiAgZ2V0RmlsbENvbG9yKCk6IHN0cmluZztcblxuICAvLyDilIDilIAgYW5ub3RhdGlvbiByZWdpb25zIChwcm9maWxlIGxpbmVzIGV4Y2x1ZGVkICYgcHJlc2VydmVkIGludGVybmFsbHkpIOKUgFxuICAvKiogQW5ub3RhdGlvbiByZWdpb25zIGZvciB0aGUgY3VycmVudCBpbWFnZS4gSW50ZW5zaXR5LXByb2ZpbGUgbGluZXMgYXJlXG4gICAqICBuZXZlciBpbmNsdWRlZC4gKi9cbiAgZ2V0QW5ub3RhdGlvblJlZ2lvbnMoKTogUmVnaW9uW107XG4gIC8qKiBSZXBsYWNlIHRoZSBhbm5vdGF0aW9uIHJlZ2lvbnMuIEludGVuc2l0eS1wcm9maWxlIGxpbmVzIGluIHRoZSBzdG9yZSBhcmVcbiAgICogIHByZXNlcnZlZCAodGhlIGVkaXRvciBtdXN0IG5vdCBiZSBhYmxlIHRvIGRyb3AgdGhlbSkuICovXG4gIHNldEFubm90YXRpb25SZWdpb25zKHJlZ2lvbnM6IFJlZ2lvbltdLCBzaG93UmVnaW9uTGFiZWw/OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBpc1JlZ2lvblNhdmVPbj86IGJvb2xlYW4sIGZpbGxDb2xvcj86IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBDaGFuZ2Ugc2lnbmFsIOKAlCBmaXJlcyB3aGVuZXZlciByZWdpb25zIGNoYW5nZSBvbiBhbnkgYmFja2VuZC4gKi9cbiAgZ2V0UmVnaW9uVXBkYXRlRXZlbnQoKTogT2JzZXJ2YWJsZTxhbnlbXT47XG5cbiAgLy8g4pSA4pSAIHNlbGVjdGlvbiAoYnkgcmVnaW9uIGlkZW50aXR5OyBpbmRleCBzcGFjZSBzdGF5cyBpbnRlcm5hbCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBUaGUgY3VycmVudGx5LXNlbGVjdGVkIGFubm90YXRpb24gcmVnaW9ucyAocHJvZmlsZSBsaW5lcyBuZXZlciBhcHBlYXIpLiAqL1xuICBnZXRTZWxlY3RlZFJlZ2lvbnMkKCk6IE9ic2VydmFibGU8UmVnaW9uW10+O1xuICAvKiogU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlc2UgcmVnaW9ucy4gKi9cbiAgc2V0U2VsZWN0ZWRSZWdpb25zKHJlZ2lvbnM6IFJlZ2lvbltdKTogdm9pZDtcblxuICAvLyDilIDilIAgY2xhc3NpZmljYXRpb24gY29sb3VycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0Q2xhc3NpZmljYXRpb25Db2xvcnMoKTogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgc2V0Q2xhc3NpZmljYXRpb25Db2xvcihsYWJlbDogc3RyaW5nLCBjb2xvcjogc3RyaW5nKTogdm9pZDtcblxuICAvLyDilIDilIAgYW5ub3RhdGlvbi1jbGFzcyBwcmVzZXRzIChqaXQtdWkjNzApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogVGhlIGN1cnJlbnQgcGVyLXVzZXIgcHJlc2V0IHNldCAoc291cmNlIG9mIHRydXRoIGZvciByZWdpb24gY29sb3VycykuICovXG4gIGdldFByZXNldFNldCgpOiBQcmVzZXRTZXQ7XG4gIC8qKiBFbWl0cyB0aGUgcHJlc2V0IHNldCBvbiBldmVyeSBjaGFuZ2UgKEJlaGF2aW9yU3ViamVjdC1iYWNrZWQpLiAqL1xuICBnZXRQcmVzZXRTZXQkKCk6IE9ic2VydmFibGU8UHJlc2V0U2V0PjtcbiAgLyoqIFJlcGxhY2UgdGhlIHdob2xlIHByZXNldCBzZXQgKHBlcnNpc3RzIHBlci11c2VyKS4gKi9cbiAgc2V0UHJlc2V0U2V0KHNldDogUHJlc2V0U2V0KTogdm9pZDtcbiAgLyoqIEFkZCBvciB1cGRhdGUgb25lIGNsYXNzIGJ5IG5hbWUgKHBlcnNpc3RzKS4gKi9cbiAgdXBzZXJ0Q2xhc3MocHJlc2V0OiBDbGFzc1ByZXNldCk6IHZvaWQ7XG4gIC8qKiBSZW1vdmUgYSBjbGFzcyBieSBuYW1lIChwZXJzaXN0cykuICovXG4gIHJlbW92ZUNsYXNzKG5hbWU6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBSZXN0b3JlIHRoZSBkZWZhdWx0IHByZXNldCBzZXQgKHBlcnNpc3RzKS4gKi9cbiAgcmVzZXRQcmVzZXRzKCk6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGltYWdlIG1ldGFkYXRhIChmb3IgcmVnaW9uIGFyZWFzIGluIMK1bcKyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0SW1hZ2VNZXRhKCk6IE9ic2VydmFibGU8SUltYWdlTWV0YWRhdGFbXT47XG5cbiAgLy8g4pSA4pSAIGltcG9ydCAvIGV4cG9ydCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgaW1wb3J0UmVnaW9ucyhnZW9Kc29uU3RyOiBzdHJpbmcpOiBSZWdpb25bXTtcbiAgZ2V0R2VvSnNvblN0cmluZyhyZWdpb25zOiBSZWdpb25bXSk6IHN0cmluZztcblxuICAvLyDilIDilIAgcGVyLXNsaWNlIHotc3RhY2tzIChqaXQtdWkjOTMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogVHJ1ZSB3aGlsZSBhIHBlci1zbGljZSB6LXN0YWNrIHJlZ2lvbiBzZXNzaW9uIGlzIGFjdGl2ZSDigJQgdGhlIGVkaXRvciB0aGVuXG4gICAqICBzYXZlcy9lZGl0cyByZWdpb25zIHBlciBkaXNwbGF5ZWQgc2xpY2UuICovXG4gIGlzU3RhY2tNb2RlKCk6IGJvb2xlYW47XG4gIC8qKiBIb3cgdGhlIGN1cnJlbnQgc3RhY2sgcGVyc2lzdHM6IGBjb21iaW5lZGAgPSBvbmUgei1pbmRleGVkIGdlb2pzb25cbiAgICogIChzaW5nbGUtZmlsZSB6LXN0YWNrLCBRdVBhdGggc2NoZW1hKTsgYHBlci1zbGljZS1maWxlYCA9IG9uZSBnZW9qc29uIHBlclxuICAgKiAgc2xpY2UtZmlsZSAoZm9sZGVyIHN0YWNrKS4gKi9cbiAgZ2V0U3RhY2tTYXZlTGF5b3V0KCk6ICdjb21iaW5lZCcgfCAncGVyLXNsaWNlLWZpbGUnO1xuICAvKiogRXZlcnkgc2xpY2UncyBhbm5vdGF0aW9uIHJlZ2lvbnMgKHByb2ZpbGUgbGluZXMgZXhjbHVkZWQpLCBlYWNoIHRhZ2dlZFxuICAgKiAgd2l0aCBpdHMgemVyby1iYXNlZCB7QGxpbmsgUmVnaW9uLnp9LCBmb3IgYSBjb21iaW5lZCB6LWluZGV4ZWQgc2F2ZS4gKi9cbiAgZ2V0U2xpY2VBbm5vdGF0aW9uUmVnaW9ucygpOiBSZWdpb25bXTtcbiAgLyoqIFBlci1zbGljZSBhbm5vdGF0aW9uIHJlZ2lvbnMgZm9yIGEgZm9sZGVyLXN0YWNrIChgcGVyLXNsaWNlLWZpbGVgKSBzYXZlOlxuICAgKiAgemVyby1iYXNlZCBzbGljZSBpbmRleCDihpIgdGhhdCBzbGljZSdzIGFubm90YXRpb24gcmVnaW9ucy4gSW5jbHVkZXNcbiAgICogIG5vdy1lbXB0eSBzbGljZXMgbG9hZGVkIG5vbi1lbXB0eSwgc28gdGhlaXIgZmlsZSBpcyBvdmVyd3JpdHRlbiBlbXB0eS4gKi9cbiAgZ2V0U3RhY2tTYXZlQW5ub3RhdGlvblNsaWNlcygpOiBNYXA8bnVtYmVyLCBSZWdpb25bXT47XG4gIC8qKlxuICAgKiBGdWxsLXJlc29sdXRpb24gaW1hZ2Ugc2l6ZSAoaW1hZ2UtcGl4ZWwgZGltZW5zaW9ucykgdXNlZCB0byBzaXplIGFuIGV4cG9ydGVkXG4gICAqIHJlZ2lvbiBtYXNrLiBCYWNrZW5kLW5ldXRyYWw6IHByZWZlcnMgdGhlIGFjdGl2ZSByZW5kZXJlcidzIHJlcG9ydGVkIHNpemVcbiAgICogYW5kIGZhbGxzIGJhY2sgdG8gdGhlIGltYWdlIG1ldGFkYXRhLiBSZXR1cm5zIG51bGwgd2hlbiBubyBzaXplIGlzIGtub3duLlxuICAgKlxuICAgKiBUaGUgbWFzayBpdHNlbGYgaXMgcmFzdGVyaXplZCBvZmYgdGhlIG1haW4gdGhyZWFkIChzZWUgdGhlIFJlZ2lvbiBFZGl0b3Inc1xuICAgKiBtYXNrIHdvcmtlcikgZnJvbSB0aGUgcmVnaW9uIGdlb21ldHJ5IGFuZCB0aGlzIHNpemUuXG4gICAqL1xuICBnZXRNYXNrSW1hZ2VTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGw7XG59XG5cbi8qKiBESSB0b2tlbiB0aGUgUmVnaW9uIEVkaXRvciBpbmplY3RzIGluc3RlYWQgb2YgdGhlIGNvbmNyZXRlIHNlcnZpY2UuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX0VESVRPUl9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVJlZ2lvbkVkaXRvckFwaT4oJ1JFR0lPTl9FRElUT1JfQVBJJyk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLW92ZXJsYXkuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWdpb24gKnJlbmRlcmluZyogYWJzdHJhY3Rpb24g4oCUIGRpc3RpbmN0IGZyb20gYElSZWdpb25TdG9yZWAgKHdoaWNoIG93bnMgdGhlXG4gKiByZWdpb24gZGF0YS9zdGF0ZSwgc2hhcmVkIGFjcm9zcyBiYWNrZW5kcykuIEFuIGBJUmVnaW9uT3ZlcmxheWAgZHJhd3MgdGhlXG4gKiBzdG9yZSdzIHJlZ2lvbnMgb24gYSBzcGVjaWZpYyBiYWNrZW5kJ3MgY2FudmFzIGFuZCBoYW5kbGVzIGRyYXcvc2VsZWN0XG4gKiBpbnRlcmFjdGlvbjpcbiAqXG4gKiAgLSBgUGxvdGx5UmVnaW9uT3ZlcmxheWAg4oCUIFBsb3RseSByZW5kZXJzIHJlZ2lvbnMgbmF0aXZlbHkgYXMgcGxvdCBzaGFwZXMgYW5kXG4gKiAgICBlZGl0cyB0aGVtIHZpYSBpdHMgb3duIGRyYWcgbW9kZXMsIHNvIGl0cyBhZGFwdGVyIGlzIHRoaW4gKG1hcHMgdGhlIG1vZGVcbiAqICAgIG9udG8gUGxvdGx5IGRyYWcgbW9kZXM7IHJlZHJhdyBpcyBhIG5vLW9wKS5cbiAqICAtIGBPc2RSZWdpb25PdmVybGF5YCDigJQgT3BlblNlYWRyYWdvbiBzaG93cyBwcmUtcmVuZGVyZWQgdGlsZXMsIHNvIHJlZ2lvbnMgYXJlXG4gKiAgICBkcmF3biBvbiBhbiBTVkcgbGF5ZXIga2VwdCBhbGlnbmVkIHRvIHRoZSB2aWV3cG9ydCwgd2l0aCBjdXN0b20gZHJhdy9zZWxlY3QuXG4gKlxuICogQm90aCByZWFkIHRoZSBzYW1lIGBJUmVnaW9uU3RvcmVgLCBzbyByZWdpb25zIHN0YXkgaW4gc3luYyByZWdhcmRsZXNzIG9mIHdoaWNoXG4gKiBiYWNrZW5kIGlzIHJlbmRlcmluZyB0aGUgaW1hZ2UuXG4gKi9cbi8qKlxuICogUmVnaW9uIGludGVyYWN0aW9uIG1vZGVzLlxuICpcbiAqICAtIGBub25lYCAgICAgICAgICDigJQgZGlzcGxheSBvbmx5OyBiYWNrZW5kIG5hdmlnYXRpb24gKE9TRCBwYW4vem9vbSkgaXMgbGl2ZS5cbiAqICAtIGBzZWxlY3RgICAgICAgICDigJQgY2xpY2sgdG8gc2VsZWN0OyBvbiBPU0QgYWxzbyBkcmFnIGEgdmVydGV4IC8gcmVzaXplIGFcbiAqICAgICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZSAvIG1vdmUgdGhlIHJlZ2lvbiBib2R5LlxuICogIC0gYGRyYXdyZWN0YCAgICAgIOKAlCBwcmVzcy1kcmFnLXJlbGVhc2UgYSByZWN0YW5nbGUuXG4gKiAgLSBgZHJhd2Nsb3NlZHBhdGhg4oCUIGZyZWVoYW5kIGNsb3NlZCBwb2x5Z29uIChwcmVzcy1kcmFnLXJlbGVhc2UpLlxuICogIC0gYGRyYXdvcGVucGF0aGAgIOKAlCBmcmVlaGFuZCBvcGVuIHBvbHlsaW5lIChwcmVzcy1kcmFnLXJlbGVhc2UpLlxuICpcbiAqIFZlcnRleC1lZGl0aW5nIHRvb2xzIChPU0Qgb25seTsgUGxvdGx5IG1hcHMgdGhlbSB0byBuby1vcCk6XG4gKiAgLSBgZHJhd3BvbHlnb25gICAg4oCUIGNsaWNrIHRvIHBsYWNlIGVhY2ggdmVydGV4OyBjbGljayB0aGUgZmlyc3QgdmVydGV4IChvclxuICogICAgICAgICAgICAgICAgICAgICAgZG91YmxlLWNsaWNrKSB0byBjbG9zZS5cbiAqICAtIGBhZGRwb2ludGAgICAgICDigJQgY2xpY2sgYW4gZWRnZSBvZiB0aGUgc2VsZWN0ZWQgcG9seWdvbiB0byBpbnNlcnQgYSB2ZXJ0ZXguXG4gKiAgLSBgZGVsZXRlcG9pbnRgICAg4oCUIGNsaWNrIGEgdmVydGV4IG9mIHRoZSBzZWxlY3RlZCBwb2x5Z29uIHRvIHJlbW92ZSBpdC5cbiAqICAtIGBtb3ZlYCAgICAgICAgICDigJQgZHJhZyB0aGUgc2VsZWN0ZWQgcmVnaW9uIGJvZHkgdG8gdHJhbnNsYXRlIGl0LlxuICovXG5leHBvcnQgdHlwZSBSZWdpb25Ub29sTW9kZSA9XG4gIHwgJ25vbmUnXG4gIHwgJ3NlbGVjdCdcbiAgfCAnZHJhd3JlY3QnXG4gIHwgJ2RyYXdjbG9zZWRwYXRoJ1xuICB8ICdkcmF3b3BlbnBhdGgnXG4gIHwgJ2RyYXdwb2x5Z29uJ1xuICB8ICdhZGRwb2ludCdcbiAgfCAnZGVsZXRlcG9pbnQnXG4gIHwgJ21vdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb25PdmVybGF5IHtcbiAgLyoqIFNldCB0aGUgYWN0aXZlIGRyYXcvc2VsZWN0IGludGVyYWN0aW9uIChvciAnbm9uZScgdG8ganVzdCBkaXNwbGF5KS4gKi9cbiAgc2V0TW9kZShtb2RlOiBSZWdpb25Ub29sTW9kZSk6IHZvaWQ7XG4gIC8qKiBSZS1yZW5kZXIgdGhlIHJlZ2lvbnMgKGUuZy4gYWZ0ZXIgdGhlIHN0b3JlIGNoYW5nZXMgb3IgdGhlIHZpZXcgbW92ZXMpLiAqL1xuICByZWRyYXcoKTogdm9pZDtcbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIHNlbGVjdGVkIHJlZ2lvbihzKSB0by9mcm9tIGEgYmV6aWVyIGN1cnZlICh0b0JlemllciAvXG4gICAqIHRvUG9seWdvbikuIEEgb25lLXNob3QgYWN0aW9uLCBub3QgYSBtb2RlLiBOby1vcCBvbiBiYWNrZW5kc1xuICAgKiB0aGF0IGRvbid0IHJlbmRlciBiZXppZXJzIChQbG90bHkpLlxuICAgKi9cbiAgc2V0U2VsZWN0ZWRCZXppZXIoYmV6aWVyOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIERldGFjaCBoYW5kbGVycy9ET00gYW5kIHN0b3AgbGlzdGVuaW5nIHRvIHRoZSBzdG9yZS4gKi9cbiAgZGVzdHJveSgpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9uLXN0b3JlLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvcmVnaW9uLXN0b3JlLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWN0YW5nbGUsIFBvbHlnb24sIE11bHRpUG9seWdvbiB9IGZyb20gJy4uL21vZGVscy9yZWdpb24nO1xuaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5cbi8qKlxuICogUmVnaW9uLW5hdGl2ZSBlZGl0aW5nIHN1cmZhY2Ug4oCUIHR5cGVkIGdlb21ldHJ5IG9wZXJhdGlvbnMgb24gdGhlIG5ldXRyYWxcbiAqIHtAbGluayBSZWdpb259IG1vZGVsLiBUaGUgT3BlblNlYWRyYWdvbiBvdmVybGF5IChhbmQgYW55IGZ1dHVyZSBlZGl0aW5nIFVJKVxuICogbXV0YXRlcyByZWdpb25zIHRocm91Z2ggdGhlc2UgY2FsbHMgaW5zdGVhZCBvZiByZWFjaGluZyBpbnRvIGEgYmFja2VuZCdzXG4gKiBvd24gc2hhcGUgcmVwcmVzZW50YXRpb24gKGUuZy4gUGxvdGx5J3MgYHgwL3kwL3gxL3kxYCAvIGBN4oCmTOKAplpgIGRpY3RzKS5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgc2hhcmVkIGBSZWdpb25TdG9yZWAsIHdoaWNoIG93bnMgcmVnaW9uICpzdGF0ZSo7IGJhY2tlbmRzXG4gKiBvd24gKnJlbmRlcmluZyogYW5kIHJlYWN0IHRvIHRoZSBzdG9yZSdzIHVwZGF0ZSBldmVudC4gVGhpcyByZXBsYWNlcyB0aGVcbiAqIFBsb3RseS1zaGFwZWQgYElSZWdpb25FZGl0U3RvcmVgIChnZXRTaGFwZXMvYXBwbHlTaGFwZXNDaGFuZ2UpIHRoZSBPU0RcbiAqIG92ZXJsYXkgdXNlZCB0byBkZXBlbmQgb24uXG4gKlxuICogQ29vcmRpbmF0ZXMgYXJlIGFsd2F5cyAqKmltYWdlIHBpeGVscyoqLiBWZXJ0ZXggb3BlcmF0aW9ucyBhcHBseSB0byBwb2x5Z29uXG4gKiByZWdpb25zIG9ubHk7IGNhbGxpbmcgdGhlbSBvbiBhIHJlY3RhbmdsZSAob3Igd2l0aCBhbiBvdXQtb2YtcmFuZ2UgaWQvaW5kZXgpXG4gKiBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb25FZGl0QXBpIHtcbiAgLyoqIEFkZCBhIHJlZ2lvbiB0byB0aGUgY3VycmVudCBpbWFnZSwgbWludCBpdHMgaWQsIHNlbGVjdCBpdCwgYW5kIGVtaXQuXG4gICAqICBSZXR1cm5zIHRoZSBhc3NpZ25lZCBpZC4gKi9cbiAgYWRkUmVnaW9uKHJlZ2lvbjogUmVnaW9uKTogbnVtYmVyO1xuXG4gIC8qKiBSZW1vdmUgdGhlIHJlZ2lvbiB3aXRoIHRoaXMgaWQgKGFuZCBkcm9wIGl0IGZyb20gdGhlIHNlbGVjdGlvbikuICovXG4gIHJlbW92ZVJlZ2lvbihpZDogbnVtYmVyKTogdm9pZDtcblxuICAvKiogUmVwbGFjZSBhIHJlZ2lvbidzIGdlb21ldHJ5IHdob2xlc2FsZSAoZS5nLiBhZnRlciBhIHJlY3RhbmdsZSByZXNpemUpLiAqL1xuICB1cGRhdGVCb3VuZHMoaWQ6IG51bWJlciwgYm91bmRzOiBSZWN0YW5nbGUgfCBQb2x5Z29uIHwgTXVsdGlQb2x5Z29uKTogdm9pZDtcblxuICAvKiogVHJhbnNsYXRlIHRoZSB3aG9sZSByZWdpb24gYnkgKGR4LCBkeSkgaW1hZ2UgcGl4ZWxzLiAqL1xuICBtb3ZlUmVnaW9uKGlkOiBudW1iZXIsIGR4OiBudW1iZXIsIGR5OiBudW1iZXIpOiB2b2lkO1xuXG4gIC8qKiBNb3ZlIGEgc2luZ2xlIHBvbHlnb24gdmVydGV4IHRvICh4LCB5KS4gTm8tb3AgZm9yIHJlY3RhbmdsZXMuICovXG4gIG1vdmVWZXJ0ZXgoaWQ6IG51bWJlciwgaW5kZXg6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkO1xuXG4gIC8qKiBNb3ZlIGEgc2luZ2xlIHZlcnRleCBvbiBpbnRlcmlvciByaW5nIGBob2xlSW5kZXhgIChhIGhvbGUpIHRvICh4LCB5KS5cbiAgICogIE5vLW9wIGZvciByZWN0YW5nbGVzLCBvciBhbiBvdXQtb2YtcmFuZ2UgaG9sZS92ZXJ0ZXggaW5kZXggKGppdC11aSM4NSkuICovXG4gIG1vdmVIb2xlVmVydGV4KGlkOiBudW1iZXIsIGhvbGVJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqIEluc2VydCBhIHZlcnRleCBvbiBpbnRlcmlvciByaW5nIGBob2xlSW5kZXhgIGFmdGVyIGBzZWdJbmRleGAgKGppdC11aSM4NSkuICovXG4gIGFkZEhvbGVWZXJ0ZXgoaWQ6IG51bWJlciwgaG9sZUluZGV4OiBudW1iZXIsIHNlZ0luZGV4OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZDtcblxuICAvKiogRGVsZXRlIHRoZSB2ZXJ0ZXggYXQgYGluZGV4YCBvbiBpbnRlcmlvciByaW5nIGBob2xlSW5kZXhgOyBkcm9wcGluZyB0aGVcbiAgICogIHJpbmcgYmVsb3cgMyB2ZXJ0aWNlcyByZW1vdmVzIHRoZSB3aG9sZSBob2xlIChqaXQtdWkjODUpLiAqL1xuICBkZWxldGVIb2xlVmVydGV4KGlkOiBudW1iZXIsIGhvbGVJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogdm9pZDtcblxuICAvKiogSW5zZXJ0IGEgdmVydGV4IGF0ICh4LCB5KSBpbW1lZGlhdGVseSBhZnRlciBgc2VnSW5kZXhgICh0aGUgc3RhcnQgdmVydGV4XG4gICAqICBvZiB0aGUgZWRnZSB0aGUgcG9pbnQgbGllcyBvbikuIE5vLW9wIGZvciByZWN0YW5nbGVzLiAqL1xuICBhZGRWZXJ0ZXgoaWQ6IG51bWJlciwgc2VnSW5kZXg6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkO1xuXG4gIC8qKiBEZWxldGUgdGhlIHZlcnRleCBhdCBgaW5kZXhgLiBOby1vcCBmb3IgcmVjdGFuZ2xlcywgb3Igd2hlbiByZW1vdmluZyBpdFxuICAgKiAgd291bGQgZHJvcCB0aGUgcG9seWdvbiBiZWxvdyBpdHMgbWluaW11bSAoMyBjbG9zZWQgLyAyIG9wZW4pLiAqL1xuICBkZWxldGVWZXJ0ZXgoaWQ6IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgYmV6aWVyLWN1cnZlIGZsYWcgb24gYSByZWdpb24gKHRvQmV6aWVyID0gYHRydWVgLFxuICAgKiB0b1BvbHlnb24gPSBgZmFsc2VgKS4gVGhlIHZlcnRpY2VzIHN0YXkgcHV0IOKAlCBvbmx5IHRoZSBzbW9vdGgtY3VydmVcbiAgICogcmVuZGVyaW5nL2V4cG9ydCBpcyBhZGRlZCBvciByZW1vdmVkLiBBIHJlY3RhbmdsZSBpcyBmaXJzdCBjb252ZXJ0ZWQgdG8gYVxuICAgKiA0LWFuY2hvciBjbG9zZWQgcG9seWdvbiB3aGVuIHNtb290aGluZzsgdHVybmluZyBiZXppZXIgb2ZmIG9uIGEgcmVjdGFuZ2xlXG4gICAqIGlzIGEgbm8tb3AuXG4gICAqL1xuICBzZXRCZXppZXIoaWQ6IG51bWJlciwgYmV6aWVyOiBib29sZWFuKTogdm9pZDtcblxuICAvKipcbiAgICogTW92ZSBvbmUgb2YgYSBiZXppZXIgdmVydGV4J3MgdHdvIGN1YmljIGNvbnRyb2wgaGFuZGxlcyB0byBhYnNvbHV0ZSBwb2ludFxuICAgKiAoeCwgeSkuIGBzaWRlYCBpcyB0aGUgaW4tIG9yIG91dC1oYW5kbGUuIE5vLW9wIHVubGVzcyB0aGUgcmVnaW9uIGlzIGEgYmV6aWVyXG4gICAqIHBvbHlnb24uIFRoZSBoYW5kbGUgaXMgc3RvcmVkIHJlbGF0aXZlIHRvIGl0cyBhbmNob3IsIHNvIGl0IGZvbGxvd3MgdGhlXG4gICAqIGFuY2hvciB3aGVuIHRoZSB2ZXJ0ZXggaXMgbW92ZWQuXG4gICAqL1xuICBtb3ZlQmV6aWVySGFuZGxlKGlkOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIHNpZGU6ICdpbicgfCAnb3V0JywgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNb3ZlIGEgYmV6aWVyIGNvbnRyb2wgaGFuZGxlIG9uIGFuIGludGVyaW9yIHJpbmcgKGRvbnV0IGhvbGUpIOKAlCBsaWtlXG4gICAqIHtAbGluayBtb3ZlQmV6aWVySGFuZGxlfSBidXQgZm9yIGBob2xlc1tob2xlSW5kZXhdYC4gTm8tb3AgdW5sZXNzIHRoZSByZWdpb24gaXMgYSBiZXppZXJcbiAgICogcG9seWdvbiB3aXRoIGhvbGUgaGFuZGxlcyAoaml0LXVpIzEwMikuXG4gICAqL1xuICBtb3ZlSG9sZUJlemllckhhbmRsZShcbiAgICBpZDogbnVtYmVyLFxuICAgIGhvbGVJbmRleDogbnVtYmVyLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc2lkZTogJ2luJyB8ICdvdXQnLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENvYWxlc2NlIHRoZSBlbWl0cyBmcm9tIGEgYnVyc3Qgb2YgZWRpdHMgKGUuZy4gYSBsaXZlIHZlcnRleCBkcmFnKSBpbnRvIGFcbiAgICogc2luZ2xlIHVwZGF0ZSBvbiBgZW5kQmF0Y2hgLiBDYWxscyBuZXN0OyB0aGUgdXBkYXRlIGZpcmVzIHdoZW4gdGhlXG4gICAqIG91dGVybW9zdCBiYXRjaCBjbG9zZXMuIFRoZSBvdmVybGF5IHN0aWxsIHJlZHJhd3MgaXRzZWxmIHBlciBmcmFtZSDigJQgdGhpc1xuICAgKiBvbmx5IHRocm90dGxlcyB0aGUgc3RvcmUncyBgcmVnaW9uVXBkYXRlJGAgc28gZG93bnN0cmVhbSBjb25zdW1lcnMgKHRoZVxuICAgKiBSZWdpb24gRWRpdG9yIHRhYmxlKSB1cGRhdGUgb25jZSBwZXIgZ2VzdHVyZSwgbm90IG9uY2UgcGVyIHBvaW50ZXIgbW92ZS5cbiAgICovXG4gIGJlZ2luQmF0Y2goKTogdm9pZDtcbiAgZW5kQmF0Y2goKTogdm9pZDtcbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Contracts for the client-side, promptable Segment Anything (SAM) tooling
3
+ * (jit-ui#90). A SAM model is a promptable encoder/decoder ONNX pair: the heavy
4
+ * encoder runs once per image (its embedding is cached), and the light decoder
5
+ * runs per prompt (box/points) to produce a mask.
6
+ *
7
+ * The inference backend is abstracted behind {@link ISamSession} so the tool
8
+ * (SamToolService) is testable with a fake and so different runtimes (an
9
+ * onnxruntime-web session today, a worker-backed one later) can be swapped in.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvc2FtLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udHJhY3RzIGZvciB0aGUgY2xpZW50LXNpZGUsIHByb21wdGFibGUgU2VnbWVudCBBbnl0aGluZyAoU0FNKSB0b29saW5nXG4gKiAoaml0LXVpIzkwKS4gQSBTQU0gbW9kZWwgaXMgYSBwcm9tcHRhYmxlIGVuY29kZXIvZGVjb2RlciBPTk5YIHBhaXI6IHRoZSBoZWF2eVxuICogZW5jb2RlciBydW5zIG9uY2UgcGVyIGltYWdlIChpdHMgZW1iZWRkaW5nIGlzIGNhY2hlZCksIGFuZCB0aGUgbGlnaHQgZGVjb2RlclxuICogcnVucyBwZXIgcHJvbXB0IChib3gvcG9pbnRzKSB0byBwcm9kdWNlIGEgbWFzay5cbiAqXG4gKiBUaGUgaW5mZXJlbmNlIGJhY2tlbmQgaXMgYWJzdHJhY3RlZCBiZWhpbmQge0BsaW5rIElTYW1TZXNzaW9ufSBzbyB0aGUgdG9vbFxuICogKFNhbVRvb2xTZXJ2aWNlKSBpcyB0ZXN0YWJsZSB3aXRoIGEgZmFrZSBhbmQgc28gZGlmZmVyZW50IHJ1bnRpbWVzIChhblxuICogb25ueHJ1bnRpbWUtd2ViIHNlc3Npb24gdG9kYXksIGEgd29ya2VyLWJhY2tlZCBvbmUgbGF0ZXIpIGNhbiBiZSBzd2FwcGVkIGluLlxuICovXG5cbi8qKiBBIHByb21wdGFibGUgU0FNIG1vZGVsOiBhIHF1YW50aXplZCBlbmNvZGVyICsgZGVjb2RlciBPTk5YIHBhaXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbU1vZGVsRGVmIHtcbiAgLyoqIFN0YWJsZSBpZCB1c2VkIGJ5IHRoZSByZWdpc3RyeSAoZS5nLiAnbWljcm9zYW0tdml0LWItbG0nKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuIGxhYmVsIGZvciBhIG1vZGVsIHBpY2tlci4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIEVuY29kZXIgT05OWCBVUkwgKGltYWdlIOKGkiBpbWFnZSBlbWJlZGRpbmcpLiBFbXB0eSB1bnRpbCBob3N0ZWQuICovXG4gIGVuY29kZXJVcmw6IHN0cmluZztcbiAgLyoqIERlY29kZXIgT05OWCBVUkwgKGVtYmVkZGluZyArIHByb21wdHMg4oaSIG1hc2spLiBFbXB0eSB1bnRpbCBob3N0ZWQuICovXG4gIGRlY29kZXJVcmw6IHN0cmluZztcbiAgLyoqIERlY29kZXIgSS9PIGZhbWlseSDigJQgU0FNIHYxIHZzIHYyL3YzIGRpZmZlciBpbiBtYXNrIG91dHB1dCBzaXplICsgbmFtZXMuICovXG4gIHZhcmlhbnQ6ICdzYW0xJyB8ICdzYW0yJyB8ICdzYW0zJztcbiAgLyoqIEVuY29kZXIgaW5wdXQgc2lkZSBsZW5ndGggKDEwMjQgZm9yIFNBTSB2MSkuICovXG4gIGlucHV0U2l6ZTogbnVtYmVyO1xuICAvKiogVHJ1ZSBmb3IgbWljcm9zY29weS1maW5ldHVuZWQgY2hlY2twb2ludHMgKG1pY3JvLXNhbSwgcGF0aG9TQU0pLiAqL1xuICBtaWNyb3Njb3B5PzogYm9vbGVhbjtcbiAgLyoqIE92ZXJyaWRlIHRoZSBvbm54cnVudGltZS13ZWIgZXhlY3V0aW9uIHByb3ZpZGVycyBmb3IgdGhlIEVOQ09ERVIgc2Vzc2lvblxuICAgKiAgKGRlY29kZXIgaXMgYWx3YXlzIFdBU00pLiBEZWZhdWx0cyB0byBXZWJHUFUtd2l0aC1XQVNNLWZhbGxiYWNrLiBTZXQgdG9cbiAgICogIGBbJ3dhc20nXWAgZm9yIGFyY2hpdGVjdHVyZXMgd2hvc2UgZnAxNiBhdHRlbnRpb24gb3ZlcmZsb3dzIG9uIHRoZSBXZWJHUFVcbiAgICogIEVQIGFuZCByZXR1cm5zIGFuIGVtcHR5IG1hc2sgKGUuZy4gbWljcm8tc2FtIFZpVC1UJ3MgVGlueVZpVCBlbmNvZGVyKSxcbiAgICogIHdoaWNoIHJ1biBjb3JyZWN0bHkg4oCUIGFuZCBmYXN0LCB3aGVuIHNtYWxsIOKAlCBvbiBXQVNNLiAqL1xuICBlbmNvZGVyUHJvdmlkZXJzPzogc3RyaW5nW107XG4gIC8qKiBSdW4gaW5mZXJlbmNlIGluLXByb2Nlc3Mgb24gdGhlIG1haW4gdGhyZWFkIGluc3RlYWQgb2YgdGhlIFNBTSBXZWIgV29ya2VyLlxuICAgKiAgT25seSB2YWxpZCBmb3Igc21hbGwgV0FTTS1vbmx5IG1vZGVscyAoZS5nLiBtaWNyby1zYW0gVmlULVQpIHdoZXJlIHRoZVxuICAgKiAgd29ya2VyJ3Mgc3Bhd24gKyBzZWNvbmQtT1JULXJ1bnRpbWUgKyBtZXNzYWdlIG92ZXJoZWFkIG91dHdlaWdocyBpdHNcbiAgICogIG9mZi10aHJlYWQgYmVuZWZpdC4gV2ViR1BVIG1vZGVscyBpZ25vcmUgdGhpcyAodGhleSBtdXN0IHN0YXkgaW4gdGhlXG4gICAqICB3b3JrZXIgdG8gYXZvaWQgZnJlZXppbmcgdGhlIHRhYikuICovXG4gIGluUHJvY2Vzcz86IGJvb2xlYW47XG59XG5cbi8qKiBDYWNoZWQgZW5jb2RlciBvdXRwdXQgZm9yIG9uZSBpbWFnZSAocmV1c2VkIGFjcm9zcyBldmVyeSBwcm9tcHQgb24gaXQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1FbWJlZGRpbmcge1xuICAvKiogRmxhdHRlbmVkIGVtYmVkZGluZyB0ZW5zb3IsIHNoYXBlIGBkaW1zYC4gKi9cbiAgZGF0YTogRmxvYXQzMkFycmF5O1xuICAvKiogRW1iZWRkaW5nIHRlbnNvciBkaW1zLCBlLmcuIFsxLCAyNTYsIDY0LCA2NF0uICovXG4gIGRpbXM6IG51bWJlcltdO1xuICAvKiogYGlucHV0U2l6ZSAvIG1heChpbWFnZVdpZHRoLCBpbWFnZUhlaWdodClgIOKAlCBzY2FsZXMgcHJvbXB0IGNvb3Jkcy4gKi9cbiAgc2NhbGU6IG51bWJlcjtcbiAgLyoqIEltYWdlIChtYXRyaXgpIHNpemUgdGhlIGVtYmVkZGluZyB3YXMgY29tcHV0ZWQgZm9yLiAqL1xuICBpbWFnZVdpZHRoOiBudW1iZXI7XG4gIGltYWdlSGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBPcGFxdWUgaGFuZGxlIHRvIHRoZSBlbWJlZGRpbmcgY2FjaGVkIGluc2lkZSB0aGUgaW5mZXJlbmNlIFdlYiBXb3JrZXIsIHdoZW5cbiAgICogIHRoZSBzZXNzaW9uIHJ1bnMgb2ZmLXRocmVhZC4gYGRlY29kZWAgcGFzc2VzIGl0IGJhY2sgc28gdGhlIHdvcmtlciByZXVzZXNcbiAgICogIHRoZSBjYWNoZWQgdGVuc29yIGluc3RlYWQgb2Ygcm91bmQtdHJpcHBpbmcgdGhlIChtdWx0aS1NQikgZW1iZWRkaW5nIGRhdGE7XG4gICAqICBgZGF0YWAgaXMgdGhlbiBhbiBlbXB0eSBwbGFjZWhvbGRlci4gQWJzZW50IGZvciBpbi1wcm9jZXNzL2Zha2Ugc2Vzc2lvbnMuICovXG4gIHRva2VuPzogbnVtYmVyO1xufVxuXG4vKiogQSBwcm9tcHQgZm9yIG9uZSBvYmplY3QsIGluIGltYWdlIChtYXRyaXgpIHBpeGVsIGNvb3JkaW5hdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1Qcm9tcHQge1xuICAvKiogQm94IHByb21wdCBgW3gwLHkwLHgxLHkxXWAgKGlzc3VlICM5MCdzIHByaW1hcnkgYWZmb3JkYW5jZSkuICovXG4gIGJveD86IHsgeDA6IG51bWJlcjsgeTA6IG51bWJlcjsgeDE6IG51bWJlcjsgeTE6IG51bWJlciB9O1xuICAvKiogUG9pbnQgcHJvbXB0czsgYGxhYmVsYCAxID0gcG9zaXRpdmUgKGluY2x1ZGUpLCAwID0gbmVnYXRpdmUgKGV4Y2x1ZGUpLiAqL1xuICBwb2ludHM/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBsYWJlbDogMCB8IDEgfVtdO1xufVxuXG4vKiogQSBkZWNvZGVkIG1hc2ssIGJpbmFyeSAoMC8xKSwgYXQgaW1hZ2UgKG1hdHJpeCkgcmVzb2x1dGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtTWFza1Jlc3VsdCB7XG4gIG1hc2s6IFVpbnQ4QXJyYXk7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICAvKiogTW9kZWwtcHJlZGljdGVkIElvVSBxdWFsaXR5IHNjb3JlIGZvciB0aGUgY2hvc2VuIG1hc2suICovXG4gIGlvdTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb21wdGFibGUtU0FNIGluZmVyZW5jZSBiYWNrZW5kLiBMaWZlY3ljbGU6IGBsb2FkTW9kZWxgIG9uY2UsIGBlbWJlZGAgb25jZVxuICogcGVyIGltYWdlLCBgZGVjb2RlYCBwZXIgcHJvbXB0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTYW1TZXNzaW9uIHtcbiAgLyoqIExvYWQgdGhlIG1vZGVsOyBgb25Qcm9ncmVzc2AgcmVwb3J0cyBlbmNvZGVyLWRvd25sb2FkIGZyYWN0aW9uICgwLi4xKS4gKi9cbiAgbG9hZE1vZGVsKG1vZGVsOiBTYW1Nb2RlbERlZiwgb25Qcm9ncmVzcz86IChmcmFjdGlvbjogbnVtYmVyKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPjtcbiAgaXNMb2FkZWQoKTogYm9vbGVhbjtcbiAgLyoqIFJ1biB0aGUgZW5jb2RlciBvbiBhbiBSR0JBIGltYWdlOyByZXR1cm5zIGEgY2FjaGVhYmxlIGVtYmVkZGluZy4gKi9cbiAgZW1iZWQoaW1hZ2U6IHsgZGF0YTogVWludDhDbGFtcGVkQXJyYXk7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0pOiBQcm9taXNlPFNhbUVtYmVkZGluZz47XG4gIC8qKiBSdW4gdGhlIGRlY29kZXIgZm9yIG9uZSBwcm9tcHQgYWdhaW5zdCBhIGNhY2hlZCBlbWJlZGRpbmcuICovXG4gIGRlY29kZShlbWJlZGRpbmc6IFNhbUVtYmVkZGluZywgcHJvbXB0OiBTYW1Qcm9tcHQpOiBQcm9taXNlPFNhbU1hc2tSZXN1bHQ+O1xuICBkaXNwb3NlKCk6IHZvaWQ7XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /** Full toolbar — the default when no `toolbarTools` is supplied. */
2
+ export const ALL_TOOLBAR_TOOLS = {
3
+ specialTools: true,
4
+ zoomTools: true,
5
+ regionTools: true,
6
+ help: true,
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy90b29sYmFyLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkEscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFvQztJQUNoRSxZQUFZLEVBQUUsSUFBSTtJQUNsQixTQUFTLEVBQUUsSUFBSTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLElBQUksRUFBRSxJQUFJO0NBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2hpY2ggZ3JvdXBzIG9mIGNvbnRyb2xzIHRoZSB2aXN1YWxpemF0aW9uIHRvb2xiYXIgc2hvd3MuIEFsbCBkZWZhdWx0IHRvIGB0cnVlYFxuICogKHRoZSBmdWxsIHRvb2xiYXIpOyBhIGNvbnN1bWVyIGVtYmVkZGluZyBgPHZpc3VhbGl6ZXI+YCBjYW4gaGlkZSBncm91cHNcbiAqIGl0IGRvZXNuJ3Qgd2FudCB2aWEgdGhlIGB0b29sYmFyVG9vbHNgIGlucHV0IOKAlCBlLmcuIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lIHNob3dzXG4gKiBvbmx5IHRoZSB6b29tIGFuZCByZWdpb24gdG9vbHMuXG4gKlxuICogR3JvdXBzIG5vdCBsaXN0ZWQgaGVyZSAoc3RhY2sgbmF2aWdhdGlvbiwgM0Qtc2NlbmUgY29udHJvbHMsIGlzb3N1cmZhY2UgYmFuZCkgYXJlXG4gKiBhbHJlYWR5IHNob3duIG9ubHkgd2hlbiB0aGUgaW1hZ2UvcGxvdCB0eXBlIGNhbGxzIGZvciB0aGVtLCBzbyBhIHNpbmdsZSA4LWJpdFxuICogaW1hZ2UgbmV2ZXIgc3VyZmFjZXMgdGhlbSByZWdhcmRsZXNzIG9mIHRoZXNlIGZsYWdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xiYXJUb29sVmlzaWJpbGl0eSB7XG4gIC8qKiBQbG90LXR5cGUgc2VsZWN0b3IsIGludGVuc2l0eS1wcm9maWxlIGxpbmUsIENoYW5uZWxzICYgSGlzdG9ncmFtLCBkb3dubG9hZCxcbiAgICogIGFuZCBmaXQtdG8tdmlldyAoYXV0b3NjYWxlKSDigJQgZXZlcnl0aGluZyB0aGF0IGlzbid0IGEgem9vbSBvciByZWdpb24gdG9vbC4gKi9cbiAgc3BlY2lhbFRvb2xzPzogYm9vbGVhbjtcbiAgLyoqIFpvb20gZHJhZywgem9vbSBib3gsIHBhbiwgem9vbSBpbiwgem9vbSBvdXQuICovXG4gIHpvb21Ub29scz86IGJvb2xlYW47XG4gIC8qKiBSZWdpb24gZHJhd2luZy9lZGl0aW5nOiBzZWxlY3QsIHJlY3RhbmdsZSwgcG9seWxpbmUsIGZyZWVmb3JtLCBwb2x5Z29uIHZlcnRleFxuICAgKiAgZWRpdGluZywgd2FuZCwgdmVydGV4IGVyYXNlciwgZGVsZXRlLCBCw6l6aWVyL3BvbHlnb24gY29udmVyc2lvbi4gKi9cbiAgcmVnaW9uVG9vbHM/OiBib29sZWFuO1xuICAvKiogVGhlIEhlbHAgYnV0dG9uIGFuZCBpdHMgZGlhbG9nLiAqL1xuICBoZWxwPzogYm9vbGVhbjtcbn1cblxuLyoqIEZ1bGwgdG9vbGJhciDigJQgdGhlIGRlZmF1bHQgd2hlbiBubyBgdG9vbGJhclRvb2xzYCBpcyBzdXBwbGllZC4gKi9cbmV4cG9ydCBjb25zdCBBTExfVE9PTEJBUl9UT09MUzogUmVxdWlyZWQ8VG9vbGJhclRvb2xWaXNpYmlsaXR5PiA9IHtcbiAgc3BlY2lhbFRvb2xzOiB0cnVlLFxuICB6b29tVG9vbHM6IHRydWUsXG4gIHJlZ2lvblRvb2xzOiB0cnVlLFxuICBoZWxwOiB0cnVlLFxufTtcbiJdfQ==