@kepler.gl/components 3.0.0-alpha.1 → 3.0.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 (418) hide show
  1. package/dist/bottom-widget.js +1 -21
  2. package/dist/common/action-panel.js +1 -21
  3. package/dist/common/animation-control/animation-control.js +1 -21
  4. package/dist/common/animation-control/animation-controller.js +1 -21
  5. package/dist/common/animation-control/animation-speed-slider.js +1 -21
  6. package/dist/common/animation-control/animation-window-control.js +3 -21
  7. package/dist/common/animation-control/floating-time-display.js +1 -21
  8. package/dist/common/animation-control/play-control.js +3 -21
  9. package/dist/common/animation-control/playback-controls.js +1 -21
  10. package/dist/common/animation-control/reset-control.js +3 -21
  11. package/dist/common/animation-control/speed-control.js +1 -21
  12. package/dist/common/animation-control/window-action-control.js +3 -21
  13. package/dist/common/checkbox.js +1 -21
  14. package/dist/common/color-legend.js +1 -21
  15. package/dist/common/data-table/button.js +1 -21
  16. package/dist/common/data-table/canvas.js +1 -21
  17. package/dist/common/data-table/cell-size.js +1 -21
  18. package/dist/common/data-table/display-format.js +1 -21
  19. package/dist/common/data-table/grid.js +1 -21
  20. package/dist/common/data-table/header-cell.js +1 -21
  21. package/dist/common/data-table/index.js +1 -21
  22. package/dist/common/data-table/option-dropdown.js +1 -21
  23. package/dist/common/dataset-label.js +1 -21
  24. package/dist/common/error-boundary.js +1 -21
  25. package/dist/common/field-selector.d.ts +1 -0
  26. package/dist/common/field-selector.js +3 -21
  27. package/dist/common/field-token.d.ts +4 -0
  28. package/dist/common/field-token.js +1 -21
  29. package/dist/common/file-uploader/file-drop.js +1 -21
  30. package/dist/common/file-uploader/file-upload-progress.js +1 -21
  31. package/dist/common/file-uploader/file-upload.js +1 -21
  32. package/dist/common/file-uploader/upload-button.js +1 -21
  33. package/dist/common/flex-container.d.ts +3 -0
  34. package/dist/common/flex-container.js +23 -0
  35. package/dist/common/histogram-plot.js +1 -21
  36. package/dist/common/icon-button.d.ts +1 -1
  37. package/dist/common/icon-button.js +1 -21
  38. package/dist/common/icons/add.js +1 -21
  39. package/dist/common/icons/anchor_window.js +6 -22
  40. package/dist/common/icons/arrow-down-alt.js +1 -21
  41. package/dist/common/icons/arrow-down-small.d.ts +14 -0
  42. package/dist/common/icons/arrow-down-small.js +72 -0
  43. package/dist/common/icons/arrow-down-solid.js +1 -21
  44. package/dist/common/icons/arrow-down.js +1 -21
  45. package/dist/common/icons/arrow-left.js +1 -21
  46. package/dist/common/icons/arrow-right.js +1 -21
  47. package/dist/common/icons/arrow-up-alt.js +1 -21
  48. package/dist/common/icons/arrow-up-solid.js +1 -21
  49. package/dist/common/icons/arrow-up.js +1 -21
  50. package/dist/common/icons/base.js +1 -21
  51. package/dist/common/icons/bug.js +1 -21
  52. package/dist/common/icons/calendar.d.ts +10 -0
  53. package/dist/common/icons/calendar.js +66 -0
  54. package/dist/common/icons/cancel.js +1 -21
  55. package/dist/common/icons/checkmark.js +1 -21
  56. package/dist/common/icons/clipboard.js +1 -21
  57. package/dist/common/icons/clock.js +1 -21
  58. package/dist/common/icons/close.js +1 -21
  59. package/dist/common/icons/code-alt.js +1 -21
  60. package/dist/common/icons/copy.js +1 -21
  61. package/dist/common/icons/crosshairs.js +1 -21
  62. package/dist/common/icons/cube-3d.js +1 -21
  63. package/dist/common/icons/cursor-click.js +1 -21
  64. package/dist/common/icons/cursor-point.js +1 -21
  65. package/dist/common/icons/data-table.js +1 -21
  66. package/dist/common/icons/db.js +1 -21
  67. package/dist/common/icons/delete.js +1 -21
  68. package/dist/common/icons/docs.js +1 -21
  69. package/dist/common/icons/drag-n-drop.js +1 -21
  70. package/dist/common/icons/draw-polygon.js +1 -21
  71. package/dist/common/icons/effects/brightness-contrast.d.ts +14 -0
  72. package/dist/common/icons/effects/brightness-contrast.js +88 -0
  73. package/dist/common/icons/effects/color-halftone.d.ts +14 -0
  74. package/dist/common/icons/effects/color-halftone.js +127 -0
  75. package/dist/common/icons/effects/dot-screen.d.ts +14 -0
  76. package/dist/common/icons/effects/dot-screen.js +122 -0
  77. package/dist/common/icons/effects/edge-work.d.ts +14 -0
  78. package/dist/common/icons/effects/edge-work.js +81 -0
  79. package/dist/common/icons/effects/hexagonal-pixelate.d.ts +14 -0
  80. package/dist/common/icons/effects/hexagonal-pixelate.js +148 -0
  81. package/dist/common/icons/effects/hue-saturation.d.ts +14 -0
  82. package/dist/common/icons/effects/hue-saturation.js +79 -0
  83. package/dist/common/icons/effects/ink.d.ts +14 -0
  84. package/dist/common/icons/effects/ink.js +78 -0
  85. package/dist/common/icons/effects/light-and-shadow.d.ts +14 -0
  86. package/dist/common/icons/effects/light-and-shadow.js +67 -0
  87. package/dist/common/icons/effects/magic-wand.d.ts +14 -0
  88. package/dist/common/icons/effects/magic-wand.js +79 -0
  89. package/dist/common/icons/effects/magnify.d.ts +14 -0
  90. package/dist/common/icons/effects/magnify.js +86 -0
  91. package/dist/common/icons/effects/noise.d.ts +14 -0
  92. package/dist/common/icons/effects/noise.js +132 -0
  93. package/dist/common/icons/effects/sepia.d.ts +14 -0
  94. package/dist/common/icons/effects/sepia.js +79 -0
  95. package/dist/common/icons/effects/tilt-shift.d.ts +14 -0
  96. package/dist/common/icons/effects/tilt-shift.js +88 -0
  97. package/dist/common/icons/effects/triangle-blur.d.ts +14 -0
  98. package/dist/common/icons/effects/triangle-blur.js +83 -0
  99. package/dist/common/icons/effects/vibrance.d.ts +14 -0
  100. package/dist/common/icons/effects/vibrance.js +79 -0
  101. package/dist/common/icons/effects/vignette.d.ts +14 -0
  102. package/dist/common/icons/effects/vignette.js +72 -0
  103. package/dist/common/icons/effects/zoom-blur.d.ts +14 -0
  104. package/dist/common/icons/effects/zoom-blur.js +107 -0
  105. package/dist/common/icons/email.js +1 -21
  106. package/dist/common/icons/expand.js +1 -21
  107. package/dist/common/icons/eye-seen.js +1 -21
  108. package/dist/common/icons/eye-unseen.js +1 -21
  109. package/dist/common/icons/file-type.js +1 -21
  110. package/dist/common/icons/file.js +1 -21
  111. package/dist/common/icons/files.js +1 -21
  112. package/dist/common/icons/filter-funnel.js +1 -21
  113. package/dist/common/icons/free-window.js +6 -22
  114. package/dist/common/icons/gear.js +1 -21
  115. package/dist/common/icons/globe.d.ts +15 -0
  116. package/dist/common/icons/globe.js +72 -0
  117. package/dist/common/icons/hash.js +1 -21
  118. package/dist/common/icons/histogram.js +1 -21
  119. package/dist/common/icons/index.d.ts +25 -0
  120. package/dist/common/icons/index.js +201 -21
  121. package/dist/common/icons/info.js +1 -21
  122. package/dist/common/icons/layers.js +1 -21
  123. package/dist/common/icons/left-arrow.js +1 -21
  124. package/dist/common/icons/legend.js +1 -21
  125. package/dist/common/icons/line-chart.js +1 -21
  126. package/dist/common/icons/location-marker.d.ts +14 -0
  127. package/dist/common/icons/location-marker.js +77 -0
  128. package/dist/common/icons/login.js +1 -21
  129. package/dist/common/icons/logout.js +1 -21
  130. package/dist/common/icons/map-icon.js +1 -21
  131. package/dist/common/icons/map.js +1 -21
  132. package/dist/common/icons/messages.js +1 -21
  133. package/dist/common/icons/minus.js +1 -21
  134. package/dist/common/icons/moon.d.ts +14 -0
  135. package/dist/common/icons/moon.js +77 -0
  136. package/dist/common/icons/order-by-dataset.js +6 -22
  137. package/dist/common/icons/order-by-list.js +6 -22
  138. package/dist/common/icons/pause.js +1 -21
  139. package/dist/common/icons/picture.js +1 -21
  140. package/dist/common/icons/pin.js +1 -21
  141. package/dist/common/icons/play.js +1 -21
  142. package/dist/common/icons/polygon.js +1 -21
  143. package/dist/common/icons/rectangle.js +1 -21
  144. package/dist/common/icons/reduce.js +1 -21
  145. package/dist/common/icons/reset.js +1 -21
  146. package/dist/common/icons/rocket.js +1 -21
  147. package/dist/common/icons/save.js +1 -21
  148. package/dist/common/icons/save2.js +1 -21
  149. package/dist/common/icons/search.js +1 -21
  150. package/dist/common/icons/settings.js +1 -21
  151. package/dist/common/icons/share.js +1 -21
  152. package/dist/common/icons/split.js +1 -21
  153. package/dist/common/icons/square-select.js +1 -21
  154. package/dist/common/icons/sun.d.ts +14 -0
  155. package/dist/common/icons/sun.js +93 -0
  156. package/dist/common/icons/sunrise.d.ts +14 -0
  157. package/dist/common/icons/sunrise.js +89 -0
  158. package/dist/common/icons/sunset.d.ts +14 -0
  159. package/dist/common/icons/sunset.js +89 -0
  160. package/dist/common/icons/trash.js +1 -21
  161. package/dist/common/icons/vert-dots.js +1 -21
  162. package/dist/common/icons/vert-three-dots.js +1 -21
  163. package/dist/common/icons/warning-sign.js +1 -21
  164. package/dist/common/icons/warning.js +1 -21
  165. package/dist/common/image-preview.js +1 -21
  166. package/dist/common/index.js +1 -21
  167. package/dist/common/info-helper.js +1 -21
  168. package/dist/common/item-selector/accessor.js +5 -22
  169. package/dist/common/item-selector/chickleted-input.d.ts +1 -0
  170. package/dist/common/item-selector/chickleted-input.js +104 -44
  171. package/dist/common/item-selector/dropdown-list.d.ts +2 -0
  172. package/dist/common/item-selector/dropdown-list.js +10 -25
  173. package/dist/common/item-selector/item-selector.d.ts +3 -0
  174. package/dist/common/item-selector/item-selector.js +11 -23
  175. package/dist/common/item-selector/typeahead.js +1 -21
  176. package/dist/common/line-chart.js +1 -21
  177. package/dist/common/loading-spinner.js +1 -21
  178. package/dist/common/logo.js +1 -21
  179. package/dist/common/map-layer-selector.js +1 -21
  180. package/dist/common/modal.js +25 -28
  181. package/dist/common/portaled.d.ts +15 -2
  182. package/dist/common/portaled.js +1 -21
  183. package/dist/common/progress-bar.js +1 -21
  184. package/dist/common/range-brush.js +1 -21
  185. package/dist/common/range-plot.js +1 -21
  186. package/dist/common/range-slider.d.ts +1 -1
  187. package/dist/common/range-slider.js +1 -21
  188. package/dist/common/slider/mouse-event.js +6 -22
  189. package/dist/common/slider/slider-bar-handle.js +1 -21
  190. package/dist/common/slider/slider-handle.js +1 -21
  191. package/dist/common/slider/slider.js +1 -21
  192. package/dist/common/styled-components.d.ts +3 -3
  193. package/dist/common/styled-components.js +26 -47
  194. package/dist/common/switch.js +1 -21
  195. package/dist/common/time-range-slider-time-title.js +1 -21
  196. package/dist/common/time-range-slider.js +1 -21
  197. package/dist/common/time-slider-marker.js +1 -21
  198. package/dist/common/timeline-slider.js +1 -21
  199. package/dist/common/tippy-tooltip.js +1 -21
  200. package/dist/common/toolbar-item.js +1 -21
  201. package/dist/common/toolbar.js +1 -21
  202. package/dist/common/vertical-toolbar.js +1 -21
  203. package/dist/connect/keplergl-connect.js +6 -22
  204. package/dist/connect/with-local-selector.js +1 -21
  205. package/dist/container.js +1 -21
  206. package/dist/context.d.ts +11 -0
  207. package/dist/context.js +18 -23
  208. package/dist/dnd-context.d.ts +1 -1
  209. package/dist/dnd-context.js +32 -127
  210. package/dist/editor/editor.js +1 -21
  211. package/dist/editor/feature-action-panel.js +28 -79
  212. package/dist/effects/compact-color-picker.d.ts +10 -0
  213. package/dist/effects/compact-color-picker.js +130 -0
  214. package/dist/effects/effect-configurator.d.ts +4 -5
  215. package/dist/effects/effect-configurator.js +183 -118
  216. package/dist/effects/effect-list.js +2 -22
  217. package/dist/effects/effect-manager.d.ts +2 -1
  218. package/dist/effects/effect-manager.js +43 -30
  219. package/dist/effects/effect-panel-header.d.ts +14 -2
  220. package/dist/effects/effect-panel-header.js +82 -50
  221. package/dist/effects/effect-panel.js +30 -43
  222. package/dist/effects/effect-time-configurator.d.ts +14 -7
  223. package/dist/effects/effect-time-configurator.js +258 -109
  224. package/dist/effects/effect-time-selector.d.ts +16 -0
  225. package/dist/effects/effect-time-selector.js +181 -0
  226. package/dist/effects/effect-time-slider.d.ts +34 -0
  227. package/dist/effects/effect-time-slider.js +220 -0
  228. package/dist/effects/effect-type-dropdown-list.d.ts +18 -0
  229. package/dist/effects/effect-type-dropdown-list.js +77 -0
  230. package/dist/effects/effect-type-list-item.d.ts +22 -0
  231. package/dist/effects/effect-type-list-item.js +105 -0
  232. package/dist/effects/effect-type-selector.d.ts +22 -3
  233. package/dist/effects/effect-type-selector.js +58 -83
  234. package/dist/effects/side-panel-title.js +1 -21
  235. package/dist/effects/timezone-selector.d.ts +19 -0
  236. package/dist/effects/timezone-selector.js +71 -0
  237. package/dist/filter-animation-controller.js +3 -21
  238. package/dist/filters/components.js +1 -21
  239. package/dist/filters/filter-panels/filter-panel-with-field-select.js +6 -22
  240. package/dist/filters/filter-panels/multi-select-filter-panel.js +6 -22
  241. package/dist/filters/filter-panels/new-filter-panel.js +6 -22
  242. package/dist/filters/filter-panels/polygon-filter-panel.js +6 -22
  243. package/dist/filters/filter-panels/range-filter-panel.js +6 -22
  244. package/dist/filters/filter-panels/single-select-filter-panel.js +6 -22
  245. package/dist/filters/filter-panels/time-range-filter-panel.js +1 -21
  246. package/dist/filters/filter-panels/types.js +0 -20
  247. package/dist/filters/index.js +1 -21
  248. package/dist/filters/multi-select-filter.js +6 -22
  249. package/dist/filters/polygon-filter.js +6 -22
  250. package/dist/filters/range-filter.js +6 -22
  251. package/dist/filters/single-select-filter.js +6 -22
  252. package/dist/filters/time-range-filter.js +7 -22
  253. package/dist/filters/time-widget-top.js +1 -21
  254. package/dist/filters/time-widget.js +1 -21
  255. package/dist/filters/types.js +0 -20
  256. package/dist/geocoder/geocoder.js +10 -27
  257. package/dist/geocoder-panel.js +1 -21
  258. package/dist/hooks/use-cloud-list-provider.d.ts +11 -0
  259. package/dist/hooks/use-cloud-list-provider.js +57 -0
  260. package/dist/hooks/use-dnd-effects.d.ts +9 -0
  261. package/dist/hooks/use-dnd-effects.js +88 -0
  262. package/dist/hooks/use-dnd-layers.d.ts +9 -0
  263. package/dist/hooks/use-dnd-layers.js +95 -0
  264. package/dist/hooks/use-feature-flags.d.ts +5 -0
  265. package/dist/hooks/use-feature-flags.js +21 -0
  266. package/dist/index.d.ts +10 -1
  267. package/dist/index.js +103 -24
  268. package/dist/injector.js +1 -21
  269. package/dist/kepler-gl.d.ts +2 -1
  270. package/dist/kepler-gl.js +13 -25
  271. package/dist/layer-animation-controller.js +3 -21
  272. package/dist/map/coordinate-info.js +6 -22
  273. package/dist/map/effects/effect-control.d.ts +1 -1
  274. package/dist/map/effects/effect-control.js +9 -28
  275. package/dist/map/layer-hover-info.js +2 -22
  276. package/dist/map/layer-selector-panel.js +6 -22
  277. package/dist/map/lazy-tippy.js +1 -21
  278. package/dist/map/locale-panel.js +6 -22
  279. package/dist/map/map-control-panel.js +1 -21
  280. package/dist/map/map-control-toolbar.js +1 -21
  281. package/dist/map/map-control-tooltip.js +6 -22
  282. package/dist/map/map-control.js +1 -21
  283. package/dist/map/map-draw-panel.js +6 -22
  284. package/dist/map/map-legend-panel.js +6 -22
  285. package/dist/map/map-legend.js +1 -21
  286. package/dist/map/map-popover-content.js +6 -22
  287. package/dist/map/map-popover.js +1 -21
  288. package/dist/map/split-map-button.js +6 -22
  289. package/dist/map/toggle-3d-button.js +6 -22
  290. package/dist/map-container.d.ts +1 -1
  291. package/dist/map-container.js +33 -52
  292. package/dist/map-view-state-context.d.ts +6 -1
  293. package/dist/map-view-state-context.js +34 -33
  294. package/dist/maps-layout.js +1 -21
  295. package/dist/modal-container.d.ts +2 -2
  296. package/dist/modal-container.js +13 -72
  297. package/dist/modals/add-map-style-modal.js +8 -72
  298. package/dist/modals/cloud-components/cloud-header.d.ts +8 -0
  299. package/dist/modals/cloud-components/cloud-header.js +65 -0
  300. package/dist/modals/cloud-components/cloud-item.d.ts +5 -0
  301. package/dist/modals/cloud-components/cloud-item.js +72 -0
  302. package/dist/modals/cloud-components/cloud-item.spec.d.ts +1 -0
  303. package/dist/modals/cloud-components/cloud-item.spec.js +105 -0
  304. package/dist/modals/cloud-components/cloud-maps.d.ts +8 -0
  305. package/dist/modals/cloud-components/cloud-maps.js +63 -0
  306. package/dist/modals/cloud-components/cloud-maps.spec.d.ts +1 -0
  307. package/dist/modals/cloud-components/cloud-maps.spec.js +112 -0
  308. package/dist/modals/cloud-components/provider-loading.d.ts +2 -0
  309. package/dist/modals/cloud-components/provider-loading.js +29 -0
  310. package/dist/modals/cloud-components/provider-select.d.ts +7 -0
  311. package/dist/modals/cloud-components/provider-select.js +40 -0
  312. package/dist/modals/cloud-tile.d.ts +8 -8
  313. package/dist/modals/cloud-tile.js +184 -75
  314. package/dist/modals/data-table-modal.js +1 -21
  315. package/dist/modals/delete-data-modal.js +1 -21
  316. package/dist/modals/error-display.js +15 -26
  317. package/dist/modals/export-data-modal.js +1 -21
  318. package/dist/modals/export-image-modal.js +1 -21
  319. package/dist/modals/export-map-modal/components.js +1 -21
  320. package/dist/modals/export-map-modal/export-html-map.js +1 -21
  321. package/dist/modals/export-map-modal/export-json-map.js +1 -21
  322. package/dist/modals/export-map-modal/export-map-modal.js +6 -22
  323. package/dist/modals/image-modal-container.d.ts +1 -3
  324. package/dist/modals/image-modal-container.js +12 -34
  325. package/dist/modals/load-data-modal.d.ts +0 -5
  326. package/dist/modals/load-data-modal.js +1 -21
  327. package/dist/modals/load-storage-map.d.ts +3 -24
  328. package/dist/modals/load-storage-map.js +69 -282
  329. package/dist/modals/load-storage-map.spec.d.ts +1 -0
  330. package/dist/modals/load-storage-map.spec.js +237 -0
  331. package/dist/modals/loading-dialog.js +1 -21
  332. package/dist/modals/modal-dialog.js +6 -22
  333. package/dist/modals/modal-tabs.js +1 -21
  334. package/dist/modals/overwrite-map-modal.d.ts +2 -2
  335. package/dist/modals/overwrite-map-modal.js +39 -32
  336. package/dist/modals/save-map-modal.d.ts +3 -5
  337. package/dist/modals/save-map-modal.js +99 -119
  338. package/dist/modals/save-map-modal.spec.d.ts +1 -0
  339. package/dist/modals/save-map-modal.spec.js +218 -0
  340. package/dist/modals/share-map-modal.d.ts +1 -5
  341. package/dist/modals/share-map-modal.js +57 -81
  342. package/dist/modals/share-map-modal.spec.d.ts +1 -0
  343. package/dist/modals/share-map-modal.spec.js +202 -0
  344. package/dist/modals/status-panel.js +1 -21
  345. package/dist/modals/storage-map-viewer.js +1 -21
  346. package/dist/notification-panel/notification-item.js +1 -21
  347. package/dist/notification-panel.js +1 -21
  348. package/dist/plot-container.js +7 -27
  349. package/dist/side-panel/add-by-dataset-button.js +1 -21
  350. package/dist/side-panel/cloud-storage-dropdown.js +6 -22
  351. package/dist/side-panel/common/dataset-info.js +1 -21
  352. package/dist/side-panel/common/dataset-tag.js +1 -21
  353. package/dist/side-panel/common/dataset-title.js +1 -21
  354. package/dist/side-panel/common/source-data-catalog.js +1 -21
  355. package/dist/side-panel/common/source-data-selector.js +6 -22
  356. package/dist/side-panel/common/types.js +0 -20
  357. package/dist/side-panel/custom-panel.js +6 -22
  358. package/dist/side-panel/filter-manager.js +1 -21
  359. package/dist/side-panel/filter-panel/add-filter-button.js +6 -22
  360. package/dist/side-panel/filter-panel/filter-panel-header.js +2 -22
  361. package/dist/side-panel/filter-panel/filter-panel.js +1 -21
  362. package/dist/side-panel/interaction-manager.js +6 -22
  363. package/dist/side-panel/interaction-panel/brush-config.js +1 -21
  364. package/dist/side-panel/interaction-panel/interaction-panel.js +1 -21
  365. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +8 -0
  366. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +46 -27
  367. package/dist/side-panel/interaction-panel/tooltip-config.js +41 -52
  368. package/dist/side-panel/layer-manager.d.ts +5 -0
  369. package/dist/side-panel/layer-manager.js +3 -22
  370. package/dist/side-panel/layer-panel/add-layer-button.js +6 -22
  371. package/dist/side-panel/layer-panel/color-palette.js +1 -21
  372. package/dist/side-panel/layer-panel/color-range-selector.js +1 -21
  373. package/dist/side-panel/layer-panel/color-selector.js +1 -21
  374. package/dist/side-panel/layer-panel/column-selector.js +1 -21
  375. package/dist/side-panel/layer-panel/custom-palette.js +1 -21
  376. package/dist/side-panel/layer-panel/custom-picker.js +1 -21
  377. package/dist/side-panel/layer-panel/dataset-layer-group.js +6 -22
  378. package/dist/side-panel/layer-panel/dataset-layer-section.js +1 -21
  379. package/dist/side-panel/layer-panel/dataset-section.js +1 -21
  380. package/dist/side-panel/layer-panel/dimension-scale-selector.js +6 -22
  381. package/dist/side-panel/layer-panel/how-to-button.js +1 -21
  382. package/dist/side-panel/layer-panel/layer-color-selector.js +6 -22
  383. package/dist/side-panel/layer-panel/layer-column-config.js +1 -21
  384. package/dist/side-panel/layer-panel/layer-config-group.js +1 -21
  385. package/dist/side-panel/layer-panel/layer-configurator.js +16 -24
  386. package/dist/side-panel/layer-panel/layer-error-message.js +1 -21
  387. package/dist/side-panel/layer-panel/layer-list.js +1 -21
  388. package/dist/side-panel/layer-panel/layer-panel-header.js +1 -21
  389. package/dist/side-panel/layer-panel/layer-panel.js +1 -21
  390. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +1 -21
  391. package/dist/side-panel/layer-panel/layer-type-list-item.js +1 -21
  392. package/dist/side-panel/layer-panel/layer-type-selector.js +1 -21
  393. package/dist/side-panel/layer-panel/single-color-palette.js +1 -21
  394. package/dist/side-panel/layer-panel/text-label-panel.js +1 -21
  395. package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +1 -21
  396. package/dist/side-panel/layer-panel/vis-config-slider.js +1 -21
  397. package/dist/side-panel/layer-panel/vis-config-switch.js +1 -21
  398. package/dist/side-panel/map-manager.js +1 -21
  399. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +1 -21
  400. package/dist/side-panel/map-style-panel/map-layer-group-item.js +1 -21
  401. package/dist/side-panel/map-style-panel/map-layer-selector.js +1 -21
  402. package/dist/side-panel/map-style-panel/map-style-selector.js +1 -21
  403. package/dist/side-panel/panel-dropdown.js +1 -21
  404. package/dist/side-panel/panel-header-action.js +1 -21
  405. package/dist/side-panel/panel-header.js +2 -21
  406. package/dist/side-panel/panel-tab.js +1 -21
  407. package/dist/side-panel/panel-title.js +1 -21
  408. package/dist/side-panel/panel-toggle.js +1 -21
  409. package/dist/side-panel/panel-view-list-toggle.js +1 -21
  410. package/dist/side-panel/side-bar.js +1 -21
  411. package/dist/side-panel.js +7 -36
  412. package/dist/types.d.ts +2 -4
  413. package/dist/types.js +0 -20
  414. package/package.json +27 -24
  415. package/dist/hooks/useFeatureFlags.d.ts +0 -2
  416. package/dist/hooks/useFeatureFlags.js +0 -38
  417. package/dist/modals/provider-modal-container.d.ts +0 -23
  418. package/dist/modals/provider-modal-container.js +0 -101
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
6
+
7
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+
9
+ var _react = _interopRequireDefault(require("react"));
10
+
11
+ var _react2 = require("@testing-library/react");
12
+
13
+ var _saveMapModal = _interopRequireDefault(require("./save-map-modal"));
14
+
15
+ var _componentJestUtils = require("test/helpers/component-jest-utils");
16
+
17
+ var _useCloudListProvider = require("../hooks/use-cloud-list-provider");
18
+
19
+ var _src = require("@kepler.gl/constants/src");
20
+
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
24
+
25
+ var SaveMapModal = (0, _saveMapModal["default"])();
26
+ var DEFAULT_PROS = {
27
+ mapInfo: {
28
+ title: 'Test Map',
29
+ description: 'test'
30
+ },
31
+ exportImage: jest.fn(),
32
+ isProviderLoading: false,
33
+ providerError: null,
34
+ onUpdateImageSetting: jest.fn(),
35
+ cleanupExportImage: jest.fn(),
36
+ onSetMapInfo: jest.fn(),
37
+ onCancel: jest.fn(),
38
+ onConfirm: jest.fn()
39
+ };
40
+
41
+ var UNDEFINED_MAP_TITLE_PROPS = _objectSpread(_objectSpread({}, DEFAULT_PROS), {}, {
42
+ mapInfo: {
43
+ description: undefined,
44
+ title: undefined
45
+ }
46
+ });
47
+
48
+ var DEFAULT_PROVIDER = {
49
+ name: 'test provider',
50
+ icon: jest.fn(),
51
+ getManagementUrl: jest.fn().mockImplementation(function () {
52
+ return 'provider.url';
53
+ })
54
+ };
55
+ jest.mock('../hooks/use-cloud-list-provider', function () {
56
+ return {
57
+ useCloudListProvider: jest.fn().mockImplementation(function () {
58
+ return {
59
+ provider: null,
60
+ setProvider: jest.fn(),
61
+ cloudProviders: []
62
+ };
63
+ })
64
+ };
65
+ });
66
+ describe('SaveMapModal', function () {
67
+ afterEach(function () {
68
+ jest.clearAllMocks();
69
+ });
70
+ test('renders SaveMapModal component with provider set to null and map title set', function () {
71
+ var _renderWithTheme = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, DEFAULT_PROS)),
72
+ getByText = _renderWithTheme.getByText;
73
+
74
+ var confirmButton = getByText('modal.button.save');
75
+ expect(confirmButton).toBeInTheDocument();
76
+ expect(confirmButton).toBeDisabled();
77
+ });
78
+ test('renders SaveMapModal component with provider set to null and map title not set', function () {
79
+ var _renderWithTheme2 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, UNDEFINED_MAP_TITLE_PROPS)),
80
+ getByText = _renderWithTheme2.getByText;
81
+
82
+ var confirmButton = getByText('modal.button.save');
83
+ expect(confirmButton).toBeInTheDocument();
84
+ expect(confirmButton).toBeDisabled();
85
+ });
86
+ test('renders SaveMapModal component with provider correctly set and map title not set', function () {
87
+ _useCloudListProvider.useCloudListProvider.mockImplementation(function () {
88
+ return {
89
+ provider: DEFAULT_PROVIDER,
90
+ setProvider: jest.fn(),
91
+ cloudProviders: []
92
+ };
93
+ });
94
+
95
+ var _renderWithTheme3 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, UNDEFINED_MAP_TITLE_PROPS)),
96
+ getByText = _renderWithTheme3.getByText;
97
+
98
+ var confirmButton = getByText('modal.button.save');
99
+ expect(confirmButton).toBeInTheDocument();
100
+ expect(confirmButton).toBeDisabled();
101
+ });
102
+ test('renders SaveMapModal component with provider correctly set and map title set', function () {
103
+ _useCloudListProvider.useCloudListProvider.mockImplementation(function () {
104
+ return {
105
+ provider: DEFAULT_PROVIDER,
106
+ setProvider: jest.fn(),
107
+ cloudProviders: []
108
+ };
109
+ });
110
+
111
+ var _renderWithTheme4 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, DEFAULT_PROS)),
112
+ getByText = _renderWithTheme4.getByText;
113
+
114
+ var confirmButton = getByText('modal.button.save');
115
+ expect(confirmButton).toBeInTheDocument();
116
+ expect(confirmButton).toBeEnabled();
117
+ });
118
+ test('calls onCancel when cancel button is clicked', function () {
119
+ var _renderWithTheme5 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, DEFAULT_PROS)),
120
+ getByText = _renderWithTheme5.getByText;
121
+
122
+ _react2.fireEvent.click(getByText('modal.button.defaultCancel'));
123
+
124
+ expect(DEFAULT_PROS.onCancel).toHaveBeenCalled();
125
+ });
126
+ test('calls onConfirm with provider when confirm button is clicked', function () {
127
+ _useCloudListProvider.useCloudListProvider.mockImplementation(function () {
128
+ return {
129
+ provider: DEFAULT_PROVIDER,
130
+ setProvider: jest.fn(),
131
+ cloudProviders: []
132
+ };
133
+ });
134
+
135
+ var _renderWithTheme6 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, DEFAULT_PROS)),
136
+ getByText = _renderWithTheme6.getByText;
137
+
138
+ var confirmButton = getByText('modal.button.save');
139
+
140
+ _react2.fireEvent.click(confirmButton);
141
+
142
+ expect(DEFAULT_PROS.onConfirm).toHaveBeenCalled();
143
+ });
144
+ test('does not render loading animation when isProviderLoading is true', function () {
145
+ var _renderWithTheme7 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, DEFAULT_PROS)),
146
+ queryAllByTestId = _renderWithTheme7.queryAllByTestId;
147
+
148
+ expect(queryAllByTestId(_src.dataTestIds.providerLoading)).toHaveLength(0);
149
+ });
150
+ test('renders loading animation when isProviderLoading is true', function () {
151
+ var _renderWithTheme8 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, (0, _extends2["default"])({}, DEFAULT_PROS, {
152
+ isProviderLoading: true
153
+ }))),
154
+ getByTestId = _renderWithTheme8.getByTestId;
155
+
156
+ expect(getByTestId(_src.dataTestIds.providerLoading)).toBeInTheDocument();
157
+ });
158
+ test('renders no error if provider error is undefined', function () {
159
+ var _renderWithTheme9 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, DEFAULT_PROS)),
160
+ queryAllByText = _renderWithTheme9.queryAllByText;
161
+
162
+ expect(queryAllByText('modal.statusPanel.error')).toHaveLength(0);
163
+ });
164
+ test('displays provider error message when providerError is present', function () {
165
+ var _renderWithTheme10 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, (0, _extends2["default"])({}, DEFAULT_PROS, {
166
+ providerError: {
167
+ message: 'Error message'
168
+ }
169
+ }))),
170
+ getByText = _renderWithTheme10.getByText;
171
+
172
+ expect(getByText('modal.statusPanel.error')).toBeInTheDocument();
173
+ });
174
+ test('call onSetMapInfo upon typing map (provider is set)', function () {
175
+ _useCloudListProvider.useCloudListProvider.mockImplementation(function () {
176
+ return {
177
+ provider: DEFAULT_PROVIDER,
178
+ setProvider: jest.fn(),
179
+ cloudProviders: []
180
+ };
181
+ });
182
+
183
+ var _renderWithTheme11 = (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, UNDEFINED_MAP_TITLE_PROPS)),
184
+ getByTestId = _renderWithTheme11.getByTestId,
185
+ getByPlaceholderText = _renderWithTheme11.getByPlaceholderText;
186
+
187
+ var mapInfoPanel = getByTestId(_src.dataTestIds.providerMapInfoPanel);
188
+ expect(mapInfoPanel).toBeInTheDocument();
189
+ var titleInput = getByPlaceholderText('Type map title');
190
+ expect(titleInput).toBeInTheDocument();
191
+
192
+ _react2.fireEvent.change(titleInput, {
193
+ target: {
194
+ value: 'first kepler map'
195
+ }
196
+ });
197
+
198
+ expect(DEFAULT_PROS.onSetMapInfo).toHaveBeenCalledWith({
199
+ title: 'first kepler map'
200
+ });
201
+ });
202
+ test('call onUpdateImageSetting', function () {
203
+ _useCloudListProvider.useCloudListProvider.mockImplementation(function () {
204
+ return {
205
+ provider: DEFAULT_PROVIDER,
206
+ setProvider: jest.fn(),
207
+ cloudProviders: []
208
+ };
209
+ });
210
+
211
+ (0, _componentJestUtils.renderWithTheme)( /*#__PURE__*/_react["default"].createElement(SaveMapModal, UNDEFINED_MAP_TITLE_PROPS)); // first time the component mount
212
+
213
+ expect(DEFAULT_PROS.onUpdateImageSetting).toHaveBeenCalledWith({
214
+ exporting: true
215
+ });
216
+ });
217
+ });
218
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvc2F2ZS1tYXAtbW9kYWwuc3BlYy50c3giXSwibmFtZXMiOlsiU2F2ZU1hcE1vZGFsIiwiREVGQVVMVF9QUk9TIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJleHBvcnRJbWFnZSIsImplc3QiLCJmbiIsImlzUHJvdmlkZXJMb2FkaW5nIiwicHJvdmlkZXJFcnJvciIsIm9uVXBkYXRlSW1hZ2VTZXR0aW5nIiwiY2xlYW51cEV4cG9ydEltYWdlIiwib25TZXRNYXBJbmZvIiwib25DYW5jZWwiLCJvbkNvbmZpcm0iLCJVTkRFRklORURfTUFQX1RJVExFX1BST1BTIiwidW5kZWZpbmVkIiwiREVGQVVMVF9QUk9WSURFUiIsIm5hbWUiLCJpY29uIiwiZ2V0TWFuYWdlbWVudFVybCIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsIm1vY2siLCJ1c2VDbG91ZExpc3RQcm92aWRlciIsInByb3ZpZGVyIiwic2V0UHJvdmlkZXIiLCJjbG91ZFByb3ZpZGVycyIsImRlc2NyaWJlIiwiYWZ0ZXJFYWNoIiwiY2xlYXJBbGxNb2NrcyIsInRlc3QiLCJnZXRCeVRleHQiLCJjb25maXJtQnV0dG9uIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJ0b0JlRGlzYWJsZWQiLCJ0b0JlRW5hYmxlZCIsImZpcmVFdmVudCIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZCIsInF1ZXJ5QWxsQnlUZXN0SWQiLCJkYXRhVGVzdElkcyIsInByb3ZpZGVyTG9hZGluZyIsInRvSGF2ZUxlbmd0aCIsImdldEJ5VGVzdElkIiwicXVlcnlBbGxCeVRleHQiLCJtZXNzYWdlIiwiZ2V0QnlQbGFjZWhvbGRlclRleHQiLCJtYXBJbmZvUGFuZWwiLCJwcm92aWRlck1hcEluZm9QYW5lbCIsInRpdGxlSW5wdXQiLCJjaGFuZ2UiLCJ0YXJnZXQiLCJ2YWx1ZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiZXhwb3J0aW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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RUFBRTtBQURrRCxLQUEvRDtBQUdELEdBYkcsQ0FBSjtBQWNELENBdkhPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBAdHMtbm9jaGVja1xuXG4vKipcbiAqIEkgZGVjaWRlZCB0byBtb3ZlIHRoZSBuZXh0IHRvIHRoZSBhY3R1YWwgZmlsZSBiZWNhdXNlIGl0IG1ha2VzIGl0XG4gKiBleHRyZW1lbHkgZWFzaWVyIHRvIG1vY2sgYWRuIHRlc3QgZmVhdHVyZXMuXG4gKiBJdCdzIGVhc2llciB0byBtb2NrIGl0ZW1zIHdpdGggamVzdCB1c2luZyB0aGUgcmVsYXRpdmUgcGF0aFxuICogcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIG1vY2sgaW1wb3J0cyBsaWtlIEBrZXBsZXIuZ2wvY29tcG9uZW50c1xuICogd2hpY2ggY3JlYXRlcyBzZXZlcmFsIHNpZGUgZWZmZWN0cy5cbiAqIENvbG9jYXRpbmcgdGVzdHMgaXMgbXVjaCBlYXNpZXJcbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtmaXJlRXZlbnR9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IFNhdmVNYXBNb2RhbEZhY3RvcnkgZnJvbSAnLi9zYXZlLW1hcC1tb2RhbCc7XG5pbXBvcnQge3JlbmRlcldpdGhUaGVtZX0gZnJvbSAndGVzdC9oZWxwZXJzL2NvbXBvbmVudC1qZXN0LXV0aWxzJztcbmltcG9ydCB7dXNlQ2xvdWRMaXN0UHJvdmlkZXJ9IGZyb20gJy4uL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJztcbmltcG9ydCB7ZGF0YVRlc3RJZHN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzL3NyYyc7XG5cbmNvbnN0IFNhdmVNYXBNb2RhbCA9IFNhdmVNYXBNb2RhbEZhY3RvcnkoKTtcblxuY29uc3QgREVGQVVMVF9QUk9TID0ge1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICdUZXN0IE1hcCcsXG4gICAgZGVzY3JpcHRpb246ICd0ZXN0J1xuICB9LFxuICBleHBvcnRJbWFnZTogamVzdC5mbigpLFxuICBpc1Byb3ZpZGVyTG9hZGluZzogZmFsc2UsXG4gIHByb3ZpZGVyRXJyb3I6IG51bGwsXG4gIG9uVXBkYXRlSW1hZ2VTZXR0aW5nOiBqZXN0LmZuKCksXG4gIGNsZWFudXBFeHBvcnRJbWFnZTogamVzdC5mbigpLFxuICBvblNldE1hcEluZm86IGplc3QuZm4oKSxcbiAgb25DYW5jZWw6IGplc3QuZm4oKSxcbiAgb25Db25maXJtOiBqZXN0LmZuKClcbn07XG5cbmNvbnN0IFVOREVGSU5FRF9NQVBfVElUTEVfUFJPUFMgPSB7XG4gIC4uLkRFRkFVTFRfUFJPUyxcbiAgbWFwSW5mbzoge1xuICAgIGRlc2NyaXB0aW9uOiB1bmRlZmluZWQsXG4gICAgdGl0bGU6IHVuZGVmaW5lZFxuICB9XG59O1xuXG5jb25zdCBERUZBVUxUX1BST1ZJREVSID0ge1xuICBuYW1lOiAndGVzdCBwcm92aWRlcicsXG4gIGljb246IGplc3QuZm4oKSxcbiAgZ2V0TWFuYWdlbWVudFVybDogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAncHJvdmlkZXIudXJsJylcbn07XG5cbmplc3QubW9jaygnLi4vaG9va3MvdXNlLWNsb3VkLWxpc3QtcHJvdmlkZXInLCAoKSA9PiAoe1xuICB1c2VDbG91ZExpc3RQcm92aWRlcjogamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgIHByb3ZpZGVyOiBudWxsLFxuICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgY2xvdWRQcm92aWRlcnM6IFtdXG4gIH0pKVxufSkpO1xuXG5kZXNjcmliZSgnU2F2ZU1hcE1vZGFsJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICB0ZXN0KCdyZW5kZXJzIFNhdmVNYXBNb2RhbCBjb21wb25lbnQgd2l0aCBwcm92aWRlciBzZXQgdG8gbnVsbCBhbmQgbWFwIHRpdGxlIHNldCcsICgpID0+IHtcbiAgICBjb25zdCB7Z2V0QnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZSg8U2F2ZU1hcE1vZGFsIHsuLi5ERUZBVUxUX1BST1N9IC8+KTtcbiAgICBjb25zdCBjb25maXJtQnV0dG9uID0gZ2V0QnlUZXh0KCdtb2RhbC5idXR0b24uc2F2ZScpO1xuICAgIGV4cGVjdChjb25maXJtQnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChjb25maXJtQnV0dG9uKS50b0JlRGlzYWJsZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBTYXZlTWFwTW9kYWwgY29tcG9uZW50IHdpdGggcHJvdmlkZXIgc2V0IHRvIG51bGwgYW5kIG1hcCB0aXRsZSBub3Qgc2V0JywgKCkgPT4ge1xuICAgIGNvbnN0IHtnZXRCeVRleHR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTYXZlTWFwTW9kYWwgey4uLlVOREVGSU5FRF9NQVBfVElUTEVfUFJPUFN9IC8+KTtcbiAgICBjb25zdCBjb25maXJtQnV0dG9uID0gZ2V0QnlUZXh0KCdtb2RhbC5idXR0b24uc2F2ZScpO1xuICAgIGV4cGVjdChjb25maXJtQnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChjb25maXJtQnV0dG9uKS50b0JlRGlzYWJsZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBTYXZlTWFwTW9kYWwgY29tcG9uZW50IHdpdGggcHJvdmlkZXIgY29ycmVjdGx5IHNldCBhbmQgbWFwIHRpdGxlIG5vdCBzZXQnLCAoKSA9PiB7XG4gICAgdXNlQ2xvdWRMaXN0UHJvdmlkZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBwcm92aWRlcjogREVGQVVMVF9QUk9WSURFUixcbiAgICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgICB9KSk7XG4gICAgY29uc3Qge2dldEJ5VGV4dH0gPSByZW5kZXJXaXRoVGhlbWUoPFNhdmVNYXBNb2RhbCB7Li4uVU5ERUZJTkVEX01BUF9USVRMRV9QUk9QU30gLz4pO1xuICAgIGNvbnN0IGNvbmZpcm1CdXR0b24gPSBnZXRCeVRleHQoJ21vZGFsLmJ1dHRvbi5zYXZlJyk7XG4gICAgZXhwZWN0KGNvbmZpcm1CdXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KGNvbmZpcm1CdXR0b24pLnRvQmVEaXNhYmxlZCgpO1xuICB9KTtcblxuICB0ZXN0KCdyZW5kZXJzIFNhdmVNYXBNb2RhbCBjb21wb25lbnQgd2l0aCBwcm92aWRlciBjb3JyZWN0bHkgc2V0IGFuZCBtYXAgdGl0bGUgc2V0JywgKCkgPT4ge1xuICAgIHVzZUNsb3VkTGlzdFByb3ZpZGVyLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgICAgcHJvdmlkZXI6IERFRkFVTFRfUFJPVklERVIsXG4gICAgICBzZXRQcm92aWRlcjogamVzdC5mbigpLFxuICAgICAgY2xvdWRQcm92aWRlcnM6IFtdXG4gICAgfSkpO1xuICAgIGNvbnN0IHtnZXRCeVRleHR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTYXZlTWFwTW9kYWwgey4uLkRFRkFVTFRfUFJPU30gLz4pO1xuICAgIGNvbnN0IGNvbmZpcm1CdXR0b24gPSBnZXRCeVRleHQoJ21vZGFsLmJ1dHRvbi5zYXZlJyk7XG4gICAgZXhwZWN0KGNvbmZpcm1CdXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgZXhwZWN0KGNvbmZpcm1CdXR0b24pLnRvQmVFbmFibGVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NhbGxzIG9uQ2FuY2VsIHdoZW4gY2FuY2VsIGJ1dHRvbiBpcyBjbGlja2VkJywgKCkgPT4ge1xuICAgIGNvbnN0IHtnZXRCeVRleHR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTYXZlTWFwTW9kYWwgey4uLkRFRkFVTFRfUFJPU30gLz4pO1xuICAgIGZpcmVFdmVudC5jbGljayhnZXRCeVRleHQoJ21vZGFsLmJ1dHRvbi5kZWZhdWx0Q2FuY2VsJykpO1xuICAgIGV4cGVjdChERUZBVUxUX1BST1Mub25DYW5jZWwpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FsbHMgb25Db25maXJtIHdpdGggcHJvdmlkZXIgd2hlbiBjb25maXJtIGJ1dHRvbiBpcyBjbGlja2VkJywgKCkgPT4ge1xuICAgIHVzZUNsb3VkTGlzdFByb3ZpZGVyLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgICAgcHJvdmlkZXI6IERFRkFVTFRfUFJPVklERVIsXG4gICAgICBzZXRQcm92aWRlcjogamVzdC5mbigpLFxuICAgICAgY2xvdWRQcm92aWRlcnM6IFtdXG4gICAgfSkpO1xuICAgIGNvbnN0IHtnZXRCeVRleHR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTYXZlTWFwTW9kYWwgey4uLkRFRkFVTFRfUFJPU30gLz4pO1xuICAgIGNvbnN0IGNvbmZpcm1CdXR0b24gPSBnZXRCeVRleHQoJ21vZGFsLmJ1dHRvbi5zYXZlJyk7XG4gICAgZmlyZUV2ZW50LmNsaWNrKGNvbmZpcm1CdXR0b24pO1xuICAgIGV4cGVjdChERUZBVUxUX1BST1Mub25Db25maXJtKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvZXMgbm90IHJlbmRlciBsb2FkaW5nIGFuaW1hdGlvbiB3aGVuIGlzUHJvdmlkZXJMb2FkaW5nIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5QWxsQnlUZXN0SWR9ID0gcmVuZGVyV2l0aFRoZW1lKDxTYXZlTWFwTW9kYWwgey4uLkRFRkFVTFRfUFJPU30gLz4pO1xuICAgIGV4cGVjdChxdWVyeUFsbEJ5VGVzdElkKGRhdGFUZXN0SWRzLnByb3ZpZGVyTG9hZGluZykpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBsb2FkaW5nIGFuaW1hdGlvbiB3aGVuIGlzUHJvdmlkZXJMb2FkaW5nIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3Qge2dldEJ5VGVzdElkfSA9IHJlbmRlcldpdGhUaGVtZShcbiAgICAgIDxTYXZlTWFwTW9kYWwgey4uLkRFRkFVTFRfUFJPU30gaXNQcm92aWRlckxvYWRpbmc9e3RydWV9IC8+XG4gICAgKTtcbiAgICBleHBlY3QoZ2V0QnlUZXN0SWQoZGF0YVRlc3RJZHMucHJvdmlkZXJMb2FkaW5nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgdGVzdCgncmVuZGVycyBubyBlcnJvciBpZiBwcm92aWRlciBlcnJvciBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5QWxsQnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZSg8U2F2ZU1hcE1vZGFsIHsuLi5ERUZBVUxUX1BST1N9IC8+KTtcbiAgICBleHBlY3QocXVlcnlBbGxCeVRleHQoJ21vZGFsLnN0YXR1c1BhbmVsLmVycm9yJykpLnRvSGF2ZUxlbmd0aCgwKTtcbiAgfSk7XG5cbiAgdGVzdCgnZGlzcGxheXMgcHJvdmlkZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHByb3ZpZGVyRXJyb3IgaXMgcHJlc2VudCcsICgpID0+IHtcbiAgICBjb25zdCB7Z2V0QnlUZXh0fSA9IHJlbmRlcldpdGhUaGVtZShcbiAgICAgIDxTYXZlTWFwTW9kYWwgey4uLkRFRkFVTFRfUFJPU30gcHJvdmlkZXJFcnJvcj17e21lc3NhZ2U6ICdFcnJvciBtZXNzYWdlJ319IC8+XG4gICAgKTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdtb2RhbC5zdGF0dXNQYW5lbC5lcnJvcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICB0ZXN0KCdjYWxsIG9uU2V0TWFwSW5mbyB1cG9uIHR5cGluZyBtYXAgKHByb3ZpZGVyIGlzIHNldCknLCAoKSA9PiB7XG4gICAgdXNlQ2xvdWRMaXN0UHJvdmlkZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBwcm92aWRlcjogREVGQVVMVF9QUk9WSURFUixcbiAgICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgICB9KSk7XG4gICAgY29uc3Qge2dldEJ5VGVzdElkLCBnZXRCeVBsYWNlaG9sZGVyVGV4dH0gPSByZW5kZXJXaXRoVGhlbWUoXG4gICAgICA8U2F2ZU1hcE1vZGFsIHsuLi5VTkRFRklORURfTUFQX1RJVExFX1BST1BTfSAvPlxuICAgICk7XG5cbiAgICBjb25zdCBtYXBJbmZvUGFuZWwgPSBnZXRCeVRlc3RJZChkYXRhVGVzdElkcy5wcm92aWRlck1hcEluZm9QYW5lbCk7XG4gICAgZXhwZWN0KG1hcEluZm9QYW5lbCkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIGNvbnN0IHRpdGxlSW5wdXQgPSBnZXRCeVBsYWNlaG9sZGVyVGV4dCgnVHlwZSBtYXAgdGl0bGUnKTtcbiAgICBleHBlY3QodGl0bGVJbnB1dCkudG9CZUluVGhlRG9jdW1lbnQoKTtcblxuICAgIGZpcmVFdmVudC5jaGFuZ2UodGl0bGVJbnB1dCwge3RhcmdldDoge3ZhbHVlOiAnZmlyc3Qga2VwbGVyIG1hcCd9fSk7XG4gICAgZXhwZWN0KERFRkFVTFRfUFJPUy5vblNldE1hcEluZm8pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHt0aXRsZTogJ2ZpcnN0IGtlcGxlciBtYXAnfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NhbGwgb25VcGRhdGVJbWFnZVNldHRpbmcnLCAoKSA9PiB7XG4gICAgdXNlQ2xvdWRMaXN0UHJvdmlkZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBwcm92aWRlcjogREVGQVVMVF9QUk9WSURFUixcbiAgICAgIHNldFByb3ZpZGVyOiBqZXN0LmZuKCksXG4gICAgICBjbG91ZFByb3ZpZGVyczogW11cbiAgICB9KSk7XG5cbiAgICByZW5kZXJXaXRoVGhlbWUoPFNhdmVNYXBNb2RhbCB7Li4uVU5ERUZJTkVEX01BUF9USVRMRV9QUk9QU30gLz4pO1xuXG4gICAgLy8gZmlyc3QgdGltZSB0aGUgY29tcG9uZW50IG1vdW50XG4gICAgZXhwZWN0KERFRkFVTFRfUFJPUy5vblVwZGF0ZUltYWdlU2V0dGluZykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgZXhwb3J0aW5nOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { ImageModalContainerProps } from './image-modal-container';
3
3
  import { Provider } from '@kepler.gl/cloud-providers';
