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

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 (197) 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.js +4 -2
  78. package/dist/effects/effect-panel-header.js +5 -5
  79. package/dist/effects/effect-time-configurator.js +2 -2
  80. package/dist/effects/effect-time-selector.d.ts +1 -6
  81. package/dist/effects/effect-time-selector.js +3 -3
  82. package/dist/effects/effect-type-dropdown-list.js +2 -2
  83. package/dist/effects/effect-type-list-item.d.ts +1 -10
  84. package/dist/effects/effect-type-list-item.js +2 -2
  85. package/dist/effects/effect-type-selector.d.ts +1 -12
  86. package/dist/effects/effect-type-selector.js +2 -2
  87. package/dist/effects/timezone-selector.d.ts +1 -9
  88. package/dist/effects/timezone-selector.js +1 -1
  89. package/dist/filters/components.d.ts +6 -3
  90. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +3 -4
  91. package/dist/filters/time-widget-top.js +2 -2
  92. package/dist/filters/types.d.ts +4 -2
  93. package/dist/filters/types.js +1 -1
  94. package/dist/geocoder/geocoder.js +2 -2
  95. package/dist/geocoder-panel.d.ts +6 -0
  96. package/dist/geocoder-panel.js +1 -1
  97. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +3 -2
  98. package/dist/hooks/use-fetch-vector-tile-metadata.js +33 -18
  99. package/dist/hooks/use-legend-position.d.ts +36 -0
  100. package/dist/hooks/use-legend-position.js +147 -0
  101. package/dist/index.d.ts +2 -1
  102. package/dist/index.js +18 -3
  103. package/dist/kepler-gl.d.ts +44 -5
  104. package/dist/kepler-gl.js +77 -4
  105. package/dist/map/layer-hover-info.d.ts +3 -1
  106. package/dist/map/map-control-panel.js +4 -3
  107. package/dist/map/map-control-toolbar.d.ts +15 -1
  108. package/dist/map/map-control-toolbar.js +1 -1
  109. package/dist/map/map-legend-panel.d.ts +10 -35
  110. package/dist/map/map-legend-panel.js +242 -127
  111. package/dist/map/map-legend.d.ts +3 -2
  112. package/dist/map/map-legend.js +7 -10
  113. package/dist/map/map-popover.js +16 -11
  114. package/dist/map-container.d.ts +10 -8
  115. package/dist/map-container.js +86 -55
  116. package/dist/modal-container.d.ts +2 -1
  117. package/dist/modal-container.js +4 -3
  118. package/dist/modals/add-map-style-modal.d.ts +3 -0
  119. package/dist/modals/add-map-style-modal.js +58 -10
  120. package/dist/modals/cloud-components/cloud-item.js +2 -2
  121. package/dist/modals/cloud-tile.d.ts +6 -1
  122. package/dist/modals/cloud-tile.js +2 -2
  123. package/dist/modals/data-table-modal.d.ts +5 -3
  124. package/dist/modals/data-table-modal.js +3 -3
  125. package/dist/modals/export-data-modal.js +4 -5
  126. package/dist/modals/export-map-modal/components.d.ts +5 -3
  127. package/dist/modals/export-map-modal/export-html-map.js +2 -2
  128. package/dist/modals/export-map-modal/export-json-map.js +3 -2
  129. package/dist/modals/modal-dialog.d.ts +3 -1
  130. package/dist/modals/modal-tabs.js +2 -2
  131. package/dist/modals/share-map-modal.d.ts +4 -4
  132. package/dist/modals/storage-map-viewer.js +3 -3
  133. package/dist/modals/tilesets-modals/common.d.ts +1 -1
  134. package/dist/modals/tilesets-modals/common.js +1 -1
  135. package/dist/modals/tilesets-modals/load-data-footer.d.ts +3 -3
  136. package/dist/modals/tilesets-modals/load-data-footer.js +16 -7
  137. package/dist/modals/tilesets-modals/load-tileset.js +5 -4
  138. package/dist/modals/tilesets-modals/tileset-vector-form.js +28 -14
  139. package/dist/plot-container.js +3 -3
  140. package/dist/side-panel/add-by-dataset-button.js +4 -1
  141. package/dist/side-panel/common/dataset-info.js +3 -3
  142. package/dist/side-panel/common/dataset-title.d.ts +1 -0
  143. package/dist/side-panel/common/dataset-title.js +5 -4
  144. package/dist/side-panel/filter-manager.d.ts +2 -2
  145. package/dist/side-panel/filter-manager.js +1 -1
  146. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +9 -1
  147. package/dist/side-panel/filter-panel/filter-panel-header.js +24 -9
  148. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +10 -1
  149. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +5 -3
  150. package/dist/side-panel/layer-panel/aggr-scale-selector.d.ts +2 -1
  151. package/dist/side-panel/layer-panel/aggr-scale-selector.js +3 -1
  152. package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +2 -4
  153. package/dist/side-panel/layer-panel/channel-by-value-selector.js +9 -5
  154. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +15 -7
  155. package/dist/side-panel/layer-panel/color-breaks-panel.js +52 -20
  156. package/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  157. package/dist/side-panel/layer-panel/color-palette.d.ts +9 -4
  158. package/dist/side-panel/layer-panel/color-palette.js +13 -7
  159. package/dist/side-panel/layer-panel/color-range-selector.js +2 -2
  160. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +3 -1
  161. package/dist/side-panel/layer-panel/color-scale-selector.js +82 -37
  162. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -6
  163. package/dist/side-panel/layer-panel/color-selector.js +52 -36
  164. package/dist/side-panel/layer-panel/custom-palette.d.ts +44 -15
  165. package/dist/side-panel/layer-panel/custom-palette.js +342 -39
  166. package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -5
  167. package/dist/side-panel/layer-panel/custom-picker.js +2 -2
  168. package/dist/side-panel/layer-panel/dimension-scale-selector.js +5 -3
  169. package/dist/side-panel/layer-panel/layer-column-mode-config.js +1 -1
  170. package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -11
  171. package/dist/side-panel/layer-panel/layer-config-group.js +2 -2
  172. package/dist/side-panel/layer-panel/layer-configurator.d.ts +7 -7
  173. package/dist/side-panel/layer-panel/layer-configurator.js +10 -10
  174. package/dist/side-panel/layer-panel/layer-list.d.ts +2 -0
  175. package/dist/side-panel/layer-panel/layer-list.js +7 -4
  176. package/dist/side-panel/layer-panel/layer-panel-header.js +5 -5
  177. package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -0
  178. package/dist/side-panel/layer-panel/layer-panel.js +8 -8
  179. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +2 -2
  180. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +1 -10
  181. package/dist/side-panel/layer-panel/layer-type-list-item.js +2 -2
  182. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -8
  183. package/dist/side-panel/layer-panel/layer-type-selector.js +1 -1
  184. package/dist/side-panel/layer-panel/single-color-palette.js +2 -2
  185. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +6 -3
  186. package/dist/side-panel/map-style-panel/map-style-selector.js +2 -2
  187. package/dist/side-panel/panel-header-action.js +2 -2
  188. package/dist/side-panel/panel-header.js +2 -2
  189. package/dist/side-panel/panel-tab.d.ts +3 -3
  190. package/dist/side-panel/panel-tab.js +2 -2
  191. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  192. package/dist/side-panel/panel-view-list-toggle.js +2 -2
  193. package/dist/side-panel/side-bar.js +2 -2
  194. package/dist/side-panel.d.ts +1 -1
  195. package/dist/types.d.ts +6 -7
  196. package/dist/types.js +1 -1
  197. 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,264 @@ 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 _styles = require("@kepler.gl/styles");
