@kepler.gl/deckgl-layers 3.1.0-alpha.1 → 3.1.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 (33) hide show
  1. package/dist/3d-building-layer/3d-building-layer.d.ts +16 -0
  2. package/dist/3d-building-layer/3d-building-layer.js +69 -0
  3. package/dist/3d-building-layer/3d-building-utils.d.ts +9 -0
  4. package/dist/3d-building-layer/3d-building-utils.js +166 -0
  5. package/dist/3d-building-layer/types.d.ts +51 -0
  6. package/dist/3d-building-layer/types.js +6 -0
  7. package/dist/cluster-layer/cluster-layer.d.ts +44 -0
  8. package/dist/cluster-layer/cluster-layer.js +297 -0
  9. package/dist/column-layer/enhanced-column-layer.d.ts +12 -0
  10. package/dist/column-layer/enhanced-column-layer.js +131 -0
  11. package/dist/deckgl-extensions/filter-arrow-layer.d.ts +42 -0
  12. package/dist/deckgl-extensions/filter-arrow-layer.js +76 -0
  13. package/dist/deckgl-extensions/filter-shader-module.d.ts +16 -0
  14. package/dist/deckgl-extensions/filter-shader-module.js +27 -0
  15. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +7 -0
  16. package/dist/grid-layer/enhanced-cpu-grid-layer.js +67 -0
  17. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +7 -0
  18. package/dist/hexagon-layer/enhanced-hexagon-layer.js +67 -0
  19. package/dist/index.d.ts +11 -0
  20. package/dist/index.js +109 -0
  21. package/dist/layer-utils/cluster-utils.d.ts +22 -0
  22. package/dist/layer-utils/cluster-utils.js +93 -0
  23. package/dist/layer-utils/cpu-aggregator.d.ts +93 -0
  24. package/dist/layer-utils/cpu-aggregator.js +582 -0
  25. package/dist/layer-utils/shader-utils.d.ts +1 -0
  26. package/dist/layer-utils/shader-utils.js +29 -0
  27. package/dist/line-layer/line-layer.d.ts +12 -0
  28. package/dist/line-layer/line-layer.js +87 -0
  29. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +9 -0
  30. package/dist/svg-icon-layer/scatterplot-icon-layer.js +57 -0
  31. package/dist/svg-icon-layer/svg-icon-layer.d.ts +22 -0
  32. package/dist/svg-icon-layer/svg-icon-layer.js +102 -0
  33. package/package.json +5 -5
