@kepler.gl/components 3.3.0-alpha.0 → 3.3.0-alpha.2

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 (299) hide show
  1. package/dist/annotations/annotation-node.d.ts +11 -0
  2. package/dist/annotations/annotation-node.js +145 -0
  3. package/dist/annotations/annotation-overlay.d.ts +16 -0
  4. package/dist/annotations/annotation-overlay.js +166 -0
  5. package/dist/annotations/annotation-panel.d.ts +24 -0
  6. package/dist/annotations/annotation-panel.js +362 -0
  7. package/dist/annotations/annotation-text.d.ts +16 -0
  8. package/dist/annotations/annotation-text.js +150 -0
  9. package/dist/annotations/annotation-utils.d.ts +39 -0
  10. package/dist/annotations/annotation-utils.js +156 -0
  11. package/dist/annotations/index.d.ts +7 -0
  12. package/dist/annotations/index.js +53 -0
  13. package/dist/annotations/lexical-editor/clickable-link-plugin.d.ts +3 -0
  14. package/dist/annotations/lexical-editor/clickable-link-plugin.js +71 -0
  15. package/dist/annotations/lexical-editor/floating-link-editor.d.ts +1 -0
  16. package/dist/annotations/lexical-editor/floating-link-editor.js +194 -0
  17. package/dist/annotations/lexical-editor/index.d.ts +7 -0
  18. package/dist/annotations/lexical-editor/index.js +78 -0
  19. package/dist/annotations/lexical-editor/lexical-constants.d.ts +12 -0
  20. package/dist/annotations/lexical-editor/lexical-constants.js +22 -0
  21. package/dist/annotations/lexical-editor/lexical-nodes.d.ts +3 -0
  22. package/dist/annotations/lexical-editor/lexical-nodes.js +13 -0
  23. package/dist/annotations/lexical-editor/lexical-rich-text-editor.d.ts +15 -0
  24. package/dist/annotations/lexical-editor/lexical-rich-text-editor.js +122 -0
  25. package/dist/annotations/lexical-editor/lexical-theme.d.ts +15 -0
  26. package/dist/annotations/lexical-editor/lexical-theme.js +25 -0
  27. package/dist/annotations/lexical-editor/lexical-toolbar.d.ts +7 -0
  28. package/dist/annotations/lexical-editor/lexical-toolbar.js +293 -0
  29. package/dist/annotations/lexical-editor/lexical-utils.d.ts +4 -0
  30. package/dist/annotations/lexical-editor/lexical-utils.js +45 -0
  31. package/dist/annotations/lexical-editor/use-lexical-toolbar.d.ts +36 -0
  32. package/dist/annotations/lexical-editor/use-lexical-toolbar.js +253 -0
  33. package/dist/bottom-widget.d.ts +1 -1
  34. package/dist/bottom-widget.js +12 -6
  35. package/dist/common/action-panel.js +1 -1
  36. package/dist/common/animation-control/animation-control.d.ts +1 -0
  37. package/dist/common/animation-control/animation-control.js +3 -1
  38. package/dist/common/animation-control/animation-controller.js +8 -6
  39. package/dist/common/animation-control/export-video-control.d.ts +9 -0
  40. package/dist/common/animation-control/export-video-control.js +43 -0
  41. package/dist/common/animation-control/playback-controls.d.ts +4 -2
  42. package/dist/common/animation-control/playback-controls.js +7 -4
  43. package/dist/common/checkbox.d.ts +5 -21
  44. package/dist/common/checkbox.js +58 -70
  45. package/dist/common/color-legend.d.ts +1 -1
  46. package/dist/common/color-legend.js +3 -3
  47. package/dist/common/data-table/canvas.d.ts +1 -1
  48. package/dist/common/data-table/index.d.ts +2 -2
  49. package/dist/common/data-table/index.js +3 -3
  50. package/dist/common/dnd-layer-items.d.ts +4 -0
  51. package/dist/common/dnd-layer-items.js +6 -2
  52. package/dist/common/error-boundary.d.ts +1 -1
  53. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  54. package/dist/common/file-uploader/file-upload.js +4 -4
  55. package/dist/common/flex-container.d.ts +15 -7
  56. package/dist/common/histogram-plot.js +102 -53
  57. package/dist/common/icon-button.d.ts +53 -6
  58. package/dist/common/icons/3d-models/airplane.d.ts +14 -0
  59. package/dist/common/icons/3d-models/airplane.js +104 -0
  60. package/dist/common/icons/3d-models/bicycle.d.ts +14 -0
  61. package/dist/common/icons/3d-models/bicycle.js +426 -0
  62. package/dist/common/icons/3d-models/boeing.d.ts +14 -0
  63. package/dist/common/icons/3d-models/boeing.js +119 -0
  64. package/dist/common/icons/3d-models/car.d.ts +14 -0
  65. package/dist/common/icons/3d-models/car.js +110 -0
  66. package/dist/common/icons/3d-models/cargoship.d.ts +14 -0
  67. package/dist/common/icons/3d-models/cargoship.js +246 -0
  68. package/dist/common/icons/3d-models/evtol.d.ts +14 -0
  69. package/dist/common/icons/3d-models/evtol.js +134 -0
  70. package/dist/common/icons/3d-models/glider.d.ts +14 -0
  71. package/dist/common/icons/3d-models/glider.js +62 -0
  72. package/dist/common/icons/3d-models/helicopter.d.ts +14 -0
  73. package/dist/common/icons/3d-models/helicopter.js +110 -0
  74. package/dist/common/icons/3d-models/scooter.d.ts +14 -0
  75. package/dist/common/icons/3d-models/scooter.js +159 -0
  76. package/dist/common/icons/3d-models/semitruck.d.ts +14 -0
  77. package/dist/common/icons/3d-models/semitruck.js +177 -0
  78. package/dist/common/icons/3d-models/truck.d.ts +14 -0
  79. package/dist/common/icons/3d-models/truck.js +122 -0
  80. package/dist/common/icons/anchor_window.d.ts +1 -8
  81. package/dist/common/icons/anchor_window.js +17 -10
  82. package/dist/common/icons/annotation-text.d.ts +9 -0
  83. package/dist/common/icons/annotation-text.js +56 -0
  84. package/dist/common/icons/arrow-down-full.d.ts +2 -1
  85. package/dist/common/icons/arrow-down-full.js +1 -1
  86. package/dist/common/icons/folder.d.ts +10 -0
  87. package/dist/common/icons/folder.js +51 -0
  88. package/dist/common/icons/index.d.ts +2 -0
  89. package/dist/common/icons/index.js +15 -1
  90. package/dist/common/icons/timeline-marker.d.ts +2 -1
  91. package/dist/common/icons/timeline-marker.js +1 -1
  92. package/dist/common/item-selector/chickleted-input.d.ts +1 -1
  93. package/dist/common/item-selector/chickleted-input.js +5 -5
  94. package/dist/common/item-selector/dropdown-list.d.ts +1 -1
  95. package/dist/common/item-selector/dropdown-list.js +1 -1
  96. package/dist/common/item-selector/dropdown-select.d.ts +13 -7
  97. package/dist/common/item-selector/item-selector.d.ts +1 -1
  98. package/dist/common/item-selector/item-selector.js +1 -1
  99. package/dist/common/item-selector/typeahead.d.ts +4 -4
  100. package/dist/common/item-selector/typeahead.js +1 -3
  101. package/dist/common/layout-splitter.d.ts +45 -0
  102. package/dist/common/layout-splitter.js +231 -0
  103. package/dist/common/line-chart.d.ts +10 -3
  104. package/dist/common/line-chart.js +219 -52
  105. package/dist/common/modal.d.ts +11 -5
  106. package/dist/common/modal.js +1 -1
  107. package/dist/common/portaled.d.ts +17 -17
  108. package/dist/common/range-plot.js +4 -2
  109. package/dist/common/range-slider.d.ts +2 -0
  110. package/dist/common/range-slider.js +108 -45
  111. package/dist/common/slider/mouse-event.d.ts +1 -1
  112. package/dist/common/slider/mouse-event.js +1 -2
  113. package/dist/common/slider/slider-bar-handle.d.ts +1 -1
  114. package/dist/common/slider/slider-bar-handle.js +1 -1
  115. package/dist/common/slider/slider-handle.d.ts +3 -3
  116. package/dist/common/slider/slider-handle.js +1 -1
  117. package/dist/common/slider/slider.d.ts +8 -4
  118. package/dist/common/slider/slider.js +78 -35
  119. package/dist/common/styled-components.d.ts +628 -178
  120. package/dist/common/styled-components.js +2 -2
  121. package/dist/common/time-range-slider-time-title.d.ts +1 -1
  122. package/dist/common/time-range-slider-time-title.js +5 -5
  123. package/dist/common/time-range-slider.d.ts +2 -1
  124. package/dist/common/time-range-slider.js +19 -7
  125. package/dist/common/timeline-helpers.d.ts +3 -0
  126. package/dist/common/timeline-helpers.js +57 -0
  127. package/dist/common/timeline-slider.js +21 -12
  128. package/dist/common/toolbar-item.js +5 -5
  129. package/dist/common/toolbar.d.ts +1 -1
  130. package/dist/common/toolbar.js +4 -4
  131. package/dist/common/vertical-toolbar.d.ts +13 -3
  132. package/dist/container.d.ts +3 -2
  133. package/dist/container.js +2 -2
  134. package/dist/context.d.ts +1 -1
  135. package/dist/context.js +1 -1
  136. package/dist/dnd-context.d.ts +4 -3
  137. package/dist/dnd-context.js +64 -9
  138. package/dist/effects/compact-color-picker.d.ts +1 -1
  139. package/dist/effects/effect-configurator.d.ts +5 -6
  140. package/dist/effects/effect-configurator.js +213 -52
  141. package/dist/effects/effect-manager.js +3 -3
  142. package/dist/effects/effect-panel-header.js +34 -17
  143. package/dist/effects/effect-panel.d.ts +4 -4
  144. package/dist/effects/effect-panel.js +61 -86
  145. package/dist/effects/effect-time-configurator.js +10 -10
  146. package/dist/effects/effect-type-dropdown-list.d.ts +1 -0
  147. package/dist/effects/effect-type-dropdown-list.js +1 -1
  148. package/dist/effects/effect-type-list-item.d.ts +2 -1
  149. package/dist/effects/effect-type-list-item.js +23 -7
  150. package/dist/effects/effect-type-selector.d.ts +1 -0
  151. package/dist/effects/effect-type-selector.js +2 -2
  152. package/dist/effects/surface-fog-section.d.ts +14 -0
  153. package/dist/effects/surface-fog-section.js +263 -0
  154. package/dist/filters/components.d.ts +7 -5
  155. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +6 -2
  156. package/dist/filters/index.d.ts +1 -0
  157. package/dist/filters/index.js +8 -1
  158. package/dist/filters/polygon-filter.js +2 -2
  159. package/dist/filters/time-range-filter.js +3 -1
  160. package/dist/filters/time-widget-settings.d.ts +14 -0
  161. package/dist/filters/time-widget-settings.js +312 -0
  162. package/dist/filters/time-widget-top.d.ts +2 -3
  163. package/dist/filters/time-widget-top.js +32 -39
  164. package/dist/filters/time-widget.d.ts +3 -2
  165. package/dist/filters/time-widget.js +285 -9
  166. package/dist/filters/types.d.ts +3 -3
  167. package/dist/filters/types.js +1 -1
  168. package/dist/geocoder/geocoder.d.ts +4 -1
  169. package/dist/geocoder/geocoder.js +61 -14
  170. package/dist/geocoder-panel.d.ts +3 -2
  171. package/dist/geocoder-panel.js +11 -8
  172. package/dist/hooks/use-dnd-layers.d.ts +4 -3
  173. package/dist/hooks/use-dnd-layers.js +103 -42
  174. package/dist/index.d.ts +17 -2
  175. package/dist/index.js +161 -9
  176. package/dist/injector.d.ts +1 -1
  177. package/dist/kepler-gl.d.ts +179 -27
  178. package/dist/kepler-gl.js +91 -12
  179. package/dist/loading-indicator.d.ts +3 -1
  180. package/dist/loading-indicator.js +6 -3
  181. package/dist/map/annotations/annotation-control.d.ts +16 -0
  182. package/dist/map/annotations/annotation-control.js +56 -0
  183. package/dist/map/layer-hover-info.d.ts +7 -3
  184. package/dist/map/layer-hover-info.js +124 -55
  185. package/dist/map/locale-panel.d.ts +1 -1
  186. package/dist/map/locale-panel.js +2 -2
  187. package/dist/map/map-control-panel.js +3 -2
  188. package/dist/map/map-control-toolbar.d.ts +33 -8
  189. package/dist/map/map-control.d.ts +14 -4
  190. package/dist/map/map-control.js +18 -8
  191. package/dist/map/map-draw-panel.d.ts +1 -1
  192. package/dist/map/map-draw-panel.js +7 -4
  193. package/dist/map/map-legend-panel.d.ts +11 -2
  194. package/dist/map/map-legend-panel.js +25 -8
  195. package/dist/map/map-legend.d.ts +20 -3
  196. package/dist/map/map-legend.js +145 -31
  197. package/dist/map/map-navigation-control.d.ts +13 -0
  198. package/dist/map/map-navigation-control.js +143 -0
  199. package/dist/map/map-popover.js +2 -2
  200. package/dist/map/split-map-button.d.ts +6 -1
  201. package/dist/map/split-map-button.js +113 -19
  202. package/dist/map-container.d.ts +13 -3
  203. package/dist/map-container.js +269 -59
  204. package/dist/map-view-state-context.d.ts +1 -0
  205. package/dist/map-view-state-context.js +1 -1
  206. package/dist/maps-layout.d.ts +3 -0
  207. package/dist/maps-layout.js +86 -26
  208. package/dist/modal-container.d.ts +3 -2
  209. package/dist/modal-container.js +28 -6
  210. package/dist/modals/add-map-style-modal.js +173 -200
  211. package/dist/modals/cloud-tile.d.ts +1 -2
  212. package/dist/modals/data-table-modal.d.ts +1 -1
  213. package/dist/modals/data-table-modal.js +146 -194
  214. package/dist/modals/export-data-modal.js +117 -139
  215. package/dist/modals/export-map-modal/components.d.ts +9 -5
  216. package/dist/modals/export-video-modal.d.ts +28 -0
  217. package/dist/modals/export-video-modal.js +371 -0
  218. package/dist/modals/export-video-modal.spec.d.ts +1 -0
  219. package/dist/modals/export-video-modal.spec.js +686 -0
  220. package/dist/modals/fog-height-animation.d.ts +8 -0
  221. package/dist/modals/fog-height-animation.js +97 -0
  222. package/dist/modals/hubble-utils.d.ts +41 -0
  223. package/dist/modals/hubble-utils.js +294 -0
  224. package/dist/modals/hubble-utils.spec.d.ts +1 -0
  225. package/dist/modals/hubble-utils.spec.js +397 -0
  226. package/dist/modals/modal-dialog.d.ts +1 -1
  227. package/dist/modals/share-map-modal.d.ts +2 -4
  228. package/dist/modals/swipe-composite-utils.d.ts +10 -0
  229. package/dist/modals/swipe-composite-utils.js +108 -0
  230. package/dist/modals/swipe-export-settings.d.ts +24 -0
  231. package/dist/modals/swipe-export-settings.js +370 -0
  232. package/dist/modals/swipe-export-video-container.d.ts +122 -0
  233. package/dist/modals/swipe-export-video-container.js +630 -0
  234. package/dist/modals/swipe-export-video-preview.d.ts +68 -0
  235. package/dist/modals/swipe-export-video-preview.js +339 -0
  236. package/dist/modals/tilesets-modals/load-data-footer.js +2 -2
  237. package/dist/modals/tilesets-modals/load-tileset.js +21 -10
  238. package/dist/modals/tilesets-modals/tileset-bitmap-form.d.ts +14 -0
  239. package/dist/modals/tilesets-modals/tileset-bitmap-form.js +284 -0
  240. package/dist/modals/tilesets-modals/tileset-raster-form.js +90 -11
  241. package/dist/modals/tilesets-modals/tileset-tile3d-form.js +3 -2
  242. package/dist/modals/tilesets-modals/tileset-vector-form.js +58 -4
  243. package/dist/modals/tilesets-modals/tileset-wms-form.js +4 -3
  244. package/dist/notification-panel/notification-item.d.ts +1 -53
  245. package/dist/notification-panel/notification-item.js +47 -75
  246. package/dist/notification-panel.d.ts +1 -1
  247. package/dist/notification-panel.js +20 -42
  248. package/dist/plot-container.js +7 -6
  249. package/dist/side-panel/add-by-dataset-button.js +3 -3
  250. package/dist/side-panel/common/dataset-info.js +2 -2
  251. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +7 -3
  252. package/dist/side-panel/interaction-panel/geocoder-config.d.ts +11 -0
  253. package/dist/side-panel/interaction-panel/geocoder-config.js +45 -0
  254. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +3 -2
  255. package/dist/side-panel/interaction-panel/interaction-panel.js +10 -3
  256. package/dist/side-panel/layer-manager.d.ts +5 -4
  257. package/dist/side-panel/layer-manager.js +26 -6
  258. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +1 -1
  259. package/dist/side-panel/layer-panel/color-scale-selector.js +1 -1
  260. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -4
  261. package/dist/side-panel/layer-panel/custom-palette.d.ts +3 -5
  262. package/dist/side-panel/layer-panel/custom-palette.js +5 -5
  263. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +2 -1
  264. package/dist/side-panel/layer-panel/dataset-layer-group.js +1 -1
  265. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +2 -1
  266. package/dist/side-panel/layer-panel/dataset-layer-section.js +19 -3
  267. package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -11
  268. package/dist/side-panel/layer-panel/layer-configurator.d.ts +4 -2
  269. package/dist/side-panel/layer-panel/layer-configurator.js +450 -76
  270. package/dist/side-panel/layer-panel/layer-group-header.d.ts +15 -0
  271. package/dist/side-panel/layer-panel/layer-group-header.js +179 -0
  272. package/dist/side-panel/layer-panel/layer-list.d.ts +9 -4
  273. package/dist/side-panel/layer-panel/layer-list.js +197 -40
  274. package/dist/side-panel/layer-panel/layer-panel-header.js +2 -2
  275. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +1 -1
  276. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +127 -27
  277. package/dist/side-panel/layer-panel/scenegraph-model-selector.d.ts +24 -0
  278. package/dist/side-panel/layer-panel/scenegraph-model-selector.js +123 -0
  279. package/dist/side-panel/layer-panel/text-label-panel.d.ts +1 -1
  280. package/dist/side-panel/layer-panel/text-label-panel.js +11 -2
  281. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +1 -1
  282. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +2 -10
  283. package/dist/side-panel/layer-panel/vis-config-slider.d.ts +2 -0
  284. package/dist/side-panel/layer-panel/vis-config-slider.js +7 -3
  285. package/dist/side-panel/panel-header.d.ts +1 -0
  286. package/dist/side-panel/panel-header.js +9 -2
  287. package/dist/side-panel/panel-tab.d.ts +2 -4
  288. package/dist/side-panel/panel-tab.js +4 -4
  289. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  290. package/dist/side-panel/side-bar.d.ts +1 -6
  291. package/dist/side-panel.d.ts +1 -1
  292. package/dist/side-panel.js +5 -1
  293. package/dist/types.d.ts +2 -2
  294. package/dist/types.js +1 -1
  295. package/package.json +53 -48
  296. package/dist/map/layer-selector-panel.d.ts +0 -21
  297. package/dist/map/layer-selector-panel.js +0 -85
  298. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +0 -11
  299. package/dist/side-panel/layer-panel/radius-by-zoom-input.js +0 -220
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+ var _constants = require("@kepler.gl/constants");
7
+ var _hubbleUtils = require("./hubble-utils");
8
+ 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; }
9
+ 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; } // SPDX-License-Identifier: MIT
10
+ // Copyright contributors to the kepler.gl project
11
+ // @ts-nocheck
12
+ jest.mock('@kepler.gl/utils', function () {
13
+ return _objectSpread(_objectSpread({}, jest.requireActual('@kepler.gl/utils')), {}, {
14
+ getBaseMapLibrary: jest.fn(function () {
15
+ return 'maplibre';
16
+ })
17
+ });
18
+ });
19
+ jest.mock('maplibregl-mapbox-request-transformer', function () {
20
+ return {
21
+ isMapboxURL: jest.fn(function (url) {
22
+ return url.startsWith('mapbox:');
23
+ }),
24
+ transformMapboxUrl: jest.fn(function (url, _resourceType, token) {
25
+ return {
26
+ url: "".concat(url.replace('mapbox://', 'https://api.mapbox.com/'), "?access_token=").concat(token)
27
+ };
28
+ })
29
+ };
30
+ });
31
+ describe('hubble-utils', function () {
32
+ describe('getTimeRangeFilterKeyframes', function () {
33
+ var baseFilter = {
34
+ type: _constants.FILTER_TYPES.timeRange,
35
+ domain: [100, 500],
36
+ value: [200, 300],
37
+ animationWindow: 'free',
38
+ plotType: {
39
+ interval: null
40
+ },
41
+ timeBins: null,
42
+ dataId: ['dataset1']
43
+ };
44
+ test('throws when filter type is not timeRange', function () {
45
+ expect(function () {
46
+ return (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
47
+ filter: _objectSpread(_objectSpread({}, baseFilter), {}, {
48
+ type: 'range'
49
+ }),
50
+ timings: [0, 1000]
51
+ });
52
+ }).toThrow("filter type must be 'timeRange'.");
53
+ });
54
+ test('returns free keyframes by default', function () {
55
+ var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
56
+ filter: baseFilter,
57
+ timings: [0, 1000]
58
+ });
59
+ var delta = baseFilter.value[1] - baseFilter.value[0]; // 100
60
+ expect(result.keyframes).toEqual([{
61
+ value: [100, 100 + delta]
62
+ }, {
63
+ value: [500 - delta, 500]
64
+ }]);
65
+ expect((0, _typeof2["default"])(result.easings)).toBe('function');
66
+ expect(result.easings(0.5)).toBe(0.5);
67
+ });
68
+ test('returns incremental keyframes', function () {
69
+ var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
70
+ filter: _objectSpread(_objectSpread({}, baseFilter), {}, {
71
+ animationWindow: 'incremental'
72
+ }),
73
+ timings: [0, 1000]
74
+ });
75
+ expect(result.keyframes).toEqual([{
76
+ value: [200, 201]
77
+ }, {
78
+ value: [200, 500]
79
+ }]);
80
+ });
81
+ test('returns point keyframes', function () {
82
+ var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
83
+ filter: _objectSpread(_objectSpread({}, baseFilter), {}, {
84
+ animationWindow: 'point'
85
+ }),
86
+ timings: [0, 1000]
87
+ });
88
+ expect(result.keyframes).toEqual([{
89
+ value: 100
90
+ }, {
91
+ value: 500
92
+ }]);
93
+ });
94
+ test('returns interval keyframes with bins', function () {
95
+ var bins = [{
96
+ x0: 100,
97
+ x1: 200
98
+ }, {
99
+ x0: 200,
100
+ x1: 300
101
+ }, {
102
+ x0: 300,
103
+ x1: 400
104
+ }];
105
+ var filter = _objectSpread(_objectSpread({}, baseFilter), {}, {
106
+ animationWindow: 'interval',
107
+ plotType: {
108
+ interval: 'day'
109
+ },
110
+ timeBins: {
111
+ dataset1: {
112
+ day: bins
113
+ }
114
+ },
115
+ dataId: ['dataset1']
116
+ });
117
+ var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
118
+ filter: filter,
119
+ timings: [0, 900]
120
+ });
121
+ expect(result.keyframes).toEqual([{
122
+ value: [100, 200]
123
+ }, {
124
+ value: [200, 300]
125
+ }, {
126
+ value: [300, 400]
127
+ }]);
128
+ expect(result.timings).toEqual([0, 300, 600]);
129
+ // hold easing: returns 0 unless p === 1
130
+ expect(result.easings(0)).toBe(0);
131
+ expect(result.easings(0.5)).toBe(0);
132
+ expect(result.easings(1)).toBe(1);
133
+ });
134
+ test('falls back to free keyframes when interval has no bins', function () {
135
+ var filter = _objectSpread(_objectSpread({}, baseFilter), {}, {
136
+ animationWindow: 'interval',
137
+ plotType: {
138
+ interval: null
139
+ },
140
+ timeBins: null
141
+ });
142
+ var result = (0, _hubbleUtils.getTimeRangeFilterKeyframes)({
143
+ filter: filter,
144
+ timings: [0, 1000]
145
+ });
146
+ var delta = baseFilter.value[1] - baseFilter.value[0];
147
+ expect(result.keyframes).toEqual([{
148
+ value: [100, 100 + delta]
149
+ }, {
150
+ value: [500 - delta, 500]
151
+ }]);
152
+ });
153
+ });
154
+ describe('getBeforeLayerId', function () {
155
+ test('returns null when topMapStyle is null', function () {
156
+ expect((0, _hubbleUtils.getBeforeLayerId)(null, {
157
+ layers: [{
158
+ id: 'a'
159
+ }]
160
+ })).toBeNull();
161
+ });
162
+ test('returns null when bottomMapStyle is null', function () {
163
+ expect((0, _hubbleUtils.getBeforeLayerId)({
164
+ layers: [{
165
+ id: 'a'
166
+ }]
167
+ }, null)).toBeNull();
168
+ });
169
+ test('returns null when either has empty layers', function () {
170
+ expect((0, _hubbleUtils.getBeforeLayerId)({
171
+ layers: []
172
+ }, {
173
+ layers: [{
174
+ id: 'a'
175
+ }]
176
+ })).toBeNull();
177
+ });
178
+ test('returns the layer before the first top layer in the bottom style', function () {
179
+ var topMapStyle = {
180
+ layers: [{
181
+ id: 'layer-b'
182
+ }]
183
+ };
184
+ var bottomMapStyle = {
185
+ layers: [{
186
+ id: 'layer-a'
187
+ }, {
188
+ id: 'layer-b'
189
+ }, {
190
+ id: 'layer-c'
191
+ }]
192
+ };
193
+ var result = (0, _hubbleUtils.getBeforeLayerId)(topMapStyle, bottomMapStyle);
194
+ expect(result).toEqual({
195
+ id: 'layer-a'
196
+ });
197
+ });
198
+ test('returns null when first top layer is at index 0 in bottom style', function () {
199
+ var topMapStyle = {
200
+ layers: [{
201
+ id: 'layer-a'
202
+ }]
203
+ };
204
+ var bottomMapStyle = {
205
+ layers: [{
206
+ id: 'layer-a'
207
+ }, {
208
+ id: 'layer-b'
209
+ }]
210
+ };
211
+ expect((0, _hubbleUtils.getBeforeLayerId)(topMapStyle, bottomMapStyle)).toBeNull();
212
+ });
213
+ test('returns null when first top layer is not found in bottom style', function () {
214
+ var topMapStyle = {
215
+ layers: [{
216
+ id: 'missing'
217
+ }]
218
+ };
219
+ var bottomMapStyle = {
220
+ layers: [{
221
+ id: 'layer-a'
222
+ }, {
223
+ id: 'layer-b'
224
+ }]
225
+ };
226
+ expect((0, _hubbleUtils.getBeforeLayerId)(topMapStyle, bottomMapStyle)).toBeNull();
227
+ });
228
+ });
229
+ describe('getStaticMapProps', function () {
230
+ var mockKeplerState = {
231
+ visState: {},
232
+ mapState: {
233
+ latitude: 37.7,
234
+ longitude: -122.4,
235
+ zoom: 10
236
+ },
237
+ mapStyle: {
238
+ styleType: 'dark',
239
+ mapStyles: {
240
+ dark: {
241
+ accessToken: 'style-token'
242
+ }
243
+ },
244
+ bottomMapStyle: {
245
+ id: 'dark-map-style'
246
+ }
247
+ }
248
+ };
249
+ var onViewChange = jest.fn();
250
+ test('spreads mapState into result', function () {
251
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'global-token');
252
+ expect(result.latitude).toBe(37.7);
253
+ expect(result.longitude).toBe(-122.4);
254
+ expect(result.zoom).toBe(10);
255
+ });
256
+ test('uses style accessToken when available', function () {
257
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'global-token');
258
+ expect(result.mapboxApiAccessToken).toBe('style-token');
259
+ });
260
+ test('falls back to global token when style has no accessToken', function () {
261
+ var state = _objectSpread(_objectSpread({}, mockKeplerState), {}, {
262
+ mapStyle: _objectSpread(_objectSpread({}, mockKeplerState.mapStyle), {}, {
263
+ mapStyles: {
264
+ dark: {}
265
+ }
266
+ })
267
+ });
268
+ var result = (0, _hubbleUtils.getStaticMapProps)(state, onViewChange, 'global-token');
269
+ expect(result.mapboxApiAccessToken).toBe('global-token');
270
+ });
271
+ test('sets preserveDrawingBuffer to true', function () {
272
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
273
+ expect(result.preserveDrawingBuffer).toBe(true);
274
+ });
275
+ test('passes bottomMapStyle as mapStyle', function () {
276
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
277
+ expect(result.mapStyle).toEqual({
278
+ id: 'dark-map-style'
279
+ });
280
+ });
281
+ test('passes onViewChange as onViewportChange', function () {
282
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
283
+ expect(result.onViewportChange).toBe(onViewChange);
284
+ });
285
+ test('includes mapLib as a Promise (always maplibre-gl)', function () {
286
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
287
+ expect(result.mapLib).toBeDefined();
288
+ expect(result.mapLib).toBeInstanceOf(Promise);
289
+ });
290
+ test('provides transformRequest that handles mapbox:// URLs', function () {
291
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'global-token');
292
+ expect((0, _typeof2["default"])(result.transformRequest)).toBe('function');
293
+ var transformed = result.transformRequest('mapbox://styles/user/style1', 'Style');
294
+ expect(transformed.url).toContain('api.mapbox.com');
295
+ var regular = result.transformRequest('https://example.com/tiles', 'Source');
296
+ expect(regular.url).toBe('https://example.com/tiles');
297
+ });
298
+ test('converts mapbox:// URLs in style object for mapbox styles', function () {
299
+ var _require = require('@kepler.gl/utils'),
300
+ getBaseMapLibrary = _require.getBaseMapLibrary;
301
+ getBaseMapLibrary.mockReturnValueOnce('mapbox');
302
+ var state = _objectSpread(_objectSpread({}, mockKeplerState), {}, {
303
+ mapStyle: _objectSpread(_objectSpread({}, mockKeplerState.mapStyle), {}, {
304
+ bottomMapStyle: {
305
+ id: 'mapbox-style',
306
+ sprite: 'mapbox://sprites/user/style1',
307
+ glyphs: 'mapbox://fonts/user/{fontstack}/{range}.pbf',
308
+ sources: {
309
+ composite: {
310
+ url: 'mapbox://mapbox.mapbox-streets-v8'
311
+ }
312
+ }
313
+ }
314
+ })
315
+ });
316
+ var result = (0, _hubbleUtils.getStaticMapProps)(state, onViewChange, 'token');
317
+ expect(result.mapStyle.sprite).toContain('api.mapbox.com');
318
+ expect(result.mapStyle.glyphs).toContain('api.mapbox.com');
319
+ expect(result.mapStyle.sources.composite.url).toContain('api.mapbox.com');
320
+ });
321
+ test('does not convert style URLs for non-mapbox styles', function () {
322
+ var result = (0, _hubbleUtils.getStaticMapProps)(mockKeplerState, onViewChange, 'token');
323
+ expect(result.mapStyle).toEqual({
324
+ id: 'dark-map-style'
325
+ });
326
+ });
327
+ });
328
+ describe('getAnimatableFilters', function () {
329
+ test('returns empty array when no filters', function () {
330
+ var state = {
331
+ visState: {
332
+ filters: []
333
+ },
334
+ mapState: {},
335
+ mapStyle: {}
336
+ };
337
+ expect((0, _hubbleUtils.getAnimatableFilters)(state)).toEqual([]);
338
+ });
339
+ test('returns empty array when visState.filters is undefined', function () {
340
+ var state = {
341
+ visState: {},
342
+ mapState: {},
343
+ mapStyle: {}
344
+ };
345
+ expect((0, _hubbleUtils.getAnimatableFilters)(state)).toEqual([]);
346
+ });
347
+ test('filters only timeRange filters with enlarged view', function () {
348
+ var filters = [{
349
+ type: _constants.FILTER_TYPES.timeRange,
350
+ view: _constants.FILTER_VIEW_TYPES.enlarged,
351
+ id: 'f1'
352
+ }, {
353
+ type: _constants.FILTER_TYPES.range,
354
+ view: _constants.FILTER_VIEW_TYPES.enlarged,
355
+ id: 'f2'
356
+ }, {
357
+ type: _constants.FILTER_TYPES.timeRange,
358
+ view: _constants.FILTER_VIEW_TYPES.side,
359
+ id: 'f3'
360
+ }];
361
+ var state = {
362
+ visState: {
363
+ filters: filters
364
+ },
365
+ mapState: {},
366
+ mapStyle: {}
367
+ };
368
+ var result = (0, _hubbleUtils.getAnimatableFilters)(state);
369
+ expect(result).toHaveLength(1);
370
+ expect(result[0].id).toBe('f1');
371
+ });
372
+ test('includes timeRange filters synced with layer timeline', function () {
373
+ var filters = [{
374
+ type: _constants.FILTER_TYPES.timeRange,
375
+ view: _constants.FILTER_VIEW_TYPES.side,
376
+ syncedWithLayerTimeline: true,
377
+ id: 'synced'
378
+ }, {
379
+ type: _constants.FILTER_TYPES.timeRange,
380
+ view: _constants.FILTER_VIEW_TYPES.side,
381
+ syncedWithLayerTimeline: false,
382
+ id: 'not-synced'
383
+ }];
384
+ var state = {
385
+ visState: {
386
+ filters: filters
387
+ },
388
+ mapState: {},
389
+ mapStyle: {}
390
+ };
391
+ var result = (0, _hubbleUtils.getAnimatableFilters)(state);
392
+ expect(result).toHaveLength(1);
393
+ expect(result[0].id).toBe('synced');
394
+ });
395
+ });
396
+ });
397
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9odWJibGVVdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiamVzdCIsIm1vY2siLCJyZXF1aXJlQWN0dWFsIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJmbiIsImlzTWFwYm94VVJMIiwidXJsIiwic3RhcnRzV2l0aCIsInRyYW5zZm9ybU1hcGJveFVybCIsIl9yZXNvdXJjZVR5cGUiLCJ0b2tlbiIsImNvbmNhdCIsInJlcGxhY2UiLCJkZXNjcmliZSIsImJhc2VGaWx0ZXIiLCJ0eXBlIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiZG9tYWluIiwidmFsdWUiLCJhbmltYXRpb25XaW5kb3ciLCJwbG90VHlwZSIsImludGVydmFsIiwidGltZUJpbnMiLCJkYXRhSWQiLCJ0ZXN0IiwiZXhwZWN0IiwiZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzIiwidGltaW5ncyIsInRvVGhyb3ciLCJyZXN1bHQiLCJkZWx0YSIsImtleWZyYW1lcyIsInRvRXF1YWwiLCJfdHlwZW9mMiIsImVhc2luZ3MiLCJ0b0JlIiwiYmlucyIsIngwIiwieDEiLCJkYXRhc2V0MSIsImRheSIsImdldEJlZm9yZUxheWVySWQiLCJsYXllcnMiLCJpZCIsInRvQmVOdWxsIiwidG9wTWFwU3R5bGUiLCJib3R0b21NYXBTdHlsZSIsIm1vY2tLZXBsZXJTdGF0ZSIsInZpc1N0YXRlIiwibWFwU3RhdGUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInpvb20iLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsIm1hcFN0eWxlcyIsImRhcmsiLCJhY2Nlc3NUb2tlbiIsIm9uVmlld0NoYW5nZSIsImdldFN0YXRpY01hcFByb3BzIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJzdGF0ZSIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uVmlld3BvcnRDaGFuZ2UiLCJtYXBMaWIiLCJ0b0JlRGVmaW5lZCIsInRvQmVJbnN0YW5jZU9mIiwiUHJvbWlzZSIsInRyYW5zZm9ybVJlcXVlc3QiLCJ0cmFuc2Zvcm1lZCIsInRvQ29udGFpbiIsInJlZ3VsYXIiLCJfcmVxdWlyZSIsIm1vY2tSZXR1cm5WYWx1ZU9uY2UiLCJzcHJpdGUiLCJnbHlwaHMiLCJzb3VyY2VzIiwiY29tcG9zaXRlIiwiZmlsdGVycyIsImdldEFuaW1hdGFibGVGaWx0ZXJzIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJyYW5nZSIsInNpZGUiLCJ0b0hhdmVMZW5ndGgiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvaHViYmxlLXV0aWxzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7RklMVEVSX1RZUEVTLCBGSUxURVJfVklFV19UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzLFxuICBnZXRCZWZvcmVMYXllcklkLFxuICBnZXRTdGF0aWNNYXBQcm9wcyxcbiAgZ2V0QW5pbWF0YWJsZUZpbHRlcnNcbn0gZnJvbSAnLi9odWJibGUtdXRpbHMnO1xuXG5qZXN0Lm1vY2soJ0BrZXBsZXIuZ2wvdXRpbHMnLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoJ0BrZXBsZXIuZ2wvdXRpbHMnKSxcbiAgZ2V0QmFzZU1hcExpYnJhcnk6IGplc3QuZm4oKCkgPT4gJ21hcGxpYnJlJylcbn0pKTtcblxuamVzdC5tb2NrKCdtYXBsaWJyZWdsLW1hcGJveC1yZXF1ZXN0LXRyYW5zZm9ybWVyJywgKCkgPT4gKHtcbiAgaXNNYXBib3hVUkw6IGplc3QuZm4oKHVybDogc3RyaW5nKSA9PiB1cmwuc3RhcnRzV2l0aCgnbWFwYm94OicpKSxcbiAgdHJhbnNmb3JtTWFwYm94VXJsOiBqZXN0LmZuKCh1cmw6IHN0cmluZywgX3Jlc291cmNlVHlwZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiAoe1xuICAgIHVybDogYCR7dXJsLnJlcGxhY2UoJ21hcGJveDovLycsICdodHRwczovL2FwaS5tYXBib3guY29tLycpfT9hY2Nlc3NfdG9rZW49JHt0b2tlbn1gXG4gIH0pKVxufSkpO1xuXG5kZXNjcmliZSgnaHViYmxlLXV0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VGaWx0ZXIgPSB7XG4gICAgICB0eXBlOiBGSUxURVJfVFlQRVMudGltZVJhbmdlLFxuICAgICAgZG9tYWluOiBbMTAwLCA1MDBdLFxuICAgICAgdmFsdWU6IFsyMDAsIDMwMF0sXG4gICAgICBhbmltYXRpb25XaW5kb3c6ICdmcmVlJyxcbiAgICAgIHBsb3RUeXBlOiB7aW50ZXJ2YWw6IG51bGx9LFxuICAgICAgdGltZUJpbnM6IG51bGwsXG4gICAgICBkYXRhSWQ6IFsnZGF0YXNldDEnXVxuICAgIH07XG5cbiAgICB0ZXN0KCd0aHJvd3Mgd2hlbiBmaWx0ZXIgdHlwZSBpcyBub3QgdGltZVJhbmdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyh7XG4gICAgICAgICAgZmlsdGVyOiB7Li4uYmFzZUZpbHRlciwgdHlwZTogJ3JhbmdlJ30sXG4gICAgICAgICAgdGltaW5nczogWzAsIDEwMDBdXG4gICAgICAgIH0pXG4gICAgICApLnRvVGhyb3coXCJmaWx0ZXIgdHlwZSBtdXN0IGJlICd0aW1lUmFuZ2UnLlwiKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZnJlZSBrZXlmcmFtZXMgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyh7XG4gICAgICAgIGZpbHRlcjogYmFzZUZpbHRlcixcbiAgICAgICAgdGltaW5nczogWzAsIDEwMDBdXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGVsdGEgPSBiYXNlRmlsdGVyLnZhbHVlWzFdIC0gYmFzZUZpbHRlci52YWx1ZVswXTsgLy8gMTAwXG4gICAgICBleHBlY3QocmVzdWx0LmtleWZyYW1lcykudG9FcXVhbChbe3ZhbHVlOiBbMTAwLCAxMDAgKyBkZWx0YV19LCB7dmFsdWU6IFs1MDAgLSBkZWx0YSwgNTAwXX1dKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgcmVzdWx0LmVhc2luZ3MpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgICBleHBlY3QocmVzdWx0LmVhc2luZ3MoMC41KSkudG9CZSgwLjUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBpbmNyZW1lbnRhbCBrZXlmcmFtZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMoe1xuICAgICAgICBmaWx0ZXI6IHsuLi5iYXNlRmlsdGVyLCBhbmltYXRpb25XaW5kb3c6ICdpbmNyZW1lbnRhbCd9LFxuICAgICAgICB0aW1pbmdzOiBbMCwgMTAwMF1cbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmtleWZyYW1lcykudG9FcXVhbChbe3ZhbHVlOiBbMjAwLCAyMDFdfSwge3ZhbHVlOiBbMjAwLCA1MDBdfV0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBwb2ludCBrZXlmcmFtZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMoe1xuICAgICAgICBmaWx0ZXI6IHsuLi5iYXNlRmlsdGVyLCBhbmltYXRpb25XaW5kb3c6ICdwb2ludCd9LFxuICAgICAgICB0aW1pbmdzOiBbMCwgMTAwMF1cbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmtleWZyYW1lcykudG9FcXVhbChbe3ZhbHVlOiAxMDB9LCB7dmFsdWU6IDUwMH1dKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgaW50ZXJ2YWwga2V5ZnJhbWVzIHdpdGggYmlucycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJpbnMgPSBbXG4gICAgICAgIHt4MDogMTAwLCB4MTogMjAwfSxcbiAgICAgICAge3gwOiAyMDAsIHgxOiAzMDB9LFxuICAgICAgICB7eDA6IDMwMCwgeDE6IDQwMH1cbiAgICAgIF07XG4gICAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmJhc2VGaWx0ZXIsXG4gICAgICAgIGFuaW1hdGlvbldpbmRvdzogJ2ludGVydmFsJyxcbiAgICAgICAgcGxvdFR5cGU6IHtpbnRlcnZhbDogJ2RheSd9LFxuICAgICAgICB0aW1lQmluczoge2RhdGFzZXQxOiB7ZGF5OiBiaW5zfX0sXG4gICAgICAgIGRhdGFJZDogWydkYXRhc2V0MSddXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMoe1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHRpbWluZ3M6IFswLCA5MDBdXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5rZXlmcmFtZXMpLnRvRXF1YWwoW1xuICAgICAgICB7dmFsdWU6IFsxMDAsIDIwMF19LFxuICAgICAgICB7dmFsdWU6IFsyMDAsIDMwMF19LFxuICAgICAgICB7dmFsdWU6IFszMDAsIDQwMF19XG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChyZXN1bHQudGltaW5ncykudG9FcXVhbChbMCwgMzAwLCA2MDBdKTtcbiAgICAgIC8vIGhvbGQgZWFzaW5nOiByZXR1cm5zIDAgdW5sZXNzIHAgPT09IDFcbiAgICAgIGV4cGVjdChyZXN1bHQuZWFzaW5ncygwKSkudG9CZSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZWFzaW5ncygwLjUpKS50b0JlKDApO1xuICAgICAgZXhwZWN0KHJlc3VsdC5lYXNpbmdzKDEpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZmFsbHMgYmFjayB0byBmcmVlIGtleWZyYW1lcyB3aGVuIGludGVydmFsIGhhcyBubyBiaW5zJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgICAuLi5iYXNlRmlsdGVyLFxuICAgICAgICBhbmltYXRpb25XaW5kb3c6ICdpbnRlcnZhbCcsXG4gICAgICAgIHBsb3RUeXBlOiB7aW50ZXJ2YWw6IG51bGx9LFxuICAgICAgICB0aW1lQmluczogbnVsbFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzKHtcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICB0aW1pbmdzOiBbMCwgMTAwMF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZWx0YSA9IGJhc2VGaWx0ZXIudmFsdWVbMV0gLSBiYXNlRmlsdGVyLnZhbHVlWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdC5rZXlmcmFtZXMpLnRvRXF1YWwoW3t2YWx1ZTogWzEwMCwgMTAwICsgZGVsdGFdfSwge3ZhbHVlOiBbNTAwIC0gZGVsdGEsIDUwMF19XSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRCZWZvcmVMYXllcklkJywgKCkgPT4ge1xuICAgIHRlc3QoJ3JldHVybnMgbnVsbCB3aGVuIHRvcE1hcFN0eWxlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0QmVmb3JlTGF5ZXJJZChudWxsLCB7bGF5ZXJzOiBbe2lkOiAnYSd9XX0pKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBudWxsIHdoZW4gYm90dG9tTWFwU3R5bGUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRCZWZvcmVMYXllcklkKHtsYXllcnM6IFt7aWQ6ICdhJ31dfSwgbnVsbCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIG51bGwgd2hlbiBlaXRoZXIgaGFzIGVtcHR5IGxheWVycycsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRCZWZvcmVMYXllcklkKHtsYXllcnM6IFtdfSwge2xheWVyczogW3tpZDogJ2EnfV19KSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgdGhlIGxheWVyIGJlZm9yZSB0aGUgZmlyc3QgdG9wIGxheWVyIGluIHRoZSBib3R0b20gc3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0b3BNYXBTdHlsZSA9IHtsYXllcnM6IFt7aWQ6ICdsYXllci1iJ31dfTtcbiAgICAgIGNvbnN0IGJvdHRvbU1hcFN0eWxlID0ge1xuICAgICAgICBsYXllcnM6IFt7aWQ6ICdsYXllci1hJ30sIHtpZDogJ2xheWVyLWInfSwge2lkOiAnbGF5ZXItYyd9XVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0QmVmb3JlTGF5ZXJJZCh0b3BNYXBTdHlsZSwgYm90dG9tTWFwU3R5bGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7aWQ6ICdsYXllci1hJ30pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBudWxsIHdoZW4gZmlyc3QgdG9wIGxheWVyIGlzIGF0IGluZGV4IDAgaW4gYm90dG9tIHN0eWxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdG9wTWFwU3R5bGUgPSB7bGF5ZXJzOiBbe2lkOiAnbGF5ZXItYSd9XX07XG4gICAgICBjb25zdCBib3R0b21NYXBTdHlsZSA9IHtsYXllcnM6IFt7aWQ6ICdsYXllci1hJ30sIHtpZDogJ2xheWVyLWInfV19O1xuXG4gICAgICBleHBlY3QoZ2V0QmVmb3JlTGF5ZXJJZCh0b3BNYXBTdHlsZSwgYm90dG9tTWFwU3R5bGUpKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBudWxsIHdoZW4gZmlyc3QgdG9wIGxheWVyIGlzIG5vdCBmb3VuZCBpbiBib3R0b20gc3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0b3BNYXBTdHlsZSA9IHtsYXllcnM6IFt7aWQ6ICdtaXNzaW5nJ31dfTtcbiAgICAgIGNvbnN0IGJvdHRvbU1hcFN0eWxlID0ge2xheWVyczogW3tpZDogJ2xheWVyLWEnfSwge2lkOiAnbGF5ZXItYid9XX07XG5cbiAgICAgIGV4cGVjdChnZXRCZWZvcmVMYXllcklkKHRvcE1hcFN0eWxlLCBib3R0b21NYXBTdHlsZSkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTdGF0aWNNYXBQcm9wcycsICgpID0+IHtcbiAgICBjb25zdCBtb2NrS2VwbGVyU3RhdGUgPSB7XG4gICAgICB2aXNTdGF0ZToge30sXG4gICAgICBtYXBTdGF0ZToge2xhdGl0dWRlOiAzNy43LCBsb25naXR1ZGU6IC0xMjIuNCwgem9vbTogMTB9LFxuICAgICAgbWFwU3R5bGU6IHtcbiAgICAgICAgc3R5bGVUeXBlOiAnZGFyaycsXG4gICAgICAgIG1hcFN0eWxlczoge1xuICAgICAgICAgIGRhcms6IHthY2Nlc3NUb2tlbjogJ3N0eWxlLXRva2VuJ31cbiAgICAgICAgfSxcbiAgICAgICAgYm90dG9tTWFwU3R5bGU6IHtpZDogJ2RhcmstbWFwLXN0eWxlJ31cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uVmlld0NoYW5nZSA9IGplc3QuZm4oKTtcblxuICAgIHRlc3QoJ3NwcmVhZHMgbWFwU3RhdGUgaW50byByZXN1bHQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRTdGF0aWNNYXBQcm9wcyhtb2NrS2VwbGVyU3RhdGUsIG9uVmlld0NoYW5nZSwgJ2dsb2JhbC10b2tlbicpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LmxhdGl0dWRlKS50b0JlKDM3LjcpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5sb25naXR1ZGUpLnRvQmUoLTEyMi40KTtcbiAgICAgIGV4cGVjdChyZXN1bHQuem9vbSkudG9CZSgxMCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIHN0eWxlIGFjY2Vzc1Rva2VuIHdoZW4gYXZhaWxhYmxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICdnbG9iYWwtdG9rZW4nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQubWFwYm94QXBpQWNjZXNzVG9rZW4pLnRvQmUoJ3N0eWxlLXRva2VuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdmYWxscyBiYWNrIHRvIGdsb2JhbCB0b2tlbiB3aGVuIHN0eWxlIGhhcyBubyBhY2Nlc3NUb2tlbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAuLi5tb2NrS2VwbGVyU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlOiB7XG4gICAgICAgICAgLi4ubW9ja0tlcGxlclN0YXRlLm1hcFN0eWxlLFxuICAgICAgICAgIG1hcFN0eWxlczoge2Rhcms6IHt9fVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMoc3RhdGUsIG9uVmlld0NoYW5nZSwgJ2dsb2JhbC10b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBib3hBcGlBY2Nlc3NUb2tlbikudG9CZSgnZ2xvYmFsLXRva2VuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzZXRzIHByZXNlcnZlRHJhd2luZ0J1ZmZlciB0byB0cnVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwYXNzZXMgYm90dG9tTWFwU3R5bGUgYXMgbWFwU3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRTdGF0aWNNYXBQcm9wcyhtb2NrS2VwbGVyU3RhdGUsIG9uVmlld0NoYW5nZSwgJ3Rva2VuJyk7XG4gICAgICBleHBlY3QocmVzdWx0Lm1hcFN0eWxlKS50b0VxdWFsKHtpZDogJ2RhcmstbWFwLXN0eWxlJ30pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncGFzc2VzIG9uVmlld0NoYW5nZSBhcyBvblZpZXdwb3J0Q2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5vblZpZXdwb3J0Q2hhbmdlKS50b0JlKG9uVmlld0NoYW5nZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpbmNsdWRlcyBtYXBMaWIgYXMgYSBQcm9taXNlIChhbHdheXMgbWFwbGlicmUtZ2wpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBMaWIpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QocmVzdWx0Lm1hcExpYikudG9CZUluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwcm92aWRlcyB0cmFuc2Zvcm1SZXF1ZXN0IHRoYXQgaGFuZGxlcyBtYXBib3g6Ly8gVVJMcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFN0YXRpY01hcFByb3BzKG1vY2tLZXBsZXJTdGF0ZSwgb25WaWV3Q2hhbmdlLCAnZ2xvYmFsLXRva2VuJyk7XG4gICAgICBleHBlY3QodHlwZW9mIHJlc3VsdC50cmFuc2Zvcm1SZXF1ZXN0KS50b0JlKCdmdW5jdGlvbicpO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHJlc3VsdC50cmFuc2Zvcm1SZXF1ZXN0KCdtYXBib3g6Ly9zdHlsZXMvdXNlci9zdHlsZTEnLCAnU3R5bGUnKTtcbiAgICAgIGV4cGVjdCh0cmFuc2Zvcm1lZC51cmwpLnRvQ29udGFpbignYXBpLm1hcGJveC5jb20nKTtcblxuICAgICAgY29uc3QgcmVndWxhciA9IHJlc3VsdC50cmFuc2Zvcm1SZXF1ZXN0KCdodHRwczovL2V4YW1wbGUuY29tL3RpbGVzJywgJ1NvdXJjZScpO1xuICAgICAgZXhwZWN0KHJlZ3VsYXIudXJsKS50b0JlKCdodHRwczovL2V4YW1wbGUuY29tL3RpbGVzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjb252ZXJ0cyBtYXBib3g6Ly8gVVJMcyBpbiBzdHlsZSBvYmplY3QgZm9yIG1hcGJveCBzdHlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7Z2V0QmFzZU1hcExpYnJhcnl9ID0gcmVxdWlyZSgnQGtlcGxlci5nbC91dGlscycpO1xuICAgICAgZ2V0QmFzZU1hcExpYnJhcnkubW9ja1JldHVyblZhbHVlT25jZSgnbWFwYm94Jyk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAuLi5tb2NrS2VwbGVyU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlOiB7XG4gICAgICAgICAgLi4ubW9ja0tlcGxlclN0YXRlLm1hcFN0eWxlLFxuICAgICAgICAgIGJvdHRvbU1hcFN0eWxlOiB7XG4gICAgICAgICAgICBpZDogJ21hcGJveC1zdHlsZScsXG4gICAgICAgICAgICBzcHJpdGU6ICdtYXBib3g6Ly9zcHJpdGVzL3VzZXIvc3R5bGUxJyxcbiAgICAgICAgICAgIGdseXBoczogJ21hcGJveDovL2ZvbnRzL3VzZXIve2ZvbnRzdGFja30ve3JhbmdlfS5wYmYnLFxuICAgICAgICAgICAgc291cmNlczoge1xuICAgICAgICAgICAgICBjb21wb3NpdGU6IHt1cmw6ICdtYXBib3g6Ly9tYXBib3gubWFwYm94LXN0cmVldHMtdjgnfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMoc3RhdGUsIG9uVmlld0NoYW5nZSwgJ3Rva2VuJyk7XG4gICAgICBleHBlY3QocmVzdWx0Lm1hcFN0eWxlLnNwcml0ZSkudG9Db250YWluKCdhcGkubWFwYm94LmNvbScpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBTdHlsZS5nbHlwaHMpLnRvQ29udGFpbignYXBpLm1hcGJveC5jb20nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQubWFwU3R5bGUuc291cmNlcy5jb21wb3NpdGUudXJsKS50b0NvbnRhaW4oJ2FwaS5tYXBib3guY29tJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkb2VzIG5vdCBjb252ZXJ0IHN0eWxlIFVSTHMgZm9yIG5vbi1tYXBib3ggc3R5bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U3RhdGljTWFwUHJvcHMobW9ja0tlcGxlclN0YXRlLCBvblZpZXdDaGFuZ2UsICd0b2tlbicpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5tYXBTdHlsZSkudG9FcXVhbCh7aWQ6ICdkYXJrLW1hcC1zdHlsZSd9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFuaW1hdGFibGVGaWx0ZXJzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiBubyBmaWx0ZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB7dmlzU3RhdGU6IHtmaWx0ZXJzOiBbXX0sIG1hcFN0YXRlOiB7fSwgbWFwU3R5bGU6IHt9fTtcbiAgICAgIGV4cGVjdChnZXRBbmltYXRhYmxlRmlsdGVycyhzdGF0ZSkpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHZpc1N0YXRlLmZpbHRlcnMgaXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB7dmlzU3RhdGU6IHt9LCBtYXBTdGF0ZToge30sIG1hcFN0eWxlOiB7fX07XG4gICAgICBleHBlY3QoZ2V0QW5pbWF0YWJsZUZpbHRlcnMoc3RhdGUpKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2ZpbHRlcnMgb25seSB0aW1lUmFuZ2UgZmlsdGVycyB3aXRoIGVubGFyZ2VkIHZpZXcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gW1xuICAgICAgICB7dHlwZTogRklMVEVSX1RZUEVTLnRpbWVSYW5nZSwgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsIGlkOiAnZjEnfSxcbiAgICAgICAge3R5cGU6IEZJTFRFUl9UWVBFUy5yYW5nZSwgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsIGlkOiAnZjInfSxcbiAgICAgICAge3R5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGUsIGlkOiAnZjMnfVxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN0YXRlID0ge3Zpc1N0YXRlOiB7ZmlsdGVyc30sIG1hcFN0YXRlOiB7fSwgbWFwU3R5bGU6IHt9fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEFuaW1hdGFibGVGaWx0ZXJzKHN0YXRlKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KHJlc3VsdFswXS5pZCkudG9CZSgnZjEnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2luY2x1ZGVzIHRpbWVSYW5nZSBmaWx0ZXJzIHN5bmNlZCB3aXRoIGxheWVyIHRpbWVsaW5lJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsXG4gICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZSxcbiAgICAgICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZSxcbiAgICAgICAgICBpZDogJ3N5bmNlZCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsXG4gICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZSxcbiAgICAgICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2UsXG4gICAgICAgICAgaWQ6ICdub3Qtc3luY2VkJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgY29uc3Qgc3RhdGUgPSB7dmlzU3RhdGU6IHtmaWx0ZXJzfSwgbWFwU3RhdGU6IHt9LCBtYXBTdHlsZToge319O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0QW5pbWF0YWJsZUZpbHRlcnMoc3RhdGUpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICBleHBlY3QocmVzdWx0WzBdLmlkKS50b0JlKCdzeW5jZWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFLd0IsU0FBQUUsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxD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
@@ -1,2 +1,2 @@
1
- declare const ModalDialogFactory: () => import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<import("../common/modal").ModalDialogOwnProps & Omit<import("react-modal").Props, "className" | "style" | "ariaHideApp"> & import("react").RefAttributes<import("../common/modal").ModalDialog>, never>> & Omit<typeof import("../common/modal").ModalDialog, keyof import("react").Component<any, {}, any>>;
1
+ declare const ModalDialogFactory: () => import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("../common/modal").ModalDialogOwnProps & Omit<import("react-modal").Props, "className" | "style" | "ariaHideApp"> & import("react").RefAttributes<import("../common/modal").ModalDialog>, never> & Partial<Pick<import("../common/modal").ModalDialogOwnProps & Omit<import("react-modal").Props, "className" | "style" | "ariaHideApp"> & import("react").RefAttributes<import("../common/modal").ModalDialog>, never>>> & string & Omit<typeof import("../common/modal").ModalDialog, keyof import("react").Component<any, {}, any>>;
2
2
  export default ModalDialogFactory;