21
+ var _utils = require("@kepler.gl/utils");
15
22
  var _icons = require("../common/icons");
16
23
  var _styledComponents2 = require("../common/styled-components");
17
- var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
24
+ var _context = require("../context");
25
+ var _useLegendPosition3 = _interopRequireDefault(require("../hooks/use-legend-position"));
26
+ var _injector = require("../injector");
18
27
  var _mapControlPanel = _interopRequireDefault(require("./map-control-panel"));
28
+ var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
19
29
  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
30
+ var _modifiers = require("@dnd-kit/modifiers");
31
+ var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
25
32
  // Copyright contributors to the kepler.gl project
26
33
  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
34
  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
+ 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; }
36
+ 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; }
37
+ var DRAG_RESIZE_ID = 'map-legend-resize';
38
+ var DRAG_MOVE_ID = 'map-legend-move';
39
+ 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) {
40
+ return props.theme.activeColor;
41
+ }, function (props) {
42
+ return props.contentHeight ? "height: ".concat(props.contentHeight, "px;") : '';
43
+ });
44
+ 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) {
45
+ return props.theme.activeColor;
46
+ });
47
+ 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"])));
48
+ var DraggableLegendContent = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
49
+ var positionStyles = props.positionStyles,
50
+ children = props.children;
51
+ var draggableMove = (0, _core.useDraggable)({
52
+ id: DRAG_MOVE_ID
53
+ });
54
+ var draggableResize = (0, _core.useDraggable)({
55
+ id: DRAG_RESIZE_ID
56
+ });
57
+ var refs = (0, _react2.useMergeRefs)([draggableMove.setNodeRef, ref]);
58
+ var isDragging = draggableMove.isDragging || draggableResize.isDragging;
59
+ return /*#__PURE__*/_react["default"].createElement(StyledDraggableLegendContent, (0, _extends2["default"])({
60
+ ref: refs,
61
+ className: (0, _classnames["default"])('draggable-legend', {
62
+ 'is-dragging': isDragging
63
+ }),
64
+ style: _objectSpread(_objectSpread({}, positionStyles), {}, {
65
+ transform: _utilities.CSS.Translate.toString(draggableMove.transform)
66
+ }),
67
+ contentHeight: props.contentHeight
68
+ }, draggableMove.attributes), children, isDragging ? /*#__PURE__*/_react["default"].createElement("div", {
69
+ className: "legend-input-block"
70
+ }) : null, /*#__PURE__*/_react["default"].createElement(StyledMoveHandle, (0, _extends2["default"])({
71
+ className: "legend-move-handle"
72
+ }, draggableMove.listeners), /*#__PURE__*/_react["default"].createElement(_icons.DraggableDots, {
73
+ height: "16px"
74
+ })), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, (0, _extends2["default"])({
75
+ className: "legend-resize-handle",
76
+ ref: draggableResize.setNodeRef
77
+ }, draggableResize.listeners), /*#__PURE__*/_react["default"].createElement(_icons.HorizontalResizeHandle, {
78
+ height: "16px"
79
+ })));
80
+ });
81
+ var DraggableLegend = (0, _injector.withState)([], function (state) {
82
+ var _mapControls$mapLegen;
83
+ var _state$demo$keplerGl$ = state.demo.keplerGl.map.uiState,
84
+ activeSidePanel = _state$demo$keplerGl$.activeSidePanel,
85
+ mapControls = _state$demo$keplerGl$.mapControls;
86
+ return {
87
+ isSidePanelShown: activeSidePanel,
88
+ settings: mapControls === null || mapControls === void 0 || (_mapControls$mapLegen = mapControls.mapLegend) === null || _mapControls$mapLegen === void 0 ? void 0 : _mapControls$mapLegen.settings
35
89
  };
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;
90
+ }, {
91
+ setMapControlSettings: _actions.setMapControlSettings
92
+ })((0, _styledComponents.withTheme)(function (_ref) {
93
+ var isSidePanelShown = _ref.isSidePanelShown,
94
+ theme = _ref.theme,
95
+ settings = _ref.settings,
96
+ setMapControlSettings = _ref.setMapControlSettings,
97
+ children = _ref.children;
98
+ var legendContentRef = (0, _react.useRef)(null);
99
+ var onChangeSettings = (0, _react.useCallback)(function (newSettings) {
100
+ return setMapControlSettings('mapLegend', newSettings);
101
+ }, [setMapControlSettings]);
102
+ var _useLegendPosition = (0, _useLegendPosition3["default"])({
103
+ legendContentRef: legendContentRef,
104
+ isSidePanelShown: isSidePanelShown,
105
+ theme: theme,
106
+ settings: settings,
107
+ onChangeSettings: onChangeSettings
108
+ }),
109
+ positionStyles = _useLegendPosition.positionStyles,
110
+ updatePosition = _useLegendPosition.updatePosition,
111
+ startResize = _useLegendPosition.startResize,
112
+ resize = _useLegendPosition.resize,
113
+ contentHeight = _useLegendPosition.contentHeight;
114
+ var handleDragStart = (0, _react.useCallback)(function (event) {
115
+ switch (event.active.id) {
116
+ case DRAG_RESIZE_ID:
117
+ startResize();
118
+ break;
119
+ default:
120
+ updatePosition();
121
+ }
122
+ }, [updatePosition, startResize]);
123
+ var handleDragEnd = (0, _react.useCallback)(updatePosition, [updatePosition]);
124
+ var handleDragMove = (0, _react.useCallback)(function (event) {
125
+ switch (event.active.id) {
126
+ case DRAG_RESIZE_ID:
127
+ resize(event.delta.y);
128
+ break;
95
129
  }
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;
130
+ }, [resize]);
131
+ return /*#__PURE__*/_react["default"].createElement(_core.DndContext, {
132
+ onDragStart: handleDragStart,
133
+ onDragMove: handleDragMove,
134
+ onDragEnd: handleDragEnd,
135
+ modifiers: [_modifiers.restrictToWindowEdges]
136
+ }, /*#__PURE__*/_react["default"].createElement(DraggableLegendContent, {
137
+ ref: legendContentRef,
138
+ positionStyles: positionStyles,
139
+ contentHeight: contentHeight
140
+ }, children));
141
+ }));
142
+ var ImageExportLegend = (0, _styledComponents.withTheme)(function (_ref2) {
143
+ var _containerRef$current;
144
+ var settings = _ref2.settings,
145
+ isSidePanelShown = _ref2.isSidePanelShown,
146
+ theme = _ref2.theme,
147
+ children = _ref2.children;
148
+ var containerRef = (0, _react.useRef)(null);
149
+ var legendContentRef = (0, _react.useRef)(null);
150
+ var _useLegendPosition2 = (0, _useLegendPosition3["default"])({
151
+ legendContentRef: legendContentRef,
152
+ isSidePanelShown: isSidePanelShown,
153
+ theme: theme,
154
+ settings: settings,
155
+ onChangeSettings: function onChangeSettings() {
156
+ // do nothing by default
127
157
  }
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);
158
+ }),
159
+ positionStyles = _useLegendPosition2.positionStyles;
160
+ 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');
161
+ return /*#__PURE__*/_react["default"].createElement("div", {
162
+ ref: containerRef
163
+ }, portalRoot ? /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react["default"].createElement("div", {
164
+ className: "fixed-legend",
165
+ ref: legendContentRef,
166
+ style: _objectSpread(_objectSpread({}, positionStyles), {}, {
167
+ position: 'absolute'
168
+ })
169
+ }, children), portalRoot) : null);
170
+ });
171
+ MapLegendPanelFactory.deps = [_mapControlTooltip["default"], _mapControlPanel["default"], _mapLegend["default"]];
172
+ var defaultActionIcons = {
173
+ legend: _icons.Legend
174
+ };
175
+ var MapLegendPanelComponent = function MapLegendPanelComponent(_ref3) {
176
+ var _rootContext$current;
177
+ var layers = _ref3.layers,
178
+ mapControls = _ref3.mapControls,
179
+ scale = _ref3.scale,
180
+ onToggleMapControl = _ref3.onToggleMapControl,
181
+ isExport = _ref3.isExport,
182
+ logoComponent = _ref3.logoComponent,
183
+ _ref3$actionIcons = _ref3.actionIcons,
184
+ actionIcons = _ref3$actionIcons === void 0 ? defaultActionIcons : _ref3$actionIcons,
185
+ mapState = _ref3.mapState,
186
+ onLayerVisConfigChange = _ref3.onLayerVisConfigChange,
187
+ onToggleSplitMapViewport = _ref3.onToggleSplitMapViewport,
188
+ onClickControlBtn = _ref3.onClickControlBtn,
189
+ _ref3$isViewportUnsyn = _ref3.isViewportUnsyncAllowed,
190
+ isViewportUnsyncAllowed = _ref3$isViewportUnsyn === void 0 ? true : _ref3$isViewportUnsyn,
191
+ className = _ref3.className,
192
+ interactionConfig = _ref3.interactionConfig,
193
+ settings = _ref3.settings,
194
+ isSidePanelShown = _ref3.isSidePanelShown,
195
+ MapControlTooltip = _ref3.MapControlTooltip,
196
+ MapControlPanel = _ref3.MapControlPanel,
197
+ MapLegend = _ref3.MapLegend;
198
+ var mapLegend = (mapControls === null || mapControls === void 0 ? void 0 : mapControls.mapLegend) || {};
199
+ var _ref4 = mapLegend || {},
200
+ active = _ref4.active,
201
+ disableEdit = _ref4.disableEdit;
202
+ var rootContext = (0, _react.useContext)(_context.RootContext);
203
+ var onClick = (0, _react.useCallback)(function () {
204
+ var _mapControls$mapDraw;
205
+ onClickControlBtn === null || onClickControlBtn === void 0 || onClickControlBtn();
206
+ if (mapControls !== null && mapControls !== void 0 && (_mapControls$mapDraw = mapControls.mapDraw) !== null && _mapControls$mapDraw !== void 0 && _mapControls$mapDraw.active) {
207
+ onToggleMapControl('mapDraw');
133
208
  }
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
- };
209
+ onToggleMapControl('mapLegend');
210
+ }, [onClickControlBtn, onToggleMapControl, mapControls]);
211
+ var onCloseClick = (0, _react.useCallback)(function (e) {
212
+ e.preventDefault();
213
+ onToggleMapControl('mapLegend');
214
+ }, [onToggleMapControl]);
215
+ if (!mapLegend.show) {
216
+ return null;
217
+ }
218
+ var legendPanel = active ? /*#__PURE__*/_react["default"].createElement(MapControlPanel, {
219
+ scale: scale,
220
+ header: "header.layerLegend",
221
+ onClick: onCloseClick,
222
+ pinnable: false,
223
+ disableClose: false,
224
+ isExport: isExport,
225
+ logoComponent: logoComponent,
226
+ mapState: mapState,
227
+ onToggleSplitMapViewport: onToggleSplitMapViewport,
228
+ isViewportUnsyncAllowed: isViewportUnsyncAllowed,
229
+ className: className
230
+ }, /*#__PURE__*/_react["default"].createElement(MapLegend, {
231
+ layers: layers,
232
+ mapState: mapState,
233
+ disableEdit: disableEdit,
234
+ isExport: isExport,
235
+ onLayerVisConfigChange: onLayerVisConfigChange
236
+ })) : null;
237
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, active ? (0, _utils.hasPortableWidth)(_styles.breakPointValues) ? legendPanel : isExport ? /*#__PURE__*/_react["default"].createElement(ImageExportLegend, {
238
+ isSidePanelShown: isSidePanelShown,
239
+ settings: settings
240
+ }, 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, {
241
+ id: "show-legend",
242
+ message: "tooltip.showLegend"
243
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.MapControlButton, {
244
+ className: "map-control-button show-legend",
245
+ onClick: onClick
246
+ }, /*#__PURE__*/_react["default"].createElement(actionIcons.legend, {
247
+ height: "22px"
248
+ }))) : null);
249
+ };
250
+ function MapLegendPanelFactory(MapControlTooltip, MapControlPanel, MapLegend) {
251
+ var MapLegendPanel = (0, _injector.withState)([], function (state) {
252
+ var _state$demo$keplerGl$2, _state$demo, _mapControls$mapLegen2;
253
+ var _ref5 = (_state$demo$keplerGl$2 = (_state$demo = state.demo) === null || _state$demo === void 0 ? void 0 : _state$demo.keplerGl.map.uiState) !== null && _state$demo$keplerGl$2 !== void 0 ? _state$demo$keplerGl$2 : {},
254
+ activeSidePanel = _ref5.activeSidePanel,
255
+ mapControls = _ref5.mapControls;
256
+ return {
257
+ isSidePanelShown: activeSidePanel,
258
+ settings: mapControls === null || mapControls === void 0 || (_mapControls$mapLegen2 = mapControls.mapLegend) === null || _mapControls$mapLegen2 === void 0 ? void 0 : _mapControls$mapLegen2.settings,
259
+ MapControlTooltip: MapControlTooltip,
260
+ MapControlPanel: MapControlPanel,
261
+ MapLegend: MapLegend
262
+ };
263
+ }, {
264
+ setMapControlSettings: _actions.setMapControlSettings
265
+ })(MapLegendPanelComponent);
151
266
  MapLegendPanel.displayName = 'MapLegendPanel';
152
267
  return (0, _styledComponents.withTheme)(MapLegendPanel);
153
268
  }