@@ -0,0 +1,297 @@
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["default"] = exports.clusterAggregation = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+ var _layers = require("@deck.gl/layers");
16
+ var _aggregationLayers = require("@deck.gl/aggregation-layers");
17
+ var _geoViewport = _interopRequireDefault(require("@mapbox/geo-viewport"));
18
+ var _cpuAggregator = _interopRequireWildcard(require("../layer-utils/cpu-aggregator"));
19
+ var _viewportMercatorProject = require("viewport-mercator-project");
20
+ var _d3Array = require("d3-array");
21
+ var _constants = require("@kepler.gl/constants");
22
+ var _clusterUtils = _interopRequireWildcard(require("../layer-utils/cluster-utils"));
23
+ 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); }
24
+ 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; }
25
+ 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; }
26
+ 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; }
27
+ 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)); }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
29
+ // Copyright contributors to the kepler.gl project
30
+ var defaultRadius = _constants.LAYER_VIS_CONFIGS.clusterRadius.defaultValue;
31
+ var defaultRadiusRange = _constants.LAYER_VIS_CONFIGS.clusterRadiusRange.defaultValue;
32
+ var defaultGetColorValue = function defaultGetColorValue(points) {
33
+ return points.length;
34
+ };
35
+ var defaultGetRadiusValue = function defaultGetRadiusValue(cell) {
36
+ return cell.filteredPoints ? cell.filteredPoints.length : cell.points.length;
37
+ };
38
+
39
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
+ function processGeoJSON(step, props, aggregation, _ref) {
41
+ var viewport = _ref.viewport;
42
+ var data = props.data,
43
+ getPosition = props.getPosition,
44
+ filterData = props.filterData;
45
+ var geoJSON = (0, _clusterUtils.getGeoJSON)(data, getPosition, filterData);
46
+ var clusterBuilder = new _clusterUtils["default"]();
47
+ this.setState({
48
+ geoJSON: geoJSON,
49
+ clusterBuilder: clusterBuilder
50
+ });
51
+ }
52
+
53
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
+ function getClusters(step, props, aggregation, _ref2) {
55
+ var viewport = _ref2.viewport;
56
+ var _this$state = this.state,
57
+ geoJSON = _this$state.geoJSON,
58
+ clusterBuilder = _this$state.clusterBuilder;
59
+ var clusterRadius = props.clusterRadius,
60
+ zoom = props.zoom,
61
+ width = props.width,
62
+ height = props.height;
63
+ var longitude = viewport.longitude,
64
+ latitude = viewport.latitude;
65
+
66
+ // zoom needs to be an integer for the different map utils. Also helps with cache key.
67
+ var bbox = _geoViewport["default"].bounds([longitude, latitude], zoom, [width, height]);
68
+ var clusters = clusterBuilder.clustersAtZoom({
69
+ bbox: bbox,
70
+ clusterRadius: clusterRadius,
71
+ geoJSON: geoJSON,
72
+ zoom: zoom
73
+ });
74
+ this.setState({
75
+ layerData: {
76
+ data: clusters
77
+ }
78
+ });
79
+ }
80
+ function getSubLayerRadius(dimensionState, dimension, layerProps) {
81
+ return function (cell) {
82
+ var getRadiusValue = layerProps.getRadiusValue;
83
+ var scaleFunc = dimensionState.scaleFunc;
84
+ return scaleFunc(getRadiusValue(cell));
85
+ };
86
+ }
87
+ var clusterAggregation = exports.clusterAggregation = {
88
+ key: 'position',
89
+ updateSteps: [{
90
+ key: 'geojson',
91
+ triggers: {
92
+ position: {
93
+ prop: 'getPosition',
94
+ updateTrigger: 'getPosition'
95
+ },
96
+ filterData: {
97
+ prop: 'filterData',
98
+ updateTrigger: 'filterData'
99
+ }
100
+ },
101
+ updater: processGeoJSON
102
+ }, {
103
+ key: 'clustering',
104
+ triggers: {
105
+ clusterRadius: {
106
+ prop: 'clusterRadius'
107
+ },
108
+ zoom: {
109
+ prop: 'zoom'
110
+ },
111
+ width: {
112
+ prop: 'width'
113
+ },
114
+ height: {
115
+ prop: 'height'
116
+ }
117
+ },
118
+ updater: getClusters
119
+ }]
120
+ };
121
+ function getRadiusValueDomain(step, props, dimensionUpdater) {
122
+ var key = dimensionUpdater.key;
123
+ var getRadiusValue = props.getRadiusValue;
124
+ var layerData = this.state.layerData;
125
+ var valueDomain = [0, (0, _d3Array.max)(layerData.data, getRadiusValue)];
126
+ this._setDimensionState(key, {
127
+ valueDomain: valueDomain
128
+ });
129
+ }
130
+ var clusterLayerDimensions = [_cpuAggregator.defaultColorDimension, {
131
+ key: 'radius',
132
+ accessor: 'getRadius',
133
+ nullValue: 0,
134
+ updateSteps: [{
135
+ key: 'getDomain',
136
+ triggers: {
137
+ value: {
138
+ prop: 'getRadiusValue',
139
+ updateTrigger: 'getRadiusValue'
140
+ }
141
+ },
142
+ updater: getRadiusValueDomain
143
+ }, {
144
+ key: 'getScaleFunc',
145
+ triggers: {
146
+ domain: {
147
+ prop: 'radiusDomain'
148
+ },
149
+ range: {
150
+ prop: 'radiusRange'
151
+ },
152
+ scaleType: {
153
+ prop: 'radiusScaleType'
154
+ }
155
+ },
156
+ updater: _cpuAggregator.getDimensionScale
157
+ }],
158
+ getSubLayerAccessor: getSubLayerRadius,
159
+ getPickingInfo: function getPickingInfo(dimensionState, cell, layerProps) {
160
+ var radiusValue = layerProps.getRadiusValue(cell);
161
+ return {
162
+ radiusValue: radiusValue
163
+ };
164
+ }
165
+ }];
166
+ var defaultProps = {
167
+ clusterRadius: defaultRadius,
168
+ colorDomain: null,
169
+ colorRange: _constants.DEFAULT_COLOR_RANGE,
170
+ colorScaleType: _constants.SCALE_TYPES.quantize,
171
+ radiusScaleType: _constants.SCALE_TYPES.sqrt,
172
+ radiusRange: defaultRadiusRange,
173
+ getPosition: {
174
+ type: 'accessor',
175
+ value: function value(x) {
176
+ return x.position;
177
+ }
178
+ },
179
+ getColorValue: {
180
+ type: 'accessor',
181
+ value: defaultGetColorValue
182
+ },
183
+ getRadiusValue: {
184
+ type: 'accessor',
185
+ value: defaultGetRadiusValue
186
+ }
187
+ };
188
+ var ClusterLayer = exports["default"] = /*#__PURE__*/function (_AggregationLayer) {
189
+ function ClusterLayer() {
190
+ (0, _classCallCheck2["default"])(this, ClusterLayer);
191
+ return _callSuper(this, ClusterLayer, arguments);
192
+ }
193
+ (0, _inherits2["default"])(ClusterLayer, _AggregationLayer);
194
+ return (0, _createClass2["default"])(ClusterLayer, [{
195
+ key: "initializeState",
196
+ value: function initializeState() {
197
+ var cpuAggregator = new _cpuAggregator["default"]({
198
+ aggregation: clusterAggregation,
199
+ dimensions: clusterLayerDimensions
200
+ });
201
+ this.state = {
202
+ cpuAggregator: cpuAggregator,
203
+ aggregatorState: cpuAggregator.state
204
+ };
205
+ var attributeManager = this.getAttributeManager();
206
+ attributeManager.add({
207
+ positions: {
208
+ size: 3,
209
+ accessor: 'getPosition'
210
+ }
211
+ });
212
+ }
213
+ }, {
214
+ key: "updateState",
215
+ value: function updateState(_ref3) {
216
+ var oldProps = _ref3.oldProps,
217
+ props = _ref3.props,
218
+ changeFlags = _ref3.changeFlags;
219
+ this.setState({
220
+ // make a copy of the internal state of cpuAggregator for testing
221
+ aggregatorState: this.state.cpuAggregator.updateState({
222
+ oldProps: oldProps,
223
+ props: props,
224
+ changeFlags: changeFlags
225
+ }, {
226
+ viewport: this.context.viewport,
227
+ attributes: this.getAttributes(),
228
+ numInstances: this.getNumInstances(props)
229
+ })
230
+ });
231
+ }
232
+ }, {
233
+ key: "getPickingInfo",
234
+ value: function getPickingInfo(_ref4) {
235
+ var info = _ref4.info;
236
+ return this.state.cpuAggregator.getPickingInfo({
237
+ info: info
238
+ }, this.props);
239
+ }
240
+ }, {
241
+ key: "_getSublayerUpdateTriggers",
242
+ value: function _getSublayerUpdateTriggers() {
243
+ return this.state.cpuAggregator.getUpdateTriggers(this.props);
244
+ }
245
+ }, {
246
+ key: "_getSubLayerAccessors",
247
+ value: function _getSubLayerAccessors() {
248
+ return {
249
+ getRadius: this.state.cpuAggregator.getAccessor('radius', this.props),
250
+ getFillColor: this.state.cpuAggregator.getAccessor('fillColor', this.props)
251
+ };
252
+ }
253
+ }, {
254
+ key: "renderLayers",
255
+ value: function renderLayers() {
256
+ // for subclassing, override this method to return
257
+ // customized sub layer props
258
+ var _this$props = this.props,
259
+ id = _this$props.id,
260
+ radiusScale = _this$props.radiusScale;
261
+ var cpuAggregator = this.state.cpuAggregator;
262
+
263
+ // base layer props
264
+ var _this$props2 = this.props,
265
+ visible = _this$props2.visible,
266
+ opacity = _this$props2.opacity,
267
+ pickable = _this$props2.pickable,
268
+ autoHighlight = _this$props2.autoHighlight,
269
+ highlightColor = _this$props2.highlightColor;
270
+ var updateTriggers = this._getSublayerUpdateTriggers();
271
+ var accessors = this._getSubLayerAccessors();
272
+
273
+ // @ts-expect-error
274
+ var distanceScale = (0, _viewportMercatorProject.getDistanceScales)(this.context.viewport);
275
+ var metersPerPixel = distanceScale.metersPerPixel[0];
276
+
277
+ // return props to the sublayer constructor
278
+ return new _layers.ScatterplotLayer(_objectSpread({
279
+ id: "".concat(id, "-cluster"),
280
+ data: cpuAggregator.state.layerData.data,
281
+ radiusScale: metersPerPixel * radiusScale,
282
+ visible: visible,
283
+ opacity: opacity,
284
+ pickable: pickable,
285
+ autoHighlight: autoHighlight,
286
+ highlightColor: highlightColor,
287
+ updateTriggers: updateTriggers,
288
+ parameters: {
289
+ depthMask: false
290
+ }
291
+ }, accessors));
292
+ }
293
+ }]);
294
+ }(_aggregationLayers._AggregationLayer);
295
+ ClusterLayer.layerName = 'ClusterLayer';
296
+ ClusterLayer.defaultProps = defaultProps;
297
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF5ZXJzIiwicmVxdWlyZSIsIl9hZ2dyZWdhdGlvbkxheWVycyIsIl9nZW9WaWV3cG9ydCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3B1QWdncmVnYXRvciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3ZpZXdwb3J0TWVyY2F0b3JQcm9qZWN0IiwiX2QzQXJyYXkiLCJfY29uc3RhbnRzIiwiX2NsdXN0ZXJVdGlscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiZGVmYXVsdFJhZGl1cyIsIkxBWUVSX1ZJU19DT05GSUdTIiwiY2x1c3RlclJhZGl1cyIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHRSYWRpdXNSYW5nZSIsImNsdXN0ZXJSYWRpdXNSYW5nZSIsImRlZmF1bHRHZXRDb2xvclZhbHVlIiwicG9pbnRzIiwiZGVmYXVsdEdldFJhZGl1c1ZhbHVlIiwiY2VsbCIsImZpbHRlcmVkUG9pbnRzIiwicHJvY2Vzc0dlb0pTT04iLCJzdGVwIiwicHJvcHMiLCJhZ2dyZWdhdGlvbiIsIl9yZWYiLCJ2aWV3cG9ydCIsImRhdGEiLCJnZXRQb3NpdGlvbiIsImZpbHRlckRhdGEiLCJnZW9KU09OIiwiZ2V0R2VvSlNPTiIsImNsdXN0ZXJCdWlsZGVyIiwiQ2x1c3RlckJ1aWxkZXIiLCJzZXRTdGF0ZSIsImdldENsdXN0ZXJzIiwiX3JlZjIiLCJfdGhpcyRzdGF0ZSIsInN0YXRlIiwiem9vbSIsIndpZHRoIiwiaGVpZ2h0IiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJiYm94IiwiZ2VvVmlld3BvcnQiLCJib3VuZHMiLCJjbHVzdGVycyIsImNsdXN0ZXJzQXRab29tIiwibGF5ZXJEYXRhIiwiZ2V0U3ViTGF5ZXJSYWRpdXMiLCJkaW1lbnNpb25TdGF0ZSIsImRpbWVuc2lvbiIsImxheWVyUHJvcHMiLCJnZXRSYWRpdXNWYWx1ZSIsInNjYWxlRnVuYyIsImNsdXN0ZXJBZ2dyZWdhdGlvbiIsImV4cG9ydHMiLCJrZXkiLCJ1cGRhdGVTdGVwcyIsInRyaWdnZXJzIiwicG9zaXRpb24iLCJwcm9wIiwidXBkYXRlVHJpZ2dlciIsInVwZGF0ZXIiLCJnZXRSYWRpdXNWYWx1ZURvbWFpbiIsImRpbWVuc2lvblVwZGF0ZXIiLCJ2YWx1ZURvbWFpbiIsIm1heCIsIl9zZXREaW1lbnNpb25TdGF0ZSIsImNsdXN0ZXJMYXllckRpbWVuc2lvbnMiLCJkZWZhdWx0Q29sb3JEaW1lbnNpb24iLCJhY2Nlc3NvciIsIm51bGxWYWx1ZSIsInZhbHVlIiwiZG9tYWluIiwicmFuZ2UiLCJzY2FsZVR5cGUiLCJnZXREaW1lbnNpb25TY2FsZSIsImdldFN1YkxheWVyQWNjZXNzb3IiLCJnZXRQaWNraW5nSW5mbyIsInJhZGl1c1ZhbHVlIiwiZGVmYXVsdFByb3BzIiwiY29sb3JEb21haW4iLCJjb2xvclJhbmdlIiwiREVGQVVMVF9DT0xPUl9SQU5HRSIsImNvbG9yU2NhbGVUeXBlIiwiU0NBTEVfVFlQRVMiLCJxdWFudGl6ZSIsInJhZGl1c1NjYWxlVHlwZSIsInNxcnQiLCJyYWRpdXNSYW5nZSIsInR5cGUiLCJ4IiwiZ2V0Q29sb3JWYWx1ZSIsIkNsdXN0ZXJMYXllciIsIl9BZ2dyZWdhdGlvbkxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwiaW5pdGlhbGl6ZVN0YXRlIiwiY3B1QWdncmVnYXRvciIsIkNQVUFnZ3JlZ2F0b3IiLCJkaW1lbnNpb25zIiwiYWdncmVnYXRvclN0YXRlIiwiYXR0cmlidXRlTWFuYWdlciIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJhZGQiLCJwb3NpdGlvbnMiLCJzaXplIiwidXBkYXRlU3RhdGUiLCJfcmVmMyIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJjb250ZXh0IiwiYXR0cmlidXRlcyIsImdldEF0dHJpYnV0ZXMiLCJudW1JbnN0YW5jZXMiLCJnZXROdW1JbnN0YW5jZXMiLCJfcmVmNCIsImluZm8iLCJfZ2V0U3VibGF5ZXJVcGRhdGVUcmlnZ2VycyIsImdldFVwZGF0ZVRyaWdnZXJzIiwiX2dldFN1YkxheWVyQWNjZXNzb3JzIiwiZ2V0UmFkaXVzIiwiZ2V0QWNjZXNzb3IiLCJnZXRGaWxsQ29sb3IiLCJyZW5kZXJMYXllcnMiLCJfdGhpcyRwcm9wcyIsImlkIiwicmFkaXVzU2NhbGUiLCJfdGhpcyRwcm9wczIiLCJ2aXNpYmxlIiwib3BhY2l0eSIsInBpY2thYmxlIiwiYXV0b0hpZ2hsaWdodCIsImhpZ2hsaWdodENvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJhY2Nlc3NvcnMiLCJkaXN0YW5jZVNjYWxlIiwiZ2V0RGlzdGFuY2VTY2FsZXMiLCJtZXRlcnNQZXJQaXhlbCIsIlNjYXR0ZXJwbG90TGF5ZXIiLCJjb25jYXQiLCJwYXJhbWV0ZXJzIiwiZGVwdGhNYXNrIiwiQWdncmVnYXRpb25MYXllciIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbHVzdGVyLWxheWVyL2NsdXN0ZXItbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtTY2F0dGVycGxvdExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtfQWdncmVnYXRpb25MYXllciBhcyBBZ2dyZWdhdGlvbkxheWVyfSBmcm9tICdAZGVjay5nbC9hZ2dyZWdhdGlvbi1sYXllcnMnO1xuXG5pbXBvcnQgZ2VvVmlld3BvcnQgZnJvbSAnQG1hcGJveC9nZW8tdmlld3BvcnQnO1xuaW1wb3J0IENQVUFnZ3JlZ2F0b3IsIHtcbiAgQWdncmVnYXRpb25UeXBlLFxuICBkZWZhdWx0Q29sb3JEaW1lbnNpb24sXG4gIERpbWVuc2lvblR5cGUsXG4gIGdldERpbWVuc2lvblNjYWxlXG59IGZyb20gJy4uL2xheWVyLXV0aWxzL2NwdS1hZ2dyZWdhdG9yJztcbmltcG9ydCB7Z2V0RGlzdGFuY2VTY2FsZXN9IGZyb20gJ3ZpZXdwb3J0LW1lcmNhdG9yLXByb2plY3QnO1xuaW1wb3J0IHttYXh9IGZyb20gJ2QzLWFycmF5JztcblxuaW1wb3J0IHtTQ0FMRV9UWVBFUywgREVGQVVMVF9DT0xPUl9SQU5HRSwgTEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBDbHVzdGVyQnVpbGRlciwge2dldEdlb0pTT059IGZyb20gJy4uL2xheWVyLXV0aWxzL2NsdXN0ZXItdXRpbHMnO1xuaW1wb3J0IHtSR0JBQ29sb3J9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBZ2dyZWdhdGlvbkxheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL2FnZ3JlZ2F0aW9uLWxheWVycy9hZ2dyZWdhdGlvbi1sYXllcic7XG5cbmNvbnN0IGRlZmF1bHRSYWRpdXMgPSBMQVlFUl9WSVNfQ09ORklHUy5jbHVzdGVyUmFkaXVzLmRlZmF1bHRWYWx1ZTtcbmNvbnN0IGRlZmF1bHRSYWRpdXNSYW5nZSA9IExBWUVSX1ZJU19DT05GSUdTLmNsdXN0ZXJSYWRpdXNSYW5nZS5kZWZhdWx0VmFsdWU7XG5cbmNvbnN0IGRlZmF1bHRHZXRDb2xvclZhbHVlID0gcG9pbnRzID0+IHBvaW50cy5sZW5ndGg7XG5jb25zdCBkZWZhdWx0R2V0UmFkaXVzVmFsdWUgPSBjZWxsID0+XG4gIGNlbGwuZmlsdGVyZWRQb2ludHMgPyBjZWxsLmZpbHRlcmVkUG9pbnRzLmxlbmd0aCA6IGNlbGwucG9pbnRzLmxlbmd0aDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZnVuY3Rpb24gcHJvY2Vzc0dlb0pTT04odGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGFnZ3JlZ2F0aW9uLCB7dmlld3BvcnR9KSB7XG4gIGNvbnN0IHtkYXRhLCBnZXRQb3NpdGlvbiwgZmlsdGVyRGF0YX0gPSBwcm9wcztcbiAgY29uc3QgZ2VvSlNPTiA9IGdldEdlb0pTT04oZGF0YSwgZ2V0UG9zaXRpb24sIGZpbHRlckRhdGEpO1xuICBjb25zdCBjbHVzdGVyQnVpbGRlciA9IG5ldyBDbHVzdGVyQnVpbGRlcigpO1xuXG4gIHRoaXMuc2V0U3RhdGUoe2dlb0pTT04sIGNsdXN0ZXJCdWlsZGVyfSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGdldENsdXN0ZXJzKHRoaXM6IENQVUFnZ3JlZ2F0b3IsIHN0ZXAsIHByb3BzLCBhZ2dyZWdhdGlvbiwge3ZpZXdwb3J0fSkge1xuICBjb25zdCB7Z2VvSlNPTiwgY2x1c3RlckJ1aWxkZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgY29uc3Qge2NsdXN0ZXJSYWRpdXMsIHpvb20sIHdpZHRoLCBoZWlnaHR9ID0gcHJvcHM7XG4gIGNvbnN0IHtsb25naXR1ZGUsIGxhdGl0dWRlfSA9IHZpZXdwb3J0O1xuXG4gIC8vIHpvb20gbmVlZHMgdG8gYmUgYW4gaW50ZWdlciBmb3IgdGhlIGRpZmZlcmVudCBtYXAgdXRpbHMuIEFsc28gaGVscHMgd2l0aCBjYWNoZSBrZXkuXG4gIGNvbnN0IGJib3ggPSBnZW9WaWV3cG9ydC5ib3VuZHMoW2xvbmdpdHVkZSwgbGF0aXR1ZGVdLCB6b29tLCBbd2lkdGgsIGhlaWdodF0pO1xuICBjb25zdCBjbHVzdGVycyA9IGNsdXN0ZXJCdWlsZGVyLmNsdXN0ZXJzQXRab29tKHtiYm94LCBjbHVzdGVyUmFkaXVzLCBnZW9KU09OLCB6b29tfSk7XG5cbiAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgbGF5ZXJEYXRhOiB7ZGF0YTogY2x1c3RlcnN9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTdWJMYXllclJhZGl1cyhkaW1lbnNpb25TdGF0ZSwgZGltZW5zaW9uLCBsYXllclByb3BzKSB7XG4gIHJldHVybiBjZWxsID0+IHtcbiAgICBjb25zdCB7Z2V0UmFkaXVzVmFsdWV9ID0gbGF5ZXJQcm9wcztcbiAgICBjb25zdCB7c2NhbGVGdW5jfSA9IGRpbWVuc2lvblN0YXRlO1xuICAgIHJldHVybiBzY2FsZUZ1bmMoZ2V0UmFkaXVzVmFsdWUoY2VsbCkpO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgY2x1c3RlckFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvblR5cGUgPSB7XG4gIGtleTogJ3Bvc2l0aW9uJyxcbiAgdXBkYXRlU3RlcHM6IFtcbiAgICB7XG4gICAgICBrZXk6ICdnZW9qc29uJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgcHJvcDogJ2dldFBvc2l0aW9uJyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZ2V0UG9zaXRpb24nXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlckRhdGE6IHtcbiAgICAgICAgICBwcm9wOiAnZmlsdGVyRGF0YScsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2ZpbHRlckRhdGEnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBwcm9jZXNzR2VvSlNPTlxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnY2x1c3RlcmluZycsXG4gICAgICB0cmlnZ2Vyczoge1xuICAgICAgICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgICAgICAgcHJvcDogJ2NsdXN0ZXJSYWRpdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHpvb206IHtcbiAgICAgICAgICBwcm9wOiAnem9vbSdcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICBwcm9wOiAnd2lkdGgnXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgIHByb3A6ICdoZWlnaHQnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1cGRhdGVyOiBnZXRDbHVzdGVyc1xuICAgIH1cbiAgXVxufTtcblxuZnVuY3Rpb24gZ2V0UmFkaXVzVmFsdWVEb21haW4odGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGRpbWVuc2lvblVwZGF0ZXIpIHtcbiAgY29uc3Qge2tleX0gPSBkaW1lbnNpb25VcGRhdGVyO1xuICBjb25zdCB7Z2V0UmFkaXVzVmFsdWV9ID0gcHJvcHM7XG4gIGNvbnN0IHtsYXllckRhdGF9ID0gdGhpcy5zdGF0ZTtcblxuICBjb25zdCB2YWx1ZURvbWFpbiA9IFswLCBtYXgobGF5ZXJEYXRhLmRhdGEsIGdldFJhZGl1c1ZhbHVlKV07XG4gIHRoaXMuX3NldERpbWVuc2lvblN0YXRlKGtleSwge3ZhbHVlRG9tYWlufSk7XG59XG5cbmNvbnN0IGNsdXN0ZXJMYXllckRpbWVuc2lvbnM6IFtEaW1lbnNpb25UeXBlPFJHQkFDb2xvcj4sIERpbWVuc2lvblR5cGU8bnVtYmVyPl0gPSBbXG4gIGRlZmF1bHRDb2xvckRpbWVuc2lvbixcbiAge1xuICAgIGtleTogJ3JhZGl1cycsXG4gICAgYWNjZXNzb3I6ICdnZXRSYWRpdXMnLFxuICAgIG51bGxWYWx1ZTogMCxcbiAgICB1cGRhdGVTdGVwczogW1xuICAgICAge1xuICAgICAgICBrZXk6ICdnZXREb21haW4nLFxuICAgICAgICB0cmlnZ2Vyczoge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBwcm9wOiAnZ2V0UmFkaXVzVmFsdWUnLFxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2dldFJhZGl1c1ZhbHVlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlcjogZ2V0UmFkaXVzVmFsdWVEb21haW5cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2dldFNjYWxlRnVuYycsXG4gICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgZG9tYWluOiB7cHJvcDogJ3JhZGl1c0RvbWFpbid9LFxuICAgICAgICAgIHJhbmdlOiB7cHJvcDogJ3JhZGl1c1JhbmdlJ30sXG4gICAgICAgICAgc2NhbGVUeXBlOiB7cHJvcDogJ3JhZGl1c1NjYWxlVHlwZSd9XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZXI6IGdldERpbWVuc2lvblNjYWxlXG4gICAgICB9XG4gICAgXSxcbiAgICBnZXRTdWJMYXllckFjY2Vzc29yOiBnZXRTdWJMYXllclJhZGl1cyxcbiAgICBnZXRQaWNraW5nSW5mbzogKGRpbWVuc2lvblN0YXRlLCBjZWxsLCBsYXllclByb3BzKSA9PiB7XG4gICAgICBjb25zdCByYWRpdXNWYWx1ZSA9IGxheWVyUHJvcHMuZ2V0UmFkaXVzVmFsdWUoY2VsbCk7XG4gICAgICByZXR1cm4ge3JhZGl1c1ZhbHVlfTtcbiAgICB9XG4gIH1cbl07XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgY2x1c3RlclJhZGl1czogZGVmYXVsdFJhZGl1cyxcbiAgY29sb3JEb21haW46IG51bGwsXG4gIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfUkFOR0UsXG4gIGNvbG9yU2NhbGVUeXBlOiBTQ0FMRV9UWVBFUy5xdWFudGl6ZSxcbiAgcmFkaXVzU2NhbGVUeXBlOiBTQ0FMRV9UWVBFUy5zcXJ0LFxuICByYWRpdXNSYW5nZTogZGVmYXVsdFJhZGl1c1JhbmdlLFxuICBnZXRQb3NpdGlvbjoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiB4ID0+IHgucG9zaXRpb259LFxuICBnZXRDb2xvclZhbHVlOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IGRlZmF1bHRHZXRDb2xvclZhbHVlfSxcbiAgZ2V0UmFkaXVzVmFsdWU6IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogZGVmYXVsdEdldFJhZGl1c1ZhbHVlfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2x1c3RlckxheWVyIGV4dGVuZHMgQWdncmVnYXRpb25MYXllcjxcbiAgYW55LFxuICBBZ2dyZWdhdGlvbkxheWVyUHJvcHM8YW55PiAmIHtyYWRpdXNTY2FsZTogbnVtYmVyfVxuPiB7XG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBjb25zdCBjcHVBZ2dyZWdhdG9yID0gbmV3IENQVUFnZ3JlZ2F0b3Ioe1xuICAgICAgYWdncmVnYXRpb246IGNsdXN0ZXJBZ2dyZWdhdGlvbixcbiAgICAgIGRpbWVuc2lvbnM6IGNsdXN0ZXJMYXllckRpbWVuc2lvbnNcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjcHVBZ2dyZWdhdG9yLFxuICAgICAgYWdncmVnYXRvclN0YXRlOiBjcHVBZ2dyZWdhdG9yLnN0YXRlXG4gICAgfTtcbiAgICBjb25zdCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5nZXRBdHRyaWJ1dGVNYW5hZ2VyKCk7XG4gICAgYXR0cmlidXRlTWFuYWdlci5hZGQoe1xuICAgICAgcG9zaXRpb25zOiB7c2l6ZTogMywgYWNjZXNzb3I6ICdnZXRQb3NpdGlvbid9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc30pIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBjcHVBZ2dyZWdhdG9yIGZvciB0ZXN0aW5nXG4gICAgICBhZ2dyZWdhdG9yU3RhdGU6IHRoaXMuc3RhdGUuY3B1QWdncmVnYXRvci51cGRhdGVTdGF0ZShcbiAgICAgICAge29sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3N9LFxuICAgICAgICB7XG4gICAgICAgICAgdmlld3BvcnQ6IHRoaXMuY29udGV4dC52aWV3cG9ydCxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLmdldEF0dHJpYnV0ZXMoKSxcbiAgICAgICAgICBudW1JbnN0YW5jZXM6IHRoaXMuZ2V0TnVtSW5zdGFuY2VzKHByb3BzKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBnZXRQaWNraW5nSW5mbyh7aW5mb30pIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5jcHVBZ2dyZWdhdG9yLmdldFBpY2tpbmdJbmZvKHtpbmZvfSwgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBfZ2V0U3VibGF5ZXJVcGRhdGVUcmlnZ2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5jcHVBZ2dyZWdhdG9yLmdldFVwZGF0ZVRyaWdnZXJzKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgX2dldFN1YkxheWVyQWNjZXNzb3JzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRSYWRpdXM6IHRoaXMuc3RhdGUuY3B1QWdncmVnYXRvci5nZXRBY2Nlc3NvcigncmFkaXVzJywgdGhpcy5wcm9wcyksXG4gICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuc3RhdGUuY3B1QWdncmVnYXRvci5nZXRBY2Nlc3NvcignZmlsbENvbG9yJywgdGhpcy5wcm9wcylcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyTGF5ZXJzKCkge1xuICAgIC8vIGZvciBzdWJjbGFzc2luZywgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcmV0dXJuXG4gICAgLy8gY3VzdG9taXplZCBzdWIgbGF5ZXIgcHJvcHNcbiAgICBjb25zdCB7aWQsIHJhZGl1c1NjYWxlfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge2NwdUFnZ3JlZ2F0b3J9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIGJhc2UgbGF5ZXIgcHJvcHNcbiAgICBjb25zdCB7dmlzaWJsZSwgb3BhY2l0eSwgcGlja2FibGUsIGF1dG9IaWdobGlnaHQsIGhpZ2hsaWdodENvbG9yfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB0aGlzLl9nZXRTdWJsYXllclVwZGF0ZVRyaWdnZXJzKCk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5fZ2V0U3ViTGF5ZXJBY2Nlc3NvcnMoKTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBjb25zdCBkaXN0YW5jZVNjYWxlID0gZ2V0RGlzdGFuY2VTY2FsZXModGhpcy5jb250ZXh0LnZpZXdwb3J0KTtcbiAgICBjb25zdCBtZXRlcnNQZXJQaXhlbCA9IGRpc3RhbmNlU2NhbGUubWV0ZXJzUGVyUGl4ZWxbMF07XG5cbiAgICAvLyByZXR1cm4gcHJvcHMgdG8gdGhlIHN1YmxheWVyIGNvbnN0cnVjdG9yXG4gICAgcmV0dXJuIG5ldyBTY2F0dGVycGxvdExheWVyKHtcbiAgICAgIGlkOiBgJHtpZH0tY2x1c3RlcmAsXG4gICAgICBkYXRhOiBjcHVBZ2dyZWdhdG9yLnN0YXRlLmxheWVyRGF0YS5kYXRhLFxuICAgICAgcmFkaXVzU2NhbGU6IG1ldGVyc1BlclBpeGVsICogcmFkaXVzU2NhbGUsXG4gICAgICB2aXNpYmxlLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIHBpY2thYmxlLFxuICAgICAgYXV0b0hpZ2hsaWdodCxcbiAgICAgIGhpZ2hsaWdodENvbG9yLFxuICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcbiAgICAgIH0sXG4gICAgICAuLi5hY2Nlc3NvcnNcbiAgICB9KTtcbiAgfVxufVxuXG5DbHVzdGVyTGF5ZXIubGF5ZXJOYW1lID0gJ0NsdXN0ZXJMYXllcic7XG5DbHVzdGVyTGF5ZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGtCQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxZQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9BQUE7QUFNQSxJQUFBTSx3QkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBRUEsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsYUFBQSxHQUFBSix1QkFBQSxDQUFBTCxPQUFBO0FBQXdFLFNBQUFVLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBTix3QkFBQU0sQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxD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
@@ -0,0 +1,12 @@
1
+ import { ColumnLayer, ColumnLayerProps } from '@deck.gl/layers/typed';
2
+ declare type EnhancedColumnLayerProps = ColumnLayerProps<any> & {
3
+ strokeOpacity: any;
4
+ };
5
+ declare class EnhancedColumnLayer extends ColumnLayer<any, EnhancedColumnLayerProps> {
6
+ getShaders(): any;
7
+ initializeState(): void;
8
+ draw({ uniforms }: {
9
+ uniforms: any;
10
+ }): void;
11
+ }
12
+ export default EnhancedColumnLayer;
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+ var _core = require("@deck.gl/core");
16
+ var _typed = require("@deck.gl/layers/typed");
17
+ var _constants = _interopRequireDefault(require("@luma.gl/constants"));
18
+ var _ = require("../");
19
+ 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; }
20
+ 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; }
21
+ 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)); }
22
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
23
+ function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; } // SPDX-License-Identifier: MIT
24
+ // Copyright contributors to the kepler.gl project
25
+ function addInstanceCoverage(vs) {
26
+ var addDecl = (0, _.editShader)(vs, 'hexagon cell vs add instance 1', 'in vec3 instancePickingColors;', "in vec3 instancePickingColors;\n in float instanceCoverage;");
27
+ return (0, _.editShader)(addDecl, 'hexagon cell vs add instance 2', 'float dotRadius = radius * coverage * shouldRender;', 'float dotRadius = radius * coverage * instanceCoverage * shouldRender;');
28
+ }
29
+ // TODO: export all deck.gl layers from kepler.gl
30
+ var EnhancedColumnLayer = /*#__PURE__*/function (_ColumnLayer) {
31
+ function EnhancedColumnLayer() {
32
+ (0, _classCallCheck2["default"])(this, EnhancedColumnLayer);
33
+ return _callSuper(this, EnhancedColumnLayer, arguments);
34
+ }
35
+ (0, _inherits2["default"])(EnhancedColumnLayer, _ColumnLayer);
36
+ return (0, _createClass2["default"])(EnhancedColumnLayer, [{
37
+ key: "getShaders",
38
+ value: function getShaders() {
39
+ var shaders = _superPropGet(EnhancedColumnLayer, "getShaders", this, 3)([]);
40
+ return _objectSpread(_objectSpread({}, shaders), {}, {
41
+ vs: addInstanceCoverage(shaders.vs)
42
+ });
43
+ }
44
+ }, {
45
+ key: "initializeState",
46
+ value: function initializeState() {
47
+ var _this$getAttributeMan;
48
+ _superPropGet(EnhancedColumnLayer, "initializeState", this, 3)([]);
49
+ (_this$getAttributeMan = this.getAttributeManager()) === null || _this$getAttributeMan === void 0 || _this$getAttributeMan.addInstanced({
50
+ instanceCoverage: {
51
+ size: 1,
52
+ accessor: 'getCoverage'
53
+ }
54
+ });
55
+ }
56
+ }, {
57
+ key: "draw",
58
+ value: function draw(_ref) {
59
+ var uniforms = _ref.uniforms;
60
+ var _this$props = this.props,
61
+ lineWidthUnits = _this$props.lineWidthUnits,
62
+ lineWidthScale = _this$props.lineWidthScale,
63
+ lineWidthMinPixels = _this$props.lineWidthMinPixels,
64
+ lineWidthMaxPixels = _this$props.lineWidthMaxPixels,
65
+ radiusUnits = _this$props.radiusUnits,
66
+ elevationScale = _this$props.elevationScale,
67
+ extruded = _this$props.extruded,
68
+ filled = _this$props.filled,
69
+ stroked = _this$props.stroked,
70
+ strokeOpacity = _this$props.strokeOpacity,
71
+ wireframe = _this$props.wireframe,
72
+ offset = _this$props.offset,
73
+ coverage = _this$props.coverage,
74
+ radius = _this$props.radius,
75
+ angle = _this$props.angle;
76
+ var _this$state = this.state,
77
+ model = _this$state.model,
78
+ fillVertexCount = _this$state.fillVertexCount,
79
+ wireframeVertexCount = _this$state.wireframeVertexCount,
80
+ edgeDistance = _this$state.edgeDistance;
81
+ model.setUniforms(uniforms).setUniforms({
82
+ radius: radius,
83
+ angle: angle / 180 * Math.PI,
84
+ offset: offset,
85
+ extruded: extruded,
86
+ stroked: stroked,
87
+ coverage: coverage,
88
+ elevationScale: elevationScale,
89
+ edgeDistance: edgeDistance,
90
+ radiusUnits: _core.UNIT[radiusUnits],
91
+ widthUnits: _core.UNIT[lineWidthUnits],
92
+ widthScale: lineWidthScale,
93
+ widthMinPixels: lineWidthMinPixels,
94
+ widthMaxPixels: lineWidthMaxPixels
95
+ });
96
+
97
+ // When drawing 3d: draw wireframe first so it doesn't get occluded by depth test
98
+ if (extruded && wireframe) {
99
+ model.setProps({
100
+ isIndexed: true
101
+ });
102
+ model.setVertexCount(wireframeVertexCount).setDrawMode(_constants["default"].LINES).setUniforms({
103
+ isStroke: true
104
+ }).draw();
105
+ }
106
+ if (filled) {
107
+ model.setProps({
108
+ isIndexed: false
109
+ });
110
+ model.setVertexCount(fillVertexCount).setDrawMode(_constants["default"].TRIANGLE_STRIP).setUniforms({
111
+ isStroke: false
112
+ }).draw();
113
+ }
114
+ // When drawing 2d: draw fill before stroke so that the outline is always on top
115
+ if (!extruded && stroked) {
116
+ model.setProps({
117
+ isIndexed: false
118
+ });
119
+ // The width of the stroke is achieved by flattening the side of the cylinder.
120
+ // Skip the last 1/3 of the vertices which is the top.
121
+ model.setVertexCount(fillVertexCount * 2 / 3).setDrawMode(_constants["default"].TRIANGLE_STRIP).setUniforms({
122
+ isStroke: true,
123
+ opacity: strokeOpacity
124
+ }).draw();
125
+ }
126
+ }
127
+ }]);
128
+ }(_typed.ColumnLayer);
129
+ EnhancedColumnLayer.layerName = 'EnhancedColumnLayer';
130
+ var _default = exports["default"] = EnhancedColumnLayer;
131
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfdHlwZWQiLCJfY29uc3RhbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl8iLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJhZGRJbnN0YW5jZUNvdmVyYWdlIiwidnMiLCJhZGREZWNsIiwiZWRpdFNoYWRlciIsIkVuaGFuY2VkQ29sdW1uTGF5ZXIiLCJfQ29sdW1uTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImdldFNoYWRlcnMiLCJzaGFkZXJzIiwiaW5pdGlhbGl6ZVN0YXRlIiwiX3RoaXMkZ2V0QXR0cmlidXRlTWFuIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlQ292ZXJhZ2UiLCJzaXplIiwiYWNjZXNzb3IiLCJkcmF3IiwiX3JlZiIsInVuaWZvcm1zIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsImxpbmVXaWR0aFVuaXRzIiwibGluZVdpZHRoU2NhbGUiLCJsaW5lV2lkdGhNaW5QaXhlbHMiLCJsaW5lV2lkdGhNYXhQaXhlbHMiLCJyYWRpdXNVbml0cyIsImVsZXZhdGlvblNjYWxlIiwiZXh0cnVkZWQiLCJmaWxsZWQiLCJzdHJva2VkIiwic3Ryb2tlT3BhY2l0eSIsIndpcmVmcmFtZSIsIm9mZnNldCIsImNvdmVyYWdlIiwicmFkaXVzIiwiYW5nbGUiLCJfdGhpcyRzdGF0ZSIsInN0YXRlIiwibW9kZWwiLCJmaWxsVmVydGV4Q291bnQiLCJ3aXJlZnJhbWVWZXJ0ZXhDb3VudCIsImVkZ2VEaXN0YW5jZSIsInNldFVuaWZvcm1zIiwiTWF0aCIsIlBJIiwiVU5JVCIsIndpZHRoVW5pdHMiLCJ3aWR0aFNjYWxlIiwid2lkdGhNaW5QaXhlbHMiLCJ3aWR0aE1heFBpeGVscyIsInNldFByb3BzIiwiaXNJbmRleGVkIiwic2V0VmVydGV4Q291bnQiLCJzZXREcmF3TW9kZSIsIkdMIiwiTElORVMiLCJpc1N0cm9rZSIsIlRSSUFOR0xFX1NUUklQIiwib3BhY2l0eSIsIkNvbHVtbkxheWVyIiwibGF5ZXJOYW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbHVtbi1sYXllci9lbmhhbmNlZC1jb2x1bW4tbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtVTklUfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7Q29sdW1uTGF5ZXIsIENvbHVtbkxheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL2xheWVycy90eXBlZCc7XG5pbXBvcnQgR0wgZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtlZGl0U2hhZGVyfSBmcm9tICcuLi8nO1xuXG5mdW5jdGlvbiBhZGRJbnN0YW5jZUNvdmVyYWdlKHZzKSB7XG4gIGNvbnN0IGFkZERlY2wgPSBlZGl0U2hhZGVyKFxuICAgIHZzLFxuICAgICdoZXhhZ29uIGNlbGwgdnMgYWRkIGluc3RhbmNlIDEnLFxuICAgICdpbiB2ZWMzIGluc3RhbmNlUGlja2luZ0NvbG9yczsnLFxuICAgIGBpbiB2ZWMzIGluc3RhbmNlUGlja2luZ0NvbG9ycztcbiAgICAgaW4gZmxvYXQgaW5zdGFuY2VDb3ZlcmFnZTtgXG4gICk7XG5cbiAgcmV0dXJuIGVkaXRTaGFkZXIoXG4gICAgYWRkRGVjbCxcbiAgICAnaGV4YWdvbiBjZWxsIHZzIGFkZCBpbnN0YW5jZSAyJyxcbiAgICAnZmxvYXQgZG90UmFkaXVzID0gcmFkaXVzICogY292ZXJhZ2UgKiBzaG91bGRSZW5kZXI7JyxcbiAgICAnZmxvYXQgZG90UmFkaXVzID0gcmFkaXVzICogY292ZXJhZ2UgKiBpbnN0YW5jZUNvdmVyYWdlICogc2hvdWxkUmVuZGVyOydcbiAgKTtcbn1cblxudHlwZSBFbmhhbmNlZENvbHVtbkxheWVyUHJvcHMgPSBDb2x1bW5MYXllclByb3BzPGFueT4gJiB7XG4gIHN0cm9rZU9wYWNpdHk6IGFueTtcbn07XG5cbi8vIFRPRE86IGV4cG9ydCBhbGwgZGVjay5nbCBsYXllcnMgZnJvbSBrZXBsZXIuZ2xcbmNsYXNzIEVuaGFuY2VkQ29sdW1uTGF5ZXIgZXh0ZW5kcyBDb2x1bW5MYXllcjxhbnksIEVuaGFuY2VkQ29sdW1uTGF5ZXJQcm9wcz4ge1xuICBnZXRTaGFkZXJzKCkge1xuICAgIGNvbnN0IHNoYWRlcnMgPSBzdXBlci5nZXRTaGFkZXJzKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2hhZGVycyxcbiAgICAgIHZzOiBhZGRJbnN0YW5jZUNvdmVyYWdlKHNoYWRlcnMudnMpXG4gICAgfTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcblxuICAgIHRoaXMuZ2V0QXR0cmlidXRlTWFuYWdlcigpPy5hZGRJbnN0YW5jZWQoe1xuICAgICAgaW5zdGFuY2VDb3ZlcmFnZToge3NpemU6IDEsIGFjY2Vzc29yOiAnZ2V0Q292ZXJhZ2UnfVxuICAgIH0pO1xuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9KSB7XG4gICAgY29uc3Qge1xuICAgICAgbGluZVdpZHRoVW5pdHMsXG4gICAgICBsaW5lV2lkdGhTY2FsZSxcbiAgICAgIGxpbmVXaWR0aE1pblBpeGVscyxcbiAgICAgIGxpbmVXaWR0aE1heFBpeGVscyxcbiAgICAgIHJhZGl1c1VuaXRzLFxuICAgICAgZWxldmF0aW9uU2NhbGUsXG4gICAgICBleHRydWRlZCxcbiAgICAgIGZpbGxlZCxcbiAgICAgIHN0cm9rZWQsXG4gICAgICBzdHJva2VPcGFjaXR5LFxuICAgICAgd2lyZWZyYW1lLFxuICAgICAgb2Zmc2V0LFxuICAgICAgY292ZXJhZ2UsXG4gICAgICByYWRpdXMsXG4gICAgICBhbmdsZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHttb2RlbCwgZmlsbFZlcnRleENvdW50LCB3aXJlZnJhbWVWZXJ0ZXhDb3VudCwgZWRnZURpc3RhbmNlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBtb2RlbC5zZXRVbmlmb3Jtcyh1bmlmb3Jtcykuc2V0VW5pZm9ybXMoe1xuICAgICAgcmFkaXVzLFxuICAgICAgYW5nbGU6IChhbmdsZSAvIDE4MCkgKiBNYXRoLlBJLFxuICAgICAgb2Zmc2V0LFxuICAgICAgZXh0cnVkZWQsXG4gICAgICBzdHJva2VkLFxuICAgICAgY292ZXJhZ2UsXG4gICAgICBlbGV2YXRpb25TY2FsZSxcbiAgICAgIGVkZ2VEaXN0YW5jZSxcbiAgICAgIHJhZGl1c1VuaXRzOiBVTklUW3JhZGl1c1VuaXRzXSxcbiAgICAgIHdpZHRoVW5pdHM6IFVOSVRbbGluZVdpZHRoVW5pdHNdLFxuICAgICAgd2lkdGhTY2FsZTogbGluZVdpZHRoU2NhbGUsXG4gICAgICB3aWR0aE1pblBpeGVsczogbGluZVdpZHRoTWluUGl4ZWxzLFxuICAgICAgd2lkdGhNYXhQaXhlbHM6IGxpbmVXaWR0aE1heFBpeGVsc1xuICAgIH0pO1xuXG4gICAgLy8gV2hlbiBkcmF3aW5nIDNkOiBkcmF3IHdpcmVmcmFtZSBmaXJzdCBzbyBpdCBkb2Vzbid0IGdldCBvY2NsdWRlZCBieSBkZXB0aCB0ZXN0XG4gICAgaWYgKGV4dHJ1ZGVkICYmIHdpcmVmcmFtZSkge1xuICAgICAgbW9kZWwuc2V0UHJvcHMoe2lzSW5kZXhlZDogdHJ1ZX0pO1xuICAgICAgbW9kZWxcbiAgICAgICAgLnNldFZlcnRleENvdW50KHdpcmVmcmFtZVZlcnRleENvdW50KVxuICAgICAgICAuc2V0RHJhd01vZGUoR0wuTElORVMpXG4gICAgICAgIC5zZXRVbmlmb3Jtcyh7aXNTdHJva2U6IHRydWV9KVxuICAgICAgICAuZHJhdygpO1xuICAgIH1cbiAgICBpZiAoZmlsbGVkKSB7XG4gICAgICBtb2RlbC5zZXRQcm9wcyh7aXNJbmRleGVkOiBmYWxzZX0pO1xuICAgICAgbW9kZWxcbiAgICAgICAgLnNldFZlcnRleENvdW50KGZpbGxWZXJ0ZXhDb3VudClcbiAgICAgICAgLnNldERyYXdNb2RlKEdMLlRSSUFOR0xFX1NUUklQKVxuICAgICAgICAuc2V0VW5pZm9ybXMoe2lzU3Ryb2tlOiBmYWxzZX0pXG4gICAgICAgIC5kcmF3KCk7XG4gICAgfVxuICAgIC8vIFdoZW4gZHJhd2luZyAyZDogZHJhdyBmaWxsIGJlZm9yZSBzdHJva2Ugc28gdGhhdCB0aGUgb3V0bGluZSBpcyBhbHdheXMgb24gdG9wXG4gICAgaWYgKCFleHRydWRlZCAmJiBzdHJva2VkKSB7XG4gICAgICBtb2RlbC5zZXRQcm9wcyh7aXNJbmRleGVkOiBmYWxzZX0pO1xuICAgICAgLy8gVGhlIHdpZHRoIG9mIHRoZSBzdHJva2UgaXMgYWNoaWV2ZWQgYnkgZmxhdHRlbmluZyB0aGUgc2lkZSBvZiB0aGUgY3lsaW5kZXIuXG4gICAgICAvLyBTa2lwIHRoZSBsYXN0IDEvMyBvZiB0aGUgdmVydGljZXMgd2hpY2ggaXMgdGhlIHRvcC5cbiAgICAgIG1vZGVsXG4gICAgICAgIC5zZXRWZXJ0ZXhDb3VudCgoZmlsbFZlcnRleENvdW50ICogMikgLyAzKVxuICAgICAgICAuc2V0RHJhd01vZGUoR0wuVFJJQU5HTEVfU1RSSVApXG4gICAgICAgIC5zZXRVbmlmb3Jtcyh7aXNTdHJva2U6IHRydWUsIG9wYWNpdHk6IHN0cm9rZU9wYWNpdHl9KVxuICAgICAgICAuZHJhdygpO1xuICAgIH1cbiAgfVxufVxuXG5FbmhhbmNlZENvbHVtbkxheWVyLmxheWVyTmFtZSA9ICdFbmhhbmNlZENvbHVtbkxheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgRW5oYW5jZWRDb2x1bW5MYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBSSxDQUFBLEdBQUFKLE9BQUE7QUFBK0IsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFG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
@@ -0,0 +1,42 @@
1
+ /// <reference types="deck.gl" />
2
+ import { Layer, LayerExtension } from '@deck.gl/core';
3
+ export declare type FilterArrowExtensionProps = {
4
+ getFiltered?: () => number;
5
+ };
6
+ /**
7
+ * FilterArrowExtension - a deck.gl extension to filter arrow layer
8
+ *
9
+ * A simple extension to filter arrow layer based on the result of CPU filteredIndex,
10
+ * so we can avoid filtering on the raw Arrow table and recreating geometry attributes.
11
+ * Specifically, an attribute `filtered` is added to the layer to indicate whether the feature has been Filtered
12
+ * the shader module is modified to discard the feature if filtered value is 0
13
+ * the accessor getFiltered is used to get the value of `filtered` based on the value `filteredIndex` in Arrowlayer
14
+ */
15
+ export default class FilterArrowExtension extends LayerExtension {
16
+ static defaultProps: {
17
+ getFiltered: {
18
+ type: string;
19
+ value: number;
20
+ };
21
+ };
22
+ static extensionName: string;
23
+ getShaders(): {
24
+ modules: {
25
+ name: string;
26
+ dependencies: {
27
+ name: string;
28
+ dependencies: any[];
29
+ vs: string;
30
+ getUniforms: (opts?: {} | undefined) => any;
31
+ }[];
32
+ vs: string;
33
+ fs: string;
34
+ inject: {
35
+ 'vs:DECKGL_FILTER_GL_POSITION': string;
36
+ };
37
+ getUniforms: () => void;
38
+ }[];
39
+ defines: {};
40
+ };
41
+ initializeState(this: Layer<FilterArrowExtensionProps>): void;
42
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
+ var _core = require("@deck.gl/core");
15
+ var _constants = _interopRequireDefault(require("@luma.gl/constants"));
16
+ var _filterShaderModule = _interopRequireDefault(require("./filter-shader-module"));
17
+ 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)); }
18
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
19
+ // Copyright contributors to the kepler.gl project
20
+ var VALUE_FILTERED = 1;
21
+ var defaultProps = {
22
+ getFiltered: {
23
+ type: 'accessor',
24
+ value: VALUE_FILTERED
25
+ }
26
+ };
27
+ /**
28
+ * FilterArrowExtension - a deck.gl extension to filter arrow layer
29
+ *
30
+ * A simple extension to filter arrow layer based on the result of CPU filteredIndex,
31
+ * so we can avoid filtering on the raw Arrow table and recreating geometry attributes.
32
+ * Specifically, an attribute `filtered` is added to the layer to indicate whether the feature has been Filtered
33
+ * the shader module is modified to discard the feature if filtered value is 0
34
+ * the accessor getFiltered is used to get the value of `filtered` based on the value `filteredIndex` in Arrowlayer
35
+ */
36
+ var FilterArrowExtension = exports["default"] = /*#__PURE__*/function (_LayerExtension) {
37
+ function FilterArrowExtension() {
38
+ (0, _classCallCheck2["default"])(this, FilterArrowExtension);
39
+ return _callSuper(this, FilterArrowExtension, arguments);
40
+ }
41
+ (0, _inherits2["default"])(FilterArrowExtension, _LayerExtension);
42
+ return (0, _createClass2["default"])(FilterArrowExtension, [{
43
+ key: "getShaders",
44
+ value: function getShaders() {
45
+ return {
46
+ modules: [_filterShaderModule["default"]],
47
+ defines: {}
48
+ };
49
+ }
50
+ }, {
51
+ key: "initializeState",
52
+ value: function initializeState() {
53
+ var attributeManager = this.getAttributeManager();
54
+ if (attributeManager) {
55
+ attributeManager.add({
56
+ filtered: {
57
+ size: 1,
58
+ type: _constants["default"].FLOAT,
59
+ accessor: 'getFiltered',
60
+ shaderAttributes: {
61
+ filtered: {
62
+ divisor: 0
63
+ },
64
+ instanceFiltered: {
65
+ divisor: 1
66
+ }
67
+ }
68
+ }
69
+ });
70
+ }
71
+ }
72
+ }]);
73
+ }(_core.LayerExtension);
74
+ (0, _defineProperty2["default"])(FilterArrowExtension, "defaultProps", defaultProps);
75
+ (0, _defineProperty2["default"])(FilterArrowExtension, "extensionName", 'FilterArrowExtension');
76
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9maWx0ZXJTaGFkZXJNb2R1bGUiLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIlZBTFVFX0ZJTFRFUkVEIiwiZGVmYXVsdFByb3BzIiwiZ2V0RmlsdGVyZWQiLCJ0eXBlIiwidmFsdWUiLCJGaWx0ZXJBcnJvd0V4dGVuc2lvbiIsImV4cG9ydHMiLCJfTGF5ZXJFeHRlbnNpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXRTaGFkZXJzIiwibW9kdWxlcyIsInNoYWRlck1vZHVsZSIsImRlZmluZXMiLCJpbml0aWFsaXplU3RhdGUiLCJhdHRyaWJ1dGVNYW5hZ2VyIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImFkZCIsImZpbHRlcmVkIiwic2l6ZSIsIkdMIiwiRkxPQVQiLCJhY2Nlc3NvciIsInNoYWRlckF0dHJpYnV0ZXMiLCJkaXZpc29yIiwiaW5zdGFuY2VGaWx0ZXJlZCIsIkxheWVyRXh0ZW5zaW9uIiwiX2RlZmluZVByb3BlcnR5MiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNrZ2wtZXh0ZW5zaW9ucy9maWx0ZXItYXJyb3ctbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtMYXllciwgTGF5ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IEdMIGZyb20gJ0BsdW1hLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCBzaGFkZXJNb2R1bGUgZnJvbSAnLi9maWx0ZXItc2hhZGVyLW1vZHVsZSc7XG5cbmNvbnN0IFZBTFVFX0ZJTFRFUkVEID0gMTtcblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBnZXRGaWx0ZXJlZDoge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBWQUxVRV9GSUxURVJFRH1cbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckFycm93RXh0ZW5zaW9uUHJvcHMgPSB7XG4gIGdldEZpbHRlcmVkPzogKCkgPT4gbnVtYmVyO1xufTtcblxuLyoqXG4gKiBGaWx0ZXJBcnJvd0V4dGVuc2lvbiAtIGEgZGVjay5nbCBleHRlbnNpb24gdG8gZmlsdGVyIGFycm93IGxheWVyXG4gKlxuICogQSBzaW1wbGUgZXh0ZW5zaW9uIHRvIGZpbHRlciBhcnJvdyBsYXllciBiYXNlZCBvbiB0aGUgcmVzdWx0IG9mIENQVSBmaWx0ZXJlZEluZGV4LFxuICogc28gd2UgY2FuIGF2b2lkIGZpbHRlcmluZyBvbiB0aGUgcmF3IEFycm93IHRhYmxlIGFuZCByZWNyZWF0aW5nIGdlb21ldHJ5IGF0dHJpYnV0ZXMuXG4gKiBTcGVjaWZpY2FsbHksIGFuIGF0dHJpYnV0ZSBgZmlsdGVyZWRgIGlzIGFkZGVkIHRvIHRoZSBsYXllciB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBmZWF0dXJlIGhhcyBiZWVuIEZpbHRlcmVkXG4gKiB0aGUgc2hhZGVyIG1vZHVsZSBpcyBtb2RpZmllZCB0byBkaXNjYXJkIHRoZSBmZWF0dXJlIGlmIGZpbHRlcmVkIHZhbHVlIGlzIDBcbiAqIHRoZSBhY2Nlc3NvciBnZXRGaWx0ZXJlZCBpcyB1c2VkIHRvIGdldCB0aGUgdmFsdWUgb2YgYGZpbHRlcmVkYCBiYXNlZCBvbiB0aGUgdmFsdWUgYGZpbHRlcmVkSW5kZXhgIGluIEFycm93bGF5ZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsdGVyQXJyb3dFeHRlbnNpb24gZXh0ZW5kcyBMYXllckV4dGVuc2lvbiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4gIHN0YXRpYyBleHRlbnNpb25OYW1lID0gJ0ZpbHRlckFycm93RXh0ZW5zaW9uJztcblxuICBnZXRTaGFkZXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2R1bGVzOiBbc2hhZGVyTW9kdWxlXSxcbiAgICAgIGRlZmluZXM6IHt9XG4gICAgfTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSh0aGlzOiBMYXllcjxGaWx0ZXJBcnJvd0V4dGVuc2lvblByb3BzPikge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKTtcbiAgICBpZiAoYXR0cmlidXRlTWFuYWdlcikge1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5hZGQoe1xuICAgICAgICBmaWx0ZXJlZDoge1xuICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgdHlwZTogR0wuRkxPQVQsXG4gICAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWx0ZXJlZCcsXG4gICAgICAgICAgc2hhZGVyQXR0cmlidXRlczoge1xuICAgICAgICAgICAgZmlsdGVyZWQ6IHtcbiAgICAgICAgICAgICAgZGl2aXNvcjogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RhbmNlRmlsdGVyZWQ6IHtcbiAgICAgICAgICAgICAgZGl2aXNvcjogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxtQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQWtELFNBQUFJLFdBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFELENBQUEsT0FBQUUsZ0JBQUEsYUFBQUYsQ0FBQSxPQUFBRywyQkFBQSxhQUFBSixDQUFBLEVBQUFLLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTixDQUFBLEVBQUFDLENBQUEsWUFBQUMsZ0JBQUEsYUFBQUgsQ0FBQSxFQUFBUSxXQUFBLElBQUFQLENBQUEsQ0FBQVEsS0FBQSxDQUFBVCxDQUFBLEVBQUFFLENBQUE7QUFBQSxTQUFBRywwQkFBQSxjQUFBTCxDQUFBLElBQUFVLE9BQUEsQ0FBQUMsU0FBQSxDQUFBQyxPQUFBLENBQUFDLElBQUEsQ0FBQVAsT0FBQSxDQUFBQyxTQUFBLENBQUFHLE9BQUEsaUNBQUFWLENBQUEsYUFBQUsseUJBQUEsWUFBQUEsMEJBQUEsYUFBQUwsQ0FBQSxVQU5sRDtBQUNBO0FBT0EsSUFBTWMsY0FBYyxHQUFHLENBQUM7QUFFeEIsSUFBTUMsWUFBWSxHQUFHO0VBQ25CQyxXQUFXLEVBQUU7SUFBQ0MsSUFBSSxFQUFFLFVBQVU7SUFBRUMsS0FBSyxFQUFFSjtFQUFjO0FBQ3ZELENBQUM7QUFNRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSxJQVNxQkssb0JBQW9CLEdBQUFDLE9BQUEscUNBQUFDLGVBQUE7RUFBQSxTQUFBRixxQkFBQTtJQUFBLElBQUFHLGdCQUFBLG1CQUFBSCxvQkFBQTtJQUFBLE9BQUFwQixVQUFBLE9BQUFvQixvQkFBQSxFQUFBSSxTQUFBO0VBQUE7RUFBQSxJQUFBQyxVQUFBLGFBQUFMLG9CQUFBLEVBQUFFLGVBQUE7RUFBQSxXQUFBSSxhQUFBLGFBQUFOLG9CQUFBO0lBQUFPLEdBQUE7SUFBQVIsS0FBQSxFQUl2QyxTQUFBUyxVQUFVQSxDQUFBLEVBQUc7TUFDWCxPQUFPO1FBQ0xDLE9BQU8sRUFBRSxDQUFDQyw4QkFBWSxDQUFDO1FBQ3ZCQyxPQUFPLEVBQUUsQ0FBQztNQUNaLENBQUM7SUFDSDtFQUFDO0lBQUFKLEdBQUE7SUFBQVIsS0FBQSxFQUVELFNBQUFhLGVBQWVBLENBQUEsRUFBeUM7TUFDdEQsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO01BQ25ELElBQUlELGdCQUFnQixFQUFFO1FBQ3BCQSxnQkFBZ0IsQ0FBQ0UsR0FBRyxDQUFDO1VBQ25CQyxRQUFRLEVBQUU7WUFDUkMsSUFBSSxFQUFFLENBQUM7WUFDUG5CLElBQUksRUFBRW9CLHFCQUFFLENBQUNDLEtBQUs7WUFDZEMsUUFBUSxFQUFFLGFBQWE7WUFDdkJDLGdCQUFnQixFQUFFO2NBQ2hCTCxRQUFRLEVBQUU7Z0JBQ1JNLE9BQU8sRUFBRTtjQUNYLENBQUM7Y0FDREMsZ0JBQWdCLEVBQUU7Z0JBQ2hCRCxPQUFPLEVBQUU7Y0FDWDtZQUNGO1VBQ0Y7UUFDRixDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7QUFBQSxFQTlCK0NFLG9CQUFjO0FBQUEsSUFBQUMsZ0JBQUEsYUFBM0N6QixvQkFBb0Isa0JBQ2pCSixZQUFZO0FBQUEsSUFBQTZCLGdCQUFBLGFBRGZ6QixvQkFBb0IsbUJBRWhCLHNCQUFzQiIsImlnbm9yZUxpc3QiOltdfQ==