@kepler.gl/components 3.1.0-alpha.3 → 3.1.0-alpha.5

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 (198) hide show
  1. package/dist/bottom-widget.d.ts +7 -1
  2. package/dist/bottom-widget.js +2 -8
  3. package/dist/common/action-panel.d.ts +5 -6
  4. package/dist/common/action-panel.js +3 -5
  5. package/dist/common/animation-control/animation-control.d.ts +2 -1
  6. package/dist/common/animation-control/animation-control.js +4 -2
  7. package/dist/common/animation-control/animation-speed-slider.js +21 -7
  8. package/dist/common/animation-control/floating-time-display.js +1 -1
  9. package/dist/common/animation-control/play-control.js +11 -13
  10. package/dist/common/animation-control/playback-controls.d.ts +11 -20
  11. package/dist/common/animation-control/playback-controls.js +6 -4
  12. package/dist/common/animation-control/reset-control.js +11 -13
  13. package/dist/common/animation-control/speed-control.js +10 -12
  14. package/dist/common/color-legend.d.ts +4 -5
  15. package/dist/common/color-legend.js +16 -5
  16. package/dist/common/column-stats-chart.d.ts +9 -3
  17. package/dist/common/column-stats-chart.js +17 -63
  18. package/dist/common/data-table/canvas.d.ts +2 -1
  19. package/dist/common/data-table/index.d.ts +7 -7
  20. package/dist/common/data-table/index.js +4 -5
  21. package/dist/common/file-uploader/file-upload-progress.d.ts +4 -4
  22. package/dist/common/file-uploader/file-upload-progress.js +1 -2
  23. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  24. package/dist/common/file-uploader/upload-button.js +2 -2
  25. package/dist/common/flex-container.d.ts +8 -3
  26. package/dist/common/histogram-plot.js +4 -2
  27. package/dist/common/icon-button.d.ts +7 -4
  28. package/dist/common/icons/draggable-dots.d.ts +14 -0
  29. package/dist/common/icons/draggable-dots.js +85 -0
  30. package/dist/common/icons/horizontal-resize-handle.d.ts +14 -0
  31. package/dist/common/icons/horizontal-resize-handle.js +59 -0
  32. package/dist/common/icons/index.d.ts +2 -0
  33. package/dist/common/icons/index.js +15 -1
  34. package/dist/common/icons/pin.js +1 -1
  35. package/dist/common/info-helper.js +2 -2
  36. package/dist/common/item-selector/chickleted-input.d.ts +21 -17
  37. package/dist/common/item-selector/chickleted-input.js +3 -3
  38. package/dist/common/item-selector/dropdown-list.d.ts +12 -12
  39. package/dist/common/item-selector/dropdown-list.js +1 -2
  40. package/dist/common/item-selector/dropdown-select.d.ts +8 -4
  41. package/dist/common/item-selector/dropdown-select.js +2 -2
  42. package/dist/common/item-selector/item-selector.d.ts +5 -9
  43. package/dist/common/item-selector/item-selector.js +1 -1
  44. package/dist/common/item-selector/typeahead.d.ts +20 -6
  45. package/dist/common/item-selector/typeahead.js +3 -3
  46. package/dist/common/loading-spinner.d.ts +8 -4
  47. package/dist/common/loading-spinner.js +1 -1
  48. package/dist/common/modal.d.ts +12 -12
  49. package/dist/common/modal.js +3 -3
  50. package/dist/common/portaled.d.ts +22 -486
  51. package/dist/common/portaled.js +6 -3
  52. package/dist/common/range-plot.d.ts +23 -28
  53. package/dist/common/range-plot.js +38 -29
  54. package/dist/common/range-slider-timeline.js +1 -2
  55. package/dist/common/slider/slider-bar-handle.d.ts +5 -0
  56. package/dist/common/slider/slider-bar-handle.js +2 -2
  57. package/dist/common/slider/slider-handle.d.ts +9 -0
  58. package/dist/common/slider/slider-handle.js +3 -3
  59. package/dist/common/slider/slider.d.ts +2 -2
  60. package/dist/common/styled-components.d.ts +444 -92
  61. package/dist/common/styled-components.js +15 -11
  62. package/dist/common/sync-timeline-control.js +2 -2
  63. package/dist/common/time-range-slider-time-title.d.ts +4 -0
  64. package/dist/common/time-range-slider-time-title.js +1 -1
  65. package/dist/common/time-range-slider.d.ts +7 -3
  66. package/dist/common/time-range-slider.js +1 -1
  67. package/dist/common/timeline-slider.d.ts +2 -0
  68. package/dist/common/timeline-slider.js +1 -1
  69. package/dist/common/toolbar-item.js +2 -2
  70. package/dist/common/toolbar.d.ts +5 -3
  71. package/dist/common/toolbar.js +1 -1
  72. package/dist/common/vertical-toolbar.d.ts +6 -1
  73. package/dist/container.js +2 -2
  74. package/dist/dnd-context.d.ts +1 -1
  75. package/dist/effects/compact-color-picker.d.ts +1 -1
  76. package/dist/effects/effect-configurator.d.ts +4 -4
  77. package/dist/effects/effect-manager.d.ts +2 -0
  78. package/dist/effects/effect-manager.js +10 -10
  79. package/dist/effects/effect-panel-header.js +5 -5
  80. package/dist/effects/effect-time-configurator.js +2 -2
  81. package/dist/effects/effect-time-selector.d.ts +1 -6
  82. package/dist/effects/effect-time-selector.js +3 -3
  83. package/dist/effects/effect-type-dropdown-list.js +2 -2
  84. package/dist/effects/effect-type-list-item.d.ts +1 -10
  85. package/dist/effects/effect-type-list-item.js +2 -2
  86. package/dist/effects/effect-type-selector.d.ts +1 -12
  87. package/dist/effects/effect-type-selector.js +2 -2
  88. package/dist/effects/timezone-selector.d.ts +1 -9
  89. package/dist/effects/timezone-selector.js +1 -1
  90. package/dist/filters/components.d.ts +6 -3
  91. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +3 -4
  92. package/dist/filters/time-widget-top.js +2 -2
  93. package/dist/filters/types.d.ts +4 -2
  94. package/dist/filters/types.js +1 -1
  95. package/dist/geocoder/geocoder.js +2 -2
  96. package/dist/geocoder-panel.d.ts +6 -0
  97. package/dist/geocoder-panel.js +1 -1
  98. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +3 -2
  99. package/dist/hooks/use-fetch-vector-tile-metadata.js +33 -18
  100. package/dist/hooks/use-legend-position.d.ts +36 -0
  101. package/dist/hooks/use-legend-position.js +147 -0
  102. package/dist/index.d.ts +2 -1
  103. package/dist/index.js +18 -3
  104. package/dist/kepler-gl.d.ts +44 -5
  105. package/dist/kepler-gl.js +77 -4
  106. package/dist/map/layer-hover-info.d.ts +3 -1
  107. package/dist/map/map-control-panel.js +4 -3
  108. package/dist/map/map-control-toolbar.d.ts +15 -1
  109. package/dist/map/map-control-toolbar.js +1 -1
  110. package/dist/map/map-legend-panel.d.ts +10 -35
  111. package/dist/map/map-legend-panel.js +234 -128
  112. package/dist/map/map-legend.d.ts +3 -2
  113. package/dist/map/map-legend.js +7 -10
  114. package/dist/map/map-popover.js +16 -11
  115. package/dist/map-container.d.ts +10 -8
  116. package/dist/map-container.js +86 -55
  117. package/dist/modal-container.d.ts +2 -1
  118. package/dist/modal-container.js +4 -3
  119. package/dist/modals/add-map-style-modal.d.ts +3 -0
  120. package/dist/modals/add-map-style-modal.js +58 -10
  121. package/dist/modals/cloud-components/cloud-item.js +2 -2
  122. package/dist/modals/cloud-tile.d.ts +6 -1
  123. package/dist/modals/cloud-tile.js +2 -2
  124. package/dist/modals/data-table-modal.d.ts +5 -3
  125. package/dist/modals/data-table-modal.js +3 -3
  126. package/dist/modals/export-data-modal.js +4 -5
  127. package/dist/modals/export-map-modal/components.d.ts +5 -3
  128. package/dist/modals/export-map-modal/export-html-map.js +2 -2
  129. package/dist/modals/export-map-modal/export-json-map.js +3 -2
  130. package/dist/modals/modal-dialog.d.ts +3 -1
  131. package/dist/modals/modal-tabs.js +2 -2
  132. package/dist/modals/share-map-modal.d.ts +4 -4
  133. package/dist/modals/storage-map-viewer.js +3 -3
  134. package/dist/modals/tilesets-modals/common.d.ts +1 -1
  135. package/dist/modals/tilesets-modals/common.js +1 -1
  136. package/dist/modals/tilesets-modals/load-data-footer.d.ts +3 -3
  137. package/dist/modals/tilesets-modals/load-data-footer.js +16 -7
  138. package/dist/modals/tilesets-modals/load-tileset.js +5 -4
  139. package/dist/modals/tilesets-modals/tileset-vector-form.js +28 -14
  140. package/dist/plot-container.js +3 -3
  141. package/dist/side-panel/add-by-dataset-button.js +4 -1
  142. package/dist/side-panel/common/dataset-info.js +3 -3
  143. package/dist/side-panel/common/dataset-title.d.ts +1 -0
  144. package/dist/side-panel/common/dataset-title.js +5 -4
  145. package/dist/side-panel/filter-manager.d.ts +2 -2
  146. package/dist/side-panel/filter-manager.js +1 -1
  147. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +9 -1
  148. package/dist/side-panel/filter-panel/filter-panel-header.js +24 -9
  149. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +10 -1
  150. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +5 -3
  151. package/dist/side-panel/layer-panel/aggr-scale-selector.d.ts +2 -1
  152. package/dist/side-panel/layer-panel/aggr-scale-selector.js +3 -1
  153. package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +2 -4
  154. package/dist/side-panel/layer-panel/channel-by-value-selector.js +9 -5
  155. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +15 -7
  156. package/dist/side-panel/layer-panel/color-breaks-panel.js +52 -20
  157. package/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  158. package/dist/side-panel/layer-panel/color-palette.d.ts +9 -4
  159. package/dist/side-panel/layer-panel/color-palette.js +13 -7
  160. package/dist/side-panel/layer-panel/color-range-selector.js +2 -2
  161. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +3 -1
  162. package/dist/side-panel/layer-panel/color-scale-selector.js +82 -37
  163. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -6
  164. package/dist/side-panel/layer-panel/color-selector.js +52 -36
  165. package/dist/side-panel/layer-panel/custom-palette.d.ts +44 -15
  166. package/dist/side-panel/layer-panel/custom-palette.js +342 -39
  167. package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -5
  168. package/dist/side-panel/layer-panel/custom-picker.js +2 -2
  169. package/dist/side-panel/layer-panel/dimension-scale-selector.js +5 -3
  170. package/dist/side-panel/layer-panel/layer-column-mode-config.js +1 -1
  171. package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -11
  172. package/dist/side-panel/layer-panel/layer-config-group.js +2 -2
  173. package/dist/side-panel/layer-panel/layer-configurator.d.ts +7 -7
  174. package/dist/side-panel/layer-panel/layer-configurator.js +10 -10
  175. package/dist/side-panel/layer-panel/layer-list.d.ts +2 -0
  176. package/dist/side-panel/layer-panel/layer-list.js +7 -4
  177. package/dist/side-panel/layer-panel/layer-panel-header.js +5 -5
  178. package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -0
  179. package/dist/side-panel/layer-panel/layer-panel.js +8 -8
  180. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +2 -2
  181. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +1 -10
  182. package/dist/side-panel/layer-panel/layer-type-list-item.js +2 -2
  183. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -8
  184. package/dist/side-panel/layer-panel/layer-type-selector.js +1 -1
  185. package/dist/side-panel/layer-panel/single-color-palette.js +2 -2
  186. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +6 -3
  187. package/dist/side-panel/map-style-panel/map-style-selector.js +2 -2
  188. package/dist/side-panel/panel-header-action.js +2 -2
  189. package/dist/side-panel/panel-header.js +2 -2
  190. package/dist/side-panel/panel-tab.d.ts +3 -3
  191. package/dist/side-panel/panel-tab.js +2 -2
  192. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  193. package/dist/side-panel/panel-view-list-toggle.js +2 -2
  194. package/dist/side-panel/side-bar.js +2 -2
  195. package/dist/side-panel.d.ts +1 -1
  196. package/dist/types.d.ts +6 -7
  197. package/dist/types.js +1 -1
  198. package/package.json +23 -22