154
269
  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=
270
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0RG9tIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb3JlIiwiX3V0aWxpdGllcyIsIl9yZWFjdDIiLCJfYWN0aW9ucyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29udGV4dCIsIl91c2VMZWdlbmRQb3NpdGlvbjMiLCJfaW5qZWN0b3IiLCJfbWFwQ29udHJvbFBhbmVsIiwiX21hcENvbnRyb2xUb29sdGlwIiwiX21hcExlZ2VuZCIsIl9tb2RpZmllcnMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkRSQUdfUkVTSVpFX0lEIiwiRFJBR19NT1ZFX0lEIiwiU3R5bGVkRHJhZ2dhYmxlTGVnZW5kQ29udGVudCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImFjdGl2ZUNvbG9yIiwiY29udGVudEhlaWdodCIsImNvbmNhdCIsIlN0eWxlZE1vdmVIYW5kbGUiLCJTdHlsZWRSZXNpemVIYW5kbGUiLCJEcmFnZ2FibGVMZWdlbmRDb250ZW50IiwiZm9yd2FyZFJlZiIsInJlZiIsInBvc2l0aW9uU3R5bGVzIiwiY2hpbGRyZW4iLCJkcmFnZ2FibGVNb3ZlIiwidXNlRHJhZ2dhYmxlIiwiaWQiLCJkcmFnZ2FibGVSZXNpemUiLCJyZWZzIiwidXNlTWVyZ2VSZWZzIiwic2V0Tm9kZVJlZiIsImlzRHJhZ2dpbmciLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiY2xhc3NOYW1lIiwiY2xhc3NuYW1lcyIsInN0eWxlIiwidHJhbnNmb3JtIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiRHJhZ2dhYmxlRG90cyIsImhlaWdodCIsIkhvcml6b250YWxSZXNpemVIYW5kbGUiLCJEcmFnZ2FibGVMZWdlbmQiLCJ3aXRoU3RhdGUiLCJzdGF0ZSIsIl9tYXBDb250cm9scyRtYXBMZWdlbiIsIl9zdGF0ZSRkZW1vJGtlcGxlckdsJCIsImRlbW8iLCJrZXBsZXJHbCIsIm1hcCIsInVpU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJtYXBDb250cm9scyIsImlzU2lkZVBhbmVsU2hvd24iLCJzZXR0aW5ncyIsIm1hcExlZ2VuZCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIndpdGhUaGVtZSIsIl9yZWYiLCJsZWdlbmRDb250ZW50UmVmIiwidXNlUmVmIiwib25DaGFuZ2VTZXR0aW5ncyIsInVzZUNhbGxiYWNrIiwibmV3U2V0dGluZ3MiLCJfdXNlTGVnZW5kUG9zaXRpb24iLCJ1c2VMZWdlbmRQb3NpdGlvbiIsInVwZGF0ZVBvc2l0aW9uIiwic3RhcnRSZXNpemUiLCJyZXNpemUiLCJoYW5kbGVEcmFnU3RhcnQiLCJldmVudCIsImFjdGl2ZSIsImhhbmRsZURyYWdFbmQiLCJoYW5kbGVEcmFnTW92ZSIsImRlbHRhIiwieSIsIkRuZENvbnRleHQiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJtb2RpZmllcnMiLCJyZXN0cmljdFRvV2luZG93RWRnZXMiLCJJbWFnZUV4cG9ydExlZ2VuZCIsIl9yZWYyIiwiX2NvbnRhaW5lclJlZiRjdXJyZW50IiwiY29udGFpbmVyUmVmIiwiX3VzZUxlZ2VuZFBvc2l0aW9uMiIsInBvcnRhbFJvb3QiLCJjdXJyZW50IiwiY2xvc2VzdCIsInF1ZXJ5U2VsZWN0b3IiLCJjcmVhdGVQb3J0YWwiLCJwb3NpdGlvbiIsIk1hcExlZ2VuZFBhbmVsRmFjdG9yeSIsImRlcHMiLCJNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkiLCJNYXBDb250cm9sUGFuZWxGYWN0b3J5IiwiTWFwTGVnZW5kRmFjdG9yeSIsImRlZmF1bHRBY3Rpb25JY29ucyIsImxlZ2VuZCIsIkxlZ2VuZCIsIk1hcExlZ2VuZFBhbmVsQ29tcG9uZW50IiwiX3JlZjMiLCJfcm9vdENvbnRleHQkY3VycmVudCIsImxheWVycyIsInNjYWxlIiwib25Ub2dnbGVNYXBDb250cm9sIiwiaXNFeHBvcnQiLCJsb2dvQ29tcG9uZW50IiwiX3JlZjMkYWN0aW9uSWNvbnMiLCJhY3Rpb25JY29ucyIsIm1hcFN0YXRlIiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsIm9uQ2xpY2tDb250cm9sQnRuIiwiX3JlZjMkaXNWaWV3cG9ydFVuc3luIiwiaXNWaWV3cG9ydFVuc3luY0FsbG93ZWQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIk1hcENvbnRyb2xUb29sdGlwIiwiTWFwQ29udHJvbFBhbmVsIiwiTWFwTGVnZW5kIiwiX3JlZjQiLCJkaXNhYmxlRWRpdCIsInJvb3RDb250ZXh0IiwidXNlQ29udGV4dCIsIlJvb3RDb250ZXh0Iiwib25DbGljayIsIl9tYXBDb250cm9scyRtYXBEcmF3IiwibWFwRHJhdyIsIm9uQ2xvc2VDbGljayIsInByZXZlbnREZWZhdWx0Iiwic2hvdyIsImxlZ2VuZFBhbmVsIiwiaGVhZGVyIiwicGlubmFibGUiLCJkaXNhYmxlQ2xvc2UiLCJGcmFnbWVudCIsImhhc1BvcnRhYmxlV2lkdGgiLCJicmVha1BvaW50VmFsdWVzIiwiZG9jdW1lbnQiLCJib2R5IiwibWVzc2FnZSIsIk1hcENvbnRyb2xCdXR0b24iLCJNYXBMZWdlbmRQYW5lbCIsIl9zdGF0ZSRkZW1vJGtlcGxlckdsJDIiLCJfc3RhdGUkZGVtbyIsIl9tYXBDb250cm9scyRtYXBMZWdlbjIiLCJfcmVmNSIsImRpc3BsYXlOYW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC9tYXAtbGVnZW5kLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7Y3JlYXRlUG9ydGFsfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50VHlwZSwgRkMsIGZvcndhcmRSZWYsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtEbmRDb250ZXh0LCB1c2VEcmFnZ2FibGV9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IHtDU1N9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5pbXBvcnQge3VzZU1lcmdlUmVmc30gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0JztcblxuaW1wb3J0IHtBY3Rpb25IYW5kbGVyLCBzZXRNYXBDb250cm9sU2V0dGluZ3MsIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2JyZWFrUG9pbnRWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7TGF5ZXJWaXNDb25maWcsIE1hcENvbnRyb2xNYXBMZWdlbmQsIE1hcENvbnRyb2xzLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2hhc1BvcnRhYmxlV2lkdGh9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xlZ2VuZCwgRHJhZ2dhYmxlRG90cywgSG9yaXpvbnRhbFJlc2l6ZUhhbmRsZX0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Um9vdENvbnRleHR9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHVzZUxlZ2VuZFBvc2l0aW9uLCB7TWFwTGVnZW5kQ29udHJvbFNldHRpbmdzfSBmcm9tICcuLi9ob29rcy91c2UtbGVnZW5kLXBvc2l0aW9uJztcbmltcG9ydCB7d2l0aFN0YXRlfSBmcm9tICcuLi9pbmplY3Rvcic7XG5pbXBvcnQgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXBhbmVsJztcbmltcG9ydCBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sdGlwJztcbmltcG9ydCBNYXBMZWdlbmRGYWN0b3J5IGZyb20gJy4vbWFwLWxlZ2VuZCc7XG5pbXBvcnQge3Jlc3RyaWN0VG9XaW5kb3dFZGdlc30gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJztcblxuY29uc3QgRFJBR19SRVNJWkVfSUQgPSAnbWFwLWxlZ2VuZC1yZXNpemUnO1xuY29uc3QgRFJBR19NT1ZFX0lEID0gJ21hcC1sZWdlbmQtbW92ZSc7XG5cbmNvbnN0IFN0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnQgPSBzdHlsZWQuZGl2PHtjb250ZW50SGVpZ2h0PzogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAubGVnZW5kLWlucHV0LWJsb2NrIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gICYuaXMtZHJhZ2dpbmcgLmxlZ2VuZC1pbnB1dC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmOmhvdmVyLFxuICAmLmlzLWRyYWdnaW5nIHtcbiAgICAubGVnZW5kLW1vdmUtaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG4gICAgLmxlZ2VuZC1yZXNpemUtaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG4gICAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgfVxuICAubWFwLWNvbnRyb2xfX3BhbmVsLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxMDBweCk7XG4gICAgJHtwcm9wcyA9PiAocHJvcHMuY29udGVudEhlaWdodCA/IGBoZWlnaHQ6ICR7cHJvcHMuY29udGVudEhlaWdodH1weDtgIDogJycpfTtcbiAgfVxuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHotaW5kZXg6IDI7XG4gIC5tYXAtY29udHJvbC1wYW5lbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRNb3ZlSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgd2lkdGg6IDQ4cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjdXJzb3I6IG1vdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYWN0aXZlQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkUmVzaXplSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogI2Y3ZjhmYTtcbiAgei1pbmRleDogMjtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGN1cnNvcjogbnMtcmVzaXplO1xuYDtcblxuZXhwb3J0IHR5cGUgTWFwTGVnZW5kUGFuZWxGYWN0b3J5RGVwcyA9IFtcbiAgdHlwZW9mIE1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSxcbiAgdHlwZW9mIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksXG4gIHR5cGVvZiBNYXBMZWdlbmRGYWN0b3J5XG5dO1xuXG50eXBlIERyYWdnYWJsZUxlZ2VuZENvbnRlbnRQcm9wcyA9IHtcbiAgY29udGVudEhlaWdodD86IG51bWJlcjtcbiAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuY29uc3QgRHJhZ2dhYmxlTGVnZW5kQ29udGVudCA9IGZvcndhcmRSZWYoKHByb3BzOiBEcmFnZ2FibGVMZWdlbmRDb250ZW50UHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7cG9zaXRpb25TdHlsZXMsIGNoaWxkcmVufSA9IHByb3BzO1xuICBjb25zdCBkcmFnZ2FibGVNb3ZlID0gdXNlRHJhZ2dhYmxlKHtpZDogRFJBR19NT1ZFX0lEfSk7XG4gIGNvbnN0IGRyYWdnYWJsZVJlc2l6ZSA9IHVzZURyYWdnYWJsZSh7aWQ6IERSQUdfUkVTSVpFX0lEfSk7XG4gIGNvbnN0IHJlZnMgPSB1c2VNZXJnZVJlZnMoW2RyYWdnYWJsZU1vdmUuc2V0Tm9kZVJlZiwgcmVmXSk7XG4gIGNvbnN0IGlzRHJhZ2dpbmcgPSBkcmFnZ2FibGVNb3ZlLmlzRHJhZ2dpbmcgfHwgZHJhZ2dhYmxlUmVzaXplLmlzRHJhZ2dpbmc7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnRcbiAgICAgIHJlZj17cmVmc31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnZHJhZ2dhYmxlLWxlZ2VuZCcsIHsnaXMtZHJhZ2dpbmcnOiBpc0RyYWdnaW5nfSl9XG4gICAgICBzdHlsZT17ey4uLnBvc2l0aW9uU3R5bGVzLCB0cmFuc2Zvcm06IENTUy5UcmFuc2xhdGUudG9TdHJpbmcoZHJhZ2dhYmxlTW92ZS50cmFuc2Zvcm0pfX1cbiAgICAgIGNvbnRlbnRIZWlnaHQ9e3Byb3BzLmNvbnRlbnRIZWlnaHR9XG4gICAgICB7Li4uZHJhZ2dhYmxlTW92ZS5hdHRyaWJ1dGVzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtpc0RyYWdnaW5nID8gPGRpdiBjbGFzc05hbWU9XCJsZWdlbmQtaW5wdXQtYmxvY2tcIiAvPiA6IG51bGx9XG4gICAgICA8U3R5bGVkTW92ZUhhbmRsZSBjbGFzc05hbWU9XCJsZWdlbmQtbW92ZS1oYW5kbGVcIiB7Li4uZHJhZ2dhYmxlTW92ZS5saXN0ZW5lcnN9PlxuICAgICAgICA8RHJhZ2dhYmxlRG90cyBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgIDwvU3R5bGVkTW92ZUhhbmRsZT5cbiAgICAgIDxTdHlsZWRSZXNpemVIYW5kbGVcbiAgICAgICAgY2xhc3NOYW1lPVwibGVnZW5kLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICByZWY9e2RyYWdnYWJsZVJlc2l6ZS5zZXROb2RlUmVmfVxuICAgICAgICB7Li4uZHJhZ2dhYmxlUmVzaXplLmxpc3RlbmVyc31cbiAgICAgID5cbiAgICAgICAgPEhvcml6b250YWxSZXNpemVIYW5kbGUgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICA8L1N0eWxlZFJlc2l6ZUhhbmRsZT5cbiAgICA8L1N0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnQ+XG4gICk7XG59KTtcblxuY29uc3QgRHJhZ2dhYmxlTGVnZW5kID0gd2l0aFN0YXRlKFxuICBbXSxcbiAgc3RhdGUgPT4ge1xuICAgIGNvbnN0IHthY3RpdmVTaWRlUGFuZWwsIG1hcENvbnRyb2xzfSA9IHN0YXRlLmRlbW8ua2VwbGVyR2wubWFwLnVpU3RhdGU7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzU2lkZVBhbmVsU2hvd246IGFjdGl2ZVNpZGVQYW5lbCxcbiAgICAgIHNldHRpbmdzOiBtYXBDb250cm9scz8ubWFwTGVnZW5kPy5zZXR0aW5nc1xuICAgIH07XG4gIH0sXG4gIHtzZXRNYXBDb250cm9sU2V0dGluZ3N9XG4pKFxuICB3aXRoVGhlbWUoKHtpc1NpZGVQYW5lbFNob3duLCB0aGVtZSwgc2V0dGluZ3MsIHNldE1hcENvbnRyb2xTZXR0aW5ncywgY2hpbGRyZW59KSA9PiB7XG4gICAgY29uc3QgbGVnZW5kQ29udGVudFJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudD4obnVsbCk7XG4gICAgY29uc3Qgb25DaGFuZ2VTZXR0aW5ncyA9IHVzZUNhbGxiYWNrKFxuICAgICAgbmV3U2V0dGluZ3MgPT4gc2V0TWFwQ29udHJvbFNldHRpbmdzKCdtYXBMZWdlbmQnLCBuZXdTZXR0aW5ncyksXG4gICAgICBbc2V0TWFwQ29udHJvbFNldHRpbmdzXVxuICAgICk7XG4gICAgY29uc3Qge3Bvc2l0aW9uU3R5bGVzLCB1cGRhdGVQb3NpdGlvbiwgc3RhcnRSZXNpemUsIHJlc2l6ZSwgY29udGVudEhlaWdodH0gPSB1c2VMZWdlbmRQb3NpdGlvbih7XG4gICAgICBsZWdlbmRDb250ZW50UmVmLFxuICAgICAgaXNTaWRlUGFuZWxTaG93bixcbiAgICAgIHRoZW1lLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICBvbkNoYW5nZVNldHRpbmdzXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC5hY3RpdmUuaWQpIHtcbiAgICAgICAgICBjYXNlIERSQUdfUkVTSVpFX0lEOlxuICAgICAgICAgICAgc3RhcnRSZXNpemUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB1cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW3VwZGF0ZVBvc2l0aW9uLCBzdGFydFJlc2l6ZV1cbiAgICApO1xuICAgIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayh1cGRhdGVQb3NpdGlvbiwgW3VwZGF0ZVBvc2l0aW9uXSk7XG4gICAgY29uc3QgaGFuZGxlRHJhZ01vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC5hY3RpdmUuaWQpIHtcbiAgICAgICAgICBjYXNlIERSQUdfUkVTSVpFX0lEOlxuICAgICAgICAgICAgcmVzaXplKGV2ZW50LmRlbHRhLnkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbcmVzaXplXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgb25EcmFnTW92ZT17aGFuZGxlRHJhZ01vdmV9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1dpbmRvd0VkZ2VzXX1cbiAgICAgID5cbiAgICAgICAgPERyYWdnYWJsZUxlZ2VuZENvbnRlbnRcbiAgICAgICAgICByZWY9e2xlZ2VuZENvbnRlbnRSZWZ9XG4gICAgICAgICAgcG9zaXRpb25TdHlsZXM9e3Bvc2l0aW9uU3R5bGVzfVxuICAgICAgICAgIGNvbnRlbnRIZWlnaHQ9e2NvbnRlbnRIZWlnaHR9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvRHJhZ2dhYmxlTGVnZW5kQ29udGVudD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICApO1xuICB9KVxuKSBhcyBGQzx7Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZX0+O1xuXG50eXBlIEltYWdlRXhwb3J0TGVnZW5kUHJvcHMgPSB7XG4gIHNldHRpbmdzOiBNYXBMZWdlbmRDb250cm9sU2V0dGluZ3M7XG4gIGlzU2lkZVBhbmVsU2hvd246IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5jb25zdCBJbWFnZUV4cG9ydExlZ2VuZCA9IHdpdGhUaGVtZSgoe3NldHRpbmdzLCBpc1NpZGVQYW5lbFNob3duLCB0aGVtZSwgY2hpbGRyZW59KSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lclJlZjogUmVhY3QuTXV0YWJsZVJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+ID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBsZWdlbmRDb250ZW50UmVmOiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4gPSB1c2VSZWYobnVsbCk7XG5cbiAgY29uc3Qge3Bvc2l0aW9uU3R5bGVzfSA9IHVzZUxlZ2VuZFBvc2l0aW9uKHtcbiAgICBsZWdlbmRDb250ZW50UmVmLFxuICAgIGlzU2lkZVBhbmVsU2hvd24sXG4gICAgdGhlbWUsXG4gICAgc2V0dGluZ3MsXG4gICAgb25DaGFuZ2VTZXR0aW5nczogKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZyBieSBkZWZhdWx0XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBwb3J0YWxSb290ID0gY29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICA/LmNsb3Nlc3QoJy5leHBvcnQtbWFwLWluc3RhbmNlJylcbiAgICA/LnF1ZXJ5U2VsZWN0b3IoJyNkZWZhdWx0LWRlY2tnbC1vdmVybGF5LXdyYXBwZXInKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAge3BvcnRhbFJvb3RcbiAgICAgICAgPyBjcmVhdGVQb3J0YWwoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkLWxlZ2VuZFwiXG4gICAgICAgICAgICAgIHJlZj17bGVnZW5kQ29udGVudFJlZn1cbiAgICAgICAgICAgICAgc3R5bGU9e3suLi5wb3NpdGlvblN0eWxlcywgcG9zaXRpb246ICdhYnNvbHV0ZSd9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICBwb3J0YWxSb290XG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59KSBhcyBSZWFjdC5GQzxJbWFnZUV4cG9ydExlZ2VuZFByb3BzPjtcblxuTWFwTGVnZW5kUGFuZWxGYWN0b3J5LmRlcHMgPSBbTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5LCBNYXBDb250cm9sUGFuZWxGYWN0b3J5LCBNYXBMZWdlbmRGYWN0b3J5XTtcblxuaW50ZXJmYWNlIE1hcExlZ2VuZFBhbmVsSWNvbnMge1xuICBsZWdlbmQ6IENvbXBvbmVudFR5cGU8YW55Pjtcbn1cblxuZXhwb3J0IHR5cGUgTWFwTGVnZW5kUGFuZWxQcm9wcyA9IHtcbiAgdGhlbWU6IGFueTtcbiAgbGF5ZXJzOiBSZWFkb25seUFycmF5PExheWVyPjtcbiAgc2NhbGU6IG51bWJlcjtcbiAgb25Ub2dnbGVNYXBDb250cm9sOiAoY29udHJvbDogc3RyaW5nKSA9PiB2b2lkO1xuICBpc0V4cG9ydDogYm9vbGVhbjtcbiAgbG9nb0NvbXBvbmVudDogRWxlbWVudDtcbiAgYWN0aW9uSWNvbnM6IE1hcExlZ2VuZFBhbmVsSWNvbnM7XG4gIG1hcENvbnRyb2xzOiBNYXBDb250cm9scztcbiAgbWFwU3RhdGU/OiBNYXBTdGF0ZTtcbiAgb25MYXllclZpc0NvbmZpZ0NoYW5nZT86IChvbGRMYXllcjogTGF5ZXIsIG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHZvaWQ7XG4gIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ+O1xuICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2tDb250cm9sQnRuPzogKGU/OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0dGluZ3M6IE1hcExlZ2VuZENvbnRyb2xTZXR0aW5ncztcbiAgaXNTaWRlUGFuZWxTaG93bjogYm9vbGVhbjtcbn07XG5cbnR5cGUgTWFwTGVnZW5kUGFuZWxDb21wb25lbnRUeXBlID0gUmVhY3QuRkM8TWFwTGVnZW5kUGFuZWxQcm9wcz47XG5cbmNvbnN0IGRlZmF1bHRBY3Rpb25JY29ucyA9IHtcbiAgbGVnZW5kOiBMZWdlbmRcbn07XG5cbmNvbnN0IE1hcExlZ2VuZFBhbmVsQ29tcG9uZW50ID0gKHtcbiAgbGF5ZXJzLFxuICBtYXBDb250cm9scyxcbiAgc2NhbGUsXG4gIG9uVG9nZ2xlTWFwQ29udHJvbCxcbiAgaXNFeHBvcnQsXG4gIGxvZ29Db21wb25lbnQsXG4gIGFjdGlvbkljb25zID0gZGVmYXVsdEFjdGlvbkljb25zLFxuICBtYXBTdGF0ZSxcbiAgb25MYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0LFxuICBvbkNsaWNrQ29udHJvbEJ0bixcbiAgaXNWaWV3cG9ydFVuc3luY0FsbG93ZWQgPSB0cnVlLFxuICBjbGFzc05hbWUsXG4gIGludGVyYWN0aW9uQ29uZmlnLFxuICBzZXR0aW5ncyxcbiAgaXNTaWRlUGFuZWxTaG93bixcbiAgTWFwQ29udHJvbFRvb2x0aXAsXG4gIE1hcENvbnRyb2xQYW5lbCxcbiAgTWFwTGVnZW5kXG59KSA9PiB7XG4gIGNvbnN0IG1hcExlZ2VuZCA9IG1hcENvbnRyb2xzPy5tYXBMZWdlbmQgfHwgKHt9IGFzIE1hcENvbnRyb2xNYXBMZWdlbmQpO1xuICBjb25zdCB7YWN0aXZlLCBkaXNhYmxlRWRpdH0gPSBtYXBMZWdlbmQgfHwge307XG4gIGNvbnN0IHJvb3RDb250ZXh0ID0gdXNlQ29udGV4dChSb290Q29udGV4dCk7XG5cbiAgY29uc3Qgb25DbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsaWNrQ29udHJvbEJ0bj8uKCk7XG4gICAgaWYgKG1hcENvbnRyb2xzPy5tYXBEcmF3Py5hY3RpdmUpIHtcbiAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbCgnbWFwRHJhdycpO1xuICAgIH1cbiAgICBvblRvZ2dsZU1hcENvbnRyb2woJ21hcExlZ2VuZCcpO1xuICB9LCBbb25DbGlja0NvbnRyb2xCdG4sIG9uVG9nZ2xlTWFwQ29udHJvbCwgbWFwQ29udHJvbHNdKTtcbiAgY29uc3Qgb25DbG9zZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvblRvZ2dsZU1hcENvbnRyb2woJ21hcExlZ2VuZCcpO1xuICAgIH0sXG4gICAgW29uVG9nZ2xlTWFwQ29udHJvbF1cbiAgKTtcblxuICBpZiAoIW1hcExlZ2VuZC5zaG93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsZWdlbmRQYW5lbCA9IGFjdGl2ZSA/IChcbiAgICA8TWFwQ29udHJvbFBhbmVsXG4gICAgICBzY2FsZT17c2NhbGV9XG4gICAgICBoZWFkZXI9XCJoZWFkZXIubGF5ZXJMZWdlbmRcIlxuICAgICAgey4uLntvbkNsaWNrOiBvbkNsb3NlQ2xpY2ssIHBpbm5hYmxlOiBmYWxzZSwgZGlzYWJsZUNsb3NlOiBmYWxzZX19XG4gICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICBsb2dvQ29tcG9uZW50PXtsb2dvQ29tcG9uZW50fVxuICAgICAgbWFwU3RhdGU9e21hcFN0YXRlfVxuICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXtvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9XG4gICAgICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZD17aXNWaWV3cG9ydFVuc3luY0FsbG93ZWR9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICA+XG4gICAgICA8TWFwTGVnZW5kXG4gICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgIGRpc2FibGVFZGl0PXtkaXNhYmxlRWRpdH1cbiAgICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXtvbkxheWVyVmlzQ29uZmlnQ2hhbmdlfVxuICAgICAgLz5cbiAgICA8L01hcENvbnRyb2xQYW5lbD5cbiAgKSA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2FjdGl2ZSA/IChcbiAgICAgICAgaGFzUG9ydGFibGVXaWR0aChicmVha1BvaW50VmFsdWVzKSA/IChcbiAgICAgICAgICBsZWdlbmRQYW5lbFxuICAgICAgICApIDogaXNFeHBvcnQgPyAoXG4gICAgICAgICAgPEltYWdlRXhwb3J0TGVnZW5kIGlzU2lkZVBhbmVsU2hvd249e2lzU2lkZVBhbmVsU2hvd259IHNldHRpbmdzPXtzZXR0aW5nc30+XG4gICAgICAgICAgICB7bGVnZW5kUGFuZWx9XG4gICAgICAgICAgPC9JbWFnZUV4cG9ydExlZ2VuZD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBjcmVhdGVQb3J0YWwoXG4gICAgICAgICAgICA8RHJhZ2dhYmxlTGVnZW5kPntsZWdlbmRQYW5lbH08L0RyYWdnYWJsZUxlZ2VuZD4sXG4gICAgICAgICAgICByb290Q29udGV4dD8uY3VycmVudCA/PyBkb2N1bWVudC5ib2R5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIDogbnVsbH1cbiAgICAgIHshaXNFeHBvcnQgPyAoXG4gICAgICAgIDxNYXBDb250cm9sVG9vbHRpcCBpZD1cInNob3ctbGVnZW5kXCIgbWVzc2FnZT1cInRvb2x0aXAuc2hvd0xlZ2VuZFwiPlxuICAgICAgICAgIDxNYXBDb250cm9sQnV0dG9uIGNsYXNzTmFtZT1cIm1hcC1jb250cm9sLWJ1dHRvbiBzaG93LWxlZ2VuZFwiIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGFjdGlvbkljb25zLmxlZ2VuZCBoZWlnaHQ9XCIyMnB4XCIgLz5cbiAgICAgICAgICA8L01hcENvbnRyb2xCdXR0b24+XG4gICAgICAgIDwvTWFwQ29udHJvbFRvb2x0aXA+XG4gICAgICApIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIE1hcExlZ2VuZFBhbmVsRmFjdG9yeShcbiAgTWFwQ29udHJvbFRvb2x0aXA6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xUb29sdGlwRmFjdG9yeT4sXG4gIE1hcENvbnRyb2xQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udHJvbFBhbmVsRmFjdG9yeT4sXG4gIE1hcExlZ2VuZDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwTGVnZW5kRmFjdG9yeT5cbik6IE1hcExlZ2VuZFBhbmVsQ29tcG9uZW50VHlwZSB7XG4gIGNvbnN0IE1hcExlZ2VuZFBhbmVsID0gd2l0aFN0YXRlKFxuICAgIFtdLFxuICAgIHN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHthY3RpdmVTaWRlUGFuZWwsIG1hcENvbnRyb2xzfSA9IHN0YXRlLmRlbW8/LmtlcGxlckdsLm1hcC51aVN0YXRlID8/IHt9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNTaWRlUGFuZWxTaG93bjogYWN0aXZlU2lkZVBhbmVsLFxuICAgICAgICBzZXR0aW5nczogbWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uc2V0dGluZ3MsXG4gICAgICAgIE1hcENvbnRyb2xUb29sdGlwLFxuICAgICAgICBNYXBDb250cm9sUGFuZWwsXG4gICAgICAgIE1hcExlZ2VuZFxuICAgICAgfTtcbiAgICB9LFxuICAgIHtzZXRNYXBDb250cm9sU2V0dGluZ3N9XG4gICkoTWFwTGVnZW5kUGFuZWxDb21wb25lbnQpO1xuXG4gIE1hcExlZ2VuZFBhbmVsLmRpc3BsYXlOYW1lID0gJ01hcExlZ2VuZFBhbmVsJztcbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBMZWdlbmRQYW5lbCBhcyBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUpIGFzIE1hcExlZ2VuZFBhbmVsQ29tcG9uZW50VHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwTGVnZW5kUGFuZWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLFdBQUEsR0FBQUMsc0JB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