@jax-data-science/sci-image-visualizer 0.8.3 → 0.9.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 (525) hide show
  1. package/README.md +201 -460
  2. package/esm2022/index.mjs +28 -15
  3. package/esm2022/lib/channel-histogram/channel-histogram.component.mjs +163 -91
  4. package/esm2022/lib/contracts/capabilities.contract.mjs +4 -3
  5. package/esm2022/lib/contracts/cell-segmenter.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +5 -1
  7. package/esm2022/lib/contracts/color.mjs +60 -0
  8. package/esm2022/lib/contracts/colormap-lut.mjs +213 -57
  9. package/esm2022/lib/contracts/coordinate-transform.contract.mjs +1 -1
  10. package/esm2022/lib/contracts/display-types.mjs +11 -1
  11. package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
  12. package/esm2022/lib/contracts/intensity.mjs +48 -5
  13. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  14. package/esm2022/lib/contracts/plot-type.mjs +134 -17
  15. package/esm2022/lib/contracts/ports/image-state.port.mjs +4 -1
  16. package/esm2022/lib/contracts/ports/preferences.port.mjs +5 -1
  17. package/esm2022/lib/contracts/ports/region-io.port.mjs +2 -1
  18. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +5 -1
  19. package/esm2022/lib/contracts/ports/tile-access.port.mjs +2 -1
  20. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  21. package/esm2022/lib/contracts/region-overlay.contract.mjs +1 -1
  22. package/esm2022/lib/contracts/sam.contract.mjs +1 -1
  23. package/esm2022/lib/contracts/semantic-segmenter.contract.mjs +1 -1
  24. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  25. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +6 -4
  26. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  27. package/esm2022/lib/contracts/viz-config.mjs +2 -1
  28. package/esm2022/lib/geometry/contour.mjs +63 -0
  29. package/esm2022/lib/geometry/raster.mjs +98 -0
  30. package/esm2022/lib/geometry/ring.mjs +201 -0
  31. package/esm2022/lib/hex-color-picker/hex-color-picker.component.mjs +202 -102
  32. package/esm2022/lib/implementations/base-store-visualizer.mjs +201 -48
  33. package/esm2022/lib/implementations/napari-js/napari-axes-gizmo.mjs +65 -0
  34. package/esm2022/lib/implementations/napari-js/napari-display-state.mjs +136 -0
  35. package/esm2022/lib/implementations/napari-js/napari-helpers.mjs +199 -0
  36. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +602 -0
  37. package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +3 -4
  38. package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +66 -0
  39. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +157 -591
  40. package/esm2022/lib/implementations/napari-js/napari-scene.mjs +2 -0
  41. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +614 -0
  42. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +769 -0
  43. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +199 -0
  44. package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +263 -0
  45. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +159 -0
  46. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +106 -1408
  47. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +2 -2
  48. package/esm2022/lib/implementations/napari-js/napari-surface-scene.mjs +271 -0
  49. package/esm2022/lib/implementations/napari-js/napari-tile-client.mjs +562 -0
  50. package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +344 -0
  51. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +358 -4218
  52. package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +439 -0
  53. package/esm2022/lib/implementations/napari-js/napari-volume-z-handle.mjs +6 -6
  54. package/esm2022/lib/implementations/napari-js/region-overlay/overlay-projection.mjs +96 -0
  55. package/esm2022/lib/implementations/napari-js/region-overlay/region-edit.mjs +35 -0
  56. package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +182 -0
  57. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +30 -0
  58. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +274 -0
  59. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +144 -0
  60. package/esm2022/lib/implementations/napari-js/spatial-tiles/layer-groups.mjs +165 -0
  61. package/esm2022/lib/implementations/napari-js/spatial-tiles/plan-context.mjs +78 -0
  62. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +182 -0
  63. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +369 -0
  64. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +306 -0
  65. package/esm2022/lib/implementations/osd/display-pipeline.mjs +102 -40
  66. package/esm2022/lib/implementations/osd/histogram-sampler.mjs +56 -31
  67. package/esm2022/lib/implementations/osd/openseadragon-viewer-options.mjs +128 -0
  68. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +333 -1685
  69. package/esm2022/lib/implementations/osd/osd-coordinate-transform.mjs +1 -1
  70. package/esm2022/lib/implementations/osd/osd-coords.mjs +5 -6
  71. package/esm2022/lib/implementations/osd/osd-export.mjs +122 -0
  72. package/esm2022/lib/implementations/osd/osd-lib.mjs +15 -1
  73. package/esm2022/lib/implementations/osd/osd-navigator-chrome.mjs +205 -0
  74. package/esm2022/lib/implementations/osd/osd-pixel-readback.mjs +68 -0
  75. package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +153 -0
  76. package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +185 -718
  77. package/esm2022/lib/implementations/osd/osd-scale-bar.mjs +52 -60
  78. package/esm2022/lib/implementations/osd/osd-tile-source.mjs +105 -0
  79. package/esm2022/lib/implementations/osd/osd-viewer-like.mjs +2 -0
  80. package/esm2022/lib/implementations/osd/osd-viewer-mount.mjs +44 -0
  81. package/esm2022/lib/implementations/osd/osd-viewport.mjs +184 -0
  82. package/esm2022/lib/implementations/osd/osd-zoom.mjs +7 -1
  83. package/esm2022/lib/implementations/osd/simple-source.mjs +395 -0
  84. package/esm2022/lib/implementations/osd/slice-cache.mjs +53 -48
  85. package/esm2022/lib/implementations/osd/tile-client.mjs +32 -11
  86. package/esm2022/lib/implementations/osd/tile-recolor.mjs +330 -0
  87. package/esm2022/lib/implementations/plotly/omics-trace-builders.mjs +161 -73
  88. package/esm2022/lib/implementations/plotly/plotly-coordinate-transform.mjs +1 -1
  89. package/esm2022/lib/implementations/plotly/plotly-image-loader.mjs +112 -0
  90. package/esm2022/lib/implementations/plotly/plotly-image-recolor.mjs +178 -0
  91. package/esm2022/lib/implementations/plotly/plotly-intensity-inset.mjs +33 -0
  92. package/esm2022/lib/implementations/plotly/plotly-isosurface-controls.mjs +83 -0
  93. package/esm2022/lib/implementations/plotly/plotly-layouts.mjs +121 -0
  94. package/esm2022/lib/implementations/plotly/plotly-readback.mjs +117 -0
  95. package/esm2022/lib/implementations/plotly/plotly-region-overlay.mjs +19 -10
  96. package/esm2022/lib/implementations/plotly/plotly-shape-projection.mjs +223 -0
  97. package/esm2022/lib/implementations/plotly/plotly-trace-builders.mjs +79 -19
  98. package/esm2022/lib/implementations/plotly/plotly-zoom-controller.mjs +223 -0
  99. package/esm2022/lib/implementations/plotly/plotly.service.mjs +439 -1655
  100. package/esm2022/lib/implementations/region-centroids.mjs +47 -0
  101. package/esm2022/lib/implementations/simple-slice-access.service.mjs +22 -12
  102. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +172 -92
  103. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +103 -22
  104. package/esm2022/lib/implementations/tile-server/index.mjs +6 -0
  105. package/esm2022/lib/implementations/tile-server/native-histogram.mjs +30 -0
  106. package/esm2022/lib/implementations/tile-server/poll-descriptor.mjs +65 -0
  107. package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +42 -0
  108. package/esm2022/lib/implementations/tile-server/transport.mjs +135 -0
  109. package/esm2022/lib/intensity/intensity-profile.mjs +107 -0
  110. package/esm2022/lib/intensity/intensity-profile.service.mjs +223 -0
  111. package/esm2022/lib/intensity-inset/intensity-inset.component.mjs +133 -0
  112. package/esm2022/lib/models/bezier.mjs +1 -11
  113. package/esm2022/lib/models/class-preset.mjs +41 -3
  114. package/esm2022/lib/models/geometry.mjs +27 -164
  115. package/esm2022/lib/models/polygon-edit.mjs +254 -0
  116. package/esm2022/lib/models/polygon-factory.mjs +118 -0
  117. package/esm2022/lib/models/region-clone.mjs +68 -0
  118. package/esm2022/lib/models/region-geojson.mjs +373 -0
  119. package/esm2022/lib/models/region.mjs +34 -33
  120. package/esm2022/lib/models/shape.mjs +18 -16
  121. package/esm2022/lib/plot-mode/contribution-host.mjs +297 -0
  122. package/esm2022/lib/plot-mode/plot-mode-controller.mjs +9 -6
  123. package/esm2022/lib/plot-mode/plot-type-menu.mjs +85 -0
  124. package/esm2022/lib/plot-mode/tool-params-model.mjs +87 -0
  125. package/esm2022/lib/plot.utilities.mjs +296 -473
  126. package/esm2022/lib/processing/image-crop.mjs +1 -1
  127. package/esm2022/lib/processing/processing-image.mjs +28 -15
  128. package/esm2022/lib/provide-visualization.mjs +40 -14
  129. package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +99 -0
  130. package/esm2022/lib/region-editor/file-stem.mjs +13 -0
  131. package/esm2022/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.mjs +118 -0
  132. package/esm2022/lib/region-editor/mask-export.service.mjs +98 -0
  133. package/esm2022/lib/region-editor/mask-raster.mjs +11 -5
  134. package/esm2022/lib/region-editor/region-color-dialog/region-color-dialog.component.mjs +56 -0
  135. package/esm2022/lib/region-editor/region-editor-help/region-editor-help.component.mjs +28 -0
  136. package/esm2022/lib/region-editor/region-editor.component.mjs +402 -651
  137. package/esm2022/lib/region-editor/region-metrics.mjs +68 -0
  138. package/esm2022/lib/region-editor/region-persistence.service.mjs +134 -0
  139. package/esm2022/lib/region-editor/region-table/region-table.component.mjs +153 -0
  140. package/esm2022/lib/region-editor/save-mask-dialog/save-mask-dialog.component.mjs +91 -0
  141. package/esm2022/lib/region-editor/save-regions-dialog/save-regions-dialog.component.mjs +92 -0
  142. package/esm2022/lib/region-ops.service.mjs +28 -70
  143. package/esm2022/lib/region-overlay/region-geometry.mjs +360 -0
  144. package/esm2022/lib/region-overlay/region-hit-test.mjs +103 -0
  145. package/esm2022/lib/region-overlay/svg-region-renderer.mjs +228 -0
  146. package/esm2022/lib/render-orchestrator.mjs +14 -11
  147. package/esm2022/lib/render-session.mjs +207 -0
  148. package/esm2022/lib/routing-visualizer.service.mjs +459 -411
  149. package/esm2022/lib/spatial/density-raster.mjs +14 -0
  150. package/esm2022/lib/spatial/embedding-compute-coordinator.mjs +239 -0
  151. package/esm2022/lib/spatial/embedding-compute.mjs +43 -10
  152. package/esm2022/lib/spatial/gene-search.mjs +1 -1
  153. package/esm2022/lib/spatial/glyphs.mjs +97 -0
  154. package/esm2022/lib/spatial/lod.mjs +187 -0
  155. package/esm2022/lib/spatial/spatial-controls.facade.mjs +200 -0
  156. package/esm2022/lib/spatial/spatial-density.mjs +25 -16
  157. package/esm2022/lib/spatial/spatial-encoding.mjs +26 -82
  158. package/esm2022/lib/spatial/spatial-expression.mjs +43 -42
  159. package/esm2022/lib/spatial/spatial-framing.mjs +1 -1
  160. package/esm2022/lib/spatial/spatial-heatmap.mjs +6 -3
  161. package/esm2022/lib/spatial/spatial-hover.mjs +5 -33
  162. package/esm2022/lib/spatial/spatial-panel-model.mjs +282 -0
  163. package/esm2022/lib/spatial/spatial-sections.mjs +1 -1
  164. package/esm2022/lib/spatial/spatial-selection.mjs +33 -46
  165. package/esm2022/lib/spatial/spatial-tile-merge.mjs +219 -0
  166. package/esm2022/lib/spatial/spatial-tiles.mjs +12 -648
  167. package/esm2022/lib/spatial/spatial-volume-image.mjs +2 -4
  168. package/esm2022/lib/spatial/stats.mjs +71 -0
  169. package/esm2022/lib/spatial/transcript-grouping.mjs +307 -0
  170. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +150 -0
  171. package/esm2022/lib/spatial-controls/spatial-charts/chart-data-model.mjs +309 -0
  172. package/esm2022/lib/spatial-controls/spatial-charts/chart-help.mjs +145 -0
  173. package/esm2022/lib/spatial-controls/spatial-charts/plotly-chart-host.mjs +158 -0
  174. package/esm2022/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.mjs +47 -0
  175. package/esm2022/lib/spatial-controls/spatial-charts/spatial-charts.component.mjs +297 -802
  176. package/esm2022/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.mjs +89 -0
  177. package/esm2022/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.mjs +52 -0
  178. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +143 -1238
  179. package/esm2022/lib/spatial-controls/spatial-gene-picker.mjs +153 -0
  180. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +241 -0
  181. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +193 -0
  182. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +132 -0
  183. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.model.mjs +67 -0
  184. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +147 -0
  185. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +300 -0
  186. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +370 -0
  187. package/esm2022/lib/store/class-color.util.mjs +46 -3
  188. package/esm2022/lib/store/region-history.mjs +146 -0
  189. package/esm2022/lib/store/region-scope-cache.mjs +140 -0
  190. package/esm2022/lib/store/region-selection.mjs +82 -0
  191. package/esm2022/lib/store/region-store.service.mjs +279 -675
  192. package/esm2022/lib/store/spatial-selection.service.mjs +2 -2
  193. package/esm2022/lib/store/visualizer-store.service.mjs +49 -71
  194. package/esm2022/lib/toast-outlets.mjs +5 -4
  195. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +92 -434
  196. package/esm2022/lib/toolbar/canvas-tools.mjs +20 -0
  197. package/esm2022/lib/toolbar/crop/slide-crop.mjs +26 -42
  198. package/esm2022/lib/toolbar/plot-type-selector/plot-type-selector.component.mjs +85 -0
  199. package/esm2022/lib/toolbar/region-tools/region-tool-buttons.mjs +74 -0
  200. package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +114 -0
  201. package/esm2022/lib/toolbar/segmentation/cell-segment-tool.service.mjs +74 -78
  202. package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +50 -8
  203. package/esm2022/lib/toolbar/segmentation/onnx-sam-session.mjs +61 -42
  204. package/esm2022/lib/toolbar/segmentation/pending-calls.mjs +47 -0
  205. package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +12 -4
  206. package/esm2022/lib/toolbar/segmentation/sam-onnx-core.mjs +70 -14
  207. package/esm2022/lib/toolbar/segmentation/sam-point-tool.service.mjs +135 -172
  208. package/esm2022/lib/toolbar/segmentation/sam-prompt.mjs +9 -90
  209. package/esm2022/lib/toolbar/segmentation/sam-session.service.mjs +183 -0
  210. package/esm2022/lib/toolbar/segmentation/sam-tool.service.mjs +95 -150
  211. package/esm2022/lib/toolbar/segmentation/segmentation-commit.mjs +12 -0
  212. package/esm2022/lib/toolbar/segmentation/segmentation-runner.mjs +108 -0
  213. package/esm2022/lib/toolbar/segmentation-tools/segmentation-tools.component.mjs +155 -0
  214. package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +81 -0
  215. package/esm2022/lib/toolbar/tool-kit/async-tool-status.mjs +37 -0
  216. package/esm2022/lib/toolbar/tool-kit/canvas-tool-manager.mjs +63 -0
  217. package/esm2022/lib/toolbar/tool-kit/canvas-tool.mjs +2 -0
  218. package/esm2022/lib/toolbar/tool-kit/frame-pixels.mjs +108 -0
  219. package/esm2022/lib/toolbar/tool-kit/mask-stroke-editor.mjs +306 -0
  220. package/esm2022/lib/toolbar/tool-kit/matrix-frame.mjs +61 -0
  221. package/esm2022/lib/toolbar/tool-kit/tool-overlay.mjs +140 -0
  222. package/esm2022/lib/toolbar/tool-kit/undo-gesture.mjs +24 -0
  223. package/esm2022/lib/toolbar/tool-slider/tool-slider.component.mjs +63 -0
  224. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +50 -0
  225. package/esm2022/lib/toolbar/toolbar.component.mjs +68 -117
  226. package/esm2022/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.mjs +93 -115
  227. package/esm2022/lib/toolbar/view-controls/view-controls.component.mjs +107 -0
  228. package/esm2022/lib/toolbar/wand/wand-region-grow.mjs +321 -0
  229. package/esm2022/lib/toolbar/wand/wand-tool.service.mjs +121 -416
  230. package/esm2022/lib/toolbar/wand/wand.service.mjs +30 -894
  231. package/esm2022/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.mjs +48 -90
  232. package/esm2022/lib/util/mark-for-check.mjs +17 -0
  233. package/esm2022/lib/util/supersede.mjs +56 -0
  234. package/esm2022/lib/visualization.module.mjs +39 -141
  235. package/esm2022/lib/visualizer/floating-drag.directive.mjs +58 -0
  236. package/esm2022/lib/visualizer/region-actions.mjs +149 -0
  237. package/esm2022/lib/visualizer/region-load.mjs +60 -0
  238. package/esm2022/lib/visualizer/spatial-dataset-binder.mjs +163 -0
  239. package/esm2022/lib/visualizer/tool-modes.mjs +113 -0
  240. package/esm2022/lib/visualizer/viewer-shortcuts.mjs +167 -0
  241. package/esm2022/lib/visualizer/visualizer-context-menu.mjs +119 -0
  242. package/esm2022/lib/visualizer.component.mjs +480 -1902
  243. package/esm2022/lib/workers/spatial-math-ops.mjs +43 -0
  244. package/esm2022/lib/workers/spatial-math-worker.mjs +10 -0
  245. package/esm2022/lib/workers/spatial-math.mjs +190 -0
  246. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs +41083 -0
  247. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +1 -0
  248. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs +238 -0
  249. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map +1 -0
  250. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs +12 -0
  251. package/fesm2022/jax-data-science-sci-image-visualizer-spatial-math-worker-BzVFFqGS.mjs.map +1 -0
  252. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +41 -34467
  253. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  254. package/fesm2022/mask.worker.js +36 -917
  255. package/fesm2022/onnx-sam.worker.js +52 -16
  256. package/fesm2022/spatial-math.worker.js +471 -0
  257. package/fesm2022/tsne.worker.js +32 -15
  258. package/index.d.ts +13 -10
  259. package/lib/channel-histogram/channel-histogram.component.d.ts +53 -43
  260. package/lib/contracts/capabilities.contract.d.ts +4 -2
  261. package/lib/contracts/cell-segmenter.contract.d.ts +1 -0
  262. package/lib/contracts/channel-histogram-api.contract.d.ts +4 -0
  263. package/lib/contracts/color.d.ts +27 -0
  264. package/lib/contracts/colormap-lut.d.ts +19 -4
  265. package/lib/contracts/coordinate-transform.contract.d.ts +3 -3
  266. package/lib/contracts/display-types.d.ts +21 -0
  267. package/lib/contracts/instance-segmenter.contract.d.ts +5 -0
  268. package/lib/contracts/intensity.d.ts +13 -2
  269. package/lib/contracts/plot-type.d.ts +3 -1
  270. package/lib/contracts/ports/image-state.port.d.ts +6 -2
  271. package/lib/contracts/ports/preferences.port.d.ts +4 -0
  272. package/lib/contracts/ports/region-io.port.d.ts +1 -0
  273. package/lib/contracts/ports/spatial-data.port.d.ts +4 -10
  274. package/lib/contracts/ports/tile-access.port.d.ts +1 -0
  275. package/lib/contracts/region-editor-api.contract.d.ts +1 -1
  276. package/lib/contracts/region-overlay.contract.d.ts +5 -0
  277. package/lib/contracts/sam.contract.d.ts +7 -0
  278. package/lib/contracts/semantic-segmenter.contract.d.ts +6 -0
  279. package/lib/contracts/spatial-dataset.contract.d.ts +19 -6
  280. package/lib/contracts/toolbar-tool.contract.d.ts +1 -0
  281. package/lib/contracts/visualizer.contract.d.ts +221 -54
  282. package/lib/contracts/viz-config.d.ts +1 -0
  283. package/lib/geometry/contour.d.ts +24 -0
  284. package/lib/geometry/raster.d.ts +42 -0
  285. package/lib/geometry/ring.d.ts +67 -0
  286. package/lib/hex-color-picker/hex-color-picker.component.d.ts +61 -27
  287. package/lib/implementations/base-store-visualizer.d.ts +61 -15
  288. package/lib/implementations/napari-js/napari-axes-gizmo.d.ts +36 -0
  289. package/lib/implementations/napari-js/napari-display-state.d.ts +76 -0
  290. package/lib/implementations/napari-js/napari-helpers.d.ts +129 -0
  291. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +162 -0
  292. package/lib/implementations/napari-js/napari-loading-badge.d.ts +0 -1
  293. package/lib/implementations/napari-js/napari-loading-state.d.ts +30 -0
  294. package/lib/implementations/napari-js/napari-region-overlay.d.ts +62 -70
  295. package/lib/implementations/napari-js/napari-scene.d.ts +93 -0
  296. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +163 -0
  297. package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +212 -0
  298. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +114 -0
  299. package/lib/implementations/napari-js/napari-spatial-hover.d.ts +89 -0
  300. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +118 -0
  301. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +56 -263
  302. package/lib/implementations/napari-js/napari-spatial-tooltip.d.ts +1 -1
  303. package/lib/implementations/napari-js/napari-surface-scene.d.ts +76 -0
  304. package/lib/implementations/napari-js/napari-tile-client.d.ts +214 -0
  305. package/lib/implementations/napari-js/napari-tool-bridge.d.ts +179 -0
  306. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +121 -883
  307. package/lib/implementations/napari-js/napari-volume-scene.d.ts +104 -0
  308. package/lib/implementations/napari-js/napari-volume-z-handle.d.ts +8 -12
  309. package/lib/implementations/napari-js/region-overlay/overlay-projection.d.ts +59 -0
  310. package/lib/implementations/napari-js/region-overlay/region-edit.d.ts +15 -0
  311. package/lib/implementations/napari-js/region-overlay/region-svg-renderer.d.ts +54 -0
  312. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +26 -0
  313. package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +70 -0
  314. package/lib/implementations/napari-js/spatial-tiles/density-layer.d.ts +61 -0
  315. package/lib/implementations/napari-js/spatial-tiles/layer-groups.d.ts +67 -0
  316. package/lib/implementations/napari-js/spatial-tiles/plan-context.d.ts +38 -0
  317. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +71 -0
  318. package/lib/implementations/napari-js/spatial-tiles/transcript-jobs.d.ts +105 -0
  319. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +56 -0
  320. package/lib/implementations/osd/display-pipeline.d.ts +38 -9
  321. package/lib/implementations/osd/histogram-sampler.d.ts +22 -12
  322. package/lib/implementations/osd/openseadragon-viewer-options.d.ts +35 -0
  323. package/lib/implementations/osd/openseadragon-visualizer.service.d.ts +78 -354
  324. package/lib/implementations/osd/osd-coordinate-transform.d.ts +2 -1
  325. package/lib/implementations/osd/osd-coords.d.ts +6 -4
  326. package/lib/implementations/osd/osd-export.d.ts +36 -0
  327. package/lib/implementations/osd/osd-lib.d.ts +7 -0
  328. package/lib/implementations/osd/osd-navigator-chrome.d.ts +69 -0
  329. package/lib/implementations/osd/osd-pixel-readback.d.ts +22 -0
  330. package/lib/implementations/osd/osd-region-overlay-draw.d.ts +37 -0
  331. package/lib/implementations/osd/osd-region-overlay.d.ts +36 -48
  332. package/lib/implementations/osd/osd-scale-bar.d.ts +8 -6
  333. package/lib/implementations/osd/osd-tile-source.d.ts +49 -0
  334. package/lib/implementations/osd/osd-viewer-like.d.ts +100 -0
  335. package/lib/implementations/osd/osd-viewer-mount.d.ts +14 -0
  336. package/lib/implementations/osd/osd-viewport.d.ts +77 -0
  337. package/lib/implementations/osd/osd-zoom.d.ts +6 -0
  338. package/lib/implementations/osd/simple-source.d.ts +161 -0
  339. package/lib/implementations/osd/slice-cache.d.ts +12 -3
  340. package/lib/implementations/osd/tile-client.d.ts +11 -14
  341. package/lib/implementations/osd/tile-recolor.d.ts +141 -0
  342. package/lib/implementations/plotly/omics-trace-builders.d.ts +32 -20
  343. package/lib/implementations/plotly/plotly-image-loader.d.ts +49 -0
  344. package/lib/implementations/plotly/plotly-image-recolor.d.ts +75 -0
  345. package/lib/implementations/plotly/plotly-intensity-inset.d.ts +8 -0
  346. package/lib/implementations/plotly/plotly-isosurface-controls.d.ts +38 -0
  347. package/lib/implementations/plotly/plotly-layouts.d.ts +188 -0
  348. package/lib/implementations/plotly/plotly-readback.d.ts +41 -0
  349. package/lib/implementations/plotly/plotly-region-overlay.d.ts +2 -2
  350. package/lib/implementations/plotly/plotly-shape-projection.d.ts +92 -0
  351. package/lib/implementations/plotly/plotly-trace-builders.d.ts +23 -12
  352. package/lib/implementations/plotly/plotly-zoom-controller.d.ts +86 -0
  353. package/lib/implementations/plotly/plotly.service.d.ts +136 -401
  354. package/lib/implementations/region-centroids.d.ts +14 -0
  355. package/lib/implementations/simple-slice-access.service.d.ts +7 -4
  356. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +42 -18
  357. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -9
  358. package/lib/implementations/tile-server/index.d.ts +5 -0
  359. package/lib/implementations/tile-server/native-histogram.d.ts +25 -0
  360. package/lib/implementations/tile-server/poll-descriptor.d.ts +39 -0
  361. package/lib/implementations/tile-server/tile-protocol.d.ts +80 -0
  362. package/lib/implementations/tile-server/transport.d.ts +62 -0
  363. package/lib/intensity/intensity-profile.d.ts +66 -0
  364. package/lib/intensity/intensity-profile.service.d.ts +108 -0
  365. package/lib/intensity-inset/intensity-inset.component.d.ts +58 -0
  366. package/lib/models/bezier.d.ts +0 -5
  367. package/lib/models/class-preset.d.ts +18 -0
  368. package/lib/models/geometry.d.ts +14 -48
  369. package/lib/models/polygon-edit.d.ts +72 -0
  370. package/lib/models/polygon-factory.d.ts +40 -0
  371. package/lib/models/region-clone.d.ts +20 -0
  372. package/lib/models/region-geojson.d.ts +17 -0
  373. package/lib/models/region.d.ts +40 -4
  374. package/lib/models/shape.d.ts +8 -0
  375. package/lib/plot-mode/contribution-host.d.ts +125 -0
  376. package/lib/plot-mode/plot-type-menu.d.ts +60 -0
  377. package/lib/plot-mode/tool-params-model.d.ts +49 -0
  378. package/lib/plot.utilities.d.ts +19 -30
  379. package/lib/processing/processing-image.d.ts +5 -2
  380. package/lib/provide-visualization.d.ts +19 -2
  381. package/lib/region-editor/classes-panel/classes-panel.component.d.ts +56 -0
  382. package/lib/region-editor/file-stem.d.ts +7 -0
  383. package/lib/region-editor/manage-classes-dialog/manage-classes-dialog.component.d.ts +45 -0
  384. package/lib/region-editor/mask-export.service.d.ts +54 -0
  385. package/lib/region-editor/mask-raster.d.ts +2 -8
  386. package/lib/region-editor/region-color-dialog/region-color-dialog.component.d.ts +29 -0
  387. package/lib/region-editor/region-editor-help/region-editor-help.component.d.ts +11 -0
  388. package/lib/region-editor/region-editor.component.d.ts +166 -199
  389. package/lib/region-editor/region-metrics.d.ts +26 -0
  390. package/lib/region-editor/region-persistence.service.d.ts +69 -0
  391. package/lib/region-editor/region-table/region-table.component.d.ts +83 -0
  392. package/lib/region-editor/save-mask-dialog/save-mask-dialog.component.d.ts +36 -0
  393. package/lib/region-editor/save-regions-dialog/save-regions-dialog.component.d.ts +37 -0
  394. package/lib/region-ops.service.d.ts +1 -7
  395. package/lib/region-overlay/region-geometry.d.ts +157 -0
  396. package/lib/region-overlay/region-hit-test.d.ts +38 -0
  397. package/lib/region-overlay/svg-region-renderer.d.ts +110 -0
  398. package/lib/render-orchestrator.d.ts +6 -2
  399. package/lib/render-session.d.ts +75 -0
  400. package/lib/routing-visualizer.service.d.ts +110 -58
  401. package/lib/spatial/density-raster.d.ts +6 -0
  402. package/lib/spatial/embedding-compute-coordinator.d.ts +123 -0
  403. package/lib/spatial/embedding-compute.d.ts +21 -2
  404. package/lib/spatial/glyphs.d.ts +16 -0
  405. package/lib/spatial/lod.d.ts +94 -0
  406. package/lib/spatial/spatial-controls.facade.d.ts +64 -0
  407. package/lib/spatial/spatial-density.d.ts +15 -5
  408. package/lib/spatial/spatial-encoding.d.ts +11 -44
  409. package/lib/spatial/spatial-expression.d.ts +40 -22
  410. package/lib/spatial/spatial-framing.d.ts +1 -0
  411. package/lib/spatial/spatial-heatmap.d.ts +2 -0
  412. package/lib/spatial/spatial-hover.d.ts +4 -16
  413. package/lib/spatial/spatial-panel-model.d.ts +135 -0
  414. package/lib/spatial/spatial-selection.d.ts +21 -26
  415. package/lib/spatial/spatial-tile-merge.d.ts +41 -0
  416. package/lib/spatial/spatial-tiles.d.ts +9 -256
  417. package/lib/spatial/stats.d.ts +38 -0
  418. package/lib/spatial/transcript-grouping.d.ts +119 -0
  419. package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +64 -0
  420. package/lib/spatial-controls/spatial-charts/chart-data-model.d.ts +153 -0
  421. package/lib/spatial-controls/spatial-charts/chart-help.d.ts +69 -0
  422. package/lib/spatial-controls/spatial-charts/plotly-chart-host.d.ts +98 -0
  423. package/lib/spatial-controls/spatial-charts/spatial-chart-window/spatial-chart-window.component.d.ts +26 -0
  424. package/lib/spatial-controls/spatial-charts/spatial-charts.component.d.ts +101 -260
  425. package/lib/spatial-controls/spatial-charts/spatial-embedding-controls/spatial-embedding-controls.component.d.ts +43 -0
  426. package/lib/spatial-controls/spatial-charts/spatial-heatmap-controls/spatial-heatmap-controls.component.d.ts +27 -0
  427. package/lib/spatial-controls/spatial-controls.component.d.ts +68 -448
  428. package/lib/spatial-controls/spatial-gene-picker.d.ts +86 -0
  429. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +102 -0
  430. package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +72 -0
  431. package/lib/spatial-controls/spatial-key/spatial-key.component.d.ts +66 -0
  432. package/lib/spatial-controls/spatial-key/spatial-key.model.d.ts +33 -0
  433. package/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.d.ts +64 -0
  434. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +117 -0
  435. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +142 -0
  436. package/lib/store/class-color.util.d.ts +35 -1
  437. package/lib/store/region-history.d.ts +66 -0
  438. package/lib/store/region-scope-cache.d.ts +63 -0
  439. package/lib/store/region-selection.d.ts +36 -0
  440. package/lib/store/region-store.service.d.ts +104 -112
  441. package/lib/store/visualizer-store.service.d.ts +22 -33
  442. package/lib/toast-outlets.d.ts +4 -3
  443. package/lib/toolbar/brush/brush-tool.service.d.ts +31 -98
  444. package/lib/toolbar/canvas-tools.d.ts +20 -0
  445. package/lib/toolbar/crop/slide-crop.d.ts +10 -4
  446. package/lib/toolbar/plot-type-selector/plot-type-selector.component.d.ts +38 -0
  447. package/lib/toolbar/region-tools/region-tool-buttons.d.ts +21 -0
  448. package/lib/toolbar/region-tools/region-tools.component.d.ts +60 -0
  449. package/lib/toolbar/segmentation/cell-segment-tool.service.d.ts +10 -14
  450. package/lib/toolbar/segmentation/cellpose-segmenter.service.d.ts +12 -2
  451. package/lib/toolbar/segmentation/onnx-sam-session.d.ts +22 -3
  452. package/lib/toolbar/segmentation/pending-calls.d.ts +31 -0
  453. package/lib/toolbar/segmentation/sam-model-registry.d.ts +9 -3
  454. package/lib/toolbar/segmentation/sam-onnx-core.d.ts +18 -5
  455. package/lib/toolbar/segmentation/sam-point-tool.service.d.ts +46 -32
  456. package/lib/toolbar/segmentation/sam-prompt.d.ts +7 -31
  457. package/lib/toolbar/segmentation/sam-session.service.d.ts +74 -0
  458. package/lib/toolbar/segmentation/sam-tool.service.d.ts +23 -30
  459. package/lib/toolbar/segmentation/segmentation-commit.d.ts +8 -0
  460. package/lib/toolbar/segmentation/segmentation-runner.d.ts +52 -0
  461. package/lib/toolbar/segmentation-tools/segmentation-tools.component.d.ts +87 -0
  462. package/lib/toolbar/stack-controls/stack-controls.component.d.ts +40 -0
  463. package/lib/toolbar/tool-kit/async-tool-status.d.ts +21 -0
  464. package/lib/toolbar/tool-kit/canvas-tool-manager.d.ts +36 -0
  465. package/lib/toolbar/tool-kit/canvas-tool.d.ts +86 -0
  466. package/lib/toolbar/tool-kit/frame-pixels.d.ts +45 -0
  467. package/lib/toolbar/tool-kit/mask-stroke-editor.d.ts +125 -0
  468. package/lib/toolbar/tool-kit/matrix-frame.d.ts +40 -0
  469. package/lib/toolbar/tool-kit/tool-overlay.d.ts +60 -0
  470. package/lib/toolbar/tool-kit/undo-gesture.d.ts +17 -0
  471. package/lib/toolbar/tool-slider/tool-slider.component.d.ts +33 -0
  472. package/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.d.ts +24 -0
  473. package/lib/toolbar/toolbar.component.d.ts +47 -83
  474. package/lib/toolbar/vertex-eraser/vertex-eraser-tool.service.d.ts +33 -40
  475. package/lib/toolbar/view-controls/view-controls.component.d.ts +54 -0
  476. package/lib/toolbar/wand/wand-region-grow.d.ts +49 -0
  477. package/lib/toolbar/wand/wand-tool.service.d.ts +39 -124
  478. package/lib/toolbar/wand/wand.service.d.ts +22 -116
  479. package/lib/toolbar/zoom-to-box/zoom-to-box-tool.service.d.ts +17 -37
  480. package/lib/util/mark-for-check.d.ts +11 -0
  481. package/lib/util/supersede.d.ts +53 -0
  482. package/lib/visualization.module.d.ts +18 -39
  483. package/lib/visualizer/floating-drag.directive.d.ts +30 -0
  484. package/lib/visualizer/region-actions.d.ts +54 -0
  485. package/lib/visualizer/region-load.d.ts +27 -0
  486. package/lib/visualizer/spatial-dataset-binder.d.ts +74 -0
  487. package/lib/visualizer/tool-modes.d.ts +49 -0
  488. package/lib/visualizer/viewer-shortcuts.d.ts +71 -0
  489. package/lib/visualizer/visualizer-context-menu.d.ts +55 -0
  490. package/lib/visualizer.component.d.ts +201 -447
  491. package/lib/workers/spatial-math-ops.d.ts +65 -0
  492. package/lib/workers/spatial-math-worker.d.ts +7 -0
  493. package/lib/workers/spatial-math.d.ts +74 -0
  494. package/package.json +12 -3
  495. package/src/lib/styles/_viz-icons-rules.scss +73 -0
  496. package/src/lib/styles/viz-icons.scss +14 -0
  497. package/esm2022/lib/implementations/napari-js/napari-axes-labels.mjs +0 -97
  498. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +0 -195
  499. package/esm2022/lib/implementations/napari-js/napari-scale-bar.mjs +0 -92
  500. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs +0 -329
  501. package/fesm2022/jax-data-science-sci-image-visualizer-onnx-sam-session-BwP-A11m.mjs.map +0 -1
  502. package/lib/implementations/napari-js/napari-axes-labels.d.ts +0 -49
  503. package/lib/implementations/napari-js/napari-navigator.d.ts +0 -72
  504. package/lib/implementations/napari-js/napari-scale-bar.d.ts +0 -35
  505. package/src/lib/assets/cell-detection.svg +0 -37
  506. package/src/lib/assets/click.svg +0 -1
  507. package/src/lib/assets/colormap-luts.json +0 -1
  508. package/src/lib/assets/edit-selection-white.svg +0 -47
  509. package/src/lib/assets/icons/colormap-earth.png +0 -0
  510. package/src/lib/assets/icons/colormap-placeholder.png +0 -0
  511. package/src/lib/assets/icons/colormap-pubu.png +0 -0
  512. package/src/lib/assets/interactive-segmentation-cursor.svg +0 -1
  513. package/src/lib/assets/picture-segmentation.svg +0 -43
  514. package/src/lib/assets/test/download-379.svg +0 -1
  515. package/src/lib/assets/test/download-98.svg +0 -1
  516. package/src/lib/assets/test/json-1.svg +0 -1
  517. package/src/lib/assets/test/load-53.svg +0 -1
  518. package/src/lib/assets/test/mask-44.svg +0 -1
  519. package/src/lib/assets/test/mask-download-44.svg +0 -15
  520. package/src/lib/assets/test/mask-save-44.svg +0 -11
  521. package/src/lib/assets/test/overlay-1.svg +0 -1
  522. package/src/lib/assets/test/overlay-4.svg +0 -1
  523. package/src/lib/assets/test/region-26.svg +0 -1
  524. package/src/lib/assets/test/save-56.svg +0 -1
  525. package/src/lib/assets/test/upload-43.svg +0 -1
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * Optional features a viewer backend may or may not support. Consumers query
3
- * `IImageViewer.capabilities` and degrade gracefully (hide a toolbar item,
3
+ * `IVisualizer.capabilities` and degrade gracefully (hide a toolbar item,
4
4
  * skip a render path) rather than calling a method that no-ops.
5
5
  *
6
6
  * The Plotly backend supports the scientific/data features; the OpenSeadragon
7
7
  * backend supports `ImageDisplay` (large zoomable image) but not the
8
- * scalar-data features. The eventual router picks a backend per plot type.
8
+ * scalar-data features. `RoutingVisualizerService` picks a backend per plot type
9
+ * and reports Plotly's capabilities, so the UI keeps offering every type.
9
10
  */
10
11
  export var ViewerFeature;
11
12
  (function (ViewerFeature) {
@@ -29,4 +30,4 @@ export function capabilitiesOf(features) {
29
30
  const set = new Set(features);
30
31
  return { has: (f) => set.has(f) };
31
32
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2FwYWJpbGl0aWVzLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFOLElBQVksYUFlWDtBQWZELFdBQVksYUFBYTtJQUN2Qix3RUFBd0U7SUFDeEUsOENBQTZCLENBQUE7SUFDN0IsMkRBQTJEO0lBQzNELHdDQUF1QixDQUFBO0lBQ3ZCLHdEQUF3RDtJQUN4RCxrREFBaUMsQ0FBQTtJQUNqQyxvRUFBb0U7SUFDcEUsZ0RBQStCLENBQUE7SUFDL0IsdUVBQXVFO0lBQ3ZFLDRDQUEyQixDQUFBO0lBQzNCLDhDQUE4QztJQUM5Qyw0Q0FBMkIsQ0FBQTtJQUMzQixrRkFBa0Y7SUFDbEYsMENBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQWZXLGFBQWEsS0FBYixhQUFhLFFBZXhCO0FBTUQsNkRBQTZEO0FBQzdELE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBaUM7SUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQWdCLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFnQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3B0aW9uYWwgZmVhdHVyZXMgYSB2aWV3ZXIgYmFja2VuZCBtYXkgb3IgbWF5IG5vdCBzdXBwb3J0LiBDb25zdW1lcnMgcXVlcnlcbiAqIGBJSW1hZ2VWaWV3ZXIuY2FwYWJpbGl0aWVzYCBhbmQgZGVncmFkZSBncmFjZWZ1bGx5IChoaWRlIGEgdG9vbGJhciBpdGVtLFxuICogc2tpcCBhIHJlbmRlciBwYXRoKSByYXRoZXIgdGhhbiBjYWxsaW5nIGEgbWV0aG9kIHRoYXQgbm8tb3BzLlxuICpcbiAqIFRoZSBQbG90bHkgYmFja2VuZCBzdXBwb3J0cyB0aGUgc2NpZW50aWZpYy9kYXRhIGZlYXR1cmVzOyB0aGUgT3BlblNlYWRyYWdvblxuICogYmFja2VuZCBzdXBwb3J0cyBgSW1hZ2VEaXNwbGF5YCAobGFyZ2Ugem9vbWFibGUgaW1hZ2UpIGJ1dCBub3QgdGhlXG4gKiBzY2FsYXItZGF0YSBmZWF0dXJlcy4gVGhlIGV2ZW50dWFsIHJvdXRlciBwaWNrcyBhIGJhY2tlbmQgcGVyIHBsb3QgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gVmlld2VyRmVhdHVyZSB7XG4gIC8qKiBEaXNwbGF5IGEgcmFzdGVyL3RpbGVkIGltYWdlIChIRUFUTUFQL1JHQiBpbWFnZSwgT1NEJ3Mgc3RyZW5ndGgpLiAqL1xuICBJbWFnZURpc3BsYXkgPSAnaW1hZ2VEaXNwbGF5JyxcbiAgLyoqIDNEIHNjZW5lIHJlbmRlcmluZyAoU1VSRkFDRSwgU0NBVFRFUjNELCBJU09TVVJGQUNFKS4gKi9cbiAgU3VyZmFjZTNEID0gJ3N1cmZhY2UzZCcsXG4gIC8qKiBMaXZlIGNvbG9ybWFwL0xVVCBhcHBsaWVkIHRvIGEgcmF3IHNjYWxhciBtYXRyaXguICovXG4gIFNjYWxhckNvbG9ybWFwID0gJ3NjYWxhckNvbG9ybWFwJyxcbiAgLyoqIFJlYWQgYmFjayB0aGUgZGlzcGxheWVkIHBpeGVsIG1hdHJpeCAoZ2V0RGlzcGxheWVkUGl4ZWxEYXRhKS4gKi9cbiAgUGl4ZWxSZWFkYmFjayA9ICdwaXhlbFJlYWRiYWNrJyxcbiAgLyoqIFNlcnZlciByZS1mZXRjaCBvZiBhIGhpZ2hlci1yZXMgY3JvcCBvbiB6b29tICh2cyBuYXRpdmUgdGlsaW5nKS4gKi9cbiAgSGlnaERlZlpvb20gPSAnaGlnaERlZlpvb20nLFxuICAvKiogUGVyLXotcGxhbmUgc2xpZGVyIG92ZXIgYW4gaW1hZ2Ugc3RhY2suICovXG4gIFN0YWNrU2xpZGVyID0gJ3N0YWNrU2xpZGVyJyxcbiAgLyoqIExpdmUgaXNvc3VyZmFjZSBpbnRlbnNpdHkgYm91bmRzIChpc29taW4vaXNvbWF4KSDigJQgc2VlIElJc29zdXJmYWNlQ29udHJvbHMuICovXG4gIElzb3N1cmZhY2UgPSAnaXNvc3VyZmFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyQ2FwYWJpbGl0aWVzIHtcbiAgaGFzKGZlYXR1cmU6IFZpZXdlckZlYXR1cmUpOiBib29sZWFuO1xufVxuXG4vKiogQnVpbGQgYSBgVmlld2VyQ2FwYWJpbGl0aWVzYCBmcm9tIGEgZml4ZWQgZmVhdHVyZSBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYWJpbGl0aWVzT2YoZmVhdHVyZXM6IEl0ZXJhYmxlPFZpZXdlckZlYXR1cmU+KTogVmlld2VyQ2FwYWJpbGl0aWVzIHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldDxWaWV3ZXJGZWF0dXJlPihmZWF0dXJlcyk7XG4gIHJldHVybiB7IGhhczogKGY6IFZpZXdlckZlYXR1cmUpID0+IHNldC5oYXMoZikgfTtcbn1cbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2FwYWJpbGl0aWVzLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBZVg7QUFmRCxXQUFZLGFBQWE7SUFDdkIsd0VBQXdFO0lBQ3hFLDhDQUE2QixDQUFBO0lBQzdCLDJEQUEyRDtJQUMzRCx3Q0FBdUIsQ0FBQTtJQUN2Qix3REFBd0Q7SUFDeEQsa0RBQWlDLENBQUE7SUFDakMsb0VBQW9FO0lBQ3BFLGdEQUErQixDQUFBO0lBQy9CLHVFQUF1RTtJQUN2RSw0Q0FBMkIsQ0FBQTtJQUMzQiw4Q0FBOEM7SUFDOUMsNENBQTJCLENBQUE7SUFDM0Isa0ZBQWtGO0lBQ2xGLDBDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFmVyxhQUFhLEtBQWIsYUFBYSxRQWV4QjtBQU9ELDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQWlDO0lBQzlELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFnQixRQUFRLENBQUMsQ0FBQztJQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBZ0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wdGlvbmFsIGZlYXR1cmVzIGEgdmlld2VyIGJhY2tlbmQgbWF5IG9yIG1heSBub3Qgc3VwcG9ydC4gQ29uc3VtZXJzIHF1ZXJ5XG4gKiBgSVZpc3VhbGl6ZXIuY2FwYWJpbGl0aWVzYCBhbmQgZGVncmFkZSBncmFjZWZ1bGx5IChoaWRlIGEgdG9vbGJhciBpdGVtLFxuICogc2tpcCBhIHJlbmRlciBwYXRoKSByYXRoZXIgdGhhbiBjYWxsaW5nIGEgbWV0aG9kIHRoYXQgbm8tb3BzLlxuICpcbiAqIFRoZSBQbG90bHkgYmFja2VuZCBzdXBwb3J0cyB0aGUgc2NpZW50aWZpYy9kYXRhIGZlYXR1cmVzOyB0aGUgT3BlblNlYWRyYWdvblxuICogYmFja2VuZCBzdXBwb3J0cyBgSW1hZ2VEaXNwbGF5YCAobGFyZ2Ugem9vbWFibGUgaW1hZ2UpIGJ1dCBub3QgdGhlXG4gKiBzY2FsYXItZGF0YSBmZWF0dXJlcy4gYFJvdXRpbmdWaXN1YWxpemVyU2VydmljZWAgcGlja3MgYSBiYWNrZW5kIHBlciBwbG90IHR5cGVcbiAqIGFuZCByZXBvcnRzIFBsb3RseSdzIGNhcGFiaWxpdGllcywgc28gdGhlIFVJIGtlZXBzIG9mZmVyaW5nIGV2ZXJ5IHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIFZpZXdlckZlYXR1cmUge1xuICAvKiogRGlzcGxheSBhIHJhc3Rlci90aWxlZCBpbWFnZSAoSEVBVE1BUC9SR0IgaW1hZ2UsIE9TRCdzIHN0cmVuZ3RoKS4gKi9cbiAgSW1hZ2VEaXNwbGF5ID0gJ2ltYWdlRGlzcGxheScsXG4gIC8qKiAzRCBzY2VuZSByZW5kZXJpbmcgKFNVUkZBQ0UsIFNDQVRURVIzRCwgSVNPU1VSRkFDRSkuICovXG4gIFN1cmZhY2UzRCA9ICdzdXJmYWNlM2QnLFxuICAvKiogTGl2ZSBjb2xvcm1hcC9MVVQgYXBwbGllZCB0byBhIHJhdyBzY2FsYXIgbWF0cml4LiAqL1xuICBTY2FsYXJDb2xvcm1hcCA9ICdzY2FsYXJDb2xvcm1hcCcsXG4gIC8qKiBSZWFkIGJhY2sgdGhlIGRpc3BsYXllZCBwaXhlbCBtYXRyaXggKGdldERpc3BsYXllZFBpeGVsRGF0YSkuICovXG4gIFBpeGVsUmVhZGJhY2sgPSAncGl4ZWxSZWFkYmFjaycsXG4gIC8qKiBTZXJ2ZXIgcmUtZmV0Y2ggb2YgYSBoaWdoZXItcmVzIGNyb3Agb24gem9vbSAodnMgbmF0aXZlIHRpbGluZykuICovXG4gIEhpZ2hEZWZab29tID0gJ2hpZ2hEZWZab29tJyxcbiAgLyoqIFBlci16LXBsYW5lIHNsaWRlciBvdmVyIGFuIGltYWdlIHN0YWNrLiAqL1xuICBTdGFja1NsaWRlciA9ICdzdGFja1NsaWRlcicsXG4gIC8qKiBMaXZlIGlzb3N1cmZhY2UgaW50ZW5zaXR5IGJvdW5kcyAoaXNvbWluL2lzb21heCkg4oCUIHNlZSBJSXNvc3VyZmFjZUNvbnRyb2xzLiAqL1xuICBJc29zdXJmYWNlID0gJ2lzb3N1cmZhY2UnLFxufVxuXG4vKiogVGhlIGZlYXR1cmUgc2V0IGEgYmFja2VuZCBhZHZlcnRpc2VzIChzZWUge0BsaW5rIFZpZXdlckZlYXR1cmV9KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyQ2FwYWJpbGl0aWVzIHtcbiAgaGFzKGZlYXR1cmU6IFZpZXdlckZlYXR1cmUpOiBib29sZWFuO1xufVxuXG4vKiogQnVpbGQgYSBgVmlld2VyQ2FwYWJpbGl0aWVzYCBmcm9tIGEgZml4ZWQgZmVhdHVyZSBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYWJpbGl0aWVzT2YoZmVhdHVyZXM6IEl0ZXJhYmxlPFZpZXdlckZlYXR1cmU+KTogVmlld2VyQ2FwYWJpbGl0aWVzIHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldDxWaWV3ZXJGZWF0dXJlPihmZWF0dXJlcyk7XG4gIHJldHVybiB7IGhhczogKGY6IFZpZXdlckZlYXR1cmUpID0+IHNldC5oYXMoZikgfTtcbn1cbiJdfQ==
@@ -9,4 +9,4 @@ export const CELL_SEGMENTER = new InjectionToken('CELL_SEGMENTER', {
9
9
  providedIn: 'root',
10
10
  factory: () => inject(CellposeSegmenterService),
11
11
  });
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWdtZW50ZXIuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQXFDOUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsZ0JBQWdCLEVBQUU7SUFDakYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztDQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENlbGxwb3NlU2VnbWVudGVyU2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL2NlbGxwb3NlLXNlZ21lbnRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZXN1bHQgb2YgYW4gYXV0b21hdGljIGNlbGwgc2VnbWVudGVyOiBhIHBlci1waXhlbCBpbnN0YW5jZSBsYWJlbCBtYXAgZm9yIHRoZVxuICogaW5wdXQgaW1hZ2UgKDAgPSBiYWNrZ3JvdW5kLCAxLi5jb3VudCA9IGluc3RhbmNlcyksIHJvdy1tYWpvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsU2VnbWVudGF0aW9uIHtcbiAgbGFiZWxzOiBVaW50MzJBcnJheTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUG9ydCBmb3IgYW4gYXV0b21hdGljIChwcm9tcHQtZnJlZSkgY2VsbCBzZWdtZW50ZXIg4oCUIGUuZy4gY2VsbHBvc2UtU0FNLiBUaGVcbiAqIGxpYnJhcnkgY2FsbHMgdGhpcyBvbiBhIGNsaWVudCBzbGlkZS1jcm9wIG9mIGEgZHJhd24gYm94LiBCeSBkZWZhdWx0IHRoZVxuICoge0BsaW5rIENFTExfU0VHTUVOVEVSfSB0b2tlbiByZXNvbHZlcyB0byB0aGUgbGlicmFyeSdzIG93biBjZWxscG9zZS1qcy1iYWNrZWRcbiAqIHtAbGluayBDZWxscG9zZVNlZ21lbnRlclNlcnZpY2V9IChzbyB0aGUgdG9vbGJhciBDZWxscG9zZSB0b29sIHdvcmtzIG91dCBvZiB0aGVcbiAqIGJveCksIGJ1dCBhIGhvc3QgY2FuIG92ZXJyaWRlIHRoZSB0b2tlbiB0byBzdXBwbHkgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25cbiAqIChlLmcuIGEgc2VydmVyLXNpZGUgc2VnbWVudGVyKSAoaml0LXVpIzkwKS5cbiAqL1xuLyoqIFByb2dyZXNzL3N0YXR1cyBjYWxsYmFja3MgZm9yIGEgc2VnbWVudGF0aW9uIHJ1biAoYWxsIG9wdGlvbmFsKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlZ21lbnRQcm9ncmVzcyB7XG4gIC8qKiBNb2RlbC1kb3dubG9hZCBwcm9ncmVzcywgMC4uMSAoZmlyc3QgcnVuIG9ubHkpLiAqL1xuICBvblByb2dyZXNzPzogKGZyYWN0aW9uOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBwaGFzZSwgZS5nLiAnUnVubmluZyBpbmZlcmVuY2UgKHRpbGUgMy84KeKApicuICovXG4gIG9uU3RhdHVzPzogKHN0YXR1czogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDZWxsU2VnbWVudGVyIHtcbiAgLyoqIFNlZ21lbnQgYWxsIGNlbGxzIGluIGFuIFJHQkEgaW1hZ2UgaW50byBhbiBpbnN0YW5jZSBsYWJlbCBtYXAuICovXG4gIHNlZ21lbnRDZWxscyhcbiAgICBpbWFnZTogeyBkYXRhOiBVaW50OENsYW1wZWRBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICBwcm9ncmVzcz86IENlbGxTZWdtZW50UHJvZ3Jlc3MsXG4gICk6IFByb21pc2U8Q2VsbFNlZ21lbnRhdGlvbj47XG59XG5cbi8qKlxuICogREkgdG9rZW4gZm9yIHRoZSBhdXRvbWF0aWMgY2VsbCBzZWdtZW50ZXIuIERlZmF1bHRzIHRvIHRoZSBpbi1saWJyYXJ5XG4gKiB7QGxpbmsgQ2VsbHBvc2VTZWdtZW50ZXJTZXJ2aWNlfSAoY2VsbHBvc2UtanMsIGxhenktbG9hZGVkKTsgb3ZlcnJpZGUgaXQgaW4gdGhlXG4gKiBob3N0IHRvIHN3YXAgaW1wbGVtZW50YXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgQ0VMTF9TRUdNRU5URVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUNlbGxTZWdtZW50ZXI+KCdDRUxMX1NFR01FTlRFUicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBpbmplY3QoQ2VsbHBvc2VTZWdtZW50ZXJTZXJ2aWNlKSxcbn0pO1xuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zZWdtZW50ZXIuY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jZWxsLXNlZ21lbnRlci5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQXNDOUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsZ0JBQWdCLEVBQUU7SUFDakYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztDQUNoRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENlbGxwb3NlU2VnbWVudGVyU2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL2NlbGxwb3NlLXNlZ21lbnRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZXN1bHQgb2YgYW4gYXV0b21hdGljIGNlbGwgc2VnbWVudGVyOiBhIHBlci1waXhlbCBpbnN0YW5jZSBsYWJlbCBtYXAgZm9yIHRoZVxuICogaW5wdXQgaW1hZ2UgKDAgPSBiYWNrZ3JvdW5kLCAxLi5jb3VudCA9IGluc3RhbmNlcyksIHJvdy1tYWpvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsU2VnbWVudGF0aW9uIHtcbiAgbGFiZWxzOiBVaW50MzJBcnJheTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUG9ydCBmb3IgYW4gYXV0b21hdGljIChwcm9tcHQtZnJlZSkgY2VsbCBzZWdtZW50ZXIg4oCUIGUuZy4gY2VsbHBvc2UtU0FNLiBUaGVcbiAqIGxpYnJhcnkgY2FsbHMgdGhpcyBvbiBhIGNsaWVudCBzbGlkZS1jcm9wIG9mIGEgZHJhd24gYm94LiBCeSBkZWZhdWx0IHRoZVxuICoge0BsaW5rIENFTExfU0VHTUVOVEVSfSB0b2tlbiByZXNvbHZlcyB0byB0aGUgbGlicmFyeSdzIG93biBjZWxscG9zZS1qcy1iYWNrZWRcbiAqIHtAbGluayBDZWxscG9zZVNlZ21lbnRlclNlcnZpY2V9IChzbyB0aGUgdG9vbGJhciBDZWxscG9zZSB0b29sIHdvcmtzIG91dCBvZiB0aGVcbiAqIGJveCksIGJ1dCBhIGhvc3QgY2FuIG92ZXJyaWRlIHRoZSB0b2tlbiB0byBzdXBwbHkgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25cbiAqIChlLmcuIGEgc2VydmVyLXNpZGUgc2VnbWVudGVyKSAoaml0LXVpIzkwKS5cbiAqL1xuLyoqIFByb2dyZXNzL3N0YXR1cyBjYWxsYmFja3MgZm9yIGEgc2VnbWVudGF0aW9uIHJ1biAoYWxsIG9wdGlvbmFsKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFNlZ21lbnRQcm9ncmVzcyB7XG4gIC8qKiBNb2RlbC1kb3dubG9hZCBwcm9ncmVzcywgMC4uMSAoZmlyc3QgcnVuIG9ubHkpLiAqL1xuICBvblByb2dyZXNzPzogKGZyYWN0aW9uOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBwaGFzZSwgZS5nLiAnUnVubmluZyBpbmZlcmVuY2UgKHRpbGUgMy84KeKApicuICovXG4gIG9uU3RhdHVzPzogKHN0YXR1czogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vKiogQSBzZWdtZW50ZXIgdGhhdCBsYWJlbHMgZXZlcnkgY2VsbCBvZiBhbiBpbWFnZSAob25lIGV4Y2x1c2l2ZSBsYWJlbCBwZXIgcGl4ZWwpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbFNlZ21lbnRlciB7XG4gIC8qKiBTZWdtZW50IGFsbCBjZWxscyBpbiBhbiBSR0JBIGltYWdlIGludG8gYW4gaW5zdGFuY2UgbGFiZWwgbWFwLiAqL1xuICBzZWdtZW50Q2VsbHMoXG4gICAgaW1hZ2U6IHsgZGF0YTogVWludDhDbGFtcGVkQXJyYXk7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sXG4gICAgcHJvZ3Jlc3M/OiBDZWxsU2VnbWVudFByb2dyZXNzLFxuICApOiBQcm9taXNlPENlbGxTZWdtZW50YXRpb24+O1xufVxuXG4vKipcbiAqIERJIHRva2VuIGZvciB0aGUgYXV0b21hdGljIGNlbGwgc2VnbWVudGVyLiBEZWZhdWx0cyB0byB0aGUgaW4tbGlicmFyeVxuICoge0BsaW5rIENlbGxwb3NlU2VnbWVudGVyU2VydmljZX0gKGNlbGxwb3NlLWpzLCBsYXp5LWxvYWRlZCk7IG92ZXJyaWRlIGl0IGluIHRoZVxuICogaG9zdCB0byBzd2FwIGltcGxlbWVudGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IENFTExfU0VHTUVOVEVSID0gbmV3IEluamVjdGlvblRva2VuPElDZWxsU2VnbWVudGVyPignQ0VMTF9TRUdNRU5URVInLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gaW5qZWN0KENlbGxwb3NlU2VnbWVudGVyU2VydmljZSksXG59KTtcbiJdfQ==
@@ -10,5 +10,9 @@ export const LUT_COLORS = [
10
10
  { name: 'Magenta', color: '#ff00ff' },
11
11
  { name: 'Yellow', color: '#ffff00' },
12
12
  ];
13
+ /**
14
+ * DI token for the Channels & Histogram pane's API. The library binds it to its router
15
+ * (VisualizationModule / provideVisualization); hosts inject it, they do not provide it.
16
+ */
13
17
  export const CHANNEL_HISTOGRAM_API = new InjectionToken('CHANNEL_HISTOGRAM_API');
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQi9DO29DQUNvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQW1EO0lBQ3hFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQ3JDLENBQUM7QUFzRkYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IENvbG9ybWFwTm9kZSB9IGZyb20gJy4vZGlzcGxheS10eXBlcyc7XG5cbi8qKlxuICogRGlzcGxheSBzdGF0ZSBmb3Igb25lIGltYWdlIGNoYW5uZWwgaW4gdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUuXG4gKiBgbWluYC9gbWF4YCBhcmUgdGhlIGRpc3BsYXkgd2luZG93IChjb250cmFzdC9icmlnaHRuZXNzKSBpbiByYXcgMC4uMjU1IHNwYWNlO1xuICogYGdhbW1hYCBzaGFwZXMgdGhlIHRyYW5zZmVyIGN1cnZlOyBgY29sb3JgIGlzIHRoZSBjaGFubmVsJ3MgZGlzcGxheSB0aW50XG4gKiAodXNlZCB3aGVuIGNvbXBvc2l0aW5nIG11bHRpcGxlIGNoYW5uZWxzKTsgYHZpc2libGVgIHRvZ2dsZXMgaXQgb24vb2ZmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDaGFubmVsU3RhdGUge1xuICBpbmRleDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IHRpbnQgYXMgYCNycmdnYmJgLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIGdhbW1hOiBudW1iZXI7XG4gIHZpc2libGU6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgc3RhbmRhcmQgTFVUIHBzZXVkby1jb2xvdXJzIChtaXJyb3JzIEZpamkncyBNZXJnZSBDaGFubmVscyBwYWxldHRlKSBmb3JcbiAqICBxdWljayBwZXItY2hhbm5lbCBhc3NpZ25tZW50LiAqL1xuZXhwb3J0IGNvbnN0IExVVF9DT0xPUlM6IFJlYWRvbmx5QXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbG9yOiBzdHJpbmcgfT4gPSBbXG4gIHsgbmFtZTogJ1JlZCcsIGNvbG9yOiAnI2ZmMDAwMCcgfSxcbiAgeyBuYW1lOiAnR3JlZW4nLCBjb2xvcjogJyMwMGZmMDAnIH0sXG4gIHsgbmFtZTogJ0JsdWUnLCBjb2xvcjogJyMwMDAwZmYnIH0sXG4gIHsgbmFtZTogJ0dyYXknLCBjb2xvcjogJyNmZmZmZmYnIH0sXG4gIHsgbmFtZTogJ0N5YW4nLCBjb2xvcjogJyMwMGZmZmYnIH0sXG4gIHsgbmFtZTogJ01hZ2VudGEnLCBjb2xvcjogJyNmZjAwZmYnIH0sXG4gIHsgbmFtZTogJ1llbGxvdycsIGNvbG9yOiAnI2ZmZmYwMCcgfSxcbl07XG5cbi8qKiBBIGJpbm5lZCBpbnRlbnNpdHkgaGlzdG9ncmFtIGZvciBvbmUgY2hhbm5lbC5cbiAqXG4gKiBUaGUgOC1iaXQgY2xpZW50IHBhdGggKFJHQiAvIDgtYml0IGdyYXlzY2FsZSwgc2FtcGxlZCBmcm9tIGRpc3BsYXllZCB0aWxlcylcbiAqIGxlYXZlcyB0aGUgbmF0aXZlIGZpZWxkcyB1bmRlZmluZWQgYW5kIGBiaW5zYCBzcGFuIDAuLjI1NS4gVGhlIG5hdGl2ZSBwYXRoXG4gKiAoPjgtYml0IGltYWdlcywgZnJvbSB0aGUgc2VydmVyIGAvaGlzdG9ncmFtYCBlbmRwb2ludCkgZmlsbHMgYGJpdERlcHRoYCxcbiAqIGByYW5nZU1pbmAvYHJhbmdlTWF4YCAodGhlIHBpeGVsLXR5cGUgc3BhbiB0aGUgYmlucyBjb3ZlcikgYW5kXG4gKiBgb2JzZXJ2ZWRNaW5gL2BvYnNlcnZlZE1heGAgKHRoZSBhY3R1YWwgZXh0cmVtZXMgc2VlbiksIHNvIHRoZSBkaWFsb2cgY2FuXG4gKiBsYWJlbCB0aGUgd2luZG93L2F4aXMgaW4gbmF0aXZlIHVuaXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSGlzdG9ncmFtIHtcbiAgLyoqIExlZnQgZWRnZSBvZiBlYWNoIGJpbiAoMC4uMjU1IGZvciB0aGUgOC1iaXQgcGF0aCwgbmF0aXZlIHVuaXRzIG90aGVyd2lzZSkuICovXG4gIGJpbnM6IG51bWJlcltdO1xuICAvKiogUGl4ZWwgY291bnQgcGVyIGJpbiwgbGVuZ3RoID0gYmluIGNvdW50LiAqL1xuICBjb3VudHM6IG51bWJlcltdO1xuICAvKiogTGFyZ2VzdCBiaW4gY291bnQsIGZvciB5LWF4aXMgc2NhbGluZy4gKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOYXRpdmUgYml0IGRlcHRoICg4LCAxNiwg4oCmKSDigJQgcHJlc2VudCBvbmx5IG9uIHRoZSBuYXRpdmUgc2VydmVyIHBhdGguICovXG4gIGJpdERlcHRoPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSByYW5nZSB0aGUgYmlucyBzcGFuIChlLmcuIDAuLjY1NTM1KSwgbmF0aXZlIHBhdGggb25seS4gKi9cbiAgcmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJhbmdlTWF4PzogbnVtYmVyO1xuICAvKiogQWN0dWFsIG1pbi9tYXggcGl4ZWwgb2JzZXJ2ZWQgKGF1dG8tY29udHJhc3Qgc2VlZCksIG5hdGl2ZSBwYXRoIG9ubHkuICovXG4gIG9ic2VydmVkTWluPzogbnVtYmVyO1xuICBvYnNlcnZlZE1heD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQdWJsaWMsIGltcGxlbWVudGF0aW9uLWFnbm9zdGljIHN1cmZhY2UgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUgKGFuXG4gKiBleHRlcm5hbCBjb25zdW1lciBvZiB0aGUgdmlzdWFsaXphdGlvbiBwYWNrYWdlKSBkZXBlbmRzIG9uLiBJdCBleHBvc2VzIHRoZVxuICogcGVyLWNoYW5uZWwgZGlzcGxheSB3aW5kb3cvZ2FtbWEvdmlzaWJpbGl0eSwgYW4gaW50ZW5zaXR5IGhpc3RvZ3JhbSBjb21wdXRlZFxuICogZnJvbSB0aGUgY3VycmVudGx5LWRpc3BsYXllZCBwaXhlbHMsIGFuZCB0aGUgTFVUL2NvbG9ybWFwIGNvbnRyb2xzIHRoYXQgdXNlZFxuICogdG8gbGl2ZSBpbiB0aGUgdG9vbGJhci4gVGhlIHBhbmUgaW5qZWN0cyB0aGlzIHZpYSB7QGxpbmsgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJfVxuICogKGJvdW5kIHRvIHRoZSBjb25jcmV0ZSBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCB3aXRoIGB1c2VFeGlzdGluZ2ApIHNvIGl0XG4gKiBuZXZlciByZWFjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbi4gRXZlcnkgc2V0dGVyIGxpdmUtdXBkYXRlcyB3aGljaGV2ZXIgYmFja2VuZFxuICogKFBsb3RseSBvciBPcGVuU2VhZHJhZ29uKSBpcyBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5uZWxIaXN0b2dyYW1BcGkge1xuICAvLyDilIDilIAgY2hhbm5lbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBUaGUgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgaW1hZ2UgKDEgZm9yIGdyYXlzY2FsZSwgMyBmb3IgUkdCKS4gKi9cbiAgZ2V0Q2hhbm5lbHMkKCk6IE9ic2VydmFibGU8SUNoYW5uZWxTdGF0ZVtdPjtcbiAgLyoqIFBhdGNoIG9uZSBjaGFubmVsJ3Mgc3RhdGUgKHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5L2NvbG9yKTsgbGl2ZS11cGRhdGVzLiAqL1xuICBzZXRDaGFubmVsU3RhdGUoaW5kZXg6IG51bWJlciwgcGFydGlhbDogUGFydGlhbDxJQ2hhbm5lbFN0YXRlPik6IHZvaWQ7XG4gIC8qKiBTZXQgdGhlIGNoYW5uZWwgc2VsZWN0ZWQgaW4gdGhlIHBhbmUg4oCUIHRoZSBiYW5kIGEgc2luZ2xlLXNjYWxhciAzRCBTdXJmYWNlIGZvbGxvd3MuICovXG4gIHNldFNlbGVjdGVkQ2hhbm5lbChpbmRleDogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEF1dG8td2luZG93IHRoZSBnaXZlbiBjaGFubmVscyBieSBzYXR1cmF0aW5nIGBzYXR1cmF0aW9uYCAoMC4uMSkgb2YgcGl4ZWxzXG4gICAqICBhdCBlYWNoIGVuZCBvZiB0aGVpciBoaXN0b2dyYW0uICovXG4gIGF1dG9Db250cmFzdChpbmRpY2VzOiBudW1iZXJbXSwgc2F0dXJhdGlvbjogbnVtYmVyKTogdm9pZDtcbiAgLyoqIFJlc2V0IHRoZSBnaXZlbiBjaGFubmVscyB0byB0aGVpciBkZXJpdmVkIGRlZmF1bHRzOiBmdWxsIGRpc3BsYXkgcmFuZ2VcbiAgICogICgwLi4yNTUpLCBnYW1tYSAxLCBhbmQgdGhlIGNoYW5uZWwncyBkZWZhdWx0IHRpbnQgY29sb3VyLiAqL1xuICByZXNldENvbnRyYXN0KGluZGljZXM6IG51bWJlcltdKTogdm9pZDtcblxuICAvLyDilIDilIAgaGlzdG9ncmFtIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogQmlubmVkIGhpc3RvZ3JhbSBmb3IgYSBjaGFubmVsIGZyb20gdGhlIGRpc3BsYXllZCBwaXhlbHMsIG9yIG51bGwgd2hlbiBub1xuICAgKiAgaW1hZ2UvcGl4ZWxzIGFyZSBhdmFpbGFibGUuIFN5bmNocm9ub3VzIDgtYml0IHBhdGggKHVzZWQgYnkgYXV0by1jb250cmFzdCkuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBIaXN0b2dyYW0gZm9yIGEgY2hhbm5lbCBhcyBhbiBhc3luYyBzdHJlYW06IGVtaXRzIHRoZSAqKm5hdGl2ZSoqIGJpdC1kZXB0aFxuICAgKiAgaGlzdG9ncmFtIChmcm9tIHRoZSBzZXJ2ZXIpIGZvciA+OC1iaXQgaW1hZ2VzLCBlbHNlIHRoZSA4LWJpdCBjbGllbnRcbiAgICogIGhpc3RvZ3JhbS4gVGhlIGRpYWxvZyB1c2VzIHRoaXMgc28gMTYtYml0IHN0YWNrcyBnZXQgYSB0cnVlIGRpc3RyaWJ1dGlvbi4gKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD47XG5cbiAgLy8g4pSA4pSAIGRpc3BsYXkgb3B0aW9ucyAobW92ZWQgb3V0IG9mIHRoZSB0b29sYmFyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0Q29sb3JtYXAoKTogT2JzZXJ2YWJsZTxDb2xvcm1hcE5vZGUgfCBudWxsPjtcbiAgc2V0Q29sb3JtYXAoY29sb3JtYXA6IENvbG9ybWFwTm9kZSk6IHZvaWQ7XG4gIGdldENvbG9ybWFwT3B0aW9ucygpOiBDb2xvcm1hcE5vZGVbXTtcbiAgZ2V0UmV2ZXJzZVNjYWxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldFJldmVyc2VTY2FsZShyZXZlcnNlOiBib29sZWFuKTogdm9pZDtcbiAgZ2V0R3JheXNjYWxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRHcmF5c2NhbGUob246IGJvb2xlYW4pOiB2b2lkO1xuICBnZXRJbnZlcnQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldEludmVydChvbjogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGltYWdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRJbWFnZU1ldGEoKTogT2JzZXJ2YWJsZTxJSW1hZ2VNZXRhZGF0YVtdPjtcblxuICAvKiogRXhwb3J0IHRoZSBkaXNwbGF5ZWQgaW1hZ2Ug4oCUIGNvbXBvc2l0ZWQgd2l0aCB0aGUgY3VycmVudCBwZXItY2hhbm5lbFxuICAgKiAgcHNldWRvLWNvbG91cnMgLyB3aW5kb3cgLyBjb2xvcm1hcCDigJQgYXMgYSBwdWJsaWNhdGlvbi1yZWFkeSBQTkcgZG93bmxvYWQuICovXG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkO1xuXG4gIC8qKiBFeHBvcnQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YSDigJQgYWxsIChvciB0aGUgdmlzaWJsZSkgY2hhbm5lbHMgYXQgbmF0aXZlXG4gICAqICBiaXQgZGVwdGgg4oCUIGFzIGEgZGF0YS1wcmVzZXJ2aW5nIG11bHRpLWJhbmQgVElGRiBkb3dubG9hZC4gU2VydmVyLXNpZGUsIHNvXG4gICAqICBpdCBrZWVwcyB0cnVlIDE2LWJpdCB2YWx1ZXMgKHRoZSBQTkcgY29tcG9zaXRlIGlzIGFuIDgtYml0IGZpZ3VyZSkuIE9ubHlcbiAgICogIG1lYW5pbmdmdWwgZm9yID44LWJpdCBpbWFnZXM7IGEgbm8tb3Agb24gYmFja2VuZHMgdGhhdCBjYW4ndCBwcm92aWRlIGl0LiAqL1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBDSEFOTkVMX0hJU1RPR1JBTV9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUNoYW5uZWxIaXN0b2dyYW1BcGk+KCdDSEFOTkVMX0hJU1RPR1JBTV9BUEknKTtcbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY2hhbm5lbC1oaXN0b2dyYW0tYXBpLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQi9DO29DQUNvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQW1EO0lBQ3hFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ25DLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ2xDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQ3JDLENBQUM7QUFzRkY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQXVCLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUltYWdlTWV0YWRhdGEgfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB7IENvbG9ybWFwTm9kZSB9IGZyb20gJy4vZGlzcGxheS10eXBlcyc7XG5cbi8qKlxuICogRGlzcGxheSBzdGF0ZSBmb3Igb25lIGltYWdlIGNoYW5uZWwgaW4gdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUuXG4gKiBgbWluYC9gbWF4YCBhcmUgdGhlIGRpc3BsYXkgd2luZG93IChjb250cmFzdC9icmlnaHRuZXNzKSBpbiByYXcgMC4uMjU1IHNwYWNlO1xuICogYGdhbW1hYCBzaGFwZXMgdGhlIHRyYW5zZmVyIGN1cnZlOyBgY29sb3JgIGlzIHRoZSBjaGFubmVsJ3MgZGlzcGxheSB0aW50XG4gKiAodXNlZCB3aGVuIGNvbXBvc2l0aW5nIG11bHRpcGxlIGNoYW5uZWxzKTsgYHZpc2libGVgIHRvZ2dsZXMgaXQgb24vb2ZmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDaGFubmVsU3RhdGUge1xuICBpbmRleDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IHRpbnQgYXMgYCNycmdnYmJgLiAqL1xuICBjb2xvcjogc3RyaW5nO1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIGdhbW1hOiBudW1iZXI7XG4gIHZpc2libGU6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgc3RhbmRhcmQgTFVUIHBzZXVkby1jb2xvdXJzIChtaXJyb3JzIEZpamkncyBNZXJnZSBDaGFubmVscyBwYWxldHRlKSBmb3JcbiAqICBxdWljayBwZXItY2hhbm5lbCBhc3NpZ25tZW50LiAqL1xuZXhwb3J0IGNvbnN0IExVVF9DT0xPUlM6IFJlYWRvbmx5QXJyYXk8eyBuYW1lOiBzdHJpbmc7IGNvbG9yOiBzdHJpbmcgfT4gPSBbXG4gIHsgbmFtZTogJ1JlZCcsIGNvbG9yOiAnI2ZmMDAwMCcgfSxcbiAgeyBuYW1lOiAnR3JlZW4nLCBjb2xvcjogJyMwMGZmMDAnIH0sXG4gIHsgbmFtZTogJ0JsdWUnLCBjb2xvcjogJyMwMDAwZmYnIH0sXG4gIHsgbmFtZTogJ0dyYXknLCBjb2xvcjogJyNmZmZmZmYnIH0sXG4gIHsgbmFtZTogJ0N5YW4nLCBjb2xvcjogJyMwMGZmZmYnIH0sXG4gIHsgbmFtZTogJ01hZ2VudGEnLCBjb2xvcjogJyNmZjAwZmYnIH0sXG4gIHsgbmFtZTogJ1llbGxvdycsIGNvbG9yOiAnI2ZmZmYwMCcgfSxcbl07XG5cbi8qKiBBIGJpbm5lZCBpbnRlbnNpdHkgaGlzdG9ncmFtIGZvciBvbmUgY2hhbm5lbC5cbiAqXG4gKiBUaGUgOC1iaXQgY2xpZW50IHBhdGggKFJHQiAvIDgtYml0IGdyYXlzY2FsZSwgc2FtcGxlZCBmcm9tIGRpc3BsYXllZCB0aWxlcylcbiAqIGxlYXZlcyB0aGUgbmF0aXZlIGZpZWxkcyB1bmRlZmluZWQgYW5kIGBiaW5zYCBzcGFuIDAuLjI1NS4gVGhlIG5hdGl2ZSBwYXRoXG4gKiAoPjgtYml0IGltYWdlcywgZnJvbSB0aGUgc2VydmVyIGAvaGlzdG9ncmFtYCBlbmRwb2ludCkgZmlsbHMgYGJpdERlcHRoYCxcbiAqIGByYW5nZU1pbmAvYHJhbmdlTWF4YCAodGhlIHBpeGVsLXR5cGUgc3BhbiB0aGUgYmlucyBjb3ZlcikgYW5kXG4gKiBgb2JzZXJ2ZWRNaW5gL2BvYnNlcnZlZE1heGAgKHRoZSBhY3R1YWwgZXh0cmVtZXMgc2VlbiksIHNvIHRoZSBkaWFsb2cgY2FuXG4gKiBsYWJlbCB0aGUgd2luZG93L2F4aXMgaW4gbmF0aXZlIHVuaXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSGlzdG9ncmFtIHtcbiAgLyoqIExlZnQgZWRnZSBvZiBlYWNoIGJpbiAoMC4uMjU1IGZvciB0aGUgOC1iaXQgcGF0aCwgbmF0aXZlIHVuaXRzIG90aGVyd2lzZSkuICovXG4gIGJpbnM6IG51bWJlcltdO1xuICAvKiogUGl4ZWwgY291bnQgcGVyIGJpbiwgbGVuZ3RoID0gYmluIGNvdW50LiAqL1xuICBjb3VudHM6IG51bWJlcltdO1xuICAvKiogTGFyZ2VzdCBiaW4gY291bnQsIGZvciB5LWF4aXMgc2NhbGluZy4gKi9cbiAgbWF4OiBudW1iZXI7XG4gIC8qKiBOYXRpdmUgYml0IGRlcHRoICg4LCAxNiwg4oCmKSDigJQgcHJlc2VudCBvbmx5IG9uIHRoZSBuYXRpdmUgc2VydmVyIHBhdGguICovXG4gIGJpdERlcHRoPzogbnVtYmVyO1xuICAvKiogUGl4ZWwtdHlwZSByYW5nZSB0aGUgYmlucyBzcGFuIChlLmcuIDAuLjY1NTM1KSwgbmF0aXZlIHBhdGggb25seS4gKi9cbiAgcmFuZ2VNaW4/OiBudW1iZXI7XG4gIHJhbmdlTWF4PzogbnVtYmVyO1xuICAvKiogQWN0dWFsIG1pbi9tYXggcGl4ZWwgb2JzZXJ2ZWQgKGF1dG8tY29udHJhc3Qgc2VlZCksIG5hdGl2ZSBwYXRoIG9ubHkuICovXG4gIG9ic2VydmVkTWluPzogbnVtYmVyO1xuICBvYnNlcnZlZE1heD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQdWJsaWMsIGltcGxlbWVudGF0aW9uLWFnbm9zdGljIHN1cmZhY2UgdGhlIENoYW5uZWxzICYgSGlzdG9ncmFtIHBhbmUgKGFuXG4gKiBleHRlcm5hbCBjb25zdW1lciBvZiB0aGUgdmlzdWFsaXphdGlvbiBwYWNrYWdlKSBkZXBlbmRzIG9uLiBJdCBleHBvc2VzIHRoZVxuICogcGVyLWNoYW5uZWwgZGlzcGxheSB3aW5kb3cvZ2FtbWEvdmlzaWJpbGl0eSwgYW4gaW50ZW5zaXR5IGhpc3RvZ3JhbSBjb21wdXRlZFxuICogZnJvbSB0aGUgY3VycmVudGx5LWRpc3BsYXllZCBwaXhlbHMsIGFuZCB0aGUgTFVUL2NvbG9ybWFwIGNvbnRyb2xzIHRoYXQgdXNlZFxuICogdG8gbGl2ZSBpbiB0aGUgdG9vbGJhci4gVGhlIHBhbmUgaW5qZWN0cyB0aGlzIHZpYSB7QGxpbmsgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJfVxuICogKGJvdW5kIHRvIHRoZSBjb25jcmV0ZSBgUm91dGluZ1Zpc3VhbGl6ZXJTZXJ2aWNlYCB3aXRoIGB1c2VFeGlzdGluZ2ApIHNvIGl0XG4gKiBuZXZlciByZWFjaGVzIHRoZSBpbXBsZW1lbnRhdGlvbi4gRXZlcnkgc2V0dGVyIGxpdmUtdXBkYXRlcyB3aGljaGV2ZXIgYmFja2VuZFxuICogKFBsb3RseSBvciBPcGVuU2VhZHJhZ29uKSBpcyBvbiBzY3JlZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5uZWxIaXN0b2dyYW1BcGkge1xuICAvLyDilIDilIAgY2hhbm5lbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBUaGUgY2hhbm5lbHMgb2YgdGhlIGN1cnJlbnQgaW1hZ2UgKDEgZm9yIGdyYXlzY2FsZSwgMyBmb3IgUkdCKS4gKi9cbiAgZ2V0Q2hhbm5lbHMkKCk6IE9ic2VydmFibGU8SUNoYW5uZWxTdGF0ZVtdPjtcbiAgLyoqIFBhdGNoIG9uZSBjaGFubmVsJ3Mgc3RhdGUgKHdpbmRvdy9nYW1tYS92aXNpYmlsaXR5L2NvbG9yKTsgbGl2ZS11cGRhdGVzLiAqL1xuICBzZXRDaGFubmVsU3RhdGUoaW5kZXg6IG51bWJlciwgcGFydGlhbDogUGFydGlhbDxJQ2hhbm5lbFN0YXRlPik6IHZvaWQ7XG4gIC8qKiBTZXQgdGhlIGNoYW5uZWwgc2VsZWN0ZWQgaW4gdGhlIHBhbmUg4oCUIHRoZSBiYW5kIGEgc2luZ2xlLXNjYWxhciAzRCBTdXJmYWNlIGZvbGxvd3MuICovXG4gIHNldFNlbGVjdGVkQ2hhbm5lbChpbmRleDogbnVtYmVyKTogdm9pZDtcbiAgLyoqIEF1dG8td2luZG93IHRoZSBnaXZlbiBjaGFubmVscyBieSBzYXR1cmF0aW5nIGBzYXR1cmF0aW9uYCAoMC4uMSkgb2YgcGl4ZWxzXG4gICAqICBhdCBlYWNoIGVuZCBvZiB0aGVpciBoaXN0b2dyYW0uICovXG4gIGF1dG9Db250cmFzdChpbmRpY2VzOiBudW1iZXJbXSwgc2F0dXJhdGlvbjogbnVtYmVyKTogdm9pZDtcbiAgLyoqIFJlc2V0IHRoZSBnaXZlbiBjaGFubmVscyB0byB0aGVpciBkZXJpdmVkIGRlZmF1bHRzOiBmdWxsIGRpc3BsYXkgcmFuZ2VcbiAgICogICgwLi4yNTUpLCBnYW1tYSAxLCBhbmQgdGhlIGNoYW5uZWwncyBkZWZhdWx0IHRpbnQgY29sb3VyLiAqL1xuICByZXNldENvbnRyYXN0KGluZGljZXM6IG51bWJlcltdKTogdm9pZDtcblxuICAvLyDilIDilIAgaGlzdG9ncmFtIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogQmlubmVkIGhpc3RvZ3JhbSBmb3IgYSBjaGFubmVsIGZyb20gdGhlIGRpc3BsYXllZCBwaXhlbHMsIG9yIG51bGwgd2hlbiBub1xuICAgKiAgaW1hZ2UvcGl4ZWxzIGFyZSBhdmFpbGFibGUuIFN5bmNocm9ub3VzIDgtYml0IHBhdGggKHVzZWQgYnkgYXV0by1jb250cmFzdCkuICovXG4gIGdldEhpc3RvZ3JhbShjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogSUhpc3RvZ3JhbSB8IG51bGw7XG4gIC8qKiBIaXN0b2dyYW0gZm9yIGEgY2hhbm5lbCBhcyBhbiBhc3luYyBzdHJlYW06IGVtaXRzIHRoZSAqKm5hdGl2ZSoqIGJpdC1kZXB0aFxuICAgKiAgaGlzdG9ncmFtIChmcm9tIHRoZSBzZXJ2ZXIpIGZvciA+OC1iaXQgaW1hZ2VzLCBlbHNlIHRoZSA4LWJpdCBjbGllbnRcbiAgICogIGhpc3RvZ3JhbS4gVGhlIGRpYWxvZyB1c2VzIHRoaXMgc28gMTYtYml0IHN0YWNrcyBnZXQgYSB0cnVlIGRpc3RyaWJ1dGlvbi4gKi9cbiAgZ2V0SGlzdG9ncmFtJChjaGFubmVsSW5kZXg6IG51bWJlciwgYmluczogbnVtYmVyKTogT2JzZXJ2YWJsZTxJSGlzdG9ncmFtIHwgbnVsbD47XG5cbiAgLy8g4pSA4pSAIGRpc3BsYXkgb3B0aW9ucyAobW92ZWQgb3V0IG9mIHRoZSB0b29sYmFyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgZ2V0Q29sb3JtYXAoKTogT2JzZXJ2YWJsZTxDb2xvcm1hcE5vZGUgfCBudWxsPjtcbiAgc2V0Q29sb3JtYXAoY29sb3JtYXA6IENvbG9ybWFwTm9kZSk6IHZvaWQ7XG4gIGdldENvbG9ybWFwT3B0aW9ucygpOiBDb2xvcm1hcE5vZGVbXTtcbiAgZ2V0UmV2ZXJzZVNjYWxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldFJldmVyc2VTY2FsZShyZXZlcnNlOiBib29sZWFuKTogdm9pZDtcbiAgZ2V0R3JheXNjYWxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRHcmF5c2NhbGUob246IGJvb2xlYW4pOiB2b2lkO1xuICBnZXRJbnZlcnQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHNldEludmVydChvbjogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLy8g4pSA4pSAIGltYWdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBnZXRJbWFnZU1ldGEoKTogT2JzZXJ2YWJsZTxJSW1hZ2VNZXRhZGF0YVtdPjtcblxuICAvKiogRXhwb3J0IHRoZSBkaXNwbGF5ZWQgaW1hZ2Ug4oCUIGNvbXBvc2l0ZWQgd2l0aCB0aGUgY3VycmVudCBwZXItY2hhbm5lbFxuICAgKiAgcHNldWRvLWNvbG91cnMgLyB3aW5kb3cgLyBjb2xvcm1hcCDigJQgYXMgYSBwdWJsaWNhdGlvbi1yZWFkeSBQTkcgZG93bmxvYWQuICovXG4gIGV4cG9ydENvbXBvc2l0ZSgpOiB2b2lkO1xuXG4gIC8qKiBFeHBvcnQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YSDigJQgYWxsIChvciB0aGUgdmlzaWJsZSkgY2hhbm5lbHMgYXQgbmF0aXZlXG4gICAqICBiaXQgZGVwdGgg4oCUIGFzIGEgZGF0YS1wcmVzZXJ2aW5nIG11bHRpLWJhbmQgVElGRiBkb3dubG9hZC4gU2VydmVyLXNpZGUsIHNvXG4gICAqICBpdCBrZWVwcyB0cnVlIDE2LWJpdCB2YWx1ZXMgKHRoZSBQTkcgY29tcG9zaXRlIGlzIGFuIDgtYml0IGZpZ3VyZSkuIE9ubHlcbiAgICogIG1lYW5pbmdmdWwgZm9yID44LWJpdCBpbWFnZXM7IGEgbm8tb3Agb24gYmFja2VuZHMgdGhhdCBjYW4ndCBwcm92aWRlIGl0LiAqL1xuICBleHBvcnREYXRhKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogREkgdG9rZW4gZm9yIHRoZSBDaGFubmVscyAmIEhpc3RvZ3JhbSBwYW5lJ3MgQVBJLiBUaGUgbGlicmFyeSBiaW5kcyBpdCB0byBpdHMgcm91dGVyXG4gKiAoVmlzdWFsaXphdGlvbk1vZHVsZSAvIHByb3ZpZGVWaXN1YWxpemF0aW9uKTsgaG9zdHMgaW5qZWN0IGl0LCB0aGV5IGRvIG5vdCBwcm92aWRlIGl0LlxuICovXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9ISVNUT0dSQU1fQVBJID0gbmV3IEluamVjdGlvblRva2VuPElDaGFubmVsSGlzdG9ncmFtQXBpPignQ0hBTk5FTF9ISVNUT0dSQU1fQVBJJyk7XG4iXX0=
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The one CSS colour parser (review NAPARI-BOUNDARY-29, CORE-25, RT-28).
3
+ *
4
+ * Seven call sites used to parse colours by hand, each accepting a different
5
+ * subset (`#rgb` here, `#rrggbb` only there, `rgb()` in one place) and each
6
+ * falling back to a different colour on bad input. They now all call
7
+ * {@link parseCssColor}, which returns null for anything it does not
8
+ * understand, and keep their own fallback at the call site
9
+ * (`parseCssColor(s) ?? MISSING_COLOR`).
10
+ *
11
+ * Pure: no DOM, no Angular. Channels are 0–255 integers.
12
+ */
13
+ const HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
14
+ const FUNC = /^rgba?\(\s*([^)]*)\)$/i;
15
+ /**
16
+ * Parse a CSS colour to RGB, or null when it is not one this parser accepts.
17
+ *
18
+ * Accepts `#rgb`, `#rrggbb` and `#rrggbbaa` (the `#` may be omitted, and the
19
+ * alpha is ignored), and `rgb(r, g, b)` / `rgba(r, g, b, a)` with comma- or
20
+ * space-separated channels (rounded and clamped to 0–255). Named colours
21
+ * (`red`) are not accepted.
22
+ */
23
+ export function parseCssColor(s) {
24
+ const text = (s ?? '').trim();
25
+ if (!text)
26
+ return null;
27
+ const hex = HEX.exec(text);
28
+ if (hex) {
29
+ let h = hex[1];
30
+ if (h.length === 3)
31
+ h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
32
+ return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
33
+ }
34
+ const fn = FUNC.exec(text);
35
+ if (fn) {
36
+ const parts = fn[1]
37
+ .split(/[\s,/]+/)
38
+ .filter((p) => p.length > 0)
39
+ .slice(0, 3)
40
+ .map(Number);
41
+ if (parts.length < 3 || parts.some((v) => !Number.isFinite(v)))
42
+ return null;
43
+ return [clampByte(parts[0]), clampByte(parts[1]), clampByte(parts[2])];
44
+ }
45
+ return null;
46
+ }
47
+ /** `#rrggbb` (lower-case) for an RGB colour; channels are rounded and clamped to 0–255. */
48
+ export function rgbToHex(rgb) {
49
+ const h = (n) => clampByte(n).toString(16).padStart(2, '0');
50
+ return `#${h(rgb[0])}${h(rgb[1])}${h(rgb[2])}`;
51
+ }
52
+ /** {@link parseCssColor} for hex input: `#rgb` / `#rrggbb` / `#rrggbbaa` (with or without `#`), or null. */
53
+ export function hexToRgb(hex) {
54
+ const text = (hex ?? '').trim();
55
+ return HEX.test(text) ? parseCssColor(text) : null;
56
+ }
57
+ function clampByte(n) {
58
+ return Math.max(0, Math.min(255, Math.round(n)));
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUtILE1BQU0sR0FBRyxHQUFHLDRDQUE0QyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxHQUFHLHdCQUF3QixDQUFDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQTRCO0lBQ3hELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNQLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDaEIsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQzNCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ1gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1RSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBa0I7SUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRCxDQUFDO0FBRUQsNEdBQTRHO0FBQzVHLE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBOEI7SUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBUztJQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBvbmUgQ1NTIGNvbG91ciBwYXJzZXIgKHJldmlldyBOQVBBUkktQk9VTkRBUlktMjksIENPUkUtMjUsIFJULTI4KS5cbiAqXG4gKiBTZXZlbiBjYWxsIHNpdGVzIHVzZWQgdG8gcGFyc2UgY29sb3VycyBieSBoYW5kLCBlYWNoIGFjY2VwdGluZyBhIGRpZmZlcmVudFxuICogc3Vic2V0IChgI3JnYmAgaGVyZSwgYCNycmdnYmJgIG9ubHkgdGhlcmUsIGByZ2IoKWAgaW4gb25lIHBsYWNlKSBhbmQgZWFjaFxuICogZmFsbGluZyBiYWNrIHRvIGEgZGlmZmVyZW50IGNvbG91ciBvbiBiYWQgaW5wdXQuIFRoZXkgbm93IGFsbCBjYWxsXG4gKiB7QGxpbmsgcGFyc2VDc3NDb2xvcn0sIHdoaWNoIHJldHVybnMgbnVsbCBmb3IgYW55dGhpbmcgaXQgZG9lcyBub3RcbiAqIHVuZGVyc3RhbmQsIGFuZCBrZWVwIHRoZWlyIG93biBmYWxsYmFjayBhdCB0aGUgY2FsbCBzaXRlXG4gKiAoYHBhcnNlQ3NzQ29sb3IocykgPz8gTUlTU0lOR19DT0xPUmApLlxuICpcbiAqIFB1cmU6IG5vIERPTSwgbm8gQW5ndWxhci4gQ2hhbm5lbHMgYXJlIDDigJMyNTUgaW50ZWdlcnMuXG4gKi9cblxuLyoqIEFuIFJHQiBjb2xvdXIsIGVhY2ggY2hhbm5lbCAw4oCTMjU1LiAqL1xuZXhwb3J0IHR5cGUgUmdiID0gW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5jb25zdCBIRVggPSAvXiM/KFswLTlhLWZdezN9fFswLTlhLWZdezZ9fFswLTlhLWZdezh9KSQvaTtcbmNvbnN0IEZVTkMgPSAvXnJnYmE/XFwoXFxzKihbXildKilcXCkkL2k7XG5cbi8qKlxuICogUGFyc2UgYSBDU1MgY29sb3VyIHRvIFJHQiwgb3IgbnVsbCB3aGVuIGl0IGlzIG5vdCBvbmUgdGhpcyBwYXJzZXIgYWNjZXB0cy5cbiAqXG4gKiBBY2NlcHRzIGAjcmdiYCwgYCNycmdnYmJgIGFuZCBgI3JyZ2diYmFhYCAodGhlIGAjYCBtYXkgYmUgb21pdHRlZCwgYW5kIHRoZVxuICogYWxwaGEgaXMgaWdub3JlZCksIGFuZCBgcmdiKHIsIGcsIGIpYCAvIGByZ2JhKHIsIGcsIGIsIGEpYCB3aXRoIGNvbW1hLSBvclxuICogc3BhY2Utc2VwYXJhdGVkIGNoYW5uZWxzIChyb3VuZGVkIGFuZCBjbGFtcGVkIHRvIDDigJMyNTUpLiBOYW1lZCBjb2xvdXJzXG4gKiAoYHJlZGApIGFyZSBub3QgYWNjZXB0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzc0NvbG9yKHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBSZ2IgfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IChzID8/ICcnKS50cmltKCk7XG4gIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGhleCA9IEhFWC5leGVjKHRleHQpO1xuICBpZiAoaGV4KSB7XG4gICAgbGV0IGggPSBoZXhbMV07XG4gICAgaWYgKGgubGVuZ3RoID09PSAzKSBoID0gaFswXSArIGhbMF0gKyBoWzFdICsgaFsxXSArIGhbMl0gKyBoWzJdO1xuICAgIHJldHVybiBbcGFyc2VJbnQoaC5zbGljZSgwLCAyKSwgMTYpLCBwYXJzZUludChoLnNsaWNlKDIsIDQpLCAxNiksIHBhcnNlSW50KGguc2xpY2UoNCwgNiksIDE2KV07XG4gIH1cbiAgY29uc3QgZm4gPSBGVU5DLmV4ZWModGV4dCk7XG4gIGlmIChmbikge1xuICAgIGNvbnN0IHBhcnRzID0gZm5bMV1cbiAgICAgIC5zcGxpdCgvW1xccywvXSsvKVxuICAgICAgLmZpbHRlcigocCkgPT4gcC5sZW5ndGggPiAwKVxuICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAubWFwKE51bWJlcik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHMuc29tZSgodikgPT4gIU51bWJlci5pc0Zpbml0ZSh2KSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBbY2xhbXBCeXRlKHBhcnRzWzBdKSwgY2xhbXBCeXRlKHBhcnRzWzFdKSwgY2xhbXBCeXRlKHBhcnRzWzJdKV07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBgI3JyZ2diYmAgKGxvd2VyLWNhc2UpIGZvciBhbiBSR0IgY29sb3VyOyBjaGFubmVscyBhcmUgcm91bmRlZCBhbmQgY2xhbXBlZCB0byAw4oCTMjU1LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJnYlRvSGV4KHJnYjogUmVhZG9ubHk8UmdiPik6IHN0cmluZyB7XG4gIGNvbnN0IGggPSAobjogbnVtYmVyKSA9PiBjbGFtcEJ5dGUobikudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIHJldHVybiBgIyR7aChyZ2JbMF0pfSR7aChyZ2JbMV0pfSR7aChyZ2JbMl0pfWA7XG59XG5cbi8qKiB7QGxpbmsgcGFyc2VDc3NDb2xvcn0gZm9yIGhleCBpbnB1dDogYCNyZ2JgIC8gYCNycmdnYmJgIC8gYCNycmdnYmJhYWAgKHdpdGggb3Igd2l0aG91dCBgI2ApLCBvciBudWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiKGhleDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFJnYiB8IG51bGwge1xuICBjb25zdCB0ZXh0ID0gKGhleCA/PyAnJykudHJpbSgpO1xuICByZXR1cm4gSEVYLnRlc3QodGV4dCkgPyBwYXJzZUNzc0NvbG9yKHRleHQpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gY2xhbXBCeXRlKG46IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQobikpKTtcbn1cbiJdfQ==
@@ -7,59 +7,228 @@
7
7
  * to Plotly's `colorscale` — so the two surfaces stay in lock-step.
8
8
  *
9
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').
10
+ * - an array of `[stop, color]` pairs (the matplotlib tables, see {@link lutScale}), or
11
+ * - a Plotly built-in scale *name* string (e.g. 'Viridis', 'Reds'), or
12
+ * - a 256-entry RGB table itself (a `napari-js/colormaps` `*_LUT`), used as is.
12
13
  * `color` may be `'rgb(r, g, b)'` or `'#rrggbb'`/`'#rgb'`.
13
14
  */
15
+ import { Colormap, buildLut } from 'napari-js';
16
+ import { parseCssColor } from './color';
14
17
  /**
15
18
  * Plotly's built-in named colorscales (copied verbatim from plotly.js
16
19
  * `components/colorscale/scales.js`), for the `COLORMAP_OPTIONS` entries whose
17
20
  * `value` is a name string rather than an inline LUT array.
18
21
  */
19
22
  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)']],
23
+ Greys: [
24
+ [0, 'rgb(0,0,0)'],
25
+ [1, 'rgb(255,255,255)'],
26
+ ],
27
+ YlGnBu: [
28
+ [0, 'rgb(8,29,88)'],
29
+ [0.125, 'rgb(37,52,148)'],
30
+ [0.25, 'rgb(34,94,168)'],
31
+ [0.375, 'rgb(29,145,192)'],
32
+ [0.5, 'rgb(65,182,196)'],
33
+ [0.625, 'rgb(127,205,187)'],
34
+ [0.75, 'rgb(199,233,180)'],
35
+ [0.875, 'rgb(237,248,217)'],
36
+ [1, 'rgb(255,255,217)'],
37
+ ],
38
+ Greens: [
39
+ [0, 'rgb(0,68,27)'],
40
+ [0.125, 'rgb(0,109,44)'],
41
+ [0.25, 'rgb(35,139,69)'],
42
+ [0.375, 'rgb(65,171,93)'],
43
+ [0.5, 'rgb(116,196,118)'],
44
+ [0.625, 'rgb(161,217,155)'],
45
+ [0.75, 'rgb(199,233,192)'],
46
+ [0.875, 'rgb(229,245,224)'],
47
+ [1, 'rgb(247,252,245)'],
48
+ ],
49
+ YlOrRd: [
50
+ [0, 'rgb(128,0,38)'],
51
+ [0.125, 'rgb(189,0,38)'],
52
+ [0.25, 'rgb(227,26,28)'],
53
+ [0.375, 'rgb(252,78,42)'],
54
+ [0.5, 'rgb(253,141,60)'],
55
+ [0.625, 'rgb(254,178,76)'],
56
+ [0.75, 'rgb(254,217,118)'],
57
+ [0.875, 'rgb(255,237,160)'],
58
+ [1, 'rgb(255,255,204)'],
59
+ ],
60
+ Bluered: [
61
+ [0, 'rgb(0,0,255)'],
62
+ [1, 'rgb(255,0,0)'],
63
+ ],
64
+ RdBu: [
65
+ [0, 'rgb(5,10,172)'],
66
+ [0.35, 'rgb(106,137,247)'],
67
+ [0.5, 'rgb(190,190,190)'],
68
+ [0.6, 'rgb(220,170,132)'],
69
+ [0.7, 'rgb(230,145,90)'],
70
+ [1, 'rgb(178,10,28)'],
71
+ ],
72
+ Reds: [
73
+ [0, 'rgb(220,220,220)'],
74
+ [0.2, 'rgb(245,195,157)'],
75
+ [0.4, 'rgb(245,160,105)'],
76
+ [1, 'rgb(178,10,28)'],
77
+ ],
78
+ Blues: [
79
+ [0, 'rgb(5,10,172)'],
80
+ [0.35, 'rgb(40,60,190)'],
81
+ [0.5, 'rgb(70,100,245)'],
82
+ [0.6, 'rgb(90,120,245)'],
83
+ [0.7, 'rgb(106,137,247)'],
84
+ [1, 'rgb(220,220,220)'],
85
+ ],
86
+ Picnic: [
87
+ [0, 'rgb(0,0,255)'],
88
+ [0.1, 'rgb(51,153,255)'],
89
+ [0.2, 'rgb(102,204,255)'],
90
+ [0.3, 'rgb(153,204,255)'],
91
+ [0.4, 'rgb(204,204,255)'],
92
+ [0.5, 'rgb(255,255,255)'],
93
+ [0.6, 'rgb(255,204,255)'],
94
+ [0.7, 'rgb(255,153,255)'],
95
+ [0.8, 'rgb(255,102,204)'],
96
+ [0.9, 'rgb(255,102,102)'],
97
+ [1, 'rgb(255,0,0)'],
98
+ ],
99
+ Rainbow: [
100
+ [0, 'rgb(150,0,90)'],
101
+ [0.125, 'rgb(0,0,200)'],
102
+ [0.25, 'rgb(0,25,255)'],
103
+ [0.375, 'rgb(0,152,255)'],
104
+ [0.5, 'rgb(44,255,150)'],
105
+ [0.625, 'rgb(151,255,0)'],
106
+ [0.75, 'rgb(255,234,0)'],
107
+ [0.875, 'rgb(255,111,0)'],
108
+ [1, 'rgb(255,0,0)'],
109
+ ],
110
+ Portland: [
111
+ [0, 'rgb(12,51,131)'],
112
+ [0.25, 'rgb(10,136,186)'],
113
+ [0.5, 'rgb(242,211,56)'],
114
+ [0.75, 'rgb(242,143,56)'],
115
+ [1, 'rgb(217,30,30)'],
116
+ ],
117
+ Jet: [
118
+ [0, 'rgb(0,0,131)'],
119
+ [0.125, 'rgb(0,60,170)'],
120
+ [0.375, 'rgb(5,255,255)'],
121
+ [0.625, 'rgb(255,255,0)'],
122
+ [0.875, 'rgb(250,0,0)'],
123
+ [1, 'rgb(128,0,0)'],
124
+ ],
125
+ Hot: [
126
+ [0, 'rgb(0,0,0)'],
127
+ [0.3, 'rgb(230,0,0)'],
128
+ [0.6, 'rgb(255,210,0)'],
129
+ [1, 'rgb(255,255,255)'],
130
+ ],
131
+ Blackbody: [
132
+ [0, 'rgb(0,0,0)'],
133
+ [0.2, 'rgb(230,0,0)'],
134
+ [0.4, 'rgb(230,210,0)'],
135
+ [0.7, 'rgb(255,255,255)'],
136
+ [1, 'rgb(160,200,255)'],
137
+ ],
138
+ Earth: [
139
+ [0, 'rgb(0,0,130)'],
140
+ [0.1, 'rgb(0,180,180)'],
141
+ [0.2, 'rgb(40,210,40)'],
142
+ [0.4, 'rgb(230,230,50)'],
143
+ [0.6, 'rgb(120,70,20)'],
144
+ [1, 'rgb(255,255,255)'],
145
+ ],
146
+ Electric: [
147
+ [0, 'rgb(0,0,0)'],
148
+ [0.15, 'rgb(30,0,100)'],
149
+ [0.4, 'rgb(120,0,100)'],
150
+ [0.6, 'rgb(160,90,0)'],
151
+ [0.8, 'rgb(230,200,0)'],
152
+ [1, 'rgb(255,250,220)'],
153
+ ],
154
+ Viridis: [
155
+ [0, '#440154'],
156
+ [0.06274509803921569, '#48186a'],
157
+ [0.12549019607843137, '#472d7b'],
158
+ [0.18823529411764706, '#424086'],
159
+ [0.25098039215686274, '#3b528b'],
160
+ [0.3137254901960784, '#33638d'],
161
+ [0.3764705882352941, '#2c728e'],
162
+ [0.4392156862745098, '#26828e'],
163
+ [0.5019607843137255, '#21918c'],
164
+ [0.5647058823529412, '#1fa088'],
165
+ [0.6274509803921569, '#28ae80'],
166
+ [0.6901960784313725, '#3fbc73'],
167
+ [0.7529411764705882, '#5ec962'],
168
+ [0.8156862745098039, '#84d44b'],
169
+ [0.8784313725490196, '#addc30'],
170
+ [0.9411764705882353, '#d8e219'],
171
+ [1, '#fde725'],
172
+ ],
173
+ Cividis: [
174
+ [0, 'rgb(0,32,76)'],
175
+ [0.058824, 'rgb(0,42,102)'],
176
+ [0.117647, 'rgb(0,52,110)'],
177
+ [0.176471, 'rgb(39,63,108)'],
178
+ [0.235294, 'rgb(60,74,107)'],
179
+ [0.294118, 'rgb(76,85,107)'],
180
+ [0.352941, 'rgb(91,95,109)'],
181
+ [0.411765, 'rgb(104,106,112)'],
182
+ [0.470588, 'rgb(117,117,117)'],
183
+ [0.529412, 'rgb(131,129,120)'],
184
+ [0.588235, 'rgb(146,140,120)'],
185
+ [0.647059, 'rgb(161,152,118)'],
186
+ [0.705882, 'rgb(176,165,114)'],
187
+ [0.764706, 'rgb(192,177,109)'],
188
+ [0.823529, 'rgb(209,191,102)'],
189
+ [0.882353, 'rgb(225,204,92)'],
190
+ [0.941176, 'rgb(243,219,79)'],
191
+ [1, 'rgb(255,233,69)'],
192
+ ],
38
193
  };
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];
194
+ /**
195
+ * A 256-entry RGB table (a `napari-js/colormaps` `*_LUT`, `Uint8Array(768)`) as an inline
196
+ * Plotly colorscale: one `[i / 255, 'rgb(r, g, b)']` stop per entry, the shape the colormap
197
+ * tree hands to Plotly's `colorscale` and to {@link buildColormapLut}. Stops are rounded to
198
+ * six decimals, as the colormap asset this replaces carried them.
199
+ */
200
+ export function lutScale(lut) {
201
+ const n = Math.floor(lut.length / 3);
202
+ const scale = new Array(n);
203
+ for (let i = 0; i < n; i++) {
204
+ scale[i] = [Number((i / (n - 1)).toFixed(6)), `rgb(${lut[i * 3]}, ${lut[i * 3 + 1]}, ${lut[i * 3 + 2]})`];
53
205
  }
54
- return [0, 0, 0];
206
+ return scale;
207
+ }
208
+ /** Parse a Plotly colorscale color (`rgb(r,g,b)` or `#rrggbb`/`#rgb`) to RGB; black when unparseable. */
209
+ function parseColor(c) {
210
+ return parseCssColor(c) ?? [0, 0, 0];
55
211
  }
56
212
  /**
57
213
  * Build a 256-entry RGB lookup table from a `COLORMAP_OPTIONS` value, indexed by
58
214
  * 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
215
+ *
216
+ * The Plotly side (the value's forms, the colour strings, the built-in names) is
217
+ * parsed here; the interpolation is napari-js's own `Colormap` sampled by `buildLut`,
218
+ * so both backends ramp a scale the same way.
219
+ * @param value array of `[stop, color]` pairs, a Plotly built-in name string, or a
220
+ * 256-entry RGB `Uint8Array(768)`
60
221
  * @param reverse mirror the scale (matches Plotly's `reversescale`)
61
222
  */
62
223
  export function buildColormapLut(value, reverse = false) {
224
+ if (value instanceof Uint8Array && value.length === 768) {
225
+ const lut = new Array(256);
226
+ for (let i = 0; i < 256; i++)
227
+ lut[i] = [value[i * 3], value[i * 3 + 1], value[i * 3 + 2]];
228
+ if (reverse)
229
+ lut.reverse();
230
+ return lut;
231
+ }
63
232
  let scale = null;
64
233
  if (Array.isArray(value))
65
234
  scale = value;
@@ -67,29 +236,16 @@ export function buildColormapLut(value, reverse = false) {
67
236
  scale = BUILTIN_SCALES[value] ?? null;
68
237
  if (!scale || scale.length < 2)
69
238
  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]);
239
+ const colormap = new Colormap('plotly-scale', scale.map((s) => {
240
+ const [r, g, b] = parseColor(String(s[1]));
241
+ return { t: Number(s[0]), color: [r / 255, g / 255, b / 255] };
242
+ }));
243
+ const rgba = buildLut(colormap, 256);
74
244
  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
- }
245
+ for (let i = 0; i < 256; i++)
246
+ lut[i] = [rgba[i * 4], rgba[i * 4 + 1], rgba[i * 4 + 2]];
91
247
  if (reverse)
