@kepler.gl/components 3.3.0-alpha.1 → 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 (126) hide show
  1. package/dist/common/action-panel.js +1 -1
  2. package/dist/common/color-legend.d.ts +1 -1
  3. package/dist/common/data-table/canvas.d.ts +1 -1
  4. package/dist/common/data-table/index.d.ts +1 -1
  5. package/dist/common/dnd-layer-items.d.ts +4 -0
  6. package/dist/common/dnd-layer-items.js +6 -2
  7. package/dist/common/error-boundary.d.ts +1 -1
  8. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  9. package/dist/common/flex-container.d.ts +15 -7
  10. package/dist/common/icon-button.d.ts +53 -6
  11. package/dist/common/icons/arrow-down-full.d.ts +2 -1
  12. package/dist/common/icons/arrow-down-full.js +1 -1
  13. package/dist/common/icons/folder.d.ts +10 -0
  14. package/dist/common/icons/folder.js +51 -0
  15. package/dist/common/icons/index.d.ts +1 -0
  16. package/dist/common/icons/index.js +8 -1
  17. package/dist/common/icons/timeline-marker.d.ts +2 -1
  18. package/dist/common/icons/timeline-marker.js +1 -1
  19. package/dist/common/item-selector/dropdown-list.d.ts +1 -1
  20. package/dist/common/item-selector/dropdown-list.js +1 -1
  21. package/dist/common/item-selector/dropdown-select.d.ts +13 -7
  22. package/dist/common/item-selector/item-selector.d.ts +1 -1
  23. package/dist/common/item-selector/item-selector.js +1 -1
  24. package/dist/common/item-selector/typeahead.d.ts +4 -4
  25. package/dist/common/item-selector/typeahead.js +1 -3
  26. package/dist/common/layout-splitter.d.ts +45 -0
  27. package/dist/common/layout-splitter.js +231 -0
  28. package/dist/common/line-chart.d.ts +7 -3
  29. package/dist/common/line-chart.js +179 -59
  30. package/dist/common/modal.d.ts +11 -5
  31. package/dist/common/modal.js +1 -1
  32. package/dist/common/portaled.d.ts +17 -17
  33. package/dist/common/range-slider.js +1 -3
  34. package/dist/common/slider/mouse-event.d.ts +1 -1
  35. package/dist/common/slider/mouse-event.js +1 -2
  36. package/dist/common/slider/slider-bar-handle.d.ts +1 -1
  37. package/dist/common/slider/slider-bar-handle.js +1 -1
  38. package/dist/common/slider/slider-handle.d.ts +3 -3
  39. package/dist/common/slider/slider-handle.js +1 -1
  40. package/dist/common/slider/slider.d.ts +4 -4
  41. package/dist/common/slider/slider.js +1 -1
  42. package/dist/common/styled-components.d.ts +627 -177
  43. package/dist/common/vertical-toolbar.d.ts +12 -2
  44. package/dist/container.d.ts +3 -2
  45. package/dist/container.js +2 -2
  46. package/dist/context.d.ts +1 -1
  47. package/dist/context.js +1 -1
  48. package/dist/dnd-context.d.ts +4 -3
  49. package/dist/dnd-context.js +64 -9
  50. package/dist/effects/compact-color-picker.d.ts +1 -1
  51. package/dist/effects/effect-configurator.d.ts +2 -4
  52. package/dist/effects/effect-time-configurator.js +1 -1
  53. package/dist/effects/effect-type-list-item.d.ts +1 -1
  54. package/dist/filters/components.d.ts +7 -5
  55. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +6 -2
  56. package/dist/geocoder-panel.d.ts +2 -2
  57. package/dist/geocoder-panel.js +6 -7
  58. package/dist/hooks/use-dnd-layers.d.ts +4 -3
  59. package/dist/hooks/use-dnd-layers.js +103 -42
  60. package/dist/index.d.ts +3 -2
  61. package/dist/index.js +38 -9
  62. package/dist/injector.d.ts +1 -1
  63. package/dist/kepler-gl.d.ts +167 -27
  64. package/dist/kepler-gl.js +3 -2
  65. package/dist/loading-indicator.d.ts +1 -1
  66. package/dist/map/layer-hover-info.d.ts +7 -3
  67. package/dist/map/layer-hover-info.js +58 -22
  68. package/dist/map/map-control-panel.js +3 -2
  69. package/dist/map/map-control-toolbar.d.ts +29 -4
  70. package/dist/map/map-control.d.ts +11 -4
  71. package/dist/map/map-control.js +7 -6
  72. package/dist/map/map-legend-panel.d.ts +11 -2
  73. package/dist/map/map-legend-panel.js +19 -2
  74. package/dist/map/map-legend.d.ts +19 -2
  75. package/dist/map/map-legend.js +141 -27
  76. package/dist/map/split-map-button.d.ts +6 -1
  77. package/dist/map/split-map-button.js +113 -19
  78. package/dist/map-container.js +20 -3
  79. package/dist/maps-layout.d.ts +3 -0
  80. package/dist/maps-layout.js +86 -26
  81. package/dist/modal-container.d.ts +1 -1
  82. package/dist/modals/cloud-tile.d.ts +1 -2
  83. package/dist/modals/export-map-modal/components.d.ts +9 -5
  84. package/dist/modals/export-video-modal.d.ts +3 -0
  85. package/dist/modals/export-video-modal.js +79 -46
  86. package/dist/modals/export-video-modal.spec.js +2 -2
  87. package/dist/modals/hubble-utils.d.ts +16 -0
  88. package/dist/modals/hubble-utils.js +98 -1
  89. package/dist/modals/modal-dialog.d.ts +1 -1
  90. package/dist/modals/share-map-modal.d.ts +2 -4
  91. package/dist/modals/swipe-composite-utils.d.ts +10 -0
  92. package/dist/modals/swipe-composite-utils.js +108 -0
  93. package/dist/modals/swipe-export-settings.d.ts +24 -0
  94. package/dist/modals/swipe-export-settings.js +370 -0
  95. package/dist/modals/swipe-export-video-container.d.ts +122 -0
  96. package/dist/modals/swipe-export-video-container.js +630 -0
  97. package/dist/modals/swipe-export-video-preview.d.ts +68 -0
  98. package/dist/modals/swipe-export-video-preview.js +339 -0
  99. package/dist/modals/tilesets-modals/tileset-raster-form.js +1 -5
  100. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +7 -3
  101. package/dist/side-panel/layer-manager.d.ts +5 -4
  102. package/dist/side-panel/layer-manager.js +16 -4
  103. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -4
  104. package/dist/side-panel/layer-panel/custom-palette.d.ts +3 -5
  105. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +2 -1
  106. package/dist/side-panel/layer-panel/dataset-layer-group.js +1 -1
  107. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +2 -1
  108. package/dist/side-panel/layer-panel/dataset-layer-section.js +1 -1
  109. package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -11
  110. package/dist/side-panel/layer-panel/layer-configurator.js +130 -82
  111. package/dist/side-panel/layer-panel/layer-group-header.d.ts +15 -0
  112. package/dist/side-panel/layer-panel/layer-group-header.js +179 -0
  113. package/dist/side-panel/layer-panel/layer-list.d.ts +9 -4
  114. package/dist/side-panel/layer-panel/layer-list.js +197 -40
  115. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +2 -10
  116. package/dist/side-panel/panel-tab.d.ts +1 -3
  117. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  118. package/dist/side-panel/side-bar.d.ts +1 -6
  119. package/dist/side-panel.d.ts +1 -1
  120. package/dist/types.d.ts +2 -2
  121. package/dist/types.js +1 -1
  122. package/package.json +29 -35
  123. package/dist/map/layer-selector-panel.d.ts +0 -21
  124. package/dist/map/layer-selector-panel.js +0 -85
  125. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +0 -11
  126. package/dist/side-panel/layer-panel/radius-by-zoom-input.js +0 -220
