@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.
- package/dist/annotations/annotation-node.d.ts +11 -0
- package/dist/annotations/annotation-node.js +145 -0
- package/dist/annotations/annotation-overlay.d.ts +16 -0
- package/dist/annotations/annotation-overlay.js +166 -0
- package/dist/annotations/annotation-panel.d.ts +24 -0
- package/dist/annotations/annotation-panel.js +362 -0
- package/dist/annotations/annotation-text.d.ts +16 -0
- package/dist/annotations/annotation-text.js +150 -0
- package/dist/annotations/annotation-utils.d.ts +39 -0
- package/dist/annotations/annotation-utils.js +156 -0
- package/dist/annotations/index.d.ts +7 -0
- package/dist/annotations/index.js +53 -0
- package/dist/annotations/lexical-editor/clickable-link-plugin.d.ts +3 -0
- package/dist/annotations/lexical-editor/clickable-link-plugin.js +71 -0
- package/dist/annotations/lexical-editor/floating-link-editor.d.ts +1 -0
- package/dist/annotations/lexical-editor/floating-link-editor.js +194 -0
- package/dist/annotations/lexical-editor/index.d.ts +7 -0
- package/dist/annotations/lexical-editor/index.js +78 -0
- package/dist/annotations/lexical-editor/lexical-constants.d.ts +12 -0
- package/dist/annotations/lexical-editor/lexical-constants.js +22 -0
- package/dist/annotations/lexical-editor/lexical-nodes.d.ts +3 -0
- package/dist/annotations/lexical-editor/lexical-nodes.js +13 -0
- package/dist/annotations/lexical-editor/lexical-rich-text-editor.d.ts +15 -0
- package/dist/annotations/lexical-editor/lexical-rich-text-editor.js +122 -0
- package/dist/annotations/lexical-editor/lexical-theme.d.ts +15 -0
- package/dist/annotations/lexical-editor/lexical-theme.js +25 -0
- package/dist/annotations/lexical-editor/lexical-toolbar.d.ts +7 -0
- package/dist/annotations/lexical-editor/lexical-toolbar.js +293 -0
- package/dist/annotations/lexical-editor/lexical-utils.d.ts +4 -0
- package/dist/annotations/lexical-editor/lexical-utils.js +45 -0
- package/dist/annotations/lexical-editor/use-lexical-toolbar.d.ts +36 -0
- package/dist/annotations/lexical-editor/use-lexical-toolbar.js +253 -0
- package/dist/bottom-widget.d.ts +1 -1
- package/dist/bottom-widget.js +12 -6
- package/dist/common/action-panel.js +1 -1
- package/dist/common/animation-control/animation-control.d.ts +1 -0
- package/dist/common/animation-control/animation-control.js +3 -1
- package/dist/common/animation-control/animation-controller.js +8 -6
- package/dist/common/animation-control/export-video-control.d.ts +9 -0
- package/dist/common/animation-control/export-video-control.js +43 -0
- package/dist/common/animation-control/playback-controls.d.ts +4 -2
- package/dist/common/animation-control/playback-controls.js +7 -4
- package/dist/common/checkbox.d.ts +5 -21
- package/dist/common/checkbox.js +58 -70
- package/dist/common/color-legend.d.ts +1 -1
- package/dist/common/color-legend.js +3 -3
- package/dist/common/data-table/canvas.d.ts +1 -1
- package/dist/common/data-table/index.d.ts +2 -2
- package/dist/common/data-table/index.js +3 -3
- package/dist/common/dnd-layer-items.d.ts +4 -0
- package/dist/common/dnd-layer-items.js +6 -2
- package/dist/common/error-boundary.d.ts +1 -1
- package/dist/common/file-uploader/file-upload.d.ts +1 -1
- package/dist/common/file-uploader/file-upload.js +4 -4
- package/dist/common/flex-container.d.ts +15 -7
- package/dist/common/histogram-plot.js +102 -53
- package/dist/common/icon-button.d.ts +53 -6
- package/dist/common/icons/3d-models/airplane.d.ts +14 -0
- package/dist/common/icons/3d-models/airplane.js +104 -0
- package/dist/common/icons/3d-models/bicycle.d.ts +14 -0
- package/dist/common/icons/3d-models/bicycle.js +426 -0
- package/dist/common/icons/3d-models/boeing.d.ts +14 -0
- package/dist/common/icons/3d-models/boeing.js +119 -0
- package/dist/common/icons/3d-models/car.d.ts +14 -0
- package/dist/common/icons/3d-models/car.js +110 -0
- package/dist/common/icons/3d-models/cargoship.d.ts +14 -0
- package/dist/common/icons/3d-models/cargoship.js +246 -0
- package/dist/common/icons/3d-models/evtol.d.ts +14 -0
- package/dist/common/icons/3d-models/evtol.js +134 -0
- package/dist/common/icons/3d-models/glider.d.ts +14 -0
- package/dist/common/icons/3d-models/glider.js +62 -0
- package/dist/common/icons/3d-models/helicopter.d.ts +14 -0
- package/dist/common/icons/3d-models/helicopter.js +110 -0
- package/dist/common/icons/3d-models/scooter.d.ts +14 -0
- package/dist/common/icons/3d-models/scooter.js +159 -0
- package/dist/common/icons/3d-models/semitruck.d.ts +14 -0
- package/dist/common/icons/3d-models/semitruck.js +177 -0
- package/dist/common/icons/3d-models/truck.d.ts +14 -0
- package/dist/common/icons/3d-models/truck.js +122 -0
- package/dist/common/icons/anchor_window.d.ts +1 -8
- package/dist/common/icons/anchor_window.js +17 -10
- package/dist/common/icons/annotation-text.d.ts +9 -0
- package/dist/common/icons/annotation-text.js +56 -0
- package/dist/common/icons/arrow-down-full.d.ts +2 -1
- package/dist/common/icons/arrow-down-full.js +1 -1
- package/dist/common/icons/folder.d.ts +10 -0
- package/dist/common/icons/folder.js +51 -0
- package/dist/common/icons/index.d.ts +2 -0
- package/dist/common/icons/index.js +15 -1
- package/dist/common/icons/timeline-marker.d.ts +2 -1
- package/dist/common/icons/timeline-marker.js +1 -1
- package/dist/common/item-selector/chickleted-input.d.ts +1 -1
- package/dist/common/item-selector/chickleted-input.js +5 -5
- package/dist/common/item-selector/dropdown-list.d.ts +1 -1
- package/dist/common/item-selector/dropdown-list.js +1 -1
- package/dist/common/item-selector/dropdown-select.d.ts +13 -7
- package/dist/common/item-selector/item-selector.d.ts +1 -1
- package/dist/common/item-selector/item-selector.js +1 -1
- package/dist/common/item-selector/typeahead.d.ts +4 -4
- package/dist/common/item-selector/typeahead.js +1 -3
- package/dist/common/layout-splitter.d.ts +45 -0
- package/dist/common/layout-splitter.js +231 -0
- package/dist/common/line-chart.d.ts +10 -3
- package/dist/common/line-chart.js +219 -52
- package/dist/common/modal.d.ts +11 -5
- package/dist/common/modal.js +1 -1
- package/dist/common/portaled.d.ts +17 -17
- package/dist/common/range-plot.js +4 -2
- package/dist/common/range-slider.d.ts +2 -0
- package/dist/common/range-slider.js +108 -45
- package/dist/common/slider/mouse-event.d.ts +1 -1
- package/dist/common/slider/mouse-event.js +1 -2
- package/dist/common/slider/slider-bar-handle.d.ts +1 -1
- package/dist/common/slider/slider-bar-handle.js +1 -1
- package/dist/common/slider/slider-handle.d.ts +3 -3
- package/dist/common/slider/slider-handle.js +1 -1
- package/dist/common/slider/slider.d.ts +8 -4
- package/dist/common/slider/slider.js +78 -35
- package/dist/common/styled-components.d.ts +628 -178
- package/dist/common/styled-components.js +2 -2
- package/dist/common/time-range-slider-time-title.d.ts +1 -1
- package/dist/common/time-range-slider-time-title.js +5 -5
- package/dist/common/time-range-slider.d.ts +2 -1
- package/dist/common/time-range-slider.js +19 -7
- package/dist/common/timeline-helpers.d.ts +3 -0
- package/dist/common/timeline-helpers.js +57 -0
- package/dist/common/timeline-slider.js +21 -12
- package/dist/common/toolbar-item.js +5 -5
- package/dist/common/toolbar.d.ts +1 -1
- package/dist/common/toolbar.js +4 -4
- package/dist/common/vertical-toolbar.d.ts +13 -3
- package/dist/container.d.ts +3 -2
- package/dist/container.js +2 -2
- package/dist/context.d.ts +1 -1
- package/dist/context.js +1 -1
- package/dist/dnd-context.d.ts +4 -3
- package/dist/dnd-context.js +64 -9
- package/dist/effects/compact-color-picker.d.ts +1 -1
- package/dist/effects/effect-configurator.d.ts +5 -6
- package/dist/effects/effect-configurator.js +213 -52
- package/dist/effects/effect-manager.js +3 -3
- package/dist/effects/effect-panel-header.js +34 -17
- package/dist/effects/effect-panel.d.ts +4 -4
- package/dist/effects/effect-panel.js +61 -86
- package/dist/effects/effect-time-configurator.js +10 -10
- package/dist/effects/effect-type-dropdown-list.d.ts +1 -0
- package/dist/effects/effect-type-dropdown-list.js +1 -1
- package/dist/effects/effect-type-list-item.d.ts +2 -1
- package/dist/effects/effect-type-list-item.js +23 -7
- package/dist/effects/effect-type-selector.d.ts +1 -0
- package/dist/effects/effect-type-selector.js +2 -2
- package/dist/effects/surface-fog-section.d.ts +14 -0
- package/dist/effects/surface-fog-section.js +263 -0
- package/dist/filters/components.d.ts +7 -5
- package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +6 -2
- package/dist/filters/index.d.ts +1 -0
- package/dist/filters/index.js +8 -1
- package/dist/filters/polygon-filter.js +2 -2
- package/dist/filters/time-range-filter.js +3 -1
- package/dist/filters/time-widget-settings.d.ts +14 -0
- package/dist/filters/time-widget-settings.js +312 -0
- package/dist/filters/time-widget-top.d.ts +2 -3
- package/dist/filters/time-widget-top.js +32 -39
- package/dist/filters/time-widget.d.ts +3 -2
- package/dist/filters/time-widget.js +285 -9
- package/dist/filters/types.d.ts +3 -3
- package/dist/filters/types.js +1 -1
- package/dist/geocoder/geocoder.d.ts +4 -1
- package/dist/geocoder/geocoder.js +61 -14
- package/dist/geocoder-panel.d.ts +3 -2
- package/dist/geocoder-panel.js +11 -8
- package/dist/hooks/use-dnd-layers.d.ts +4 -3
- package/dist/hooks/use-dnd-layers.js +103 -42
- package/dist/index.d.ts +17 -2
- package/dist/index.js +161 -9
- package/dist/injector.d.ts +1 -1
- package/dist/kepler-gl.d.ts +179 -27
- package/dist/kepler-gl.js +91 -12
- package/dist/loading-indicator.d.ts +3 -1
- package/dist/loading-indicator.js +6 -3
- package/dist/map/annotations/annotation-control.d.ts +16 -0
- package/dist/map/annotations/annotation-control.js +56 -0
- package/dist/map/layer-hover-info.d.ts +7 -3
- package/dist/map/layer-hover-info.js +124 -55
- package/dist/map/locale-panel.d.ts +1 -1
- package/dist/map/locale-panel.js +2 -2
- package/dist/map/map-control-panel.js +3 -2
- package/dist/map/map-control-toolbar.d.ts +33 -8
- package/dist/map/map-control.d.ts +14 -4
- package/dist/map/map-control.js +18 -8
- package/dist/map/map-draw-panel.d.ts +1 -1
- package/dist/map/map-draw-panel.js +7 -4
- package/dist/map/map-legend-panel.d.ts +11 -2
- package/dist/map/map-legend-panel.js +25 -8
- package/dist/map/map-legend.d.ts +20 -3
- package/dist/map/map-legend.js +145 -31
- package/dist/map/map-navigation-control.d.ts +13 -0
- package/dist/map/map-navigation-control.js +143 -0
- package/dist/map/map-popover.js +2 -2
- package/dist/map/split-map-button.d.ts +6 -1
- package/dist/map/split-map-button.js +113 -19
- package/dist/map-container.d.ts +13 -3
- package/dist/map-container.js +269 -59
- package/dist/map-view-state-context.d.ts +1 -0
- package/dist/map-view-state-context.js +1 -1
- package/dist/maps-layout.d.ts +3 -0
- package/dist/maps-layout.js +86 -26
- package/dist/modal-container.d.ts +3 -2
- package/dist/modal-container.js +28 -6
- package/dist/modals/add-map-style-modal.js +173 -200
- package/dist/modals/cloud-tile.d.ts +1 -2
- package/dist/modals/data-table-modal.d.ts +1 -1
- package/dist/modals/data-table-modal.js +146 -194
- package/dist/modals/export-data-modal.js +117 -139
- package/dist/modals/export-map-modal/components.d.ts +9 -5
- package/dist/modals/export-video-modal.d.ts +28 -0
- package/dist/modals/export-video-modal.js +371 -0
- package/dist/modals/export-video-modal.spec.d.ts +1 -0
- package/dist/modals/export-video-modal.spec.js +686 -0
- package/dist/modals/fog-height-animation.d.ts +8 -0
- package/dist/modals/fog-height-animation.js +97 -0
- package/dist/modals/hubble-utils.d.ts +41 -0
- package/dist/modals/hubble-utils.js +294 -0
- package/dist/modals/hubble-utils.spec.d.ts +1 -0
- package/dist/modals/hubble-utils.spec.js +397 -0
- package/dist/modals/modal-dialog.d.ts +1 -1
- package/dist/modals/share-map-modal.d.ts +2 -4
- package/dist/modals/swipe-composite-utils.d.ts +10 -0
- package/dist/modals/swipe-composite-utils.js +108 -0
- package/dist/modals/swipe-export-settings.d.ts +24 -0
- package/dist/modals/swipe-export-settings.js +370 -0
- package/dist/modals/swipe-export-video-container.d.ts +122 -0
- package/dist/modals/swipe-export-video-container.js +630 -0
- package/dist/modals/swipe-export-video-preview.d.ts +68 -0
- package/dist/modals/swipe-export-video-preview.js +339 -0
- package/dist/modals/tilesets-modals/load-data-footer.js +2 -2
- package/dist/modals/tilesets-modals/load-tileset.js +21 -10
- package/dist/modals/tilesets-modals/tileset-bitmap-form.d.ts +14 -0
- package/dist/modals/tilesets-modals/tileset-bitmap-form.js +284 -0
- package/dist/modals/tilesets-modals/tileset-raster-form.js +90 -11
- package/dist/modals/tilesets-modals/tileset-tile3d-form.js +3 -2
- package/dist/modals/tilesets-modals/tileset-vector-form.js +58 -4
- package/dist/modals/tilesets-modals/tileset-wms-form.js +4 -3
- package/dist/notification-panel/notification-item.d.ts +1 -53
- package/dist/notification-panel/notification-item.js +47 -75
- package/dist/notification-panel.d.ts +1 -1
- package/dist/notification-panel.js +20 -42
- package/dist/plot-container.js +7 -6
- package/dist/side-panel/add-by-dataset-button.js +3 -3
- package/dist/side-panel/common/dataset-info.js +2 -2
- package/dist/side-panel/filter-panel/filter-panel-header.d.ts +7 -3
- package/dist/side-panel/interaction-panel/geocoder-config.d.ts +11 -0
- package/dist/side-panel/interaction-panel/geocoder-config.js +45 -0
- package/dist/side-panel/interaction-panel/interaction-panel.d.ts +3 -2
- package/dist/side-panel/interaction-panel/interaction-panel.js +10 -3
- package/dist/side-panel/layer-manager.d.ts +5 -4
- package/dist/side-panel/layer-manager.js +26 -6
- package/dist/side-panel/layer-panel/color-scale-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/color-scale-selector.js +1 -1
- package/dist/side-panel/layer-panel/color-selector.d.ts +6 -4
- package/dist/side-panel/layer-panel/custom-palette.d.ts +3 -5
- package/dist/side-panel/layer-panel/custom-palette.js +5 -5
- package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +2 -1
- package/dist/side-panel/layer-panel/dataset-layer-group.js +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +2 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.js +19 -3
- package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -11
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +4 -2
- package/dist/side-panel/layer-panel/layer-configurator.js +450 -76
- package/dist/side-panel/layer-panel/layer-group-header.d.ts +15 -0
- package/dist/side-panel/layer-panel/layer-group-header.js +179 -0
- package/dist/side-panel/layer-panel/layer-list.d.ts +9 -4
- package/dist/side-panel/layer-panel/layer-list.js +197 -40
- package/dist/side-panel/layer-panel/layer-panel-header.js +2 -2
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +1 -1
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +127 -27
- package/dist/side-panel/layer-panel/scenegraph-model-selector.d.ts +24 -0
- package/dist/side-panel/layer-panel/scenegraph-model-selector.js +123 -0
- package/dist/side-panel/layer-panel/text-label-panel.d.ts +1 -1
- package/dist/side-panel/layer-panel/text-label-panel.js +11 -2
- package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +1 -1
- package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +2 -10
- package/dist/side-panel/layer-panel/vis-config-slider.d.ts +2 -0
- package/dist/side-panel/layer-panel/vis-config-slider.js +7 -3
- package/dist/side-panel/panel-header.d.ts +1 -0
- package/dist/side-panel/panel-header.js +9 -2
- package/dist/side-panel/panel-tab.d.ts +2 -4
- package/dist/side-panel/panel-tab.js +4 -4
- package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
- package/dist/side-panel/side-bar.d.ts +1 -6
- package/dist/side-panel.d.ts +1 -1
- package/dist/side-panel.js +5 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/package.json +53 -48
- package/dist/map/layer-selector-panel.d.ts +0 -21
- package/dist/map/layer-selector-panel.js +0 -85
- package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +0 -11
- 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").
|
|
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").
|
|
6
|
-
export declare const StyleSharingUrl: import("styled-components").
|
|
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;
|