@carto/kepler.gl 0.0.85 → 0.0.86-alpha.deck9.1

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 (430) hide show
  1. package/dist/actions/action-wrapper.js +36 -41
  2. package/dist/actions/actions.js +15 -21
  3. package/dist/actions/identity-actions.js +14 -20
  4. package/dist/actions/index.js +16 -16
  5. package/dist/actions/map-state-actions.js +12 -18
  6. package/dist/actions/map-style-actions.js +30 -46
  7. package/dist/actions/provider-actions.js +49 -73
  8. package/dist/actions/ui-state-actions.js +73 -113
  9. package/dist/actions/vis-state-actions.js +152 -148
  10. package/dist/cloud-providers/index.js +6 -7
  11. package/dist/cloud-providers/provider.js +189 -279
  12. package/dist/components/bottom-widget.js +105 -117
  13. package/dist/components/common/action-panel.js +122 -74
  14. package/dist/components/common/animation-control/animation-control.js +69 -54
  15. package/dist/components/common/animation-control/animation-controller.js +134 -160
  16. package/dist/components/common/animation-control/animation-speed-slider.js +47 -54
  17. package/dist/components/common/animation-control/floating-time-display.js +120 -100
  18. package/dist/components/common/animation-control/playback-controls.js +147 -144
  19. package/dist/components/common/animation-control/speed-control.js +31 -23
  20. package/dist/components/common/checkbox.js +56 -70
  21. package/dist/components/common/color-legend.js +83 -110
  22. package/dist/components/common/data-table/button.js +31 -23
  23. package/dist/components/common/data-table/canvas.js +11 -5
  24. package/dist/components/common/data-table/cell-size.js +51 -61
  25. package/dist/components/common/data-table/grid.js +40 -59
  26. package/dist/components/common/data-table/index.js +464 -348
  27. package/dist/components/common/data-table/option-dropdown.js +50 -33
  28. package/dist/components/common/dataset-label.js +17 -13
  29. package/dist/components/common/error-boundary.js +27 -45
  30. package/dist/components/common/field-selector.js +99 -139
  31. package/dist/components/common/field-token.js +24 -9
  32. package/dist/components/common/file-uploader/file-drop.js +96 -115
  33. package/dist/components/common/file-uploader/file-upload-progress.js +68 -45
  34. package/dist/components/common/file-uploader/file-upload.js +215 -187
  35. package/dist/components/common/file-uploader/upload-button.js +35 -22
  36. package/dist/components/common/histogram-plot.js +47 -58
  37. package/dist/components/common/icons/add.js +14 -27
  38. package/dist/components/common/icons/anchor_window.js +16 -18
  39. package/dist/components/common/icons/arrow-down-alt.js +14 -27
  40. package/dist/components/common/icons/arrow-down-solid.js +14 -27
  41. package/dist/components/common/icons/arrow-down.js +14 -27
  42. package/dist/components/common/icons/arrow-left.js +17 -30
  43. package/dist/components/common/icons/arrow-right.js +14 -27
  44. package/dist/components/common/icons/arrow-up-alt.js +15 -28
  45. package/dist/components/common/icons/arrow-up-solid.js +14 -27
  46. package/dist/components/common/icons/arrow-up.js +14 -27
  47. package/dist/components/common/icons/base.js +39 -57
  48. package/dist/components/common/icons/bug.js +16 -29
  49. package/dist/components/common/icons/cancel.js +14 -27
  50. package/dist/components/common/icons/checkmark.js +18 -31
  51. package/dist/components/common/icons/chevron-right.js +20 -33
  52. package/dist/components/common/icons/clipboard.js +15 -28
  53. package/dist/components/common/icons/clock.js +16 -29
  54. package/dist/components/common/icons/close.js +19 -32
  55. package/dist/components/common/icons/code-alt.js +16 -29
  56. package/dist/components/common/icons/copy.js +18 -31
  57. package/dist/components/common/icons/crosshairs.js +16 -29
  58. package/dist/components/common/icons/cube-3d.js +18 -31
  59. package/dist/components/common/icons/cursor-click.js +18 -31
  60. package/dist/components/common/icons/data-table.js +15 -28
  61. package/dist/components/common/icons/db.js +15 -28
  62. package/dist/components/common/icons/delete.js +16 -29
  63. package/dist/components/common/icons/docs.js +30 -43
  64. package/dist/components/common/icons/drag-n-drop.js +16 -29
  65. package/dist/components/common/icons/draw-polygon.js +33 -46
  66. package/dist/components/common/icons/email.js +18 -31
  67. package/dist/components/common/icons/expand.js +16 -29
  68. package/dist/components/common/icons/eye-seen.js +16 -29
  69. package/dist/components/common/icons/eye-unseen.js +16 -29
  70. package/dist/components/common/icons/file-type.js +35 -19
  71. package/dist/components/common/icons/file.js +14 -27
  72. package/dist/components/common/icons/files.js +14 -26
  73. package/dist/components/common/icons/filter-funnel.js +14 -27
  74. package/dist/components/common/icons/free-window.js +16 -18
  75. package/dist/components/common/icons/gear.js +16 -29
  76. package/dist/components/common/icons/hash.js +14 -27
  77. package/dist/components/common/icons/histogram.js +15 -27
  78. package/dist/components/common/icons/index.js +156 -156
  79. package/dist/components/common/icons/info.js +25 -38
  80. package/dist/components/common/icons/layers.js +14 -27
  81. package/dist/components/common/icons/left-arrow.js +16 -29
  82. package/dist/components/common/icons/legend.js +14 -27
  83. package/dist/components/common/icons/line-chart.js +14 -27
  84. package/dist/components/common/icons/login.js +17 -30
  85. package/dist/components/common/icons/logout.js +16 -29
  86. package/dist/components/common/icons/map-icon.js +18 -32
  87. package/dist/components/common/icons/map.js +18 -32
  88. package/dist/components/common/icons/messages.js +14 -27
  89. package/dist/components/common/icons/minus.js +14 -27
  90. package/dist/components/common/icons/order-by-dataset.js +15 -17
  91. package/dist/components/common/icons/order-by-list.js +7 -9
  92. package/dist/components/common/icons/pause.js +14 -27
  93. package/dist/components/common/icons/picture.js +14 -26
  94. package/dist/components/common/icons/pin.js +17 -30
  95. package/dist/components/common/icons/play.js +14 -27
  96. package/dist/components/common/icons/polygon.js +35 -48
  97. package/dist/components/common/icons/rectangle.js +36 -49
  98. package/dist/components/common/icons/reduce.js +17 -30
  99. package/dist/components/common/icons/reset.js +14 -27
  100. package/dist/components/common/icons/rocket.js +14 -27
  101. package/dist/components/common/icons/save.js +16 -29
  102. package/dist/components/common/icons/save2.js +20 -33
  103. package/dist/components/common/icons/search.js +16 -29
  104. package/dist/components/common/icons/settings.js +16 -29
  105. package/dist/components/common/icons/share.js +14 -27
  106. package/dist/components/common/icons/split.js +42 -55
  107. package/dist/components/common/icons/square-select.js +16 -29
  108. package/dist/components/common/icons/swap-horizontal.js +18 -31
  109. package/dist/components/common/icons/table.js +14 -27
  110. package/dist/components/common/icons/trash.js +16 -29
  111. package/dist/components/common/icons/upload.js +14 -27
  112. package/dist/components/common/icons/vert-dots.js +52 -65
  113. package/dist/components/common/icons/vert-three-dots.js +27 -40
  114. package/dist/components/common/icons/warning.js +26 -39
  115. package/dist/components/common/image-preview.js +71 -33
  116. package/dist/components/common/info-helper.js +36 -29
  117. package/dist/components/common/item-selector/accessor.js +7 -13
  118. package/dist/components/common/item-selector/chickleted-input.js +72 -56
  119. package/dist/components/common/item-selector/dropdown-list.js +182 -214
  120. package/dist/components/common/item-selector/item-selector-submenu.js +34 -55
  121. package/dist/components/common/item-selector/item-selector.js +183 -194
  122. package/dist/components/common/item-selector/typeahead.js +236 -248
  123. package/dist/components/common/line-chart.js +80 -58
  124. package/dist/components/common/loading-spinner.js +46 -31
  125. package/dist/components/common/logo.js +61 -48
  126. package/dist/components/common/map-layer-selector.js +31 -25
  127. package/dist/components/common/modal.js +167 -106
  128. package/dist/components/common/portaled.js +169 -189
  129. package/dist/components/common/progress-bar.js +27 -24
  130. package/dist/components/common/range-brush.js +176 -215
  131. package/dist/components/common/range-plot.js +52 -63
  132. package/dist/components/common/range-slider.js +206 -231
  133. package/dist/components/common/slider/mouse-event.js +59 -66
  134. package/dist/components/common/slider/slider-bar-handle.js +51 -61
  135. package/dist/components/common/slider/slider-handle.js +127 -102
  136. package/dist/components/common/slider/slider.js +143 -162
  137. package/dist/components/common/styled-components.js +518 -256
  138. package/dist/components/common/switch.js +11 -11
  139. package/dist/components/common/time-range-slider-time-title.js +49 -32
  140. package/dist/components/common/time-range-slider.js +56 -45
  141. package/dist/components/common/time-slider-marker.js +71 -52
  142. package/dist/components/common/tippy-tooltip.js +89 -59
  143. package/dist/components/common/toolbar-item.js +53 -45
  144. package/dist/components/common/toolbar.js +24 -18
  145. package/dist/components/common/vertical-toolbar.js +13 -6
  146. package/dist/components/container.js +87 -119
  147. package/dist/components/context.js +6 -8
  148. package/dist/components/editor/constants.js +4 -4
  149. package/dist/components/editor/editor.js +122 -157
  150. package/dist/components/editor/feature-action-panel.js +52 -59
  151. package/dist/components/editor/feature-styles.js +46 -29
  152. package/dist/components/editor/handle-style.js +38 -29
  153. package/dist/components/filters/components.js +8 -4
  154. package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +33 -43
  155. package/dist/components/filters/filter-panels/multi-select-filter-panel.js +20 -21
  156. package/dist/components/filters/filter-panels/new-filter-panel.js +24 -31
  157. package/dist/components/filters/filter-panels/polygon-filter-panel.js +26 -31
  158. package/dist/components/filters/filter-panels/range-filter-panel.js +20 -21
  159. package/dist/components/filters/filter-panels/single-select-filter-panel.js +20 -21
  160. package/dist/components/filters/filter-panels/time-range-filter-panel.js +28 -31
  161. package/dist/components/filters/index.js +10 -10
  162. package/dist/components/filters/multi-select-filter.js +11 -9
  163. package/dist/components/filters/polygon-filter.js +26 -41
  164. package/dist/components/filters/range-filter.js +9 -7
  165. package/dist/components/filters/single-select-filter.js +11 -13
  166. package/dist/components/filters/time-range-filter.js +16 -14
  167. package/dist/components/filters/time-widget.js +125 -84
  168. package/dist/components/geocoder/geocoder.js +158 -177
  169. package/dist/components/geocoder-panel.js +66 -87
  170. package/dist/components/index.js +328 -329
  171. package/dist/components/injector.js +44 -63
  172. package/dist/components/kepler-gl.js +325 -361
  173. package/dist/components/map/coordinate-info.js +18 -16
  174. package/dist/components/map/layer-hover-info.js +108 -86
  175. package/dist/components/map/layer-selector-panel.js +50 -48
  176. package/dist/components/map/locale-panel.js +38 -44
  177. package/dist/components/map/map-control-panel.js +70 -47
  178. package/dist/components/map/map-control-toolbar.js +9 -6
  179. package/dist/components/map/map-control-tooltip.js +10 -8
  180. package/dist/components/map/map-control.js +35 -27
  181. package/dist/components/map/map-draw-panel.js +38 -48
  182. package/dist/components/map/map-legend-panel.js +47 -50
  183. package/dist/components/map/map-legend.js +133 -116
  184. package/dist/components/map/map-popover.js +155 -100
  185. package/dist/components/map/split-map-button.js +30 -34
  186. package/dist/components/map/toggle-3d-button.js +25 -27
  187. package/dist/components/map-container.js +313 -359
  188. package/dist/components/maps-layout.js +16 -26
  189. package/dist/components/modal-container.js +359 -355
  190. package/dist/components/modals/add-map-style-modal.js +233 -194
  191. package/dist/components/modals/cloud-tile.js +96 -67
  192. package/dist/components/modals/data-table-modal.js +155 -152
  193. package/dist/components/modals/delete-data-modal.js +20 -20
  194. package/dist/components/modals/error-display.js +9 -7
  195. package/dist/components/modals/export-data-modal.js +118 -140
  196. package/dist/components/modals/export-image-modal.js +82 -69
  197. package/dist/components/modals/export-map-modal/components.js +20 -18
  198. package/dist/components/modals/export-map-modal/export-html-map.js +82 -74
  199. package/dist/components/modals/export-map-modal/export-json-map.js +65 -45
  200. package/dist/components/modals/export-map-modal/export-map-modal.js +42 -47
  201. package/dist/components/modals/image-modal-container.js +20 -21
  202. package/dist/components/modals/load-data-modal.js +28 -30
  203. package/dist/components/modals/load-storage-map.js +277 -178
  204. package/dist/components/modals/loading-dialog.js +41 -19
  205. package/dist/components/modals/modal-dialog.js +4 -6
  206. package/dist/components/modals/modal-tabs.js +83 -48
  207. package/dist/components/modals/overwrite-map-modal.js +41 -30
  208. package/dist/components/modals/provider-modal-container.js +23 -42
  209. package/dist/components/modals/save-map-modal.js +107 -83
  210. package/dist/components/modals/share-map-modal.js +101 -95
  211. package/dist/components/modals/status-panel.js +63 -43
  212. package/dist/components/modals/storage-map-viewer.js +133 -70
  213. package/dist/components/notification-panel/notification-item.js +94 -97
  214. package/dist/components/notification-panel.js +35 -43
  215. package/dist/components/performance.js +49 -53
  216. package/dist/components/plot-container.js +151 -169
  217. package/dist/components/side-panel/cloud-storage-dropdown.js +13 -15
  218. package/dist/components/side-panel/common/dataset-info.js +16 -12
  219. package/dist/components/side-panel/common/dataset-tag.js +48 -27
  220. package/dist/components/side-panel/common/dataset-title.js +119 -116
  221. package/dist/components/side-panel/common/source-data-catalog.js +31 -32
  222. package/dist/components/side-panel/common/source-data-selector.js +52 -77
  223. package/dist/components/side-panel/custom-panel.js +6 -8
  224. package/dist/components/side-panel/filter-manager.js +48 -62
  225. package/dist/components/side-panel/filter-panel/filter-panel-header.js +35 -25
  226. package/dist/components/side-panel/filter-panel/filter-panel.js +46 -64
  227. package/dist/components/side-panel/interaction-manager.js +20 -18
  228. package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
  229. package/dist/components/side-panel/interaction-panel/interaction-panel.js +76 -95
  230. package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +118 -143
  231. package/dist/components/side-panel/interaction-panel/tooltip-config.js +95 -76
  232. package/dist/components/side-panel/layer-manager.js +105 -115
  233. package/dist/components/side-panel/layer-panel/add-layer-button.js +92 -54
  234. package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +5 -5
  235. package/dist/components/side-panel/layer-panel/color-palette.js +50 -37
  236. package/dist/components/side-panel/layer-panel/color-range-selector.js +196 -207
  237. package/dist/components/side-panel/layer-panel/color-selector.js +104 -110
  238. package/dist/components/side-panel/layer-panel/column-selector.js +34 -22
  239. package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +4 -4
  240. package/dist/components/side-panel/layer-panel/custom-palette.js +248 -205
  241. package/dist/components/side-panel/layer-panel/custom-picker.js +51 -69
  242. package/dist/components/side-panel/layer-panel/dataset-layer-group.js +37 -42
  243. package/dist/components/side-panel/layer-panel/dataset-layer-section.js +31 -27
  244. package/dist/components/side-panel/layer-panel/dataset-section.js +45 -35
  245. package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +14 -13
  246. package/dist/components/side-panel/layer-panel/hex-column-config.js +32 -55
  247. package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +5 -5
  248. package/dist/components/side-panel/layer-panel/layer-column-config.js +42 -46
  249. package/dist/components/side-panel/layer-panel/layer-config-group.js +178 -144
  250. package/dist/components/side-panel/layer-panel/layer-configurator.js +826 -830
  251. package/dist/components/side-panel/layer-panel/layer-list.js +101 -94
  252. package/dist/components/side-panel/layer-panel/layer-panel-header.js +124 -82
  253. package/dist/components/side-panel/layer-panel/layer-panel.js +111 -105
  254. package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +67 -58
  255. package/dist/components/side-panel/layer-panel/layer-type-list-item.js +47 -32
  256. package/dist/components/side-panel/layer-panel/layer-type-selector.js +30 -41
  257. package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +42 -43
  258. package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +55 -57
  259. package/dist/components/side-panel/layer-panel/single-color-palette.js +48 -33
  260. package/dist/components/side-panel/layer-panel/text-label-panel.js +81 -116
  261. package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +88 -102
  262. package/dist/components/side-panel/layer-panel/vis-config-slider.js +99 -85
  263. package/dist/components/side-panel/layer-panel/vis-config-switch.js +38 -29
  264. package/dist/components/side-panel/map-manager.js +70 -89
  265. package/dist/components/side-panel/map-style-panel/map-layer-selector.js +72 -60
  266. package/dist/components/side-panel/map-style-panel/map-style-selector.js +64 -42
  267. package/dist/components/side-panel/panel-dropdown.js +21 -37
  268. package/dist/components/side-panel/panel-header-action.js +60 -65
  269. package/dist/components/side-panel/panel-header.js +165 -184
  270. package/dist/components/side-panel/panel-tab.js +35 -29
  271. package/dist/components/side-panel/panel-title.js +15 -18
  272. package/dist/components/side-panel/panel-toggle.js +30 -31
  273. package/dist/components/side-panel/side-bar.js +100 -91
  274. package/dist/components/side-panel.js +108 -123
  275. package/dist/connect/keplergl-connect.js +17 -26
  276. package/dist/connect/with-local-selector.js +31 -63
  277. package/dist/constants/action-types.js +113 -115
  278. package/dist/constants/color-palette.js +14 -16
  279. package/dist/constants/color-ranges.js +23 -28
  280. package/dist/constants/custom-color-ranges.js +12 -12
  281. package/dist/constants/default-settings.js +323 -254
  282. package/dist/constants/index.js +63 -63
  283. package/dist/constants/keyevent.js +4 -4
  284. package/dist/constants/tooltip.js +5 -5
  285. package/dist/constants/user-feedbacks.js +9 -5
  286. package/dist/constants/user-guides.js +10 -10
  287. package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +37 -63
  288. package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +52 -56
  289. package/dist/deckgl-layers/cluster-layer/cluster-layer.js +165 -168
  290. package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +24 -43
  291. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.d.ts +2 -2
  292. package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +27 -40
  293. package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +27 -40
  294. package/dist/deckgl-layers/layer-utils/cluster-utils.js +60 -68
  295. package/dist/deckgl-layers/layer-utils/cpu-aggregator.d.ts +4 -4
  296. package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +281 -282
  297. package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
  298. package/dist/deckgl-layers/line-layer/line-layer.js +62 -70
  299. package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +37 -51
  300. package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +65 -85
  301. package/dist/index.js +15 -16
  302. package/dist/layers/aggregation-layer.js +299 -331
  303. package/dist/layers/arc-layer/arc-layer-icon.js +27 -41
  304. package/dist/layers/arc-layer/arc-layer.js +174 -201
  305. package/dist/layers/base-layer.d.ts +1 -1
  306. package/dist/layers/base-layer.js +1371 -1544
  307. package/dist/layers/cluster-layer/cluster-layer-icon.js +30 -44
  308. package/dist/layers/cluster-layer/cluster-layer.js +89 -103
  309. package/dist/layers/default-layer-icon.js +39 -53
  310. package/dist/layers/geojson-layer/geojson-layer-icon.js +42 -55
  311. package/dist/layers/geojson-layer/geojson-layer.js +292 -353
  312. package/dist/layers/geojson-layer/geojson-utils.js +31 -36
  313. package/dist/layers/grid-layer/grid-layer-icon.js +87 -100
  314. package/dist/layers/grid-layer/grid-layer.js +51 -61
  315. package/dist/layers/grid-layer/grid-utils.js +13 -9
  316. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +21 -35
  317. package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +225 -260
  318. package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
  319. package/dist/layers/heatmap-layer/heatmap-layer-icon.js +39 -52
  320. package/dist/layers/heatmap-layer/heatmap-layer.js +140 -171
  321. package/dist/layers/hexagon-layer/hexagon-layer-icon.js +51 -64
  322. package/dist/layers/hexagon-layer/hexagon-layer.js +49 -63
  323. package/dist/layers/hexagon-layer/hexagon-utils.js +15 -14
  324. package/dist/layers/icon-layer/icon-info-modal.js +82 -75
  325. package/dist/layers/icon-layer/icon-layer-icon.js +24 -37
  326. package/dist/layers/icon-layer/icon-layer.js +274 -303
  327. package/dist/layers/index.js +43 -29
  328. package/dist/layers/layer-factory.js +25 -41
  329. package/dist/layers/layer-text-label.js +21 -23
  330. package/dist/layers/layer-update.js +16 -18
  331. package/dist/layers/line-layer/line-layer-icon.js +30 -43
  332. package/dist/layers/line-layer/line-layer.js +123 -142
  333. package/dist/layers/mapbox-utils.js +61 -62
  334. package/dist/layers/mapboxgl-layer.js +124 -169
  335. package/dist/layers/point-layer/point-layer-icon.js +45 -59
  336. package/dist/layers/point-layer/point-layer.d.ts +2 -2
  337. package/dist/layers/point-layer/point-layer.js +355 -386
  338. package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +208 -238
  339. package/dist/layers/s2-geometry-layer/s2-layer-icon.js +21 -35
  340. package/dist/layers/s2-geometry-layer/s2-utils.js +9 -8
  341. package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +24 -25
  342. package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +102 -115
  343. package/dist/layers/scenegraph-layer/scenegraph-layer.js +148 -172
  344. package/dist/layers/trip-layer/trip-info-modal.js +50 -30
  345. package/dist/layers/trip-layer/trip-layer-icon.js +40 -53
  346. package/dist/layers/trip-layer/trip-layer.js +239 -307
  347. package/dist/layers/trip-layer/trip-utils.js +34 -50
  348. package/dist/layers/types.js +2 -2
  349. package/dist/localization/formatted-message.js +8 -10
  350. package/dist/localization/index.js +7 -7
  351. package/dist/localization/locales.js +6 -9
  352. package/dist/localization/messages.js +13 -10
  353. package/dist/localization/translations/ca.js +11 -13
  354. package/dist/localization/translations/cn.js +11 -13
  355. package/dist/localization/translations/en.js +11 -13
  356. package/dist/localization/translations/es.js +11 -13
  357. package/dist/localization/translations/fi.js +11 -13
  358. package/dist/localization/translations/ja.js +11 -13
  359. package/dist/localization/translations/pt.js +11 -13
  360. package/dist/localization/translations/ru.js +11 -13
  361. package/dist/middleware/index.js +3 -5
  362. package/dist/processors/data-processor.js +164 -201
  363. package/dist/processors/file-handler.js +111 -233
  364. package/dist/processors/index.js +4 -4
  365. package/dist/reducers/combined-updaters.js +41 -41
  366. package/dist/reducers/composer-helpers.js +20 -45
  367. package/dist/reducers/composers.js +9 -8
  368. package/dist/reducers/core.js +31 -35
  369. package/dist/reducers/index.js +21 -22
  370. package/dist/reducers/map-state-updaters.js +65 -47
  371. package/dist/reducers/map-state.js +23 -15
  372. package/dist/reducers/map-style-updaters.js +233 -159
  373. package/dist/reducers/map-style.js +30 -16
  374. package/dist/reducers/provider-state-updaters.js +217 -229
  375. package/dist/reducers/provider-state.js +29 -17
  376. package/dist/reducers/root.js +86 -58
  377. package/dist/reducers/ui-state-updaters.js +337 -218
  378. package/dist/reducers/ui-state.js +45 -16
  379. package/dist/reducers/vis-state-merger.js +205 -209
  380. package/dist/reducers/vis-state-selectors.js +5 -19
  381. package/dist/reducers/vis-state-updaters.js +1003 -876
  382. package/dist/reducers/vis-state.js +75 -16
  383. package/dist/schemas/dataset-schema.js +84 -108
  384. package/dist/schemas/index.js +28 -29
  385. package/dist/schemas/map-state-schema.js +21 -18
  386. package/dist/schemas/map-style-schema.js +47 -55
  387. package/dist/schemas/schema-manager.js +147 -161
  388. package/dist/schemas/schema-utils.js +8 -9
  389. package/dist/schemas/schema.js +72 -87
  390. package/dist/schemas/versions.js +3 -3
  391. package/dist/schemas/vis-state-schema.js +441 -583
  392. package/dist/styles/base.js +1217 -1021
  393. package/dist/styles/index.js +3 -3
  394. package/dist/styles/media-breakpoints.js +23 -18
  395. package/dist/tasks/tasks.js +36 -39
  396. package/dist/templates/export-map-html.js +233 -4
  397. package/dist/utils/aggregate-utils.js +13 -16
  398. package/dist/utils/color-utils.js +29 -37
  399. package/dist/utils/custom-scales.js +3 -3
  400. package/dist/utils/data-scale-utils.js +6 -13
  401. package/dist/utils/data-utils.js +60 -83
  402. package/dist/utils/dataset-utils.js +48 -77
  403. package/dist/utils/dom-to-image.js +108 -163
  404. package/dist/utils/dom-utils.js +88 -105
  405. package/dist/utils/export-utils.js +116 -103
  406. package/dist/utils/filter-utils.js +379 -374
  407. package/dist/utils/gl-utils.js +16 -15
  408. package/dist/utils/gpu-filter-utils.js +54 -73
  409. package/dist/utils/index.js +47 -48
  410. package/dist/utils/interaction-utils.js +53 -46
  411. package/dist/utils/layer-utils.js +89 -78
  412. package/dist/utils/locale-utils.js +24 -16
  413. package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +67 -76
  414. package/dist/utils/map-style-utils/mapbox-utils.js +4 -3
  415. package/dist/utils/mapbox-utils.js +3 -4
  416. package/dist/utils/notifications-utils.js +33 -38
  417. package/dist/utils/observe-dimensions.js +42 -54
  418. package/dist/utils/projection-utils.js +14 -11
  419. package/dist/utils/split-map-utils.js +30 -33
  420. package/dist/utils/table-utils/data-container-utils.js +15 -14
  421. package/dist/utils/table-utils/data-row.js +58 -65
  422. package/dist/utils/table-utils/index.js +2 -2
  423. package/dist/utils/table-utils/indexed-data-container.js +105 -173
  424. package/dist/utils/table-utils/kepler-table.js +362 -386
  425. package/dist/utils/table-utils/row-data-container.js +99 -164
  426. package/dist/utils/utils.js +29 -30
  427. package/package.json +21 -21
  428. package/src/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.ts +2 -2
  429. package/src/deckgl-layers/layer-utils/cpu-aggregator.ts +21 -11
  430. package/src/layers/base-layer.ts +17 -10