@@ -0,0 +1,68 @@
1
+ import React, { Component, RefObject } from 'react';
2
+ import { type MapRef } from 'react-map-gl/maplibre';
3
+ import type { Deck, DeckProps, MapViewState } from '@deck.gl/core';
4
+ import { DeckAdapter } from '@hubble.gl/core';
5
+ import { SwipeEasing } from './swipe-composite-utils';
6
+ export type SwipeExportVideoPreviewProps = {
7
+ mapData: any;
8
+ resolution: [number, number];
9
+ exportVideoWidth: number;
10
+ disableBaseMap: boolean;
11
+ deckProps?: DeckProps;
12
+ viewState: MapViewState;
13
+ adapter: DeckAdapter;
14
+ mapboxLayerBeforeId?: string;
15
+ rendering: boolean;
16
+ saving: boolean;
17
+ setViewState: (viewState: MapViewState) => void;
18
+ durationMs: number;
19
+ mapProps?: Record<string, any>;
20
+ swipeStartPct: number;
21
+ swipeEndPct: number;
22
+ swipeEasing: SwipeEasing;
23
+ currentTimeMs: number;
24
+ };
25
+ type SwipeExportVideoPreviewState = {
26
+ leftReady: boolean;
27
+ rightReady: boolean;
28
+ };
29
+ /**
30
+ * A dual-canvas video export preview that renders left/right split map layers
31
+ * and composites them with an animated swipe divider.
32
+ */
33
+ export declare class SwipeExportVideoPreview extends Component<SwipeExportVideoPreviewProps, SwipeExportVideoPreviewState> {
34
+ leftMapRef: RefObject<MapRef | null>;
35
+ rightMapRef: RefObject<MapRef | null>;
36
+ leftDeckRef: RefObject<Deck | null>;
37
+ rightDeckRef: RefObject<Deck | null>;
38
+ compositeCanvasRef: RefObject<HTMLCanvasElement | null>;
39
+ constructor(props: SwipeExportVideoPreviewProps);
40
+ componentDidUpdate(prevProps: SwipeExportVideoPreviewProps): void;
41
+ _resizeVideo(): void;
42
+ _setDevicePixelRatio(devicePixelRatio: number): void;
43
+ _getContainer(): {
44
+ height: number;
45
+ width: number;
46
+ };
47
+ _getCurrentSwipePercentage(): number;
48
+ _getLeftCanvas(): HTMLCanvasElement | null;
49
+ _getRightCanvas(): HTMLCanvasElement | null;
50
+ _compositeFrame(): void;
51
+ /**
52
+ * Called by the parent container's adapter after each render.
53
+ * We need both maps to be loaded before compositing and capturing.
54
+ */
55
+ onAfterRender: (proceedToNextFrame: () => void) => void;
56
+ _areLayersLoaded(side: 'left' | 'right'): boolean;
57
+ /**
58
+ * Get the composited canvas element for video capture.
59
+ */
60
+ getCompositeCanvas(): HTMLCanvasElement | null;
61
+ _createLayers(mapIndex: number, beforeId?: string): any;
62
+ _onLeftMapLoad: () => void;
63
+ _onRightMapLoad: () => void;
64
+ _tryComposite(): void;
65
+ _renderMapCanvas(side: 'left' | 'right', mapIndex: number): React.JSX.Element;
66
+ render(): React.JSX.Element;
67
+ }
68
+ export {};
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.SwipeExportVideoPreview = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+ var _react = _interopRequireWildcard(require("react"));
18
+ var _react2 = _interopRequireDefault(require("@deck.gl/react"));
19
+ var _maplibre = _interopRequireWildcard(require("react-map-gl/maplibre"));
20
+ var _mapbox = require("@deck.gl/mapbox");
21
+ var _lodash = _interopRequireDefault(require("lodash.isequal"));
22
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
23
+ var _react3 = require("@hubble.gl/react");
24
+ var _swipeCompositeUtils = require("./swipe-composite-utils");
25
+ var _templateObject, _templateObject2, _templateObject3;
26
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
27
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
28
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
29
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
30
+ 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; }
31
+ 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
32
+ // Copyright contributors to the kepler.gl project
33
+ // @ts-ignore module resolution mismatch with moduleResolution:"node"
34
+ function setRef(ref, value) {
35
+ if (typeof ref === 'function') {
36
+ ref(value);
37
+ } else if (ref) {
38
+ ref.current = value;
39
+ }
40
+ }
41
+ var DeckGLOverlay = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
42
+ var overlay = (0, _maplibre.useControl)(function () {
43
+ return new _mapbox.MapboxOverlay(_objectSpread(_objectSpread({}, props), {}, {
44
+ interleaved: true
45
+ }));
46
+ });
47
+ overlay.setProps(props);
48
+ setRef(ref, overlay._deck);
49
+ return null;
50
+ });
51
+ DeckGLOverlay.displayName = 'DeckGLOverlay';
52
+ var PreviewContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", "px;\n height: ", "px;\n position: relative;\n"])), function (props) {
53
+ return props.$width;
54
+ }, function (props) {
55
+ return props.$height;
56
+ });
57
+ var VisibleCanvas = _styledComponents["default"].canvas(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: ", "px;\n height: ", "px;\n display: block;\n position: relative;\n z-index: 1;\n"])), function (props) {
58
+ return props.$width;
59
+ }, function (props) {
60
+ return props.$height;
61
+ });
62
+ var MapLayer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n width: ", "px;\n height: ", "px;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0;\n pointer-events: none;\n z-index: 0;\n"])), function (props) {
63
+ return props.$width;
64
+ }, function (props) {
65
+ return props.$height;
66
+ });
67
+ /**
68
+ * A dual-canvas video export preview that renders left/right split map layers
69
+ * and composites them with an animated swipe divider.
70
+ */
71
+ var SwipeExportVideoPreview = exports.SwipeExportVideoPreview = /*#__PURE__*/function (_Component) {
72
+ function SwipeExportVideoPreview(props) {
73
+ var _this;
74
+ (0, _classCallCheck2["default"])(this, SwipeExportVideoPreview);
75
+ _this = _callSuper(this, SwipeExportVideoPreview, [props]);
76
+ (0, _defineProperty2["default"])(_this, "leftMapRef", /*#__PURE__*/_react["default"].createRef());
77
+ (0, _defineProperty2["default"])(_this, "rightMapRef", /*#__PURE__*/_react["default"].createRef());
78
+ (0, _defineProperty2["default"])(_this, "leftDeckRef", /*#__PURE__*/_react["default"].createRef());
79
+ (0, _defineProperty2["default"])(_this, "rightDeckRef", /*#__PURE__*/_react["default"].createRef());
80
+ (0, _defineProperty2["default"])(_this, "compositeCanvasRef", /*#__PURE__*/_react["default"].createRef());
81
+ /**
82
+ * Called by the parent container's adapter after each render.
83
+ * We need both maps to be loaded before compositing and capturing.
84
+ */
85
+ (0, _defineProperty2["default"])(_this, "onAfterRender", function (proceedToNextFrame) {
86
+ var leftLoaded = _this._areLayersLoaded('left');
87
+ var rightLoaded = _this._areLayersLoaded('right');
88
+ var leftTilesReady = _this.props.disableBaseMap || !_this.leftMapRef.current || _this.leftMapRef.current.getMap().areTilesLoaded();
89
+ var rightTilesReady = _this.props.disableBaseMap || !_this.rightMapRef.current || _this.rightMapRef.current.getMap().areTilesLoaded();
90
+ if (leftLoaded && rightLoaded && leftTilesReady && rightTilesReady) {
91
+ _this._compositeFrame();
92
+ proceedToNextFrame();
93
+ }
94
+ });
95
+ (0, _defineProperty2["default"])(_this, "_onLeftMapLoad", function () {
96
+ var _this$leftMapRef$curr;
97
+ var map = (_this$leftMapRef$curr = _this.leftMapRef.current) === null || _this$leftMapRef$curr === void 0 ? void 0 : _this$leftMapRef$curr.getMap();
98
+ if (map) {
99
+ map.on('render', function () {
100
+ if (!_this.state.leftReady) {
101
+ _this.setState({
102
+ leftReady: true
103
+ });
104
+ }
105
+ _this._tryComposite();
106
+ });
107
+ }
108
+ });
109
+ (0, _defineProperty2["default"])(_this, "_onRightMapLoad", function () {
110
+ var _this$rightMapRef$cur;
111
+ var map = (_this$rightMapRef$cur = _this.rightMapRef.current) === null || _this$rightMapRef$cur === void 0 ? void 0 : _this$rightMapRef$cur.getMap();
112
+ if (map) {
113
+ map.on('render', function () {
114
+ if (!_this.state.rightReady) {
115
+ _this.setState({
116
+ rightReady: true
117
+ });
118
+ }
119
+ _this._tryComposite();
120
+ });
121
+ }
122
+ });
123
+ _this.state = {
124
+ leftReady: false,
125
+ rightReady: false
126
+ };
127
+ _this._resizeVideo();
128
+ return _this;
129
+ }
130
+ (0, _inherits2["default"])(SwipeExportVideoPreview, _Component);
131
+ return (0, _createClass2["default"])(SwipeExportVideoPreview, [{
132
+ key: "componentDidUpdate",
133
+ value: function componentDidUpdate(prevProps) {
134
+ if (!(0, _lodash["default"])(prevProps.resolution, this.props.resolution)) {
135
+ this._resizeVideo();
136
+ }
137
+ if (prevProps.currentTimeMs !== this.props.currentTimeMs || prevProps.swipeStartPct !== this.props.swipeStartPct || prevProps.swipeEndPct !== this.props.swipeEndPct || prevProps.swipeEasing !== this.props.swipeEasing) {
138
+ this._compositeFrame();
139
+ }
140
+ }
141
+ }, {
142
+ key: "_resizeVideo",
143
+ value: function _resizeVideo() {
144
+ var _this$props = this.props,
145
+ exportVideoWidth = _this$props.exportVideoWidth,
146
+ resolution = _this$props.resolution;
147
+ this._setDevicePixelRatio(resolution[0] / exportVideoWidth);
148
+ }
149
+ }, {
150
+ key: "_setDevicePixelRatio",
151
+ value: function _setDevicePixelRatio(devicePixelRatio) {
152
+ // @ts-ignore
153
+ window.devicePixelRatio = devicePixelRatio;
154
+ }
155
+ }, {
156
+ key: "_getContainer",
157
+ value: function _getContainer() {
158
+ var _this$props2 = this.props,
159
+ exportVideoWidth = _this$props2.exportVideoWidth,
160
+ resolution = _this$props2.resolution;
161
+ var aspectRatio = resolution[0] / resolution[1];
162
+ return {
163
+ height: exportVideoWidth / aspectRatio,
164
+ width: exportVideoWidth
165
+ };
166
+ }
167
+ }, {
168
+ key: "_getCurrentSwipePercentage",
169
+ value: function _getCurrentSwipePercentage() {
170
+ var _this$props3 = this.props,
171
+ currentTimeMs = _this$props3.currentTimeMs,
172
+ durationMs = _this$props3.durationMs,
173
+ swipeStartPct = _this$props3.swipeStartPct,
174
+ swipeEndPct = _this$props3.swipeEndPct,
175
+ swipeEasing = _this$props3.swipeEasing;
176
+ return (0, _swipeCompositeUtils.getSwipePercentageAtTime)(currentTimeMs, durationMs, swipeStartPct, swipeEndPct, swipeEasing);
177
+ }
178
+ }, {
179
+ key: "_getLeftCanvas",
180
+ value: function _getLeftCanvas() {
181
+ if (this.leftMapRef.current) {
182
+ return this.leftMapRef.current.getMap().getCanvas();
183
+ }
184
+ // Fallback: DeckGL canvas (no basemap mode)
185
+ if (this.leftDeckRef.current) {
186
+ var _getCanvas, _ref;
187
+ return ((_getCanvas = (_ref = this.leftDeckRef.current).getCanvas) === null || _getCanvas === void 0 ? void 0 : _getCanvas.call(_ref)) || null;
188
+ }
189
+ return null;
190
+ }
191
+ }, {
192
+ key: "_getRightCanvas",
193
+ value: function _getRightCanvas() {
194
+ if (this.rightMapRef.current) {
195
+ return this.rightMapRef.current.getMap().getCanvas();
196
+ }
197
+ if (this.rightDeckRef.current) {
198
+ var _getCanvas2, _ref2;
199
+ return ((_getCanvas2 = (_ref2 = this.rightDeckRef.current).getCanvas) === null || _getCanvas2 === void 0 ? void 0 : _getCanvas2.call(_ref2)) || null;
200
+ }
201
+ return null;
202
+ }
203
+ }, {
204
+ key: "_compositeFrame",
205
+ value: function _compositeFrame() {
206
+ var leftCanvas = this._getLeftCanvas();
207
+ var rightCanvas = this._getRightCanvas();
208
+ var outputCanvas = this.compositeCanvasRef.current;
209
+ if (!leftCanvas || !rightCanvas || !outputCanvas) return;
210
+ var percentage = this._getCurrentSwipePercentage();
211
+ (0, _swipeCompositeUtils.compositeSwipeFrame)(leftCanvas, rightCanvas, outputCanvas, percentage, true);
212
+ }
213
+ }, {
214
+ key: "_areLayersLoaded",
215
+ value: function _areLayersLoaded(side) {
216
+ var deckRef = side === 'left' ? this.leftDeckRef : this.rightDeckRef;
217
+ if (!deckRef.current) return false;
218
+ var layers = deckRef.current.props.layers || [];
219
+ return layers.every(function (layer) {
220
+ return layer.isLoaded;
221
+ });
222
+ }
223
+
224
+ /**
225
+ * Get the composited canvas element for video capture.
226
+ */
227
+ }, {
228
+ key: "getCompositeCanvas",
229
+ value: function getCompositeCanvas() {
230
+ return this.compositeCanvasRef.current;
231
+ }
232
+ }, {
233
+ key: "_createLayers",
234
+ value: function _createLayers(mapIndex, beforeId) {
235
+ var _this$props4 = this.props,
236
+ deckProps = _this$props4.deckProps,
237
+ mapData = _this$props4.mapData,
238
+ viewState = _this$props4.viewState;
239
+ if (deckProps && deckProps.layers) {
240
+ return deckProps.layers;
241
+ }
242
+ return (0, _react3.createKeplerLayers)(mapData, viewState, mapIndex, beforeId);
243
+ }
244
+ }, {
245
+ key: "_tryComposite",
246
+ value: function _tryComposite() {
247
+ if (this.state.leftReady && this.state.rightReady) {
248
+ this._compositeFrame();
249
+ }
250
+ }
251
+ }, {
252
+ key: "_renderMapCanvas",
253
+ value: function _renderMapCanvas(side, mapIndex) {
254
+ var _this$props5 = this.props,
255
+ viewState = _this$props5.viewState,
256
+ adapter = _this$props5.adapter,
257
+ deckProps = _this$props5.deckProps,
258
+ mapProps = _this$props5.mapProps,
259
+ disableBaseMap = _this$props5.disableBaseMap,
260
+ mapboxLayerBeforeId = _this$props5.mapboxLayerBeforeId;
261
+ var _this$_getContainer = this._getContainer(),
262
+ width = _this$_getContainer.width,
263
+ height = _this$_getContainer.height;
264
+ var keplerLayers = this._createLayers(mapIndex, mapboxLayerBeforeId);
265
+ var mapRef = side === 'left' ? this.leftMapRef : this.rightMapRef;
266
+ var deckRef = side === 'left' ? this.leftDeckRef : this.rightDeckRef;
267
+ var onMapLoad = side === 'left' ? this._onLeftMapLoad : this._onRightMapLoad;
268
+ var deck = deckRef.current;
269
+ if (disableBaseMap) {
270
+ return /*#__PURE__*/_react["default"].createElement(MapLayer, {
271
+ $width: width,
272
+ $height: height
273
+ }, /*#__PURE__*/_react["default"].createElement(_react2["default"], (0, _extends2["default"])({
274
+ ref: function ref(_ref3) {
275
+ return setRef(deckRef, _ref3 === null || _ref3 === void 0 ? void 0 : _ref3.deck);
276
+ }
277
+ }, adapter.getProps({
278
+ deck: deck,
279
+ extraProps: _objectSpread(_objectSpread({}, deckProps), {}, {
280
+ layers: keplerLayers
281
+ })
282
+ }), this._getContainer())));
283
+ }
284
+ var _ref4 = mapProps || {},
285
+ mapStyleFromProps = _ref4.mapStyle,
286
+ mapLib = _ref4.mapLib,
287
+ transformRequest = _ref4.transformRequest;
288
+ return /*#__PURE__*/_react["default"].createElement(MapLayer, {
289
+ $width: width,
290
+ $height: height
291
+ }, /*#__PURE__*/_react["default"].createElement(_maplibre["default"], (0, _extends2["default"])({
292
+ ref: mapRef,
293
+ style: {
294
+ width: width,
295
+ height: height
296
+ },
297
+ antialias: true,
298
+ mapLib: mapLib,
299
+ transformRequest: transformRequest,
300
+ preserveDrawingBuffer: true
301
+ }, viewState, {
302
+ mapStyle: mapStyleFromProps,
303
+ onLoad: onMapLoad
304
+ }), /*#__PURE__*/_react["default"].createElement(DeckGLOverlay, (0, _extends2["default"])({
305
+ ref: deckRef,
306
+ deviceProps: {
307
+ type: 'webgl',
308
+ webgl: {
309
+ stencil: true
310
+ }
311
+ }
312
+ }, adapter.getProps({
313
+ deck: deck,
314
+ extraProps: _objectSpread(_objectSpread({}, deckProps), {}, {
315
+ layers: keplerLayers
316
+ })
317
+ })))));
318
+ }
319
+ }, {
320
+ key: "render",
321
+ value: function render() {
322
+ var resolution = this.props.resolution;
323
+ var _this$_getContainer2 = this._getContainer(),
324
+ width = _this$_getContainer2.width,
325
+ height = _this$_getContainer2.height;
326
+ return /*#__PURE__*/_react["default"].createElement(PreviewContainer, {
327
+ $width: width,
328
+ $height: height
329
+ }, this._renderMapCanvas('left', 0), this._renderMapCanvas('right', 1), /*#__PURE__*/_react["default"].createElement(VisibleCanvas, {
330
+ ref: this.compositeCanvasRef,
331
+ width: resolution[0],
332
+ height: resolution[1],
333
+ $width: width,
334
+ $height: height
335
+ }));
336
+ }
337
+ }]);
338
+ }(_react.Component);
339
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3QyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9tYXBsaWJyZSIsIl9tYXBib3giLCJfbG9kYXNoIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfcmVhY3QzIiwiX3N3aXBlQ29tcG9zaXRlVXRpbHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2V0UmVmIiwicmVmIiwidmFsdWUiLCJjdXJyZW50IiwiRGVja0dMT3ZlcmxheSIsImZvcndhcmRSZWYiLCJwcm9wcyIsIm92ZXJsYXkiLCJ1c2VDb250cm9sIiwiTWFwYm94T3ZlcmxheSIsImludGVybGVhdmVkIiwic2V0UHJvcHMiLCJfZGVjayIsImRpc3BsYXlOYW1lIiwiUHJldmlld0NvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiJHdpZHRoIiwiJGhlaWdodCIsIlZpc2libGVDYW52YXMiLCJjYW52YXMiLCJNYXBMYXllciIsIlN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3IiwiZXhwb3J0cyIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJSZWFjdCIsImNyZWF0ZVJlZiIsInByb2NlZWRUb05leHRGcmFtZSIsImxlZnRMb2FkZWQiLCJfYXJlTGF5ZXJzTG9hZGVkIiwicmlnaHRMb2FkZWQiLCJsZWZ0VGlsZXNSZWFkeSIsImRpc2FibGVCYXNlTWFwIiwibGVmdE1hcFJlZiIsImdldE1hcCIsImFyZVRpbGVzTG9hZGVkIiwicmlnaHRUaWxlc1JlYWR5IiwicmlnaHRNYXBSZWYiLCJfY29tcG9zaXRlRnJhbWUiLCJfdGhpcyRsZWZ0TWFwUmVmJGN1cnIiLCJtYXAiLCJvbiIsInN0YXRlIiwibGVmdFJlYWR5Iiwic2V0U3RhdGUiLCJfdHJ5Q29tcG9zaXRlIiwiX3RoaXMkcmlnaHRNYXBSZWYkY3VyIiwicmlnaHRSZWFkeSIsIl9yZXNpemVWaWRlbyIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwiaXNFcXVhbCIsInJlc29sdXRpb24iLCJjdXJyZW50VGltZU1zIiwic3dpcGVTdGFydFBjdCIsInN3aXBlRW5kUGN0Iiwic3dpcGVFYXNpbmciLCJfdGhpcyRwcm9wcyIsImV4cG9ydFZpZGVvV2lkdGgiLCJfc2V0RGV2aWNlUGl4ZWxSYXRpbyIsImRldmljZVBpeGVsUmF0aW8iLCJ3aW5kb3ciLCJfZ2V0Q29udGFpbmVyIiwiX3RoaXMkcHJvcHMyIiwiYXNwZWN0UmF0aW8iLCJoZWlnaHQiLCJ3aWR0aCIsIl9nZXRDdXJyZW50U3dpcGVQZXJjZW50YWdlIiwiX3RoaXMkcHJvcHMzIiwiZHVyYXRpb25NcyIsImdldFN3aXBlUGVyY2VudGFnZUF0VGltZSIsIl9nZXRMZWZ0Q2FudmFzIiwiZ2V0Q2FudmFzIiwibGVmdERlY2tSZWYiLCJfZ2V0Q2FudmFzIiwiX3JlZiIsIl9nZXRSaWdodENhbnZhcyIsInJpZ2h0RGVja1JlZiIsIl9nZXRDYW52YXMyIiwiX3JlZjIiLCJsZWZ0Q2FudmFzIiwicmlnaHRDYW52YXMiLCJvdXRwdXRDYW52YXMiLCJjb21wb3NpdGVDYW52YXNSZWYiLCJwZXJjZW50YWdlIiwiY29tcG9zaXRlU3dpcGVGcmFtZSIsInNpZGUiLCJkZWNrUmVmIiwibGF5ZXJzIiwiZXZlcnkiLCJsYXllciIsImlzTG9hZGVkIiwiZ2V0Q29tcG9zaXRlQ2FudmFzIiwiX2NyZWF0ZUxheWVycyIsIm1hcEluZGV4IiwiYmVmb3JlSWQiLCJfdGhpcyRwcm9wczQiLCJkZWNrUHJvcHMiLCJtYXBEYXRhIiwidmlld1N0YXRlIiwiY3JlYXRlS2VwbGVyTGF5ZXJzIiwiX3JlbmRlck1hcENhbnZhcyIsIl90aGlzJHByb3BzNSIsImFkYXB0ZXIiLCJtYXBQcm9wcyIsIm1hcGJveExheWVyQmVmb3JlSWQiLCJfdGhpcyRfZ2V0Q29udGFpbmVyIiwia2VwbGVyTGF5ZXJzIiwibWFwUmVmIiwib25NYXBMb2FkIiwiX29uTGVmdE1hcExvYWQiLCJfb25SaWdodE1hcExvYWQiLCJkZWNrIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzMiIsImdldFByb3BzIiwiZXh0cmFQcm9wcyIsIl9yZWY0IiwibWFwU3R5bGVGcm9tUHJvcHMiLCJtYXBTdHlsZSIsIm1hcExpYiIsInRyYW5zZm9ybVJlcXVlc3QiLCJzdHlsZSIsImFudGlhbGlhcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uTG9hZCIsImRldmljZVByb3BzIiwidHlwZSIsIndlYmdsIiwic3RlbmNpbCIsInJlbmRlciIsIl90aGlzJF9nZXRDb250YWluZXIyIiwiQ29tcG9uZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGFscy9zd2lwZS1leHBvcnQtdmlkZW8tcHJldmlldy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBSZWZPYmplY3QsIGZvcndhcmRSZWYsIEZvcndhcmRlZFJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQgUmVhY3RNYXBHTCwge3R5cGUgTWFwUmVmLCB1c2VDb250cm9sfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwbGlicmUnO1xuLy8gQHRzLWlnbm9yZSBtb2R1bGUgcmVzb2x1dGlvbiBtaXNtYXRjaCB3aXRoIG1vZHVsZVJlc29sdXRpb246XCJub2RlXCJcbmltcG9ydCB7TWFwYm94T3ZlcmxheX0gZnJvbSAnQGRlY2suZ2wvbWFwYm94JztcbmltcG9ydCB0eXBlIHtEZWNrLCBEZWNrUHJvcHMsIE1hcFZpZXdTdGF0ZX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtEZWNrQWRhcHRlcn0gZnJvbSAnQGh1YmJsZS5nbC9jb3JlJztcbmltcG9ydCB7Y3JlYXRlS2VwbGVyTGF5ZXJzfSBmcm9tICdAaHViYmxlLmdsL3JlYWN0JztcbmltcG9ydCB7Y29tcG9zaXRlU3dpcGVGcmFtZSwgZ2V0U3dpcGVQZXJjZW50YWdlQXRUaW1lLCBTd2lwZUVhc2luZ30gZnJvbSAnLi9zd2lwZS1jb21wb3NpdGUtdXRpbHMnO1xuXG5mdW5jdGlvbiBzZXRSZWY8VD4ocmVmOiBSZWFjdC5SZWY8VD4gfCBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PFQ+LCB2YWx1ZTogVCkge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAocmVmKSB7XG4gICAgKHJlZiBhcyBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PFQ+KS5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn1cblxuY29uc3QgRGVja0dMT3ZlcmxheSA9IGZvcndhcmRSZWY8RGVjaywgYW55PihcbiAgKHByb3BzOiBhbnksIHJlZjogRm9yd2FyZGVkUmVmPERlY2s+KSA9PiB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IHVzZUNvbnRyb2w8TWFwYm94T3ZlcmxheT4oKCkgPT4gbmV3IE1hcGJveE92ZXJsYXkoey4uLnByb3BzLCBpbnRlcmxlYXZlZDogdHJ1ZX0pKTtcbiAgICBvdmVybGF5LnNldFByb3BzKHByb3BzKTtcbiAgICBzZXRSZWYocmVmLCAob3ZlcmxheSBhcyBhbnkpLl9kZWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuKTtcbkRlY2tHTE92ZXJsYXkuZGlzcGxheU5hbWUgPSAnRGVja0dMT3ZlcmxheSc7XG5cbmNvbnN0IFByZXZpZXdDb250YWluZXIgPSBzdHlsZWQuZGl2PHskd2lkdGg6IG51bWJlcjsgJGhlaWdodDogbnVtYmVyfT5gXG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLiR3aWR0aH1weDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLiRoZWlnaHR9cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5cbmNvbnN0IFZpc2libGVDYW52YXMgPSBzdHlsZWQuY2FudmFzPHskd2lkdGg6IG51bWJlcjsgJGhlaWdodDogbnVtYmVyfT5gXG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLiR3aWR0aH1weDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLiRoZWlnaHR9cHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG5gO1xuXG5jb25zdCBNYXBMYXllciA9IHN0eWxlZC5kaXY8eyR3aWR0aDogbnVtYmVyOyAkaGVpZ2h0OiBudW1iZXJ9PmBcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMuJHdpZHRofXB4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMuJGhlaWdodH1weDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAwO1xuYDtcblxuZXhwb3J0IHR5cGUgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdQcm9wcyA9IHtcbiAgbWFwRGF0YTogYW55O1xuICByZXNvbHV0aW9uOiBbbnVtYmVyLCBudW1iZXJdO1xuICBleHBvcnRWaWRlb1dpZHRoOiBudW1iZXI7XG4gIGRpc2FibGVCYXNlTWFwOiBib29sZWFuO1xuICBkZWNrUHJvcHM/OiBEZWNrUHJvcHM7XG4gIHZpZXdTdGF0ZTogTWFwVmlld1N0YXRlO1xuICBhZGFwdGVyOiBEZWNrQWRhcHRlcjtcbiAgbWFwYm94TGF5ZXJCZWZvcmVJZD86IHN0cmluZztcbiAgcmVuZGVyaW5nOiBib29sZWFuO1xuICBzYXZpbmc6IGJvb2xlYW47XG4gIHNldFZpZXdTdGF0ZTogKHZpZXdTdGF0ZTogTWFwVmlld1N0YXRlKSA9PiB2b2lkO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIG1hcFByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc3dpcGVTdGFydFBjdDogbnVtYmVyO1xuICBzd2lwZUVuZFBjdDogbnVtYmVyO1xuICBzd2lwZUVhc2luZzogU3dpcGVFYXNpbmc7XG4gIGN1cnJlbnRUaW1lTXM6IG51bWJlcjtcbn07XG5cbnR5cGUgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdTdGF0ZSA9IHtcbiAgbGVmdFJlYWR5OiBib29sZWFuO1xuICByaWdodFJlYWR5OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBIGR1YWwtY2FudmFzIHZpZGVvIGV4cG9ydCBwcmV2aWV3IHRoYXQgcmVuZGVycyBsZWZ0L3JpZ2h0IHNwbGl0IG1hcCBsYXllcnNcbiAqIGFuZCBjb21wb3NpdGVzIHRoZW0gd2l0aCBhbiBhbmltYXRlZCBzd2lwZSBkaXZpZGVyLlxuICovXG5leHBvcnQgY2xhc3MgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXcgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3UHJvcHMsXG4gIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3U3RhdGVcbj4ge1xuICBsZWZ0TWFwUmVmOiBSZWZPYmplY3Q8TWFwUmVmIHwgbnVsbD4gPSBSZWFjdC5jcmVhdGVSZWY8TWFwUmVmIHwgbnVsbD4oKTtcbiAgcmlnaHRNYXBSZWY6IFJlZk9iamVjdDxNYXBSZWYgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxNYXBSZWYgfCBudWxsPigpO1xuICBsZWZ0RGVja1JlZjogUmVmT2JqZWN0PERlY2sgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxEZWNrIHwgbnVsbD4oKTtcbiAgcmlnaHREZWNrUmVmOiBSZWZPYmplY3Q8RGVjayB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPERlY2sgfCBudWxsPigpO1xuICBjb21wb3NpdGVDYW52YXNSZWY6IFJlZk9iamVjdDxIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsZWZ0UmVhZHk6IGZhbHNlLFxuICAgICAgcmlnaHRSZWFkeTogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5fcmVzaXplVmlkZW8oKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3UHJvcHMpIHtcbiAgICBpZiAoIWlzRXF1YWwocHJldlByb3BzLnJlc29sdXRpb24sIHRoaXMucHJvcHMucmVzb2x1dGlvbikpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZVZpZGVvKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJldlByb3BzLmN1cnJlbnRUaW1lTXMgIT09IHRoaXMucHJvcHMuY3VycmVudFRpbWVNcyB8fFxuICAgICAgcHJldlByb3BzLnN3aXBlU3RhcnRQY3QgIT09IHRoaXMucHJvcHMuc3dpcGVTdGFydFBjdCB8fFxuICAgICAgcHJldlByb3BzLnN3aXBlRW5kUGN0ICE9PSB0aGlzLnByb3BzLnN3aXBlRW5kUGN0IHx8XG4gICAgICBwcmV2UHJvcHMuc3dpcGVFYXNpbmcgIT09IHRoaXMucHJvcHMuc3dpcGVFYXNpbmdcbiAgICApIHtcbiAgICAgIHRoaXMuX2NvbXBvc2l0ZUZyYW1lKCk7XG4gICAgfVxuICB9XG5cbiAgX3Jlc2l6ZVZpZGVvKCkge1xuICAgIGNvbnN0IHtleHBvcnRWaWRlb1dpZHRoLCByZXNvbHV0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5fc2V0RGV2aWNlUGl4ZWxSYXRpbyhyZXNvbHV0aW9uWzBdIC8gZXhwb3J0VmlkZW9XaWR0aCk7XG4gIH1cblxuICBfc2V0RGV2aWNlUGl4ZWxSYXRpbyhkZXZpY2VQaXhlbFJhdGlvOiBudW1iZXIpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvO1xuICB9XG5cbiAgX2dldENvbnRhaW5lcigpIHtcbiAgICBjb25zdCB7ZXhwb3J0VmlkZW9XaWR0aCwgcmVzb2x1dGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gcmVzb2x1dGlvblswXSAvIHJlc29sdXRpb25bMV07XG4gICAgcmV0dXJuIHtoZWlnaHQ6IGV4cG9ydFZpZGVvV2lkdGggLyBhc3BlY3RSYXRpbywgd2lkdGg6IGV4cG9ydFZpZGVvV2lkdGh9O1xuICB9XG5cbiAgX2dldEN1cnJlbnRTd2lwZVBlcmNlbnRhZ2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCB7Y3VycmVudFRpbWVNcywgZHVyYXRpb25Ncywgc3dpcGVTdGFydFBjdCwgc3dpcGVFbmRQY3QsIHN3aXBlRWFzaW5nfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIGdldFN3aXBlUGVyY2VudGFnZUF0VGltZShjdXJyZW50VGltZU1zLCBkdXJhdGlvbk1zLCBzd2lwZVN0YXJ0UGN0LCBzd2lwZUVuZFBjdCwgc3dpcGVFYXNpbmcpO1xuICB9XG5cbiAgX2dldExlZnRDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5nZXRDYW52YXMoKTtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2s6IERlY2tHTCBjYW52YXMgKG5vIGJhc2VtYXAgbW9kZSlcbiAgICBpZiAodGhpcy5sZWZ0RGVja1JlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gKHRoaXMubGVmdERlY2tSZWYuY3VycmVudCBhcyBhbnkpLmdldENhbnZhcz8uKCkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfZ2V0UmlnaHRDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yaWdodE1hcFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50LmdldE1hcCgpLmdldENhbnZhcygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yaWdodERlY2tSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuICh0aGlzLnJpZ2h0RGVja1JlZi5jdXJyZW50IGFzIGFueSkuZ2V0Q2FudmFzPy4oKSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9jb21wb3NpdGVGcmFtZSgpIHtcbiAgICBjb25zdCBsZWZ0Q2FudmFzID0gdGhpcy5fZ2V0TGVmdENhbnZhcygpO1xuICAgIGNvbnN0IHJpZ2h0Q2FudmFzID0gdGhpcy5fZ2V0UmlnaHRDYW52YXMoKTtcbiAgICBjb25zdCBvdXRwdXRDYW52YXMgPSB0aGlzLmNvbXBvc2l0ZUNhbnZhc1JlZi5jdXJyZW50O1xuXG4gICAgaWYgKCFsZWZ0Q2FudmFzIHx8ICFyaWdodENhbnZhcyB8fCAhb3V0cHV0Q2FudmFzKSByZXR1cm47XG5cbiAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy5fZ2V0Q3VycmVudFN3aXBlUGVyY2VudGFnZSgpO1xuICAgIGNvbXBvc2l0ZVN3aXBlRnJhbWUobGVmdENhbnZhcywgcmlnaHRDYW52YXMsIG91dHB1dENhbnZhcywgcGVyY2VudGFnZSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgYWRhcHRlciBhZnRlciBlYWNoIHJlbmRlci5cbiAgICogV2UgbmVlZCBib3RoIG1hcHMgdG8gYmUgbG9hZGVkIGJlZm9yZSBjb21wb3NpdGluZyBhbmQgY2FwdHVyaW5nLlxuICAgKi9cbiAgb25BZnRlclJlbmRlciA9IChwcm9jZWVkVG9OZXh0RnJhbWU6ICgpID0+IHZvaWQpID0+IHtcbiAgICBjb25zdCBsZWZ0TG9hZGVkID0gdGhpcy5fYXJlTGF5ZXJzTG9hZGVkKCdsZWZ0Jyk7XG4gICAgY29uc3QgcmlnaHRMb2FkZWQgPSB0aGlzLl9hcmVMYXllcnNMb2FkZWQoJ3JpZ2h0Jyk7XG4gICAgY29uc3QgbGVmdFRpbGVzUmVhZHkgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlQmFzZU1hcCB8fCAhdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQgfHwgdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQuZ2V0TWFwKCkuYXJlVGlsZXNMb2FkZWQoKTtcbiAgICBjb25zdCByaWdodFRpbGVzUmVhZHkgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlQmFzZU1hcCB8fCAhdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50IHx8IHRoaXMucmlnaHRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5hcmVUaWxlc0xvYWRlZCgpO1xuXG4gICAgaWYgKGxlZnRMb2FkZWQgJiYgcmlnaHRMb2FkZWQgJiYgbGVmdFRpbGVzUmVhZHkgJiYgcmlnaHRUaWxlc1JlYWR5KSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGVGcmFtZSgpO1xuICAgICAgcHJvY2VlZFRvTmV4dEZyYW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9hcmVMYXllcnNMb2FkZWQoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlY2tSZWYgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLmxlZnREZWNrUmVmIDogdGhpcy5yaWdodERlY2tSZWY7XG4gICAgaWYgKCFkZWNrUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsYXllcnMgPSBkZWNrUmVmLmN1cnJlbnQucHJvcHMubGF5ZXJzIHx8IFtdO1xuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGxheWVyOiBhbnkpID0+IGxheWVyLmlzTG9hZGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXBvc2l0ZWQgY2FudmFzIGVsZW1lbnQgZm9yIHZpZGVvIGNhcHR1cmUuXG4gICAqL1xuICBnZXRDb21wb3NpdGVDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NpdGVDYW52YXNSZWYuY3VycmVudDtcbiAgfVxuXG4gIF9jcmVhdGVMYXllcnMobWFwSW5kZXg6IG51bWJlciwgYmVmb3JlSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB7ZGVja1Byb3BzLCBtYXBEYXRhLCB2aWV3U3RhdGV9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZGVja1Byb3BzICYmIGRlY2tQcm9wcy5sYXllcnMpIHtcbiAgICAgIHJldHVybiBkZWNrUHJvcHMubGF5ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlS2VwbGVyTGF5ZXJzKG1hcERhdGEsIHZpZXdTdGF0ZSwgbWFwSW5kZXgsIGJlZm9yZUlkKTtcbiAgfVxuXG4gIF9vbkxlZnRNYXBMb2FkID0gKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMubGVmdE1hcFJlZi5jdXJyZW50Py5nZXRNYXAoKTtcbiAgICBpZiAobWFwKSB7XG4gICAgICBtYXAub24oJ3JlbmRlcicsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmxlZnRSZWFkeSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2xlZnRSZWFkeTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyeUNvbXBvc2l0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9vblJpZ2h0TWFwTG9hZCA9ICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLnJpZ2h0TWFwUmVmLmN1cnJlbnQ/LmdldE1hcCgpO1xuICAgIGlmIChtYXApIHtcbiAgICAgIG1hcC5vbigncmVuZGVyJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUucmlnaHRSZWFkeSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3JpZ2h0UmVhZHk6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cnlDb21wb3NpdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfdHJ5Q29tcG9zaXRlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmxlZnRSZWFkeSAmJiB0aGlzLnN0YXRlLnJpZ2h0UmVhZHkpIHtcbiAgICAgIHRoaXMuX2NvbXBvc2l0ZUZyYW1lKCk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlck1hcENhbnZhcyhcbiAgICBzaWRlOiAnbGVmdCcgfCAncmlnaHQnLFxuICAgIG1hcEluZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qge3ZpZXdTdGF0ZSwgYWRhcHRlciwgZGVja1Byb3BzLCBtYXBQcm9wcywgZGlzYWJsZUJhc2VNYXAsIG1hcGJveExheWVyQmVmb3JlSWR9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLl9nZXRDb250YWluZXIoKTtcbiAgICBjb25zdCBrZXBsZXJMYXllcnMgPSB0aGlzLl9jcmVhdGVMYXllcnMobWFwSW5kZXgsIG1hcGJveExheWVyQmVmb3JlSWQpO1xuICAgIGNvbnN0IG1hcFJlZiA9IHNpZGUgPT09ICdsZWZ0JyA/IHRoaXMubGVmdE1hcFJlZiA6IHRoaXMucmlnaHRNYXBSZWY7XG4gICAgY29uc3QgZGVja1JlZiA9IHNpZGUgPT09ICdsZWZ0JyA/IHRoaXMubGVmdERlY2tSZWYgOiB0aGlzLnJpZ2h0RGVja1JlZjtcbiAgICBjb25zdCBvbk1hcExvYWQgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLl9vbkxlZnRNYXBMb2FkIDogdGhpcy5fb25SaWdodE1hcExvYWQ7XG4gICAgY29uc3QgZGVjayA9IGRlY2tSZWYuY3VycmVudDtcblxuICAgIGlmIChkaXNhYmxlQmFzZU1hcCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE1hcExheWVyICR3aWR0aD17d2lkdGh9ICRoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgICAgPERlY2tHTFxuICAgICAgICAgICAgcmVmPXtyZWYgPT4gc2V0UmVmKGRlY2tSZWYsIHJlZj8uZGVjayBhcyBhbnkpfVxuICAgICAgICAgICAgey4uLihhZGFwdGVyLmdldFByb3BzKHtkZWNrOiBkZWNrIGFzIGFueSwgZXh0cmFQcm9wczogey4uLmRlY2tQcm9wcywgbGF5ZXJzOiBrZXBsZXJMYXllcnN9fSkgYXMgYW55KX1cbiAgICAgICAgICAgIHsuLi50aGlzLl9nZXRDb250YWluZXIoKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L01hcExheWVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBtYXBTdHlsZTogbWFwU3R5bGVGcm9tUHJvcHMsXG4gICAgICBtYXBMaWIsXG4gICAgICB0cmFuc2Zvcm1SZXF1ZXN0XG4gICAgfSA9IChtYXBQcm9wcyB8fCB7fSkgYXMgYW55O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNYXBMYXllciAkd2lkdGg9e3dpZHRofSAkaGVpZ2h0PXtoZWlnaHR9PlxuICAgICAgICA8UmVhY3RNYXBHTFxuICAgICAgICAgIHJlZj17bWFwUmVmfVxuICAgICAgICAgIHN0eWxlPXt7d2lkdGgsIGhlaWdodH19XG4gICAgICAgICAgYW50aWFsaWFzXG4gICAgICAgICAgbWFwTGliPXttYXBMaWJ9XG4gICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17dHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICAgICAgICB7Li4udmlld1N0YXRlfVxuICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZUZyb21Qcm9wc31cbiAgICAgICAgICBvbkxvYWQ9e29uTWFwTG9hZH1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xPdmVybGF5XG4gICAgICAgICAgICByZWY9e2RlY2tSZWZ9XG4gICAgICAgICAgICBkZXZpY2VQcm9wcz17e3R5cGU6ICd3ZWJnbCcsIHdlYmdsOiB7c3RlbmNpbDogdHJ1ZX19fVxuICAgICAgICAgICAgey4uLmFkYXB0ZXIuZ2V0UHJvcHMoe2RlY2s6IGRlY2sgYXMgYW55LCBleHRyYVByb3BzOiB7Li4uZGVja1Byb3BzLCBsYXllcnM6IGtlcGxlckxheWVyc319KX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1JlYWN0TWFwR0w+XG4gICAgICA8L01hcExheWVyPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge3Jlc29sdXRpb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLl9nZXRDb250YWluZXIoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UHJldmlld0NvbnRhaW5lciAkd2lkdGg9e3dpZHRofSAkaGVpZ2h0PXtoZWlnaHR9PlxuICAgICAgICB7LyogSGlkZGVuIG1hcCBjYW52YXNlcyBmb3IgbGVmdCAobWFwSW5kZXg9MCkgYW5kIHJpZ2h0IChtYXBJbmRleD0xKSAqL31cbiAgICAgICAge3RoaXMuX3JlbmRlck1hcENhbnZhcygnbGVmdCcsIDApfVxuICAgICAgICB7dGhpcy5fcmVuZGVyTWFwQ2FudmFzKCdyaWdodCcsIDEpfVxuXG4gICAgICAgIHsvKiBWaXNpYmxlIGNvbXBvc2l0ZWQgb3V0cHV0ICovfVxuICAgICAgICA8VmlzaWJsZUNhbnZhc1xuICAgICAgICAgIHJlZj17dGhpcy5jb21wb3NpdGVDYW52YXNSZWZ9XG4gICAgICAgICAgd2lkdGg9e3Jlc29sdXRpb25bMF19XG4gICAgICAgICAgaGVpZ2h0PXtyZXNvbHV0aW9uWzFdfVxuICAgICAgICAgICR3aWR0aD17d2lkdGh9XG4gICAgICAgICAgJGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAvPlxuICAgICAgPC9QcmV2aWV3Q29udGFpbmVyPlxuICAgICk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUosdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxvQkFBQSxHQUFBUixPQUFBO0FBQW1HLElBQUFTLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUE7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3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