92
248
  lut.reverse();
93
249
  return lut;
94
250
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JtYXAtbHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY29sb3JtYXAtbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUtIOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdlAsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN0UCxNQUFNLEVB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RUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sb3JtYXAg4oaSIFJHQiBsb29rdXAtdGFibGUgYnVpbGRlci5cbiAqXG4gKiBMZXRzIGEgbm9uLVBsb3RseSBiYWNrZW5kIChPcGVuU2VhZHJhZ29uKSByZWNvbG9yIGdyYXlzY2FsZSBwaXhlbHMgd2l0aCB0aGVcbiAqIGV4YWN0IHNhbWUgY29sb3JtYXBzIHRoZSBQbG90bHkgaGVhdG1hcCB1c2VzLiBUaGUgaW5wdXQgaXMgYSBjb2xvcm1hcCB2YWx1ZVxuICogc3RyYWlnaHQgZnJvbSBgQ09MT1JNQVBfT1BUSU9OU2AgKHNlZSBwbG90LnV0aWxpdGllcykg4oCUIHRoZSBzYW1lIHZhbHVlIGhhbmRlZFxuICogdG8gUGxvdGx5J3MgYGNvbG9yc2NhbGVgIOKAlCBzbyB0aGUgdHdvIHN1cmZhY2VzIHN0YXkgaW4gbG9jay1zdGVwLlxuICpcbiAqIEEgY29sb3JtYXAgdmFsdWUgaXMgZWl0aGVyOlxuICogICAtIGFuIGFycmF5IG9mIGBbc3RvcCwgY29sb3JdYCBwYWlycyAodGhlIG1hdHBsb3RsaWIgYCpfTFVUYCBjb25zdGFudHMpLCBvclxuICogICAtIGEgUGxvdGx5IGJ1aWx0LWluIHNjYWxlICpuYW1lKiBzdHJpbmcgKGUuZy4gJ1ZpcmlkaXMnLCAnUmVkcycpLlxuICogYGNvbG9yYCBtYXkgYmUgYCdyZ2IociwgZywgYiknYCBvciBgJyNycmdnYmInYC9gJyNyZ2InYC5cbiAqL1xuXG5leHBvcnQgdHlwZSBSZ2IgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG50eXBlIFN0b3AgPSBbbnVtYmVyLCBzdHJpbmddO1xuXG4vKipcbiAqIFBsb3RseSdzIGJ1aWx0LWluIG5hbWVkIGNvbG9yc2NhbGVzIChjb3BpZWQgdmVyYmF0aW0gZnJvbSBwbG90bHkuanNcbiAqIGBjb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzLmpzYCksIGZvciB0aGUgYENPTE9STUFQX09QVElPTlNgIGVudHJpZXMgd2hvc2VcbiAqIGB2YWx1ZWAgaXMgYSBuYW1lIHN0cmluZyByYXRoZXIgdGhhbiBhbiBpbmxpbmUgTFVUIGFycmF5LlxuICovXG5jb25zdCBCVUlMVElOX1NDQUxFUzogUmVjb3JkPHN0cmluZywgU3RvcFtdPiA9IHtcbiAgR3JleXM6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBZbEduQnU6IFtbMCwgJ3JnYig4LDI5LDg4KSddLCBbMC4xMjUsICdyZ2IoMzcsNTIsMTQ4KSddLCBbMC4yNSwgJ3JnYigzNCw5NCwxNjgpJ10sIFswLjM3NSwgJ3JnYigyOSwxNDUsMTkyKSddLCBbMC41LCAncmdiKDY1LDE4MiwxOTYpJ10sIFswLjYyNSwgJ3JnYigxMjcsMjA1LDE4NyknXSwgWzAuNzUsICdyZ2IoMTk5LDIzMywxODApJ10sIFswLjg3NSwgJ3JnYigyMzcsMjQ4LDIxNyknXSwgWzEsICdyZ2IoMjU1LDI1NSwyMTcpJ11dLFxuICBHcmVlbnM6IFtbMCwgJ3JnYigwLDY4LDI3KSddLCBbMC4xMjUsICdyZ2IoMCwxMDksNDQpJ10sIFswLjI1LCAncmdiKDM1LDEzOSw2OSknXSwgWzAuMzc1LCAncmdiKDY1LDE3MSw5MyknXSwgWzAuNSwgJ3JnYigxMTYsMTk2LDExOCknXSwgWzAuNjI1LCAncmdiKDE2MSwyMTcsMTU1KSddLCBbMC43NSwgJ3JnYigxOTksMjMzLDE5MiknXSwgWzAuODc1LCAncmdiKDIyOSwyNDUsMjI0KSddLCBbMSwgJ3JnYigyNDcsMjUyLDI0NSknXV0sXG4gIFlsT3JSZDogW1swLCAncmdiKDEyOCwwLDM4KSddLCBbMC4xMjUsICdyZ2IoMTg5LDAsMzgpJ10sIFswLjI1LCAncmdiKDIyNywyNiwyOCknXSwgWzAuMzc1LCAncmdiKDI1Miw3OCw0MiknXSwgWzAuNSwgJ3JnYigyNTMsMTQxLDYwKSddLCBbMC42MjUsICdyZ2IoMjU0LDE3OCw3NiknXSwgWzAuNzUsICdyZ2IoMjU0LDIxNywxMTgpJ10sIFswLjg3NSwgJ3JnYigyNTUsMjM3LDE2MCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyMDQpJ11dLFxuICBCbHVlcmVkOiBbWzAsICdyZ2IoMCwwLDI1NSknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFJkQnU6IFtbMCwgJ3JnYig1LDEwLDE3MiknXSwgWzAuMzUsICdyZ2IoMTA2LDEzNywyNDcpJ10sIFswLjUsICdyZ2IoMTkwLDE5MCwxOTApJ10sIFswLjYsICdyZ2IoMjIwLDE3MCwxMzIpJ10sIFswLjcsICdyZ2IoMjMwLDE0NSw5MCknXSwgWzEsICdyZ2IoMTc4LDEwLDI4KSddXSxcbiAgUmVkczogW1swLCAncmdiKDIyMCwyMjAsMjIwKSddLCBbMC4yLCAncmdiKDI0NSwxOTUsMTU3KSddLCBbMC40LCAncmdiKDI0NSwxNjAsMTA1KSddLCBbMSwgJ3JnYigxNzgsMTAsMjgpJ11dLFxuICBCbHVlczogW1swLCAncmdiKDUsMTAsMTcyKSddLCBbMC4zNSwgJ3JnYig0MCw2MCwxOTApJ10sIFswLjUsICdyZ2IoNzAsMTAwLDI0NSknXSwgWzAuNiwgJ3JnYig5MCwxMjAsMjQ1KSddLCBbMC43LCAncmdiKDEwNiwxMzcsMjQ3KSddLCBbMSwgJ3JnYigyMjAsMjIwLDIyMCknXV0sXG4gIFBpY25pYzogW1swLCAncmdiKDAsMCwyNTUpJ10sIFswLjEsICdyZ2IoNTEsMTUzLDI1NSknXSwgWzAuMiwgJ3JnYigxMDIsMjA0LDI1NSknXSwgWzAuMywgJ3JnYigxNTMsMjA0LDI1NSknXSwgWzAuNCwgJ3JnYigyMDQsMjA0LDI1NSknXSwgWzAuNSwgJ3JnYigyNTUsMjU1LDI1NSknXSwgWzAuNiwgJ3JnYigyNTUsMjA0LDI1NSknXSwgWzAuNywgJ3JnYigyNTUsMTUzLDI1NSknXSwgWzAuOCwgJ3JnYigyNTUsMTAyLDIwNCknXSwgWzAuOSwgJ3JnYigyNTUsMTAyLDEwMiknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFJhaW5ib3c6IFtbMCwgJ3JnYigxNTAsMCw5MCknXSwgWzAuMTI1LCAncmdiKDAsMCwyMDApJ10sIFswLjI1LCAncmdiKDAsMjUsMjU1KSddLCBbMC4zNzUsICdyZ2IoMCwxNTIsMjU1KSddLCBbMC41LCAncmdiKDQ0LDI1NSwxNTApJ10sIFswLjYyNSwgJ3JnYigxNTEsMjU1LDApJ10sIFswLjc1LCAncmdiKDI1NSwyMzQsMCknXSwgWzAuODc1LCAncmdiKDI1NSwxMTEsMCknXSwgWzEsICdyZ2IoMjU1LDAsMCknXV0sXG4gIFBvcnRsYW5kOiBbWzAsICdyZ2IoMTIsNTEsMTMxKSddLCBbMC4yNSwgJ3JnYigxMCwxMzYsMTg2KSddLCBbMC41LCAncmdiKDI0MiwyMTEsNTYpJ10sIFswLjc1LCAncmdiKDI0MiwxNDMsNTYpJ10sIFsxLCAncmdiKDIxNywzMCwzMCknXV0sXG4gIEpldDogW1swLCAncmdiKDAsMCwxMzEpJ10sIFswLjEyNSwgJ3JnYigwLDYwLDE3MCknXSwgWzAuMzc1LCAncmdiKDUsMjU1LDI1NSknXSwgWzAuNjI1LCAncmdiKDI1NSwyNTUsMCknXSwgWzAuODc1LCAncmdiKDI1MCwwLDApJ10sIFsxLCAncmdiKDEyOCwwLDApJ11dLFxuICBIb3Q6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzAuMywgJ3JnYigyMzAsMCwwKSddLCBbMC42LCAncmdiKDI1NSwyMTAsMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBCbGFja2JvZHk6IFtbMCwgJ3JnYigwLDAsMCknXSwgWzAuMiwgJ3JnYigyMzAsMCwwKSddLCBbMC40LCAncmdiKDIzMCwyMTAsMCknXSwgWzAuNywgJ3JnYigyNTUsMjU1LDI1NSknXSwgWzEsICdyZ2IoMTYwLDIwMCwyNTUpJ11dLFxuICBFYXJ0aDogW1swLCAncmdiKDAsMCwxMzApJ10sIFswLjEsICdyZ2IoMCwxODAsMTgwKSddLCBbMC4yLCAncmdiKDQwLDIxMCw0MCknXSwgWzAuNCwgJ3JnYigyMzAsMjMwLDUwKSddLCBbMC42LCAncmdiKDEyMCw3MCwyMCknXSwgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ11dLFxuICBFbGVjdHJpYzogW1swLCAncmdiKDAsMCwwKSddLCBbMC4xNSwgJ3JnYigzMCwwLDEwMCknXSwgWzAuNCwgJ3JnYigxMjAsMCwxMDApJ10sIFswLjYsICdyZ2IoMTYwLDkwLDApJ10sIFswLjgsICdyZ2IoMjMwLDIwMCwwKSddLCBbMSwgJ3JnYigyNTUsMjUwLDIyMCknXV0sXG4gIFZpcmlkaXM6IFtbMCwgJyM0NDAxNTQnXSwgWzAuMDYyNzQ1MDk4MDM5MjE1NjksICcjNDgxODZhJ10sIFswLjEyNTQ5MDE5NjA3ODQzMTM3LCAnIzQ3MmQ3YiddLCBbMC4xODgyMzUyOTQxMTc2NDcwNiwgJyM0MjQwODYnXSwgWzAuMjUwOTgwMzkyMTU2ODYyNzQsICcjM2I1MjhiJ10sIFswLjMxMzcyNTQ5MDE5NjA3ODQsICcjMzM2MzhkJ10sIFswLjM3NjQ3MDU4ODIzNTI5NDEsICcjMmM3MjhlJ10sIFswLjQzOTIxNTY4NjI3NDUwOTgsICcjMjY4MjhlJ10sIFswLjUwMTk2MDc4NDMxMzcyNTUsICcjMjE5MThjJ10sIFswLjU2NDcwNTg4MjM1Mjk0MTIsICcjMWZhMDg4J10sIFswLjYyNzQ1MDk4MDM5MjE1NjksICcjMjhhZTgwJ10sIFswLjY5MDE5NjA3ODQzMTM3MjUsICcjM2ZiYzczJ10sIFswLjc1Mjk0MTE3NjQ3MDU4ODIsICcjNWVjOTYyJ10sIFswLjgxNTY4NjI3NDUwOTgwMzksICcjODRkNDRiJ10sIFswLjg3ODQzMTM3MjU0OTAxOTYsICcjYWRkYzMwJ10sIFswLjk0MTE3NjQ3MDU4ODIzNTMsICcjZDhlMjE5J10sIFsxLCAnI2ZkZTcyNSddXSxcbiAgQ2l2aWRpczogW1swLCAncmdiKDAsMzIsNzYpJ10sIFswLjA1ODgyNCwgJ3JnYigwLDQyLDEwMiknXSwgWzAuMTE3NjQ3LCAncmdiKDAsNTIsMTEwKSddLCBbMC4xNzY0NzEsICdyZ2IoMzksNjMsMTA4KSddLCBbMC4yMzUyOTQsICdyZ2IoNjAsNzQsMTA3KSddLCBbMC4yOTQxMTgsICdyZ2IoNzYsODUsMTA3KSddLCBbMC4zNTI5NDEsICdyZ2IoOTEsOTUsMTA5KSddLCBbMC40MTE3NjUsICdyZ2IoMTA0LDEwNiwxMTIpJ10sIFswLjQ3MDU4OCwgJ3JnYigxMTcsMTE3LDExNyknXSwgWzAuNTI5NDEyLCAncmdiKDEzMSwxMjksMTIwKSddLCBbMC41ODgyMzUsICdyZ2IoMTQ2LDE0MCwxMjApJ10sIFswLjY0NzA1OSwgJ3JnYigxNjEsMTUyLDExOCknXSwgWzAuNzA1ODgyLCAncmdiKDE3NiwxNjUsMTE0KSddLCBbMC43NjQ3MDYsICdyZ2IoMTkyLDE3NywxMDkpJ10sIFswLjgyMzUyOSwgJ3JnYigyMDksMTkxLDEwMiknXSwgWzAuODgyMzUzLCAncmdiKDIyNSwyMDQsOTIpJ10sIFswLjk0MTE3NiwgJ3JnYigyNDMsMjE5LDc5KSddLCBbMSwgJ3JnYigyNTUsMjMzLDY5KSddXSxcbn07XG5cbi8qKiBQYXJzZSBhIFBsb3RseSBjb2xvcnNjYWxlIGNvbG9yIChgcmdiKHIsZyxiKWAgb3IgYCNycmdnYmJgL2AjcmdiYCkgdG8gUkdCLiAqL1xuZnVuY3Rpb24gcGFyc2VDb2xvcihjOiBzdHJpbmcpOiBSZ2Ige1xuICBjb25zdCBzID0gKGMgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgaGV4ID0gcy5tYXRjaCgvXiMoWzAtOWEtZl17M318WzAtOWEtZl17Nn0pJC9pKTtcbiAgaWYgKGhleCkge1xuICAgIGxldCBoID0gaGV4WzFdO1xuICAgIGlmIChoLmxlbmd0aCA9PT0gMykgaCA9IGhbMF0gKyBoWzBdICsgaFsxXSArIGhbMV0gKyBoWzJdICsgaFsyXTtcbiAgICByZXR1cm4gW3BhcnNlSW50KGguc2xpY2UoMCwgMiksIDE2KSwgcGFyc2VJbnQoaC5zbGljZSgyLCA0KSwgMTYpLCBwYXJzZUludChoLnNsaWNlKDQsIDYpLCAxNildO1xuICB9XG4gIGNvbnN0IHJnYiA9IHMubWF0Y2goL3JnYmE/XFwoKFteKV0rKVxcKS9pKTtcbiAgaWYgKHJnYikge1xuICAgIGNvbnN0IHAgPSByZ2JbMV0uc3BsaXQoJywnKS5tYXAoKHYpID0+IHBhcnNlRmxvYXQodi50cmltKCkpKTtcbiAgICByZXR1cm4gW01hdGgucm91bmQocFswXSkgfHwgMCwgTWF0aC5yb3VuZChwWzFdKSB8fCAwLCBNYXRoLnJvdW5kKHBbMl0pIHx8IDBdO1xuICB9XG4gIHJldHVybiBbMCwgMCwgMF07XG59XG5cbi8qKlxuICogQnVpbGQgYSAyNTYtZW50cnkgUkdCIGxvb2t1cCB0YWJsZSBmcm9tIGEgYENPTE9STUFQX09QVElPTlNgIHZhbHVlLCBpbmRleGVkIGJ5XG4gKiBncmF5c2NhbGUgdmFsdWUgMOKAkzI1NS4gUmV0dXJucyBudWxsIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSByZXNvbHZlZCB0byBhIHNjYWxlLlxuICogQHBhcmFtIHZhbHVlICBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMsIG9yIGEgUGxvdGx5IGJ1aWx0LWluIG5hbWUgc3RyaW5nXG4gKiBAcGFyYW0gcmV2ZXJzZSAgbWlycm9yIHRoZSBzY2FsZSAobWF0Y2hlcyBQbG90bHkncyBgcmV2ZXJzZXNjYWxlYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29sb3JtYXBMdXQodmFsdWU6IHVua25vd24sIHJldmVyc2UgPSBmYWxzZSk6IFJnYltdIHwgbnVsbCB7XG4gIGxldCBzY2FsZTogU3RvcFtdIHwgbnVsbCA9IG51bGw7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgc2NhbGUgPSB2YWx1ZSBhcyBTdG9wW107XG4gIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHNjYWxlID0gQlVJTFRJTl9TQ0FMRVNbdmFsdWVdID8/IG51bGw7XG4gIGlmICghc2NhbGUgfHwgc2NhbGUubGVuZ3RoIDwgMikgcmV0dXJuIG51bGw7XG5cbiAgLy8gTm9ybWFsaXNlICsgc29ydCB0aGUgY29udHJvbCBwb2ludHMuXG4gIGNvbnN0IHN0b3BzID0gc2NhbGVcbiAgICAubWFwKChzKSA9PiBbTnVtYmVyKHNbMF0pLCBwYXJzZUNvbG9yKFN0cmluZyhzWzFdKSldIGFzIFtudW1iZXIsIFJnYl0pXG4gICAgLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKTtcblxuICBjb25zdCBsdXQ6IFJnYltdID0gbmV3IEFycmF5KDI1Nik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICBjb25zdCB0ID0gaSAvIDI1NTtcbiAgICAvLyBGaW5kIHRoZSBicmFja2V0aW5nIGNvbnRyb2wgcG9pbnRzIGZvciB0LlxuICAgIGxldCBrID0gMDtcbiAgICB3aGlsZSAoayA8IHN0b3BzLmxlbmd0aCAtIDIgJiYgc3RvcHNbayArIDFdWzBdIDwgdCkgaysrO1xuICAgIGNvbnN0IFt0MCwgYzBdID0gc3RvcHNba107XG4gICAgY29uc3QgW3QxLCBjMV0gPSBzdG9wc1trICsgMV07XG4gICAgY29uc3Qgc3BhbiA9IHQxIC0gdDAgfHwgMTtcbiAgICBjb25zdCBmID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKHQgLSB0MCkgLyBzcGFuKSk7XG4gICAgbHV0W2ldID0gW1xuICAgICAgTWF0aC5yb3VuZChjMFswXSArIChjMVswXSAtIGMwWzBdKSAqIGYpLFxuICAgICAgTWF0aC5yb3VuZChjMFsxXSArIChjMVsxXSAtIGMwWzFdKSAqIGYpLFxuICAgICAgTWF0aC5yb3VuZChjMFsyXSArIChjMVsyXSAtIGMwWzJdKSAqIGYpLFxuICAgIF07XG4gIH1cbiAgaWYgKHJldmVyc2UpIGx1dC5yZXZlcnNlKCk7XG4gIHJldHVybiBsdXQ7XG59XG4iXX0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JtYXAtbHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvY29sb3JtYXAtbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUvQyxPQUFPLEVBQU8sYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSzdDOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsS0FBSyxFQUFFO1FBQ0wsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0tBQ3hCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO1FBQ25CLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDO1FBQ3pCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO1FBQ3hCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDO1FBQzFCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDO1FBQ3hCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDO1FBQzNCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDO1FBQzFCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDO1FBQzNCLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO0tBQ3hCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO1FBQ25CLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQztRQUN4QixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQztRQUN4QixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztRQUN6QixDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQztRQUN6QixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQztRQUMzQixD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QUFLLEtBQUssUUFBUTtRQUFFLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzFFLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQzNCLGNBQWMsRUFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDZCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sR0FBRyxHQUFVLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLElBQUksT0FBTztRQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbG9ybWFwIOKGkiBSR0IgbG9va3VwLXRhYmxlIGJ1aWxkZXIuXG4gKlxuICogTGV0cyBhIG5vbi1QbG90bHkgYmFja2VuZCAoT3BlblNlYWRyYWdvbikgcmVjb2xvciBncmF5c2NhbGUgcGl4ZWxzIHdpdGggdGhlXG4gKiBleGFjdCBzYW1lIGNvbG9ybWFwcyB0aGUgUGxvdGx5IGhlYXRtYXAgdXNlcy4gVGhlIGlucHV0IGlzIGEgY29sb3JtYXAgdmFsdWVcbiAqIHN0cmFpZ2h0IGZyb20gYENPTE9STUFQX09QVElPTlNgIChzZWUgcGxvdC51dGlsaXRpZXMpIOKAlCB0aGUgc2FtZSB2YWx1ZSBoYW5kZWRcbiAqIHRvIFBsb3RseSdzIGBjb2xvcnNjYWxlYCDigJQgc28gdGhlIHR3byBzdXJmYWNlcyBzdGF5IGluIGxvY2stc3RlcC5cbiAqXG4gKiBBIGNvbG9ybWFwIHZhbHVlIGlzIGVpdGhlcjpcbiAqICAgLSBhbiBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMgKHRoZSBtYXRwbG90bGliIHRhYmxlcywgc2VlIHtAbGluayBsdXRTY2FsZX0pLCBvclxuICogICAtIGEgUGxvdGx5IGJ1aWx0LWluIHNjYWxlICpuYW1lKiBzdHJpbmcgKGUuZy4gJ1ZpcmlkaXMnLCAnUmVkcycpLCBvclxuICogICAtIGEgMjU2LWVudHJ5IFJHQiB0YWJsZSBpdHNlbGYgKGEgYG5hcGFyaS1qcy9jb2xvcm1hcHNgIGAqX0xVVGApLCB1c2VkIGFzIGlzLlxuICogYGNvbG9yYCBtYXkgYmUgYCdyZ2IociwgZywgYiknYCBvciBgJyNycmdnYmInYC9gJyNyZ2InYC5cbiAqL1xuXG5pbXBvcnQgeyBDb2xvcm1hcCwgYnVpbGRMdXQgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgeyBSZ2IsIHBhcnNlQ3NzQ29sb3IgfSBmcm9tICcuL2NvbG9yJztcblxuZXhwb3J0IHR5cGUgeyBSZ2IgfTtcbnR5cGUgU3RvcCA9IFtudW1iZXIsIHN0cmluZ107XG5cbi8qKlxuICogUGxvdGx5J3MgYnVpbHQtaW4gbmFtZWQgY29sb3JzY2FsZXMgKGNvcGllZCB2ZXJiYXRpbSBmcm9tIHBsb3RseS5qc1xuICogYGNvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMuanNgKSwgZm9yIHRoZSBgQ09MT1JNQVBfT1BUSU9OU2AgZW50cmllcyB3aG9zZVxuICogYHZhbHVlYCBpcyBhIG5hbWUgc3RyaW5nIHJhdGhlciB0aGFuIGFuIGlubGluZSBMVVQgYXJyYXkuXG4gKi9cbmNvbnN0IEJVSUxUSU5fU0NBTEVTOiBSZWNvcmQ8c3RyaW5nLCBTdG9wW10+ID0ge1xuICBHcmV5czogW1xuICAgIFswLCAncmdiKDAsMCwwKSddLFxuICAgIFsxLCAncmdiKDI1NSwyNTUsMjU1KSddLFxuICBdLFxuICBZbEduQnU6IFtcbiAgICBbMCwgJ3JnYig4LDI5LDg4KSddLFxuICAgIFswLjEyNSwgJ3JnYigzNyw1MiwxNDgpJ10sXG4gICAgWzAuMjUsICdyZ2IoMzQsOTQsMTY4KSddLFxuICAgIFswLjM3NSwgJ3JnYigyOSwxNDUsMTkyKSddLFxuICAgIFswLjUsICdyZ2IoNjUsMTgyLDE5NiknXSxcbiAgICBbMC42MjUsICdyZ2IoMTI3LDIwNSwxODcpJ10sXG4gICAgWzAuNzUsICdyZ2IoMTk5LDIzMywxODApJ10sXG4gICAgWzAuODc1LCAncmdiKDIzNywyNDgsMjE3KSddLFxuICAgIFsxLCAncmdiKDI1NSwyNTUsMjE3KSddLFxuICBdLFxuICBHcmVlbnM6IFtcbiAgICBbMCwgJ3JnYigwLDY4LDI3KSddLFxuICAgIFswLjEyNSwgJ3JnYigwLDEwOSw0NCknXSxcbiAgICBbMC4yNSwgJ3JnYigzNSwxMzksNjkpJ10sXG4gICAgWzAuMzc1LCAncmdiKDY1LDE3MSw5MyknXSxcbiAgICBbMC41LCAncmdiKDExNiwxOTYsMTE4KSddLFxuICAgIFswLjYyNSwgJ3JnYigxNjEsMjE3LDE1NSknXSxcbiAgICBbMC43NSwgJ3JnYigxOTksMjMzLDE5MiknXSxcbiAgICBbMC44NzUsICdyZ2IoMjI5LDI0NSwyMjQpJ10sXG4gICAgWzEsICdyZ2IoMjQ3LDI1MiwyNDUpJ10sXG4gIF0sXG4gIFlsT3JSZDogW1xuICAgIFswLCAncmdiKDEyOCwwLDM4KSddLFxuICAgIFswLjEyNSwgJ3JnYigxODksMCwzOCknXSxcbiAgICBbMC4yNSwgJ3JnYigyMjcsMjYsMjgpJ10sXG4gICAgWzAuMzc1LCAncmdiKDI1Miw3OCw0MiknXSxcbiAgICBbMC41LCAncmdiKDI1MywxNDEsNjApJ10sXG4gICAgWzAuNjI1LCAncmdiKDI1NCwxNzgsNzYpJ10sXG4gICAgWzAuNzUsICdyZ2IoMjU0LDIxNywxMTgpJ10sXG4gICAgWzAuODc1LCAncmdiKDI1NSwyMzcsMTYwKSddLFxuICAgIFsxLCAncmdiKDI1NSwyNTUsMjA0KSddLFxuICBdLFxuICBCbHVlcmVkOiBbXG4gICAgWzAsICdyZ2IoMCwwLDI1NSknXSxcbiAgICBbMSwgJ3JnYigyNTUsMCwwKSddLFxuICBdLFxuICBSZEJ1OiBbXG4gICAgWzAsICdyZ2IoNSwxMCwxNzIpJ10sXG4gICAgWzAuMzUsICdyZ2IoMTA2LDEzNywyNDcpJ10sXG4gICAgWzAuNSwgJ3JnYigxOTAsMTkwLDE5MCknXSxcbiAgICBbMC42LCAncmdiKDIyMCwxNzAsMTMyKSddLFxuICAgIFswLjcsICdyZ2IoMjMwLDE0NSw5MCknXSxcbiAgICBbMSwgJ3JnYigxNzgsMTAsMjgpJ10sXG4gIF0sXG4gIFJlZHM6IFtcbiAgICBbMCwgJ3JnYigyMjAsMjIwLDIyMCknXSxcbiAgICBbMC4yLCAncmdiKDI0NSwxOTUsMTU3KSddLFxuICAgIFswLjQsICdyZ2IoMjQ1LDE2MCwxMDUpJ10sXG4gICAgWzEsICdyZ2IoMTc4LDEwLDI4KSddLFxuICBdLFxuICBCbHVlczogW1xuICAgIFswLCAncmdiKDUsMTAsMTcyKSddLFxuICAgIFswLjM1LCAncmdiKDQwLDYwLDE5MCknXSxcbiAgICBbMC41LCAncmdiKDcwLDEwMCwyNDUpJ10sXG4gICAgWzAuNiwgJ3JnYig5MCwxMjAsMjQ1KSddLFxuICAgIFswLjcsICdyZ2IoMTA2LDEzNywyNDcpJ10sXG4gICAgWzEsICdyZ2IoMjIwLDIyMCwyMjApJ10sXG4gIF0sXG4gIFBpY25pYzogW1xuICAgIFswLCAncmdiKDAsMCwyNTUpJ10sXG4gICAgWzAuMSwgJ3JnYig1MSwxNTMsMjU1KSddLFxuICAgIFswLjIsICdyZ2IoMTAyLDIwNCwyNTUpJ10sXG4gICAgWzAuMywgJ3JnYigxNTMsMjA0LDI1NSknXSxcbiAgICBbMC40LCAncmdiKDIwNCwyMDQsMjU1KSddLFxuICAgIFswLjUsICdyZ2IoMjU1LDI1NSwyNTUpJ10sXG4gICAgWzAuNiwgJ3JnYigyNTUsMjA0LDI1NSknXSxcbiAgICBbMC43LCAncmdiKDI1NSwxNTMsMjU1KSddLFxuICAgIFswLjgsICdyZ2IoMjU1LDEwMiwyMDQpJ10sXG4gICAgWzAuOSwgJ3JnYigyNTUsMTAyLDEwMiknXSxcbiAgICBbMSwgJ3JnYigyNTUsMCwwKSddLFxuICBdLFxuICBSYWluYm93OiBbXG4gICAgWzAsICdyZ2IoMTUwLDAsOTApJ10sXG4gICAgWzAuMTI1LCAncmdiKDAsMCwyMDApJ10sXG4gICAgWzAuMjUsICdyZ2IoMCwyNSwyNTUpJ10sXG4gICAgWzAuMzc1LCAncmdiKDAsMTUyLDI1NSknXSxcbiAgICBbMC41LCAncmdiKDQ0LDI1NSwxNTApJ10sXG4gICAgWzAuNjI1LCAncmdiKDE1MSwyNTUsMCknXSxcbiAgICBbMC43NSwgJ3JnYigyNTUsMjM0LDApJ10sXG4gICAgWzAuODc1LCAncmdiKDI1NSwxMTEsMCknXSxcbiAgICBbMSwgJ3JnYigyNTUsMCwwKSddLFxuICBdLFxuICBQb3J0bGFuZDogW1xuICAgIFswLCAncmdiKDEyLDUxLDEzMSknXSxcbiAgICBbMC4yNSwgJ3JnYigxMCwxMzYsMTg2KSddLFxuICAgIFswLjUsICdyZ2IoMjQyLDIxMSw1NiknXSxcbiAgICBbMC43NSwgJ3JnYigyNDIsMTQzLDU2KSddLFxuICAgIFsxLCAncmdiKDIxNywzMCwzMCknXSxcbiAgXSxcbiAgSmV0OiBbXG4gICAgWzAsICdyZ2IoMCwwLDEzMSknXSxcbiAgICBbMC4xMjUsICdyZ2IoMCw2MCwxNzApJ10sXG4gICAgWzAuMzc1LCAncmdiKDUsMjU1LDI1NSknXSxcbiAgICBbMC42MjUsICdyZ2IoMjU1LDI1NSwwKSddLFxuICAgIFswLjg3NSwgJ3JnYigyNTAsMCwwKSddLFxuICAgIFsxLCAncmdiKDEyOCwwLDApJ10sXG4gIF0sXG4gIEhvdDogW1xuICAgIFswLCAncmdiKDAsMCwwKSddLFxuICAgIFswLjMsICdyZ2IoMjMwLDAsMCknXSxcbiAgICBbMC42LCAncmdiKDI1NSwyMTAsMCknXSxcbiAgICBbMSwgJ3JnYigyNTUsMjU1LDI1NSknXSxcbiAgXSxcbiAgQmxhY2tib2R5OiBbXG4gICAgWzAsICdyZ2IoMCwwLDApJ10sXG4gICAgWzAuMiwgJ3JnYigyMzAsMCwwKSddLFxuICAgIFswLjQsICdyZ2IoMjMwLDIxMCwwKSddLFxuICAgIFswLjcsICdyZ2IoMjU1LDI1NSwyNTUpJ10sXG4gICAgWzEsICdyZ2IoMTYwLDIwMCwyNTUpJ10sXG4gIF0sXG4gIEVhcnRoOiBbXG4gICAgWzAsICdyZ2IoMCwwLDEzMCknXSxcbiAgICBbMC4xLCAncmdiKDAsMTgwLDE4MCknXSxcbiAgICBbMC4yLCAncmdiKDQwLDIxMCw0MCknXSxcbiAgICBbMC40LCAncmdiKDIzMCwyMzAsNTApJ10sXG4gICAgWzAuNiwgJ3JnYigxMjAsNzAsMjApJ10sXG4gICAgWzEsICdyZ2IoMjU1LDI1NSwyNTUpJ10sXG4gIF0sXG4gIEVsZWN0cmljOiBbXG4gICAgWzAsICdyZ2IoMCwwLDApJ10sXG4gICAgWzAuMTUsICdyZ2IoMzAsMCwxMDApJ10sXG4gICAgWzAuNCwgJ3JnYigxMjAsMCwxMDApJ10sXG4gICAgWzAuNiwgJ3JnYigxNjAsOTAsMCknXSxcbiAgICBbMC44LCAncmdiKDIzMCwyMDAsMCknXSxcbiAgICBbMSwgJ3JnYigyNTUsMjUwLDIyMCknXSxcbiAgXSxcbiAgVmlyaWRpczogW1xuICAgIFswLCAnIzQ0MDE1NCddLFxuICAgIFswLjA2Mjc0NTA5ODAzOTIxNTY5LCAnIzQ4MTg2YSddLFxuICAgIFswLjEyNTQ5MDE5NjA3ODQzMTM3LCAnIzQ3MmQ3YiddLFxuICAgIFswLjE4ODIzNTI5NDExNzY0NzA2LCAnIzQyNDA4NiddLFxuICAgIFswLjI1MDk4MDM5MjE1Njg2Mjc0LCAnIzNiNTI4YiddLFxuICAgIFswLjMxMzcyNTQ5MDE5NjA3ODQsICcjMzM2MzhkJ10sXG4gICAgWzAuMzc2NDcwNTg4MjM1Mjk0MSwgJyMyYzcyOGUnXSxcbiAgICBbMC40MzkyMTU2ODYyNzQ1MDk4LCAnIzI2ODI4ZSddLFxuICAgIFswLjUwMTk2MDc4NDMxMzcyNTUsICcjMjE5MThjJ10sXG4gICAgWzAuNTY0NzA1ODgyMzUyOTQxMiwgJyMxZmEwODgnXSxcbiAgICBbMC42Mjc0NTA5ODAzOTIxNTY5LCAnIzI4YWU4MCddLFxuICAgIFswLjY5MDE5NjA3ODQzMTM3MjUsICcjM2ZiYzczJ10sXG4gICAgWzAuNzUyOTQxMTc2NDcwNTg4MiwgJyM1ZWM5NjInXSxcbiAgICBbMC44MTU2ODYyNzQ1MDk4MDM5LCAnIzg0ZDQ0YiddLFxuICAgIFswLjg3ODQzMTM3MjU0OTAxOTYsICcjYWRkYzMwJ10sXG4gICAgWzAuOTQxMTc2NDcwNTg4MjM1MywgJyNkOGUyMTknXSxcbiAgICBbMSwgJyNmZGU3MjUnXSxcbiAgXSxcbiAgQ2l2aWRpczogW1xuICAgIFswLCAncmdiKDAsMzIsNzYpJ10sXG4gICAgWzAuMDU4ODI0LCAncmdiKDAsNDIsMTAyKSddLFxuICAgIFswLjExNzY0NywgJ3JnYigwLDUyLDExMCknXSxcbiAgICBbMC4xNzY0NzEsICdyZ2IoMzksNjMsMTA4KSddLFxuICAgIFswLjIzNTI5NCwgJ3JnYig2MCw3NCwxMDcpJ10sXG4gICAgWzAuMjk0MTE4LCAncmdiKDc2LDg1LDEwNyknXSxcbiAgICBbMC4zNTI5NDEsICdyZ2IoOTEsOTUsMTA5KSddLFxuICAgIFswLjQxMTc2NSwgJ3JnYigxMDQsMTA2LDExMiknXSxcbiAgICBbMC40NzA1ODgsICdyZ2IoMTE3LDExNywxMTcpJ10sXG4gICAgWzAuNTI5NDEyLCAncmdiKDEzMSwxMjksMTIwKSddLFxuICAgIFswLjU4ODIzNSwgJ3JnYigxNDYsMTQwLDEyMCknXSxcbiAgICBbMC42NDcwNTksICdyZ2IoMTYxLDE1MiwxMTgpJ10sXG4gICAgWzAuNzA1ODgyLCAncmdiKDE3NiwxNjUsMTE0KSddLFxuICAgIFswLjc2NDcwNiwgJ3JnYigxOTIsMTc3LDEwOSknXSxcbiAgICBbMC44MjM1MjksICdyZ2IoMjA5LDE5MSwxMDIpJ10sXG4gICAgWzAuODgyMzUzLCAncmdiKDIyNSwyMDQsOTIpJ10sXG4gICAgWzAuOTQxMTc2LCAncmdiKDI0MywyMTksNzkpJ10sXG4gICAgWzEsICdyZ2IoMjU1LDIzMyw2OSknXSxcbiAgXSxcbn07XG5cbi8qKlxuICogQSAyNTYtZW50cnkgUkdCIHRhYmxlIChhIGBuYXBhcmktanMvY29sb3JtYXBzYCBgKl9MVVRgLCBgVWludDhBcnJheSg3NjgpYCkgYXMgYW4gaW5saW5lXG4gKiBQbG90bHkgY29sb3JzY2FsZTogb25lIGBbaSAvIDI1NSwgJ3JnYihyLCBnLCBiKSddYCBzdG9wIHBlciBlbnRyeSwgdGhlIHNoYXBlIHRoZSBjb2xvcm1hcFxuICogdHJlZSBoYW5kcyB0byBQbG90bHkncyBgY29sb3JzY2FsZWAgYW5kIHRvIHtAbGluayBidWlsZENvbG9ybWFwTHV0fS4gU3RvcHMgYXJlIHJvdW5kZWQgdG9cbiAqIHNpeCBkZWNpbWFscywgYXMgdGhlIGNvbG9ybWFwIGFzc2V0IHRoaXMgcmVwbGFjZXMgY2FycmllZCB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbHV0U2NhbGUobHV0OiBBcnJheUxpa2U8bnVtYmVyPik6IFN0b3BbXSB7XG4gIGNvbnN0IG4gPSBNYXRoLmZsb29yKGx1dC5sZW5ndGggLyAzKTtcbiAgY29uc3Qgc2NhbGU6IFN0b3BbXSA9IG5ldyBBcnJheShuKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBzY2FsZVtpXSA9IFtOdW1iZXIoKGkgLyAobiAtIDEpKS50b0ZpeGVkKDYpKSwgYHJnYigke2x1dFtpICogM119LCAke2x1dFtpICogMyArIDFdfSwgJHtsdXRbaSAqIDMgKyAyXX0pYF07XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG4vKiogUGFyc2UgYSBQbG90bHkgY29sb3JzY2FsZSBjb2xvciAoYHJnYihyLGcsYilgIG9yIGAjcnJnZ2JiYC9gI3JnYmApIHRvIFJHQjsgYmxhY2sgd2hlbiB1bnBhcnNlYWJsZS4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29sb3IoYzogc3RyaW5nKTogUmdiIHtcbiAgcmV0dXJuIHBhcnNlQ3NzQ29sb3IoYykgPz8gWzAsIDAsIDBdO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgMjU2LWVudHJ5IFJHQiBsb29rdXAgdGFibGUgZnJvbSBhIGBDT0xPUk1BUF9PUFRJT05TYCB2YWx1ZSwgaW5kZXhlZCBieVxuICogZ3JheXNjYWxlIHZhbHVlIDDigJMyNTUuIFJldHVybnMgbnVsbCBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgcmVzb2x2ZWQgdG8gYSBzY2FsZS5cbiAqXG4gKiBUaGUgUGxvdGx5IHNpZGUgKHRoZSB2YWx1ZSdzIGZvcm1zLCB0aGUgY29sb3VyIHN0cmluZ3MsIHRoZSBidWlsdC1pbiBuYW1lcykgaXNcbiAqIHBhcnNlZCBoZXJlOyB0aGUgaW50ZXJwb2xhdGlvbiBpcyBuYXBhcmktanMncyBvd24gYENvbG9ybWFwYCBzYW1wbGVkIGJ5IGBidWlsZEx1dGAsXG4gKiBzbyBib3RoIGJhY2tlbmRzIHJhbXAgYSBzY2FsZSB0aGUgc2FtZSB3YXkuXG4gKiBAcGFyYW0gdmFsdWUgIGFycmF5IG9mIGBbc3RvcCwgY29sb3JdYCBwYWlycywgYSBQbG90bHkgYnVpbHQtaW4gbmFtZSBzdHJpbmcsIG9yIGFcbiAqICAgMjU2LWVudHJ5IFJHQiBgVWludDhBcnJheSg3NjgpYFxuICogQHBhcmFtIHJldmVyc2UgIG1pcnJvciB0aGUgc2NhbGUgKG1hdGNoZXMgUGxvdGx5J3MgYHJldmVyc2VzY2FsZWApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvbG9ybWFwTHV0KHZhbHVlOiB1bmtub3duLCByZXZlcnNlID0gZmFsc2UpOiBSZ2JbXSB8IG51bGwge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHZhbHVlLmxlbmd0aCA9PT0gNzY4KSB7XG4gICAgY29uc3QgbHV0OiBSZ2JbXSA9IG5ldyBBcnJheSgyNTYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIGx1dFtpXSA9IFt2YWx1ZVtpICogM10sIHZhbHVlW2kgKiAzICsgMV0sIHZhbHVlW2kgKiAzICsgMl1dO1xuICAgIGlmIChyZXZlcnNlKSBsdXQucmV2ZXJzZSgpO1xuICAgIHJldHVybiBsdXQ7XG4gIH1cbiAgbGV0IHNjYWxlOiBTdG9wW10gfCBudWxsID0gbnVsbDtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSBzY2FsZSA9IHZhbHVlIGFzIFN0b3BbXTtcbiAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgc2NhbGUgPSBCVUlMVElOX1NDQUxFU1t2YWx1ZV0gPz8gbnVsbDtcbiAgaWYgKCFzY2FsZSB8fCBzY2FsZS5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb2xvcm1hcCA9IG5ldyBDb2xvcm1hcChcbiAgICAncGxvdGx5LXNjYWxlJyxcbiAgICBzY2FsZS5tYXAoKHMpID0+IHtcbiAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IHBhcnNlQ29sb3IoU3RyaW5nKHNbMV0pKTtcbiAgICAgIHJldHVybiB7IHQ6IE51bWJlcihzWzBdKSwgY29sb3I6IFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1XSB9O1xuICAgIH0pLFxuICApO1xuICBjb25zdCByZ2JhID0gYnVpbGRMdXQoY29sb3JtYXAsIDI1Nik7XG4gIGNvbnN0IGx1dDogUmdiW10gPSBuZXcgQXJyYXkoMjU2KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykgbHV0W2ldID0gW3JnYmFbaSAqIDRdLCByZ2JhW2kgKiA0ICsgMV0sIHJnYmFbaSAqIDQgKyAyXV07XG4gIGlmIChyZXZlcnNlKSBsdXQucmV2ZXJzZSgpO1xuICByZXR1cm4gbHV0O1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZS10cmFuc2Zvcm0uY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5cbi8qKlxuICogVGhlIHZpZXdwb3J0IG1hdGggdGhlIG9uLWNhbnZhcyB0b29scyAod2FuZCwgdmVydGV4IGVyYXNlcikgbmVlZCwgYWJzdHJhY3RlZFxuICogYXdheSBmcm9tIGFueSBzcGVjaWZpYyBiYWNrZW5kLiBQbG90bHkgaW1wbGVtZW50cyBpdCBvdmVyIGl0cyBheGlzIG9iamVjdHNcbiAqIChgX2Z1bGxMYXlvdXQueGF4aXMveWF4aXNgKSwgT3BlblNlYWRyYWdvbiBvdmVyIGl0cyB2aWV3cG9ydCBBUEkuIFRoaXMgaXMgd2hhdFxuICogbGV0cyB0aGUgdG9vbHMgcnVuIG9uIGVpdGhlciBiYWNrZW5kLlxuICpcbiAqIFwiRGF0YSBjb29yZGluYXRlc1wiIGFyZSB0aGUgYmFja2VuZCdzIHNoYXBlIGNvb3JkaW5hdGUgc3BhY2U6IFBsb3RseSBkYXRhXG4gKiBjb29yZHMgZm9yIFBsb3RseSwgaW1hZ2UtcGl4ZWwgY29vcmRzIGZvciBPcGVuU2VhZHJhZ29uLiBUaGUgdG9vbHMgY29udmVydFxuICogZGF0YSAtPiBpbWFnZS1tYXRyaXggdXNpbmcgdGhlIHBlci1pbWFnZSByYXRpbyB0aGV5IGFscmVhZHkgZ2V0IGZyb20gdGhlIGhvc3RcbiAqIChgZ2V0Q2FjaGVkSW1hZ2VEYXRhKCkucmF0aW9zYCAvIGBnZXRDYWNoZWRJbWFnZVJhdGlvKClgKSwgc28gdGhhdCBkaXZpc2lvblxuICogc3RheXMgaW4gdGhlIHRvb2wgYW5kIHRoZSB0cmFuc2Zvcm0gc3RheXMgcHVyZWx5IHNjcmVlbjwtPmRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvb3JkaW5hdGVUcmFuc2Zvcm0ge1xuICAvKiogQ2xpZW50IChtb3VzZSBldmVudCkgcGl4ZWwgLT4gZGF0YSBjb29yZGluYXRlcy4gKi9cbiAgY2xpZW50VG9EYXRhKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICAvKiogQSBsZW5ndGggaW4gZGF0YSBjb29yZGluYXRlcyAtPiBsZW5ndGggaW4gc2NyZWVuIHBpeGVscy4gKi9cbiAgZGF0YUxlbmd0aFRvU2NyZWVuKGRhdGFMZW5ndGg6IG51bWJlcik6IG51bWJlcjtcbiAgLyoqIFRydWUgb25jZSB0aGUgdmlld3BvcnQgaXMgbGFpZCBvdXQgYW5kIGNvbnZlcnNpb25zIGFyZSB2YWxpZC4gKi9cbiAgaXNSZWFkeSgpOiBib29sZWFuO1xufVxuXG4vKiogV2hhdCBhIGJhY2tlbmQgc3VwcGxpZXMgc28gdGhlIHRvb2xzIGNhbiBhdHRhY2ggKyBjb252ZXJ0IGNvb3JkaW5hdGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVmlld3BvcnRIb3N0IHtcbiAgLyoqIFRoZSBlbGVtZW50IHRoZSB0b29sJ3MgY2FudmFzIG92ZXJsYXkgYXR0YWNoZXMgdG8gKGZpbGxzIHRoZSBwbG90IGFyZWEpLiAqL1xuICBnZXRPdmVybGF5Q29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgLyoqIExpdmUgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gZm9yIHRoZSBjdXJyZW50IHZpZXdwb3J0IHN0YXRlLiAqL1xuICBnZXRDb29yZGluYXRlVHJhbnNmb3JtKCk6IElDb29yZGluYXRlVHJhbnNmb3JtO1xufVxuXG4vKipcbiAqIFJlZ2lvbiByZWFkL3dyaXRlIGFjY2VzcyBmb3IgdGhlIG9uLWNhbnZhcyB0b29scywgaW4gdGhlIGJhY2tlbmQtbmV1dHJhbFxuICoge0BsaW5rIFJlZ2lvbn0gbW9kZWwg4oCUIHNvIHRoZSB3YW5kIGFuZCB2ZXJ0ZXggZXJhc2VyIG9wZXJhdGUgb24gcmVnaW9ucywgbm90XG4gKiBhIGJhY2tlbmQncyBvd24gc2hhcGUgcmVwcmVzZW50YXRpb24uIEJvdGggYmFja2VuZHMgaW1wbGVtZW50IHRoaXMgYnlcbiAqIGRlbGVnYXRpbmcgdG8gdGhlIHNoYXJlZCBSZWdpb25TdG9yZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVnaW9uRGF0YUhvc3Qge1xuICAvKiogQ3VycmVudCByZWdpb25zIChuZXV0cmFsIG1vZGVsKS4gKi9cbiAgZ2V0UmVnaW9ucygpOiBSZWdpb25bXTtcbiAgLyoqIENvbW1pdCB0aGUgKHBvc3NpYmx5IG11dGF0ZWQpIHJlZ2lvbiBzZXQ7IHRoZSBiYWNrZW5kIHJlbmRlcnMgKyBlbWl0cy4gKi9cbiAgc2V0UmVnaW9ucyhyZWdpb25zOiBSZWdpb25bXSk6IHZvaWQ7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZS10cmFuc2Zvcm0uY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9jb29yZGluYXRlLXRyYW5zZm9ybS5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVnaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3JlZ2lvbic7XG5cbi8qKlxuICogVGhlIHZpZXdwb3J0IG1hdGggdGhlIG9uLWNhbnZhcyB0b29scyAod2FuZCwgdmVydGV4IGVyYXNlcikgbmVlZCwgYWJzdHJhY3RlZFxuICogYXdheSBmcm9tIGFueSBzcGVjaWZpYyBiYWNrZW5kLiBQbG90bHkgaW1wbGVtZW50cyBpdCBvdmVyIGl0cyBheGlzIG9iamVjdHNcbiAqIChgX2Z1bGxMYXlvdXQueGF4aXMveWF4aXNgKSwgT3BlblNlYWRyYWdvbiBvdmVyIGl0cyB2aWV3cG9ydCBBUEkuIFRoaXMgaXMgd2hhdFxuICogbGV0cyB0aGUgdG9vbHMgcnVuIG9uIGVpdGhlciBiYWNrZW5kLlxuICpcbiAqIFwiRGF0YSBjb29yZGluYXRlc1wiIGFyZSB0aGUgYmFja2VuZCdzIHNoYXBlIGNvb3JkaW5hdGUgc3BhY2U6IFBsb3RseSBkYXRhXG4gKiBjb29yZHMgZm9yIFBsb3RseSwgaW1hZ2UtcGl4ZWwgY29vcmRzIGZvciBPcGVuU2VhZHJhZ29uLiBUaGUgdG9vbHMgY29udmVydFxuICogZGF0YSAtPiBpbWFnZS1tYXRyaXggdXNpbmcgdGhlIHBlci1heGlzIHJhdGlvcyB0aGV5IGFscmVhZHkgZ2V0IGZyb20gdGhlIGhvc3RcbiAqIChgZ2V0Q2FjaGVkSW1hZ2VEYXRhKCkucmF0aW9zYCwgc2VlIGBNYXRyaXhGcmFtZWApLCBzbyB0aGF0IGRpdmlzaW9uIHN0YXlzIGluXG4gKiB0aGUgdG9vbCBhbmQgdGhlIHRyYW5zZm9ybSBzdGF5cyBwdXJlbHkgc2NyZWVuPC0+ZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29vcmRpbmF0ZVRyYW5zZm9ybSB7XG4gIC8qKiBDbGllbnQgKG1vdXNlIGV2ZW50KSBwaXhlbCAtPiBkYXRhIGNvb3JkaW5hdGVzLiAqL1xuICBjbGllbnRUb0RhdGEoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIC8qKiBBIGxlbmd0aCBpbiBkYXRhIGNvb3JkaW5hdGVzIC0+IGxlbmd0aCBpbiBzY3JlZW4gcGl4ZWxzLiAqL1xuICBkYXRhTGVuZ3RoVG9TY3JlZW4oZGF0YUxlbmd0aDogbnVtYmVyKTogbnVtYmVyO1xuICAvKiogVHJ1ZSBvbmNlIHRoZSB2aWV3cG9ydCBpcyBsYWlkIG91dCBhbmQgY29udmVyc2lvbnMgYXJlIHZhbGlkLiAqL1xuICBpc1JlYWR5KCk6IGJvb2xlYW47XG59XG5cbi8qKiBXaGF0IGEgYmFja2VuZCBzdXBwbGllcyBzbyB0aGUgdG9vbHMgY2FuIGF0dGFjaCArIGNvbnZlcnQgY29vcmRpbmF0ZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIElWaWV3cG9ydEhvc3Qge1xuICAvKiogVGhlIGVsZW1lbnQgdGhlIHRvb2wncyBjYW52YXMgb3ZlcmxheSBhdHRhY2hlcyB0byAoZmlsbHMgdGhlIHBsb3QgYXJlYSkuICovXG4gIGdldE92ZXJsYXlDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAvKiogTGl2ZSBjb29yZGluYXRlIHRyYW5zZm9ybSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQgc3RhdGUuICovXG4gIGdldENvb3JkaW5hdGVUcmFuc2Zvcm0oKTogSUNvb3JkaW5hdGVUcmFuc2Zvcm07XG59XG5cbi8qKlxuICogUmVnaW9uIHJlYWQvd3JpdGUgYWNjZXNzIGZvciB0aGUgb24tY2FudmFzIHRvb2xzLCBpbiB0aGUgYmFja2VuZC1uZXV0cmFsXG4gKiB7QGxpbmsgUmVnaW9ufSBtb2RlbCDigJQgc28gdGhlIHdhbmQgYW5kIHZlcnRleCBlcmFzZXIgb3BlcmF0ZSBvbiByZWdpb25zLCBub3RcbiAqIGEgYmFja2VuZCdzIG93biBzaGFwZSByZXByZXNlbnRhdGlvbi4gQm90aCBiYWNrZW5kcyBpbXBsZW1lbnQgdGhpcyBieVxuICogZGVsZWdhdGluZyB0byB0aGUgc2hhcmVkIFJlZ2lvblN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWdpb25EYXRhSG9zdCB7XG4gIC8qKiBDdXJyZW50IHJlZ2lvbnMgKG5ldXRyYWwgbW9kZWwpLiAqL1xuICBnZXRSZWdpb25zKCk6IFJlZ2lvbltdO1xuICAvKiogQ29tbWl0IHRoZSAocG9zc2libHkgbXV0YXRlZCkgcmVnaW9uIHNldDsgdGhlIGJhY2tlbmQgcmVuZGVycyArIGVtaXRzLiAqL1xuICBzZXRSZWdpb25zKHJlZ2lvbnM6IFJlZ2lvbltdKTogdm9pZDtcbn1cbiJdfQ==