autoql-fe-utils 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,1843 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/index.ts
30
+ var src_exports = {};
31
+ __export(src_exports, {
32
+ AGG_TYPES: () => AGG_TYPES,
33
+ CHART_TYPES: () => CHART_TYPES,
34
+ DATE_ONLY_CHART_TYPES: () => DATE_ONLY_CHART_TYPES,
35
+ DAYJS_PRECISION_FORMATS: () => DAYJS_PRECISION_FORMATS,
36
+ DEFAULT_AGG_TYPE: () => DEFAULT_AGG_TYPE,
37
+ DEFAULT_DATA_PAGE_SIZE: () => DEFAULT_DATA_PAGE_SIZE,
38
+ DOUBLE_AXIS_CHART_TYPES: () => DOUBLE_AXIS_CHART_TYPES,
39
+ DOW_STYLES: () => DOW_STYLES,
40
+ MAX_DATA_PAGE_SIZE: () => MAX_DATA_PAGE_SIZE,
41
+ MAX_LEGEND_LABELS: () => MAX_LEGEND_LABELS,
42
+ MIN_HISTOGRAM_SAMPLE: () => MIN_HISTOGRAM_SAMPLE,
43
+ MONTH_NAMES: () => MONTH_NAMES,
44
+ NumberColumnTypeDisplayNames: () => NumberColumnTypeDisplayNames,
45
+ NumberColumnTypes: () => NumberColumnTypes,
46
+ PrecisionTypes: () => PrecisionTypes,
47
+ SEASON_NAMES: () => SEASON_NAMES,
48
+ TABLE_TYPES: () => TABLE_TYPES,
49
+ TimestampFormats: () => TimestampFormats,
50
+ WEEKDAY_NAMES_MON: () => WEEKDAY_NAMES_MON,
51
+ WEEKDAY_NAMES_SUN: () => WEEKDAY_NAMES_SUN,
52
+ animateInputText: () => animateInputText,
53
+ authenticationDefault: () => authenticationDefault,
54
+ autoQLConfigDefault: () => autoQLConfigDefault,
55
+ capitalizeFirstChar: () => capitalizeFirstChar,
56
+ currentEventLoopEnd: () => currentEventLoopEnd,
57
+ dataConfigDefault: () => dataConfigDefault,
58
+ dataFormattingDefault: () => dataFormattingDefault,
59
+ dateSortFn: () => dateSortFn,
60
+ dateStringSortFn: () => dateStringSortFn,
61
+ deepEqual: () => deepEqual,
62
+ difference: () => difference,
63
+ formatChartLabel: () => formatChartLabel,
64
+ formatDateStringType: () => formatDateStringType,
65
+ formatDateType: () => formatDateType,
66
+ formatElement: () => formatElement,
67
+ formatEpochDate: () => formatEpochDate,
68
+ formatISODateWithPrecision: () => formatISODateWithPrecision,
69
+ formatStringDate: () => formatStringDate,
70
+ formatStringDateWithPrecision: () => formatStringDateWithPrecision,
71
+ functionsEqual: () => functionsEqual,
72
+ getAuthentication: () => getAuthentication,
73
+ getAutoQLConfig: () => getAutoQLConfig,
74
+ getBBoxFromRef: () => getBBoxFromRef,
75
+ getColumnTypeAmounts: () => getColumnTypeAmounts,
76
+ getCurrencySymbol: () => getCurrencySymbol,
77
+ getDataConfig: () => getDataConfig,
78
+ getDataFormatting: () => getDataFormatting,
79
+ getDateColumnIndex: () => getDateColumnIndex,
80
+ getDayJSObj: () => getDayJSObj,
81
+ getDayjsObjForStringType: () => getDayjsObjForStringType,
82
+ getDefaultDisplayType: () => getDefaultDisplayType,
83
+ getEpochFromDate: () => getEpochFromDate,
84
+ getFirstChartDisplayType: () => getFirstChartDisplayType,
85
+ getGroupBys: () => getGroupBys,
86
+ getGroupBysFromPivotTable: () => getGroupBysFromPivotTable,
87
+ getGroupBysFromTable: () => getGroupBysFromTable,
88
+ getGroupableColumns: () => getGroupableColumns,
89
+ getKeyByValue: () => getKeyByValue,
90
+ getNumberFormatConfig: () => getNumberFormatConfig,
91
+ getNumberOfGroupables: () => getNumberOfGroupables,
92
+ getPadding: () => getPadding,
93
+ getQueryParams: () => getQueryParams,
94
+ getSVGBase64: () => getSVGBase64,
95
+ getStringFromSource: () => getStringFromSource,
96
+ getSupportedDisplayTypes: () => getSupportedDisplayTypes,
97
+ getVisibleColumns: () => getVisibleColumns,
98
+ handleTooltipBoundaryCollision: () => handleTooltipBoundaryCollision,
99
+ hasData: () => hasData,
100
+ hasDateColumn: () => hasDateColumn,
101
+ hasNumberColumn: () => hasNumberColumn,
102
+ hasStringColumn: () => hasStringColumn,
103
+ invertArray: () => invertArray,
104
+ isAggregation: () => isAggregation,
105
+ isChartType: () => isChartType,
106
+ isColumnDateType: () => isColumnDateType,
107
+ isColumnNumberType: () => isColumnNumberType,
108
+ isColumnStringType: () => isColumnStringType,
109
+ isDisplayTypeValid: () => isDisplayTypeValid,
110
+ isListQuery: () => isListQuery,
111
+ isNumber: () => isNumber,
112
+ isObject: () => isObject,
113
+ isSingleValueResponse: () => isSingleValueResponse,
114
+ isTableType: () => isTableType,
115
+ makeEmptyArray: () => makeEmptyArray,
116
+ mergeSources: () => mergeSources,
117
+ nameValueObject: () => nameValueObject,
118
+ onlyUnique: () => onlyUnique,
119
+ removeFromDOM: () => removeFromDOM,
120
+ rotateArray: () => rotateArray,
121
+ setCaretPosition: () => setCaretPosition,
122
+ shouldPlotMultiSeries: () => shouldPlotMultiSeries,
123
+ sortDataByDate: () => sortDataByDate,
124
+ supports2DCharts: () => supports2DCharts,
125
+ supportsDatePivotTable: () => supportsDatePivotTable,
126
+ supportsPieChart: () => supportsPieChart,
127
+ supportsRegularPivotTable: () => supportsRegularPivotTable,
128
+ svgToPng: () => svgToPng
129
+ });
130
+ module.exports = __toCommonJS(src_exports);
131
+
132
+ // src/HelperFns/objectHelpers.ts
133
+ var nameValueObject = (name, value) => {
134
+ return {
135
+ name,
136
+ value
137
+ };
138
+ };
139
+ var getKeyByValue = (object, value) => {
140
+ return Object.keys(object).find((key) => object[key] === value);
141
+ };
142
+
143
+ // src/HelperFns/columnHelpers.ts
144
+ var isColumnNumberType = (col) => {
145
+ const type = col == null ? void 0 : col.type;
146
+ return type === "DOLLAR_AMT" || type === "QUANTITY" || type === "PERCENT" || type === "RATIO";
147
+ };
148
+ var isColumnStringType = (col) => {
149
+ const type = col == null ? void 0 : col.type;
150
+ return type === "STRING" || type === "DATE_STRING" || type === "DATE" || type === "UNKNOWN";
151
+ };
152
+ var isColumnDateType = (col) => {
153
+ try {
154
+ const isDateType = col.type === "DATE" || col.type === "DATE_STRING";
155
+ return isDateType;
156
+ } catch (error) {
157
+ return false;
158
+ }
159
+ };
160
+ var hasNumberColumn = (columns) => {
161
+ var _a;
162
+ const hasNumberColumn2 = !!((_a = columns.filter((col) => isColumnNumberType(col))) == null ? void 0 : _a.length);
163
+ return hasNumberColumn2;
164
+ };
165
+ var hasStringColumn = (columns) => {
166
+ var _a;
167
+ const hasStringColumn2 = !!((_a = columns.filter((col) => isColumnStringType(col))) == null ? void 0 : _a.length);
168
+ return hasStringColumn2;
169
+ };
170
+ var hasDateColumn = (columns) => {
171
+ var _a;
172
+ const hasDateColumn2 = !!((_a = columns.filter((col) => isColumnDateType(col))) == null ? void 0 : _a.length);
173
+ return hasDateColumn2;
174
+ };
175
+ var getVisibleColumns = (columns) => {
176
+ return columns == null ? void 0 : columns.filter((col) => col == null ? void 0 : col.is_visible);
177
+ };
178
+ var getGroupableColumns = (columns) => {
179
+ const groupableColumns = [];
180
+ if (columns) {
181
+ columns.forEach((col, index) => {
182
+ if (col.groupable) {
183
+ groupableColumns.push(index);
184
+ }
185
+ });
186
+ }
187
+ return groupableColumns;
188
+ };
189
+ var getGroupBys = (row, columns) => {
190
+ if (!(columns == null ? void 0 : columns.length)) {
191
+ return void 0;
192
+ }
193
+ const groupableColumns = getGroupableColumns(columns);
194
+ const numGroupables = groupableColumns.length;
195
+ if (!numGroupables) {
196
+ return { groupBys: void 0, supportedByAPI: false };
197
+ }
198
+ const groupBys = [];
199
+ groupableColumns.forEach((colIndex) => {
200
+ const groupByName = columns[colIndex].name;
201
+ const groupByValue = `${row[colIndex]}`;
202
+ groupBys.push(nameValueObject(groupByName, groupByValue));
203
+ });
204
+ return { groupBys, supportedByAPI: true };
205
+ };
206
+ var getGroupBysFromTable = (cell, tableColumns) => {
207
+ if (!cell || !tableColumns) {
208
+ return void 0;
209
+ }
210
+ const groupableColumns = getGroupableColumns(tableColumns);
211
+ const numGroupables = groupableColumns.length;
212
+ if (!numGroupables) {
213
+ return void 0;
214
+ }
215
+ const rowData = cell.getData();
216
+ const groupByArray = [];
217
+ groupableColumns.forEach((colIndex) => {
218
+ const groupByName = tableColumns[colIndex].name;
219
+ const groupByValue = `${rowData[colIndex]}`;
220
+ groupByArray.push(nameValueObject(groupByName, groupByValue));
221
+ });
222
+ return groupByArray;
223
+ };
224
+ var getGroupBysFromPivotTable = ({
225
+ cell,
226
+ rowHeaders,
227
+ columnHeaders,
228
+ rowHeaderDefinition,
229
+ columnHeaderDefinition
230
+ }) => {
231
+ var _a;
232
+ try {
233
+ const columnName = columnHeaderDefinition.name;
234
+ const columnField = Number(cell.getField()) - 1;
235
+ const columnValue = getKeyByValue(columnHeaders, columnField);
236
+ const rowName = rowHeaderDefinition.name;
237
+ const rowIndex = ((_a = cell == null ? void 0 : cell.getRow()) == null ? void 0 : _a.getPosition()) - 1;
238
+ const rowValue = getKeyByValue(rowHeaders, rowIndex);
239
+ if (columnName && rowName && columnValue !== void 0 && rowValue !== void 0) {
240
+ return [
241
+ {
242
+ name: columnName,
243
+ value: `${columnValue}`
244
+ },
245
+ {
246
+ name: rowName,
247
+ value: `${rowValue}`
248
+ }
249
+ ];
250
+ }
251
+ } catch (error) {
252
+ console.error(error);
253
+ }
254
+ return void 0;
255
+ };
256
+ var isAggregation = (columns) => {
257
+ try {
258
+ let isAgg = false;
259
+ if (columns) {
260
+ isAgg = !!columns.find((col) => col.groupable);
261
+ }
262
+ return isAgg;
263
+ } catch (error) {
264
+ console.error(error);
265
+ return false;
266
+ }
267
+ };
268
+ var getColumnTypeAmounts = (columns) => {
269
+ let amountOfStringColumns = 0;
270
+ let amountOfNumberColumns = 0;
271
+ columns.forEach((col) => {
272
+ if (isColumnNumberType(col) && col.is_visible) {
273
+ amountOfNumberColumns += 1;
274
+ } else if (isColumnStringType(col) && col.is_visible) {
275
+ amountOfStringColumns += 1;
276
+ }
277
+ });
278
+ return { amountOfNumberColumns, amountOfStringColumns };
279
+ };
280
+ var getDateColumnIndex = (columns) => {
281
+ return columns.findIndex((col) => col.is_visible && (col.type === "DATE" || col.type === "DATE_STRING"));
282
+ };
283
+ var getNumberOfGroupables = (columns) => {
284
+ let numberOfGroupables = 0;
285
+ if (columns) {
286
+ columns.forEach((col) => {
287
+ if (col.groupable) {
288
+ numberOfGroupables += 1;
289
+ }
290
+ });
291
+ }
292
+ return numberOfGroupables;
293
+ };
294
+ var isListQuery = (columns) => {
295
+ return getNumberOfGroupables(columns) === 0;
296
+ };
297
+
298
+ // src/dayjsWithPlugins.ts
299
+ var import_dayjs = __toESM(require("dayjs"));
300
+ var import_advancedFormat = __toESM(require("dayjs/plugin/advancedFormat"));
301
+ var import_localizedFormat = __toESM(require("dayjs/plugin/localizedFormat"));
302
+ var import_utc = __toESM(require("dayjs/plugin/utc"));
303
+ var import_timezone = __toESM(require("dayjs/plugin/timezone"));
304
+ var import_isBetween = __toESM(require("dayjs/plugin/isBetween"));
305
+ var import_weekOfYear = __toESM(require("dayjs/plugin/weekOfYear"));
306
+ var import_quarterOfYear = __toESM(require("dayjs/plugin/quarterOfYear"));
307
+ var import_customParseFormat = __toESM(require("dayjs/plugin/customParseFormat"));
308
+ var import_isSameOrBefore = __toESM(require("dayjs/plugin/isSameOrBefore"));
309
+ var import_isToday = __toESM(require("dayjs/plugin/isToday"));
310
+ import_dayjs.default.extend(import_utc.default);
311
+ import_dayjs.default.extend(import_isToday.default);
312
+ import_dayjs.default.extend(import_timezone.default);
313
+ import_dayjs.default.extend(import_isBetween.default);
314
+ import_dayjs.default.extend(import_weekOfYear.default);
315
+ import_dayjs.default.extend(import_quarterOfYear.default);
316
+ import_dayjs.default.extend(import_advancedFormat.default);
317
+ import_dayjs.default.extend(import_isSameOrBefore.default);
318
+ import_dayjs.default.extend(import_localizedFormat.default);
319
+ import_dayjs.default.extend(import_customParseFormat.default);
320
+ (function applyLocale() {
321
+ const specificLanguageCode = window.navigator.language || "en";
322
+ const genericLanguageCode = specificLanguageCode.split("-")[0];
323
+ try {
324
+ require(`dayjs/locale/${specificLanguageCode}.js`);
325
+ import_dayjs.default.locale(specificLanguageCode);
326
+ } catch (error) {
327
+ try {
328
+ require(`dayjs/locale/${genericLanguageCode}.js`);
329
+ import_dayjs.default.locale(genericLanguageCode);
330
+ } catch (error2) {
331
+ }
332
+ }
333
+ })();
334
+ var dayjsWithPlugins_default = import_dayjs.default;
335
+
336
+ // src/HelperFns/stringHelpers.ts
337
+ var capitalizeFirstChar = (string) => {
338
+ let capitalized = string;
339
+ try {
340
+ capitalized = string.charAt(0).toUpperCase() + string.slice(1);
341
+ } catch (error) {
342
+ console.error(error);
343
+ }
344
+ return capitalized;
345
+ };
346
+ var isNumber = (str) => {
347
+ return /^\d+$/.test(str);
348
+ };
349
+
350
+ // src/Constants/constants.ts
351
+ var TABLE_TYPES = [
352
+ "pivot_table",
353
+ "pivot_column",
354
+ "date_pivot",
355
+ "table",
356
+ "compare_table",
357
+ "compare_table_budget"
358
+ ];
359
+ var CHART_TYPES = [
360
+ "bar",
361
+ "bubble",
362
+ "chart",
363
+ "column",
364
+ "heatmap",
365
+ "line",
366
+ "pie",
367
+ "stacked_bar",
368
+ "stacked_column",
369
+ "stacked_line",
370
+ "column_line",
371
+ "histogram",
372
+ "scatterplot"
373
+ ];
374
+ var DATE_ONLY_CHART_TYPES = ["line", "stacked_line"];
375
+ var DOUBLE_AXIS_CHART_TYPES = ["column_line"];
376
+ var MONTH_NAMES = [
377
+ "January",
378
+ "February",
379
+ "March",
380
+ "April",
381
+ "May",
382
+ "June",
383
+ "July",
384
+ "August",
385
+ "September",
386
+ "October",
387
+ "November",
388
+ "December"
389
+ ];
390
+ var DEFAULT_DATA_PAGE_SIZE = 500;
391
+ var MAX_DATA_PAGE_SIZE = 5e3;
392
+ var WEEKDAY_NAMES_MON = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
393
+ var WEEKDAY_NAMES_SUN = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
394
+ var DOW_STYLES = ["NUM_1_MON", "NUM_1_SUN", "NUM_0_MON", "NUM_0_SUN", "ALPHA_MON", "ALPHA_SUN"];
395
+ var SEASON_NAMES = ["SP", "SU", "FA", "HO"];
396
+ var DAYJS_PRECISION_FORMATS = {
397
+ DAY: "ll",
398
+ MONTH: "MMMM YYYY",
399
+ YEAR: "YYYY",
400
+ DATE_HOUR: "ll h:00A",
401
+ DATE_MINUTE: "ll h:mmA"
402
+ };
403
+ var DEFAULT_AGG_TYPE = "sum";
404
+ var AGG_TYPES = [
405
+ {
406
+ displayName: "Sum",
407
+ value: "sum",
408
+ unit: "inherit",
409
+ tooltip: "<strong>Sum:</strong> Values that have the same chart axis label will be added up."
410
+ },
411
+ {
412
+ displayName: "Avg",
413
+ value: "avg",
414
+ unit: "inherit",
415
+ tooltip: "<strong>Average:</strong> Values that have the same chart axis label will be averaged."
416
+ },
417
+ // {
418
+ // displayName: 'Median',
419
+ // value: 'median',
420
+ // unit: 'inherit',
421
+ // tooltip: 'The median (middle) value will be shown for all data points with same label.',
422
+ // },
423
+ // {
424
+ // displayName: 'Minimum',
425
+ // value: 'min',
426
+ // unit: 'inherit',
427
+ // tooltip: 'The smallest value will be shown for all data points with same label.',
428
+ // },
429
+ // {
430
+ // displayName: 'Maximum',
431
+ // value: 'max',
432
+ // unit: 'inherit',
433
+ // tooltip: 'The largest value will be shown for all data points with same label.',
434
+ // },
435
+ // {
436
+ // displayName: 'Standard deviation',
437
+ // value: 'deviation',
438
+ // unit: 'none',
439
+ // tooltip: 'The standard deviation will be shown for all data points with the same label.',
440
+ // },
441
+ // {
442
+ // displayName: 'Variance',
443
+ // value: 'variance',
444
+ // unit: 'none',
445
+ // tooltip: 'The variance will be shown for all data points with the same label.',
446
+ // },
447
+ {
448
+ displayName: "Count",
449
+ value: "count",
450
+ unit: "none",
451
+ tooltip: "<strong>Count:</strong> The total number of non-blank values will be shown for all data points with the same label."
452
+ }
453
+ // {
454
+ // displayName: 'Distinct Count',
455
+ // value: 'count-distinct',
456
+ // unit: 'none',
457
+ // },
458
+ ];
459
+ var MAX_LEGEND_LABELS = 22;
460
+ var MIN_HISTOGRAM_SAMPLE = 20;
461
+
462
+ // src/Constants/enums.ts
463
+ var TimestampFormats = /* @__PURE__ */ ((TimestampFormats2) => {
464
+ TimestampFormats2["epoch"] = "EPOCH";
465
+ TimestampFormats2["iso8601"] = "ISO8601";
466
+ return TimestampFormats2;
467
+ })(TimestampFormats || {});
468
+ var PrecisionTypes = /* @__PURE__ */ ((PrecisionTypes2) => {
469
+ PrecisionTypes2["DAY"] = "DAY";
470
+ PrecisionTypes2["MONTH"] = "MONTH";
471
+ PrecisionTypes2["YEAR"] = "YEAR";
472
+ PrecisionTypes2["WEEK"] = "WEEK";
473
+ PrecisionTypes2["QUARTER"] = "QUARTER";
474
+ PrecisionTypes2["DATE_HOUR"] = "DATE_HOUR";
475
+ PrecisionTypes2["DATE_MINUTE"] = "DATE_MINUTE";
476
+ PrecisionTypes2["HOUR"] = "HOUR";
477
+ PrecisionTypes2["MINUTE"] = "MINUTE";
478
+ return PrecisionTypes2;
479
+ })(PrecisionTypes || {});
480
+ var NumberColumnTypes = /* @__PURE__ */ ((NumberColumnTypes2) => {
481
+ NumberColumnTypes2["CURRENCY"] = "DOLLAR_AMT";
482
+ NumberColumnTypes2["QUANTITY"] = "QUANTITY";
483
+ NumberColumnTypes2["RATIO"] = "RATIO";
484
+ NumberColumnTypes2["PERCENT"] = "PERCENT";
485
+ return NumberColumnTypes2;
486
+ })(NumberColumnTypes || {});
487
+ var NumberColumnTypeDisplayNames = /* @__PURE__ */ ((NumberColumnTypeDisplayNames2) => {
488
+ NumberColumnTypeDisplayNames2["DOLLAR_AMT"] = "Currency";
489
+ NumberColumnTypeDisplayNames2["QUANTITY"] = "Quantity";
490
+ NumberColumnTypeDisplayNames2["RATIO"] = "Ratio";
491
+ NumberColumnTypeDisplayNames2["PERCENT"] = "Percent";
492
+ return NumberColumnTypeDisplayNames2;
493
+ })(NumberColumnTypeDisplayNames || {});
494
+
495
+ // src/Constants/defaults.ts
496
+ var authenticationDefault = {
497
+ token: void 0,
498
+ apiKey: void 0,
499
+ domain: void 0,
500
+ dprKey: void 0,
501
+ dprDomain: void 0
502
+ };
503
+ var dataFormattingDefault = {
504
+ timestampFormat: "ISO8601" /* iso8601 */,
505
+ currencyCode: "USD",
506
+ languageCode: "en-US",
507
+ currencyDecimals: 2,
508
+ quantityDecimals: 2,
509
+ ratioDecimals: 4,
510
+ comparisonDisplay: "PERCENT",
511
+ monthYearFormat: "MMMM YYYY",
512
+ dayMonthYearFormat: "ll"
513
+ };
514
+ var autoQLConfigDefault = {
515
+ debug: false,
516
+ test: false,
517
+ enableAutocomplete: true,
518
+ enableQueryInterpretation: true,
519
+ enableQueryValidation: true,
520
+ enableQuerySuggestions: true,
521
+ enableColumnVisibilityManager: true,
522
+ enableDrilldowns: true,
523
+ enableNotifications: false,
524
+ enableCSVDownload: true,
525
+ enableReportProblem: true
526
+ };
527
+ var dataConfigDefault = {
528
+ stringColumnIndices: [],
529
+ numberColumnIndices: [],
530
+ stringColumnIndex: 0,
531
+ legendColumnIndex: void 0,
532
+ numberColumnIndex: 1
533
+ };
534
+ var getAuthentication = (prop = {}) => {
535
+ return {
536
+ ...authenticationDefault,
537
+ ...prop
538
+ };
539
+ };
540
+ var getDataFormatting = (prop = {}) => {
541
+ return {
542
+ ...dataFormattingDefault,
543
+ ...prop
544
+ };
545
+ };
546
+ var getAutoQLConfig = (prop = {}) => {
547
+ return {
548
+ ...autoQLConfigDefault,
549
+ ...prop
550
+ };
551
+ };
552
+ var getDataConfig = (prop = {}) => {
553
+ return {
554
+ ...dataConfigDefault,
555
+ ...prop
556
+ };
557
+ };
558
+
559
+ // src/HelperFns/dataFormattingHelpers.ts
560
+ var formatStringDateWithPrecision = (value, col) => {
561
+ if (!value) {
562
+ return void 0;
563
+ }
564
+ let formattedValue = value;
565
+ try {
566
+ switch (col.precision) {
567
+ case "DOW": {
568
+ formattedValue = formatDOW(value, col);
569
+ break;
570
+ }
571
+ case "HOUR": {
572
+ const dayjsTime = dayjsWithPlugins_default.utc(value, "THH:mm:ss.SSSZ").utc();
573
+ if (dayjsTime.isValid()) {
574
+ formattedValue = dayjsTime.format("h:00A");
575
+ }
576
+ break;
577
+ }
578
+ case "MINUTE": {
579
+ const dayjsTime = dayjsWithPlugins_default.utc(value, "THH:mm:ss.SSSZ").utc();
580
+ if (dayjsTime.isValid()) {
581
+ formattedValue = dayjsTime.format("h:mmA");
582
+ }
583
+ break;
584
+ }
585
+ case "MONTH": {
586
+ formattedValue = value;
587
+ break;
588
+ }
589
+ default: {
590
+ formattedValue = value;
591
+ break;
592
+ }
593
+ }
594
+ return formattedValue;
595
+ } catch (error) {
596
+ console.error(error);
597
+ return value;
598
+ }
599
+ };
600
+ var formatStringDate = (value, config = dataFormattingDefault) => {
601
+ var _a;
602
+ if (!value) {
603
+ return void 0;
604
+ }
605
+ if (value && typeof value === "string") {
606
+ const dateArray = value.split("-");
607
+ const year = dateArray == null ? void 0 : dateArray[0];
608
+ const day = dateArray == null ? void 0 : dateArray[2];
609
+ let month;
610
+ let week;
611
+ if ((_a = dateArray == null ? void 0 : dateArray[1]) == null ? void 0 : _a.includes("W")) {
612
+ week = dateArray == null ? void 0 : dateArray[1];
613
+ } else {
614
+ month = dateArray == null ? void 0 : dateArray[1];
615
+ }
616
+ const { monthYearFormat, dayMonthYearFormat } = getDataFormatting(config);
617
+ const dayJSObj = dayjsWithPlugins_default.utc(value).utc();
618
+ if (!dayJSObj.isValid()) {
619
+ return value;
620
+ }
621
+ let date = value;
622
+ if (day) {
623
+ date = dayJSObj.format(dayMonthYearFormat);
624
+ } else if (month) {
625
+ date = dayJSObj.format(monthYearFormat);
626
+ } else if (week) {
627
+ } else if (year) {
628
+ date = year;
629
+ }
630
+ return date;
631
+ }
632
+ return value;
633
+ };
634
+ var formatDateType = (element, column, config = dataFormattingDefault) => {
635
+ if (isNumber(element)) {
636
+ return formatEpochDate(element, column, config);
637
+ }
638
+ return formatISODateWithPrecision(element, column, config);
639
+ };
640
+ var formatDateStringType = (element, column, config = dataFormattingDefault) => {
641
+ if (!column) {
642
+ return element;
643
+ }
644
+ if (column.precision) {
645
+ return formatStringDateWithPrecision(element, column);
646
+ }
647
+ return formatStringDate(element, config);
648
+ };
649
+ var formatISODateWithPrecision = (value, col, config = dataFormattingDefault) => {
650
+ if (!value) {
651
+ return void 0;
652
+ }
653
+ if (!col) {
654
+ return value;
655
+ }
656
+ const precision = col.precision;
657
+ const { dayMonthYearFormat, monthYearFormat } = getDataFormatting(config);
658
+ const dateDayJS = dayjsWithPlugins_default.utc(value).utc();
659
+ if (!dateDayJS.isValid()) {
660
+ return value;
661
+ }
662
+ let date = dateDayJS.format(dayMonthYearFormat);
663
+ try {
664
+ switch (precision) {
665
+ case "DAY" /* DAY */: {
666
+ break;
667
+ }
668
+ case "WEEK" /* WEEK */: {
669
+ const dateJSStart = dateDayJS.startOf("week").format("MMM D");
670
+ const dateJSEnd = dateDayJS.endOf("week").format("MMM D");
671
+ const week = dateDayJS.week();
672
+ const year = dateDayJS.format("YYYY");
673
+ date = `${dateJSStart} - ${dateJSEnd}, ${year} (Week ${week})`;
674
+ break;
675
+ }
676
+ case "MONTH" /* MONTH */: {
677
+ date = dateDayJS.format(monthYearFormat);
678
+ break;
679
+ }
680
+ case "QUARTER" /* QUARTER */: {
681
+ const quarter = dateDayJS.quarter();
682
+ const year = dateDayJS.format("YYYY");
683
+ date = `${year}-Q${quarter}`;
684
+ break;
685
+ }
686
+ case "YEAR" /* YEAR */: {
687
+ date = dateDayJS.format("YYYY");
688
+ break;
689
+ }
690
+ case "DATE_HOUR" /* DATE_HOUR */: {
691
+ date = dateDayJS.format(`${dayMonthYearFormat} h:00A`);
692
+ break;
693
+ }
694
+ case "DATE_MINUTE" /* DATE_MINUTE */: {
695
+ date = dateDayJS.format(`${dayMonthYearFormat} h:mmA`);
696
+ break;
697
+ }
698
+ default: {
699
+ break;
700
+ }
701
+ }
702
+ return date;
703
+ } catch (error) {
704
+ console.error(error);
705
+ }
706
+ };
707
+ var formatEpochDate = (value, col, config = dataFormattingDefault) => {
708
+ if (!value) {
709
+ return void 0;
710
+ }
711
+ if (!col) {
712
+ return value;
713
+ }
714
+ try {
715
+ const { monthYearFormat, dayMonthYearFormat } = getDataFormatting(config);
716
+ const year = "YYYY";
717
+ const monthYear = monthYearFormat;
718
+ const dayMonthYear = dayMonthYearFormat;
719
+ const title = col.title;
720
+ let dayJSObj;
721
+ if (isNaN(parseFloat(value))) {
722
+ dayJSObj = dayjsWithPlugins_default.utc(value).utc();
723
+ } else {
724
+ dayJSObj = dayjsWithPlugins_default.unix(value).utc();
725
+ }
726
+ if (!dayJSObj.isValid()) {
727
+ return value;
728
+ }
729
+ let date = dayJSObj.format(dayMonthYear);
730
+ if (isNaN(parseFloat(value))) {
731
+ if (title && title.toLowerCase().includes("year")) {
732
+ date = dayJSObj.format(year);
733
+ } else if (title && title.toLowerCase().includes("month")) {
734
+ date = dayJSObj.format(monthYear);
735
+ }
736
+ date = dayJSObj.format(dayMonthYear);
737
+ } else if (title && title.toLowerCase().includes("year")) {
738
+ date = dayJSObj.format(year);
739
+ } else if (title && title.toLowerCase().includes("month")) {
740
+ date = dayJSObj.format(monthYear);
741
+ }
742
+ return date;
743
+ } catch (error) {
744
+ console.error(error);
745
+ return value;
746
+ }
747
+ };
748
+ var formatDOW = (value, col) => {
749
+ let dowStyle = col.dow_style;
750
+ if (!dowStyle) {
751
+ dowStyle = "NUM_1_MON";
752
+ }
753
+ let formattedValue = value;
754
+ let weekdayNumber = Number(value);
755
+ switch (dowStyle) {
756
+ case "NUM_1_MON": {
757
+ const weekdays = WEEKDAY_NAMES_MON;
758
+ const index = weekdayNumber - 1;
759
+ if (index >= 0) {
760
+ formattedValue = weekdays[index];
761
+ } else {
762
+ console.warn(`dow style is NUM_1_MON but the value could not be converted to a number: ${value}`);
763
+ }
764
+ break;
765
+ }
766
+ case "NUM_1_SUN": {
767
+ const weekdays = WEEKDAY_NAMES_SUN;
768
+ const index = weekdayNumber - 1;
769
+ if (index >= 0) {
770
+ formattedValue = weekdays[index];
771
+ } else {
772
+ console.warn(`dow style is NUM_1_SUN but the value could not be converted to a number: ${value}`);
773
+ }
774
+ break;
775
+ }
776
+ case "NUM_0_MON": {
777
+ const weekdays = WEEKDAY_NAMES_MON;
778
+ if (weekdayNumber >= 0) {
779
+ formattedValue = weekdays[weekdayNumber];
780
+ } else {
781
+ console.warn(`dow style is NUM_0_MON but the value could not be converted to a number: ${value}`);
782
+ }
783
+ break;
784
+ }
785
+ case "NUM_0_SUN": {
786
+ const weekdays = WEEKDAY_NAMES_SUN;
787
+ if (weekdayNumber >= 0) {
788
+ formattedValue = weekdays[weekdayNumber];
789
+ } else {
790
+ console.warn(`dow style is NUM_0_SUN but the value could not be converted to a number: ${value}`);
791
+ }
792
+ break;
793
+ }
794
+ case "ALPHA_MON":
795
+ case "ALPHA_SUN": {
796
+ const weekday = WEEKDAY_NAMES_MON.find((weekday2) => weekday2.toLowerCase().includes(value.trim().toLowerCase()));
797
+ if (weekday) {
798
+ formattedValue = weekday;
799
+ } else {
800
+ console.warn(`dow style is ALPHA but the value could not be matched to a weekday name: ${value}`);
801
+ }
802
+ break;
803
+ }
804
+ default: {
805
+ console.warn(`could not format dow value. dow_style was not recognized: ${col.dow_style}`);
806
+ break;
807
+ }
808
+ }
809
+ return formattedValue;
810
+ };
811
+ var dateStringSortFnWithoutPrecision = (a, b) => {
812
+ if (a.includes("-W")) {
813
+ const aDateYear = a.substring(0, 4);
814
+ const bDateYear = b.substring(0, 4);
815
+ if (aDateYear !== bDateYear) {
816
+ return aDateYear - bDateYear;
817
+ } else {
818
+ const aDateWeek = a.substring(6, 8);
819
+ const bDateWeek = b.substring(6, 8);
820
+ return aDateWeek - bDateWeek;
821
+ }
822
+ } else if (WEEKDAY_NAMES_MON.includes(a.trim())) {
823
+ const aDayIndex = WEEKDAY_NAMES_MON.findIndex((d) => d.toLowerCase().includes(a.trim().toLowerCase()));
824
+ const bDayIndex = WEEKDAY_NAMES_MON.findIndex((d) => d.toLowerCase().includes(b.trim().toLowerCase()));
825
+ let sortValue = a - b;
826
+ if (aDayIndex >= 0 && bDayIndex >= 0) {
827
+ sortValue = aDayIndex - bDayIndex;
828
+ }
829
+ return sortValue;
830
+ } else if (MONTH_NAMES.includes(a.trim())) {
831
+ const aMonthIndex = MONTH_NAMES.findIndex((m) => m === a.trim());
832
+ const bMonthIndex = MONTH_NAMES.findIndex((m) => m === b.trim());
833
+ if (aMonthIndex >= 0 && bMonthIndex >= 0) {
834
+ return bMonthIndex - aMonthIndex;
835
+ }
836
+ return a - b;
837
+ } else if (SEASON_NAMES.includes(a.substr(0, 2))) {
838
+ const aSeasonIndex = SEASON_NAMES.findIndex((s) => s === a.substr(0, 2));
839
+ const bSeasonIndex = SEASON_NAMES.findIndex((s) => s === b.substr(0, 2));
840
+ const aYear = Number(a.substr(2));
841
+ const bYear = Number(b.substr(2));
842
+ if (aYear === bYear) {
843
+ return aSeasonIndex - bSeasonIndex;
844
+ }
845
+ return aYear - bYear;
846
+ }
847
+ return a - b;
848
+ };
849
+ var dateStringSortFn = (a, b, col) => {
850
+ if (typeof a !== "string" || typeof b !== "string" || !col) {
851
+ return a - b;
852
+ }
853
+ const aTrimmed = a.trim();
854
+ const bTrimmed = b.trim();
855
+ switch (col.precision) {
856
+ case "DOW": {
857
+ const dowStyle = col.dow_style ?? "ALPHA_MON";
858
+ let aIndex = WEEKDAY_NAMES_MON.findIndex((dow) => dow.toLowerCase().includes(aTrimmed.toLowerCase()));
859
+ let bIndex = WEEKDAY_NAMES_MON.findIndex((dow) => dow.toLowerCase().includes(bTrimmed.toLowerCase()));
860
+ if (dowStyle === "ALPHA_SUN") {
861
+ aIndex = WEEKDAY_NAMES_SUN.findIndex((dow) => dow.toLowerCase().includes(aTrimmed.toLowerCase()));
862
+ bIndex = WEEKDAY_NAMES_SUN.findIndex((dow) => dow.toLowerCase().includes(bTrimmed.toLowerCase()));
863
+ }
864
+ return aIndex - bIndex;
865
+ }
866
+ case "HOUR":
867
+ case "MINUTE": {
868
+ const aDayjsTime = dayjsWithPlugins_default.utc(aTrimmed, "THH:mm:ss.SSSZ").utc();
869
+ const bDayjsTime = dayjsWithPlugins_default.utc(bTrimmed, "THH:mm:ss.SSSZ").utc();
870
+ return aDayjsTime.unix() - bDayjsTime.unix();
871
+ }
872
+ case "MONTH": {
873
+ MONTH_NAMES;
874
+ const aMonthIndex = MONTH_NAMES.findIndex((m) => m.toLowerCase() === aTrimmed.toLowerCase());
875
+ const bMonthIndex = MONTH_NAMES.findIndex((m) => m.toLowerCase() === bTrimmed.toLowerCase());
876
+ return aMonthIndex - bMonthIndex;
877
+ }
878
+ default: {
879
+ return dateStringSortFnWithoutPrecision(aTrimmed, bTrimmed);
880
+ }
881
+ }
882
+ };
883
+ var dateSortFn = (a, b, col, isTable) => {
884
+ try {
885
+ if (!a && !b) {
886
+ return 0;
887
+ } else if (!a && b) {
888
+ return 1;
889
+ } else if (a && !b || !col) {
890
+ return -1;
891
+ }
892
+ let aDate = Number(a);
893
+ let bDate = Number(b);
894
+ let sortValue = aDate - bDate;
895
+ if (isNaN(aDate) || isNaN(bDate)) {
896
+ if (col.type === "DATE_STRING") {
897
+ sortValue = dateStringSortFn(a, b, col);
898
+ } else {
899
+ sortValue = dayjsWithPlugins_default.utc(a).unix() - dayjsWithPlugins_default.utc(b).unix();
900
+ }
901
+ }
902
+ if (isTable && col.precision === "DOW") {
903
+ sortValue = -1 * sortValue;
904
+ }
905
+ return sortValue;
906
+ } catch (error) {
907
+ console.error(error);
908
+ return -1;
909
+ }
910
+ };
911
+ var sortDataByDate = (data, tableColumns, sortDirection = "desc", isTable) => {
912
+ try {
913
+ if (!data || typeof data !== "object") {
914
+ throw new Error("Could not sort data by date - no data supplied");
915
+ }
916
+ const dateColumnIndex = getDateColumnIndex(tableColumns);
917
+ const dateColumn = tableColumns[dateColumnIndex];
918
+ if (dateColumnIndex >= 0) {
919
+ let multiplier = sortDirection === "desc" ? -1 : 1;
920
+ const sortedData = [...data].sort(
921
+ (a, b) => multiplier * dateSortFn(a[dateColumnIndex], b[dateColumnIndex], dateColumn, isTable)
922
+ );
923
+ return sortedData;
924
+ }
925
+ } catch (error) {
926
+ console.error(error);
927
+ }
928
+ return data;
929
+ };
930
+ var formatElement = ({
931
+ element,
932
+ column,
933
+ config = dataFormattingDefault,
934
+ htmlElement,
935
+ isChart = false
936
+ }) => {
937
+ try {
938
+ let formattedElement = element;
939
+ const { currencyCode, languageCode, currencyDecimals, quantityDecimals, ratioDecimals } = getDataFormatting(config);
940
+ let type = column == null ? void 0 : column.type;
941
+ if (isChart && ["count", "deviation", "variance"].includes(column == null ? void 0 : column.aggType)) {
942
+ type = "QUANTITY";
943
+ }
944
+ if (column) {
945
+ switch (type) {
946
+ case "STRING": {
947
+ break;
948
+ }
949
+ case "DOLLAR_AMT": {
950
+ const elementNumber = parseFloat(`${element}`);
951
+ if (!isNaN(elementNumber)) {
952
+ const currency = currencyCode || "USD";
953
+ const validatedCurrencyDecimals = currencyDecimals || currencyDecimals === 0 ? currencyDecimals : void 0;
954
+ try {
955
+ formattedElement = new Intl.NumberFormat(languageCode, {
956
+ style: "currency",
957
+ currency: `${currency}`,
958
+ minimumFractionDigits: validatedCurrencyDecimals,
959
+ maximumFractionDigits: validatedCurrencyDecimals
960
+ }).format(elementNumber);
961
+ } catch (error) {
962
+ console.error(error);
963
+ formattedElement = new Intl.NumberFormat(languageCode, {
964
+ style: "currency",
965
+ currency: "USD",
966
+ minimumFractionDigits: validatedCurrencyDecimals,
967
+ maximumFractionDigits: validatedCurrencyDecimals
968
+ }).format(elementNumber);
969
+ }
970
+ }
971
+ break;
972
+ }
973
+ case "QUANTITY": {
974
+ const validatedQuantityDecimals = !isNaN(quantityDecimals) ? quantityDecimals : 2;
975
+ const elementNumber = parseFloat(`${element}`);
976
+ if (!isNaN(elementNumber)) {
977
+ const numDecimals = elementNumber % 1 !== 0 ? validatedQuantityDecimals : 0;
978
+ formattedElement = new Intl.NumberFormat(languageCode, {
979
+ minimumFractionDigits: numDecimals,
980
+ maximumFractionDigits: numDecimals
981
+ }).format(elementNumber);
982
+ }
983
+ break;
984
+ }
985
+ case "DATE": {
986
+ formattedElement = formatDateType(element, column, config);
987
+ break;
988
+ }
989
+ case "DATE_STRING": {
990
+ formattedElement = formatDateStringType(element, column, config);
991
+ break;
992
+ }
993
+ case "RATIO": {
994
+ const numDecimals = !isNaN(ratioDecimals) ? ratioDecimals : 4;
995
+ const elementNumber = parseFloat(`${element}`);
996
+ if (!isNaN(elementNumber)) {
997
+ formattedElement = new Intl.NumberFormat(languageCode, {
998
+ minimumFractionDigits: numDecimals,
999
+ maximumFractionDigits: numDecimals
1000
+ }).format(elementNumber);
1001
+ }
1002
+ break;
1003
+ }
1004
+ case "PERCENT": {
1005
+ const elementNumber = parseFloat(`${element}`);
1006
+ if (!isNaN(elementNumber)) {
1007
+ const p = elementNumber / 100;
1008
+ formattedElement = new Intl.NumberFormat(languageCode, {
1009
+ style: "percent",
1010
+ minimumFractionDigits: 2,
1011
+ maximumFractionDigits: 2
1012
+ }).format(p);
1013
+ if (htmlElement) {
1014
+ if (elementNumber < 0) {
1015
+ htmlElement.classList.add("comparison-value-negative");
1016
+ } else if (elementNumber > 0) {
1017
+ htmlElement.classList.add("comparison-value-positive");
1018
+ }
1019
+ }
1020
+ }
1021
+ break;
1022
+ }
1023
+ default: {
1024
+ break;
1025
+ }
1026
+ }
1027
+ }
1028
+ return formattedElement;
1029
+ } catch (error) {
1030
+ console.error(error);
1031
+ return element;
1032
+ }
1033
+ };
1034
+ var getNumberFormatConfig = (d, scale) => {
1035
+ var _a, _b;
1036
+ let minimumFractionDigits = 0;
1037
+ let maximumFractionDigits = 0;
1038
+ let notation;
1039
+ const domainRange = ((_a = scale == null ? void 0 : scale.domain()) == null ? void 0 : _a[1]) - ((_b = scale == null ? void 0 : scale.domain()) == null ? void 0 : _b[0]);
1040
+ const smallDomain = domainRange && domainRange < 10;
1041
+ const absValue = Math.abs(d);
1042
+ if (smallDomain) {
1043
+ minimumFractionDigits = 2;
1044
+ maximumFractionDigits = 2;
1045
+ } else if (absValue >= 1e3) {
1046
+ notation = "compact";
1047
+ if (absValue > 1e9) {
1048
+ maximumFractionDigits = 3;
1049
+ } else if (absValue > 1e6) {
1050
+ maximumFractionDigits = 2;
1051
+ } else if (absValue > 1e3) {
1052
+ maximumFractionDigits = 1;
1053
+ }
1054
+ }
1055
+ return { minimumFractionDigits, maximumFractionDigits, notation };
1056
+ };
1057
+ var formatChartLabel = ({ d, scale, column, dataFormatting, maxLabelWidth }) => {
1058
+ if (d === null) {
1059
+ return {
1060
+ fullWidthLabel: "Untitled Category",
1061
+ formattedLabel: "Untitled Category"
1062
+ };
1063
+ }
1064
+ const col = column ?? (scale == null ? void 0 : scale.column);
1065
+ if (!col || !col.type) {
1066
+ return {
1067
+ fullWidthLabel: d,
1068
+ formattedLabel: d
1069
+ };
1070
+ }
1071
+ const config = (scale == null ? void 0 : scale.dataFormatting) ?? dataFormatting;
1072
+ const { currencyCode, languageCode } = config;
1073
+ let type = col.type;
1074
+ if ((scale == null ? void 0 : scale.units) === "none") {
1075
+ type = "QUANTITY";
1076
+ }
1077
+ const { minimumFractionDigits, maximumFractionDigits, notation } = getNumberFormatConfig(d, scale);
1078
+ let formattedLabel = d;
1079
+ if (scale == null ? void 0 : scale.showLabelDecimals) {
1080
+ formattedLabel = formatElement({
1081
+ element: d,
1082
+ column: column ?? (scale == null ? void 0 : scale.column),
1083
+ config: dataFormatting,
1084
+ isChart: true
1085
+ });
1086
+ } else {
1087
+ switch (type) {
1088
+ case "STRING": {
1089
+ break;
1090
+ }
1091
+ case "DOLLAR_AMT": {
1092
+ if (Number(d) || Number(d) === 0) {
1093
+ const style = "currency";
1094
+ const currency = currencyCode || "USD";
1095
+ const currencyConfig = {
1096
+ style,
1097
+ minimumFractionDigits,
1098
+ maximumFractionDigits,
1099
+ notation
1100
+ };
1101
+ try {
1102
+ formattedLabel = new Intl.NumberFormat(languageCode, {
1103
+ ...currencyConfig,
1104
+ currency
1105
+ }).format(d);
1106
+ } catch (error) {
1107
+ console.error(error);
1108
+ formattedLabel = new Intl.NumberFormat(languageCode, {
1109
+ ...currencyConfig,
1110
+ currency: "USD"
1111
+ }).format(d);
1112
+ }
1113
+ }
1114
+ break;
1115
+ }
1116
+ case "QUANTITY": {
1117
+ if (!isNaN(parseFloat(d))) {
1118
+ formattedLabel = new Intl.NumberFormat(languageCode, {
1119
+ minimumFractionDigits,
1120
+ maximumFractionDigits,
1121
+ notation
1122
+ }).format(d);
1123
+ }
1124
+ break;
1125
+ }
1126
+ case "DATE": {
1127
+ formattedLabel = formatDateType(d, col, config);
1128
+ break;
1129
+ }
1130
+ case "DATE_STRING": {
1131
+ formattedLabel = formatDateStringType(d, col, config);
1132
+ break;
1133
+ }
1134
+ case "PERCENT": {
1135
+ if (Number(d) || Number(d) === 0) {
1136
+ const p = Number(d) / 100;
1137
+ formattedLabel = new Intl.NumberFormat(languageCode, {
1138
+ style: "percent",
1139
+ minimumFractionDigits: 1,
1140
+ maximumFractionDigits: 1
1141
+ }).format(p);
1142
+ }
1143
+ break;
1144
+ }
1145
+ default: {
1146
+ break;
1147
+ }
1148
+ }
1149
+ }
1150
+ const fullWidthLabel = formattedLabel;
1151
+ if (typeof formattedLabel === "string" && maxLabelWidth && formattedLabel.length > maxLabelWidth) {
1152
+ formattedLabel = `${formattedLabel.substring(0, maxLabelWidth)}...`;
1153
+ }
1154
+ return { fullWidthLabel, formattedLabel };
1155
+ };
1156
+ var getCurrencySymbol = (dataFormatting = dataFormattingDefault) => {
1157
+ var _a;
1158
+ try {
1159
+ const { currencyCode, languageCode } = getDataFormatting(dataFormatting);
1160
+ const formattedParts = new Intl.NumberFormat(languageCode, {
1161
+ style: "currency",
1162
+ currency: currencyCode
1163
+ }).formatToParts(0);
1164
+ const symbol = (_a = formattedParts.find((part) => (part == null ? void 0 : part.type) === "currency")) == null ? void 0 : _a.value;
1165
+ return symbol;
1166
+ } catch (error) {
1167
+ console.error(error);
1168
+ return;
1169
+ }
1170
+ };
1171
+ var getDayjsObjForStringType = (value, col) => {
1172
+ if (!value) {
1173
+ return void 0;
1174
+ }
1175
+ try {
1176
+ switch (col.precision) {
1177
+ case "DOW": {
1178
+ return void 0;
1179
+ }
1180
+ case "HOUR":
1181
+ case "MINUTE": {
1182
+ return dayjsWithPlugins_default.utc(value, "THH:mm:ss.SSSZ").utc();
1183
+ }
1184
+ case "MONTH": {
1185
+ return void 0;
1186
+ }
1187
+ default: {
1188
+ return void 0;
1189
+ }
1190
+ }
1191
+ } catch (error) {
1192
+ console.error(error);
1193
+ return void 0;
1194
+ }
1195
+ };
1196
+ var getDayJSObj = ({ value, column }) => {
1197
+ if (column.type === "DATE_STRING") {
1198
+ return getDayjsObjForStringType(value, column);
1199
+ }
1200
+ if (isNumber(value)) {
1201
+ return dayjsWithPlugins_default.unix(value).utc();
1202
+ }
1203
+ return dayjsWithPlugins_default.utc(value).utc();
1204
+ };
1205
+ var getEpochFromDate = (date, precision, precisionFrame) => {
1206
+ if (date == null ? void 0 : date.getTime) {
1207
+ if (precision && precisionFrame === "start") {
1208
+ return dayjsWithPlugins_default(date).utc().startOf(precision).valueOf();
1209
+ } else if (precision && precisionFrame === "end") {
1210
+ return dayjsWithPlugins_default(date).utc().endOf(precision).valueOf();
1211
+ }
1212
+ return date.getTime();
1213
+ }
1214
+ return;
1215
+ };
1216
+
1217
+ // src/HelperFns/arrayHelpers.ts
1218
+ var import_lodash = __toESM(require("lodash.isequal"));
1219
+ var invertArray = (array) => {
1220
+ const numRows = array.length;
1221
+ const numColumns = array[0].length;
1222
+ const invertedArray = [];
1223
+ for (let i = 0; i < numColumns; i++) {
1224
+ invertedArray[i] = [];
1225
+ for (let j = 0; j < numRows; j++) {
1226
+ if (array[j][i])
1227
+ invertedArray[i][j] = array[j][i];
1228
+ }
1229
+ }
1230
+ return invertedArray;
1231
+ };
1232
+ var functionsEqual = (a, b) => {
1233
+ return (a == null ? void 0 : a.toString()) == (b == null ? void 0 : b.toString());
1234
+ };
1235
+ var isObject = (obj) => {
1236
+ return typeof obj === "object" && !Array.isArray(obj) && obj !== null && obj !== void 0;
1237
+ };
1238
+ var deepEqual = (objA, objB) => {
1239
+ const lodashIsEqual = (0, import_lodash.default)(objA, objB);
1240
+ if (lodashIsEqual) {
1241
+ return true;
1242
+ }
1243
+ const objAIsObject = isObject(objA);
1244
+ const objBIsObject = isObject(objB);
1245
+ if (!objAIsObject || !objBIsObject) {
1246
+ return lodashIsEqual;
1247
+ }
1248
+ const keysA = Object.keys(objA);
1249
+ const keysB = Object.keys(objB);
1250
+ if (keysA.length !== keysB.length) {
1251
+ return false;
1252
+ }
1253
+ for (let i = 0; i < keysA.length; i++) {
1254
+ if (typeof objA[keysA[i]] === "function" && typeof objB[keysA[i]] === "function") {
1255
+ if (!functionsEqual(objA[keysA[i]], objB[keysA[i]])) {
1256
+ return false;
1257
+ }
1258
+ } else if (!Object.hasOwnProperty.call(objB, keysA[i]) || !(0, import_lodash.default)(objA[keysA[i]], objB[keysA[i]])) {
1259
+ return false;
1260
+ }
1261
+ }
1262
+ return true;
1263
+ };
1264
+ var difference = (objA, objB) => {
1265
+ const diff = [];
1266
+ Object.keys(Object.assign({}, objA, objB)).forEach((key) => {
1267
+ if (typeof objA[key] === "function" && typeof objB[key] === "function") {
1268
+ if (!functionsEqual(objA[key], objB[key])) {
1269
+ diff.push({
1270
+ key,
1271
+ objA: objA[key],
1272
+ objB: objB[key]
1273
+ });
1274
+ }
1275
+ } else if (!Object.is(objA[key], objB[key])) {
1276
+ diff.push({
1277
+ key,
1278
+ objA: objA[key],
1279
+ objB: objB[key]
1280
+ });
1281
+ }
1282
+ });
1283
+ return diff;
1284
+ };
1285
+ var rotateArray = (array, n) => {
1286
+ const rotated = [...array];
1287
+ n = n % array.length;
1288
+ if (n < 0)
1289
+ n = array.length + n;
1290
+ for (let i = 0; i < n; i++) {
1291
+ rotated.unshift(rotated.pop());
1292
+ }
1293
+ return rotated;
1294
+ };
1295
+ var onlyUnique = (value, index, self) => {
1296
+ return self.indexOf(value) === index;
1297
+ };
1298
+ var makeEmptyArray = (w, h, value = "") => {
1299
+ var arr = [];
1300
+ for (let i = 0; i < h; i++) {
1301
+ arr[i] = [];
1302
+ for (let j = 0; j < w; j++) {
1303
+ arr[i][j] = value;
1304
+ }
1305
+ }
1306
+ return arr;
1307
+ };
1308
+
1309
+ // src/HelperFns/displayTypeHelpers.ts
1310
+ var isChartType = (type) => CHART_TYPES.includes(type);
1311
+ var isTableType = (type) => TABLE_TYPES.includes(type);
1312
+ var isDisplayTypeValid = (response, displayType, dataLength, pivotDataLength, columns, isDataLimited) => {
1313
+ var _a, _b;
1314
+ const supportedDisplayTypes = getSupportedDisplayTypes({
1315
+ response,
1316
+ columns: columns ?? ((_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.columns),
1317
+ dataLength,
1318
+ pivotDataLength,
1319
+ isDataLimited
1320
+ });
1321
+ const isValid = displayType && supportedDisplayTypes.includes(displayType);
1322
+ return isValid;
1323
+ };
1324
+ var shouldPlotMultiSeries = (columns) => {
1325
+ if (isAggregation(columns)) {
1326
+ return false;
1327
+ }
1328
+ const multiSeriesIndex = columns.findIndex((col) => col.multi_series === true);
1329
+ return multiSeriesIndex >= 0;
1330
+ };
1331
+ var supportsPieChart = (columns, chartData) => {
1332
+ if (shouldPlotMultiSeries(columns)) {
1333
+ return false;
1334
+ }
1335
+ if (chartData) {
1336
+ return chartData.length < 7;
1337
+ }
1338
+ return true;
1339
+ };
1340
+ var supports2DCharts = (columns, dataLength) => {
1341
+ if (dataLength <= 1) {
1342
+ return false;
1343
+ }
1344
+ const { amountOfNumberColumns, amountOfStringColumns } = getColumnTypeAmounts(columns);
1345
+ return amountOfNumberColumns > 0 && amountOfStringColumns > 0;
1346
+ };
1347
+ var supportsRegularPivotTable = (columns, dataLength, data) => {
1348
+ var _a, _b;
1349
+ if (dataLength <= 1) {
1350
+ return false;
1351
+ }
1352
+ const groupbyColumns = getGroupableColumns(columns);
1353
+ const hasTwoGroupables = (groupbyColumns == null ? void 0 : groupbyColumns.length) === 2;
1354
+ if (!hasTwoGroupables) {
1355
+ return false;
1356
+ }
1357
+ const visibleColumns = getVisibleColumns(columns);
1358
+ const groupbyColumn1 = columns[groupbyColumns[0]];
1359
+ const groupbyColumn2 = columns[groupbyColumns[1]];
1360
+ if (!groupbyColumn1.is_visible || !groupbyColumn2.is_visible || !((visibleColumns == null ? void 0 : visibleColumns.length) >= 3)) {
1361
+ return false;
1362
+ }
1363
+ const column1Data = (data == null ? void 0 : data.map((row) => {
1364
+ return row[groupbyColumns[0]];
1365
+ })) ?? [];
1366
+ const column2Data = (data == null ? void 0 : data.map((row) => {
1367
+ return row[groupbyColumns[1]];
1368
+ })) ?? [];
1369
+ const uniqueData1Length = ((_a = column1Data == null ? void 0 : column1Data.filter(onlyUnique)) == null ? void 0 : _a.length) ?? 0;
1370
+ const uniqueData2Length = ((_b = column2Data == null ? void 0 : column2Data.filter(onlyUnique)) == null ? void 0 : _b.length) ?? 0;
1371
+ if (uniqueData1Length > MAX_LEGEND_LABELS && uniqueData2Length > MAX_LEGEND_LABELS) {
1372
+ console.debug(
1373
+ `Info: Pivot table will not be supported since there are too many unique fields. The calculated dimensions would be: ${uniqueData1Length} x ${uniqueData2Length}`
1374
+ );
1375
+ return false;
1376
+ }
1377
+ return true;
1378
+ };
1379
+ var supportsDatePivotTable = (columns) => {
1380
+ var _a;
1381
+ const dateColumnIndex = columns.findIndex((col) => col.type === "DATE" || col.type === "DATE_STRING");
1382
+ const dateColumn = columns[dateColumnIndex];
1383
+ return dateColumn && ((_a = dateColumn == null ? void 0 : dateColumn.display_name) == null ? void 0 : _a.toLowerCase().includes("month")) && (columns == null ? void 0 : columns.length) === 2;
1384
+ };
1385
+ var isSingleValueResponse = (response) => {
1386
+ var _a, _b, _c, _d, _e, _f;
1387
+ if (!response) {
1388
+ return false;
1389
+ }
1390
+ const rows = (_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.rows;
1391
+ const columns = (_d = (_c = response == null ? void 0 : response.data) == null ? void 0 : _c.data) == null ? void 0 : _d.columns;
1392
+ const referenceID = (_e = response == null ? void 0 : response.data) == null ? void 0 : _e.reference_id;
1393
+ const hasNoData = rows && !(rows == null ? void 0 : rows.length);
1394
+ const hasOneColumn = (columns == null ? void 0 : columns.length) === 1;
1395
+ if (hasNoData && hasOneColumn && referenceID === "1.1.211") {
1396
+ return true;
1397
+ }
1398
+ const oneRowAndColumn = (rows == null ? void 0 : rows.length) === 1 && ((_f = rows[0]) == null ? void 0 : _f.length) === 1;
1399
+ if (oneRowAndColumn) {
1400
+ return true;
1401
+ }
1402
+ return false;
1403
+ };
1404
+ var getSupportedDisplayTypes = ({
1405
+ response,
1406
+ columns,
1407
+ dataLength,
1408
+ pivotDataLength,
1409
+ isDataLimited
1410
+ } = {}) => {
1411
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
1412
+ try {
1413
+ if (!((_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.display_type)) {
1414
+ return [];
1415
+ }
1416
+ const displayType = response.data.data.display_type;
1417
+ if (displayType === "suggestion" || displayType === "help" || displayType === "html") {
1418
+ return [displayType];
1419
+ }
1420
+ const rows = ((_d = (_c = response == null ? void 0 : response.data) == null ? void 0 : _c.data) == null ? void 0 : _d.rows) ?? [];
1421
+ const allColumns = columns || ((_f = (_e = response == null ? void 0 : response.data) == null ? void 0 : _e.data) == null ? void 0 : _f.columns);
1422
+ const visibleColumns = getVisibleColumns(allColumns);
1423
+ if (!(visibleColumns == null ? void 0 : visibleColumns.length)) {
1424
+ return ["text"];
1425
+ }
1426
+ if (isSingleValueResponse(response)) {
1427
+ return ["single-value"];
1428
+ }
1429
+ if (!(rows == null ? void 0 : rows.length)) {
1430
+ return ["table"];
1431
+ }
1432
+ const maxRowsForPieChart = 10;
1433
+ const numRows = dataLength ?? rows.length;
1434
+ let pivotDataHasLength = true;
1435
+ const pivotDataLengthProvided = pivotDataLength !== void 0 && pivotDataLength !== null;
1436
+ if (pivotDataLengthProvided) {
1437
+ pivotDataHasLength = !!pivotDataLength;
1438
+ }
1439
+ if (supportsRegularPivotTable(visibleColumns, numRows, (_h = (_g = response == null ? void 0 : response.data) == null ? void 0 : _g.data) == null ? void 0 : _h.rows)) {
1440
+ const supportedDisplayTypes = ["table"];
1441
+ if (!isDataLimited) {
1442
+ supportedDisplayTypes.push("pivot_table");
1443
+ }
1444
+ if (
1445
+ // Comment out for now so chart row count doesnt change display type
1446
+ // numRows <= maxRowsForPivot &&
1447
+ pivotDataHasLength
1448
+ ) {
1449
+ supportedDisplayTypes.push("stacked_column", "stacked_bar", "column", "bar", "bubble", "heatmap");
1450
+ if (hasDateColumn(visibleColumns)) {
1451
+ supportedDisplayTypes.push("stacked_line", "line");
1452
+ }
1453
+ }
1454
+ return supportedDisplayTypes;
1455
+ } else if (supports2DCharts(visibleColumns, numRows)) {
1456
+ const supportedDisplayTypes = ["table", "column", "bar"];
1457
+ if (numRows > MIN_HISTOGRAM_SAMPLE) {
1458
+ supportedDisplayTypes.push("histogram");
1459
+ }
1460
+ if (hasDateColumn(visibleColumns)) {
1461
+ supportedDisplayTypes.push("line");
1462
+ }
1463
+ if (numRows > 1 && numRows <= maxRowsForPieChart) {
1464
+ supportedDisplayTypes.push("pie");
1465
+ }
1466
+ const { amountOfNumberColumns } = getColumnTypeAmounts(visibleColumns);
1467
+ if (amountOfNumberColumns > 1) {
1468
+ supportedDisplayTypes.push("column_line");
1469
+ supportedDisplayTypes.push("scatterplot");
1470
+ }
1471
+ if (!isDataLimited && supportsDatePivotTable(visibleColumns)) {
1472
+ const dateColumnIndex = visibleColumns.findIndex((col) => col.type === "DATE" || col.type === "DATE_STRING");
1473
+ const dateColumn = visibleColumns[dateColumnIndex];
1474
+ const data = (_j = (_i = response == null ? void 0 : response.data) == null ? void 0 : _i.data) == null ? void 0 : _j.rows;
1475
+ const uniqueYears = [];
1476
+ data.forEach((row) => {
1477
+ const year = formatElement({
1478
+ element: row[dateColumnIndex],
1479
+ column: dateColumn,
1480
+ config: getDataFormatting({ monthYearFormat: "YYYY", dayMonthYearFormat: "YYYY" })
1481
+ });
1482
+ if (!uniqueYears.includes(year)) {
1483
+ uniqueYears.push(year);
1484
+ }
1485
+ });
1486
+ if (uniqueYears.length > 1) {
1487
+ supportedDisplayTypes.push("pivot_table");
1488
+ }
1489
+ }
1490
+ return supportedDisplayTypes;
1491
+ }
1492
+ return ["table"];
1493
+ } catch (error) {
1494
+ console.error(error);
1495
+ return ["table"];
1496
+ }
1497
+ };
1498
+ var getFirstChartDisplayType = (supportedDisplayTypes, fallback) => {
1499
+ const chartType = supportedDisplayTypes.find((displayType) => isChartType(displayType));
1500
+ if (chartType) {
1501
+ return chartType;
1502
+ }
1503
+ return fallback;
1504
+ };
1505
+ var getDefaultDisplayType = (response, defaultToChart, columns, dataLength, pivotDataLength, preferredDisplayType, isDataLimited = false) => {
1506
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1507
+ const supportedDisplayTypes = getSupportedDisplayTypes({
1508
+ response,
1509
+ columns: columns ?? ((_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.columns),
1510
+ dataLength,
1511
+ pivotDataLength,
1512
+ isDataLimited
1513
+ });
1514
+ if (preferredDisplayType && supportedDisplayTypes.includes(preferredDisplayType)) {
1515
+ return preferredDisplayType;
1516
+ }
1517
+ const responseDisplayType = (_d = (_c = response == null ? void 0 : response.data) == null ? void 0 : _c.data) == null ? void 0 : _d.display_type;
1518
+ if (supportedDisplayTypes.includes(preferredDisplayType)) {
1519
+ return preferredDisplayType;
1520
+ }
1521
+ if (responseDisplayType === "suggestion" || responseDisplayType === "help" || responseDisplayType === "html") {
1522
+ return responseDisplayType;
1523
+ }
1524
+ if (supportedDisplayTypes.length === 1) {
1525
+ return supportedDisplayTypes[0];
1526
+ }
1527
+ if (supportedDisplayTypes.includes("pivot_table")) {
1528
+ let displayType = "pivot_table";
1529
+ if (defaultToChart) {
1530
+ displayType = isAggregation((_f = (_e = response == null ? void 0 : response.data) == null ? void 0 : _e.data) == null ? void 0 : _f.columns) ? getFirstChartDisplayType(supportedDisplayTypes, "pivot_table") : "pivot_table";
1531
+ }
1532
+ return displayType;
1533
+ }
1534
+ if (!responseDisplayType && hasData(response) || responseDisplayType === "data") {
1535
+ let displayType = "table";
1536
+ if (defaultToChart) {
1537
+ displayType = isAggregation((_h = (_g = response == null ? void 0 : response.data) == null ? void 0 : _g.data) == null ? void 0 : _h.columns) ? getFirstChartDisplayType(supportedDisplayTypes, "table") : "table";
1538
+ }
1539
+ return displayType;
1540
+ }
1541
+ return "text";
1542
+ };
1543
+ var hasData = (response) => {
1544
+ var _a, _b, _c;
1545
+ if (!response) {
1546
+ return false;
1547
+ }
1548
+ return (_c = (_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.rows) == null ? void 0 : _c.length;
1549
+ };
1550
+
1551
+ // src/HelperFns/domHelpers.ts
1552
+ var currentEventLoopEnd = () => {
1553
+ return new Promise((resolve) => {
1554
+ setTimeout(resolve, 0);
1555
+ });
1556
+ };
1557
+ var animateInputText = ({ text = "", inputRef, callback = () => {
1558
+ }, totalAnimationTime = 1e3 }) => {
1559
+ if (!text.length || !inputRef || typeof text !== "string") {
1560
+ return Promise.resolve();
1561
+ }
1562
+ return new Promise((resolve) => {
1563
+ const timePerChar = Math.round(totalAnimationTime / text.length);
1564
+ for (let i = 1; i <= text.length; i++) {
1565
+ setTimeout(() => {
1566
+ inputRef.value = text.slice(0, i);
1567
+ if (i === text.length) {
1568
+ setTimeout(() => {
1569
+ callback();
1570
+ resolve();
1571
+ }, 300);
1572
+ }
1573
+ }, i * timePerChar);
1574
+ }
1575
+ });
1576
+ };
1577
+ var handleTooltipBoundaryCollision = (e, self) => {
1578
+ var _a;
1579
+ const tooltipRef = (_a = self == null ? void 0 : self.reactTooltipRef) == null ? void 0 : _a.tooltipRef;
1580
+ if (!tooltipRef) {
1581
+ return;
1582
+ }
1583
+ const rect = tooltipRef.getBoundingClientRect();
1584
+ const overflownLeft = rect.left < 0;
1585
+ const overflownRight = rect.right > window.innerWidth;
1586
+ if (overflownLeft) {
1587
+ tooltipRef.style.setProperty("left", "10px");
1588
+ tooltipRef.style.setProperty("right", "auto");
1589
+ } else if (overflownRight) {
1590
+ tooltipRef.style.setProperty("left", "auto");
1591
+ tooltipRef.style.setProperty("right", "10px");
1592
+ }
1593
+ };
1594
+ var removeFromDOM = (elem) => {
1595
+ if (!elem) {
1596
+ return;
1597
+ }
1598
+ try {
1599
+ if (typeof elem.forEach === "function" && (elem == null ? void 0 : elem.length)) {
1600
+ elem.forEach((el) => {
1601
+ if (el && typeof el.remove === "function") {
1602
+ el.remove();
1603
+ }
1604
+ });
1605
+ } else if (typeof elem.remove === "function") {
1606
+ elem.remove();
1607
+ }
1608
+ } catch (error) {
1609
+ console.error(error);
1610
+ }
1611
+ };
1612
+ var setCaretPosition = (elem, caretPos) => {
1613
+ if (elem !== null) {
1614
+ if (elem.createTextRange) {
1615
+ const range = elem.createTextRange();
1616
+ range.move("character", caretPos);
1617
+ range.select();
1618
+ } else {
1619
+ if (elem.selectionStart) {
1620
+ elem.focus();
1621
+ elem.setSelectionRange(caretPos, caretPos);
1622
+ } else {
1623
+ elem.focus();
1624
+ }
1625
+ }
1626
+ }
1627
+ };
1628
+ var getPadding = (element) => {
1629
+ const padding = { left: 0, right: 0, top: 0, bottom: 0 };
1630
+ try {
1631
+ const left = parseInt(window.getComputedStyle(element)["padding-left"], 10);
1632
+ const right = parseInt(window.getComputedStyle(element)["padding-right"], 10);
1633
+ const top = parseInt(window.getComputedStyle(element)["padding-top"], 10);
1634
+ const bottom = parseInt(window.getComputedStyle(element)["padding-bottom"], 10);
1635
+ padding.left = left;
1636
+ padding.right = right;
1637
+ padding.top = top;
1638
+ padding.bottom = bottom;
1639
+ } catch (error) {
1640
+ return padding;
1641
+ }
1642
+ return padding;
1643
+ };
1644
+ var getQueryParams = (url) => {
1645
+ try {
1646
+ const queryParams = {};
1647
+ const anchor = document.createElement("a");
1648
+ anchor.href = url;
1649
+ const queryStrings = anchor.search.substring(1);
1650
+ const params = queryStrings.split("&");
1651
+ for (var i = 0; i < params.length; i++) {
1652
+ var pair = params[i].split("=");
1653
+ queryParams[pair[0]] = decodeURIComponent(pair[1]);
1654
+ }
1655
+ return queryParams;
1656
+ } catch (error) {
1657
+ return void 0;
1658
+ }
1659
+ };
1660
+ var svgToPng = (svgElement, scale = 3) => {
1661
+ return new Promise(function(resolve, reject) {
1662
+ try {
1663
+ const bbox = svgElement.getBoundingClientRect();
1664
+ const originalWidth = bbox.width;
1665
+ const originalHeight = bbox.height;
1666
+ const scaledWidth = originalWidth * scale;
1667
+ const scaledHeight = originalHeight * scale;
1668
+ const clonedSvg = svgElement.cloneNode(true);
1669
+ clonedSvg.setAttribute("transform-origin", "top left");
1670
+ clonedSvg.setAttribute("transform", `scale(${scale})`);
1671
+ const image64 = getSVGBase64(clonedSvg);
1672
+ const canvas = document.createElement("canvas");
1673
+ canvas.style.width = originalWidth + "px";
1674
+ canvas.style.height = originalHeight + "px";
1675
+ canvas.width = scaledWidth;
1676
+ canvas.height = scaledHeight;
1677
+ const ctx = canvas.getContext("2d");
1678
+ const img = new Image();
1679
+ img.onload = function() {
1680
+ ctx.drawImage(this, 0, 0, scaledWidth, scaledHeight);
1681
+ resolve(canvas.toDataURL("image/png", 1));
1682
+ };
1683
+ img.onerror = function() {
1684
+ reject("failed to load image");
1685
+ };
1686
+ img.src = image64;
1687
+ } catch (error) {
1688
+ console.error(error);
1689
+ reject("failed to convert svg to png " + error);
1690
+ }
1691
+ });
1692
+ };
1693
+ var getBBoxFromRef = (ref) => {
1694
+ if (!ref || !ref.getBBox) {
1695
+ return;
1696
+ }
1697
+ return ref.getBBox();
1698
+ };
1699
+ var getSVGBase64 = (svgElement) => {
1700
+ try {
1701
+ const domUrl = window.URL || window.webkitURL || window;
1702
+ if (!domUrl) {
1703
+ throw new Error("(browser doesnt support this)");
1704
+ } else if (!svgElement) {
1705
+ throw new Error("(svg element does not exist)");
1706
+ }
1707
+ var xml = new XMLSerializer().serializeToString(svgElement);
1708
+ var svg64 = btoa(unescape(encodeURIComponent(xml)));
1709
+ const imgSrc = `data:image/svg+xml;base64,${svg64}`;
1710
+ return imgSrc;
1711
+ } catch (error) {
1712
+ return void 0;
1713
+ }
1714
+ };
1715
+
1716
+ // src/HelperFns/propsHelpers.ts
1717
+ var getStringFromSource = (source) => {
1718
+ if (typeof source === "string" || typeof source === "number") {
1719
+ return `${source}`;
1720
+ }
1721
+ if (Array.isArray(source) && !!source.length) {
1722
+ return source.join(".");
1723
+ }
1724
+ return null;
1725
+ };
1726
+ var mergeSources = (source, newSource) => {
1727
+ let finalSource = null;
1728
+ try {
1729
+ const sourceString = getStringFromSource(source);
1730
+ const newSourceString = getStringFromSource(newSource);
1731
+ if (sourceString && newSourceString) {
1732
+ finalSource = [sourceString, newSourceString].join(".");
1733
+ } else if (sourceString) {
1734
+ finalSource = sourceString;
1735
+ } else if (newSourceString) {
1736
+ finalSource = newSourceString;
1737
+ }
1738
+ } catch (error) {
1739
+ console.error(error);
1740
+ }
1741
+ return finalSource;
1742
+ };
1743
+ // Annotate the CommonJS export names for ESM import in node:
1744
+ 0 && (module.exports = {
1745
+ AGG_TYPES,
1746
+ CHART_TYPES,
1747
+ DATE_ONLY_CHART_TYPES,
1748
+ DAYJS_PRECISION_FORMATS,
1749
+ DEFAULT_AGG_TYPE,
1750
+ DEFAULT_DATA_PAGE_SIZE,
1751
+ DOUBLE_AXIS_CHART_TYPES,
1752
+ DOW_STYLES,
1753
+ MAX_DATA_PAGE_SIZE,
1754
+ MAX_LEGEND_LABELS,
1755
+ MIN_HISTOGRAM_SAMPLE,
1756
+ MONTH_NAMES,
1757
+ NumberColumnTypeDisplayNames,
1758
+ NumberColumnTypes,
1759
+ PrecisionTypes,
1760
+ SEASON_NAMES,
1761
+ TABLE_TYPES,
1762
+ TimestampFormats,
1763
+ WEEKDAY_NAMES_MON,
1764
+ WEEKDAY_NAMES_SUN,
1765
+ animateInputText,
1766
+ authenticationDefault,
1767
+ autoQLConfigDefault,
1768
+ capitalizeFirstChar,
1769
+ currentEventLoopEnd,
1770
+ dataConfigDefault,
1771
+ dataFormattingDefault,
1772
+ dateSortFn,
1773
+ dateStringSortFn,
1774
+ deepEqual,
1775
+ difference,
1776
+ formatChartLabel,
1777
+ formatDateStringType,
1778
+ formatDateType,
1779
+ formatElement,
1780
+ formatEpochDate,
1781
+ formatISODateWithPrecision,
1782
+ formatStringDate,
1783
+ formatStringDateWithPrecision,
1784
+ functionsEqual,
1785
+ getAuthentication,
1786
+ getAutoQLConfig,
1787
+ getBBoxFromRef,
1788
+ getColumnTypeAmounts,
1789
+ getCurrencySymbol,
1790
+ getDataConfig,
1791
+ getDataFormatting,
1792
+ getDateColumnIndex,
1793
+ getDayJSObj,
1794
+ getDayjsObjForStringType,
1795
+ getDefaultDisplayType,
1796
+ getEpochFromDate,
1797
+ getFirstChartDisplayType,
1798
+ getGroupBys,
1799
+ getGroupBysFromPivotTable,
1800
+ getGroupBysFromTable,
1801
+ getGroupableColumns,
1802
+ getKeyByValue,
1803
+ getNumberFormatConfig,
1804
+ getNumberOfGroupables,
1805
+ getPadding,
1806
+ getQueryParams,
1807
+ getSVGBase64,
1808
+ getStringFromSource,
1809
+ getSupportedDisplayTypes,
1810
+ getVisibleColumns,
1811
+ handleTooltipBoundaryCollision,
1812
+ hasData,
1813
+ hasDateColumn,
1814
+ hasNumberColumn,
1815
+ hasStringColumn,
1816
+ invertArray,
1817
+ isAggregation,
1818
+ isChartType,
1819
+ isColumnDateType,
1820
+ isColumnNumberType,
1821
+ isColumnStringType,
1822
+ isDisplayTypeValid,
1823
+ isListQuery,
1824
+ isNumber,
1825
+ isObject,
1826
+ isSingleValueResponse,
1827
+ isTableType,
1828
+ makeEmptyArray,
1829
+ mergeSources,
1830
+ nameValueObject,
1831
+ onlyUnique,
1832
+ removeFromDOM,
1833
+ rotateArray,
1834
+ setCaretPosition,
1835
+ shouldPlotMultiSeries,
1836
+ sortDataByDate,
1837
+ supports2DCharts,
1838
+ supportsDatePivotTable,
1839
+ supportsPieChart,
1840
+ supportsRegularPivotTable,
1841
+ svgToPng
1842
+ });
1843
+ //# sourceMappingURL=index.js.map