@@ -15,4 +15,4 @@ function MapControlToolbar() {
15
15
  return StyledToolbar;
16
16
  }
17
17
  var _default = exports["default"] = MapControlToolbar;
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnRpY2FsVG9vbGJhciIsIl90ZW1wbGF0ZU9iamVjdCIsIk1hcENvbnRyb2xUb29sYmFyIiwiU3R5bGVkVG9vbGJhciIsInN0eWxlZCIsIlZlcnRpY2FsVG9vbGJhciIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC9tYXAtY29udHJvbC10b29sYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBWZXJ0aWNhbFRvb2xiYXIgZnJvbSAnLi4vY29tbW9uL3ZlcnRpY2FsLXRvb2xiYXInO1xuXG5mdW5jdGlvbiBNYXBDb250cm9sVG9vbGJhcigpIHtcbiAgY29uc3QgU3R5bGVkVG9vbGJhciA9IHN0eWxlZChWZXJ0aWNhbFRvb2xiYXIpYFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMzJweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYygtNTAlICsgNDVweCkpO1xuXG4gICAgLnRvb2xiYXItaXRlbSB7XG4gICAgICB3aWR0aDogMTIwcHg7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE2cHg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgICAudG9vbGJhci1pdGVtX19zdmctY29udGFpbmVyIHtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgfVxuXG4gICAgICAudG9vbGJhci1pdGVtX190aXRsZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICBgO1xuXG4gIHJldHVybiBTdHlsZWRUb29sYmFyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBDb250cm9sVG9vbGJhcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxJQUFBQSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RCxJQUFBRSxlQUFBLEVBSnpEO0FBQ0E7QUFLQSxTQUFTQyxpQkFBaUJBLENBQUEsRUFBRztFQUMzQixJQUFNQyxhQUFhLEdBQUcsSUFBQUMsNEJBQU0sRUFBQ0MsMkJBQWUsQ0FBQyxDQUFBSixlQUFBLEtBQUFBLGVBQUEsT0FBQUssdUJBQUEsNmRBc0I1QztFQUVELE9BQU9ILGFBQWE7QUFDdEI7QUFBQyxJQUFBSSxRQUFBLEdBQUFDLE9BQUEsY0FFY04saUJBQWlCIiwiaWdub3JlTGlzdCI6W119
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnRpY2FsVG9vbGJhciIsIl90ZW1wbGF0ZU9iamVjdCIsIk1hcENvbnRyb2xUb29sYmFyIiwiU3R5bGVkVG9vbGJhciIsInN0eWxlZCIsIlZlcnRpY2FsVG9vbGJhciIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC9tYXAtY29udHJvbC10b29sYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBWZXJ0aWNhbFRvb2xiYXIgZnJvbSAnLi4vY29tbW9uL3ZlcnRpY2FsLXRvb2xiYXInO1xuaW1wb3J0IHtCYXNlQ29tcG9uZW50UHJvcHN9IGZyb20gJy4uL3R5cGVzJztcblxuZnVuY3Rpb24gTWFwQ29udHJvbFRvb2xiYXIoKSB7XG4gIGNvbnN0IFN0eWxlZFRvb2xiYXIgPSBzdHlsZWQoVmVydGljYWxUb29sYmFyKTxCYXNlQ29tcG9uZW50UHJvcHM+YFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMzJweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYygtNTAlICsgNDVweCkpO1xuXG4gICAgLnRvb2xiYXItaXRlbSB7XG4gICAgICB3aWR0aDogMTIwcHg7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE2cHg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgICAudG9vbGJhci1pdGVtX19zdmctY29udGFpbmVyIHtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgfVxuXG4gICAgICAudG9vbGJhci1pdGVtX190aXRsZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICBgO1xuXG4gIHJldHVybiBTdHlsZWRUb29sYmFyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBDb250cm9sVG9vbGJhcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxJQUFBQSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RCxJQUFBRSxlQUFBLEVBSnpEO0FBQ0E7QUFNQSxTQUFTQyxpQkFBaUJBLENBQUEsRUFBRztFQUMzQixJQUFNQyxhQUFhLEdBQUcsSUFBQUMsNEJBQU0sRUFBQ0MsMkJBQWUsQ0FBQyxDQUFBSixlQUFBLEtBQUFBLGVBQUEsT0FBQUssdUJBQUEsNmRBc0I1QztFQUVELE9BQU9ILGFBQWE7QUFDdEI7QUFBQyxJQUFBSSxRQUFBLEdBQUFDLE9BQUEsY0FFY04saUJBQWlCIiwiaWdub3JlTGlzdCI6W119
@@ -1,10 +1,11 @@
1
1
  import React, { ComponentType } from 'react';
2
- import MapControlTooltipFactory from './map-control-tooltip';
2
+ import { ActionHandler, toggleSplitMapViewport } from '@kepler.gl/actions';
3
+ import { Layer } from '@kepler.gl/layers';
4
+ import { LayerVisConfig, MapControls, MapState } from '@kepler.gl/types';
5
+ import { MapLegendControlSettings } from '../hooks/use-legend-position';
3
6
  import MapControlPanelFactory from './map-control-panel';
7
+ import MapControlTooltipFactory from './map-control-tooltip';
4
8
  import MapLegendFactory from './map-legend';