@@ -4,15 +4,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.pointVisConfigs = exports.iconRequiredColumns = exports.iconPosAccessor = exports.iconOptionalColumns = exports.iconAccessor = exports["default"] = exports.SVG_ICON_URL = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
7
+ exports.pointVisConfigs = exports.iconRequiredColumns = exports.iconPosAccessor = exports.iconOptionalColumns = exports.iconAccessor = exports.default = exports.SVG_ICON_URL = void 0;
9
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
16
9
  var _window = _interopRequireDefault(require("global/window"));
17
10
  var _extensions = require("@deck.gl/extensions");
18
11
  var _svgIconLayer = _interopRequireDefault(require("../../deckgl-layers/svg-icon-layer/svg-icon-layer"));
@@ -21,11 +14,7 @@ var _defaultSettings = require("../../constants/default-settings");
21
14
  var _iconInfoModal = _interopRequireDefault(require("./icon-info-modal"));
22
15
  var _baseLayer = _interopRequireDefault(require("../base-layer"));
23
16
  var _layerTextLabel = require("../layer-text-label");
24
- 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; }
25
- 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; }
26
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
27
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
28
- function _superPropGet(t, e, o, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; } // Copyright (c) 2022 Uber Technologies, Inc.
17
+ // Copyright (c) 2022 Uber Technologies, Inc.
29
18
  //