4
- import { cleanupExportImage as cleanupExportImageAction, SetCloudProviderPayload } from '@kepler.gl/actions';
4
+ import { cleanupExportImage as cleanupExportImageAction } from '@kepler.gl/actions';
5
5
  export declare const StyledInputLabel: import("styled-components").StyledComponent<"label", any, {}, never>;
6
6
  export declare const StyleSharingUrl: import("styled-components").StyledComponent<"div", any, {
7
7
  className: "sharing-url";
@@ -13,16 +13,12 @@ interface SharingUrlProps {
13
13
  export declare const SharingUrl: React.FC<SharingUrlProps>;
14
14
  interface ShareMapUrlModalFactoryProps {
15
15
  isProviderLoading?: boolean;
16
- isReady?: boolean;
17
16
  onExport?: (provider: Provider) => void;
18
- cloudProviders?: Provider[];
19
- currentProvider: string | null;
20
17
  providerError?: string;
21
18
  successInfo?: {
22
19
  shareUrl?: string;
23
20
  folderLink?: string;
24
21
  };
25
- onSetCloudProvider?: (provider: SetCloudProviderPayload) => void;
26
22
  onUpdateImageSetting: ImageModalContainerProps['onUpdateImageSetting'];
27
23
  cleanupExportImage: typeof cleanupExportImageAction;
28
24
  }
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2023 Uber Technologies, Inc.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to deal
5
- // in the Software without restriction, including without limitation the rights
6
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- // copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- // THE SOFTWARE.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -44,16 +24,18 @@ var _styles = require("@kepler.gl/styles");
44
24
 
45
25
  var _imageModalContainer = _interopRequireDefault(require("./image-modal-container"));
46
26
 
47
- var _providerModalContainer = _interopRequireDefault(require("./provider-modal-container"));
48
-
49
27
  var _styledComponents2 = require("../common/styled-components");
50
28
 
51
- var _cloudTile = _interopRequireDefault(require("./cloud-tile"));
52
-
53
29
  var _statusPanel = _interopRequireDefault(require("./status-panel"));
54
30
 
55
31
  var _localization = require("@kepler.gl/localization");
56
32
 
33
+ var _useCloudListProvider2 = require("../hooks/use-cloud-list-provider");
34
+
35
+ var _providerSelect = require("./cloud-components/provider-select");
36
+
37
+ var _constants = require("@kepler.gl/constants");
38
+
57
39
  var _templateObject, _templateObject2, _templateObject3, _templateObject4;
58
40
 
59
41
  var StyledInputLabel = _styledComponents["default"].label(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 12px;\n color: ", ";\n letter-spacing: 0.2px;\n"])), function (props) {
@@ -100,49 +82,65 @@ exports.SharingUrl = SharingUrl;
100
82
 
101
83
  var nop = function nop() {};
102
84
 
103
- var StyledShareMapModal = (0, _styledComponents["default"])(_styledComponents2.StyledModalContent)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 24px 72px 40px 72px;\n margin: 0 -72px -40px -72px;\n"])));
85
+ var StyledShareMapModal = (0, _styledComponents["default"])(_styledComponents2.StyledModalContent)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 24px 72px 40px 72px;\n margin: 0 -72px -40px -72px;\n display: flex;\n flex-direction: column;\n"])));
104
86
 
105
87
  var StyledInnerDiv = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 500px;\n"])));
106
88
 
89
+ var UNDERLINE_TEXT_DECORATION_STYLE = {
90
+ textDecoration: 'underline'
91
+ };
92
+
93
+ var ShareMapHeader = function ShareMapHeader(_ref2) {
94
+ var cloudProviders = _ref2.cloudProviders;
95
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
96
+ className: "description"
97
+ }, /*#__PURE__*/_react["default"].createElement("div", {
98
+ className: "title"
99
+ }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
100
+ id: 'modal.shareMap.title'
101
+ }))), /*#__PURE__*/_react["default"].createElement(_providerSelect.ProviderSelect, {
102
+ cloudProviders: cloudProviders
103
+ }));
104
+ };
105
+
107
106
  function ShareMapUrlModalFactory() {
108
- var ShareMapUrlModal = function ShareMapUrlModal(_ref2) {
109
- var _ref2$isProviderLoadi = _ref2.isProviderLoading,
110
- isProviderLoading = _ref2$isProviderLoadi === void 0 ? false : _ref2$isProviderLoadi,
111
- isReady = _ref2.isReady,
112
- _ref2$onExport = _ref2.onExport,
113
- onExport = _ref2$onExport === void 0 ? nop : _ref2$onExport,
114
- _ref2$cloudProviders = _ref2.cloudProviders,
115
- cloudProviders = _ref2$cloudProviders === void 0 ? [] : _ref2$cloudProviders,
116
- _ref2$currentProvider = _ref2.currentProvider,
117
- currentProvider = _ref2$currentProvider === void 0 ? null : _ref2$currentProvider,
118
- _ref2$providerError = _ref2.providerError,
119
- providerError = _ref2$providerError === void 0 ? null : _ref2$providerError,
120
- _ref2$successInfo = _ref2.successInfo,
121
- successInfo = _ref2$successInfo === void 0 ? {} : _ref2$successInfo,
122
- _ref2$onSetCloudProvi = _ref2.onSetCloudProvider,
123
- onSetCloudProvider = _ref2$onSetCloudProvi === void 0 ? nop : _ref2$onSetCloudProvi,
124
- _ref2$onUpdateImageSe = _ref2.onUpdateImageSetting,
125
- onUpdateImageSetting = _ref2$onUpdateImageSe === void 0 ? nop : _ref2$onUpdateImageSe,
126
- cleanupExportImage = _ref2.cleanupExportImage;
107
+ var ShareMapUrlModal = function ShareMapUrlModal(_ref3) {
108
+ var _ref3$isProviderLoadi = _ref3.isProviderLoading,
109
+ isProviderLoading = _ref3$isProviderLoadi === void 0 ? false : _ref3$isProviderLoadi,
110
+ _ref3$onExport = _ref3.onExport,
111
+ onExport = _ref3$onExport === void 0 ? nop : _ref3$onExport,
112
+ _ref3$providerError = _ref3.providerError,
113
+ providerError = _ref3$providerError === void 0 ? null : _ref3$providerError,
114
+ _ref3$successInfo = _ref3.successInfo,
115
+ successInfo = _ref3$successInfo === void 0 ? {} : _ref3$successInfo,
116
+ _ref3$onUpdateImageSe = _ref3.onUpdateImageSetting,
117
+ onUpdateImageSetting = _ref3$onUpdateImageSe === void 0 ? nop : _ref3$onUpdateImageSe,
118
+ cleanupExportImage = _ref3.cleanupExportImage;
119
+
120
+ var _useCloudListProvider = (0, _useCloudListProvider2.useCloudListProvider)(),
121
+ provider = _useCloudListProvider.provider,
122
+ cloudProviders = _useCloudListProvider.cloudProviders;
123
+
127
124
  var shareUrl = successInfo.shareUrl,
128
125
  folderLink = successInfo.folderLink;
129
- var provider = currentProvider ? cloudProviders.find(function (p) {
130
- return p.name === currentProvider;
131
- }) : null;
126
+ (0, _react.useEffect)(function () {
127
+ if (provider) {
128
+ onExport(provider);
129
+ }
130
+ }, [provider]);
132
131
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
133
132
  theme: _styles.themeLT
134
- }, /*#__PURE__*/_react["default"].createElement(_providerModalContainer["default"], {
135
- onSetCloudProvider: onSetCloudProvider,
136
- cloudProviders: cloudProviders,
137
- currentProvider: currentProvider
138
133
  }, /*#__PURE__*/_react["default"].createElement(_imageModalContainer["default"], {
139
- currentProvider: currentProvider,
140
- cloudProviders: cloudProviders,
134
+ provider: provider,
141
135
  onUpdateImageSetting: onUpdateImageSetting,
142
136
  cleanupExportImage: cleanupExportImage
143
137
  }, /*#__PURE__*/_react["default"].createElement(StyledShareMapModal, {
144
138
  className: "export-cloud-modal"
145
- }, /*#__PURE__*/_react["default"].createElement(StyledInnerDiv, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
139
+ }, /*#__PURE__*/_react["default"].createElement(ShareMapHeader, {
140
+ cloudProviders: cloudProviders
141
+ }), provider !== null && provider !== void 0 && provider.hasSharingUrl() ? /*#__PURE__*/_react["default"].createElement(StyledInnerDiv, {
142
+ "data-testid": _constants.dataTestIds.providerShareMap
143
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
146
144
  className: "description"
147
145
  }, /*#__PURE__*/_react["default"].createElement("div", {
148
146
  className: "title"
@@ -170,25 +168,10 @@ function ShareMapUrlModalFactory() {
170
168
  className: "subtitle"
171
169
  }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
172
170
  id: 'modal.shareMap.cloudSubtitle'
173
- }))), /*#__PURE__*/_react["default"].createElement("div", {
174
- className: "selection"
175
- }, cloudProviders.map(function (cloudProvider) {
176
- return /*#__PURE__*/_react["default"].createElement(_cloudTile["default"], {
177
- key: cloudProvider.name,
178
- onSelect: function onSelect() {
179
- return onExport(cloudProvider);
180
- },
181
- onSetCloudProvider: onSetCloudProvider,
182
- cloudProvider: cloudProvider,
183
- actionName: "Upload",
184
- isSelected: cloudProvider.name === currentProvider,
185
- isConnected: Boolean(cloudProvider.getAccessToken()),
186
- isReady: isReady
187
- });
188
- }))), isProviderLoading || providerError ? /*#__PURE__*/_react["default"].createElement(_statusPanel["default"], {
171
+ })))), isProviderLoading || providerError ? /*#__PURE__*/_react["default"].createElement(_statusPanel["default"], {
189
172
  isLoading: isProviderLoading,
190
173
  error: providerError,
191
- providerIcon: provider && provider.icon
174
+ providerIcon: provider.icon
192
175
  }) : null, shareUrl && /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", {
