@kepler.gl/utils 3.0.0 → 3.1.0-alpha.1
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 +14 -10
- package/dist/aggregate-utils.d.ts +0 -3
- package/dist/aggregate-utils.js +0 -75
- package/dist/arrow-data-container.d.ts +0 -54
- package/dist/arrow-data-container.js +0 -360
- package/dist/color-utils.d.ts +0 -51
- package/dist/color-utils.js +0 -161
- package/dist/data-container-interface.d.ts +0 -133
- package/dist/data-container-interface.js +0 -6
- package/dist/data-container-utils.d.ts +0 -30
- package/dist/data-container-utils.js +0 -88
- package/dist/data-row.d.ts +0 -59
- package/dist/data-row.js +0 -126
- package/dist/data-scale-utils.d.ts +0 -23
- package/dist/data-scale-utils.js +0 -62
- package/dist/data-utils.d.ts +0 -103
- package/dist/data-utils.js +0 -502
- package/dist/dataset-utils.d.ts +0 -116
- package/dist/dataset-utils.js +0 -614
- package/dist/dom-to-image.d.ts +0 -73
- package/dist/dom-to-image.js +0 -489
- package/dist/dom-utils.d.ts +0 -23
- package/dist/dom-utils.js +0 -434
- package/dist/effect-utils.d.ts +0 -23
- package/dist/effect-utils.js +0 -196
- package/dist/export-map-html.d.ts +0 -9
- package/dist/export-map-html.js +0 -28
- package/dist/export-utils.d.ts +0 -53
- package/dist/export-utils.js +0 -262
- package/dist/filter-utils.d.ts +0 -326
- package/dist/filter-utils.js +0 -1333
- package/dist/format.d.ts +0 -1
- package/dist/format.js +0 -17
- package/dist/gl-utils.d.ts +0 -1
- package/dist/gl-utils.js +0 -35
- package/dist/h3-utils.d.ts +0 -21
- package/dist/h3-utils.js +0 -81
- package/dist/index.d.ts +0 -36
- package/dist/index.js +0 -772
- package/dist/indexed-data-container.d.ts +0 -34
- package/dist/indexed-data-container.js +0 -254
- package/dist/locale-utils.d.ts +0 -2
- package/dist/locale-utils.js +0 -54
- package/dist/map-info-utils.d.ts +0 -1
- package/dist/map-info-utils.js +0 -15
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +0 -65
- package/dist/map-style-utils/mapbox-gl-style-editor.js +0 -218
- package/dist/map-style-utils/mapbox-utils.d.ts +0 -9
- package/dist/map-style-utils/mapbox-utils.js +0 -48
- package/dist/map-utils.d.ts +0 -9
- package/dist/map-utils.js +0 -65
- package/dist/mapbox-utils.d.ts +0 -7
- package/dist/mapbox-utils.js +0 -22
- package/dist/noop.d.ts +0 -1
- package/dist/noop.js +0 -11
- package/dist/notifications-utils.d.ts +0 -42
- package/dist/notifications-utils.js +0 -85
- package/dist/observe-dimensions.d.ts +0 -15
- package/dist/observe-dimensions.js +0 -151
- package/dist/plot.d.ts +0 -6
- package/dist/plot.js +0 -31
- package/dist/projection-utils.d.ts +0 -21
- package/dist/projection-utils.js +0 -100
- package/dist/row-data-container.d.ts +0 -31
- package/dist/row-data-container.js +0 -252
- package/dist/searcher-utils.d.ts +0 -1
- package/dist/searcher-utils.js +0 -28
- package/dist/split-map-utils.d.ts +0 -32
- package/dist/split-map-utils.js +0 -114
- package/dist/time.d.ts +0 -16
- package/dist/time.js +0 -89
- package/dist/utils.d.ts +0 -116
- package/dist/utils.js +0 -305
package/dist/data-utils.js
DELETED
@@ -1,502 +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.unique = unique;
|
9
|
-
exports.getLatLngBounds = getLatLngBounds;
|
10
|
-
exports.clamp = clamp;
|
11
|
-
exports.getSampleData = getSampleData;
|
12
|
-
exports.timeToUnixMilli = timeToUnixMilli;
|
13
|
-
exports.notNullorUndefined = notNullorUndefined;
|
14
|
-
exports.isNumber = isNumber;
|
15
|
-
exports.hasOwnProperty = hasOwnProperty;
|
16
|
-
exports.numberSort = numberSort;
|
17
|
-
exports.getSortingFunction = getSortingFunction;
|
18
|
-
exports.preciseRound = preciseRound;
|
19
|
-
exports.roundToFour = roundToFour;
|
20
|
-
exports.getRoundingDecimalFromStep = getRoundingDecimalFromStep;
|
21
|
-
exports.normalizeSliderValue = normalizeSliderValue;
|
22
|
-
exports.roundValToStep = roundValToStep;
|
23
|
-
exports.getFormatter = getFormatter;
|
24
|
-
exports.getColumnFormatter = getColumnFormatter;
|
25
|
-
exports.applyValueMap = applyValueMap;
|
26
|
-
exports.applyDefaultFormat = applyDefaultFormat;
|
27
|
-
exports.getBooleanFormatter = getBooleanFormatter;
|
28
|
-
exports.applyCustomFormat = applyCustomFormat;
|
29
|
-
exports.formatNumber = formatNumber;
|
30
|
-
exports.datetimeFormatter = datetimeFormatter;
|
31
|
-
exports.arrayMove = exports.parseFieldValue = exports.FIELD_DISPLAY_FORMAT = exports.floatFormatter = exports.defaultFormatter = void 0;
|
32
|
-
|
33
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
34
|
-
|
35
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
36
|
-
|
37
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
38
|
-
|
39
|
-
var _assert = _interopRequireDefault(require("assert"));
|
40
|
-
|
41
|
-
var _d3Format = require("d3-format");
|
42
|
-
|
43
|
-
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
|
44
|
-
|
45
|
-
var _constants = require("@kepler.gl/constants");
|
46
|
-
|
47
|
-
var _plot = require("./plot");
|
48
|
-
|
49
|
-
var _utils = require("./utils");
|
50
|
-
|
51
|
-
var _FIELD_DISPLAY_FORMAT;
|
52
|
-
|
53
|
-
/**
|
54
|
-
* simple getting unique values of an array
|
55
|
-
*
|
56
|
-
* @param values
|
57
|
-
* @returns unique values
|
58
|
-
*/
|
59
|
-
function unique(values) {
|
60
|
-
var results = [];
|
61
|
-
var uniqueSet = new Set(values);
|
62
|
-
uniqueSet.forEach(function (v) {
|
63
|
-
if (notNullorUndefined(v)) {
|
64
|
-
results.push(v);
|
65
|
-
}
|
66
|
-
});
|
67
|
-
return results;
|
68
|
-
}
|
69
|
-
|
70
|
-
function getLatLngBounds(points, idx, limit) {
|
71
|
-
var lats = points.map(function (d) {
|
72
|
-
return Number(Array.isArray(d)) && d[idx];
|
73
|
-
}).filter(Number.isFinite).sort(numberSort);
|
74
|
-
|
75
|
-
if (!lats.length) {
|
76
|
-
return null;
|
77
|
-
} // clamp to limit
|
78
|
-
|
79
|
-
|
80
|
-
return [Math.max(lats[0], limit[0]), Math.min(lats[lats.length - 1], limit[1])];
|
81
|
-
}
|
82
|
-
|
83
|
-
function clamp(_ref) {
|
84
|
-
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
85
|
-
min = _ref2[0],
|
86
|
-
max = _ref2[1];
|
87
|
-
|
88
|
-
var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
89
|
-
return val <= min ? min : val >= max ? max : val;
|
90
|
-
}
|
91
|
-
|
92
|
-
function getSampleData(data) {
|
93
|
-
var sampleSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
|
94
|
-
var getValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (d) {
|
95
|
-
return d;
|
96
|
-
};
|
97
|
-
var sampleStep = Math.max(Math.floor(data.length / sampleSize), 1);
|
98
|
-
var output = [];
|
99
|
-
|
100
|
-
for (var i = 0; i < data.length; i += sampleStep) {
|
101
|
-
output.push(getValue(data[i]));
|
102
|
-
}
|
103
|
-
|
104
|
-
return output;
|
105
|
-
}
|
106
|
-
/**
|
107
|
-
* Convert different time format to unix milliseconds
|
108
|
-
*/
|
109
|
-
|
110
|
-
|
111
|
-
function timeToUnixMilli(value, format) {
|
112
|
-
if (notNullorUndefined(value)) {
|
113
|
-
if (typeof value === 'string') {
|
114
|
-
return _momentTimezone["default"].utc(value, format).valueOf();
|
115
|
-
}
|
116
|
-
|
117
|
-
if (typeof value === 'number') {
|
118
|
-
return format === 'x' ? value * 1000 : value;
|
119
|
-
}
|
120
|
-
|
121
|
-
if (value instanceof Date) {
|
122
|
-
return value.valueOf();
|
123
|
-
}
|
124
|
-
}
|
125
|
-
|
126
|
-
return null;
|
127
|
-
}
|
128
|
-
/**
|
129
|
-
* whether null or undefined
|
130
|
-
*/
|
131
|
-
|
132
|
-
|
133
|
-
function notNullorUndefined(d) {
|
134
|
-
return d !== undefined && d !== null;
|
135
|
-
}
|
136
|
-
/**
|
137
|
-
* Whether d is a number, this filtered out NaN as well
|
138
|
-
*/
|
139
|
-
|
140
|
-
|
141
|
-
function isNumber(d) {
|
142
|
-
return Number.isFinite(d);
|
143
|
-
}
|
144
|
-
/**
|
145
|
-
* whether object has property
|
146
|
-
* @param {string} prop
|
147
|
-
* @returns {boolean} - yes or no
|
148
|
-
*/
|
149
|
-
|
150
|
-
|
151
|
-
function hasOwnProperty(obj, prop) {
|
152
|
-
return obj.hasOwnProperty(prop);
|
153
|
-
}
|
154
|
-
|
155
|
-
function numberSort(a, b) {
|
156
|
-
return a - b;
|
157
|
-
}
|
158
|
-
|
159
|
-
function getSortingFunction(fieldType) {
|
160
|
-
switch (fieldType) {
|
161
|
-
case _constants.ALL_FIELD_TYPES.real:
|
162
|
-
case _constants.ALL_FIELD_TYPES.integer:
|
163
|
-
case _constants.ALL_FIELD_TYPES.timestamp:
|
164
|
-
return numberSort;
|
165
|
-
|
166
|
-
default:
|
167
|
-
return undefined;
|
168
|
-
}
|
169
|
-
}
|
170
|
-
/**
|
171
|
-
* round number with exact number of decimals
|
172
|
-
* return as a string
|
173
|
-
*/
|
174
|
-
|
175
|
-
|
176
|
-
function preciseRound(num, decimals) {
|
177
|
-
var t = Math.pow(10, decimals);
|
178
|
-
return (Math.round(num * t + (decimals > 0 ? 1 : 0) * (Math.sign(num) * (10 / Math.pow(100, decimals)))) / t).toFixed(decimals);
|
179
|
-
}
|
180
|
-
/**
|
181
|
-
* round a giving number at most 4 decimal places
|
182
|
-
* e.g. 10 -> 10, 1.12345 -> 1.2345, 2.0 -> 2
|
183
|
-
*/
|
184
|
-
|
185
|
-
|
186
|
-
function roundToFour(num) {
|
187
|
-
// @ts-expect-error
|
188
|
-
return Number("".concat(Math.round("".concat(num, "e+4")), "e-4"));
|
189
|
-
}
|
190
|
-
/**
|
191
|
-
* get number of decimals to round to for slider from step
|
192
|
-
* @param step
|
193
|
-
* @returns- number of decimal
|
194
|
-
*/
|
195
|
-
|
196
|
-
|
197
|
-
function getRoundingDecimalFromStep(step) {
|
198
|
-
if (isNaN(step)) {
|
199
|
-
(0, _assert["default"])('step is not a number');
|
200
|
-
(0, _assert["default"])(step);
|
201
|
-
}
|
202
|
-
|
203
|
-
var stepStr = step.toString(); // in case the step is a very small number e.g. 1e-7, return decimal e.g. 7 directly
|
204
|
-
|
205
|
-
var splitExponential = stepStr.split('e-');
|
206
|
-
|
207
|
-
if (splitExponential.length === 2) {
|
208
|
-
var coeffZero = splitExponential[0].split('.');
|
209
|
-
var coeffDecimal = coeffZero.length === 1 ? 0 : coeffZero[1].length;
|
210
|
-
return parseInt(splitExponential[1], 10) + coeffDecimal;
|
211
|
-
}
|
212
|
-
|
213
|
-
var splitZero = stepStr.split('.');
|
214
|
-
|
215
|
-
if (splitZero.length === 1) {
|
216
|
-
return 0;
|
217
|
-
}
|
218
|
-
|
219
|
-
return splitZero[1].length;
|
220
|
-
}
|
221
|
-
/**
|
222
|
-
* If marks is provided, snap to marks, if not normalize to step
|
223
|
-
* @param val
|
224
|
-
* @param minValue
|
225
|
-
* @param step
|
226
|
-
* @param marks
|
227
|
-
*/
|
228
|
-
|
229
|
-
|
230
|
-
function normalizeSliderValue(val, minValue, step, marks) {
|
231
|
-
if (marks && marks.length) {
|
232
|
-
// Use in slider, given a number and an array of numbers, return the nears number from the array
|
233
|
-
return (0, _plot.snapToMarks)(val, marks);
|
234
|
-
}
|
235
|
-
|
236
|
-
return roundValToStep(minValue, step, val);
|
237
|
-
}
|
238
|
-
/**
|
239
|
-
* round the value to step for the slider
|
240
|
-
* @param minValue
|
241
|
-
* @param step
|
242
|
-
* @param val
|
243
|
-
* @returns - rounded number
|
244
|
-
*/
|
245
|
-
|
246
|
-
|
247
|
-
function roundValToStep(minValue, step, val) {
|
248
|
-
if (!isNumber(step) || !isNumber(minValue)) {
|
249
|
-
return val;
|
250
|
-
}
|
251
|
-
|
252
|
-
var decimal = getRoundingDecimalFromStep(step);
|
253
|
-
var steps = Math.floor((val - minValue) / step);
|
254
|
-
var remain = val - (steps * step + minValue); // has to round because javascript turns 0.1 into 0.9999999999999987
|
255
|
-
|
256
|
-
remain = Number(preciseRound(remain, 8));
|
257
|
-
var closest;
|
258
|
-
|
259
|
-
if (remain === 0) {
|
260
|
-
closest = val;
|
261
|
-
} else if (remain < step / 2) {
|
262
|
-
closest = steps * step + minValue;
|
263
|
-
} else {
|
264
|
-
closest = (steps + 1) * step + minValue;
|
265
|
-
} // precise round return a string rounded to the defined decimal
|
266
|
-
|
267
|
-
|
268
|
-
var rounded = preciseRound(closest, decimal);
|
269
|
-
return Number(rounded);
|
270
|
-
}
|
271
|
-
/**
|
272
|
-
* Get the value format based on field and format options
|
273
|
-
* Used in render tooltip value
|
274
|
-
*/
|
275
|
-
|
276
|
-
|
277
|
-
var defaultFormatter = function defaultFormatter(v) {
|
278
|
-
return notNullorUndefined(v) ? String(v) : '';
|
279
|
-
};
|
280
|
-
|
281
|
-
exports.defaultFormatter = defaultFormatter;
|
282
|
-
|
283
|
-
var floatFormatter = function floatFormatter(v) {
|
284
|
-
return isNumber(v) ? String(roundToFour(v)) : '';
|
285
|
-
};
|
286
|
-
|
287
|
-
exports.floatFormatter = floatFormatter;
|
288
|
-
var FIELD_DISPLAY_FORMAT = (_FIELD_DISPLAY_FORMAT = {}, (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.string, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.timestamp, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.integer, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.real, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES["boolean"], defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.date, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.geojson, function (d) {
|
289
|
-
return typeof d === 'string' ? d : (0, _utils.isPlainObject)(d) ? JSON.stringify(d) : Array.isArray(d) ? "[".concat(String(d), "]") : '';
|
290
|
-
}), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.geoarrow, function (d) {
|
291
|
-
return d;
|
292
|
-
}), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.object, JSON.stringify), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.array, JSON.stringify), _FIELD_DISPLAY_FORMAT);
|
293
|
-
/**
|
294
|
-
* Parse field value and type and return a string representation
|
295
|
-
*/
|
296
|
-
|
297
|
-
exports.FIELD_DISPLAY_FORMAT = FIELD_DISPLAY_FORMAT;
|
298
|
-
|
299
|
-
var parseFieldValue = function parseFieldValue(value, type) {
|
300
|
-
if (!notNullorUndefined(value)) {
|
301
|
-
return '';
|
302
|
-
}
|
303
|
-
|
304
|
-
return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value) : String(value);
|
305
|
-
};
|
306
|
-
|
307
|
-
exports.parseFieldValue = parseFieldValue;
|
308
|
-
|
309
|
-
var arrayMoveMutate = function arrayMoveMutate(array, from, to) {
|
310
|
-
array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
|
311
|
-
};
|
312
|
-
/**
|
313
|
-
*
|
314
|
-
* @param array
|
315
|
-
* @param from
|
316
|
-
* @param to
|
317
|
-
*/
|
318
|
-
|
319
|
-
|
320
|
-
var arrayMove = function arrayMove(array, from, to) {
|
321
|
-
array = array.slice();
|
322
|
-
arrayMoveMutate(array, from, to);
|
323
|
-
return array;
|
324
|
-
};
|
325
|
-
/**
|
326
|
-
* Get the value format based on field and format options
|
327
|
-
* Used in render tooltip value
|
328
|
-
* @param format
|
329
|
-
* @param field
|
330
|
-
*/
|
331
|
-
|
332
|
-
|
333
|
-
exports.arrayMove = arrayMove;
|
334
|
-
|
335
|
-
function getFormatter(format, field) {
|
336
|
-
if (!format) {
|
337
|
-
return defaultFormatter;
|
338
|
-
}
|
339
|
-
|
340
|
-
var tooltipFormat = Object.values(_constants.TOOLTIP_FORMATS).find(function (f) {
|
341
|
-
return f[_constants.TOOLTIP_KEY] === format;
|
342
|
-
});
|
343
|
-
|
344
|
-
if (tooltipFormat) {
|
345
|
-
return applyDefaultFormat(tooltipFormat);
|
346
|
-
} else if (typeof format === 'string' && field) {
|
347
|
-
return applyCustomFormat(format, field);
|
348
|
-
}
|
349
|
-
|
350
|
-
return defaultFormatter;
|
351
|
-
}
|
352
|
-
|
353
|
-
function getColumnFormatter(colMeta) {
|
354
|
-
var format = colMeta.format,
|
355
|
-
displayFormat = colMeta.displayFormat;
|
356
|
-
|
357
|
-
if (!format && !displayFormat) {
|
358
|
-
return FIELD_DISPLAY_FORMAT[colMeta.type];
|
359
|
-
}
|
360
|
-
|
361
|
-
var tooltipFormat = Object.values(_constants.TOOLTIP_FORMATS).find(function (f) {
|
362
|
-
return f[_constants.TOOLTIP_KEY] === displayFormat;
|
363
|
-
});
|
364
|
-
|
365
|
-
if (tooltipFormat) {
|
366
|
-
return applyDefaultFormat(tooltipFormat);
|
367
|
-
} else if (typeof displayFormat === 'string' && colMeta) {
|
368
|
-
return applyCustomFormat(displayFormat, colMeta);
|
369
|
-
} else if ((0, _typeof2["default"])(displayFormat) === 'object') {
|
370
|
-
return applyValueMap(displayFormat);
|
371
|
-
}
|
372
|
-
|
373
|
-
return defaultFormatter;
|
374
|
-
}
|
375
|
-
|
376
|
-
function applyValueMap(format) {
|
377
|
-
return function (v) {
|
378
|
-
return format[v];
|
379
|
-
};
|
380
|
-
}
|
381
|
-
|
382
|
-
function applyDefaultFormat(tooltipFormat) {
|
383
|
-
if (!tooltipFormat || !tooltipFormat.format) {
|
384
|
-
return defaultFormatter;
|
385
|
-
}
|
386
|
-
|
387
|
-
switch (tooltipFormat.type) {
|
388
|
-
case _constants.TOOLTIP_FORMAT_TYPES.DECIMAL:
|
389
|
-
return (0, _d3Format.format)(tooltipFormat.format);
|
390
|
-
|
391
|
-
case _constants.TOOLTIP_FORMAT_TYPES.DATE:
|
392
|
-
case _constants.TOOLTIP_FORMAT_TYPES.DATE_TIME:
|
393
|
-
return datetimeFormatter(null)(tooltipFormat.format);
|
394
|
-
|
395
|
-
case _constants.TOOLTIP_FORMAT_TYPES.PERCENTAGE:
|
396
|
-
return function (v) {
|
397
|
-
return "".concat((0, _d3Format.format)(_constants.TOOLTIP_FORMATS.DECIMAL_DECIMAL_FIXED_2.format)(v), "%");
|
398
|
-
};
|
399
|
-
|
400
|
-
case _constants.TOOLTIP_FORMAT_TYPES.BOOLEAN:
|
401
|
-
return getBooleanFormatter(tooltipFormat.format);
|
402
|
-
|
403
|
-
default:
|
404
|
-
return defaultFormatter;
|
405
|
-
}
|
406
|
-
}
|
407
|
-
|
408
|
-
function getBooleanFormatter(format) {
|
409
|
-
switch (format) {
|
410
|
-
case '01':
|
411
|
-
return function (v) {
|
412
|
-
return v ? '1' : '0';
|
413
|
-
};
|
414
|
-
|
415
|
-
case 'yn':
|
416
|
-
return function (v) {
|
417
|
-
return v ? 'yes' : 'no';
|
418
|
-
};
|
419
|
-
|
420
|
-
default:
|
421
|
-
return defaultFormatter;
|
422
|
-
}
|
423
|
-
} // Allow user to specify custom tooltip format via config
|
424
|
-
|
425
|
-
|
426
|
-
function applyCustomFormat(format, field) {
|
427
|
-
switch (field.type) {
|
428
|
-
case _constants.ALL_FIELD_TYPES.real:
|
429
|
-
case _constants.ALL_FIELD_TYPES.integer:
|
430
|
-
return (0, _d3Format.format)(format);
|
431
|
-
|
432
|
-
case _constants.ALL_FIELD_TYPES.date:
|
433
|
-
case _constants.ALL_FIELD_TYPES.timestamp:
|
434
|
-
return datetimeFormatter(null)(format);
|
435
|
-
|
436
|
-
default:
|
437
|
-
return function (v) {
|
438
|
-
return v;
|
439
|
-
};
|
440
|
-
}
|
441
|
-
}
|
442
|
-
|
443
|
-
function formatLargeNumber(n) {
|
444
|
-
// SI-prefix with 4 significant digits
|
445
|
-
return (0, _d3Format.format)('.4~s')(n);
|
446
|
-
}
|
447
|
-
|
448
|
-
function formatNumber(n, type) {
|
449
|
-
switch (type) {
|
450
|
-
case _constants.ALL_FIELD_TYPES.integer:
|
451
|
-
if (n < 0) {
|
452
|
-
return "-".concat(formatNumber(-n, 'integer'));
|
453
|
-
}
|
454
|
-
|
455
|
-
if (n < 1000) {
|
456
|
-
return "".concat(Math.round(n));
|
457
|
-
}
|
458
|
-
|
459
|
-
if (n < 10 * 1000) {
|
460
|
-
return (0, _d3Format.format)(',')(Math.round(n));
|
461
|
-
}
|
462
|
-
|
463
|
-
return formatLargeNumber(n);
|
464
|
-
|
465
|
-
case _constants.ALL_FIELD_TYPES.real:
|
466
|
-
if (n < 0) {
|
467
|
-
return "-".concat(formatNumber(-n, 'number'));
|
468
|
-
}
|
469
|
-
|
470
|
-
if (n < 1000) {
|
471
|
-
return (0, _d3Format.format)('.4~r')(n);
|
472
|
-
}
|
473
|
-
|
474
|
-
if (n < 10 * 1000) {
|
475
|
-
return (0, _d3Format.format)(',.2~f')(n);
|
476
|
-
}
|
477
|
-
|
478
|
-
return formatLargeNumber(n);
|
479
|
-
|
480
|
-
default:
|
481
|
-
return formatNumber(n, 'real');
|
482
|
-
}
|
483
|
-
}
|
484
|
-
/**
|
485
|
-
* Format epoch milliseconds with a format string
|
486
|
-
* @type timezone
|
487
|
-
*/
|
488
|
-
|
489
|
-
|
490
|
-
function datetimeFormatter(timezone) {
|
491
|
-
return timezone ? function (format) {
|
492
|
-
return function (ts) {
|
493
|
-
return _momentTimezone["default"].utc(ts).tz(timezone).format(format);
|
494
|
-
};
|
495
|
-
} : // return empty string instead of 'Invalid date' if ts is undefined/null
|
496
|
-
function (format) {
|
497
|
-
return function (ts) {
|
498
|
-
return ts ? _momentTimezone["default"].utc(ts).format(format) : '';
|
499
|
-
};
|
500
|
-
};
|
501
|
-
}
|
502
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLXV0aWxzLnRzIl0sIm5hbWVzIjpbInVuaXF1ZSIsInZhbHVlcyIsInJlc3VsdHMiLCJ1bmlxdWVTZXQiLCJTZXQiLCJmb3JFYWNoIiwidiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInB1c2giLCJnZXRMYXRMbmdCb3VuZHMiLCJwb2ludHMiLCJpZHgiLCJsaW1pdCIsImxhdHMiLCJtYXAiLCJkIiwiTnVtYmVyIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwiaXNGaW5pdGUiLCJzb3J0IiwibnVtYmVyU29ydCIsImxlbmd0aCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJjbGFtcCIsInZhbCIsImdldFNhbXBsZURhdGEiLCJkYXRhIiwic2FtcGxlU2l6ZSIsImdldFZhbHVlIiwic2FtcGxlU3RlcCIsImZsb29yIiwib3V0cHV0IiwiaSIsInRpbWVUb1VuaXhNaWxsaSIsInZhbHVlIiwiZm9ybWF0IiwibW9tZW50IiwidXRjIiwidmFsdWVPZiIsIkRhdGUiLCJ1bmRlZmluZWQiLCJpc051bWJlciIsImhhc093blByb3BlcnR5Iiwib2JqIiwicHJvcCIsImEiLCJiIiwiZ2V0U29ydGluZ0Z1bmN0aW9uIiwiZmllbGRUeXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwicmVhbCIsImludGVnZXIiLCJ0aW1lc3RhbXAiLCJwcmVjaXNlUm91bmQiLCJudW0iLCJkZWNpbWFscyIsInQiLCJwb3ciLCJyb3VuZCIsInNpZ24iLCJ0b0ZpeGVkIiwicm91bmRUb0ZvdXIiLCJnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcCIsInN0ZXAiLCJpc05hTiIsInN0ZXBTdHIiLCJ0b1N0cmluZyIsInNwbGl0RXhwb25lbnRpYWwiLCJzcGxpdCIsImNvZWZmWmVybyIsImNvZWZmRGVjaW1hbCIsInBhcnNlSW50Iiwic3BsaXRaZXJvIiwibm9ybWFsaXplU2xpZGVyVmFsdWUiLCJtaW5WYWx1ZSIsIm1hcmtzIiwicm91bmRWYWxUb1N0ZXAiLCJkZWNpbWFsIiwic3RlcHMiLCJyZW1haW4iLCJjbG9zZXN0Iiwicm91bmRlZCIsImRlZmF1bHRGb3JtYXR0ZXIiLCJTdHJpbmciLCJmbG9hdEZvcm1hdHRlciIsIkZJRUxEX0RJU1BMQVlfRk9STUFUIiwic3RyaW5nIiwiZGF0ZSIsImdlb2pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2VvYXJyb3ciLCJvYmplY3QiLCJhcnJheSIsInBhcnNlRmllbGRWYWx1ZSIsInR5cGUiLCJhcnJheU1vdmVNdXRhdGUiLCJmcm9tIiwidG8iLCJzcGxpY2UiLCJhcnJheU1vdmUiLCJzbGljZSIsImdldEZvcm1hdHRlciIsImZpZWxkIiwidG9vbHRpcEZvcm1hdCIsIk9iamVjdCIsIlRPT0xUSVBfRk9STUFUUyIsImZpbmQiLCJmIiwiVE9PTFRJUF9LRVkiLCJhcHBseURlZmF1bHRGb3JtYXQiLCJhcHBseUN1c3RvbUZvcm1hdCIsImdldENvbHVtbkZvcm1hdHRlciIsImNvbE1ldGEiLCJkaXNwbGF5Rm9ybWF0IiwiYXBwbHlWYWx1ZU1hcCIsIlRPT0xUSVBfRk9STUFUX1RZUEVTIiwiREVDSU1BTCIsIkRBVEUiLCJEQVRFX1RJTUUiLCJkYXRldGltZUZvcm1hdHRlciIsIlBFUkNFTlRBR0UiLCJERUNJTUFMX0RFQ0lNQUxfRklYRURfMiIsIkJPT0xFQU4iLCJnZXRCb29sZWFuRm9ybWF0dGVyIiwiZm9ybWF0TGFyZ2VOdW1iZXIiLCJuIiwiZm9ybWF0TnVtYmVyIiwidGltZXpvbmUiLCJ0cyIsInR6Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUVBOztBQVNBOztBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0EsTUFBVCxDQUFtQkMsTUFBbkIsRUFBZ0M7QUFDckMsTUFBTUMsT0FBWSxHQUFHLEVBQXJCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLElBQUlDLEdBQUosQ0FBUUgsTUFBUixDQUFsQjtBQUNBRSxFQUFBQSxTQUFT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LE1BQU07QUFBQSxXQUFJLFVBQUE4RixFQUFFO0FBQUEsYUFDVjdGLDJCQUNHQyxHQURILENBQ080RixFQURQLEVBRUdDLEVBRkgsQ0FFTUYsUUFGTixFQUdHN0YsTUFISCxDQUdVQSxNQUhWLENBRFU7QUFBQSxLQUFOO0FBQUEsR0FESyxHQU1YO0FBQ0EsWUFBQUEsTUFBTTtBQUFBLFdBQUksVUFBQThGLEVBQUU7QUFBQSxhQUFLQSxFQUFFLEdBQUc3RiwyQkFBT0MsR0FBUCxDQUFXNEYsRUFBWCxFQUFlOUYsTUFBZixDQUFzQkEsTUFBdEIsQ0FBSCxHQUFtQyxFQUExQztBQUFBLEtBQU47QUFBQSxHQVBWO0FBUUQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2Zvcm1hdCBhcyBkM0Zvcm1hdH0gZnJvbSAnZDMtZm9ybWF0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBUT09MVElQX0ZPUk1BVFMsXG4gIFRPT0xUSVBfRk9STUFUX1RZUEVTLFxuICBUT09MVElQX0tFWSxcbiAgVG9vbHRpcEZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge01pbGxpc2Vjb25kLCBGaWVsZCwgQ29sTWV0YVByb3BzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtzbmFwVG9NYXJrc30gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRm9ybWF0dGVyID0gKHZhbHVlOiBhbnkpID0+IHN0cmluZztcblxuLyoqXG4gKiBzaW1wbGUgZ2V0dGluZyB1bmlxdWUgdmFsdWVzIG9mIGFuIGFycmF5XG4gKlxuICogQHBhcmFtIHZhbHVlc1xuICogQHJldHVybnMgdW5pcXVlIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFQ+KHZhbHVlczogVFtdKSB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gIHVuaXF1ZVNldC5mb3JFYWNoKHYgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodikpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh2KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdExuZ0JvdW5kcyhcbiAgcG9pbnRzOiBudW1iZXJbXVtdLFxuICBpZHg6IG51bWJlcixcbiAgbGltaXQ6IFtudW1iZXIsIG51bWJlcl1cbik6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3QgbGF0cyA9IHBvaW50c1xuICAgIC5tYXAoZCA9PiBOdW1iZXIoQXJyYXkuaXNBcnJheShkKSkgJiYgZFtpZHhdKVxuICAgIC5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKVxuICAgIC5zb3J0KG51bWJlclNvcnQpO1xuXG4gIGlmICghbGF0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGNsYW1wIHRvIGxpbWl0XG4gIHJldHVybiBbTWF0aC5tYXgobGF0c1swXSwgbGltaXRbMF0pLCBNYXRoLm1pbihsYXRzW2xhdHMubGVuZ3RoIC0gMV0sIGxpbWl0WzFdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChbbWluLCBtYXhdOiBbbnVtYmVyLCBudW1iZXJdLCB2YWw6IG51bWJlciA9IDApOiBudW1iZXIge1xuICByZXR1cm4gdmFsIDw9IG1pbiA/IG1pbiA6IHZhbCA+PSBtYXggPyBtYXggOiB2YWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYW1wbGVEYXRhKGRhdGEsIHNhbXBsZVNpemUgPSA1MDAsIGdldFZhbHVlID0gZCA9PiBkKSB7XG4gIGNvbnN0IHNhbXBsZVN0ZXAgPSBNYXRoLm1heChNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gc2FtcGxlU2l6ZSksIDEpO1xuICBjb25zdCBvdXRwdXQ6IGFueVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gc2FtcGxlU3RlcCkge1xuICAgIG91dHB1dC5wdXNoKGdldFZhbHVlKGRhdGFbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ29udmVydCBkaWZmZXJlbnQgdGltZSBmb3JtYXQgdG8gdW5peCBtaWxsaXNlY29uZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVUb1VuaXhNaWxsaSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBNaWxsaXNlY29uZCB8IG51bGwge1xuICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbW9tZW50LnV0Yyh2YWx1ZSwgZm9ybWF0KS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZm9ybWF0ID09PSAneCcgPyB2YWx1ZSAqIDEwMDAgOiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogd2hldGhlciBudWxsIG9yIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90TnVsbG9yVW5kZWZpbmVkPFQgZXh0ZW5kcyBOb25OdWxsYWJsZTxhbnk+PihkOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGQgaXMgVCB7XG4gIHJldHVybiBkICE9PSB1bmRlZmluZWQgJiYgZCAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGQgaXMgYSBudW1iZXIsIHRoaXMgZmlsdGVyZWQgb3V0IE5hTiBhcyB3ZWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihkOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShkKTtcbn1cblxuLyoqXG4gKiB3aGV0aGVyIG9iamVjdCBoYXMgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB5ZXMgb3Igbm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc093blByb3BlcnR5PFggZXh0ZW5kcyB7fSwgWSBleHRlbmRzIFByb3BlcnR5S2V5PihcbiAgb2JqOiBYLFxuICBwcm9wOiBZXG4pOiBvYmogaXMgWCAmIFJlY29yZDxZLCB1bmtub3duPiB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkocHJvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJTb3J0KGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgLSBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGluZ0Z1bmN0aW9uKGZpZWxkVHlwZTogc3RyaW5nKTogdHlwZW9mIG51bWJlclNvcnQgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICByZXR1cm4gbnVtYmVyU29ydDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIHJvdW5kIG51bWJlciB3aXRoIGV4YWN0IG51bWJlciBvZiBkZWNpbWFsc1xuICogcmV0dXJuIGFzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVjaXNlUm91bmQobnVtOiBudW1iZXIsIGRlY2ltYWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB0ID0gTWF0aC5wb3coMTAsIGRlY2ltYWxzKTtcbiAgcmV0dXJuIChcbiAgICBNYXRoLnJvdW5kKFxuICAgICAgbnVtICogdCArIChkZWNpbWFscyA+IDAgPyAxIDogMCkgKiAoTWF0aC5zaWduKG51bSkgKiAoMTAgLyBNYXRoLnBvdygxMDAsIGRlY2ltYWxzKSkpXG4gICAgKSAvIHRcbiAgKS50b0ZpeGVkKGRlY2ltYWxzKTtcbn1cblxuLyoqXG4gKiByb3VuZCBhIGdpdmluZyBudW1iZXIgYXQgbW9zdCA0IGRlY2ltYWwgcGxhY2VzXG4gKiBlLmcuIDEwIC0+IDEwLCAxLjEyMzQ1IC0+IDEuMjM0NSwgMi4wIC0+IDJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVG9Gb3VyKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gTnVtYmVyKGAke01hdGgucm91bmQoYCR7bnVtfWUrNGApfWUtNGApO1xufVxuLyoqXG4gKiBnZXQgbnVtYmVyIG9mIGRlY2ltYWxzIHRvIHJvdW5kIHRvIGZvciBzbGlkZXIgZnJvbSBzdGVwXG4gKiBAcGFyYW0gc3RlcFxuICogQHJldHVybnMtIG51bWJlciBvZiBkZWNpbWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcChzdGVwOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoaXNOYU4oc3RlcCkpIHtcbiAgICBhc3NlcnQoJ3N0ZXAgaXMgbm90IGEgbnVtYmVyJyk7XG4gICAgYXNzZXJ0KHN0ZXApO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0ciA9IHN0ZXAudG9TdHJpbmcoKTtcblxuICAvLyBpbiBjYXNlIHRoZSBzdGVwIGlzIGEgdmVyeSBzbWFsbCBudW1iZXIgZS5nLiAxZS03LCByZXR1cm4gZGVjaW1hbCBlLmcuIDcgZGlyZWN0bHlcbiAgY29uc3Qgc3BsaXRFeHBvbmVudGlhbCA9IHN0ZXBTdHIuc3BsaXQoJ2UtJyk7XG4gIGlmIChzcGxpdEV4cG9uZW50aWFsLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IGNvZWZmWmVybyA9IHNwbGl0RXhwb25lbnRpYWxbMF0uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBjb2VmZkRlY2ltYWwgPSBjb2VmZlplcm8ubGVuZ3RoID09PSAxID8gMCA6IGNvZWZmWmVyb1sxXS5sZW5ndGg7XG4gICAgcmV0dXJuIHBhcnNlSW50KHNwbGl0RXhwb25lbnRpYWxbMV0sIDEwKSArIGNvZWZmRGVjaW1hbDtcbiAgfVxuXG4gIGNvbnN0IHNwbGl0WmVybyA9IHN0ZXBTdHIuc3BsaXQoJy4nKTtcbiAgaWYgKHNwbGl0WmVyby5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3BsaXRaZXJvWzFdLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBJZiBtYXJrcyBpcyBwcm92aWRlZCwgc25hcCB0byBtYXJrcywgaWYgbm90IG5vcm1hbGl6ZSB0byBzdGVwXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gbWluVmFsdWVcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcGFyYW0gbWFya3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNsaWRlclZhbHVlKFxuICB2YWw6IG51bWJlcixcbiAgbWluVmFsdWU6IG51bWJlcixcbiAgc3RlcDogbnVtYmVyLFxuICBtYXJrcz86IG51bWJlcltdXG4pOiBudW1iZXIge1xuICBpZiAobWFya3MgJiYgbWFya3MubGVuZ3RoKSB7XG4gICAgLy8gVXNlIGluIHNsaWRlciwgZ2l2ZW4gYSBudW1iZXIgYW5kIGFuIGFycmF5IG9mIG51bWJlcnMsIHJldHVybiB0aGUgbmVhcnMgbnVtYmVyIGZyb20gdGhlIGFycmF5XG4gICAgcmV0dXJuIHNuYXBUb01hcmtzKHZhbCwgbWFya3MpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlLCBzdGVwLCB2YWwpO1xufVxuXG4vKipcbiAqIHJvdW5kIHRoZSB2YWx1ZSB0byBzdGVwIGZvciB0aGUgc2xpZGVyXG4gKiBAcGFyYW0gbWluVmFsdWVcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcGFyYW0gdmFsXG4gKiBAcmV0dXJucyAtIHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFZhbFRvU3RlcChtaW5WYWx1ZTogbnVtYmVyLCBzdGVwOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFpc051bWJlcihzdGVwKSB8fCAhaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGNvbnN0IGRlY2ltYWwgPSBnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcChzdGVwKTtcbiAgY29uc3Qgc3RlcHMgPSBNYXRoLmZsb29yKCh2YWwgLSBtaW5WYWx1ZSkgLyBzdGVwKTtcbiAgbGV0IHJlbWFpbiA9IHZhbCAtIChzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZSk7XG5cbiAgLy8gaGFzIHRvIHJvdW5kIGJlY2F1c2UgamF2YXNjcmlwdCB0dXJucyAwLjEgaW50byAwLjk5OTk5OTk5OTk5OTk5ODdcbiAgcmVtYWluID0gTnVtYmVyKHByZWNpc2VSb3VuZChyZW1haW4sIDgpKTtcblxuICBsZXQgY2xvc2VzdDogbnVtYmVyO1xuICBpZiAocmVtYWluID09PSAwKSB7XG4gICAgY2xvc2VzdCA9IHZhbDtcbiAgfSBlbHNlIGlmIChyZW1haW4gPCBzdGVwIC8gMikge1xuICAgIGNsb3Nlc3QgPSBzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjbG9zZXN0ID0gKHN0ZXBzICsgMSkgKiBzdGVwICsgbWluVmFsdWU7XG4gIH1cblxuICAvLyBwcmVjaXNlIHJvdW5kIHJldHVybiBhIHN0cmluZyByb3VuZGVkIHRvIHRoZSBkZWZpbmVkIGRlY2ltYWxcbiAgY29uc3Qgcm91bmRlZCA9IHByZWNpc2VSb3VuZChjbG9zZXN0LCBkZWNpbWFsKTtcblxuICByZXR1cm4gTnVtYmVyKHJvdW5kZWQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9ybWF0IGJhc2VkIG9uIGZpZWxkIGFuZCBmb3JtYXQgb3B0aW9uc1xuICogVXNlZCBpbiByZW5kZXIgdG9vbHRpcCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcm1hdHRlcjogRmllbGRGb3JtYXR0ZXIgPSB2ID0+IChub3ROdWxsb3JVbmRlZmluZWQodikgPyBTdHJpbmcodikgOiAnJyk7XG5cbmV4cG9ydCBjb25zdCBmbG9hdEZvcm1hdHRlciA9IHYgPT4gKGlzTnVtYmVyKHYpID8gU3RyaW5nKHJvdW5kVG9Gb3VyKHYpKSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX0RJU1BMQVlfRk9STUFUOiB7XG4gIFtrZXk6IHN0cmluZ106IEZpZWxkRm9ybWF0dGVyO1xufSA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiBkZWZhdWx0Rm9ybWF0dGVyLFxuICBbQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcF06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuaW50ZWdlcl06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMucmVhbF06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuYm9vbGVhbl06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuZGF0ZV06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IGQgPT5cbiAgICB0eXBlb2YgZCA9PT0gJ3N0cmluZydcbiAgICAgID8gZFxuICAgICAgOiBpc1BsYWluT2JqZWN0KGQpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KGQpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoZClcbiAgICAgID8gYFske1N0cmluZyhkKX1dYFxuICAgICAgOiAnJyxcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9hcnJvd106IGQgPT4gZCxcbiAgW0FMTF9GSUVMRF9UWVBFUy5vYmplY3RdOiBKU09OLnN0cmluZ2lmeSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IEpTT04uc3RyaW5naWZ5XG59O1xuXG4vKipcbiAqIFBhcnNlIGZpZWxkIHZhbHVlIGFuZCB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRmllbGRWYWx1ZSA9ICh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIEZJRUxEX0RJU1BMQVlfRk9STUFUW3R5cGVdID8gRklFTERfRElTUExBWV9GT1JNQVRbdHlwZV0odmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbmNvbnN0IGFycmF5TW92ZU11dGF0ZSA9IDxUPihhcnJheTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IHtcbiAgYXJyYXkuc3BsaWNlKHRvIDwgMCA/IGFycmF5Lmxlbmd0aCArIHRvIDogdG8sIDAsIGFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gYXJyYXlcbiAqIEBwYXJhbSBmcm9tXG4gKiBAcGFyYW0gdG9cbiAqL1xuZXhwb3J0IGNvbnN0IGFycmF5TW92ZSA9IDxUPihhcnJheTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBUW10gPT4ge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7XG4gIGFycmF5TW92ZU11dGF0ZShhcnJheSwgZnJvbSwgdG8pO1xuICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9ybWF0IGJhc2VkIG9uIGZpZWxkIGFuZCBmb3JtYXQgb3B0aW9uc1xuICogVXNlZCBpbiByZW5kZXIgdG9vbHRpcCB2YWx1ZVxuICogQHBhcmFtIGZvcm1hdFxuICogQHBhcmFtIGZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZXIoXG4gIGZvcm1hdDogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgZmllbGQ/OiBGaWVsZFxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBmb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0IGFzIFRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGZvcm1hdCwgZmllbGQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Gb3JtYXR0ZXIoY29sTWV0YTogQ29sTWV0YVByb3BzKTogRmllbGRGb3JtYXR0ZXIge1xuICBjb25zdCB7Zm9ybWF0LCBkaXNwbGF5Rm9ybWF0fSA9IGNvbE1ldGE7XG5cbiAgaWYgKCFmb3JtYXQgJiYgIWRpc3BsYXlGb3JtYXQpIHtcbiAgICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbY29sTWV0YS50eXBlXTtcbiAgfVxuICBjb25zdCB0b29sdGlwRm9ybWF0ID0gT2JqZWN0LnZhbHVlcyhUT09MVElQX0ZPUk1BVFMpLmZpbmQoZiA9PiBmW1RPT0xUSVBfS0VZXSA9PT0gZGlzcGxheUZvcm1hdCk7XG5cbiAgaWYgKHRvb2x0aXBGb3JtYXQpIHtcbiAgICByZXR1cm4gYXBwbHlEZWZhdWx0Rm9ybWF0KHRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnc3RyaW5nJyAmJiBjb2xNZXRhKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGRpc3BsYXlGb3JtYXQsIGNvbE1ldGEpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhcHBseVZhbHVlTWFwKGRpc3BsYXlGb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZhbHVlTWFwKGZvcm1hdCkge1xuICByZXR1cm4gdiA9PiBmb3JtYXRbdl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdDogVG9vbHRpcEZvcm1hdCk6ICh2OiBhbnkpID0+IHN0cmluZyB7XG4gIGlmICghdG9vbHRpcEZvcm1hdCB8fCAhdG9vbHRpcEZvcm1hdC5mb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuXG4gIHN3aXRjaCAodG9vbHRpcEZvcm1hdC50eXBlKSB7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMOlxuICAgICAgcmV0dXJuIGQzRm9ybWF0KHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEU6XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUU6XG4gICAgICByZXR1cm4gZGF0ZXRpbWVGb3JtYXR0ZXIobnVsbCkodG9vbHRpcEZvcm1hdC5mb3JtYXQpO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuUEVSQ0VOVEFHRTpcbiAgICAgIHJldHVybiB2ID0+IGAke2QzRm9ybWF0KFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfMi5mb3JtYXQpKHYpfSVgO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBnZXRCb29sZWFuRm9ybWF0dGVyKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5Gb3JtYXR0ZXIoZm9ybWF0OiBzdHJpbmcpOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnMDEnOlxuICAgICAgcmV0dXJuICh2OiBCb29sZWFuKSA9PiAodiA/ICcxJyA6ICcwJyk7XG4gICAgY2FzZSAneW4nOlxuICAgICAgcmV0dXJuICh2OiBCb29sZWFuKSA9PiAodiA/ICd5ZXMnIDogJ25vJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG4vLyBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgY3VzdG9tIHRvb2x0aXAgZm9ybWF0IHZpYSBjb25maWdcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkKTogRmllbGRGb3JtYXR0ZXIge1xuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4gZDNGb3JtYXQoZm9ybWF0KTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBkYXRldGltZUZvcm1hdHRlcihudWxsKShmb3JtYXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdiA9PiB2O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExhcmdlTnVtYmVyKG4pIHtcbiAgLy8gU0ktcHJlZml4IHdpdGggNCBzaWduaWZpY2FudCBkaWdpdHNcbiAgcmV0dXJuIGQzRm9ybWF0KCcuNH5zJykobik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIobjogbnVtYmVyLCB0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gYC0ke2Zvcm1hdE51bWJlcigtbiwgJ2ludGVnZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKG4pfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwICogMTAwMCkge1xuICAgICAgICByZXR1cm4gZDNGb3JtYXQoJywnKShNYXRoLnJvdW5kKG4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXRMYXJnZU51bWJlcihuKTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnbnVtYmVyJyl9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAwMCkge1xuICAgICAgICByZXR1cm4gZDNGb3JtYXQoJy40fnInKShuKTtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLC4yfmYnKShuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXRMYXJnZU51bWJlcihuKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKG4sICdyZWFsJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgZXBvY2ggbWlsbGlzZWNvbmRzIHdpdGggYSBmb3JtYXQgc3RyaW5nXG4gKiBAdHlwZSB0aW1lem9uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWVGb3JtYXR0ZXIoXG4gIHRpbWV6b25lPzogc3RyaW5nIHwgbnVsbFxuKTogKGZvcm1hdD86IHN0cmluZykgPT4gKHRzOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIHJldHVybiB0aW1lem9uZVxuICAgID8gZm9ybWF0ID0+IHRzID0+XG4gICAgICAgIG1vbWVudFxuICAgICAgICAgIC51dGModHMpXG4gICAgICAgICAgLnR6KHRpbWV6b25lKVxuICAgICAgICAgIC5mb3JtYXQoZm9ybWF0KVxuICAgIDogLy8gcmV0dXJuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICdJbnZhbGlkIGRhdGUnIGlmIHRzIGlzIHVuZGVmaW5lZC9udWxsXG4gICAgICBmb3JtYXQgPT4gdHMgPT4gKHRzID8gbW9tZW50LnV0Yyh0cykuZm9ybWF0KGZvcm1hdCkgOiAnJyk7XG59XG4iXX0=
|
package/dist/dataset-utils.d.ts
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
import { ProcessorResult, RGBColor, RowData, Field, FieldPair, TooltipFields, ProtoDataset } from '@kepler.gl/types';
|
2
|
-
import { TooltipFormat } from '@kepler.gl/constants';
|
3
|
-
export declare const datasetColorMaker: Generator<RGBColor, any, unknown>;
|
4
|
-
/**
|
5
|
-
* Choose a field to use as the default color field of a layer.
|
6
|
-
*
|
7
|
-
* The heuristic is:
|
8
|
-
*
|
9
|
-
* First, exclude fields that are on the exclusion list and don't
|
10
|
-
* have names that suggest they contain metrics. Also exclude
|
11
|
-
* field names that are blank.
|
12
|
-
*
|
13
|
-
* Next, look for a field that is of real type and contains one
|
14
|
-
* of the preferred names (in order of the preferred names).
|
15
|
-
*
|
16
|
-
* Next, look for a field that is of integer type and contains
|
17
|
-
* one of the preferred names (in order of the preferred names).
|
18
|
-
*
|
19
|
-
* Next, look for the first field that is of real type (in order
|
20
|
-
* of field index).
|
21
|
-
*
|
22
|
-
* Next, look for the first field that is of integer type (in
|
23
|
-
* order of field index).
|
24
|
-
*
|
25
|
-
* It's possible no field will be chosen (i.e. because all fields
|
26
|
-
* are strings.)
|
27
|
-
*
|
28
|
-
* @param dataset
|
29
|
-
*/
|
30
|
-
export declare function findDefaultColorField({ fields, fieldPairs }: {
|
31
|
-
fields: Field[];
|
32
|
-
fieldPairs: FieldPair[];
|
33
|
-
}): null | Field;
|
34
|
-
export declare const ACCEPTED_ANALYZER_TYPES: any[];
|
35
|
-
/**
|
36
|
-
* Validate input data, adding missing field types, rename duplicate columns
|
37
|
-
*/
|
38
|
-
export declare function validateInputData(data: ProtoDataset['data']): ProcessorResult;
|
39
|
-
/**
|
40
|
-
* Getting sample data for analyzing field type.
|
41
|
-
*/
|
42
|
-
export declare function getSampleForTypeAnalyze({ fields, rows, sampleCount }: {
|
43
|
-
fields: string[];
|
44
|
-
rows: unknown[][];
|
45
|
-
sampleCount?: number;
|
46
|
-
}): RowData;
|
47
|
-
/**
|
48
|
-
* Check if string is a valid Well-known binary (WKB) in HEX format
|
49
|
-
* https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
|
50
|
-
*
|
51
|
-
* @param str input string
|
52
|
-
* @returns true if string is a valid WKB in HEX format
|
53
|
-
*/
|
54
|
-
export declare function isHexWkb(str: string | null): boolean;
|
55
|
-
/**
|
56
|
-
* Analyze field types from data in `string` format, e.g. uploaded csv.
|
57
|
-
* Assign `type`, `fieldIdx` and `format` (timestamp only) to each field
|
58
|
-
*
|
59
|
-
* @param data array of row object
|
60
|
-
* @param fieldOrder array of field names as string
|
61
|
-
* @returns formatted fields
|
62
|
-
* @public
|
63
|
-
* @example
|
64
|
-
*
|
65
|
-
* import {getFieldsFromData} from 'kepler.gl/processors';
|
66
|
-
* const data = [{
|
67
|
-
* time: '2016-09-17 00:09:55',
|
68
|
-
* value: '4',
|
69
|
-
* surge: '1.2',
|
70
|
-
* isTrip: 'true',
|
71
|
-
* zeroOnes: '0'
|
72
|
-
* }, {
|
73
|
-
* time: '2016-09-17 00:30:08',
|
74
|
-
* value: '3',
|
75
|
-
* surge: null,
|
76
|
-
* isTrip: 'false',
|
77
|
-
* zeroOnes: '1'
|
78
|
-
* }, {
|
79
|
-
* time: null,
|
80
|
-
* value: '2',
|
81
|
-
* surge: '1.3',
|
82
|
-
* isTrip: null,
|
83
|
-
* zeroOnes: '1'
|
84
|
-
* }];
|
85
|
-
*
|
86
|
-
* const fieldOrder = ['time', 'value', 'surge', 'isTrip', 'zeroOnes'];
|
87
|
-
* const fields = getFieldsFromData(data, fieldOrder);
|
88
|
-
* // fields = [
|
89
|
-
* // {name: 'time', format: 'YYYY-M-D H:m:s', fieldIdx: 1, type: 'timestamp'},
|
90
|
-
* // {name: 'value', format: '', fieldIdx: 4, type: 'integer'},
|
91
|
-
* // {name: 'surge', format: '', fieldIdx: 5, type: 'real'},
|
92
|
-
* // {name: 'isTrip', format: '', fieldIdx: 6, type: 'boolean'},
|
93
|
-
* // {name: 'zeroOnes', format: '', fieldIdx: 7, type: 'integer'}];
|
94
|
-
*
|
95
|
-
*/
|
96
|
-
export declare function getFieldsFromData(data: RowData, fieldOrder: string[]): Field[];
|
97
|
-
/**
|
98
|
-
* pass in an array of field names, rename duplicated one
|
99
|
-
* and return a map from old field index to new name
|
100
|
-
*
|
101
|
-
* @param fieldOrder
|
102
|
-
* @returns new field name by index
|
103
|
-
*/
|
104
|
-
export declare function renameDuplicateFields(fieldOrder: string[]): {
|
105
|
-
allNames: string[];
|
106
|
-
fieldByIndex: string[];
|
107
|
-
};
|
108
|
-
/**
|
109
|
-
* Convert type-analyzer output to kepler.gl field types
|
110
|
-
*
|
111
|
-
* @param aType
|
112
|
-
* @returns corresponding type in `ALL_FIELD_TYPES`
|
113
|
-
*/
|
114
|
-
export declare function analyzerTypeToFieldType(aType: string): string;
|
115
|
-
export declare function getFieldFormatLabels(fieldType?: string): TooltipFormat[];
|
116
|
-
export declare function getFormatLabels(fields: TooltipFields[], fieldName: string): TooltipFormat[];
|