5
- import { LayerVisConfig, MapControls, MapState } from '@kepler.gl/types';
6
- import { Layer } from '@kepler.gl/layers';
7
- import { ActionHandler, toggleSplitMapViewport } from '@kepler.gl/actions';
8
9
  export declare type MapLegendPanelFactoryDeps = [
9
10
  typeof MapControlTooltipFactory,
10
11
  typeof MapControlPanelFactory,
@@ -23,42 +24,16 @@ export declare type MapLegendPanelProps = {
23
24
  actionIcons: MapLegendPanelIcons;
24
25
  mapControls: MapControls;
25
26
  mapState?: MapState;
26
- mapHeight?: number;
27
- offsetRight?: number;
27
+ onLayerVisConfigChange?: (oldLayer: Layer, newVisConfig: Partial<LayerVisConfig>) => void;
28
28
  onToggleSplitMapViewport?: ActionHandler<typeof toggleSplitMapViewport>;
29
29
  isViewportUnsyncAllowed?: boolean;
30
30
  onClickControlBtn?: (e?: MouseEvent) => void;
31
- onLayerVisConfigChange?: (oldLayer: Layer, newVisConfig: Partial<LayerVisConfig>) => void;
32
31
  className: string;
32
+ settings: MapLegendControlSettings;
33
+ isSidePanelShown: boolean;
33
34
  };
34
- declare function MapLegendPanelFactory(MapControlTooltip: any, MapControlPanel: any, MapLegend: any): React.ForwardRefExoticComponent<{
35
- className: string;
36
- scale: number;
37
- layers: readonly Layer[];
38
- logoComponent: Element;
39
- onToggleMapControl: (control: string) => void;
40
- isExport: boolean;
41
- actionIcons: MapLegendPanelIcons;
42
- mapControls: MapControls;
43
- mapState?: MapState | undefined;
44
- mapHeight?: number | undefined;
45
- offsetRight?: number | undefined;
46
- onToggleSplitMapViewport?: ActionHandler<(payload: {
47
- isViewportSynced?: boolean | undefined;
48
- isZoomLocked?: boolean | undefined;
49
- }) => {
50
- payload: {
51
- isViewportSynced?: boolean | undefined;
52
- isZoomLocked?: boolean | undefined;
53
- };
54
- type: "@@kepler.gl/TOGGLE_SPLIT_MAP_VIEWPORT";
55
- }> | undefined;
56
- isViewportUnsyncAllowed?: boolean | undefined;
57
- onClickControlBtn?: ((e?: MouseEvent | undefined) => void) | undefined;
58
- onLayerVisConfigChange?: ((oldLayer: Layer, newVisConfig: Partial<LayerVisConfig>) => void) | undefined;
59
- } & {
60
- theme?: any;
61
- }>;
35
+ declare type MapLegendPanelComponentType = React.FC<MapLegendPanelProps>;
36
+ declare function MapLegendPanelFactory(MapControlTooltip: ReturnType<typeof MapControlTooltipFactory>, MapControlPanel: ReturnType<typeof MapControlPanelFactory>, MapLegend: ReturnType<typeof MapLegendFactory>): MapLegendPanelComponentType;
62
37
  declare namespace MapLegendPanelFactory {
63
38
  var deps: (typeof MapControlTooltipFactory | typeof MapControlPanelFactory | typeof MapLegendFactory)[];
64
39
  }
@@ -7,149 +7,255 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
12
+ var _classnames = _interopRequireDefault(require("classnames"));
12
13
  var _reactDom = require("react-dom");
13
14
  var _react = _interopRequireWildcard(require("react"));
14
15
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
16
+ var _core = require("@dnd-kit/core");
17
+ var _utilities = require("@dnd-kit/utilities");
18
+ var _react2 = require("@floating-ui/react");
19
+ var _actions = require("@kepler.gl/actions");
20
+ var _reducers = require("@kepler.gl/reducers");
21
+ var _styles = require("@kepler.gl/styles");
22
+ var _utils = require("@kepler.gl/utils");
15
23
  var _icons = require("../common/icons");
16
24
  var _styledComponents2 = require("../common/styled-components");
17
- var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
25
+ var _context = require("../context");
26
+ var _useLegendPosition3 = _interopRequireDefault(require("../hooks/use-legend-position"));
27
+ var _injector = require("../injector");
18
28
  var _mapControlPanel = _interopRequireDefault(require("./map-control-panel"));
29
+ var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
19
30
  var _mapLegend = _interopRequireDefault(require("./map-legend"));
20
- var _constants = require("@kepler.gl/constants");
21
- var _styles = require("@kepler.gl/styles");
22
- var _context = require("../context");
23
- var _react2 = require("@floating-ui/react");
24
- var _templateObject, _templateObject2; // SPDX-License-Identifier: MIT
31
+ var _modifiers = require("@dnd-kit/modifiers");
32
+ var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
25
33
  // Copyright contributors to the kepler.gl project
26
34
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
27
35
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
28
- MapLegendPanelFactory.deps = [_mapControlTooltip["default"], _mapControlPanel["default"], _mapLegend["default"]];
29
- var PinToBottom = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n bottom: ", "px;\n right: ", "px;\n ", ";\n"])), _constants.DIMENSIONS.mapControl.mapLegend.pinned.bottom, function (props) {
30
- return (props.offsetRight || 0) + _constants.DIMENSIONS.mapControl.mapLegend.pinned.right;
31
- }, _styles.media.portable(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n bottom: 0px;\n right: 0px;\n min-width: ", "px;\n .map-control-panel {\n min-height: 215px;\n margin-bottom: 0px;\n };\n "])), _constants.DIMENSIONS.mapControl.width + _constants.DIMENSIONS.mapControl.mapLegend.pinned.right));
32
- function MapLegendPanelFactory(MapControlTooltip, MapControlPanel, MapLegend) {
33
- var defaultActionIcons = {
34
- legend: _icons.Legend
35
- };
36
- var MapLegendPanel = function MapLegendPanel(_ref) {
37
- var theme = _ref.theme,
38
- layers = _ref.layers,
39
- mapControls = _ref.mapControls,
40
- scale = _ref.scale,
41
- onToggleMapControl = _ref.onToggleMapControl,
42
- isExport = _ref.isExport,
43
- logoComponent = _ref.logoComponent,
44
- _ref$actionIcons = _ref.actionIcons,
45
- actionIcons = _ref$actionIcons === void 0 ? defaultActionIcons : _ref$actionIcons,
46
- mapState = _ref.mapState,
47
- offsetRight = _ref.offsetRight,
48
- onToggleSplitMapViewport = _ref.onToggleSplitMapViewport,
49
- onClickControlBtn = _ref.onClickControlBtn,
50
- _ref$isViewportUnsync = _ref.isViewportUnsyncAllowed,
51
- isViewportUnsyncAllowed = _ref$isViewportUnsync === void 0 ? true : _ref$isViewportUnsync,
52
- className = _ref.className,
53
- onLayerVisConfigChange = _ref.onLayerVisConfigChange;
54
- var mapLegend = (mapControls === null || mapControls === void 0 ? void 0 : mapControls.mapLegend) || {};
55
- var _ref2 = mapLegend || {},
56
- isPinned = _ref2.active,
57
- disableEdit = _ref2.disableEdit;
58
- var rootContext = (0, _react.useContext)(_context.RootContext);
59
- var _useState = (0, _react.useState)(false),
60
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
61
- isOpened = _useState2[0],
62
- setIsOpened = _useState2[1];
63
- var _useFloating = (0, _react2.useFloating)({
64
- placement: 'left-start',
65
- open: isOpened,
66
- onOpenChange: setIsOpened,
67
- middleware: [(0, _react2.offset)(10)]
68
- }),
69
- refs = _useFloating.refs,
70
- context = _useFloating.context,
71
- floatingStyles = _useFloating.floatingStyles;
72
- var click = (0, _react2.useClick)(context);
73
- var dismiss = (0, _react2.useDismiss)(context);
74
- var _useInteractions = (0, _react2.useInteractions)([click, dismiss]),
75
- getFloatingProps = _useInteractions.getFloatingProps,
76
- getReferenceProps = _useInteractions.getReferenceProps;
77
- var onClick = (0, _react.useCallback)(function () {
78
- var _mapControls$mapDraw;
79
- onClickControlBtn === null || onClickControlBtn === void 0 || onClickControlBtn();
80
- if (mapControls !== null && mapControls !== void 0 && (_mapControls$mapDraw = mapControls.mapDraw) !== null && _mapControls$mapDraw !== void 0 && _mapControls$mapDraw.active) {
81
- onToggleMapControl('mapDraw');
82
- }
83
- }, [onClickControlBtn, onToggleMapControl, mapControls]);
84
- var onCloseClick = (0, _react.useCallback)(function (e) {
85
- e.preventDefault();
86
- onToggleMapControl('mapLegend');
87
- }, [onToggleMapControl]);
88
- var onPinClick = (0, _react.useCallback)(function (e) {
89
- e.preventDefault();
90
- setIsOpened(false);
91
- onToggleMapControl('mapLegend');
92
- }, [setIsOpened, onToggleMapControl]);
93
- if (!mapLegend.show) {
94
- return null;
36
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
38
+ var DRAG_RESIZE_ID = 'map-legend-resize';
39
+ var DRAG_MOVE_ID = 'map-legend-move';
40
+ var StyledDraggableLegendContent = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n outline: none;\n transition: border-color 0.2s ease-in-out;\n border: 1px solid transparent;\n .legend-input-block {\n display: none;\n }\n &.is-dragging .legend-input-block {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: transparent;\n }\n &:hover,\n &.is-dragging {\n .legend-move-handle {\n opacity: 1;\n pointer-events: auto;\n }\n .legend-resize-handle {\n opacity: 1;\n pointer-events: auto;\n }\n border-color: ", ";\n }\n .map-control__panel-content {\n max-height: calc(100vh - 100px);\n ", ";\n }\n border-radius: 4px;\n z-index: 2;\n .map-control-panel {\n margin-bottom: 0 !important;\n }\n"])), function (props) {
41
+ return props.theme.activeColor;
42
+ }, function (props) {
43
+ return props.contentHeight ? "height: ".concat(props.contentHeight, "px;") : '';
44
+ });
45
+ var StyledMoveHandle = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n color: white;\n z-index: 2;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 48px;\n height: 16px;\n border-radius: 4px;\n cursor: move;\n background-color: ", ";\n"])), function (props) {
46
+ return props.theme.activeColor;
47
+ });
48
+ var StyledResizeHandle = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #f7f8fa;\n z-index: 2;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 48px;\n height: 16px;\n border-radius: 4px;\n cursor: ns-resize;\n"])));
49
+ var DraggableLegendContent = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
50
+ var positionStyles = props.positionStyles,
51
+ children = props.children;
52
+ var draggableMove = (0, _core.useDraggable)({
53
+ id: DRAG_MOVE_ID
54
+ });
55
+ var draggableResize = (0, _core.useDraggable)({
56
+ id: DRAG_RESIZE_ID
57
+ });
58
+ var refs = (0, _react2.useMergeRefs)([draggableMove.setNodeRef, ref]);
59
+ var isDragging = draggableMove.isDragging || draggableResize.isDragging;
60
+ return /*#__PURE__*/_react["default"].createElement(StyledDraggableLegendContent, (0, _extends2["default"])({
61
+ ref: refs,
62
+ className: (0, _classnames["default"])('draggable-legend', {
63
+ 'is-dragging': isDragging
64
+ }),
65
+ style: _objectSpread(_objectSpread({}, positionStyles), {}, {
66
+ transform: _utilities.CSS.Translate.toString(draggableMove.transform)
67
+ }),
68
+ contentHeight: props.contentHeight
69
+ }, draggableMove.attributes), children, isDragging ? /*#__PURE__*/_react["default"].createElement("div", {
70
+ className: "legend-input-block"
71
+ }) : null, /*#__PURE__*/_react["default"].createElement(StyledMoveHandle, (0, _extends2["default"])({
72
+ className: "legend-move-handle"
73
+ }, draggableMove.listeners), /*#__PURE__*/_react["default"].createElement(_icons.DraggableDots, {
74
+ height: "16px"
75
+ })), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, (0, _extends2["default"])({
76
+ className: "legend-resize-handle",
77
+ ref: draggableResize.setNodeRef
78
+ }, draggableResize.listeners), /*#__PURE__*/_react["default"].createElement(_icons.HorizontalResizeHandle, {
79
+ height: "16px"
80
+ })));
81
+ });
82
+ var DraggableLegend = (0, _injector.withState)([_reducers.uiStateLens], function (state) {
83
+ return state;
84
+ }, {
85
+ setMapControlSettings: _actions.setMapControlSettings
86
+ })((0, _styledComponents.withTheme)(function (_ref) {
87
+ var _uiState$mapControls;
88
+ var uiState = _ref.uiState,
89
+ theme = _ref.theme,
90
+ setMapControlSettings = _ref.setMapControlSettings,
91
+ children = _ref.children;
92
+ var isSidePanelShown = uiState.activeSidePanel;
93
+ var settings = (_uiState$mapControls = uiState.mapControls) === null || _uiState$mapControls === void 0 || (_uiState$mapControls = _uiState$mapControls.mapLegend) === null || _uiState$mapControls === void 0 ? void 0 : _uiState$mapControls.settings;
94
+ var legendContentRef = (0, _react.useRef)(null);
95
+ var onChangeSettings = (0, _react.useCallback)(function (newSettings) {
96
+ return setMapControlSettings('mapLegend', newSettings);
97
+ }, [setMapControlSettings]);
98
+ var _useLegendPosition = (0, _useLegendPosition3["default"])({
99
+ legendContentRef: legendContentRef,
100
+ isSidePanelShown: isSidePanelShown,
101
+ theme: theme,
102
+ settings: settings,
103
+ onChangeSettings: onChangeSettings
104
+ }),
105
+ positionStyles = _useLegendPosition.positionStyles,
106
+ updatePosition = _useLegendPosition.updatePosition,
107
+ startResize = _useLegendPosition.startResize,
108
+ resize = _useLegendPosition.resize,
109
+ contentHeight = _useLegendPosition.contentHeight;
110
+ var handleDragStart = (0, _react.useCallback)(function (event) {
111
+ switch (event.active.id) {
112
+ case DRAG_RESIZE_ID:
113
+ startResize();
114
+ break;
115
+ default:
116
+ updatePosition();
95
117
  }
96
- var mapControlPanel = /*#__PURE__*/_react["default"].createElement(MapControlPanel, (0, _extends2["default"])({
97
- scale: scale,
98
- header: "header.layerLegend",
99
- isPinned: true
100
- }, isPinned ? {
101
- onClick: onCloseClick,
102
- pinnable: false,
103
- disableClose: false
104
- } : {
105
- onPinClick: onPinClick,
106
- pinnable: true,
107
- disableClose: true
108
- }, {
109
- isExport: isExport,
110
- logoComponent: logoComponent,
111
- mapState: mapState,
112
- onToggleSplitMapViewport: onToggleSplitMapViewport,
113
- isViewportUnsyncAllowed: isViewportUnsyncAllowed,
114
- className: className
115
- }), /*#__PURE__*/_react["default"].createElement(MapLegend, {
116
- layers: layers,
117
- mapState: mapState,
118
- disableEdit: disableEdit,
119
- isExport: isExport,
120
- onLayerVisConfigChange: onLayerVisConfigChange
121
- }));
122
- if (isPinned) {
123
- var _mapControls$effect, _mapControls$effect2, _mapControls$aiAssist, _mapControls$aiAssist2;
124
- // Pinned panel is not supported in export mode
125
- if (isExport) {
126
- return mapControlPanel;
118
+ }, [updatePosition, startResize]);
119
+ var handleDragEnd = (0, _react.useCallback)(updatePosition, [updatePosition]);
120
+ var handleDragMove = (0, _react.useCallback)(function (event) {
121
+ switch (event.active.id) {
122
+ case DRAG_RESIZE_ID:
123
+ resize(event.delta.y);
124
+ break;
125
+ }
126
+ }, [resize]);
127
+ return /*#__PURE__*/_react["default"].createElement(_core.DndContext, {
128
+ onDragStart: handleDragStart,
129
+ onDragMove: handleDragMove,
130
+ onDragEnd: handleDragEnd,
131
+ modifiers: [_modifiers.restrictToWindowEdges]
132
+ }, /*#__PURE__*/_react["default"].createElement(DraggableLegendContent, {
133
+ ref: legendContentRef,
134
+ positionStyles: positionStyles,
135
+ contentHeight: contentHeight
136
+ }, children));
137
+ }));
138
+ var ImageExportLegend = (0, _styledComponents.withTheme)(function (_ref2) {
139
+ var _containerRef$current;
140
+ var settings = _ref2.settings,
141
+ isSidePanelShown = _ref2.isSidePanelShown,
142
+ theme = _ref2.theme,
143
+ children = _ref2.children;
144
+ var containerRef = (0, _react.useRef)(null);
145
+ var legendContentRef = (0, _react.useRef)(null);
146
+ var _useLegendPosition2 = (0, _useLegendPosition3["default"])({
147
+ legendContentRef: legendContentRef,
148
+ isSidePanelShown: isSidePanelShown,
149
+ theme: theme,
150
+ settings: settings,
151
+ onChangeSettings: function onChangeSettings() {
152
+ // do nothing by default
127
153
  }
128
- var pinnedOffsetRight = mapControls !== null && mapControls !== void 0 && (_mapControls$effect = mapControls.effect) !== null && _mapControls$effect !== void 0 && _mapControls$effect.show && mapControls !== null && mapControls !== void 0 && (_mapControls$effect2 = mapControls.effect) !== null && _mapControls$effect2 !== void 0 && _mapControls$effect2.active ? theme.effectPanelWidth + 10 : mapControls !== null && mapControls !== void 0 && (_mapControls$aiAssist = mapControls.aiAssistant) !== null && _mapControls$aiAssist !== void 0 && _mapControls$aiAssist.show && mapControls !== null && mapControls !== void 0 && (_mapControls$aiAssist2 = mapControls.aiAssistant) !== null && _mapControls$aiAssist2 !== void 0 && _mapControls$aiAssist2.active ? theme.aiAssistantPanelWidth + 10 : 0;
129
- var pinnedPanel = /*#__PURE__*/_react["default"].createElement(PinToBottom, {
130
- offsetRight: pinnedOffsetRight
131
- }, mapControlPanel);
132
- return /*#__PURE__*/(0, _reactDom.createPortal)(pinnedPanel, (rootContext === null || rootContext === void 0 ? void 0 : rootContext.current) || document.body);
154
+ }),
155
+ positionStyles = _useLegendPosition2.positionStyles;
156
+ var portalRoot = (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 || (_containerRef$current = _containerRef$current.closest('.export-map-instance')) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.querySelector('#default-deckgl-overlay-wrapper');
157
+ return /*#__PURE__*/_react["default"].createElement("div", {
158
+ ref: containerRef
159
+ }, portalRoot ? /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react["default"].createElement("div", {
160
+ className: "fixed-legend",
161
+ ref: legendContentRef,
162
+ style: _objectSpread(_objectSpread({}, positionStyles), {}, {
163
+ position: 'absolute'
164
+ })
165
+ }, children), portalRoot) : null);
166
+ });
167
+ MapLegendPanelFactory.deps = [_mapControlTooltip["default"], _mapControlPanel["default"], _mapLegend["default"]];
168
+ var defaultActionIcons = {
169
+ legend: _icons.Legend
170
+ };
171
+ var MapLegendPanelComponent = function MapLegendPanelComponent(_ref3) {
172
+ var _uiState$mapControls2, _rootContext$current;
173
+ var layers = _ref3.layers,
174
+ mapControls = _ref3.mapControls,
175
+ scale = _ref3.scale,
176
+ onToggleMapControl = _ref3.onToggleMapControl,
177
+ isExport = _ref3.isExport,
178
+ logoComponent = _ref3.logoComponent,
179
+ _ref3$actionIcons = _ref3.actionIcons,
180
+ actionIcons = _ref3$actionIcons === void 0 ? defaultActionIcons : _ref3$actionIcons,
181
+ mapState = _ref3.mapState,
182
+ uiState = _ref3.uiState,
183
+ onLayerVisConfigChange = _ref3.onLayerVisConfigChange,
184
+ onToggleSplitMapViewport = _ref3.onToggleSplitMapViewport,
185
+ onClickControlBtn = _ref3.onClickControlBtn,
186
+ _ref3$isViewportUnsyn = _ref3.isViewportUnsyncAllowed,
187
+ isViewportUnsyncAllowed = _ref3$isViewportUnsyn === void 0 ? true : _ref3$isViewportUnsyn,
188
+ className = _ref3.className,
189
+ interactionConfig = _ref3.interactionConfig,
190
+ MapControlTooltip = _ref3.MapControlTooltip,
191
+ MapControlPanel = _ref3.MapControlPanel,
192
+ MapLegend = _ref3.MapLegend;
193
+ var isSidePanelShown = uiState.activeSidePanel;
194
+ var settings = (_uiState$mapControls2 = uiState.mapControls) === null || _uiState$mapControls2 === void 0 || (_uiState$mapControls2 = _uiState$mapControls2.mapLegend) === null || _uiState$mapControls2 === void 0 ? void 0 : _uiState$mapControls2.settings;
195
+ var mapLegend = (mapControls === null || mapControls === void 0 ? void 0 : mapControls.mapLegend) || {};
196
+ var _ref4 = mapLegend || {},
197
+ active = _ref4.active,
198
+ disableEdit = _ref4.disableEdit;
199
+ var rootContext = (0, _react.useContext)(_context.RootContext);
200
+ var onClick = (0, _react.useCallback)(function () {
201
+ var _mapControls$mapDraw;
202
+ onClickControlBtn === null || onClickControlBtn === void 0 || onClickControlBtn();
203
+ if (mapControls !== null && mapControls !== void 0 && (_mapControls$mapDraw = mapControls.mapDraw) !== null && _mapControls$mapDraw !== void 0 && _mapControls$mapDraw.active) {
204
+ onToggleMapControl('mapDraw');
133
205
  }
134
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, isOpened ? /*#__PURE__*/_react["default"].createElement(_react2.FloatingPortal, {
135
- root: rootContext === null || rootContext === void 0 ? void 0 : rootContext.current
136
- }, /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
137
- ref: refs.setFloating,
138
- style: floatingStyles
139
- }, getFloatingProps()), mapControlPanel)) : null, /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
140
- ref: refs.setReference
141
- }, getReferenceProps()), /*#__PURE__*/_react["default"].createElement(MapControlTooltip, {
142
- id: "show-legend",
143
- message: "tooltip.showLegend"
144
- }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.MapControlButton, {
145
- className: "map-control-button show-legend",
146
- onClick: onClick
147
- }, /*#__PURE__*/_react["default"].createElement(actionIcons.legend, {
148
- height: "22px"
149
- })))));
150
- };
206
+ onToggleMapControl('mapLegend');
207
+ }, [onClickControlBtn, onToggleMapControl, mapControls]);
208
+ var onCloseClick = (0, _react.useCallback)(function (e) {
209
+ e.preventDefault();
210
+ onToggleMapControl('mapLegend');
211
+ }, [onToggleMapControl]);
212
+ if (!mapLegend.show) {
213
+ return null;
214
+ }
215
+ var legendPanel = active ? /*#__PURE__*/_react["default"].createElement(MapControlPanel, {
216
+ scale: scale,
217
+ header: "header.layerLegend",
218
+ onClick: onCloseClick,
219
+ pinnable: false,
220
+ disableClose: false,
221
+ isExport: isExport,
222
+ logoComponent: logoComponent,
223
+ mapState: mapState,
224
+ onToggleSplitMapViewport: onToggleSplitMapViewport,
225
+ isViewportUnsyncAllowed: isViewportUnsyncAllowed,
226
+ className: className
227
+ }, /*#__PURE__*/_react["default"].createElement(MapLegend, {
228
+ layers: layers,
229
+ mapState: mapState,
230
+ disableEdit: disableEdit,
231
+ isExport: isExport,
232
+ onLayerVisConfigChange: onLayerVisConfigChange
233
+ })) : null;
234
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, active ? (0, _utils.hasPortableWidth)(_styles.breakPointValues) ? legendPanel : isExport ? /*#__PURE__*/_react["default"].createElement(ImageExportLegend, {
235
+ isSidePanelShown: isSidePanelShown,
236
+ settings: settings
237
+ }, legendPanel) : ( /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react["default"].createElement(DraggableLegend, null, legendPanel), (_rootContext$current = rootContext === null || rootContext === void 0 ? void 0 : rootContext.current) !== null && _rootContext$current !== void 0 ? _rootContext$current : document.body)) : null, !isExport ? /*#__PURE__*/_react["default"].createElement(MapControlTooltip, {
238
+ id: "show-legend",
239
+ message: "tooltip.showLegend"
240
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.MapControlButton, {
241
+ className: "map-control-button show-legend",
242
+ onClick: onClick
243
+ }, /*#__PURE__*/_react["default"].createElement(actionIcons.legend, {
244
+ height: "22px"
245
+ }))) : null);
246
+ };
247
+ function MapLegendPanelFactory(MapControlTooltip, MapControlPanel, MapLegend) {
248
+ var MapLegendPanel = (0, _injector.withState)([_reducers.uiStateLens], function (state) {
249
+ return {
250
+ MapControlTooltip: MapControlTooltip,
251
+ MapControlPanel: MapControlPanel,
252
+ MapLegend: MapLegend
253
+ };
254
+ }, {
255
+ setMapControlSettings: _actions.setMapControlSettings
256
+ })(MapLegendPanelComponent);
151
257
  MapLegendPanel.displayName = 'MapLegendPanel';
152
258
  return (0, _styledComponents.withTheme)(MapLegendPanel);
153
259
  }