193
176
  className: "description"
194
177
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -203,17 +186,10 @@ function ShareMapUrlModalFactory() {
203
186
  href: folderLink,
204
187
  target: "_blank",
205
188
  rel: "noopener noreferrer",
206
- style: {
207
- textDecoration: 'underline'
208
- }
209
- }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
210
- id: 'modal.shareMap.gotoPage',
211
- values: {
212
- currentProvider: currentProvider
213
- }
214
- })))))))));
189
+ style: UNDERLINE_TEXT_DECORATION_STYLE
190
+ }, provider.name)))) : null)));
215
191
  };
216
192
 
217
193
  return ShareMapUrlModal;
218
194
  }
219
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvc2hhcmUtbWFwLW1vZGFsLnRzeCJdLCJuYW1lcyI6WyJTdHlsZWRJbnB1dExhYmVsIiwic3R5bGVkIiwibGFiZWwiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yTFQiLCJTdHlsZVNoYXJpbmdVcmwiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIlNoYXJpbmdVcmwiLCJ1cmwiLCJtZXNzYWdlIiwiY29waWVkIiwic2V0Q29weSIsImRpc3BsYXkiLCJub3AiLCJTdHlsZWRTaGFyZU1hcE1vZGFsIiwiU3R5bGVkTW9kYWxDb250ZW50IiwiU3R5bGVkSW5uZXJEaXYiLCJTaGFyZU1hcFVybE1vZGFsRmFjdG9yeSIsIlNoYXJlTWFwVXJsTW9kYWwiLCJpc1Byb3ZpZGVyTG9hZGluZyIsImlzUmVhZHkiLCJvbkV4cG9ydCIsImNsb3VkUHJvdmlkZXJzIiwiY3VycmVudFByb3ZpZGVyIiwicHJvdmlkZXJFcnJvciIsInN1Y2Nlc3NJbmZvIiwib25TZXRDbG91ZFByb3ZpZGVyIiwib25VcGRhdGVJbWFnZVNldHRpbmciLCJjbGVhbnVwRXhwb3J0SW1hZ2UiLCJzaGFyZVVybCIsImZvbGRlckxpbmsiLCJwcm92aWRlciIsImZpbmQiLCJwIiwibmFtZSIsInRoZW1lTFQiLCJtYXAiLCJjbG91ZFByb3ZpZGVyIiwiQm9vbGVhbiIsImdldEFjY2Vzc1Rva2VuIiwiaWNvbiIsInRleHREZWNvcmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQU1BOztBQUNBOztBQUNBOzs7O0FBT08sSUFBTUEsZ0JBQWdCLEdBQUdDLDZCQUFPQyxLQUFWLHVKQUVsQixVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlDLFdBQWhCO0FBQUEsQ0FGYSxDQUF0Qjs7OztBQU1BLElBQU1DLGVBQWUsR0FBR0wsNkJBQU9NLEdBQVAsQ0FB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LENBREYsQ0FORixDQUxGLENBREYsQ0FERjtBQTJGRCxHQTFHRDs7QUE0R0EsU0FBT0wsZ0JBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7VGhlbWVQcm92aWRlcn0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtDb3B5VG9DbGlwYm9hcmR9IGZyb20gJ3JlYWN0LWNvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCB7dGhlbWVMVH0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IEltYWdlTW9kYWxDb250YWluZXIsIHtJbWFnZU1vZGFsQ29udGFpbmVyUHJvcHN9IGZyb20gJy4vaW1hZ2UtbW9kYWwtY29udGFpbmVyJztcbmltcG9ydCBQcm92aWRlck1vZGFsQ29udGFpbmVyIGZyb20gJy4vcHJvdmlkZXItbW9kYWwtY29udGFpbmVyJztcblxuaW1wb3J0IHtcbiAgU3R5bGVkTW9kYWxDb250ZW50LFxuICBTdHlsZWRFeHBvcnRTZWN0aW9uLFxuICBJbnB1dExpZ2h0LFxuICBCdXR0b25cbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBDbG91ZFRpbGUgZnJvbSAnLi9jbG91ZC10aWxlJztcbmltcG9ydCBTdGF0dXNQYW5lbCBmcm9tICcuL3N0YXR1cy1wYW5lbCc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcbmltcG9ydCB7XG4gIGNsZWFudXBFeHBvcnRJbWFnZSBhcyBjbGVhbnVwRXhwb3J0SW1hZ2VBY3Rpb24sXG4gIFNldENsb3VkUHJvdmlkZXJQYXlsb2FkXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBTdHlsZWRJbnB1dExhYmVsID0gc3R5bGVkLmxhYmVsYFxuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IFN0eWxlU2hhcmluZ1VybCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdzaGFyaW5nLXVybCdcbn0pYFxuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBpbnB1dCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmJ1dHRvbiB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgU2hhcmluZ1VybFByb3BzIHtcbiAgdXJsOiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBTaGFyaW5nVXJsOiBSZWFjdC5GQzxTaGFyaW5nVXJsUHJvcHM+ID0gKHt1cmwsIG1lc3NhZ2UgPSAnJ30pID0+IHtcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29weV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlU2hhcmluZ1VybD5cbiAgICAgIDxTdHlsZWRJbnB1dExhYmVsPnttZXNzYWdlfTwvU3R5bGVkSW5wdXRMYWJlbD5cbiAgICAgIDxkaXYgc3R5bGU9e3tkaXNwbGF5OiAnZmxleCd9fT5cbiAgICAgICAgPElucHV0TGlnaHQgdHlwZT1cInRleHRcIiB2YWx1ZT17dXJsfSByZWFkT25seSAvPlxuICAgICAgICA8Q29weVRvQ2xpcGJvYXJkIHRleHQ9e3VybH0gb25Db3B5PXsoKSA9PiBzZXRDb3B5KHRydWUpfT5cbiAgICAgICAgICA8QnV0dG9uIHdpZHRoPVwiODBweFwiPntjb3BpZWQgPyAnQ29waWVkIScgOiAnQ29weSd9PC9CdXR0b24+XG4gICAgICAgIDwvQ29weVRvQ2xpcGJvYXJkPlxuICAgICAgPC9kaXY+XG4gICAgPC9TdHlsZVNoYXJpbmdVcmw+XG4gICk7XG59O1xuY29uc3Qgbm9wID0gKCkgPT4ge307XG5cbmNvbnN0IFN0eWxlZFNoYXJlTWFwTW9kYWwgPSBzdHlsZWQoU3R5bGVkTW9kYWxDb250ZW50KWBcbiAgcGFkZGluZzogMjRweCA3MnB4IDQwcHggNzJweDtcbiAgbWFyZ2luOiAwIC03MnB4IC00MHB4IC03MnB4O1xuYDtcblxuY29uc3QgU3R5bGVkSW5uZXJEaXYgPSBzdHlsZWQuZGl2YFxuICBtaW4taGVpZ2h0OiA1MDBweDtcbmA7XG5cbmludGVyZmFjZSBTaGFyZU1hcFVybE1vZGFsRmFjdG9yeVByb3BzIHtcbiAgaXNQcm92aWRlckxvYWRpbmc/OiBib29sZWFuO1xuICBpc1JlYWR5PzogYm9vbGVhbjtcbiAgb25FeHBvcnQ/OiAocHJvdmlkZXI6IFByb3ZpZGVyKSA9PiB2b2lkO1xuICBjbG91ZFByb3ZpZGVycz86IFByb3ZpZGVyW107XG4gIGN1cnJlbnRQcm92aWRlcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJvdmlkZXJFcnJvcj86IHN0cmluZztcbiAgc3VjY2Vzc0luZm8/OiB7c2hhcmVVcmw/OiBzdHJpbmc7IGZvbGRlckxpbms/OiBzdHJpbmd9O1xuICBvblNldENsb3VkUHJvdmlkZXI/OiAocHJvdmlkZXI6IFNldENsb3VkUHJvdmlkZXJQYXlsb2FkKSA9PiB2b2lkO1xuICBvblVwZGF0ZUltYWdlU2V0dGluZzogSW1hZ2VNb2RhbENvbnRhaW5lclByb3BzWydvblVwZGF0ZUltYWdlU2V0dGluZyddO1xuICBjbGVhbnVwRXhwb3J0SW1hZ2U6IHR5cGVvZiBjbGVhbnVwRXhwb3J0SW1hZ2VBY3Rpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNoYXJlTWFwVXJsTW9kYWxGYWN0b3J5KCkge1xuICBjb25zdCBTaGFyZU1hcFVybE1vZGFsOiBSZWFjdC5GQzxTaGFyZU1hcFVybE1vZGFsRmFjdG9yeVByb3BzPiA9ICh7XG4gICAgaXNQcm92aWRlckxvYWRpbmcgPSBmYWxzZSxcbiAgICBpc1JlYWR5LFxuICAgIG9uRXhwb3J0ID0gbm9wLFxuICAgIGNsb3VkUHJvdmlkZXJzID0gW10sXG4gICAgY3VycmVudFByb3ZpZGVyID0gbnVsbCxcbiAgICBwcm92aWRlckVycm9yID0gbnVsbCxcbiAgICBzdWNjZXNzSW5mbyA9IHt9LFxuICAgIG9uU2V0Q2xvdWRQcm92aWRlciA9IG5vcCxcbiAgICBvblVwZGF0ZUltYWdlU2V0dGluZyA9IG5vcCxcbiAgICBjbGVhbnVwRXhwb3J0SW1hZ2VcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtzaGFyZVVybCwgZm9sZGVyTGlua30gPSBzdWNjZXNzSW5mbztcbiAgICBjb25zdCBwcm92aWRlciA9IGN1cnJlbnRQcm92aWRlciA/IGNsb3VkUHJvdmlkZXJzLmZpbmQocCA9PiBwLm5hbWUgPT09IGN1cnJlbnRQcm92aWRlcikgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZUxUfT5cbiAgICAgICAgPFByb3ZpZGVyTW9kYWxDb250YWluZXJcbiAgICAgICAgICBvblNldENsb3VkUHJvdmlkZXI9e29uU2V0Q2xvdWRQcm92aWRlcn1cbiAgICAgICAgICBjbG91ZFByb3ZpZGVycz17Y2xvdWRQcm92aWRlcnN9XG4gICAgICAgICAgY3VycmVudFByb3ZpZGVyPXtjdXJyZW50UHJvdmlkZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8SW1hZ2VNb2RhbENvbnRhaW5lclxuICAgICAgICAgICAgY3VycmVudFByb3ZpZGVyPXtjdXJyZW50UHJvdmlkZXJ9XG4gICAgICAgICAgICBjbG91ZFByb3ZpZGVycz17Y2xvdWRQcm92aWRlcnN9XG4gICAgICAgICAgICBvblVwZGF0ZUltYWdlU2V0dGluZz17b25VcGRhdGVJbWFnZVNldHRpbmd9XG4gICAgICAgICAgICBjbGVhbnVwRXhwb3J0SW1hZ2U9e2NsZWFudXBFeHBvcnRJbWFnZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3R5bGVkU2hhcmVNYXBNb2RhbCBjbGFzc05hbWU9XCJleHBvcnQtY2xvdWQtbW9kYWxcIj5cbiAgICAgICAgICAgICAgPFN0eWxlZElubmVyRGl2PlxuICAgICAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zaGFyZU1hcC5zaGFyZVVyaVRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLnNoYXJlVXJpU3VidGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZSB3YXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zaGFyZU1hcC5zaGFyZURpc2NsYWltZXInfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbiBkaXNhYmxlZD17aXNQcm92aWRlckxvYWRpbmd9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zaGFyZU1hcC5jbG91ZFRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLmNsb3VkU3VidGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge2Nsb3VkUHJvdmlkZXJzLm1hcChjbG91ZFByb3ZpZGVyID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8Q2xvdWRUaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Nsb3VkUHJvdmlkZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsoKSA9PiBvbkV4cG9ydChjbG91ZFByb3ZpZGVyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2V0Q2xvdWRQcm92aWRlcj17b25TZXRDbG91ZFByb3ZpZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvdWRQcm92aWRlcj17Y2xvdWRQcm92aWRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk5hbWU9XCJVcGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17Y2xvdWRQcm92aWRlci5uYW1lID09PSBjdXJyZW50UHJvdmlkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0Nvbm5lY3RlZD17Qm9vbGVhbihjbG91ZFByb3ZpZGVyLmdldEFjY2Vzc1Rva2VuKCkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWFkeT17aXNSZWFkeX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICB7aXNQcm92aWRlckxvYWRpbmcgfHwgcHJvdmlkZXJFcnJvciA/IChcbiAgICAgICAgICAgICAgICAgIDxTdGF0dXNQYW5lbFxuICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzUHJvdmlkZXJMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBlcnJvcj17cHJvdmlkZXJFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJJY29uPXtwcm92aWRlciAmJiBwcm92aWRlci5pY29ufVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7c2hhcmVVcmwgJiYgKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+U2hhcmUgVXJsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxTaGFyaW5nVXJsIGtleT17MH0gdXJsPXtzaGFyZVVybH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICB7cHJvdmlkZXIgJiYgZm9sZGVyTGluayAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2ZvbGRlckxpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3RleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ319XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9eydtb2RhbC5zaGFyZU1hcC5nb3RvUGFnZSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7Y3VycmVudFByb3ZpZGVyfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZElubmVyRGl2PlxuICAgICAgICAgICAgPC9TdHlsZWRTaGFyZU1hcE1vZGFsPlxuICAgICAgICAgIDwvSW1hZ2VNb2RhbENvbnRhaW5lcj5cbiAgICAgICAgPC9Qcm92aWRlck1vZGFsQ29udGFpbmVyPlxuICAgICAgPC9UaGVtZVByb3ZpZGVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFNoYXJlTWFwVXJsTW9kYWw7XG59XG4iXX0=
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvc2hhcmUtbWFwLW1vZGFsLnRzeCJdLCJuYW1lcyI6WyJTdHlsZWRJbnB1dExhYmVsIiwic3R5bGVkIiwibGFiZWwiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yTFQiLCJTdHlsZVNoYXJpbmdVcmwiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIlNoYXJpbmdVcmwiLCJ1cmwiLCJtZXNzYWdlIiwiY29waWVkIiwic2V0Q29weSIsImRpc3BsYXkiLCJub3AiLCJTdHlsZWRTaGFyZU1hcE1vZGFsIiwiU3R5bGVkTW9kYWxDb250ZW50IiwiU3R5bGVkSW5uZXJEaXYiLCJVTkRFUkxJTkVfVEVYVF9ERUNPUkFUSU9OX1NUWUxFIiwidGV4dERlY29yYXRpb24iLCJTaGFyZU1hcEhlYWRlciIsImNsb3VkUHJvdmlkZXJzIiwiU2hhcmVNYXBVcmxNb2RhbEZhY3RvcnkiLCJTaGFyZU1hcFVybE1vZGFsIiwiaXNQcm92aWRlckxvYWRpbmciLCJvbkV4cG9ydCIsInByb3ZpZGVyRXJyb3IiLCJzdWNjZXNzSW5mbyIsIm9uVXBkYXRlSW1hZ2VTZXR0aW5nIiwiY2xlYW51cEV4cG9ydEltYWdlIiwicHJvdmlkZXIiLCJzaGFyZVVybCIsImZvbGRlckxpbmsiLCJ0aGVtZUxUIiwiaGFzU2hhcmluZ1VybCIsImRhdGFUZXN0SWRzIiwicHJvdmlkZXJTaGFyZU1hcCIsImljb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFFTyxJQUFNQSxnQkFBZ0IsR0FBR0MsNkJBQU9DLEtBQVYsdUpBRWxCLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsV0FBaEI7QUFBQSxDQUZhLENBQXRCOzs7O0FBTUEsSUFBTUMsZUFBZSxHQUFHTCw2QkFBT00sR0FBUCxDQUFXQyxL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LENBREYsQ0FoQkYsRUEwQkdBLGlCQUFpQixJQUFJRSxhQUFyQixnQkFDQyxnQ0FBQyx1QkFBRDtBQUNFLE1BQUEsU0FBUyxFQUFFRixpQkFEYjtBQUVFLE1BQUEsS0FBSyxFQUFFRSxhQUZUO0FBR0UsTUFBQSxZQUFZLEVBQUVJLFFBQVEsQ0FBQ087QUFIekIsTUFERCxHQU1HLElBaENOLEVBaUNHTixRQUFRLGlCQUNQLGdDQUFDLHNDQUFELHFCQUNFO0FBQUssTUFBQSxTQUFTLEVBQUM7QUFBZixvQkFDRTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsbUJBREYsQ0FERixlQUlFO0FBQUssTUFBQSxTQUFTLEVBQUM7QUFBZixvQkFDRSxnQ0FBQyxVQUFEO0FBQVksTUFBQSxHQUFHLEVBQUUsQ0FBakI7QUFBb0IsTUFBQSxHQUFHLEVBQUVBO0FBQXpCLE1BREYsRUFFR0QsUUFBUSxJQUFJRSxVQUFaLGlCQUNDO0FBQ0UsTUFBQSxHQUFHLEVBQUUsQ0FEUDtBQUVFLE1BQUEsSUFBSSxFQUFFQSxVQUZSO0FBR0UsTUFBQSxNQUFNLEVBQUMsUUFIVDtBQUlFLE1BQUEsR0FBRyxFQUFDLHFCQUpOO0FBS0UsTUFBQSxLQUFLLEVBQUVkO0FBTFQsT0FPR1ksUUFBUSxDQUFDUSxJQVBaLENBSEosQ0FKRixDQWxDSixDQURELEdBd0RHLElBMUROLENBTEYsQ0FERixDQURGO0FBc0VELEdBdkZEOztBQXlGQSxTQUFPZixnQkFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge1RoZW1lUHJvdmlkZXJ9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Q29weVRvQ2xpcGJvYXJkfSBmcm9tICdyZWFjdC1jb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQge3RoZW1lTFR9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCBJbWFnZU1vZGFsQ29udGFpbmVyLCB7SW1hZ2VNb2RhbENvbnRhaW5lclByb3BzfSBmcm9tICcuL2ltYWdlLW1vZGFsLWNvbnRhaW5lcic7XG5cbmltcG9ydCB7XG4gIFN0eWxlZE1vZGFsQ29udGVudCxcbiAgU3R5bGVkRXhwb3J0U2VjdGlvbixcbiAgSW5wdXRMaWdodCxcbiAgQnV0dG9uXG59IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgU3RhdHVzUGFuZWwgZnJvbSAnLi9zdGF0dXMtcGFuZWwnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge3VzZUNsb3VkTGlzdFByb3ZpZGVyfSBmcm9tICcuLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcic7XG5pbXBvcnQge1Byb3ZpZGVyU2VsZWN0fSBmcm9tICcuL2Nsb3VkLWNvbXBvbmVudHMvcHJvdmlkZXItc2VsZWN0JztcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcbmltcG9ydCB7Y2xlYW51cEV4cG9ydEltYWdlIGFzIGNsZWFudXBFeHBvcnRJbWFnZUFjdGlvbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7ZGF0YVRlc3RJZHN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IFN0eWxlZElucHV0TGFiZWwgPSBzdHlsZWQubGFiZWxgXG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICBsZXR0ZXItc3BhY2luZzogMC4ycHg7XG5gO1xuXG5leHBvcnQgY29uc3QgU3R5bGVTaGFyaW5nVXJsID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NoYXJpbmctdXJsJ1xufSlgXG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tYm90dG9tOiAxNHB4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIGlucHV0IHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICAuYnV0dG9uIHtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIH1cbmA7XG5cbmludGVyZmFjZSBTaGFyaW5nVXJsUHJvcHMge1xuICB1cmw6IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFNoYXJpbmdVcmw6IFJlYWN0LkZDPFNoYXJpbmdVcmxQcm9wcz4gPSAoe3VybCwgbWVzc2FnZSA9ICcnfSkgPT4ge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3B5XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgcmV0dXJuIChcbiAgICA8U3R5bGVTaGFyaW5nVXJsPlxuICAgICAgPFN0eWxlZElucHV0TGFiZWw+e21lc3NhZ2V9PC9TdHlsZWRJbnB1dExhYmVsPlxuICAgICAgPGRpdiBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4J319PlxuICAgICAgICA8SW5wdXRMaWdodCB0eXBlPVwidGV4dFwiIHZhbHVlPXt1cmx9IHJlYWRPbmx5IC8+XG4gICAgICAgIDxDb3B5VG9DbGlwYm9hcmQgdGV4dD17dXJsfSBvbkNvcHk9eygpID0+IHNldENvcHkodHJ1ZSl9PlxuICAgICAgICAgIDxCdXR0b24gd2lkdGg9XCI4MHB4XCI+e2NvcGllZCA/ICdDb3BpZWQhJyA6ICdDb3B5J308L0J1dHRvbj5cbiAgICAgICAgPC9Db3B5VG9DbGlwYm9hcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L1N0eWxlU2hhcmluZ1VybD5cbiAgKTtcbn07XG5jb25zdCBub3AgPSAoKSA9PiB7fTtcblxuY29uc3QgU3R5bGVkU2hhcmVNYXBNb2RhbCA9IHN0eWxlZChTdHlsZWRNb2RhbENvbnRlbnQpYFxuICBwYWRkaW5nOiAyNHB4IDcycHggNDBweCA3MnB4O1xuICBtYXJnaW46IDAgLTcycHggLTQwcHggLTcycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuXG5jb25zdCBTdHlsZWRJbm5lckRpdiA9IHN0eWxlZC5kaXZgXG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xuYDtcblxuY29uc3QgVU5ERVJMSU5FX1RFWFRfREVDT1JBVElPTl9TVFlMRSA9IHt0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSd9O1xuXG5jb25zdCBTaGFyZU1hcEhlYWRlciA9ICh7Y2xvdWRQcm92aWRlcnN9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLnRpdGxlJ30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxQcm92aWRlclNlbGVjdCBjbG91ZFByb3ZpZGVycz17Y2xvdWRQcm92aWRlcnN9IC8+XG4gICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICApO1xufTtcblxuaW50ZXJmYWNlIFNoYXJlTWFwVXJsTW9kYWxGYWN0b3J5UHJvcHMge1xuICBpc1Byb3ZpZGVyTG9hZGluZz86IGJvb2xlYW47XG4gIG9uRXhwb3J0PzogKHByb3ZpZGVyOiBQcm92aWRlcikgPT4gdm9pZDtcbiAgcHJvdmlkZXJFcnJvcj86IHN0cmluZztcbiAgc3VjY2Vzc0luZm8/OiB7c2hhcmVVcmw/OiBzdHJpbmc7IGZvbGRlckxpbms/OiBzdHJpbmd9O1xuICBvblVwZGF0ZUltYWdlU2V0dGluZzogSW1hZ2VNb2RhbENvbnRhaW5lclByb3BzWydvblVwZGF0ZUltYWdlU2V0dGluZyddO1xuICBjbGVhbnVwRXhwb3J0SW1hZ2U6IHR5cGVvZiBjbGVhbnVwRXhwb3J0SW1hZ2VBY3Rpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNoYXJlTWFwVXJsTW9kYWxGYWN0b3J5KCkge1xuICBjb25zdCBTaGFyZU1hcFVybE1vZGFsOiBSZWFjdC5GQzxTaGFyZU1hcFVybE1vZGFsRmFjdG9yeVByb3BzPiA9ICh7XG4gICAgaXNQcm92aWRlckxvYWRpbmcgPSBmYWxzZSxcbiAgICBvbkV4cG9ydCA9IG5vcCxcbiAgICBwcm92aWRlckVycm9yID0gbnVsbCxcbiAgICBzdWNjZXNzSW5mbyA9IHt9LFxuICAgIG9uVXBkYXRlSW1hZ2VTZXR0aW5nID0gbm9wLFxuICAgIGNsZWFudXBFeHBvcnRJbWFnZVxuICB9KSA9PiB7XG4gICAgY29uc3Qge3Byb3ZpZGVyLCBjbG91ZFByb3ZpZGVyc30gPSB1c2VDbG91ZExpc3RQcm92aWRlcigpO1xuICAgIGNvbnN0IHtzaGFyZVVybCwgZm9sZGVyTGlua30gPSBzdWNjZXNzSW5mbztcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgb25FeHBvcnQocHJvdmlkZXIpO1xuICAgICAgfVxuICAgIH0sIFtwcm92aWRlcl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZUxUfT5cbiAgICAgICAgPEltYWdlTW9kYWxDb250YWluZXJcbiAgICAgICAgICBwcm92aWRlcj17cHJvdmlkZXJ9XG4gICAgICAgICAgb25VcGRhdGVJbWFnZVNldHRpbmc9e29uVXBkYXRlSW1hZ2VTZXR0aW5nfVxuICAgICAgICAgIGNsZWFudXBFeHBvcnRJbWFnZT17Y2xlYW51cEV4cG9ydEltYWdlfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0eWxlZFNoYXJlTWFwTW9kYWwgY2xhc3NOYW1lPVwiZXhwb3J0LWNsb3VkLW1vZGFsXCI+XG4gICAgICAgICAgICA8U2hhcmVNYXBIZWFkZXIgY2xvdWRQcm92aWRlcnM9e2Nsb3VkUHJvdmlkZXJzfSAvPlxuICAgICAgICAgICAge3Byb3ZpZGVyPy5oYXNTaGFyaW5nVXJsKCkgPyAoXG4gICAgICAgICAgICAgIDxTdHlsZWRJbm5lckRpdiBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZHMucHJvdmlkZXJTaGFyZU1hcH0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLnNoYXJlVXJpVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuc2hhcmVVcmlTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlIHdhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLnNoYXJlRGlzY2xhaW1lcid9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uIGRpc2FibGVkPXtpc1Byb3ZpZGVyTG9hZGluZ30+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLmNsb3VkVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuY2xvdWRTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgIHtpc1Byb3ZpZGVyTG9hZGluZyB8fCBwcm92aWRlckVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgPFN0YXR1c1BhbmVsXG4gICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZz17aXNQcm92aWRlckxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGVycm9yPXtwcm92aWRlckVycm9yfVxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlckljb249e3Byb3ZpZGVyLmljb259XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtzaGFyZVVybCAmJiAoXG4gICAgICAgICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5TaGFyZSBVcmw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNoYXJpbmdVcmwga2V5PXswfSB1cmw9e3NoYXJlVXJsfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIHtwcm92aWRlciAmJiBmb2xkZXJMaW5rICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17MX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17Zm9sZGVyTGlua31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtVTkRFUkxJTkVfVEVYVF9ERUNPUkFUSU9OX1NUWUxFfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvdmlkZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZElubmVyRGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TdHlsZWRTaGFyZU1hcE1vZGFsPlxuICAgICAgICA8L0ltYWdlTW9kYWxDb250YWluZXI+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gU2hhcmVNYXBVcmxNb2RhbDtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};