30
19
  // Permission is hereby granted, free of charge, to any person obtaining a copy
31
20
  // of this software and associated documentation files (the "Software"), to deal
@@ -44,29 +33,28 @@ function _superPropGet(t, e, o, r) { var p = (0, _get2["default"])((0, _getProto
44
33
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
45
34
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
46
35
  // THE SOFTWARE.
47
- var brushingExtension = new _extensions.BrushingExtension();
48
- var SVG_ICON_URL = exports.SVG_ICON_URL = "".concat(_defaultSettings.CLOUDFRONT, "/icons/svg-icons.json");
49
- var iconPosAccessor = exports.iconPosAccessor = function iconPosAccessor(_ref) {
50
- var lat = _ref.lat,
51
- lng = _ref.lng,
52
- altitude = _ref.altitude;
53
- return function (dc) {
54
- return function (d) {
55
- return [dc.valueAt(d.index, lng.fieldIdx), dc.valueAt(d.index, lat.fieldIdx), (altitude === null || altitude === void 0 ? void 0 : altitude.fieldIdx) > -1 ? dc.valueAt(d.index, altitude.fieldIdx) : 0];
56
- };
57
- };
36
+
37
+ const brushingExtension = new _extensions.BrushingExtension();
38
+ const SVG_ICON_URL = exports.SVG_ICON_URL = `${_defaultSettings.CLOUDFRONT}/icons/svg-icons.json`;
39
+ const iconPosAccessor = _ref => {
40
+ let {
41
+ lat,
42
+ lng,
43
+ altitude
44
+ } = _ref;
45
+ return dc => d => [dc.valueAt(d.index, lng.fieldIdx), dc.valueAt(d.index, lat.fieldIdx), (altitude === null || altitude === void 0 ? void 0 : altitude.fieldIdx) > -1 ? dc.valueAt(d.index, altitude.fieldIdx) : 0];
58
46
  };
59
- var iconAccessor = exports.iconAccessor = function iconAccessor(_ref2) {
60
- var icon = _ref2.icon;
61
- return function (dc) {
62
- return function (d) {
63
- return dc.valueAt(d.index, icon.fieldIdx);
64
- };
65
- };
47
+ exports.iconPosAccessor = iconPosAccessor;
48
+ const iconAccessor = _ref2 => {
49
+ let {
50
+ icon
51
+ } = _ref2;
52
+ return dc => d => dc.valueAt(d.index, icon.fieldIdx);
66
53
  };
67
- var iconRequiredColumns = exports.iconRequiredColumns = ['lat', 'lng', 'icon'];
68
- var iconOptionalColumns = exports.iconOptionalColumns = ['altitude'];
69
- var pointVisConfigs = exports.pointVisConfigs = {
54
+ exports.iconAccessor = iconAccessor;
55
+ const iconRequiredColumns = exports.iconRequiredColumns = ['lat', 'lng', 'icon'];
56
+ const iconOptionalColumns = exports.iconOptionalColumns = ['altitude'];
57
+ const pointVisConfigs = exports.pointVisConfigs = {
70
58
  radius: 'radius',
71
59
  fixedRadius: 'fixedRadius',
72
60
  opacity: 'opacity',
@@ -75,292 +63,275 @@ var pointVisConfigs = exports.pointVisConfigs = {
75
63
  };
76
64
  function flatterIconPositions(icon) {
77
65
  // had to flip y, since @luma modal has changed
78
- return icon.mesh.cells.reduce(function (prev, cell) {
79
- cell.forEach(function (p) {
80
- prev.push.apply(prev, [icon.mesh.positions[p][0], -icon.mesh.positions[p][1], icon.mesh.positions[p][2]]);
66
+ return icon.mesh.cells.reduce((prev, cell) => {
67
+ cell.forEach(p => {
68
+ prev.push(...[icon.mesh.positions[p][0], -icon.mesh.positions[p][1], icon.mesh.positions[p][2]]);
81
69
  });
82
70
  return prev;
83
71
  }, []);
84
72
  }
85
- var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
86
- function IconLayer() {
87
- var _this;
88
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
89
- (0, _classCallCheck2["default"])(this, IconLayer);
90
- _this = _callSuper(this, IconLayer, [props]);
91
- _this.registerVisConfig(pointVisConfigs);
92
- _this.getPositionAccessor = function (dataContainer) {
93
- return iconPosAccessor(_this.config.columns)(dataContainer);
94
- };
95
- _this.getIconAccessor = function (dataContainer) {
96
- return iconAccessor(_this.config.columns)(dataContainer);
97
- };
73
+ class IconLayer extends _baseLayer.default {
74
+ constructor() {
75
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
76
+ super(props);
77
+ (0, _defineProperty2.default)(this, "getIconAccessor", void 0);
78
+ (0, _defineProperty2.default)(this, "_layerInfoModal", void 0);
79
+ (0, _defineProperty2.default)(this, "iconGeometry", void 0);
80
+ this.registerVisConfig(pointVisConfigs);
81
+ this.getPositionAccessor = dataContainer => iconPosAccessor(this.config.columns)(dataContainer);
82
+ this.getIconAccessor = dataContainer => iconAccessor(this.config.columns)(dataContainer);
98
83
 
99
84
  // prepare layer info modal
100
- _this._layerInfoModal = (0, _iconInfoModal["default"])();
101
- _this.iconGeometry = props.iconGeometry || null;
102
- _this.getSvgIcons();
103
- return _this;
85
+ this._layerInfoModal = (0, _iconInfoModal.default)();
86
+ this.iconGeometry = props.iconGeometry || null;
87
+ this.getSvgIcons();
104
88
  }
105
- (0, _inherits2["default"])(IconLayer, _Layer);
106
- return (0, _createClass2["default"])(IconLayer, [{
107
- key: "type",
108
- get: function get() {
109
- return 'icon';
110
- }
111
- }, {
112
- key: "requiredLayerColumns",
113
- get: function get() {
114
- return iconRequiredColumns;
115
- }
116
- }, {
117
- key: "optionalColumns",
118
- get: function get() {
119
- return iconOptionalColumns;
120
- }
121
- }, {
122
- key: "columnPairs",
123
- get: function get() {
124
- return this.defaultPointColumnPairs;
89
+ get type() {
90
+ return 'icon';
91
+ }
92
+ get requiredLayerColumns() {
93
+ return iconRequiredColumns;
94
+ }
95
+ get optionalColumns() {
96
+ return iconOptionalColumns;
97
+ }
98
+ get columnPairs() {
99
+ return this.defaultPointColumnPairs;
100
+ }
101
+ get layerIcon() {
102
+ return _iconLayerIcon.default;
103
+ }
104
+ get visualChannels() {
105
+ return {
106
+ color: {
107
+ ...super.visualChannels.color,
108
+ accessor: 'getFillColor',
109
+ defaultValue: config => config.color
110
+ },
111
+ size: {
112
+ ...super.visualChannels.size,
113
+ property: 'radius',
114
+ range: 'radiusRange',
115
+ channelScaleType: 'radius',
116
+ accessor: 'getRadius',
117
+ defaultValue: 1
118
+ }
119
+ };
120
+ }
121
+ get layerInfoModal() {
122
+ return {
123
+ id: 'iconInfo',
124
+ template: this._layerInfoModal,
125
+ modalProps: {
126
+ title: 'modal.iconInfo.title'
127
+ }
128
+ };
129
+ }
130
+ getSvgIcons() {
131
+ var _this = this;
132
+ const fetchConfig = {
133
+ method: 'GET',
134
+ mode: 'cors',
135
+ cache: 'no-cache'
136
+ };
137
+ if (_window.default.fetch) {
138
+ _window.default.fetch(SVG_ICON_URL, fetchConfig).then(response => response.json()).then(function () {
139
+ let parsed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
140
+ const {
141
+ svgIcons = []
142
+ } = parsed;
143
+ _this.iconGeometry = svgIcons.reduce((accu, curr) => ({
144
+ ...accu,
145
+ [curr.id]: flatterIconPositions(curr)
146
+ }), {});
147
+ _this._layerInfoModal = (0, _iconInfoModal.default)(svgIcons);
148
+ });
125
149
  }
126
- }, {
127
- key: "layerIcon",
128
- get: function get() {
129
- return _iconLayerIcon["default"];
150
+ }
151
+ static findDefaultLayerProps(_ref3) {
152
+ let {
153
+ fieldPairs = [],
154
+ fields = []
155
+ } = _ref3;
156
+ const notFound = {
157
+ props: []
158
+ };
159
+ if (!fieldPairs.length || !fields.length) {
160
+ return notFound;
130
161
  }
131
- }, {
132
- key: "visualChannels",
133
- get: function get() {
134
- return {
135
- color: _objectSpread(_objectSpread({}, _superPropGet(IconLayer, "visualChannels", this, 1).color), {}, {
136
- accessor: 'getFillColor',
137
- defaultValue: function defaultValue(config) {
138
- return config.color;
139
- }
140
- }),
141
- size: _objectSpread(_objectSpread({}, _superPropGet(IconLayer, "visualChannels", this, 1).size), {}, {
142
- property: 'radius',
143
- range: 'radiusRange',
144
- channelScaleType: 'radius',
145
- accessor: 'getRadius',
146
- defaultValue: 1
147
- })
148
- };
162
+ const iconFields = fields.filter(_ref4 => {
163
+ let {
164
+ name
165
+ } = _ref4;
166
+ return name.replace(/[_,.]+/g, ' ').trim().split(' ').some(seg => _defaultSettings.ICON_FIELDS.icon.some(t => t.includes(seg)));
167
+ });
168
+ if (!iconFields.length) {
169
+ return notFound;
149
170
  }
150
- }, {
151
- key: "layerInfoModal",
152
- get: function get() {
153
- return {
154
- id: 'iconInfo',
155
- template: this._layerInfoModal,
156
- modalProps: {
157
- title: 'modal.iconInfo.title'
171
+
172
+ // create icon layers for first point pair
173
+ const ptPair = fieldPairs[0];
174
+ const props = iconFields.map(iconField => ({
175
+ label: iconField.name.replace(/[_,.]+/g, ' ').trim(),
176
+ columns: {
177
+ lat: ptPair.pair.lat,
178
+ lng: ptPair.pair.lng,
179
+ icon: {
180
+ value: iconField.name,
181
+ fieldIdx: iconField.fieldIdx
158
182
  }
183
+ },
184
+ isVisible: true
185
+ }));
186
+ return {
187
+ props
188
+ };
189
+ }
190
+ calculateDataAttribute(_ref5, getPosition) {
191
+ let {
192
+ dataContainer,
193
+ filteredIndex
194
+ } = _ref5;
195
+ const getIcon = this.getIconAccessor(dataContainer);
196
+ const data = [];
197
+ for (let i = 0; i < filteredIndex.length; i++) {
198
+ const index = filteredIndex[i];
199
+ const rowIndex = {
200
+ index
159
201
  };
160
- }
161
- }, {
162
- key: "getSvgIcons",
163
- value: function getSvgIcons() {
164
- var _this2 = this;
165
- var fetchConfig = {
166
- method: 'GET',
167
- mode: 'cors',
168
- cache: 'no-cache'
169
- };
170
- if (_window["default"].fetch) {
171
- _window["default"].fetch(SVG_ICON_URL, fetchConfig).then(function (response) {
172
- return response.json();
173
- }).then(function () {
174
- var parsed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
175
- var _parsed$svgIcons = parsed.svgIcons,
176
- svgIcons = _parsed$svgIcons === void 0 ? [] : _parsed$svgIcons;
177
- _this2.iconGeometry = svgIcons.reduce(function (accu, curr) {
178
- return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, curr.id, flatterIconPositions(curr)));
179
- }, {});
180
- _this2._layerInfoModal = (0, _iconInfoModal["default"])(svgIcons);
202
+ const pos = getPosition(rowIndex);
203
+ const icon = getIcon(rowIndex);
204
+
205
+ // if doesn't have point lat or lng, do not add the point
206
+ // deck.gl can't handle position = null
207
+ if (pos.every(Number.isFinite) && typeof icon === 'string') {
208
+ data.push({
209
+ index,
210
+ icon
181
211
  });
182
212
  }
183
213
  }
184
- }, {
185
- key: "calculateDataAttribute",
186
- value: function calculateDataAttribute(_ref3, getPosition) {
187
- var dataContainer = _ref3.dataContainer,
188
- filteredIndex = _ref3.filteredIndex;
189
- var getIcon = this.getIconAccessor(dataContainer);
190
- var data = [];
191
- for (var i = 0; i < filteredIndex.length; i++) {
192
- var index = filteredIndex[i];
193
- var rowIndex = {
194
- index: index
195
- };
196
- var pos = getPosition(rowIndex);
197
- var icon = getIcon(rowIndex);
198
-
199
- // if doesn't have point lat or lng, do not add the point
200
- // deck.gl can't handle position = null
201
- if (pos.every(Number.isFinite) && typeof icon === 'string') {
202
- data.push({
203
- index: index,
204
- icon: icon
205
- });
206
- }
207
- }
208
- return data;
214
+ return data;
215
+ }
216
+ formatLayerData(datasets, oldLayerData) {
217
+ if (this.config.dataId === null) {
218
+ return {};
209
219
  }
210
- }, {
211
- key: "formatLayerData",
212
- value: function formatLayerData(datasets, oldLayerData) {
213
- if (this.config.dataId === null) {
214
- return {};
215
- }
216
- var textLabel = this.config.textLabel;
217
- var _datasets$this$config = datasets[this.config.dataId],
218
- gpuFilter = _datasets$this$config.gpuFilter,
219
- dataContainer = _datasets$this$config.dataContainer;
220
- var getPosition = this.getPositionAccessor(dataContainer);
221
- var _this$updateData = this.updateData(datasets, oldLayerData),
222
- data = _this$updateData.data,
223
- triggerChanged = _this$updateData.triggerChanged;
220
+ const {
221
+ textLabel
222
+ } = this.config;
223
+ const {
224
+ gpuFilter,
225
+ dataContainer
226
+ } = datasets[this.config.dataId];
227
+ const getPosition = this.getPositionAccessor(dataContainer);
228
+ const {
229
+ data,
230
+ triggerChanged
231
+ } = this.updateData(datasets, oldLayerData);
224
232
 
225
- // get all distinct characters in the text labels
226
- var textLabels = (0, _layerTextLabel.formatTextLabelData)({
227
- textLabel: textLabel,
228
- // @ts-expect-error
229
- triggerChanged: triggerChanged,
230
- oldLayerData: oldLayerData,
231
- data: data,
232
- dataContainer: dataContainer
233
- });
234
- var accessors = this.getAttributeAccessors({
235
- dataContainer: dataContainer
236
- });
237
- return _objectSpread({
238
- data: data,
239
- getPosition: getPosition,
240
- getFilterValue: gpuFilter.filterValueAccessor(dataContainer)(),
241
- textLabels: textLabels
242
- }, accessors);
243
- }
244
- }, {
245
- key: "updateLayerMeta",
246
- value: function updateLayerMeta(dataContainer, getPosition) {
247
- var bounds = this.getPointsBounds(dataContainer, getPosition);
248
- this.updateMeta({
249
- bounds: bounds
250
- });
251
- }
252
- }, {
253
- key: "renderLayer",
254
- value: function renderLayer(opts) {
255
- var _this$config$columns$,
256
- _this3 = this;
257
- var data = opts.data,
258
- gpuFilter = opts.gpuFilter,
259
- objectHovered = opts.objectHovered,
260
- interactionConfig = opts.interactionConfig;
261
- var radiusScale = this.getRadiusScale();
262
- var layerProps = {
263
- radiusScale: radiusScale,
264
- radiusUnits: 'pixels',
265
- radiusMaxPixels: 500
266
- };
267
- var updateTriggers = _objectSpread({
268
- getPosition: this.config.columns,
269
- getFilterValue: gpuFilter.filterValueUpdateTriggers
270
- }, this.getVisualChannelUpdateTriggers());
271
- var defaultLayerProps = this.getDefaultDeckLayerProps(opts);
272
- var brushingProps = this.getBrushingExtensionProps(interactionConfig);
273
- var getPixelOffset = (0, _layerTextLabel.getTextOffsetByRadius)(radiusScale, data.getRadius);
274
- var extensions = [].concat((0, _toConsumableArray2["default"])(defaultLayerProps.extensions), [brushingExtension]);
233
+ // get all distinct characters in the text labels
234
+ const textLabels = (0, _layerTextLabel.formatTextLabelData)({
235
+ textLabel,
236
+ // @ts-expect-error
237
+ triggerChanged,
238
+ oldLayerData,
239
+ data,
240
+ dataContainer
241
+ });
242
+ const accessors = this.getAttributeAccessors({
243
+ dataContainer
244
+ });
245
+ return {
246
+ data,
247
+ getPosition,
248
+ getFilterValue: gpuFilter.filterValueAccessor(dataContainer)(),
249
+ textLabels,
250
+ ...accessors
251
+ };
252
+ }
253
+ updateLayerMeta(dataContainer, getPosition) {
254
+ const bounds = this.getPointsBounds(dataContainer, getPosition);
255
+ this.updateMeta({
256
+ bounds
257
+ });
258
+ }
259
+ renderLayer(opts) {
260
+ var _this$config$columns$;
261
+ const {
262
+ data,
263
+ gpuFilter,
264
+ objectHovered,
265
+ interactionConfig
266
+ } = opts;
267
+ const radiusScale = this.getRadiusScale();
268
+ const layerProps = {
269
+ radiusScale,
270
+ radiusUnits: 'pixels',
271
+ radiusMaxPixels: 500
272
+ };
273
+ const updateTriggers = {
274
+ getPosition: this.config.columns,
275
+ getFilterValue: gpuFilter.filterValueUpdateTriggers,
276
+ ...this.getVisualChannelUpdateTriggers()
277
+ };
278
+ const defaultLayerProps = this.getDefaultDeckLayerProps(opts);
279
+ const brushingProps = this.getBrushingExtensionProps(interactionConfig);
280
+ const getPixelOffset = (0, _layerTextLabel.getTextOffsetByRadius)(radiusScale, data.getRadius);
281
+ const extensions = [...defaultLayerProps.extensions, brushingExtension];
275
282
 
276
- // shared Props between layer and label layer
277
- var sharedProps = _objectSpread({
278
- getFilterValue: data.getFilterValue,
279
- extensions: extensions,
280
- filterRange: defaultLayerProps.filterRange
281
- }, brushingProps);
282
- var labelLayers = (0, _toConsumableArray2["default"])(this.renderTextLabelLayer({
283
- getPosition: data.getPosition,
284
- sharedProps: sharedProps,
285
- // @ts-expect-error
286
- getPixelOffset: getPixelOffset,
287
- updateTriggers: updateTriggers
288
- }, opts));
289
- var hoveredObject = this.hasHoveredObject(objectHovered);
290
- var parameters = {
291
- // icons will be flat on the map when the altitude column is not used
292
- depthTest: ((_this$config$columns$ = this.config.columns.altitude) === null || _this$config$columns$ === void 0 ? void 0 : _this$config$columns$.fieldIdx) > -1
293
- };
294
- return !this.iconGeometry ? [] : [
283
+ // shared Props between layer and label layer
284
+ const sharedProps = {
285
+ getFilterValue: data.getFilterValue,
286
+ extensions,
287
+ filterRange: defaultLayerProps.filterRange,
288
+ ...brushingProps
289
+ };
290
+ const labelLayers = [...this.renderTextLabelLayer({
291
+ getPosition: data.getPosition,
292
+ sharedProps,
295
293
  // @ts-expect-error
296
- new _svgIconLayer["default"](_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultLayerProps), brushingProps), layerProps), data), {}, {
297
- parameters: parameters,
298
- getIconGeometry: function getIconGeometry(id) {
299
- var _this3$iconGeometry;
300
- return (_this3$iconGeometry = _this3.iconGeometry) === null || _this3$iconGeometry === void 0 ? void 0 : _this3$iconGeometry[id];
301
- },
302
- // update triggers
303
- updateTriggers: updateTriggers,
304
- extensions: extensions
305
- }))].concat((0, _toConsumableArray2["default"])(hoveredObject ? [
306
- // @ts-expect-error SvgIconLayerProps needs getIcon Field
307
- new _svgIconLayer["default"](_objectSpread(_objectSpread(_objectSpread({}, this.getDefaultHoverLayerProps()), layerProps), {}, {
308
- data: [hoveredObject],
309
- parameters: parameters,
310
- getPosition: data.getPosition,
311
- getRadius: data.getRadius,
312
- getFillColor: this.config.highlightColor,
313
- getIconGeometry: function getIconGeometry(id) {
314
- var _this3$iconGeometry2;
315
- return (_this3$iconGeometry2 = _this3.iconGeometry) === null || _this3$iconGeometry2 === void 0 ? void 0 : _this3$iconGeometry2[id];
316
- }
317
- }))] : []), (0, _toConsumableArray2["default"])(labelLayers));
318
- }
319
- }], [{
320
- key: "findDefaultLayerProps",
321
- value: function findDefaultLayerProps(_ref4) {
322
- var _ref4$fieldPairs = _ref4.fieldPairs,
323
- fieldPairs = _ref4$fieldPairs === void 0 ? [] : _ref4$fieldPairs,
324
- _ref4$fields = _ref4.fields,
325
- fields = _ref4$fields === void 0 ? [] : _ref4$fields;
326
- var notFound = {
327
- props: []
328
- };
329
- if (!fieldPairs.length || !fields.length) {
330
- return notFound;
331
- }
332
- var iconFields = fields.filter(function (_ref5) {
333
- var name = _ref5.name;
334
- return name.replace(/[_,.]+/g, ' ').trim().split(' ').some(function (seg) {
335
- return _defaultSettings.ICON_FIELDS.icon.some(function (t) {
336
- return t.includes(seg);
337
- });
338
- });
339
- });
340
- if (!iconFields.length) {
341
- return notFound;
294
+ getPixelOffset,
295
+ updateTriggers
296
+ }, opts)];
297
+ const hoveredObject = this.hasHoveredObject(objectHovered);
298
+ const parameters = {
299
+ // icons will be flat on the map when the altitude column is not used
300
+ depthTest: ((_this$config$columns$ = this.config.columns.altitude) === null || _this$config$columns$ === void 0 ? void 0 : _this$config$columns$.fieldIdx) > -1
301
+ };
302
+ return !this.iconGeometry ? [] : [
303
+ // @ts-expect-error
304
+ new _svgIconLayer.default({
305
+ ...defaultLayerProps,
306
+ ...brushingProps,
307
+ ...layerProps,
308
+ ...data,
309
+ parameters,
310
+ getIconGeometry: id => {
311
+ var _this$iconGeometry;
312
+ return (_this$iconGeometry = this.iconGeometry) === null || _this$iconGeometry === void 0 ? void 0 : _this$iconGeometry[id];
313
+ },
314
+ // update triggers
315
+ updateTriggers,
316
+ extensions
317
+ }), ...(hoveredObject ? [
318
+ // @ts-expect-error SvgIconLayerProps needs getIcon Field
319
+ new _svgIconLayer.default({
320
+ ...this.getDefaultHoverLayerProps(),
321
+ ...layerProps,
322
+ data: [hoveredObject],
323
+ parameters,
324
+ getPosition: data.getPosition,
325
+ getRadius: data.getRadius,
326
+ getFillColor: this.config.highlightColor,
327
+ getIconGeometry: id => {
328
+ var _this$iconGeometry2;
329
+ return (_this$iconGeometry2 = this.iconGeometry) === null || _this$iconGeometry2 === void 0 ? void 0 : _this$iconGeometry2[id];
342
330
  }
343
-
344
- // create icon layers for first point pair
345
- var ptPair = fieldPairs[0];
346
- var props = iconFields.map(function (iconField) {
347
- return {
348
- label: iconField.name.replace(/[_,.]+/g, ' ').trim(),
349
- columns: {
350
- lat: ptPair.pair.lat,
351
- lng: ptPair.pair.lng,
352
- icon: {
353
- value: iconField.name,
354
- fieldIdx: iconField.fieldIdx
355
- }
356
- },
357
- isVisible: true
358
- };
359
- });
360
- return {
361
- props: props
362
- };
363
- }
364
- }]);
365
- }(_baseLayer["default"]);
366
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIl9zdmdJY29uTGF5ZXIiLCJfaWNvbkxheWVySWNvbiIsIl9kZWZhdWx0U2V0dGluZ3MiLCJfaWNvbkluZm9Nb2RhbCIsIl9iYXNlTGF5ZXIiLCJfbGF5ZXJUZXh0TGFiZWwiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJicnVzaGluZ0V4dGVuc2lvbiIsIkJydXNoaW5nRXh0ZW5zaW9uIiwiU1ZHX0lDT05fVVJMIiwiZXhwb3J0cyIsImNvbmNhdCIsIkNMT1VERlJPTlQiLCJpY29uUG9zQWNjZXNzb3IiLCJfcmVmIiwibGF0IiwibG5nIiwiYWx0aXR1ZGUiLCJkYyIsImQiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJmaWVsZElkeCIsImljb25BY2Nlc3NvciIsIl9yZWYyIiwiaWNvbiIsImljb25SZXF1aXJlZENvbHVtbnMiLCJpY29uT3B0aW9uYWxDb2x1bW5zIiwicG9pbnRWaXNDb25maWdzIiwicmFkaXVzIiwiZml4ZWRSYWRpdXMiLCJvcGFjaXR5IiwiY29sb3JSYW5nZSIsInJhZGl1c1JhbmdlIiwiZmxhdHRlckljb25Qb3NpdGlvbnMiLCJtZXNoIiwiY2VsbHMiLCJyZWR1Y2UiLCJwcmV2IiwiY2VsbCIsInBvc2l0aW9ucyIsIkljb25MYXllciIsIl9MYXllciIsIl90aGlzIiwicHJvcHMiLCJ1bmRlZmluZWQiLCJfY2xhc3NDYWxsQ2hlY2syIiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJnZXRJY29uQWNjZXNzb3IiLCJfbGF5ZXJJbmZvTW9kYWwiLCJJY29uSW5mb01vZGFsRmFjdG9yeSIsImljb25HZW9tZXRyeSIsImdldFN2Z0ljb25zIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXQiLCJkZWZhdWx0UG9pbnRDb2x1bW5QYWlycyIsIkljb25MYXllckljb24iLCJjb2xvciIsImFjY2Vzc29yIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsInByb3BlcnR5IiwicmFuZ2UiLCJjaGFubmVsU2NhbGVUeXBlIiwiaWQiLCJ0ZW1wbGF0ZSIsIm1vZGFsUHJvcHMiLCJ0aXRsZSIsInZhbHVlIiwiX3RoaXMyIiwiZmV0Y2hDb25maWciLCJtZXRob2QiLCJtb2RlIiwiY2FjaGUiLCJ3aW5kb3ciLCJmZXRjaCIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJwYXJzZWQiLCJfcGFyc2VkJHN2Z0ljb25zIiwic3ZnSWNvbnMiLCJhY2N1IiwiY3VyciIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmMyIsImdldFBvc2l0aW9uIiwiZmlsdGVyZWRJbmRleCIsImdldEljb24iLCJkYXRhIiwiaSIsInJvd0luZGV4IiwicG9zIiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwidGV4dExhYmVsIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJ0cmlnZ2VyQ2hhbmdlZCIsInRleHRMYWJlbHMiLCJmb3JtYXRUZXh0TGFiZWxEYXRhIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiZ2V0RmlsdGVyVmFsdWUiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwidXBkYXRlTGF5ZXJNZXRhIiwiYm91bmRzIiwiZ2V0UG9pbnRzQm91bmRzIiwidXBkYXRlTWV0YSIsInJlbmRlckxheWVyIiwib3B0cyIsIl90aGlzJGNvbmZpZyRjb2x1bW5zJCIsIl90aGlzMyIsIm9iamVjdEhvdmVyZWQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsInJhZGl1c1NjYWxlIiwiZ2V0UmFkaXVzU2NhbGUiLCJsYXllclByb3BzIiwicmFkaXVzVW5pdHMiLCJyYWRpdXNNYXhQaXhlbHMiLCJ1cGRhdGVUcmlnZ2VycyIsImZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsImJydXNoaW5nUHJvcHMiLCJnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzIiwiZ2V0UGl4ZWxPZmZzZXQiLCJnZXRUZXh0T2Zmc2V0QnlSYWRpdXMiLCJnZXRSYWRpdXMiLCJleHRlbnNpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInNoYXJlZFByb3BzIiwiZmlsdGVyUmFuZ2UiLCJsYWJlbExheWVycyIsInJlbmRlclRleHRMYWJlbExheWVyIiwiaG92ZXJlZE9iamVjdCIsImhhc0hvdmVyZWRPYmplY3QiLCJwYXJhbWV0ZXJzIiwiZGVwdGhUZXN0IiwiU3ZnSWNvbkxheWVyIiwiZ2V0SWNvbkdlb21ldHJ5IiwiX3RoaXMzJGljb25HZW9tZXRyeSIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJnZXRGaWxsQ29sb3IiLCJoaWdobGlnaHRDb2xvciIsIl90aGlzMyRpY29uR2VvbWV0cnkyIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiX3JlZjQiLCJfcmVmNCRmaWVsZFBhaXJzIiwiZmllbGRQYWlycyIsIl9yZWY0JGZpZWxkcyIsImZpZWxkcyIsIm5vdEZvdW5kIiwiaWNvbkZpZWxkcyIsIl9yZWY1IiwibmFtZSIsInJlcGxhY2UiLCJ0cmltIiwic3BsaXQiLCJzb21lIiwic2VnIiwiSUNPTl9GSUVMRFMiLCJpbmNsdWRlcyIsInB0UGFpciIsIm1hcCIsImljb25GaWVsZCIsImxhYmVsIiwicGFpciIsImlzVmlzaWJsZSIsIkxheWVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xheWVycy9pY29uLWxheWVyL2ljb24tbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCB7QnJ1c2hpbmdFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuXG5pbXBvcnQgU3ZnSWNvbkxheWVyIGZyb20gJ2RlY2tnbC1sYXllcnMvc3ZnLWljb24tbGF5ZXIvc3ZnLWljb24tbGF5ZXInO1xuaW1wb3J0IEljb25MYXllckljb24gZnJvbSAnLi9pY29uLWxheWVyLWljb24nO1xuaW1wb3J0IHtJQ09OX0ZJRUxEUywgQ0xPVURGUk9OVH0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IEljb25JbmZvTW9kYWxGYWN0b3J5IGZyb20gJy4vaWNvbi1pbmZvLW1vZGFsJztcbmltcG9ydCBMYXllciwge0xheWVyQmFzZUNvbmZpZywgTGF5ZXJDb2x1bW59IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtnZXRUZXh0T2Zmc2V0QnlSYWRpdXMsIGZvcm1hdFRleHRMYWJlbERhdGF9IGZyb20gJy4uL2xheWVyLXRleHQtbGFiZWwnO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuLi8uLi91dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgVmlzQ29uZmlnQm9vbGVhbixcbiAgVmlzQ29uZmlnQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZVxufSBmcm9tICcuLi9sYXllci1mYWN0b3J5JztcbmltcG9ydCB7Q29sb3JSYW5nZX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5pbXBvcnQge01lcmdlfSBmcm9tICcuLi8uLi9yZWR1Y2Vycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEljb25MYXllckNvbHVtbnNDb25maWcgPSB7XG4gIGxhdDogTGF5ZXJDb2x1bW47XG4gIGxuZzogTGF5ZXJDb2x1bW47XG4gIGFsdGl0dWRlOiBMYXllckNvbHVtbjtcbiAgaWNvbjogTGF5ZXJDb2x1bW47XG59O1xuXG50eXBlIEljb25HZW9tZXRyeSA9IHt9IHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyVmlzQ29uZmlnU2V0dGluZ3MgPSB7XG4gIHJhZGl1czogVmlzQ29uZmlnTnVtYmVyO1xuICBmaXhlZFJhZGl1czogVmlzQ29uZmlnQm9vbGVhbjtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICBjb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICByYWRpdXNSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJWaXNDb25maWcgPSB7XG4gIHJhZGl1czogbnVtYmVyO1xuICBmaXhlZFJhZGl1czogYm9vbGVhbjtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBjb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICByYWRpdXNSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbn07XG5cbmV4cG9ydCB0eXBlIEljb25MYXllckNvbmZpZyA9IE1lcmdlPFxuICBMYXllckJhc2VDb25maWcsXG4gIHtjb2x1bW5zOiBJY29uTGF5ZXJDb2x1bW5zQ29uZmlnOyB2aXNDb25maWc6IEljb25MYXllclZpc0NvbmZpZ31cbj47XG5cbmV4cG9ydCB0eXBlIEljb25MYXllckRhdGEgPSB7aW5kZXg6IG51bWJlcjsgaWNvbjogc3RyaW5nfTtcblxuY29uc3QgYnJ1c2hpbmdFeHRlbnNpb24gPSBuZXcgQnJ1c2hpbmdFeHRlbnNpb24oKTtcblxuZXhwb3J0IGNvbnN0IFNWR19JQ09OX1VSTCA9IGAke0NMT1VERlJPTlR9L2ljb25zL3N2Zy1pY29ucy5qc29uYDtcblxuZXhwb3J0IGNvbnN0IGljb25Qb3NBY2Nlc3NvciA9ICh7bGF0LCBsbmcsIGFsdGl0dWRlfTogSWNvbkxheWVyQ29sdW1uc0NvbmZpZykgPT4gKFxuICBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKSA9PiBkID0+IFtcbiAgZGMudmFsdWVBdChkLmluZGV4LCBsbmcuZmllbGRJZHgpLFxuICBkYy52YWx1ZUF0KGQuaW5kZXgsIGxhdC5maWVsZElkeCksXG4gIGFsdGl0dWRlPy5maWVsZElkeCA+IC0xID8gZGMudmFsdWVBdChkLmluZGV4LCBhbHRpdHVkZS5maWVsZElkeCkgOiAwXG5dO1xuXG5leHBvcnQgY29uc3QgaWNvbkFjY2Vzc29yID0gKHtpY29ufTogSWNvbkxheWVyQ29sdW1uc0NvbmZpZykgPT4gKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBkID0+XG4gIGRjLnZhbHVlQXQoZC5pbmRleCwgaWNvbi5maWVsZElkeCk7XG5cbmV4cG9ydCBjb25zdCBpY29uUmVxdWlyZWRDb2x1bW5zOiBbJ2xhdCcsICdsbmcnLCAnaWNvbiddID0gWydsYXQnLCAnbG5nJywgJ2ljb24nXTtcbmV4cG9ydCBjb25zdCBpY29uT3B0aW9uYWxDb2x1bW5zOiBbJ2FsdGl0dWRlJ10gPSBbJ2FsdGl0dWRlJ107XG5cbmV4cG9ydCBjb25zdCBwb2ludFZpc0NvbmZpZ3M6IHtcbiAgcmFkaXVzOiAncmFkaXVzJztcbiAgZml4ZWRSYWRpdXM6ICdmaXhlZFJhZGl1cyc7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJztcbn0gPSB7XG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIGZpeGVkUmFkaXVzOiAnZml4ZWRSYWRpdXMnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZSdcbn07XG5cbmZ1bmN0aW9uIGZsYXR0ZXJJY29uUG9zaXRpb25zKGljb24pIHtcbiAgLy8gaGFkIHRvIGZsaXAgeSwgc2luY2UgQGx1bWEgbW9kYWwgaGFzIGNoYW5nZWRcbiAgcmV0dXJuIGljb24ubWVzaC5jZWxscy5yZWR1Y2UoKHByZXYsIGNlbGwpID0+IHtcbiAgICBjZWxsLmZvckVhY2gocCA9PiB7XG4gICAgICBwcmV2LnB1c2goXG4gICAgICAgIC4uLltpY29uLm1lc2gucG9zaXRpb25zW3BdWzBdLCAtaWNvbi5tZXNoLnBvc2l0aW9uc1twXVsxXSwgaWNvbi5tZXNoLnBvc2l0aW9uc1twXVsyXV1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWNvbkxheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBnZXRJY29uQWNjZXNzb3I6IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiAoZDogYW55KSA9PiBhbnk7XG4gIF9sYXllckluZm9Nb2RhbDogKCkgPT4gSlNYLkVsZW1lbnQ7XG4gIGljb25HZW9tZXRyeTogSWNvbkdlb21ldHJ5O1xuXG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IEljb25MYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIGNvbmZpZzogSWNvbkxheWVyQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3BzOiB7XG4gICAgICBpZD86IHN0cmluZztcbiAgICAgIGljb25HZW9tZXRyeT86IEljb25HZW9tZXRyeTtcbiAgICB9ICYgUGFydGlhbDxMYXllckJhc2VDb25maWc+ID0ge31cbiAgKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhwb2ludFZpc0NvbmZpZ3MpO1xuICAgIHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvciA9IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PlxuICAgICAgaWNvblBvc0FjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuICAgIHRoaXMuZ2V0SWNvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PiBpY29uQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG5cbiAgICAvLyBwcmVwYXJlIGxheWVyIGluZm8gbW9kYWxcbiAgICB0aGlzLl9sYXllckluZm9Nb2RhbCA9IEljb25JbmZvTW9kYWxGYWN0b3J5KCk7XG4gICAgdGhpcy5pY29uR2VvbWV0cnkgPSBwcm9wcy5pY29uR2VvbWV0cnkgfHwgbnVsbDtcbiAgICB0aGlzLmdldFN2Z0ljb25zKCk7XG4gIH1cblxuICBnZXQgdHlwZSgpOiAnaWNvbicge1xuICAgIHJldHVybiAnaWNvbic7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGljb25SZXF1aXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb2x1bW5zKCkge1xuICAgIHJldHVybiBpY29uT3B0aW9uYWxDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb2ludENvbHVtblBhaXJzO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gSWNvbkxheWVySWNvbjtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgLi4uc3VwZXIudmlzdWFsQ2hhbm5lbHMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsbENvbG9yJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscy5zaXplLFxuICAgICAgICBwcm9wZXJ0eTogJ3JhZGl1cycsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiAncmFkaXVzJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRSYWRpdXMnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDFcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IGxheWVySW5mb01vZGFsKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogJ2ljb25JbmZvJyxcbiAgICAgIHRlbXBsYXRlOiB0aGlzLl9sYXllckluZm9Nb2RhbCxcbiAgICAgIG1vZGFsUHJvcHM6IHtcbiAgICAgICAgdGl0bGU6ICdtb2RhbC5pY29uSW5mby50aXRsZSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0U3ZnSWNvbnMoKSB7XG4gICAgY29uc3QgZmV0Y2hDb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgbW9kZTogJ2NvcnMnLFxuICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICB9O1xuXG4gICAgaWYgKHdpbmRvdy5mZXRjaCkge1xuICAgICAgd2luZG93XG4gICAgICAgIC5mZXRjaChTVkdfSUNPTl9VUkwsIGZldGNoQ29uZmlnKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAgIC50aGVuKChwYXJzZWQ6IHtzdmdJY29ucz86IGFueVtdfSA9IHt9KSA9PiB7XG4gICAgICAgICAgY29uc3Qge3N2Z0ljb25zID0gW119ID0gcGFyc2VkO1xuICAgICAgICAgIHRoaXMuaWNvbkdlb21ldHJ5ID0gc3ZnSWNvbnMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIFtjdXJyLmlkXTogZmxhdHRlckljb25Qb3NpdGlvbnMoY3VycilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5fbGF5ZXJJbmZvTW9kYWwgPSBJY29uSW5mb01vZGFsRmFjdG9yeShzdmdJY29ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoe2ZpZWxkUGFpcnMgPSBbXSwgZmllbGRzID0gW119OiBLZXBsZXJUYWJsZSkge1xuICAgIGNvbnN0IG5vdEZvdW5kID0ge3Byb3BzOiBbXX07XG4gICAgaWYgKCFmaWVsZFBhaXJzLmxlbmd0aCB8fCAhZmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5vdEZvdW5kO1xuICAgIH1cblxuICAgIGNvbnN0IGljb25GaWVsZHMgPSBmaWVsZHMuZmlsdGVyKCh7bmFtZX0pID0+XG4gICAgICBuYW1lXG4gICAgICAgIC5yZXBsYWNlKC9bXywuXSsvZywgJyAnKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgIC5zb21lKHNlZyA9PiBJQ09OX0ZJRUxEUy5pY29uLnNvbWUodCA9PiB0LmluY2x1ZGVzKHNlZykpKVxuICAgICk7XG5cbiAgICBpZiAoIWljb25GaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbm90Rm91bmQ7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGljb24gbGF5ZXJzIGZvciBmaXJzdCBwb2ludCBwYWlyXG4gICAgY29uc3QgcHRQYWlyID0gZmllbGRQYWlyc1swXTtcblxuICAgIGNvbnN0IHByb3BzID0gaWNvbkZpZWxkcy5tYXAoaWNvbkZpZWxkID0+ICh7XG4gICAgICBsYWJlbDogaWNvbkZpZWxkLm5hbWUucmVwbGFjZSgvW18sLl0rL2csICcgJykudHJpbSgpLFxuICAgICAgY29sdW1uczoge1xuICAgICAgICBsYXQ6IHB0UGFpci5wYWlyLmxhdCxcbiAgICAgICAgbG5nOiBwdFBhaXIucGFpci5sbmcsXG4gICAgICAgIGljb246IHtcbiAgICAgICAgICB2YWx1ZTogaWNvbkZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGljb25GaWVsZC5maWVsZElkeFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtwcm9wc307XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fTogS2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgY29uc3QgZ2V0SWNvbiA9IHRoaXMuZ2V0SWNvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIGNvbnN0IGRhdGE6IEljb25MYXllckRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZEluZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGZpbHRlcmVkSW5kZXhbaV07XG4gICAgICBjb25zdCByb3dJbmRleCA9IHtpbmRleH07XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihyb3dJbmRleCk7XG4gICAgICBjb25zdCBpY29uID0gZ2V0SWNvbihyb3dJbmRleCk7XG5cbiAgICAgIC8vIGlmIGRvZXNuJ3QgaGF2ZSBwb2ludCBsYXQgb3IgbG5nLCBkbyBub3QgYWRkIHRoZSBwb2ludFxuICAgICAgLy8gZGVjay5nbCBjYW4ndCBoYW5kbGUgcG9zaXRpb24gPSBudWxsXG4gICAgICBpZiAocG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiYgdHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgaWNvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGFJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7dGV4dExhYmVsfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtncHVGaWx0ZXIsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXTtcblxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gICAgY29uc3Qge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIC8vIGdldCBhbGwgZGlzdGluY3QgY2hhcmFjdGVycyBpbiB0aGUgdGV4dCBsYWJlbHNcbiAgICBjb25zdCB0ZXh0TGFiZWxzID0gZm9ybWF0VGV4dExhYmVsRGF0YSh7XG4gICAgICB0ZXh0TGFiZWwsXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB0cmlnZ2VyQ2hhbmdlZCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhQ29udGFpbmVyXG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUNvbnRhaW5lcn0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhQ29udGFpbmVyKSgpLFxuICAgICAgdGV4dExhYmVscyxcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH07XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbik7XG4gICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHN9KTtcbiAgfVxuXG4gIHJlbmRlckxheWVyKG9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ3B1RmlsdGVyLCBvYmplY3RIb3ZlcmVkLCBpbnRlcmFjdGlvbkNvbmZpZ30gPSBvcHRzO1xuXG4gICAgY29uc3QgcmFkaXVzU2NhbGUgPSB0aGlzLmdldFJhZGl1c1NjYWxlKCk7XG4gICAgY29uc3QgbGF5ZXJQcm9wcyA9IHtyYWRpdXNTY2FsZSwgcmFkaXVzVW5pdHM6ICdwaXhlbHMnLCByYWRpdXNNYXhQaXhlbHM6IDUwMH07XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIGdldFBvc2l0aW9uOiB0aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKVxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IGJydXNoaW5nUHJvcHMgPSB0aGlzLmdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcpO1xuICAgIGNvbnN0IGdldFBpeGVsT2Zmc2V0ID0gZ2V0VGV4dE9mZnNldEJ5UmFkaXVzKHJhZGl1c1NjYWxlLCBkYXRhLmdldFJhZGl1cyk7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsuLi5kZWZhdWx0TGF5ZXJQcm9wcy5leHRlbnNpb25zLCBicnVzaGluZ0V4dGVuc2lvbl07XG5cbiAgICAvLyBzaGFyZWQgUHJvcHMgYmV0d2VlbiBsYXllciBhbmQgbGFiZWwgbGF5ZXJcbiAgICBjb25zdCBzaGFyZWRQcm9wcyA9IHtcbiAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgIGZpbHRlclJhbmdlOiBkZWZhdWx0TGF5ZXJQcm9wcy5maWx0ZXJSYW5nZSxcbiAgICAgIC4uLmJydXNoaW5nUHJvcHNcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWxMYXllcnMgPSBbXG4gICAgICAuLi50aGlzLnJlbmRlclRleHRMYWJlbExheWVyKFxuICAgICAgICB7XG4gICAgICAgICAgZ2V0UG9zaXRpb246IGRhdGEuZ2V0UG9zaXRpb24sXG4gICAgICAgICAgc2hhcmVkUHJvcHMsXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIGdldFBpeGVsT2Zmc2V0LFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIH0sXG4gICAgICAgIG9wdHNcbiAgICAgIClcbiAgICBdO1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgLy8gaWNvbnMgd2lsbCBiZSBmbGF0IG9uIHRoZSBtYXAgd2hlbiB0aGUgYWx0aXR1ZGUgY29sdW1uIGlzIG5vdCB1c2VkXG4gICAgICBkZXB0aFRlc3Q6IHRoaXMuY29uZmlnLmNvbHVtbnMuYWx0aXR1ZGU/LmZpZWxkSWR4ID4gLTFcbiAgICB9O1xuXG4gICAgcmV0dXJuICF0aGlzLmljb25HZW9tZXRyeVxuICAgICAgPyBbXVxuICAgICAgOiBbXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIG5ldyBTdmdJY29uTGF5ZXIoe1xuICAgICAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICAgICAgICAuLi5icnVzaGluZ1Byb3BzLFxuICAgICAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgZ2V0SWNvbkdlb21ldHJ5OiBpZCA9PiB0aGlzLmljb25HZW9tZXRyeT8uW2lkXSxcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRyaWdnZXJzXG4gICAgICAgICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICAgIGV4dGVuc2lvbnNcbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIC4uLihob3ZlcmVkT2JqZWN0XG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFN2Z0ljb25MYXllclByb3BzIG5lZWRzIGdldEljb24gRmllbGRcbiAgICAgICAgICAgICAgICBuZXcgU3ZnSWNvbkxheWVyKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFtob3ZlcmVkT2JqZWN0XSxcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICBnZXRQb3NpdGlvbjogZGF0YS5nZXRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgIGdldFJhZGl1czogZGF0YS5nZXRSYWRpdXMsXG4gICAgICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICAgICAgZ2V0SWNvbkdlb21ldHJ5OiBpZCA9PiB0aGlzLmljb25HZW9tZXRyeT8uW2lkXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogW10pLFxuXG4gICAgICAgICAgLy8gdGV4dCBsYWJlbCBsYXllclxuICAgICAgICAgIC4uLmxhYmVsTGF5ZXJzXG4gICAgICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxlQUFBLEdBQUFQLE9BQUE7QUFBK0UsU0FBQVEsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUs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
331
+ })] : []),
332
+ // text label layer
333
+ ...labelLayers];
334
+ }
335
+ }
336
+ exports.default = IconLayer;
337
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIl9zdmdJY29uTGF5ZXIiLCJfaWNvbkxheWVySWNvbiIsIl9kZWZhdWx0U2V0dGluZ3MiLCJfaWNvbkluZm9Nb2RhbCIsIl9iYXNlTGF5ZXIiLCJfbGF5ZXJUZXh0TGFiZWwiLCJicnVzaGluZ0V4dGVuc2lvbiIsIkJydXNoaW5nRXh0ZW5zaW9uIiwiU1ZHX0lDT05fVVJMIiwiZXhwb3J0cyIsIkNMT1VERlJPTlQiLCJpY29uUG9zQWNjZXNzb3IiLCJfcmVmIiwibGF0IiwibG5nIiwiYWx0aXR1ZGUiLCJkYyIsImQiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJmaWVsZElkeCIsImljb25BY2Nlc3NvciIsIl9yZWYyIiwiaWNvbiIsImljb25SZXF1aXJlZENvbHVtbnMiLCJpY29uT3B0aW9uYWxDb2x1bW5zIiwicG9pbnRWaXNDb25maWdzIiwicmFkaXVzIiwiZml4ZWRSYWRpdXMiLCJvcGFjaXR5IiwiY29sb3JSYW5nZSIsInJhZGl1c1JhbmdlIiwiZmxhdHRlckljb25Qb3NpdGlvbnMiLCJtZXNoIiwiY2VsbHMiLCJyZWR1Y2UiLCJwcmV2IiwiY2VsbCIsImZvckVhY2giLCJwIiwicHVzaCIsInBvc2l0aW9ucyIsIkljb25MYXllciIsIkxheWVyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJnZXRJY29uQWNjZXNzb3IiLCJfbGF5ZXJJbmZvTW9kYWwiLCJJY29uSW5mb01vZGFsRmFjdG9yeSIsImljb25HZW9tZXRyeSIsImdldFN2Z0ljb25zIiwidHlwZSIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sdW1uUGFpcnMiLCJkZWZhdWx0UG9pbnRDb2x1bW5QYWlycyIsImxheWVySWNvbiIsIkljb25MYXllckljb24iLCJ2aXN1YWxDaGFubmVscyIsImNvbG9yIiwiYWNjZXNzb3IiLCJkZWZhdWx0VmFsdWUiLCJzaXplIiwicHJvcGVydHkiLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJsYXllckluZm9Nb2RhbCIsImlkIiwidGVtcGxhdGUiLCJtb2RhbFByb3BzIiwidGl0bGUiLCJfdGhpcyIsImZldGNoQ29uZmlnIiwibWV0aG9kIiwibW9kZSIsImNhY2hlIiwid2luZG93IiwiZmV0Y2giLCJ0aGVuIiwicmVzcG9uc2UiLCJqc29uIiwicGFyc2VkIiwic3ZnSWNvbnMiLCJhY2N1IiwiY3VyciIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIl9yZWYzIiwiZmllbGRQYWlycyIsImZpZWxkcyIsIm5vdEZvdW5kIiwiaWNvbkZpZWxkcyIsImZpbHRlciIsIl9yZWY0IiwibmFtZSIsInJlcGxhY2UiLCJ0cmltIiwic3BsaXQiLCJzb21lIiwic2VnIiwiSUNPTl9GSUVMRFMiLCJ0IiwiaW5jbHVkZXMiLCJwdFBhaXIiLCJtYXAiLCJpY29uRmllbGQiLCJsYWJlbCIsInBhaXIiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJfcmVmNSIsImdldFBvc2l0aW9uIiwiZmlsdGVyZWRJbmRleCIsImdldEljb24iLCJkYXRhIiwiaSIsInJvd0luZGV4IiwicG9zIiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwidGV4dExhYmVsIiwiZ3B1RmlsdGVyIiwidHJpZ2dlckNoYW5nZWQiLCJ1cGRhdGVEYXRhIiwidGV4dExhYmVscyIsImZvcm1hdFRleHRMYWJlbERhdGEiLCJhY2Nlc3NvcnMiLCJnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMiLCJnZXRGaWx0ZXJWYWx1ZSIsImZpbHRlclZhbHVlQWNjZXNzb3IiLCJ1cGRhdGVMYXllck1ldGEiLCJib3VuZHMiLCJnZXRQb2ludHNCb3VuZHMiLCJ1cGRhdGVNZXRhIiwicmVuZGVyTGF5ZXIiLCJvcHRzIiwiX3RoaXMkY29uZmlnJGNvbHVtbnMkIiwib2JqZWN0SG92ZXJlZCIsImludGVyYWN0aW9uQ29uZmlnIiwicmFkaXVzU2NhbGUiLCJnZXRSYWRpdXNTY2FsZSIsImxheWVyUHJvcHMiLCJyYWRpdXNVbml0cyIsInJhZGl1c01heFBpeGVscyIsInVwZGF0ZVRyaWdnZXJzIiwiZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsImRlZmF1bHRMYXllclByb3BzIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwiYnJ1c2hpbmdQcm9wcyIsImdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMiLCJnZXRQaXhlbE9mZnNldCIsImdldFRleHRPZmZzZXRCeVJhZGl1cyIsImdldFJhZGl1cyIsImV4dGVuc2lvbnMiLCJzaGFyZWRQcm9wcyIsImZpbHRlclJhbmdlIiwibGFiZWxMYXllcnMiLCJyZW5kZXJUZXh0TGFiZWxMYXllciIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsIlN2Z0ljb25MYXllciIsImdldEljb25HZW9tZXRyeSIsIl90aGlzJGljb25HZW9tZXRyeSIsImdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMiLCJnZXRGaWxsQ29sb3IiLCJoaWdobGlnaHRDb2xvciIsIl90aGlzJGljb25HZW9tZXRyeTIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGF5ZXJzL2ljb24tbGF5ZXIvaWNvbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IHtCcnVzaGluZ0V4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5cbmltcG9ydCBTdmdJY29uTGF5ZXIgZnJvbSAnZGVja2dsLWxheWVycy9zdmctaWNvbi1sYXllci9zdmctaWNvbi1sYXllcic7XG5pbXBvcnQgSWNvbkxheWVySWNvbiBmcm9tICcuL2ljb24tbGF5ZXItaWNvbic7XG5pbXBvcnQge0lDT05fRklFTERTLCBDTE9VREZST05UfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQgSWNvbkluZm9Nb2RhbEZhY3RvcnkgZnJvbSAnLi9pY29uLWluZm8tbW9kYWwnO1xuaW1wb3J0IExheWVyLCB7TGF5ZXJCYXNlQ29uZmlnLCBMYXllckNvbHVtbn0gZnJvbSAnLi4vYmFzZS1sYXllcic7XG5pbXBvcnQge2dldFRleHRPZmZzZXRCeVJhZGl1cywgZm9ybWF0VGV4dExhYmVsRGF0YX0gZnJvbSAnLi4vbGF5ZXItdGV4dC1sYWJlbCc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge1xuICBWaXNDb25maWdCb29sZWFuLFxuICBWaXNDb25maWdDb2xvclJhbmdlLFxuICBWaXNDb25maWdOdW1iZXIsXG4gIFZpc0NvbmZpZ1JhbmdlXG59IGZyb20gJy4uL2xheWVyLWZhY3RvcnknO1xuaW1wb3J0IHtDb2xvclJhbmdlfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7TWVyZ2V9IGZyb20gJy4uLy4uL3JlZHVjZXJzJztcbmltcG9ydCB7S2VwbGVyVGFibGV9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyQ29sdW1uc0NvbmZpZyA9IHtcbiAgbGF0OiBMYXllckNvbHVtbjtcbiAgbG5nOiBMYXllckNvbHVtbjtcbiAgYWx0aXR1ZGU6IExheWVyQ29sdW1uO1xuICBpY29uOiBMYXllckNvbHVtbjtcbn07XG5cbnR5cGUgSWNvbkdlb21ldHJ5ID0ge30gfCBudWxsO1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJWaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgcmFkaXVzOiBWaXNDb25maWdOdW1iZXI7XG4gIGZpeGVkUmFkaXVzOiBWaXNDb25maWdCb29sZWFuO1xuICBvcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIGNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIHJhZGl1c1JhbmdlOiBWaXNDb25maWdSYW5nZTtcbn07XG5cbmV4cG9ydCB0eXBlIEljb25MYXllclZpc0NvbmZpZyA9IHtcbiAgcmFkaXVzOiBudW1iZXI7XG4gIGZpeGVkUmFkaXVzOiBib29sZWFuO1xuICBvcGFjaXR5OiBudW1iZXI7XG4gIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2U7XG4gIHJhZGl1c1JhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xufTtcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyQ29uZmlnID0gTWVyZ2U8XG4gIExheWVyQmFzZUNvbmZpZyxcbiAge2NvbHVtbnM6IEljb25MYXllckNvbHVtbnNDb25maWc7IHZpc0NvbmZpZzogSWNvbkxheWVyVmlzQ29uZmlnfVxuPjtcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyRGF0YSA9IHtpbmRleDogbnVtYmVyOyBpY29uOiBzdHJpbmd9O1xuXG5jb25zdCBicnVzaGluZ0V4dGVuc2lvbiA9IG5ldyBCcnVzaGluZ0V4dGVuc2lvbigpO1xuXG5leHBvcnQgY29uc3QgU1ZHX0lDT05fVVJMID0gYCR7Q0xPVURGUk9OVH0vaWNvbnMvc3ZnLWljb25zLmpzb25gO1xuXG5leHBvcnQgY29uc3QgaWNvblBvc0FjY2Vzc29yID0gKHtsYXQsIGxuZywgYWx0aXR1ZGV9OiBJY29uTGF5ZXJDb2x1bW5zQ29uZmlnKSA9PiAoXG4gIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlXG4pID0+IGQgPT4gW1xuICBkYy52YWx1ZUF0KGQuaW5kZXgsIGxuZy5maWVsZElkeCksXG4gIGRjLnZhbHVlQXQoZC5pbmRleCwgbGF0LmZpZWxkSWR4KSxcbiAgYWx0aXR1ZGU/LmZpZWxkSWR4ID4gLTEgPyBkYy52YWx1ZUF0KGQuaW5kZXgsIGFsdGl0dWRlLmZpZWxkSWR4KSA6IDBcbl07XG5cbmV4cG9ydCBjb25zdCBpY29uQWNjZXNzb3IgPSAoe2ljb259OiBJY29uTGF5ZXJDb2x1bW5zQ29uZmlnKSA9PiAoZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IGQgPT5cbiAgZGMudmFsdWVBdChkLmluZGV4LCBpY29uLmZpZWxkSWR4KTtcblxuZXhwb3J0IGNvbnN0IGljb25SZXF1aXJlZENvbHVtbnM6IFsnbGF0JywgJ2xuZycsICdpY29uJ10gPSBbJ2xhdCcsICdsbmcnLCAnaWNvbiddO1xuZXhwb3J0IGNvbnN0IGljb25PcHRpb25hbENvbHVtbnM6IFsnYWx0aXR1ZGUnXSA9IFsnYWx0aXR1ZGUnXTtcblxuZXhwb3J0IGNvbnN0IHBvaW50VmlzQ29uZmlnczoge1xuICByYWRpdXM6ICdyYWRpdXMnO1xuICBmaXhlZFJhZGl1czogJ2ZpeGVkUmFkaXVzJztcbiAgb3BhY2l0eTogJ29wYWNpdHknO1xuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZSc7XG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnO1xufSA9IHtcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgZml4ZWRSYWRpdXM6ICdmaXhlZFJhZGl1cycsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJ1xufTtcblxuZnVuY3Rpb24gZmxhdHRlckljb25Qb3NpdGlvbnMoaWNvbikge1xuICAvLyBoYWQgdG8gZmxpcCB5LCBzaW5jZSBAbHVtYSBtb2RhbCBoYXMgY2hhbmdlZFxuICByZXR1cm4gaWNvbi5tZXNoLmNlbGxzLnJlZHVjZSgocHJldiwgY2VsbCkgPT4ge1xuICAgIGNlbGwuZm9yRWFjaChwID0+IHtcbiAgICAgIHByZXYucHVzaChcbiAgICAgICAgLi4uW2ljb24ubWVzaC5wb3NpdGlvbnNbcF1bMF0sIC1pY29uLm1lc2gucG9zaXRpb25zW3BdWzFdLCBpY29uLm1lc2gucG9zaXRpb25zW3BdWzJdXVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldjtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJY29uTGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGdldEljb25BY2Nlc3NvcjogKGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IChkOiBhbnkpID0+IGFueTtcbiAgX2xheWVySW5mb01vZGFsOiAoKSA9PiBKU1guRWxlbWVudDtcbiAgaWNvbkdlb21ldHJ5OiBJY29uR2VvbWV0cnk7XG5cbiAgZGVjbGFyZSB2aXNDb25maWdTZXR0aW5nczogSWNvbkxheWVyVmlzQ29uZmlnU2V0dGluZ3M7XG4gIGRlY2xhcmUgY29uZmlnOiBJY29uTGF5ZXJDb25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvcHM6IHtcbiAgICAgIGlkPzogc3RyaW5nO1xuICAgICAgaWNvbkdlb21ldHJ5PzogSWNvbkdlb21ldHJ5O1xuICAgIH0gJiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz4gPSB7fVxuICApIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKHBvaW50VmlzQ29uZmlncyk7XG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gKGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+XG4gICAgICBpY29uUG9zQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gICAgdGhpcy5nZXRJY29uQWNjZXNzb3IgPSBkYXRhQ29udGFpbmVyID0+IGljb25BY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcblxuICAgIC8vIHByZXBhcmUgbGF5ZXIgaW5mbyBtb2RhbFxuICAgIHRoaXMuX2xheWVySW5mb01vZGFsID0gSWNvbkluZm9Nb2RhbEZhY3RvcnkoKTtcbiAgICB0aGlzLmljb25HZW9tZXRyeSA9IHByb3BzLmljb25HZW9tZXRyeSB8fCBudWxsO1xuICAgIHRoaXMuZ2V0U3ZnSWNvbnMoKTtcbiAgfVxuXG4gIGdldCB0eXBlKCk6ICdpY29uJyB7XG4gICAgcmV0dXJuICdpY29uJztcbiAgfVxuXG4gIGdldCByZXF1aXJlZExheWVyQ29sdW1ucygpIHtcbiAgICByZXR1cm4gaWNvblJlcXVpcmVkQ29sdW1ucztcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGljb25PcHRpb25hbENvbHVtbnM7XG4gIH1cblxuICBnZXQgY29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvaW50Q29sdW1uUGFpcnM7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBJY29uTGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICAuLi5zdXBlci52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWxsQ29sb3InLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIHByb3BlcnR5OiAncmFkaXVzJyxcbiAgICAgICAgcmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6ICdyYWRpdXMnLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFJhZGl1cycsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnaWNvbkluZm8nLFxuICAgICAgdGVtcGxhdGU6IHRoaXMuX2xheWVySW5mb01vZGFsLFxuICAgICAgbW9kYWxQcm9wczoge1xuICAgICAgICB0aXRsZTogJ21vZGFsLmljb25JbmZvLnRpdGxlJ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRTdmdJY29ucygpIHtcbiAgICBjb25zdCBmZXRjaENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBtb2RlOiAnY29ycycsXG4gICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgIH07XG5cbiAgICBpZiAod2luZG93LmZldGNoKSB7XG4gICAgICB3aW5kb3dcbiAgICAgICAgLmZldGNoKFNWR19JQ09OX1VSTCwgZmV0Y2hDb25maWcpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKHBhcnNlZDoge3N2Z0ljb25zPzogYW55W119ID0ge30pID0+IHtcbiAgICAgICAgICBjb25zdCB7c3ZnSWNvbnMgPSBbXX0gPSBwYXJzZWQ7XG4gICAgICAgICAgdGhpcy5pY29uR2VvbWV0cnkgPSBzdmdJY29ucy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwgY3VycikgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgW2N1cnIuaWRdOiBmbGF0dGVySWNvblBvc2l0aW9ucyhjdXJyKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLl9sYXllckluZm9Nb2RhbCA9IEljb25JbmZvTW9kYWxGYWN0b3J5KHN2Z0ljb25zKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7ZmllbGRQYWlycyA9IFtdLCBmaWVsZHMgPSBbXX06IEtlcGxlclRhYmxlKSB7XG4gICAgY29uc3Qgbm90Rm91bmQgPSB7cHJvcHM6IFtdfTtcbiAgICBpZiAoIWZpZWxkUGFpcnMubGVuZ3RoIHx8ICFmaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbm90Rm91bmQ7XG4gICAgfVxuXG4gICAgY29uc3QgaWNvbkZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKHtuYW1lfSkgPT5cbiAgICAgIG5hbWVcbiAgICAgICAgLnJlcGxhY2UoL1tfLC5dKy9nLCAnICcpXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLnNvbWUoc2VnID0+IElDT05fRklFTERTLmljb24uc29tZSh0ID0+IHQuaW5jbHVkZXMoc2VnKSkpXG4gICAgKTtcblxuICAgIGlmICghaWNvbkZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBub3RGb3VuZDtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgaWNvbiBsYXllcnMgZm9yIGZpcnN0IHBvaW50IHBhaXJcbiAgICBjb25zdCBwdFBhaXIgPSBmaWVsZFBhaXJzWzBdO1xuXG4gICAgY29uc3QgcHJvcHMgPSBpY29uRmllbGRzLm1hcChpY29uRmllbGQgPT4gKHtcbiAgICAgIGxhYmVsOiBpY29uRmllbGQubmFtZS5yZXBsYWNlKC9bXywuXSsvZywgJyAnKS50cmltKCksXG4gICAgICBjb2x1bW5zOiB7XG4gICAgICAgIGxhdDogcHRQYWlyLnBhaXIubGF0LFxuICAgICAgICBsbmc6IHB0UGFpci5wYWlyLmxuZyxcbiAgICAgICAgaWNvbjoge1xuICAgICAgICAgIHZhbHVlOiBpY29uRmllbGQubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogaWNvbkZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IHRydWVcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge3Byb3BzfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoe2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9OiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCBnZXRJY29uID0gdGhpcy5nZXRJY29uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YTogSWNvbkxheWVyRGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyZWRJbmRleFtpXTtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0ge2luZGV4fTtcbiAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKHJvd0luZGV4KTtcbiAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKHJvd0luZGV4KTtcblxuICAgICAgLy8gaWYgZG9lc24ndCBoYXZlIHBvaW50IGxhdCBvciBsbmcsIGRvIG5vdCBhZGQgdGhlIHBvaW50XG4gICAgICAvLyBkZWNrLmdsIGNhbid0IGhhbmRsZSBwb3NpdGlvbiA9IG51bGxcbiAgICAgIGlmIChwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiB0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBpY29uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YUlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHt0ZXh0TGFiZWx9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgICBjb25zdCB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9ID0gdGhpcy51cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gZ2V0IGFsbCBkaXN0aW5jdCBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IGxhYmVsc1xuICAgIGNvbnN0IHRleHRMYWJlbHMgPSBmb3JtYXRUZXh0TGFiZWxEYXRhKHtcbiAgICAgIHRleHRMYWJlbCxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHRyaWdnZXJDaGFuZ2VkLFxuICAgICAgb2xkTGF5ZXJEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFDb250YWluZXJcbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IHRoaXMuZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQ29udGFpbmVyfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKCksXG4gICAgICB0ZXh0TGFiZWxzLFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0UG9pbnRzQm91bmRzKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kc30pO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWQsIGludGVyYWN0aW9uQ29uZmlnfSA9IG9wdHM7XG5cbiAgICBjb25zdCByYWRpdXNTY2FsZSA9IHRoaXMuZ2V0UmFkaXVzU2NhbGUoKTtcbiAgICBjb25zdCBsYXllclByb3BzID0ge3JhZGl1c1NjYWxlLCByYWRpdXNVbml0czogJ3BpeGVscycsIHJhZGl1c01heFBpeGVsczogNTAwfTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgZ2V0UG9zaXRpb246IHRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMsXG4gICAgICAuLi50aGlzLmdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpXG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG4gICAgY29uc3QgYnJ1c2hpbmdQcm9wcyA9IHRoaXMuZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZyk7XG4gICAgY29uc3QgZ2V0UGl4ZWxPZmZzZXQgPSBnZXRUZXh0T2Zmc2V0QnlSYWRpdXMocmFkaXVzU2NhbGUsIGRhdGEuZ2V0UmFkaXVzKTtcbiAgICBjb25zdCBleHRlbnNpb25zID0gWy4uLmRlZmF1bHRMYXllclByb3BzLmV4dGVuc2lvbnMsIGJydXNoaW5nRXh0ZW5zaW9uXTtcblxuICAgIC8vIHNoYXJlZCBQcm9wcyBiZXR3ZWVuIGxheWVyIGFuZCBsYWJlbCBsYXllclxuICAgIGNvbnN0IHNoYXJlZFByb3BzID0ge1xuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICBleHRlbnNpb25zLFxuICAgICAgZmlsdGVyUmFuZ2U6IGRlZmF1bHRMYXllclByb3BzLmZpbHRlclJhbmdlLFxuICAgICAgLi4uYnJ1c2hpbmdQcm9wc1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbExheWVycyA9IFtcbiAgICAgIC4uLnRoaXMucmVuZGVyVGV4dExhYmVsTGF5ZXIoXG4gICAgICAgIHtcbiAgICAgICAgICBnZXRQb3NpdGlvbjogZGF0YS5nZXRQb3NpdGlvbixcbiAgICAgICAgICBzaGFyZWRQcm9wcyxcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgfSxcbiAgICAgICAgb3B0c1xuICAgICAgKVxuICAgIF07XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICAvLyBpY29ucyB3aWxsIGJlIGZsYXQgb24gdGhlIG1hcCB3aGVuIHRoZSBhbHRpdHVkZSBjb2x1bW4gaXMgbm90IHVzZWRcbiAgICAgIGRlcHRoVGVzdDogdGhpcy5jb25maWcuY29sdW1ucy5hbHRpdHVkZT8uZmllbGRJZHggPiAtMVxuICAgIH07XG5cbiAgICByZXR1cm4gIXRoaXMuaWNvbkdlb21ldHJ5XG4gICAgICA/IFtdXG4gICAgICA6IFtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgbmV3IFN2Z0ljb25MYXllcih7XG4gICAgICAgICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcyxcbiAgICAgICAgICAgIC4uLmJydXNoaW5nUHJvcHMsXG4gICAgICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICBnZXRJY29uR2VvbWV0cnk6IGlkID0+IHRoaXMuaWNvbkdlb21ldHJ5Py5baWRdLFxuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdHJpZ2dlcnNcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgLi4uKGhvdmVyZWRPYmplY3RcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU3ZnSWNvbkxheWVyUHJvcHMgbmVlZHMgZ2V0SWNvbiBGaWVsZFxuICAgICAgICAgICAgICAgIG5ldyBTdmdJY29uTGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgIGdldFBvc2l0aW9uOiBkYXRhLmdldFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgZ2V0UmFkaXVzOiBkYXRhLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgICAgIGdldEZpbGxDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgICAgICBnZXRJY29uR2VvbWV0cnk6IGlkID0+IHRoaXMuaWNvbkdlb21ldHJ5Py5baWRdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXSksXG5cbiAgICAgICAgICAvLyB0ZXh0IGxhYmVsIGxheWVyXG4gICAgICAgICAgLi4ubGFiZWxMYXllcnNcbiAgICAgICAgXTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQW9CQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFB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