154
260
  var _default = exports["default"] = MapLegendPanelFactory;
155
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3REb20iLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pY29ucyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9tYXBDb250cm9sVG9vbHRpcCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWFwQ29udHJvbFBhbmVsIiwiX21hcExlZ2VuZCIsIl9jb25zdGFudHMiLCJfc3R5bGVzIiwiX2NvbnRleHQiLCJfcmVhY3QyIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIk1hcExlZ2VuZFBhbmVsRmFjdG9yeSIsImRlcHMiLCJNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkiLCJNYXBDb250cm9sUGFuZWxGYWN0b3J5IiwiTWFwTGVnZW5kRmFjdG9yeSIsIlBpblRvQm90dG9tIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJESU1FTlNJT05TIiwibWFwQ29udHJvbCIsIm1hcExlZ2VuZCIsInBpbm5lZCIsImJvdHRvbSIsInByb3BzIiwib2Zmc2V0UmlnaHQiLCJyaWdodCIsIm1lZGlhIiwicG9ydGFibGUiLCJ3aWR0aCIsIk1hcENvbnRyb2xUb29sdGlwIiwiTWFwQ29udHJvbFBhbmVsIiwiTWFwTGVnZW5kIiwiZGVmYXVsdEFjdGlvbkljb25zIiwibGVnZW5kIiwiTGVnZW5kIiwiTWFwTGVnZW5kUGFuZWwiLCJfcmVmIiwidGhlbWUiLCJsYXllcnMiLCJtYXBDb250cm9scyIsInNjYWxlIiwib25Ub2dnbGVNYXBDb250cm9sIiwiaXNFeHBvcnQiLCJsb2dvQ29tcG9uZW50IiwiX3JlZiRhY3Rpb25JY29ucyIsImFjdGlvbkljb25zIiwibWFwU3RhdGUiLCJvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvbkNsaWNrQ29udHJvbEJ0biIsIl9yZWYkaXNWaWV3cG9ydFVuc3luYyIsImlzVmlld3BvcnRVbnN5bmNBbGxvd2VkIiwiY2xhc3NOYW1lIiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsIl9yZWYyIiwiaXNQaW5uZWQiLCJhY3RpdmUiLCJkaXNhYmxlRWRpdCIsInJvb3RDb250ZXh0IiwidXNlQ29udGV4dCIsIlJvb3RDb250ZXh0IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNPcGVuZWQiLCJzZXRJc09wZW5lZCIsIl91c2VGbG9hdGluZyIsInVzZUZsb2F0aW5nIiwicGxhY2VtZW50Iiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsIm1pZGRsZXdhcmUiLCJvZmZzZXQiLCJyZWZzIiwiY29udGV4dCIsImZsb2F0aW5nU3R5bGVzIiwiY2xpY2siLCJ1c2VDbGljayIsImRpc21pc3MiLCJ1c2VEaXNtaXNzIiwiX3VzZUludGVyYWN0aW9ucyIsInVzZUludGVyYWN0aW9ucyIsImdldEZsb2F0aW5nUHJvcHMiLCJnZXRSZWZlcmVuY2VQcm9wcyIsIm9uQ2xpY2siLCJ1c2VDYWxsYmFjayIsIl9tYXBDb250cm9scyRtYXBEcmF3IiwibWFwRHJhdyIsIm9uQ2xvc2VDbGljayIsInByZXZlbnREZWZhdWx0Iiwib25QaW5DbGljayIsInNob3ciLCJtYXBDb250cm9sUGFuZWwiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiaGVhZGVyIiwicGlubmFibGUiLCJkaXNhYmxlQ2xvc2UiLCJfbWFwQ29udHJvbHMkZWZmZWN0IiwiX21hcENvbnRyb2xzJGVmZmVjdDIiLCJfbWFwQ29udHJvbHMkYWlBc3Npc3QiLCJfbWFwQ29udHJvbHMkYWlBc3Npc3QyIiwicGlubmVkT2Zmc2V0UmlnaHQiLCJlZmZlY3QiLCJlZmZlY3RQYW5lbFdpZHRoIiwiYWlBc3Npc3RhbnQiLCJhaUFzc2lzdGFudFBhbmVsV2lkdGgiLCJwaW5uZWRQYW5lbCIsImNyZWF0ZVBvcnRhbCIsImN1cnJlbnQiLCJkb2N1bWVudCIsImJvZHkiLCJGcmFnbWVudCIsIkZsb2F0aW5nUG9ydGFsIiwicm9vdCIsInJlZiIsInNldEZsb2F0aW5nIiwic3R5bGUiLCJzZXRSZWZlcmVuY2UiLCJpZCIsIm1lc3NhZ2UiLCJNYXBDb250cm9sQnV0dG9uIiwiaGVpZ2h0IiwiZGlzcGxheU5hbWUiLCJ3aXRoVGhlbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwL21hcC1sZWdlbmQtcGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Y3JlYXRlUG9ydGFsfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50VHlwZSwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7TGVnZW5kfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtNYXBDb250cm9sQnV0dG9ufSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IE1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXRvb2x0aXAnO1xuaW1wb3J0IE1hcENvbnRyb2xQYW5lbEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC1wYW5lbCc7XG5pbXBvcnQgTWFwTGVnZW5kRmFjdG9yeSBmcm9tICcuL21hcC1sZWdlbmQnO1xuXG5pbXBvcnQge0RJTUVOU0lPTlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXJWaXNDb25maWcsIE1hcENvbnRyb2xNYXBMZWdlbmQsIE1hcENvbnRyb2xzLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge21lZGlhfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge0FjdGlvbkhhbmRsZXIsIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7Um9vdENvbnRleHR9IGZyb20gJy4uL2NvbnRleHQnO1xuXG5NYXBMZWdlbmRQYW5lbEZhY3RvcnkuZGVwcyA9IFtNYXBDb250cm9sVG9vbHRpcEZhY3RvcnksIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksIE1hcExlZ2VuZEZhY3RvcnldO1xuXG5leHBvcnQgdHlwZSBNYXBMZWdlbmRQYW5lbEZhY3RvcnlEZXBzID0gW1xuICB0eXBlb2YgTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5LFxuICB0eXBlb2YgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSxcbiAgdHlwZW9mIE1hcExlZ2VuZEZhY3Rvcnlcbl07XG5pbnRlcmZhY2UgUGluVG9Cb3R0b21Qcm9wcyB7XG4gIG9mZnNldFJpZ2h0PzogbnVtYmVyO1xufVxuaW1wb3J0IHtcbiAgRmxvYXRpbmdQb3J0YWwsXG4gIG9mZnNldCxcbiAgdXNlQ2xpY2ssXG4gIHVzZURpc21pc3MsXG4gIHVzZUZsb2F0aW5nLFxuICB1c2VJbnRlcmFjdGlvbnNcbn0gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0JztcblxuY29uc3QgUGluVG9Cb3R0b20gPSBzdHlsZWQuZGl2PFBpblRvQm90dG9tUHJvcHM+YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtESU1FTlNJT05TLm1hcENvbnRyb2wubWFwTGVnZW5kLnBpbm5lZC5ib3R0b219cHg7XG4gIHJpZ2h0OiAke3Byb3BzID0+IChwcm9wcy5vZmZzZXRSaWdodCB8fCAwKSArIERJTUVOU0lPTlMubWFwQ29udHJvbC5tYXBMZWdlbmQucGlubmVkLnJpZ2h0fXB4O1xuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIGJvdHRvbTogMHB4O1xuICAgIHJpZ2h0OiAwcHg7XG4gICAgbWluLXdpZHRoOiAke0RJTUVOU0lPTlMubWFwQ29udHJvbC53aWR0aCArIERJTUVOU0lPTlMubWFwQ29udHJvbC5tYXBMZWdlbmQucGlubmVkLnJpZ2h0fXB4O1xuICAgIC5tYXAtY29udHJvbC1wYW5lbCB7XG4gICAgICBtaW4taGVpZ2h0OiAyMTVweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICB9O1xuICBgfTtcbmA7XG5cbmludGVyZmFjZSBNYXBMZWdlbmRQYW5lbEljb25zIHtcbiAgbGVnZW5kOiBDb21wb25lbnRUeXBlPGFueT47XG59XG5cbmV4cG9ydCB0eXBlIE1hcExlZ2VuZFBhbmVsUHJvcHMgPSB7XG4gIHRoZW1lOiBhbnk7XG4gIGxheWVyczogUmVhZG9ubHlBcnJheTxMYXllcj47XG4gIHNjYWxlOiBudW1iZXI7XG4gIG9uVG9nZ2xlTWFwQ29udHJvbDogKGNvbnRyb2w6IHN0cmluZykgPT4gdm9pZDtcbiAgaXNFeHBvcnQ6IGJvb2xlYW47XG4gIGxvZ29Db21wb25lbnQ6IEVsZW1lbnQ7XG4gIGFjdGlvbkljb25zOiBNYXBMZWdlbmRQYW5lbEljb25zO1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIG1hcFN0YXRlPzogTWFwU3RhdGU7XG4gIG1hcEhlaWdodD86IG51bWJlcjtcbiAgb2Zmc2V0UmlnaHQ/OiBudW1iZXI7XG4gIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ+O1xuICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2tDb250cm9sQnRuPzogKGU/OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPzogKG9sZExheWVyOiBMYXllciwgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPikgPT4gdm9pZDtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBNYXBMZWdlbmRQYW5lbEZhY3RvcnkoTWFwQ29udHJvbFRvb2x0aXAsIE1hcENvbnRyb2xQYW5lbCwgTWFwTGVnZW5kKSB7XG4gIGNvbnN0IGRlZmF1bHRBY3Rpb25JY29ucyA9IHtcbiAgICBsZWdlbmQ6IExlZ2VuZFxuICB9O1xuXG4gIGNvbnN0IE1hcExlZ2VuZFBhbmVsOiBSZWFjdC5GQzxNYXBMZWdlbmRQYW5lbFByb3BzPiA9ICh7XG4gICAgdGhlbWUsXG4gICAgbGF5ZXJzLFxuICAgIG1hcENvbnRyb2xzLFxuICAgIHNjYWxlLFxuICAgIG9uVG9nZ2xlTWFwQ29udHJvbCxcbiAgICBpc0V4cG9ydCxcbiAgICBsb2dvQ29tcG9uZW50LFxuICAgIGFjdGlvbkljb25zID0gZGVmYXVsdEFjdGlvbkljb25zLFxuICAgIG1hcFN0YXRlLFxuICAgIG9mZnNldFJpZ2h0LFxuICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCxcbiAgICBvbkNsaWNrQ29udHJvbEJ0bixcbiAgICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZCA9IHRydWUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2VcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG1hcExlZ2VuZCA9IG1hcENvbnRyb2xzPy5tYXBMZWdlbmQgfHwgKHt9IGFzIE1hcENvbnRyb2xNYXBMZWdlbmQpO1xuICAgIGNvbnN0IHthY3RpdmU6IGlzUGlubmVkLCBkaXNhYmxlRWRpdH0gPSBtYXBMZWdlbmQgfHwge307XG4gICAgY29uc3Qgcm9vdENvbnRleHQgPSB1c2VDb250ZXh0KFJvb3RDb250ZXh0KTtcbiAgICBjb25zdCBbaXNPcGVuZWQsIHNldElzT3BlbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIGNvbnN0IHtyZWZzLCBjb250ZXh0LCBmbG9hdGluZ1N0eWxlc30gPSB1c2VGbG9hdGluZyh7XG4gICAgICBwbGFjZW1lbnQ6ICdsZWZ0LXN0YXJ0JyxcbiAgICAgIG9wZW46IGlzT3BlbmVkLFxuICAgICAgb25PcGVuQ2hhbmdlOiBzZXRJc09wZW5lZCxcbiAgICAgIG1pZGRsZXdhcmU6IFtvZmZzZXQoMTApXVxuICAgIH0pO1xuXG4gICAgY29uc3QgY2xpY2sgPSB1c2VDbGljayhjb250ZXh0KTtcbiAgICBjb25zdCBkaXNtaXNzID0gdXNlRGlzbWlzcyhjb250ZXh0KTtcbiAgICBjb25zdCB7Z2V0RmxvYXRpbmdQcm9wcywgZ2V0UmVmZXJlbmNlUHJvcHN9ID0gdXNlSW50ZXJhY3Rpb25zKFtjbGljaywgZGlzbWlzc10pO1xuXG4gICAgY29uc3Qgb25DbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIG9uQ2xpY2tDb250cm9sQnRuPy4oKTtcbiAgICAgIGlmIChtYXBDb250cm9scz8ubWFwRHJhdz8uYWN0aXZlKSB7XG4gICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbCgnbWFwRHJhdycpO1xuICAgICAgfVxuICAgIH0sIFtvbkNsaWNrQ29udHJvbEJ0biwgb25Ub2dnbGVNYXBDb250cm9sLCBtYXBDb250cm9sc10pO1xuICAgIGNvbnN0IG9uQ2xvc2VDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgZSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sKCdtYXBMZWdlbmQnKTtcbiAgICAgIH0sXG4gICAgICBbb25Ub2dnbGVNYXBDb250cm9sXVxuICAgICk7XG4gICAgY29uc3Qgb25QaW5DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgZSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0SXNPcGVuZWQoZmFsc2UpO1xuICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2woJ21hcExlZ2VuZCcpO1xuICAgICAgfSxcbiAgICAgIFtzZXRJc09wZW5lZCwgb25Ub2dnbGVNYXBDb250cm9sXVxuICAgICk7XG5cbiAgICBpZiAoIW1hcExlZ2VuZC5zaG93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWFwQ29udHJvbFBhbmVsID0gKFxuICAgICAgPE1hcENvbnRyb2xQYW5lbFxuICAgICAgICBzY2FsZT17c2NhbGV9XG4gICAgICAgIGhlYWRlcj1cImhlYWRlci5sYXllckxlZ2VuZFwiXG4gICAgICAgIGlzUGlubmVkPXt0cnVlfVxuICAgICAgICB7Li4uKGlzUGlubmVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xvc2VDbGljayxcbiAgICAgICAgICAgICAgcGlubmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG9uUGluQ2xpY2ssXG4gICAgICAgICAgICAgIHBpbm5hYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgICAgIH0pfVxuICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgIGxvZ29Db21wb25lbnQ9e2xvZ29Db21wb25lbnR9XG4gICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXtvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9XG4gICAgICAgIGlzVmlld3BvcnRVbnN5bmNBbGxvd2VkPXtpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIDxNYXBMZWdlbmRcbiAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgZGlzYWJsZUVkaXQ9e2Rpc2FibGVFZGl0fVxuICAgICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXtvbkxheWVyVmlzQ29uZmlnQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9NYXBDb250cm9sUGFuZWw+XG4gICAgKTtcblxuICAgIGlmIChpc1Bpbm5lZCkge1xuICAgICAgLy8gUGlubmVkIHBhbmVsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZXhwb3J0IG1vZGVcbiAgICAgIGlmIChpc0V4cG9ydCkge1xuICAgICAgICByZXR1cm4gbWFwQ29udHJvbFBhbmVsO1xuICAgICAgfVxuICAgICAgY29uc3QgcGlubmVkT2Zmc2V0UmlnaHQgPVxuICAgICAgICBtYXBDb250cm9scz8uZWZmZWN0Py5zaG93ICYmIG1hcENvbnRyb2xzPy5lZmZlY3Q/LmFjdGl2ZVxuICAgICAgICAgID8gdGhlbWUuZWZmZWN0UGFuZWxXaWR0aCArIDEwXG4gICAgICAgICAgOiBtYXBDb250cm9scz8uYWlBc3Npc3RhbnQ/LnNob3cgJiYgbWFwQ29udHJvbHM/LmFpQXNzaXN0YW50Py5hY3RpdmVcbiAgICAgICAgICA/IHRoZW1lLmFpQXNzaXN0YW50UGFuZWxXaWR0aCArIDEwXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGlubmVkUGFuZWwgPSAoXG4gICAgICAgIDxQaW5Ub0JvdHRvbSBvZmZzZXRSaWdodD17cGlubmVkT2Zmc2V0UmlnaHR9PnttYXBDb250cm9sUGFuZWx9PC9QaW5Ub0JvdHRvbT5cbiAgICAgICk7XG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsKHBpbm5lZFBhbmVsLCByb290Q29udGV4dD8uY3VycmVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2lzT3BlbmVkID8gKFxuICAgICAgICAgIDxGbG9hdGluZ1BvcnRhbCByb290PXtyb290Q29udGV4dD8uY3VycmVudH0+XG4gICAgICAgICAgICA8ZGl2IHJlZj17cmVmcy5zZXRGbG9hdGluZ30gc3R5bGU9e2Zsb2F0aW5nU3R5bGVzfSB7Li4uZ2V0RmxvYXRpbmdQcm9wcygpfT5cbiAgICAgICAgICAgICAge21hcENvbnRyb2xQYW5lbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRmxvYXRpbmdQb3J0YWw+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IHJlZj17cmVmcy5zZXRSZWZlcmVuY2V9IHsuLi5nZXRSZWZlcmVuY2VQcm9wcygpfT5cbiAgICAgICAgICA8TWFwQ29udHJvbFRvb2x0aXAgaWQ9XCJzaG93LWxlZ2VuZFwiIG1lc3NhZ2U9XCJ0b29sdGlwLnNob3dMZWdlbmRcIj5cbiAgICAgICAgICAgIDxNYXBDb250cm9sQnV0dG9uIGNsYXNzTmFtZT1cIm1hcC1jb250cm9sLWJ1dHRvbiBzaG93LWxlZ2VuZFwiIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgICA8YWN0aW9uSWNvbnMubGVnZW5kIGhlaWdodD1cIjIycHhcIiAvPlxuICAgICAgICAgICAgPC9NYXBDb250cm9sQnV0dG9uPlxuICAgICAgICAgIDwvTWFwQ29udHJvbFRvb2x0aXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfTtcblxuICBNYXBMZWdlbmRQYW5lbC5kaXNwbGF5TmFtZSA9ICdNYXBMZWdlbmRQYW5lbCc7XG4gIHJldHVybiB3aXRoVGhlbWUoTWFwTGVnZW5kUGFuZWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBMZWdlbmRQYW5lbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFB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O01BQ1AsSUFBTUMsV0FBVyxnQkFDZnJJLE1BQUEsWUFBQXVILGFBQUEsQ0FBQy9FLFdBQVc7UUFBQ1UsV0FBVyxFQUFFOEU7TUFBa0IsR0FBRVYsZUFBNkIsQ0FDNUU7TUFDRCxvQkFBTyxJQUFBZ0Isc0JBQVksRUFBQ0QsV0FBVyxFQUFFLENBQUFsRCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRW9ELE9BQU8sS0FBSUMsUUFBUSxDQUFDQyxJQUFJLENBQUM7SUFDekU7SUFFQSxvQkFDRXpJLE1BQUEsWUFBQXVILGFBQUEsQ0FBQXZILE1BQUEsWUFBQTBJLFFBQUEsUUFDR2hELFFBQVEsZ0JBQ1AxRixNQUFBLFlBQUF1SCxhQUFBLENBQUMzRyxPQUFBLENBQUErSCxjQUFjO01BQUNDLElBQUksRUFBRXpELFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFb0Q7SUFBUSxnQkFDekN2SSxNQUFBLFlBQUF1SCxhQUFBLFlBQUFDLFNBQUE7TUFBS3FCLEdBQUcsRUFBRTFDLElBQUksQ0FBQzJDLFdBQVk7TUFBQ0MsS0FBSyxFQUFFMUM7SUFBZSxHQUFLTyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQ3RFVSxlQUNFLENBQ1MsQ0FBQyxHQUNmLElBQUksZUFDUnRILE1BQUEsWUFBQXVILGFBQUEsWUFBQUMsU0FBQTtNQUFLcUIsR0FBRyxFQUFFMUMsSUFBSSxDQUFDNkM7SUFBYSxHQUFLbkMsaUJBQWlCLENBQUMsQ0FBQyxnQkFDbEQ3RyxNQUFBLFlBQUF1SCxhQUFBLENBQUNoRSxpQkFBaUI7TUFBQzBGLEVBQUUsRUFBQyxhQUFhO01BQUNDLE9BQU8sRUFBQztJQUFvQixnQkFDOURsSixNQUFBLFlBQUF1SCxhQUFBLENBQUNuSCxrQkFBQSxDQUFBK0ksZ0JBQWdCO01BQUN0RSxTQUFTLEVBQUMsZ0NBQWdDO01BQUNpQyxPQUFPLEVBQUVBO0lBQVEsZ0JBQzVFOUcsTUFBQSxZQUFBdUgsYUFBQSxDQUFDaEQsV0FBVyxDQUFDWixNQUFNO01BQUN5RixNQUFNLEVBQUM7SUFBTSxDQUFFLENBQ25CLENBQ0QsQ0FDaEIsQ0FDTCxDQUFDO0VBRVAsQ0FBQztFQUVEdkYsY0FBYyxDQUFDd0YsV0FBVyxHQUFHLGdCQUFnQjtFQUM3QyxPQUFPLElBQUFDLDJCQUFTLEVBQUN6RixjQUFjLENBQUM7QUFDbEM7QUFBQyxJQUFBMEYsUUFBQSxHQUFBQyxPQUFBLGNBRWNySCxxQkFBcUIiLCJpZ25vcmVMaXN0IjpbXX0=
261
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0RG9tIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb3JlIiwiX3V0aWxpdGllcyIsIl9yZWFjdDIiLCJfYWN0aW9ucyIsIl9yZWR1Y2VycyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29udGV4dCIsIl91c2VMZWdlbmRQb3NpdGlvbjMiLCJfaW5qZWN0b3IiLCJfbWFwQ29udHJvbFBhbmVsIiwiX21hcENvbnRyb2xUb29sdGlwIiwiX21hcExlZ2VuZCIsIl9tb2RpZmllcnMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkRSQUdfUkVTSVpFX0lEIiwiRFJBR19NT1ZFX0lEIiwiU3R5bGVkRHJhZ2dhYmxlTGVnZW5kQ29udGVudCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImFjdGl2ZUNvbG9yIiwiY29udGVudEhlaWdodCIsImNvbmNhdCIsIlN0eWxlZE1vdmVIYW5kbGUiLCJTdHlsZWRSZXNpemVIYW5kbGUiLCJEcmFnZ2FibGVMZWdlbmRDb250ZW50IiwiZm9yd2FyZFJlZiIsInJlZiIsInBvc2l0aW9uU3R5bGVzIiwiY2hpbGRyZW4iLCJkcmFnZ2FibGVNb3ZlIiwidXNlRHJhZ2dhYmxlIiwiaWQiLCJkcmFnZ2FibGVSZXNpemUiLCJyZWZzIiwidXNlTWVyZ2VSZWZzIiwic2V0Tm9kZVJlZiIsImlzRHJhZ2dpbmciLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiY2xhc3NOYW1lIiwiY2xhc3NuYW1lcyIsInN0eWxlIiwidHJhbnNmb3JtIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiRHJhZ2dhYmxlRG90cyIsImhlaWdodCIsIkhvcml6b250YWxSZXNpemVIYW5kbGUiLCJEcmFnZ2FibGVMZWdlbmQiLCJ3aXRoU3RhdGUiLCJ1aVN0YXRlTGVucyIsInN0YXRlIiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwid2l0aFRoZW1lIiwiX3JlZiIsIl91aVN0YXRlJG1hcENvbnRyb2xzIiwidWlTdGF0ZSIsImlzU2lkZVBhbmVsU2hvd24iLCJhY3RpdmVTaWRlUGFuZWwiLCJzZXR0aW5ncyIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwibGVnZW5kQ29udGVudFJlZiIsInVzZVJlZiIsIm9uQ2hhbmdlU2V0dGluZ3MiLCJ1c2VDYWxsYmFjayIsIm5ld1NldHRpbmdzIiwiX3VzZUxlZ2VuZFBvc2l0aW9uIiwidXNlTGVnZW5kUG9zaXRpb24iLCJ1cGRhdGVQb3NpdGlvbiIsInN0YXJ0UmVzaXplIiwicmVzaXplIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiZXZlbnQiLCJhY3RpdmUiLCJoYW5kbGVEcmFnRW5kIiwiaGFuZGxlRHJhZ01vdmUiLCJkZWx0YSIsInkiLCJEbmRDb250ZXh0Iiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwibW9kaWZpZXJzIiwicmVzdHJpY3RUb1dpbmRvd0VkZ2VzIiwiSW1hZ2VFeHBvcnRMZWdlbmQiLCJfcmVmMiIsIl9jb250YWluZXJSZWYkY3VycmVudCIsImNvbnRhaW5lclJlZiIsIl91c2VMZWdlbmRQb3NpdGlvbjIiLCJwb3J0YWxSb290IiwiY3VycmVudCIsImNsb3Nlc3QiLCJxdWVyeVNlbGVjdG9yIiwiY3JlYXRlUG9ydGFsIiwicG9zaXRpb24iLCJNYXBMZWdlbmRQYW5lbEZhY3RvcnkiLCJkZXBzIiwiTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5IiwiTWFwQ29udHJvbFBhbmVsRmFjdG9yeSIsIk1hcExlZ2VuZEZhY3RvcnkiLCJkZWZhdWx0QWN0aW9uSWNvbnMiLCJsZWdlbmQiLCJMZWdlbmQiLCJNYXBMZWdlbmRQYW5lbENvbXBvbmVudCIsIl9yZWYzIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMyIiwiX3Jvb3RDb250ZXh0JGN1cnJlbnQiLCJsYXllcnMiLCJzY2FsZSIsIm9uVG9nZ2xlTWFwQ29udHJvbCIsImlzRXhwb3J0IiwibG9nb0NvbXBvbmVudCIsIl9yZWYzJGFjdGlvbkljb25zIiwiYWN0aW9uSWNvbnMiLCJtYXBTdGF0ZSIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvbkNsaWNrQ29udHJvbEJ0biIsIl9yZWYzJGlzVmlld3BvcnRVbnN5biIsImlzVmlld3BvcnRVbnN5bmNBbGxvd2VkIiwiaW50ZXJhY3Rpb25Db25maWciLCJNYXBDb250cm9sVG9vbHRpcCIsIk1hcENvbnRyb2xQYW5lbCIsIk1hcExlZ2VuZCIsIl9yZWY0IiwiZGlzYWJsZUVkaXQiLCJyb290Q29udGV4dCIsInVzZUNvbnRleHQiLCJSb290Q29udGV4dCIsIm9uQ2xpY2siLCJfbWFwQ29udHJvbHMkbWFwRHJhdyIsIm1hcERyYXciLCJvbkNsb3NlQ2xpY2siLCJwcmV2ZW50RGVmYXVsdCIsInNob3ciLCJsZWdlbmRQYW5lbCIsImhlYWRlciIsInBpbm5hYmxlIiwiZGlzYWJsZUNsb3NlIiwiRnJhZ21lbnQiLCJoYXNQb3J0YWJsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsImRvY3VtZW50IiwiYm9keSIsIm1lc3NhZ2UiLCJNYXBDb250cm9sQnV0dG9uIiwiTWFwTGVnZW5kUGFuZWwiLCJkaXNwbGF5TmFtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvbWFwLWxlZ2VuZC1wYW5lbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudFR5cGUsIEZDLCBmb3J3YXJkUmVmLCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7RG5kQ29udGV4dCwgdXNlRHJhZ2dhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7Q1NTfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHt1c2VNZXJnZVJlZnN9IGZyb20gJ0BmbG9hdGluZy11aS9yZWFjdCc7XG5cbmltcG9ydCB7QWN0aW9uSGFuZGxlciwgc2V0TWFwQ29udHJvbFNldHRpbmdzLCB0b2dnbGVTcGxpdE1hcFZpZXdwb3J0fSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHt1aVN0YXRlTGVuc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge2JyZWFrUG9pbnRWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7TGF5ZXJWaXNDb25maWcsIE1hcENvbnRyb2xNYXBMZWdlbmQsIE1hcENvbnRyb2xzLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2hhc1BvcnRhYmxlV2lkdGh9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xlZ2VuZCwgRHJhZ2dhYmxlRG90cywgSG9yaXpvbnRhbFJlc2l6ZUhhbmRsZX0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Um9vdENvbnRleHR9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHVzZUxlZ2VuZFBvc2l0aW9uLCB7TWFwTGVnZW5kQ29udHJvbFNldHRpbmdzfSBmcm9tICcuLi9ob29rcy91c2UtbGVnZW5kLXBvc2l0aW9uJztcbmltcG9ydCB7d2l0aFN0YXRlfSBmcm9tICcuLi9pbmplY3Rvcic7XG5pbXBvcnQgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXBhbmVsJztcbmltcG9ydCBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sdGlwJztcbmltcG9ydCBNYXBMZWdlbmRGYWN0b3J5IGZyb20gJy4vbWFwLWxlZ2VuZCc7XG5pbXBvcnQge3Jlc3RyaWN0VG9XaW5kb3dFZGdlc30gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJztcblxuY29uc3QgRFJBR19SRVNJWkVfSUQgPSAnbWFwLWxlZ2VuZC1yZXNpemUnO1xuY29uc3QgRFJBR19NT1ZFX0lEID0gJ21hcC1sZWdlbmQtbW92ZSc7XG5cbmNvbnN0IFN0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnQgPSBzdHlsZWQuZGl2PHtjb250ZW50SGVpZ2h0PzogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAubGVnZW5kLWlucHV0LWJsb2NrIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gICYuaXMtZHJhZ2dpbmcgLmxlZ2VuZC1pbnB1dC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmOmhvdmVyLFxuICAmLmlzLWRyYWdnaW5nIHtcbiAgICAubGVnZW5kLW1vdmUtaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG4gICAgLmxlZ2VuZC1yZXNpemUtaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG4gICAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgfVxuICAubWFwLWNvbnRyb2xfX3BhbmVsLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxMDBweCk7XG4gICAgJHtwcm9wcyA9PiAocHJvcHMuY29udGVudEhlaWdodCA/IGBoZWlnaHQ6ICR7cHJvcHMuY29udGVudEhlaWdodH1weDtgIDogJycpfTtcbiAgfVxuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHotaW5kZXg6IDI7XG4gIC5tYXAtY29udHJvbC1wYW5lbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRNb3ZlSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgd2lkdGg6IDQ4cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjdXJzb3I6IG1vdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYWN0aXZlQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkUmVzaXplSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogI2Y3ZjhmYTtcbiAgei1pbmRleDogMjtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGN1cnNvcjogbnMtcmVzaXplO1xuYDtcblxuZXhwb3J0IHR5cGUgTWFwTGVnZW5kUGFuZWxGYWN0b3J5RGVwcyA9IFtcbiAgdHlwZW9mIE1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSxcbiAgdHlwZW9mIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksXG4gIHR5cGVvZiBNYXBMZWdlbmRGYWN0b3J5XG5dO1xuXG50eXBlIERyYWdnYWJsZUxlZ2VuZENvbnRlbnRQcm9wcyA9IHtcbiAgY29udGVudEhlaWdodD86IG51bWJlcjtcbiAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuY29uc3QgRHJhZ2dhYmxlTGVnZW5kQ29udGVudCA9IGZvcndhcmRSZWYoKHByb3BzOiBEcmFnZ2FibGVMZWdlbmRDb250ZW50UHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7cG9zaXRpb25TdHlsZXMsIGNoaWxkcmVufSA9IHByb3BzO1xuICBjb25zdCBkcmFnZ2FibGVNb3ZlID0gdXNlRHJhZ2dhYmxlKHtpZDogRFJBR19NT1ZFX0lEfSk7XG4gIGNvbnN0IGRyYWdnYWJsZVJlc2l6ZSA9IHVzZURyYWdnYWJsZSh7aWQ6IERSQUdfUkVTSVpFX0lEfSk7XG4gIGNvbnN0IHJlZnMgPSB1c2VNZXJnZVJlZnMoW2RyYWdnYWJsZU1vdmUuc2V0Tm9kZVJlZiwgcmVmXSk7XG4gIGNvbnN0IGlzRHJhZ2dpbmcgPSBkcmFnZ2FibGVNb3ZlLmlzRHJhZ2dpbmcgfHwgZHJhZ2dhYmxlUmVzaXplLmlzRHJhZ2dpbmc7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnRcbiAgICAgIHJlZj17cmVmc31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnZHJhZ2dhYmxlLWxlZ2VuZCcsIHsnaXMtZHJhZ2dpbmcnOiBpc0RyYWdnaW5nfSl9XG4gICAgICBzdHlsZT17ey4uLnBvc2l0aW9uU3R5bGVzLCB0cmFuc2Zvcm06IENTUy5UcmFuc2xhdGUudG9TdHJpbmcoZHJhZ2dhYmxlTW92ZS50cmFuc2Zvcm0pfX1cbiAgICAgIGNvbnRlbnRIZWlnaHQ9e3Byb3BzLmNvbnRlbnRIZWlnaHR9XG4gICAgICB7Li4uZHJhZ2dhYmxlTW92ZS5hdHRyaWJ1dGVzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtpc0RyYWdnaW5nID8gPGRpdiBjbGFzc05hbWU9XCJsZWdlbmQtaW5wdXQtYmxvY2tcIiAvPiA6IG51bGx9XG4gICAgICA8U3R5bGVkTW92ZUhhbmRsZSBjbGFzc05hbWU9XCJsZWdlbmQtbW92ZS1oYW5kbGVcIiB7Li4uZHJhZ2dhYmxlTW92ZS5saXN0ZW5lcnN9PlxuICAgICAgICA8RHJhZ2dhYmxlRG90cyBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgIDwvU3R5bGVkTW92ZUhhbmRsZT5cbiAgICAgIDxTdHlsZWRSZXNpemVIYW5kbGVcbiAgICAgICAgY2xhc3NOYW1lPVwibGVnZW5kLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICByZWY9e2RyYWdnYWJsZVJlc2l6ZS5zZXROb2RlUmVmfVxuICAgICAgICB7Li4uZHJhZ2dhYmxlUmVzaXplLmxpc3RlbmVyc31cbiAgICAgID5cbiAgICAgICAgPEhvcml6b250YWxSZXNpemVIYW5kbGUgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICA8L1N0eWxlZFJlc2l6ZUhhbmRsZT5cbiAgICA8L1N0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnQ+XG4gICk7XG59KTtcblxuY29uc3QgRHJhZ2dhYmxlTGVnZW5kID0gd2l0aFN0YXRlKFt1aVN0YXRlTGVuc10sIHN0YXRlID0+IHN0YXRlLCB7c2V0TWFwQ29udHJvbFNldHRpbmdzfSkoXG4gIHdpdGhUaGVtZSgoe3VpU3RhdGUsIHRoZW1lLCBzZXRNYXBDb250cm9sU2V0dGluZ3MsIGNoaWxkcmVufSkgPT4ge1xuICAgIGNvbnN0IGlzU2lkZVBhbmVsU2hvd24gPSB1aVN0YXRlLmFjdGl2ZVNpZGVQYW5lbDtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uc2V0dGluZ3M7XG5cbiAgICBjb25zdCBsZWdlbmRDb250ZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50PihudWxsKTtcbiAgICBjb25zdCBvbkNoYW5nZVNldHRpbmdzID0gdXNlQ2FsbGJhY2soXG4gICAgICBuZXdTZXR0aW5ncyA9PiBzZXRNYXBDb250cm9sU2V0dGluZ3MoJ21hcExlZ2VuZCcsIG5ld1NldHRpbmdzKSxcbiAgICAgIFtzZXRNYXBDb250cm9sU2V0dGluZ3NdXG4gICAgKTtcbiAgICBjb25zdCB7cG9zaXRpb25TdHlsZXMsIHVwZGF0ZVBvc2l0aW9uLCBzdGFydFJlc2l6ZSwgcmVzaXplLCBjb250ZW50SGVpZ2h0fSA9IHVzZUxlZ2VuZFBvc2l0aW9uKHtcbiAgICAgIGxlZ2VuZENvbnRlbnRSZWYsXG4gICAgICBpc1NpZGVQYW5lbFNob3duLFxuICAgICAgdGhlbWUsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG9uQ2hhbmdlU2V0dGluZ3NcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmFjdGl2ZS5pZCkge1xuICAgICAgICAgIGNhc2UgRFJBR19SRVNJWkVfSUQ6XG4gICAgICAgICAgICBzdGFydFJlc2l6ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbdXBkYXRlUG9zaXRpb24sIHN0YXJ0UmVzaXplXVxuICAgICk7XG4gICAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IHVzZUNhbGxiYWNrKHVwZGF0ZVBvc2l0aW9uLCBbdXBkYXRlUG9zaXRpb25dKTtcbiAgICBjb25zdCBoYW5kbGVEcmFnTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmFjdGl2ZS5pZCkge1xuICAgICAgICAgIGNhc2UgRFJBR19SRVNJWkVfSUQ6XG4gICAgICAgICAgICByZXNpemUoZXZlbnQuZGVsdGEueSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtyZXNpemVdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8RG5kQ29udGV4dFxuICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICBtb2RpZmllcnM9e1tyZXN0cmljdFRvV2luZG93RWRnZXNdfVxuICAgICAgPlxuICAgICAgICA8RHJhZ2dhYmxlTGVnZW5kQ29udGVudFxuICAgICAgICAgIHJlZj17bGVnZW5kQ29udGVudFJlZn1cbiAgICAgICAgICBwb3NpdGlvblN0eWxlcz17cG9zaXRpb25TdHlsZXN9XG4gICAgICAgICAgY29udGVudEhlaWdodD17Y29udGVudEhlaWdodH1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9EcmFnZ2FibGVMZWdlbmRDb250ZW50PlxuICAgICAgPC9EbmRDb250ZXh0PlxuICAgICk7XG4gIH0pXG4pIGFzIEZDPHtjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlfT47XG5cbnR5cGUgSW1hZ2VFeHBvcnRMZWdlbmRQcm9wcyA9IHtcbiAgc2V0dGluZ3M6IE1hcExlZ2VuZENvbnRyb2xTZXR0aW5ncztcbiAgaXNTaWRlUGFuZWxTaG93bjogYm9vbGVhbjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbmNvbnN0IEltYWdlRXhwb3J0TGVnZW5kID0gd2l0aFRoZW1lKCh7c2V0dGluZ3MsIGlzU2lkZVBhbmVsU2hvd24sIHRoZW1lLCBjaGlsZHJlbn0pID0+IHtcbiAgY29uc3QgY29udGFpbmVyUmVmOiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4gPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGxlZ2VuZENvbnRlbnRSZWY6IFJlYWN0Lk11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPiA9IHVzZVJlZihudWxsKTtcblxuICBjb25zdCB7cG9zaXRpb25TdHlsZXN9ID0gdXNlTGVnZW5kUG9zaXRpb24oe1xuICAgIGxlZ2VuZENvbnRlbnRSZWYsXG4gICAgaXNTaWRlUGFuZWxTaG93bixcbiAgICB0aGVtZSxcbiAgICBzZXR0aW5ncyxcbiAgICBvbkNoYW5nZVNldHRpbmdzOiAoKSA9PiB7XG4gICAgICAvLyBkbyBub3RoaW5nIGJ5IGRlZmF1bHRcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHBvcnRhbFJvb3QgPSBjb250YWluZXJSZWYuY3VycmVudFxuICAgID8uY2xvc2VzdCgnLmV4cG9ydC1tYXAtaW5zdGFuY2UnKVxuICAgID8ucXVlcnlTZWxlY3RvcignI2RlZmF1bHQtZGVja2dsLW92ZXJsYXktd3JhcHBlcicpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICB7cG9ydGFsUm9vdFxuICAgICAgICA/IGNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQtbGVnZW5kXCJcbiAgICAgICAgICAgICAgcmVmPXtsZWdlbmRDb250ZW50UmVmfVxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnBvc2l0aW9uU3R5bGVzLCBwb3NpdGlvbjogJ2Fic29sdXRlJ319XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIHBvcnRhbFJvb3RcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn0pIGFzIFJlYWN0LkZDPEltYWdlRXhwb3J0TGVnZW5kUHJvcHM+O1xuXG5NYXBMZWdlbmRQYW5lbEZhY3RvcnkuZGVwcyA9IFtNYXBDb250cm9sVG9vbHRpcEZhY3RvcnksIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksIE1hcExlZ2VuZEZhY3RvcnldO1xuXG5pbnRlcmZhY2UgTWFwTGVnZW5kUGFuZWxJY29ucyB7XG4gIGxlZ2VuZDogQ29tcG9uZW50VHlwZTxhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBNYXBMZWdlbmRQYW5lbFByb3BzID0ge1xuICB0aGVtZTogYW55O1xuICBsYXllcnM6IFJlYWRvbmx5QXJyYXk8TGF5ZXI+O1xuICBzY2FsZTogbnVtYmVyO1xuICBvblRvZ2dsZU1hcENvbnRyb2w6IChjb250cm9sOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGlzRXhwb3J0OiBib29sZWFuO1xuICBsb2dvQ29tcG9uZW50OiBFbGVtZW50O1xuICBhY3Rpb25JY29uczogTWFwTGVnZW5kUGFuZWxJY29ucztcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdGF0ZT86IE1hcFN0YXRlO1xuICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPzogKG9sZExheWVyOiBMYXllciwgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPikgPT4gdm9pZDtcbiAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgdG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD47XG4gIGlzVmlld3BvcnRVbnN5bmNBbGxvd2VkPzogYm9vbGVhbjtcbiAgb25DbGlja0NvbnRyb2xCdG4/OiAoZT86IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXR0aW5nczogTWFwTGVnZW5kQ29udHJvbFNldHRpbmdzO1xuICBpc1NpZGVQYW5lbFNob3duOiBib29sZWFuO1xufTtcblxudHlwZSBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUgPSBSZWFjdC5GQzxNYXBMZWdlbmRQYW5lbFByb3BzPjtcblxuY29uc3QgZGVmYXVsdEFjdGlvbkljb25zID0ge1xuICBsZWdlbmQ6IExlZ2VuZFxufTtcblxuY29uc3QgTWFwTGVnZW5kUGFuZWxDb21wb25lbnQgPSAoe1xuICBsYXllcnMsXG4gIG1hcENvbnRyb2xzLFxuICBzY2FsZSxcbiAgb25Ub2dnbGVNYXBDb250cm9sLFxuICBpc0V4cG9ydCxcbiAgbG9nb0NvbXBvbmVudCxcbiAgYWN0aW9uSWNvbnMgPSBkZWZhdWx0QWN0aW9uSWNvbnMsXG4gIG1hcFN0YXRlLFxuICB1aVN0YXRlLFxuICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQsXG4gIG9uQ2xpY2tDb250cm9sQnRuLFxuICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZCA9IHRydWUsXG4gIGNsYXNzTmFtZSxcbiAgaW50ZXJhY3Rpb25Db25maWcsXG4gIE1hcENvbnRyb2xUb29sdGlwLFxuICBNYXBDb250cm9sUGFuZWwsXG4gIE1hcExlZ2VuZFxufSkgPT4ge1xuICBjb25zdCBpc1NpZGVQYW5lbFNob3duID0gdWlTdGF0ZS5hY3RpdmVTaWRlUGFuZWw7XG4gIGNvbnN0IHNldHRpbmdzID0gdWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5zZXR0aW5ncztcblxuICBjb25zdCBtYXBMZWdlbmQgPSBtYXBDb250cm9scz8ubWFwTGVnZW5kIHx8ICh7fSBhcyBNYXBDb250cm9sTWFwTGVnZW5kKTtcbiAgY29uc3Qge2FjdGl2ZSwgZGlzYWJsZUVkaXR9ID0gbWFwTGVnZW5kIHx8IHt9O1xuICBjb25zdCByb290Q29udGV4dCA9IHVzZUNvbnRleHQoUm9vdENvbnRleHQpO1xuXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbGlja0NvbnRyb2xCdG4/LigpO1xuICAgIGlmIChtYXBDb250cm9scz8ubWFwRHJhdz8uYWN0aXZlKSB7XG4gICAgICBvblRvZ2dsZU1hcENvbnRyb2woJ21hcERyYXcnKTtcbiAgICB9XG4gICAgb25Ub2dnbGVNYXBDb250cm9sKCdtYXBMZWdlbmQnKTtcbiAgfSwgW29uQ2xpY2tDb250cm9sQnRuLCBvblRvZ2dsZU1hcENvbnRyb2wsIG1hcENvbnRyb2xzXSk7XG4gIGNvbnN0IG9uQ2xvc2VDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb25Ub2dnbGVNYXBDb250cm9sKCdtYXBMZWdlbmQnKTtcbiAgICB9LFxuICAgIFtvblRvZ2dsZU1hcENvbnRyb2xdXG4gICk7XG5cbiAgaWYgKCFtYXBMZWdlbmQuc2hvdykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGVnZW5kUGFuZWwgPSBhY3RpdmUgPyAoXG4gICAgPE1hcENvbnRyb2xQYW5lbFxuICAgICAgc2NhbGU9e3NjYWxlfVxuICAgICAgaGVhZGVyPVwiaGVhZGVyLmxheWVyTGVnZW5kXCJcbiAgICAgIHsuLi57b25DbGljazogb25DbG9zZUNsaWNrLCBwaW5uYWJsZTogZmFsc2UsIGRpc2FibGVDbG9zZTogZmFsc2V9fVxuICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgbG9nb0NvbXBvbmVudD17bG9nb0NvbXBvbmVudH1cbiAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD17b25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgaXNWaWV3cG9ydFVuc3luY0FsbG93ZWQ9e2lzVmlld3BvcnRVbnN5bmNBbGxvd2VkfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgPlxuICAgICAgPE1hcExlZ2VuZFxuICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgbWFwU3RhdGU9e21hcFN0YXRlfVxuICAgICAgICBkaXNhYmxlRWRpdD17ZGlzYWJsZUVkaXR9XG4gICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgb25MYXllclZpc0NvbmZpZ0NoYW5nZT17b25MYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgIC8+XG4gICAgPC9NYXBDb250cm9sUGFuZWw+XG4gICkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHthY3RpdmUgPyAoXG4gICAgICAgIGhhc1BvcnRhYmxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcykgPyAoXG4gICAgICAgICAgbGVnZW5kUGFuZWxcbiAgICAgICAgKSA6IGlzRXhwb3J0ID8gKFxuICAgICAgICAgIDxJbWFnZUV4cG9ydExlZ2VuZCBpc1NpZGVQYW5lbFNob3duPXtpc1NpZGVQYW5lbFNob3dufSBzZXR0aW5ncz17c2V0dGluZ3N9PlxuICAgICAgICAgICAge2xlZ2VuZFBhbmVsfVxuICAgICAgICAgIDwvSW1hZ2VFeHBvcnRMZWdlbmQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgPERyYWdnYWJsZUxlZ2VuZD57bGVnZW5kUGFuZWx9PC9EcmFnZ2FibGVMZWdlbmQ+LFxuICAgICAgICAgICAgcm9vdENvbnRleHQ/LmN1cnJlbnQgPz8gZG9jdW1lbnQuYm9keVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSA6IG51bGx9XG4gICAgICB7IWlzRXhwb3J0ID8gKFxuICAgICAgICA8TWFwQ29udHJvbFRvb2x0aXAgaWQ9XCJzaG93LWxlZ2VuZFwiIG1lc3NhZ2U9XCJ0b29sdGlwLnNob3dMZWdlbmRcIj5cbiAgICAgICAgICA8TWFwQ29udHJvbEJ1dHRvbiBjbGFzc05hbWU9XCJtYXAtY29udHJvbC1idXR0b24gc2hvdy1sZWdlbmRcIiBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIDxhY3Rpb25JY29ucy5sZWdlbmQgaGVpZ2h0PVwiMjJweFwiIC8+XG4gICAgICAgICAgPC9NYXBDb250cm9sQnV0dG9uPlxuICAgICAgICA8L01hcENvbnRyb2xUb29sdGlwPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59O1xuXG5mdW5jdGlvbiBNYXBMZWdlbmRQYW5lbEZhY3RvcnkoXG4gIE1hcENvbnRyb2xUb29sdGlwOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250cm9sVG9vbHRpcEZhY3Rvcnk+LFxuICBNYXBDb250cm9sUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xQYW5lbEZhY3Rvcnk+LFxuICBNYXBMZWdlbmQ6IFJldHVyblR5cGU8dHlwZW9mIE1hcExlZ2VuZEZhY3Rvcnk+XG4pOiBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUge1xuICBjb25zdCBNYXBMZWdlbmRQYW5lbCA9IHdpdGhTdGF0ZShcbiAgICBbdWlTdGF0ZUxlbnNdLFxuICAgIHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIE1hcENvbnRyb2xUb29sdGlwLFxuICAgICAgICBNYXBDb250cm9sUGFuZWwsXG4gICAgICAgIE1hcExlZ2VuZFxuICAgICAgfTtcbiAgICB9LFxuICAgIHtzZXRNYXBDb250cm9sU2V0dGluZ3N9XG4gICkoTWFwTGVnZW5kUGFuZWxDb21wb25lbnQpO1xuXG4gIE1hcExlZ2VuZFBhbmVsLmRpc3BsYXlOYW1lID0gJ01hcExlZ2VuZFBhbmVsJztcbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBMZWdlbmRQYW5lbCBhcyBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUpIGFzIE1hcExlZ2VuZFBhbmVsQ29tcG9uZW50VHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwTGVnZW5kUGFuZWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFELHVCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFB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