@carto/kepler.gl 0.0.65-alpha.labels.8 → 0.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@carto/kepler.gl",
3
3
  "author": "CARTO",
4
4
  "homepage": "https://github.com/CartoDB/carto-kepler#readme",
5
- "version": "0.0.65-alpha.labels.8",
5
+ "version": "0.0.65",
6
6
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
7
7
  "license": "MIT",
8
8
  "main": "dist/index.js",
@@ -238,13 +238,14 @@
238
238
  "tough-cookie": "4.0.0"
239
239
  },
240
240
  "peerDependencies": {
241
- "@deck.gl/aggregation-layers": "^8.7.3",
242
- "@deck.gl/core": "^8.7.3",
243
- "@deck.gl/extensions": "^8.7.3",
244
- "@deck.gl/geo-layers": "^8.7.3",
245
- "@deck.gl/layers": "^8.7.3",
246
- "@deck.gl/mesh-layers": "^8.7.3",
247
- "@deck.gl/react": "^8.7.3",
241
+ "@deck.gl/aggregation-layers": "^8.9.5",
242
+ "@deck.gl/carto": "^8.9.5",
243
+ "@deck.gl/core": "^8.9.5",
244
+ "@deck.gl/extensions": "^8.9.5",
245
+ "@deck.gl/geo-layers": "^8.9.5",
246
+ "@deck.gl/layers": "^8.9.5",
247
+ "@deck.gl/mesh-layers": "^8.9.5",
248
+ "@deck.gl/react": "^8.9.5",
248
249
  "@loaders.gl/core": "^3.1.5",
249
250
  "@loaders.gl/csv": "^3.1.5",
250
251
  "@loaders.gl/gltf": "^3.1.5",
@@ -246,7 +246,6 @@ export default function LayerConfiguratorFactory(
246
246
  {/* text label */}
247
247
  <TextLabelPanel
248
248
  fields={visConfiguratorProps.fields}
249
- layer={layer}
250
249
  updateLayerTextLabel={this.props.updateLayerTextLabel}
251
250
  textLabel={layer.config.textLabel}
252
251
  colorPalette={visConfiguratorProps.colorPalette}
@@ -65,28 +65,16 @@ function TextLabelPanelFactory(RangeSlider, LayerConfigGroup, FieldSelector, Col
65
65
  };
66
66
 
67
67
  render() {
68
- const {layer, updateLayerTextLabel, textLabel, fields, AddButton} = this.props;
68
+ const {updateLayerTextLabel, textLabel, fields, AddButton} = this.props;
69
69
  const currentFields = textLabel.map(tl => tl.field && tl.field.name).filter(d => d);
70
70
 
71
71
  return (
72
- // Switch only works with group/property set to customMarkers???
73
- /* <LayerConfigGroup
74
- type="boolean"
75
- disabled={undefined}
76
- layer={layer}
77
- group="labels"
78
- property="labelsEnabled"
79
- label="panel.text.label"
80
- collapsible
81
- >*/
82
72
  <LayerConfigGroup label={'panel.text.label'} collapsible>
83
73
  <ConfigGroupCollapsibleHeader>
84
74
  <FieldSelector
85
75
  fields={fields}
86
76
  value={currentFields}
87
- onSelect={selected => {
88
- selected.length <= 2 && updateLayerTextLabel('all', 'fields', selected);
89
- }}
77
+ onSelect={selected => updateLayerTextLabel('all', 'fields', selected)}
90
78
  multiSelect
91
79
  />
92
80
  </ConfigGroupCollapsibleHeader>
package/src/index.js CHANGED
@@ -39,9 +39,6 @@ export * from './components';
39
39
  // Layers
40
40
  export * from './layers';
41
41
 
42
- // label layer (move to deck.gl/carto?)
43
- export {PointLabelLayer} from './deckgl-layers/point-label-layer/point-label-layer';
44
-
45
42
  // Styles
46
43
  export * from './styles';
47
44
 
@@ -22,7 +22,7 @@ import {console as Console} from 'global/window';
22
22
  import keymirror from 'keymirror';
23
23
  import {CollisionFilterExtension, DataFilterExtension} from '@deck.gl/extensions';
24
24
  import {COORDINATE_SYSTEM, Layer as DeckLayer} from '@deck.gl/core';
25
- import {PointLabelLayer} from '../deckgl-layers/point-label-layer/point-label-layer';
25
+ import {_PointLabelLayer as PointLabelLayer} from '@deck.gl/carto';
26
26
  import DefaultLayerIcon from './default-layer-icon';
27
27
  import {diffUpdateTriggers} from './layer-update';
28
28
 
@@ -27,7 +27,6 @@ export const PROPERTY_GROUPS = keyMirror({
27
27
  color: null,
28
28
  stroke: null,
29
29
  customMarkers: null,
30
- labels: null,
31
30
  radius: null,
32
31
  height: null,
33
32
  angle: null,
@@ -396,13 +395,6 @@ export const LAYER_VIS_CONFIGS = {
396
395
  group: PROPERTY_GROUPS.display,
397
396
  property: 'filled'
398
397
  },
399
- labels: {
400
- type: 'boolean',
401
- label: 'layerVisConfigs.labels',
402
- defaultValue: false,
403
- group: PROPERTY_GROUPS.labels,
404
- property: 'labels'
405
- },
406
398
  extruded: {
407
399
  type: 'boolean',
408
400
  defaultValue: false,
@@ -446,13 +438,6 @@ export const LAYER_VIS_CONFIGS = {
446
438
  group: PROPERTY_GROUPS.customMarkers,
447
439
  property: 'customMarkers'
448
440
  },
449
- labelsEnabled: {
450
- type: 'boolean',
451
- defaultValue: true,
452
- label: 'layerVisConfigs.labelsEnabled',
453
- group: PROPERTY_GROUPS.labels,
454
- property: 'labelsEnabled'
455
- },
456
441
  customMarkersUrl: {
457
442
  type: 'text',
458
443
  defaultValue: '',
@@ -21,25 +21,30 @@
21
21
  import {notNullorUndefined} from 'utils/data-utils';
22
22
  import uniq from 'lodash.uniq';
23
23
 
24
+ export const defaultPadding = 20;
25
+
24
26
  export function getTextOffsetByRadius(radiusScale, getRadius) {
25
27
  return textLabel => {
26
28
  const xMult = textLabel.anchor === 'middle' ? 0 : textLabel.anchor === 'start' ? 1 : -1;
27
29
  const yMult = textLabel.alignment === 'center' ? 0 : textLabel.alignment === 'bottom' ? 1 : -1;
28
30
 
29
- const sizeOffset = Math.abs(yMult * textLabel.size);
31
+ const sizeOffset =
32
+ textLabel.alignment === 'center'
33
+ ? 0
34
+ : textLabel.alignment === 'bottom'
35
+ ? textLabel.size
36
+ : textLabel.size;
30
37
 
31
- const xPadding = textLabel.size / 4; // Padding based on font size (font size / 4)
32
- const yPadding = textLabel.size;
33
- const radiusPadding = 1 + 1 / 4; // Padding based on point radius (radius/ 4)
38
+ const padding = defaultPadding;
34
39
 
35
40
  return typeof getRadius === 'function'
36
41
  ? d => [
37
- xMult * (getRadius(d) * radiusScale * radiusPadding + xPadding),
38
- yMult * (getRadius(d) * radiusScale * radiusPadding + yPadding)
42
+ xMult * (getRadius(d) * radiusScale + padding),
43
+ yMult * (getRadius(d) * radiusScale + padding + sizeOffset)
39
44
  ]
40
45
  : [
41
- xMult * (getRadius * radiusScale * radiusPadding + xPadding),
42
- yMult * (getRadius * radiusScale * radiusPadding + yPadding)
46
+ xMult * (getRadius * radiusScale + padding),
47
+ yMult * (getRadius * radiusScale + padding + sizeOffset)
43
48
  ];
44
49
  };
45
50
  }
@@ -47,7 +47,6 @@ export const pointVisConfigs = {
47
47
  customMarkers: 'customMarkers',
48
48
  customMarkersUrl: 'customMarkersUrl',
49
49
  customMarkersRange: 'customMarkersRange',
50
- labelsEnabled: 'labelsEnabled',
51
50
  opacity: 'opacity',
52
51
  outline: 'outline',
53
52
  thickness: 'thickness',
@@ -291,6 +290,7 @@ export default class PointLayer extends Layer {
291
290
  getFilterValue: data.getFilterValue,
292
291
  extensions,
293
292
  filterRange: defaultLayerProps.filterRange,
293
+ maskId: defaultLayerProps.maskId,
294
294
  visible: defaultLayerProps.visible,
295
295
  ...brushingProps
296
296
  };
@@ -83,7 +83,7 @@ export default {
83
83
  layer: 'Layers',
84
84
  filter: 'Filters',
85
85
  interaction: 'Interactions',
86
- basemap: 'Base map'
86
+ basemap: 'Basemap'
87
87
  }
88
88
  },
89
89
  layer: {
@@ -216,7 +216,7 @@ export default {
216
216
  hideLayerPanel: 'Hide layer panel',
217
217
  showLayerPanel: 'Show layer panel',
218
218
  moveToTop: 'Move to top of data layers',
219
- selectBaseMapStyle: 'Select Base Map Style',
219
+ selectBaseMapStyle: 'Select Basemap Style',
220
220
  delete: 'Delete',
221
221
  timePlayback: 'Time Playback',
222
222
  cloudStorage: 'Cloud Storage',
@@ -315,16 +315,19 @@ function addOrRemoveTextLabels(newFields, textLabel) {
315
315
 
316
316
  // delete
317
317
  newTextLabel = newTextLabel.filter(tl => tl.field && !deleteFields.includes(tl.field.name));
318
- newTextLabel = !newTextLabel.length ? [DEFAULT_TEXT_LABEL] : newTextLabel;
319
318
 
320
319
  // add
321
- newTextLabel = [
322
- ...newTextLabel.filter(tl => tl.field),
323
- ...addFields.map(af => ({
324
- ...DEFAULT_TEXT_LABEL,
325
- field: af
326
- }))
327
- ];
320
+ newTextLabel = newTextLabel.filter(tl => tl.field);
321
+ const defaultLabel = newTextLabel.length ? DEFAULT_SECONDARY_TEXT_LABEL : DEFAULT_TEXT_LABEL;
322
+ newTextLabel = [...newTextLabel, ...addFields.map(af => ({...defaultLabel, field: af}))];
323
+
324
+ // limit to 2 labels (overwrite 2nd label with 3rd)
325
+ if (newTextLabel.length > 2) {
326
+ newTextLabel = [newTextLabel[0], newTextLabel[2]];
327
+ }
328
+
329
+ // default
330
+ newTextLabel = !newTextLabel.length ? [DEFAULT_TEXT_LABEL] : newTextLabel;
328
331
 
329
332
  return newTextLabel;
330
333
  }
@@ -1,280 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.PointLabelLayer = void 0;
9
-
10
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
26
- var _core = require("@deck.gl/core");
27
-
28
- var _layers = require("@deck.gl/layers");
29
-
30
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
31
-
32
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
-
34
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
35
-
36
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
37
-
38
- // TODO remove prior to release
39
- var SHOW_TEXT_BORDER = false;
40
- var LEFT = 0,
41
- TOP = 1,
42
- RIGHT = 2,
43
- BOTTOM = 3;
44
-
45
- var EnhancedTextBackgroundLayer = /*#__PURE__*/function (_TextBackgroundLayer) {
46
- (0, _inherits2["default"])(EnhancedTextBackgroundLayer, _TextBackgroundLayer);
47
-
48
- var _super = _createSuper(EnhancedTextBackgroundLayer);
49
-
50
- function EnhancedTextBackgroundLayer() {
51
- (0, _classCallCheck2["default"])(this, EnhancedTextBackgroundLayer);
52
- return _super.apply(this, arguments);
53
- }
54
-
55
- (0, _createClass2["default"])(EnhancedTextBackgroundLayer, [{
56
- key: "getShaders",
57
- value: function getShaders() {
58
- var shaders = (0, _get2["default"])((0, _getPrototypeOf2["default"])(EnhancedTextBackgroundLayer.prototype), "getShaders", this).call(this);
59
- var vs = shaders.vs; // Modify shader so that the padding is offset by the pixel offset to ensure the padding
60
- // always captures the anchor point. As padding is uniform we cannot pass it a per-label value
61
-
62
- vs = vs.replaceAll('padding.', '_padding.');
63
- vs = vs.replace('void main(void) {', 'void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);');
64
- return _objectSpread(_objectSpread({}, shaders), {}, {
65
- vs: vs
66
- });
67
- }
68
- }]);
69
- return EnhancedTextBackgroundLayer;
70
- }(_layers._TextBackgroundLayer); // TextLayer which includes modified text-background-layer-vertex shader and only renders the
71
- // primary background layer in the collision pass
72
-
73
-
74
- var EnhancedTextLayer = /*#__PURE__*/function (_TextLayer) {
75
- (0, _inherits2["default"])(EnhancedTextLayer, _TextLayer);
76
-
77
- var _super2 = _createSuper(EnhancedTextLayer);
78
-
79
- function EnhancedTextLayer() {
80
- (0, _classCallCheck2["default"])(this, EnhancedTextLayer);
81
- return _super2.apply(this, arguments);
82
- }
83
-
84
- (0, _createClass2["default"])(EnhancedTextLayer, [{
85
- key: "filterSubLayer",
86
- value: function filterSubLayer(_ref) {
87
- var layer = _ref.layer,
88
- renderPass = _ref.renderPass;
89
- var background = layer.id.includes('primary-background');
90
-
91
- if (renderPass === 'collision') {
92
- return background; // Only draw primary background layer in collision pass
93
- } else {
94
- return !background || SHOW_TEXT_BORDER && this.props.getBorderWidth; // Do not draw background layer in other passes
95
- }
96
- }
97
- }]);
98
- return EnhancedTextLayer;
99
- }(_layers.TextLayer);
100
-
101
- var defaultProps = _objectSpread(_objectSpread({}, _layers.TextLayer.defaultProps), {}, {
102
- getRadius: {
103
- type: 'accessor',
104
- value: 1
105
- },
106
- radiusScale: {
107
- type: 'number',
108
- min: 0,
109
- value: 1
110
- }
111
- });
112
-
113
- var PointLabelLayer = /*#__PURE__*/function (_CompositeLayer) {
114
- (0, _inherits2["default"])(PointLabelLayer, _CompositeLayer);
115
-
116
- var _super3 = _createSuper(PointLabelLayer);
117
-
118
- function PointLabelLayer() {
119
- (0, _classCallCheck2["default"])(this, PointLabelLayer);
120
- return _super3.apply(this, arguments);
121
- }
122
-
123
- (0, _createClass2["default"])(PointLabelLayer, [{
124
- key: "calculatePixelOffset",
125
- value: function calculatePixelOffset(secondary) {
126
- var _this$props = this.props,
127
- anchor = _this$props.getTextAnchor,
128
- alignment = _this$props.getAlignmentBaseline,
129
- getRadius = _this$props.getRadius,
130
- getSecondaryText = _this$props.getSecondaryText,
131
- radiusScale = _this$props.radiusScale,
132
- secondarySizeScale = _this$props.secondarySizeScale,
133
- sizeScale = _this$props.sizeScale;
134
- var xMult = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;
135
- var yMult = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1; // Padding based on font size (font size / 4)
136
-
137
- var xPadding = sizeScale / 4;
138
- var yPadding = sizeScale * (1 + 1 / 4); // Place secondary label under main label (secondary label always 'top' baseline aligned)
139
-
140
- var secondaryOffset = 0.6 * (1 - yMult) * sizeScale;
141
- var yOffset = secondary ? secondaryOffset : 0; // Special case, position relative to secondary label
142
-
143
- if (anchor === 'middle' && alignment === 'top' && getSecondaryText) {
144
- yOffset -= secondaryOffset;
145
- yOffset -= secondarySizeScale;
146
- yOffset += sizeScale;
147
- } // Padding based on point radius (radius/ 4)
148
-
149
-
150
- var radiusPadding = 1 + 1 / 4;
151
- return typeof getRadius === 'function' ? function (d, info) {
152
- var r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;
153
- return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];
154
- } : [xMult * (getRadius * radiusScale * radiusPadding + xPadding), yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset];
155
- }
156
- }, {
157
- key: "calculateBackgroundPadding",
158
- value: function calculateBackgroundPadding() {
159
- var _this$props2 = this.props,
160
- anchor = _this$props2.getTextAnchor,
161
- alignment = _this$props2.getAlignmentBaseline,
162
- sizeScale = _this$props2.sizeScale; // Heuristics to avoid label overlap (should we base this on the text length?)
163
-
164
- var paddingX = 12 * sizeScale;
165
- var paddingY = 3 * sizeScale;
166
- var backgroundPadding = [0, 0, 0, 0];
167
-
168
- if (alignment === 'top') {
169
- backgroundPadding[TOP] = paddingY;
170
- } else if (alignment === 'bottom') {
171
- backgroundPadding[BOTTOM] = paddingY;
172
- } else {
173
- backgroundPadding[TOP] = 0.5 * paddingY;
174
- backgroundPadding[BOTTOM] = 0.5 * paddingY;
175
- }
176
-
177
- if (anchor === 'start') {
178
- backgroundPadding[LEFT] = paddingX;
179
- } else if (anchor === 'end') {
180
- backgroundPadding[RIGHT] = paddingX;
181
- } else {
182
- backgroundPadding[LEFT] = 0.5 * paddingX;
183
- backgroundPadding[RIGHT] = 0.5 * paddingX;
184
- }
185
-
186
- return backgroundPadding;
187
- }
188
- }, {
189
- key: "renderTextLayer",
190
- value: function renderTextLayer(id, _ref2) {
191
- var updateTriggersOverride = _ref2.updateTriggers,
192
- props = (0, _objectWithoutProperties2["default"])(_ref2, ["updateTriggers"]);
193
- var _this$props3 = this.props,
194
- data = _this$props3.data,
195
- characterSet = _this$props3.characterSet,
196
- fontFamily = _this$props3.fontFamily,
197
- fontSettings = _this$props3.fontSettings,
198
- fontWeight = _this$props3.fontWeight,
199
- outlineColor = _this$props3.outlineColor,
200
- outlineWidth = _this$props3.outlineWidth,
201
- sizeScale = _this$props3.sizeScale,
202
- radiusScale = _this$props3.radiusScale,
203
- getAlignmentBaseline = _this$props3.getAlignmentBaseline,
204
- getColor = _this$props3.getColor,
205
- getPosition = _this$props3.getPosition,
206
- getTextAnchor = _this$props3.getTextAnchor,
207
- updateTriggers = _this$props3.updateTriggers;
208
- return new EnhancedTextLayer(this.getSubLayerProps({
209
- id: id,
210
- data: data,
211
- characterSet: characterSet,
212
- fontFamily: fontFamily,
213
- fontSettings: fontSettings,
214
- fontWeight: fontWeight,
215
- outlineColor: outlineColor,
216
- outlineWidth: outlineWidth,
217
- sizeScale: sizeScale,
218
- getAlignmentBaseline: getAlignmentBaseline,
219
- getColor: getColor,
220
- getPosition: getPosition,
221
- getTextAnchor: getTextAnchor,
222
- updateTriggers: _objectSpread(_objectSpread(_objectSpread({}, updateTriggers), updateTriggersOverride), {}, {
223
- getPixelOffset: [updateTriggers.getRadius, updateTriggers.getTextAnchor, updateTriggers.getAlignmentBaseline, radiusScale, sizeScale]
224
- })
225
- }), {
226
- getSize: 1,
227
- _subLayerProps: {
228
- background: {
229
- type: EnhancedTextBackgroundLayer
230
- }
231
- }
232
- }, // DEBUG
233
- SHOW_TEXT_BORDER ? {
234
- getBackgroundColor: [0, 0, 0, 0],
235
- getBorderColor: [255, 0, 0, 80],
236
- getBorderWidth: 1
237
- } : {}, props);
238
- }
239
- }, {
240
- key: "renderLayers",
241
- value: function renderLayers() {
242
- var _this$props4 = this.props,
243
- getText = _this$props4.getText,
244
- getSecondaryColor = _this$props4.getSecondaryColor,
245
- getSecondaryText = _this$props4.getSecondaryText,
246
- secondaryOutlineColor = _this$props4.secondaryOutlineColor,
247
- secondarySizeScale = _this$props4.secondarySizeScale,
248
- updateTriggers = _this$props4.updateTriggers;
249
- var getPixelOffset = this.calculatePixelOffset(false);
250
- var backgroundPadding = this.calculateBackgroundPadding();
251
- var out = [this.renderTextLayer('primary', {
252
- backgroundPadding: backgroundPadding,
253
- getText: getText,
254
- getPixelOffset: getPixelOffset,
255
- background: true // Only use background for primary label for faster collisions
256
-
257
- }), getSecondaryText && this.renderTextLayer('secondary', _objectSpread(_objectSpread(_objectSpread({
258
- getText: getSecondaryText,
259
- getPixelOffset: this.calculatePixelOffset(true),
260
- getAlignmentBaseline: 'top',
261
- updateTriggers: {
262
- getText: updateTriggers.getSecondaryText
263
- }
264
- }, getSecondaryColor && {
265
- getColor: getSecondaryColor
266
- }), secondarySizeScale && {
267
- sizeScale: secondarySizeScale
268
- }), secondaryOutlineColor && {
269
- outlineColor: secondaryOutlineColor
270
- }))];
271
- return out;
272
- }
273
- }]);
274
- return PointLabelLayer;
275
- }(_core.CompositeLayer);
276
-
277
- exports.PointLabelLayer = PointLabelLayer;
278
- (0, _defineProperty2["default"])(PointLabelLayer, "layerName", 'PointLabelLayer');
279
- (0, _defineProperty2["default"])(PointLabelLayer, "defaultProps", defaultProps);
280
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNrZ2wtbGF5ZXJzL3BvaW50LWxhYmVsLWxheWVyL3BvaW50LWxhYmVsLWxheWVyLmpzIl0sIm5hbWVzIjpbIlNIT1dfVEVYVF9CT1JERVIiLCJMRUZUIiwiVE9QIiwiUklHSFQiLCJCT1RUT00iLCJFbmhhbmNlZFRleHRCYWNrZ3JvdW5kTGF5ZXIiLCJzaGFkZXJzIiwidnMiLCJyZXBsYWNlQWxsIiwicmVwbGFjZSIsIlRleHRCYWNrZ3JvdW5kTGF5ZXIiLCJFbmhhbmNlZFRleHRMYXllciIsImxheWVyIiwicmVuZGVyUGFzcyIsImJhY2tncm91bmQiLCJpZCIsImluY2x1ZGVzIiwicHJvcHMiLCJnZXRCb3JkZXJXaWR0aCIsIlRleHRMYXllciIsImRlZmF1bHRQcm9wcyIsImdldFJhZGl1cyIsInR5cGUiLCJ2YWx1ZSIsInJhZGl1c1NjYWxlIiwibWluIiwiUG9pbnRMYWJlbExheWVyIiwic2Vjb25kYXJ5IiwiYW5jaG9yIiwiZ2V0VGV4dEFuY2hvciIsImFsaWdubWVudCIsImdldEFsaWdubWVudEJhc2VsaW5lIiwiZ2V0U2Vjb25kYXJ5VGV4dCIsInNlY29uZGFyeVNpemVTY2FsZSIsInNpemVTY2FsZSIsInhNdWx0IiwieU11bHQiLCJ4UGFkZGluZyIsInlQYWRkaW5nIiwic2Vjb25kYXJ5T2Zmc2V0IiwieU9mZnNldCIsInJhZGl1c1BhZGRpbmciLCJkIiwiaW5mbyIsInIiLCJwYWRkaW5nWCIsInBhZGRpbmdZIiwiYmFja2dyb3VuZFBhZGRpbmciLCJ1cGRhdGVUcmlnZ2Vyc092ZXJyaWRlIiwidXBkYXRlVHJpZ2dlcnMiLCJkYXRhIiwiY2hhcmFjdGVyU2V0IiwiZm9udEZhbWlseSIsImZvbnRTZXR0aW5ncyIsImZvbnRXZWlnaHQiLCJvdXRsaW5lQ29sb3IiLCJvdXRsaW5lV2lkdGgiLCJnZXRDb2xvciIsImdldFBvc2l0aW9uIiwiZ2V0U3ViTGF5ZXJQcm9wcyIsImdldFBpeGVsT2Zmc2V0IiwiZ2V0U2l6ZSIsIl9zdWJMYXllclByb3BzIiwiZ2V0QmFja2dyb3VuZENvbG9yIiwiZ2V0Qm9yZGVyQ29sb3IiLCJnZXRUZXh0IiwiZ2V0U2Vjb25kYXJ5Q29sb3IiLCJzZWNvbmRhcnlPdXRsaW5lQ29sb3IiLCJjYWxjdWxhdGVQaXhlbE9mZnNldCIsImNhbGN1bGF0ZUJhY2tncm91bmRQYWRkaW5nIiwib3V0IiwicmVuZGVyVGV4dExheWVyIiwiQ29tcG9zaXRlTGF5ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7Ozs7OztBQUVBO0FBQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsS0FBekI7SUFFT0MsSSxHQUE2QixDO0lBQXZCQyxHLEdBQTBCLEM7SUFBckJDLEssR0FBd0IsQztJQUFqQkMsTSxHQUFvQixDOztJQUV2Q0MsMkI7Ozs7Ozs7Ozs7OztXQUNKLHNCQUFhO0FBQ1gsVUFBTUMsT0FBTyxnSUFBYjtBQUNBLFVBQUlDLEVBQUUsR0FBR0QsT0FBTyxDQUFDQyxFQUFqQixDQUZXLENBSVg7QUFDQTs7QUFDQUEsTUFBQUEsRUFBRSxHQUFHQSxFQUFFLENBQUNDLFVBQUgsQ0FBYyxVQUFkLEVBQTBCLFdBQTFCLENBQUw7QUFDQUQsTUFBQUEsRUFBRSxHQUFHQSxFQUFFLENBQUNFLE9BQUgsQ0FDSCxtQkFERyxFQUVILHdHQUZHLENBQUw7QUFLQSw2Q0FBV0gsT0FBWDtBQUFvQkMsUUFBQUEsRUFBRSxFQUFGQTtBQUFwQjtBQUNEOzs7RUFkdUNHLDRCLEdBaUIxQztBQUNBOzs7SUFDTUMsaUI7Ozs7Ozs7Ozs7OztXQUNKLDhCQUFvQztBQUFBLFVBQXBCQyxLQUFvQixRQUFwQkEsS0FBb0I7QUFBQSxVQUFiQyxVQUFhLFFBQWJBLFVBQWE7QUFDbEMsVUFBTUMsVUFBVSxHQUFHRixLQUFLLENBQUNHLEVBQU4sQ0FBU0MsUUFBVCxDQUFrQixvQkFBbEIsQ0FBbkI7O0FBQ0EsVUFBSUgsVUFBVSxLQUFLLFdBQW5CLEVBQWdDO0FBQzlCLGVBQU9DLFVBQVAsQ0FEOEIsQ0FDWDtB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LFVBQU1yQixpQkFBaUIsR0FBRyxLQUFLc0IsMEJBQUwsRUFBMUI7QUFDQSxVQUFNQyxHQUFHLEdBQUcsQ0FDVixLQUFLQyxlQUFMLENBQXFCLFNBQXJCLEVBQWdDO0FBQzlCeEIsUUFBQUEsaUJBQWlCLEVBQWpCQSxpQkFEOEI7QUFFOUJrQixRQUFBQSxPQUFPLEVBQVBBLE9BRjhCO0FBRzlCTCxRQUFBQSxjQUFjLEVBQWRBLGNBSDhCO0FBSTlCOUMsUUFBQUEsVUFBVSxFQUFFLElBSmtCLENBSWI7O0FBSmEsT0FBaEMsQ0FEVSxFQU9Wa0IsZ0JBQWdCLElBQ2QsS0FBS3VDLGVBQUwsQ0FBcUIsV0FBckI7QUFDRU4sUUFBQUEsT0FBTyxFQUFFakMsZ0JBRFg7QUFFRTRCLFFBQUFBLGNBQWMsRUFBRSxLQUFLUSxvQkFBTCxDQUEwQixJQUExQixDQUZsQjtBQUdFckMsUUFBQUEsb0JBQW9CLEVBQUUsS0FIeEI7QUFJRWtCLFFBQUFBLGNBQWMsRUFBRTtBQUFDZ0IsVUFBQUEsT0FBTyxFQUFFaEIsY0FBYyxDQUFDakI7QUFBekI7QUFKbEIsU0FPTWtDLGlCQUFpQixJQUFJO0FBQUNULFFBQUFBLFFBQVEsRUFBRVM7QUFBWCxPQVAzQixHQVFNakMsa0JBQWtCLElBQUk7QUFBQ0MsUUFBQUEsU0FBUyxFQUFFRDtBQUFaLE9BUjVCLEdBU01rQyxxQkFBcUIsSUFBSTtBQUFDWixRQUFBQSxZQUFZLEVBQUVZO0FBQWYsT0FUL0IsRUFSUSxDQUFaO0FBcUJBLGFBQU9HLEdBQVA7QUFDRDs7O0VBektrQ0Usb0I7OztpQ0FBeEI5QyxlLGVBQ1EsaUI7aUNBRFJBLGUsa0JBRVdOLFkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvc2l0ZUxheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7VGV4dExheWVyLCBfVGV4dEJhY2tncm91bmRMYXllciBhcyBUZXh0QmFja2dyb3VuZExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuXG4vLyBUT0RPIHJlbW92ZSBwcmlvciB0byByZWxlYXNlXG5jb25zdCBTSE9XX1RFWFRfQk9SREVSID0gZmFsc2U7XG5cbmNvbnN0IFtMRUZULCBUT1AsIFJJR0hULCBCT1RUT01dID0gWzAsIDEsIDIsIDNdO1xuXG5jbGFzcyBFbmhhbmNlZFRleHRCYWNrZ3JvdW5kTGF5ZXIgZXh0ZW5kcyBUZXh0QmFja2dyb3VuZExheWVyIHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICBjb25zdCBzaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuICAgIGxldCB2cyA9IHNoYWRlcnMudnM7XG5cbiAgICAvLyBNb2RpZnkgc2hhZGVyIHNvIHRoYXQgdGhlIHBhZGRpbmcgaXMgb2Zmc2V0IGJ5IHRoZSBwaXhlbCBvZmZzZXQgdG8gZW5zdXJlIHRoZSBwYWRkaW5nXG4gICAgLy8gYWx3YXlzIGNhcHR1cmVzIHRoZSBhbmNob3IgcG9pbnQuIEFzIHBhZGRpbmcgaXMgdW5pZm9ybSB3ZSBjYW5ub3QgcGFzcyBpdCBhIHBlci1sYWJlbCB2YWx1ZVxuICAgIHZzID0gdnMucmVwbGFjZUFsbCgncGFkZGluZy4nLCAnX3BhZGRpbmcuJyk7XG4gICAgdnMgPSB2cy5yZXBsYWNlKFxuICAgICAgJ3ZvaWQgbWFpbih2b2lkKSB7JyxcbiAgICAgICd2b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBfcGFkZGluZyA9IHBhZGRpbmcgKyBpbnN0YW5jZVBpeGVsT2Zmc2V0cy54eXh5ICogdmVjNCgxLjAsIDEuMCwgLTEuMCwgLTEuMCk7J1xuICAgICk7XG5cbiAgICByZXR1cm4gey4uLnNoYWRlcnMsIHZzfTtcbiAgfVxufVxuXG4vLyBUZXh0TGF5ZXIgd2hpY2ggaW5jbHVkZXMgbW9kaWZpZWQgdGV4dC1iYWNrZ3JvdW5kLWxheWVyLXZlcnRleCBzaGFkZXIgYW5kIG9ubHkgcmVuZGVycyB0aGVcbi8vIHByaW1hcnkgYmFja2dyb3VuZCBsYXllciBpbiB0aGUgY29sbGlzaW9uIHBhc3NcbmNsYXNzIEVuaGFuY2VkVGV4dExheWVyIGV4dGVuZHMgVGV4dExheWVyIHtcbiAgZmlsdGVyU3ViTGF5ZXIoe2xheWVyLCByZW5kZXJQYXNzfSkge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSBsYXllci5pZC5pbmNsdWRlcygncHJpbWFyeS1iYWNrZ3JvdW5kJyk7XG4gICAgaWYgKHJlbmRlclBhc3MgPT09ICdjb2xsaXNpb24nKSB7XG4gICAgICByZXR1cm4gYmFja2dyb3VuZDsgLy8gT25seSBkcmF3IHByaW1hcnkgYmFja2dyb3VuZCBsYXllciBpbiBjb2xsaXNpb24gcGFzc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gIWJhY2tncm91bmQgfHwgKFNIT1dfVEVYVF9CT1JERVIgJiYgdGhpcy5wcm9wcy5nZXRCb3JkZXJXaWR0aCk7IC8vIERvIG5vdCBkcmF3IGJhY2tncm91bmQgbGF5ZXIgaW4gb3RoZXIgcGFzc2VzXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgLi4uVGV4dExheWVyLmRlZmF1bHRQcm9wcyxcbiAgZ2V0UmFkaXVzOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IDF9LFxuICByYWRpdXNTY2FsZToge3R5cGU6ICdudW1iZXInLCBtaW46IDAsIHZhbHVlOiAxfVxufTtcblxuZXhwb3J0IGNsYXNzIFBvaW50TGFiZWxMYXllciBleHRlbmRzIENvbXBvc2l0ZUxheWVyIHtcbiAgc3RhdGljIGxheWVyTmFtZSA9ICdQb2ludExhYmVsTGF5ZXInO1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuXG4gIGNhbGN1bGF0ZVBpeGVsT2Zmc2V0KHNlY29uZGFyeSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGdldFRleHRBbmNob3I6IGFuY2hvcixcbiAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiBhbGlnbm1lbnQsXG4gICAgICBnZXRSYWRpdXMsXG4gICAgICBnZXRTZWNvbmRhcnlUZXh0LFxuICAgICAgcmFkaXVzU2NhbGUsXG4gICAgICBzZWNvbmRhcnlTaXplU2NhbGUsXG4gICAgICBzaXplU2NhbGVcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB4TXVsdCA9IGFuY2hvciA9PT0gJ21pZGRsZScgPyAwIDogYW5jaG9yID09PSAnc3RhcnQnID8gMSA6IC0xO1xuICAgIGNvbnN0IHlNdWx0ID0gYWxpZ25tZW50ID09PSAnY2VudGVyJyA/IDAgOiBhbGlnbm1lbnQgPT09ICdib3R0b20nID8gMSA6IC0xO1xuXG4gICAgLy8gUGFkZGluZyBiYXNlZCBvbiBmb250IHNpemUgKGZvbnQgc2l6ZSAvIDQpXG4gICAgY29uc3QgeFBhZGRpbmcgPSBzaXplU2NhbGUgLyA0O1xuICAgIGNvbnN0IHlQYWRkaW5nID0gc2l6ZVNjYWxlICogKDEgKyAxIC8gNCk7XG5cbiAgICAvLyBQbGFjZSBzZWNvbmRhcnkgbGFiZWwgdW5kZXIgbWFpbiBsYWJlbCAoc2Vjb25kYXJ5IGxhYmVsIGFsd2F5cyAndG9wJyBiYXNlbGluZSBhbGlnbmVkKVxuICAgIGNvbnN0IHNlY29uZGFyeU9mZnNldCA9IDAuNiAqICgxIC0geU11bHQpICogc2l6ZVNjYWxlO1xuICAgIGxldCB5T2Zmc2V0ID0gc2Vjb25kYXJ5ID8gc2Vjb25kYXJ5T2Zmc2V0IDogMDtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSwgcG9zaXRpb24gcmVsYXRpdmUgdG8gc2Vjb25kYXJ5IGxhYmVsXG4gICAgaWYgKGFuY2hvciA9PT0gJ21pZGRsZScgJiYgYWxpZ25tZW50ID09PSAndG9wJyAmJiBnZXRTZWNvbmRhcnlUZXh0KSB7XG4gICAgICB5T2Zmc2V0IC09IHNlY29uZGFyeU9mZnNldDtcbiAgICAgIHlPZmZzZXQgLT0gc2Vjb25kYXJ5U2l6ZVNjYWxlO1xuICAgICAgeU9mZnNldCArPSBzaXplU2NhbGU7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZyBiYXNlZCBvbiBwb2ludCByYWRpdXMgKHJhZGl1cy8gNClcbiAgICBjb25zdCByYWRpdXNQYWRkaW5nID0gMSArIDEgLyA0O1xuXG4gICAgcmV0dXJuIHR5cGVvZiBnZXRSYWRpdXMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gKGQsIGluZm8pID0+IHtcbiAgICAgICAgICBjb25zdCByID0gKGluZm8gPyBnZXRSYWRpdXMoZCwgaW5mbykgOiAxKSAqIHJhZGl1c1NjYWxlICogcmFkaXVzUGFkZGluZztcbiAgICAgICAgICByZXR1cm4gW3hNdWx0ICogKHIgKyB4UGFkZGluZyksIHlNdWx0ICogKHIgKyB5UGFkZGluZykgKyB5T2Zmc2V0XTtcbiAgICAgICAgfVxuICAgICAgOiBbXG4gICAgICAgICAgeE11bHQgKiAoZ2V0UmFkaXVzICogcmFkaXVzU2NhbGUgKiByYWRpdXNQYWRkaW5nICsgeFBhZGRpbmcpLFxuICAgICAgICAgIHlNdWx0ICogKGdldFJhZGl1cyAqIHJhZGl1c1NjYWxlICogcmFkaXVzUGFkZGluZyArIHlQYWRkaW5nKSArIHlPZmZzZXRcbiAgICAgICAgXTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUJhY2tncm91bmRQYWRkaW5nKCkge1xuICAgIGNvbnN0IHtnZXRUZXh0QW5jaG9yOiBhbmNob3IsIGdldEFsaWdubWVudEJhc2VsaW5lOiBhbGlnbm1lbnQsIHNpemVTY2FsZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gSGV1cmlzdGljcyB0byBhdm9pZCBsYWJlbCBvdmVybGFwIChzaG91bGQgd2UgYmFzZSB0aGlzIG9uIHRoZSB0ZXh0IGxlbmd0aD8pXG4gICAgY29uc3QgcGFkZGluZ1ggPSAxMiAqIHNpemVTY2FsZTtcbiAgICBjb25zdCBwYWRkaW5nWSA9IDMgKiBzaXplU2NhbGU7XG4gICAgY29uc3QgYmFja2dyb3VuZFBhZGRpbmcgPSBbMCwgMCwgMCwgMF07XG4gICAgaWYgKGFsaWdubWVudCA9PT0gJ3RvcCcpIHtcbiAgICAgIGJhY2tncm91bmRQYWRkaW5nW1RPUF0gPSBwYWRkaW5nWTtcbiAgICB9IGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIGJhY2tncm91bmRQYWRkaW5nW0JPVFRPTV0gPSBwYWRkaW5nWTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFja2dyb3VuZFBhZGRpbmdbVE9QXSA9IDAuNSAqIHBhZGRpbmdZO1xuICAgICAgYmFja2dyb3VuZFBhZGRpbmdbQk9UVE9NXSA9IDAuNSAqIHBhZGRpbmdZO1xuICAgIH1cbiAgICBpZiAoYW5jaG9yID09PSAnc3RhcnQnKSB7XG4gICAgICBiYWNrZ3JvdW5kUGFkZGluZ1tMRUZUXSA9IHBhZGRpbmdYO1xuICAgIH0gZWxzZSBpZiAoYW5jaG9yID09PSAnZW5kJykge1xuICAgICAgYmFja2dyb3VuZFBhZGRpbmdbUklHSFRdID0gcGFkZGluZ1g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhY2tncm91bmRQYWRkaW5nW0xFRlRdID0gMC41ICogcGFkZGluZ1g7XG4gICAgICBiYWNrZ3JvdW5kUGFkZGluZ1tSSUdIVF0gPSAwLjUgKiBwYWRkaW5nWDtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2dyb3VuZFBhZGRpbmc7XG4gIH1cblxuICByZW5kZXJUZXh0TGF5ZXIoaWQsIHt1cGRhdGVUcmlnZ2VyczogdXBkYXRlVHJpZ2dlcnNPdmVycmlkZSwgLi4ucHJvcHN9KSB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcblxuICAgICAgY2hhcmFjdGVyU2V0LFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRTZXR0aW5ncyxcbiAgICAgIGZvbnRXZWlnaHQsXG4gICAgICBvdXRsaW5lQ29sb3IsXG4gICAgICBvdXRsaW5lV2lkdGgsXG4gICAgICBzaXplU2NhbGUsXG4gICAgICByYWRpdXNTY2FsZSxcblxuICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmUsXG4gICAgICBnZXRDb2xvcixcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0VGV4dEFuY2hvcixcblxuICAgICAgdXBkYXRlVHJpZ2dlcnNcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiBuZXcgRW5oYW5jZWRUZXh0TGF5ZXIoXG4gICAgICB0aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICBpZCxcbiAgICAgICAgZGF0YTogZGF0YSxcblxuICAgICAgICBjaGFyYWN0ZXJTZXQsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIGZvbnRTZXR0aW5ncyxcbiAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgb3V0bGluZUNvbG9yLFxuICAgICAgICBvdXRsaW5lV2lkdGgsXG4gICAgICAgIHNpemVTY2FsZSxcblxuICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZSxcbiAgICAgICAgZ2V0Q29sb3IsXG4gICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICBnZXRUZXh0QW5jaG9yLFxuXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnNPdmVycmlkZSxcbiAgICAgICAgICBnZXRQaXhlbE9mZnNldDogW1xuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnMuZ2V0UmFkaXVzLFxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnMuZ2V0VGV4dEFuY2hvcixcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzLmdldEFsaWdubWVudEJhc2VsaW5lLFxuICAgICAgICAgICAgcmFkaXVzU2NhbGUsXG4gICAgICAgICAgICBzaXplU2NhbGVcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBnZXRTaXplOiAxLFxuICAgICAgICBfc3ViTGF5ZXJQcm9wczoge2JhY2tncm91bmQ6IHt0eXBlOiBFbmhhbmNlZFRleHRCYWNrZ3JvdW5kTGF5ZXJ9fVxuICAgICAgfSxcbiAgICAgIC8vIERFQlVHXG4gICAgICBTSE9XX1RFWFRfQk9SREVSXG4gICAgICAgID8ge2dldEJhY2tncm91bmRDb2xvcjogWzAsIDAsIDAsIDBdLCBnZXRCb3JkZXJDb2xvcjogWzI1NSwgMCwgMCwgODBdLCBnZXRCb3JkZXJXaWR0aDogMX1cbiAgICAgICAgOiB7fSxcbiAgICAgIHByb3BzXG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxheWVycygpIHtcbiAgICBjb25zdCB7XG4gICAgICBnZXRUZXh0LFxuICAgICAgZ2V0U2Vjb25kYXJ5Q29sb3IsXG4gICAgICBnZXRTZWNvbmRhcnlUZXh0LFxuICAgICAgc2Vjb25kYXJ5T3V0bGluZUNvbG9yLFxuICAgICAgc2Vjb25kYXJ5U2l6ZVNjYWxlLFxuICAgICAgdXBkYXRlVHJpZ2dlcnNcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBnZXRQaXhlbE9mZnNldCA9IHRoaXMuY2FsY3VsYXRlUGl4ZWxPZmZzZXQoZmFsc2UpO1xuICAgIGNvbnN0IGJhY2tncm91bmRQYWRkaW5nID0gdGhpcy5jYWxjdWxhdGVCYWNrZ3JvdW5kUGFkZGluZygpO1xuICAgIGNvbnN0IG91dCA9IFtcbiAgICAgIHRoaXMucmVuZGVyVGV4dExheWVyKCdwcmltYXJ5Jywge1xuICAgICAgICBiYWNrZ3JvdW5kUGFkZGluZyxcbiAgICAgICAgZ2V0VGV4dCxcbiAgICAgICAgZ2V0UGl4ZWxPZmZzZXQsXG4gICAgICAgIGJhY2tncm91bmQ6IHRydWUgLy8gT25seSB1c2UgYmFja2dyb3VuZCBmb3IgcHJpbWFyeSBsYWJlbCBmb3IgZmFzdGVyIGNvbGxpc2lvbnNcbiAgICAgIH0pLFxuICAgICAgZ2V0U2Vjb25kYXJ5VGV4dCAmJlxuICAgICAgICB0aGlzLnJlbmRlclRleHRMYXllcignc2Vjb25kYXJ5Jywge1xuICAgICAgICAgIGdldFRleHQ6IGdldFNlY29uZGFyeVRleHQsXG4gICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IHRoaXMuY2FsY3VsYXRlUGl4ZWxPZmZzZXQodHJ1ZSksXG4gICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6ICd0b3AnLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7Z2V0VGV4dDogdXBkYXRlVHJpZ2dlcnMuZ2V0U2Vjb25kYXJ5VGV4dH0sXG5cbiAgICAgICAgICAvLyBPcHRpb25hbCBvdmVycmlkZXNcbiAgICAgICAgICAuLi4oZ2V0U2Vjb25kYXJ5Q29sb3IgJiYge2dldENvbG9yOiBnZXRTZWNvbmRhcnlDb2xvcn0pLFxuICAgICAgICAgIC4uLihzZWNvbmRhcnlTaXplU2NhbGUgJiYge3NpemVTY2FsZTogc2Vjb25kYXJ5U2l6ZVNjYWxlfSksXG4gICAgICAgICAgLi4uKHNlY29uZGFyeU91dGxpbmVDb2xvciAmJiB7b3V0bGluZUNvbG9yOiBzZWNvbmRhcnlPdXRsaW5lQ29sb3J9KVxuICAgICAgICB9KVxuICAgIF07XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG4iXX0=