@@ -2,10 +2,8 @@ import React from 'react';
2
2
  import { ImageModalContainerProps } from './image-modal-container';
3
3
  import { Provider } from '@kepler.gl/cloud-providers';
4
4
  import { cleanupExportImage as cleanupExportImageAction } from '@kepler.gl/actions';
5
- export declare const StyledInputLabel: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, never>>;
6
- export declare const StyleSharingUrl: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<import("styled-components/dist/types").FastOmit<import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
7
- ref?: ((instance: HTMLDivElement | null) => void | React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | React.RefObject<HTMLDivElement> | null | undefined;
8
- }>, never>, never>>;
5
+ export declare const StyledInputLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, never>>> & string;
6
+ export declare const StyleSharingUrl: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>> & React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement>, "className"> & Partial<Pick<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof React.ClassAttributes<HTMLDivElement> | keyof React.HTMLAttributes<HTMLDivElement>> & React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement>, "className">>> & string;
9
7
  interface SharingUrlProps {
10
8
  url: string;
11
9
  message?: string;
@@ -0,0 +1,10 @@
1
+ export type SwipeEasing = 'linear' | 'ease-in-out';
2
+ /**
3
+ * Compute the swipe percentage at a given time.
4
+ */
5
+ export declare function getSwipePercentageAtTime(timeMs: number, durationMs: number, startPct: number, endPct: number, easing?: SwipeEasing): number;
6
+ /**
7
+ * Composite two canvases (left/right map views) with a swipe divider
8
+ * into a single output canvas.
9
+ */
10
+ export declare function compositeSwipeFrame(leftCanvas: HTMLCanvasElement, rightCanvas: HTMLCanvasElement, outputCanvas: HTMLCanvasElement, percentage: number, showDivider?: boolean): void;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.compositeSwipeFrame = compositeSwipeFrame;
7
+ exports.getSwipePercentageAtTime = getSwipePercentageAtTime;
8
+ var _popmotion = require("popmotion");
9
+ // SPDX-License-Identifier: MIT
10
+ // Copyright contributors to the kepler.gl project
11
+
12
+ var linear = function linear(p) {
13
+ return p;
14
+ };
15
+ var EASING_MAP = {
16
+ linear: linear,
17
+ 'ease-in-out': _popmotion.easeInOut
18
+ };
19
+
20
+ /**
21
+ * Compute the swipe percentage at a given time.
22
+ */
23
+ function getSwipePercentageAtTime(timeMs, durationMs, startPct, endPct) {
24
+ var easing = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'ease-in-out';
25
+ var progress = Math.max(0, Math.min(1, timeMs / durationMs));
26
+ var easedProgress = EASING_MAP[easing](progress);
27
+ return startPct + (endPct - startPct) * easedProgress;
28
+ }
29
+ var HANDLE_RADIUS = 14;
30
+ var ARROW_SIZE = 6;
31
+
32
+ /**
33
+ * Draw a swipe divider (line + circular handle with arrows) onto a 2D canvas context.
34
+ */
35
+ function drawSwipeDivider(ctx, splitX, height) {
36
+ ctx.save();
37
+
38
+ // Divider line
39
+ ctx.strokeStyle = '#FFFFFF';
40
+ ctx.lineWidth = 2;
41
+ ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
42
+ ctx.shadowBlur = 4;
43
+ ctx.beginPath();
44
+ ctx.moveTo(splitX, 0);
45
+ ctx.lineTo(splitX, height);
46
+ ctx.stroke();
47
+
48
+ // Handle circle
49
+ var cy = height / 2;
50
+ ctx.shadowBlur = 6;
51
+ ctx.beginPath();
52
+ ctx.arc(splitX, cy, HANDLE_RADIUS, 0, Math.PI * 2);
53
+ ctx.fillStyle = '#29323C';
54
+ ctx.fill();
55
+ ctx.strokeStyle = '#FFFFFF';
56
+ ctx.lineWidth = 2;
57
+ ctx.stroke();
58
+ ctx.shadowBlur = 0;
59
+
60
+ // Left arrow
61
+ ctx.fillStyle = '#FFFFFF';
62
+ ctx.beginPath();
63
+ ctx.moveTo(splitX - ARROW_SIZE - 3, cy);
64
+ ctx.lineTo(splitX - 3, cy - ARROW_SIZE);
65
+ ctx.lineTo(splitX - 3, cy + ARROW_SIZE);
66
+ ctx.closePath();
67
+ ctx.fill();
68
+
69
+ // Right arrow
70
+ ctx.beginPath();
71
+ ctx.moveTo(splitX + ARROW_SIZE + 3, cy);
72
+ ctx.lineTo(splitX + 3, cy - ARROW_SIZE);
73
+ ctx.lineTo(splitX + 3, cy + ARROW_SIZE);
74
+ ctx.closePath();
75
+ ctx.fill();
76
+ ctx.restore();
77
+ }
78
+
79
+ /**
80
+ * Composite two canvases (left/right map views) with a swipe divider
81
+ * into a single output canvas.
82
+ */
83
+ function compositeSwipeFrame(leftCanvas, rightCanvas, outputCanvas, percentage) {
84
+ var showDivider = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
85
+ var ctx = outputCanvas.getContext('2d');
86
+ if (!ctx) return;
87
+ var w = outputCanvas.width;
88
+ var h = outputCanvas.height;
89
+ var splitX = Math.round(w * percentage / 100);
90
+ ctx.clearRect(0, 0, w, h);
91
+
92
+ // Draw right (background) canvas fully
93
+ ctx.drawImage(rightCanvas, 0, 0, w, h);
94
+
95
+ // Draw left (foreground) canvas clipped to 0..splitX
96
+ ctx.save();
97
+ ctx.beginPath();
98
+ ctx.rect(0, 0, splitX, h);
99
+ ctx.clip();
100
+ ctx.drawImage(leftCanvas, 0, 0, w, h);
101
+ ctx.restore();
102
+
103
+ // Draw the divider
104
+ if (showDivider) {
105
+ drawSwipeDivider(ctx, splitX, h);
106
+ }
107
+ }
108
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcG9wbW90aW9uIiwicmVxdWlyZSIsImxpbmVhciIsInAiLCJFQVNJTkdfTUFQIiwiZWFzZUluT3V0IiwiZ2V0U3dpcGVQZXJjZW50YWdlQXRUaW1lIiwidGltZU1zIiwiZHVyYXRpb25NcyIsInN0YXJ0UGN0IiwiZW5kUGN0IiwiZWFzaW5nIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicHJvZ3Jlc3MiLCJNYXRoIiwibWF4IiwibWluIiwiZWFzZWRQcm9ncmVzcyIsIkhBTkRMRV9SQURJVVMiLCJBUlJPV19TSVpFIiwiZHJhd1N3aXBlRGl2aWRlciIsImN0eCIsInNwbGl0WCIsImhlaWdodCIsInNhdmUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsInNoYWRvd0NvbG9yIiwic2hhZG93Qmx1ciIsImJlZ2luUGF0aCIsIm1vdmVUbyIsImxpbmVUbyIsInN0cm9rZSIsImN5IiwiYXJjIiwiUEkiLCJmaWxsU3R5bGUiLCJmaWxsIiwiY2xvc2VQYXRoIiwicmVzdG9yZSIsImNvbXBvc2l0ZVN3aXBlRnJhbWUiLCJsZWZ0Q2FudmFzIiwicmlnaHRDYW52YXMiLCJvdXRwdXRDYW52YXMiLCJwZXJjZW50YWdlIiwic2hvd0RpdmlkZXIiLCJnZXRDb250ZXh0IiwidyIsIndpZHRoIiwiaCIsInJvdW5kIiwiY2xlYXJSZWN0IiwiZHJhd0ltYWdlIiwicmVjdCIsImNsaXAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kYWxzL3N3aXBlLWNvbXBvc2l0ZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Vhc2VJbk91dH0gZnJvbSAncG9wbW90aW9uJztcblxuZXhwb3J0IHR5cGUgU3dpcGVFYXNpbmcgPSAnbGluZWFyJyB8ICdlYXNlLWluLW91dCc7XG5cbmNvbnN0IGxpbmVhciA9IChwOiBudW1iZXIpOiBudW1iZXIgPT4gcDtcbmNvbnN0IEVBU0lOR19NQVA6IFJlY29yZDxTd2lwZUVhc2luZywgKHA6IG51bWJlcikgPT4gbnVtYmVyPiA9IHtcbiAgbGluZWFyLFxuICAnZWFzZS1pbi1vdXQnOiBlYXNlSW5PdXRcbn07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgc3dpcGUgcGVyY2VudGFnZSBhdCBhIGdpdmVuIHRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTd2lwZVBlcmNlbnRhZ2VBdFRpbWUoXG4gIHRpbWVNczogbnVtYmVyLFxuICBkdXJhdGlvbk1zOiBudW1iZXIsXG4gIHN0YXJ0UGN0OiBudW1iZXIsXG4gIGVuZFBjdDogbnVtYmVyLFxuICBlYXNpbmc6IFN3aXBlRWFzaW5nID0gJ2Vhc2UtaW4tb3V0J1xuKTogbnVtYmVyIHtcbiAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aW1lTXMgLyBkdXJhdGlvbk1zKSk7XG4gIGNvbnN0IGVhc2VkUHJvZ3Jlc3MgPSBFQVNJTkdfTUFQW2Vhc2luZ10ocHJvZ3Jlc3MpO1xuICByZXR1cm4gc3RhcnRQY3QgKyAoZW5kUGN0IC0gc3RhcnRQY3QpICogZWFzZWRQcm9ncmVzcztcbn1cblxuY29uc3QgSEFORExFX1JBRElVUyA9IDE0O1xuY29uc3QgQVJST1dfU0laRSA9IDY7XG5cbi8qKlxuICogRHJhdyBhIHN3aXBlIGRpdmlkZXIgKGxpbmUgKyBjaXJjdWxhciBoYW5kbGUgd2l0aCBhcnJvd3MpIG9udG8gYSAyRCBjYW52YXMgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZHJhd1N3aXBlRGl2aWRlcihcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHNwbGl0WDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5zYXZlKCk7XG5cbiAgLy8gRGl2aWRlciBsaW5lXG4gIGN0eC5zdHJva2VTdHlsZSA9ICcjRkZGRkZGJztcbiAgY3R4LmxpbmVXaWR0aCA9IDI7XG4gIGN0eC5zaGFkb3dDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xuICBjdHguc2hhZG93Qmx1ciA9IDQ7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyhzcGxpdFgsIDApO1xuICBjdHgubGluZVRvKHNwbGl0WCwgaGVpZ2h0KTtcbiAgY3R4LnN0cm9rZSgpO1xuXG4gIC8vIEhhbmRsZSBjaXJjbGVcbiAgY29uc3QgY3kgPSBoZWlnaHQgLyAyO1xuICBjdHguc2hhZG93Qmx1ciA9IDY7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyhzcGxpdFgsIGN5LCBIQU5ETEVfUkFESVVTLCAwLCBNYXRoLlBJICogMik7XG4gIGN0eC5maWxsU3R5bGUgPSAnIzI5MzIzQyc7XG4gIGN0eC5maWxsKCk7XG4gIGN0eC5zdHJva2VTdHlsZSA9ICcjRkZGRkZGJztcbiAgY3R4LmxpbmVXaWR0aCA9IDI7XG4gIGN0eC5zdHJva2UoKTtcbiAgY3R4LnNoYWRvd0JsdXIgPSAwO1xuXG4gIC8vIExlZnQgYXJyb3dcbiAgY3R4LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHNwbGl0WCAtIEFSUk9XX1NJWkUgLSAzLCBjeSk7XG4gIGN0eC5saW5lVG8oc3BsaXRYIC0gMywgY3kgLSBBUlJPV19TSVpFKTtcbiAgY3R4LmxpbmVUbyhzcGxpdFggLSAzLCBjeSArIEFSUk9XX1NJWkUpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG5cbiAgLy8gUmlnaHQgYXJyb3dcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHNwbGl0WCArIEFSUk9XX1NJWkUgKyAzLCBjeSk7XG4gIGN0eC5saW5lVG8oc3BsaXRYICsgMywgY3kgLSBBUlJPV19TSVpFKTtcbiAgY3R4LmxpbmVUbyhzcGxpdFggKyAzLCBjeSArIEFSUk9XX1NJWkUpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG5cbiAgY3R4LnJlc3RvcmUoKTtcbn1cblxuLyoqXG4gKiBDb21wb3NpdGUgdHdvIGNhbnZhc2VzIChsZWZ0L3JpZ2h0IG1hcCB2aWV3cykgd2l0aCBhIHN3aXBlIGRpdmlkZXJcbiAqIGludG8gYSBzaW5nbGUgb3V0cHV0IGNhbnZhcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2l0ZVN3aXBlRnJhbWUoXG4gIGxlZnRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICByaWdodENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIG91dHB1dENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIHBlcmNlbnRhZ2U6IG51bWJlcixcbiAgc2hvd0RpdmlkZXI6IGJvb2xlYW4gPSB0cnVlXG4pOiB2b2lkIHtcbiAgY29uc3QgY3R4ID0gb3V0cHV0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIGlmICghY3R4KSByZXR1cm47XG5cbiAgY29uc3QgdyA9IG91dHB1dENhbnZhcy53aWR0aDtcbiAgY29uc3QgaCA9IG91dHB1dENhbnZhcy5oZWlnaHQ7XG4gIGNvbnN0IHNwbGl0WCA9IE1hdGgucm91bmQoKHcgKiBwZXJjZW50YWdlKSAvIDEwMCk7XG5cbiAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAvLyBEcmF3IHJpZ2h0IChiYWNrZ3JvdW5kKSBjYW52YXMgZnVsbHlcbiAgY3R4LmRyYXdJbWFnZShyaWdodENhbnZhcywgMCwgMCwgdywgaCk7XG5cbiAgLy8gRHJhdyBsZWZ0IChmb3JlZ3JvdW5kKSBjYW52YXMgY2xpcHBlZCB0byAwLi5zcGxpdFhcbiAgY3R4LnNhdmUoKTtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgucmVjdCgwLCAwLCBzcGxpdFgsIGgpO1xuICBjdHguY2xpcCgpO1xuICBjdHguZHJhd0ltYWdlKGxlZnRDYW52YXMsIDAsIDAsIHcsIGgpO1xuICBjdHgucmVzdG9yZSgpO1xuXG4gIC8vIERyYXcgdGhlIGRpdmlkZXJcbiAgaWYgKHNob3dEaXZp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
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { SwipeEasing } from './swipe-composite-utils';
3
+ export type SwipeExportSettingsProps = {
4
+ durationMs: number;
5
+ mediaType: string;
6
+ resolution: string;
7
+ fileName: string;
8
+ cameraPreset: string;
9
+ frameRate: number;
10
+ onChangeDuration: (value: number) => void;
11
+ onChangeMediaType: (value: string) => void;
12
+ onChangeResolution: (value: string) => void;
13
+ onChangeFileName: (value: string) => void;
14
+ onChangeCameraPreset: (value: string) => void;
15
+ swipeStartPct: number;
16
+ swipeEndPct: number;
17
+ swipeEasing: SwipeEasing;
18
+ disabled: boolean;
19
+ onChangeStartPct: (value: number) => void;
20
+ onChangeEndPct: (value: number) => void;
21
+ onChangeEasing: (value: SwipeEasing) => void;
22
+ };
23
+ declare const SwipeExportSettings: React.FC<SwipeExportSettingsProps>;
24
+ export default SwipeExportSettings;