@vuu-ui/vuu-utils 0.6.13-debug → 0.6.14-debug

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/cjs/index.js CHANGED
@@ -16,21 +16,34 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var __accessCheck = (obj, member, msg) => {
20
+ if (!member.has(obj))
21
+ throw TypeError("Cannot " + msg);
22
+ };
23
+ var __privateGet = (obj, member, getter) => {
24
+ __accessCheck(obj, member, "read from private field");
25
+ return getter ? getter.call(obj) : member.get(obj);
26
+ };
27
+ var __privateAdd = (obj, member, value) => {
28
+ if (member.has(obj))
29
+ throw TypeError("Cannot add the same private member more than once");
30
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
31
+ };
19
32
 
20
33
  // src/index.ts
21
34
  var src_exports = {};
22
35
  __export(src_exports, {
23
36
  AggregationType: () => AggregationType,
24
- ConsoleLogger: () => ConsoleLogger,
25
37
  DOWN1: () => DOWN1,
26
38
  DOWN2: () => DOWN2,
27
39
  DataWindow: () => DataWindow,
28
40
  EventEmitter: () => EventEmitter,
41
+ KeySet: () => KeySet,
42
+ RangeMonitor: () => RangeMonitor,
29
43
  UP1: () => UP1,
30
44
  UP2: () => UP2,
31
45
  WindowRange: () => WindowRange,
32
46
  addGroupColumn: () => addGroupColumn,
33
- addRowsToIndex: () => addRowsToIndex,
34
47
  addSortColumn: () => addSortColumn,
35
48
  applyFilterToColumns: () => applyFilterToColumns,
36
49
  applyGroupByToColumns: () => applyGroupByToColumns,
@@ -38,11 +51,13 @@ __export(src_exports, {
38
51
  applySortToColumns: () => applySortToColumns,
39
52
  buildColumnMap: () => buildColumnMap,
40
53
  createEl: () => createEl,
54
+ debounce: () => debounce,
41
55
  defaultValueFormatter: () => defaultValueFormatter,
42
56
  deselectItem: () => deselectItem,
43
57
  expandSelection: () => expandSelection,
44
58
  extractFilterForColumn: () => extractFilterForColumn,
45
59
  extractGroupColumn: () => extractGroupColumn,
60
+ findColumn: () => findColumn,
46
61
  flattenColumnGroup: () => flattenColumnGroup,
47
62
  formatDate: () => formatDate,
48
63
  fromServerDataType: () => fromServerDataType,
@@ -50,7 +65,10 @@ __export(src_exports, {
50
65
  getCellRenderer: () => getCellRenderer,
51
66
  getColumnName: () => getColumnName,
52
67
  getColumnPinStyle: () => getColumnPinStyle,
68
+ getColumnsInViewport: () => getColumnsInViewport,
69
+ getCookieValue: () => getCookieValue,
53
70
  getFullRange: () => getFullRange,
71
+ getLoggingConfig: () => getLoggingConfig,
54
72
  getMovingValueDirection: () => getMovingValueDirection,
55
73
  getRegisteredCellRenderers: () => getRegisteredCellRenderers,
56
74
  getRowRecord: () => getRowRecord,
@@ -58,14 +76,16 @@ __export(src_exports, {
58
76
  getUniqueId: () => getUniqueId,
59
77
  getValueFormatter: () => getValueFormatter,
60
78
  hasHeadings: () => hasHeadings,
61
- indexRows: () => indexRows,
62
79
  invariant: () => invariant,
63
80
  isAndFilter: () => isAndFilter,
64
81
  isCharacterKey: () => isCharacterKey,
65
- isEmptyRow: () => isEmptyRow,
82
+ isDataLoading: () => isDataLoading,
66
83
  isFilterClause: () => isFilterClause,
67
84
  isGroupColumn: () => isGroupColumn,
68
85
  isInFilter: () => isInFilter,
86
+ isJsonAttribute: () => isJsonAttribute,
87
+ isJsonColumn: () => isJsonColumn,
88
+ isJsonGroup: () => isJsonGroup,
69
89
  isKeyedColumn: () => isKeyedColumn,
70
90
  isMultiClauseFilter: () => isMultiClauseFilter,
71
91
  isMultiValueFilter: () => isMultiValueFilter,
@@ -80,6 +100,7 @@ __export(src_exports, {
80
100
  isTypeDescriptor: () => isTypeDescriptor,
81
101
  isValidNumber: () => isValidNumber,
82
102
  itemsChanged: () => itemsChanged,
103
+ jsonToDataSourceRows: () => jsonToDataSourceRows,
83
104
  lastWord: () => lastWord,
84
105
  logger: () => logger,
85
106
  mapSortCriteria: () => mapSortCriteria,
@@ -96,9 +117,9 @@ __export(src_exports, {
96
117
  setAggregations: () => setAggregations,
97
118
  setSortColumn: () => setSortColumn,
98
119
  sortPinnedColumns: () => sortPinnedColumns,
120
+ throttle: () => throttle,
99
121
  toColumnDescriptor: () => toColumnDescriptor,
100
122
  toDataSourceColumns: () => toDataSourceColumns,
101
- update: () => update,
102
123
  uuid: () => uuid,
103
124
  withinRange: () => withinRange
104
125
  });
@@ -293,7 +314,7 @@ var flattenColumnGroup = (columns) => {
293
314
  return columns;
294
315
  }
295
316
  };
296
- function extractGroupColumn(columns, groupBy) {
317
+ function extractGroupColumn(columns, groupBy, confirmed = true) {
297
318
  if (groupBy && groupBy.length > 0) {
298
319
  const flattenedColumns = flattenColumnGroup(columns);
299
320
  const [groupedColumns, rest] = flattenedColumns.reduce(
@@ -334,6 +355,7 @@ function extractGroupColumn(columns, groupBy) {
334
355
  heading: ["group-col"],
335
356
  isGroup: true,
336
357
  columns: groupCols,
358
+ groupConfirmed: confirmed,
337
359
  width: groupCols.map((c) => c.width).reduce((a, b) => a + b) + 100
338
360
  };
339
361
  return [groupCol, rest];
@@ -341,6 +363,15 @@ function extractGroupColumn(columns, groupBy) {
341
363
  return [null, flattenColumnGroup(columns)];
342
364
  }
343
365
  var isGroupColumn = (column) => column.isGroup === true;
366
+ var isJsonAttribute = (value) => typeof value === "string" && value.endsWith("+");
367
+ var isJsonGroup = (column, row) => {
368
+ var _a;
369
+ return ((_a = column.type) == null ? void 0 : _a.name) === "json" && isJsonAttribute(row[column.key]);
370
+ };
371
+ var isJsonColumn = (column) => {
372
+ var _a;
373
+ return ((_a = column.type) == null ? void 0 : _a.name) === "json";
374
+ };
344
375
  var sortPinnedColumns = (columns) => {
345
376
  const leftPinnedColumns = [];
346
377
  const rightPinnedColumns = [];
@@ -451,12 +482,13 @@ var collectFiltersForColumn = (filter, columnName) => {
451
482
  filters: results
452
483
  };
453
484
  };
454
- var applyGroupByToColumns = (columns, groupBy) => {
485
+ var applyGroupByToColumns = (columns, groupBy, confirmed = true) => {
455
486
  var _a;
456
487
  if (groupBy.length) {
457
488
  const [groupColumn, nonGroupedColumns] = extractGroupColumn(
458
489
  columns,
459
- groupBy
490
+ groupBy,
491
+ confirmed
460
492
  );
461
493
  if (groupColumn) {
462
494
  return [groupColumn].concat(nonGroupedColumns);
@@ -512,6 +544,19 @@ var getColumnName = (name) => {
512
544
  return name.slice(0, pos);
513
545
  }
514
546
  };
547
+ var findColumn = (columns, columnName) => {
548
+ const column = columns.find((col) => col.name === columnName);
549
+ if (column) {
550
+ return column;
551
+ } else {
552
+ const groupColumn = columns.find(
553
+ (col) => col.isGroup
554
+ );
555
+ if (groupColumn) {
556
+ return findColumn(groupColumn.columns, columnName);
557
+ }
558
+ }
559
+ };
515
560
  var toDataSourceColumns = (column) => column.expression ? `${column.name}:${column.serverDataType}:${column.expression}` : column.name;
516
561
  var getRowRecord = (row, columnMap) => {
517
562
  return Object.entries(columnMap).reduce(
@@ -522,6 +567,33 @@ var getRowRecord = (row, columnMap) => {
522
567
  {}
523
568
  );
524
569
  };
570
+ var isDataLoading = (columns) => {
571
+ return isGroupColumn(columns[0]) && columns[0].groupConfirmed === false;
572
+ };
573
+ var getColumnsInViewport = (columns, vpStart, vpEnd) => {
574
+ var _a;
575
+ const visibleColumns = [];
576
+ let preSpan = 0;
577
+ for (let offset = 0, i = 0; i < columns.length; i++) {
578
+ const column = columns[i];
579
+ if (column.hidden) {
580
+ continue;
581
+ } else if (offset + column.width < vpStart) {
582
+ if (offset + column.width + ((_a = columns[i + 1]) == null ? void 0 : _a.width) > vpStart) {
583
+ visibleColumns.push(column);
584
+ } else {
585
+ preSpan += 1;
586
+ }
587
+ } else if (offset > vpEnd) {
588
+ visibleColumns.push(column);
589
+ break;
590
+ } else {
591
+ visibleColumns.push(column);
592
+ }
593
+ offset += column.width;
594
+ }
595
+ return [visibleColumns, preSpan];
596
+ };
525
597
 
526
598
  // src/component-registry.ts
527
599
  var cellRenderersMap = /* @__PURE__ */ new Map();
@@ -539,7 +611,6 @@ var isTypeCompatible = (rendererType, serverDataType) => {
539
611
  var isCellRenderer = (type, component) => type === "cell-renderer";
540
612
  var isCellConfigPanel = (type, component) => type === "cell-config-panel";
541
613
  function registerComponent(componentName, component, type = "cell-renderer", options) {
542
- console.log("registre component");
543
614
  if (isCellRenderer(type, component)) {
544
615
  cellRenderersMap.set(componentName, component);
545
616
  } else if (isCellConfigPanel(type, component)) {
@@ -575,7 +646,11 @@ function getCellConfigPanelRenderer(name) {
575
646
  // src/range-utils.ts
576
647
  function getFullRange({ from, to }, bufferSize = 0, rowCount = Number.MAX_SAFE_INTEGER) {
577
648
  if (bufferSize === 0) {
578
- return { from, to: Math.min(to, rowCount) };
649
+ if (rowCount < from) {
650
+ return { from: 0, to: 0 };
651
+ } else {
652
+ return { from, to: Math.min(to, rowCount) };
653
+ }
579
654
  } else if (from === 0) {
580
655
  return { from, to: Math.min(to + bufferSize, rowCount) };
581
656
  } else {
@@ -734,6 +809,76 @@ var formatDate = (date, format) => {
734
809
  return date.toUTCString();
735
810
  };
736
811
 
812
+ // src/cookie-utils.ts
813
+ var getCookieValue = (name) => {
814
+ var _a, _b;
815
+ if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
816
+ return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
817
+ }
818
+ };
819
+
820
+ // src/logging-utils.ts
821
+ var NO_OP = () => void 0;
822
+ var DEFAULT_DEBUG_LEVEL = false ? "error" : "info";
823
+ var { loggingLevel = DEFAULT_DEBUG_LEVEL } = typeof loggingSettings !== "undefined" ? loggingSettings : {};
824
+ var logger = (category) => {
825
+ const debugEnabled2 = loggingLevel === "debug";
826
+ const infoEnabled = debugEnabled2 || loggingLevel === "info";
827
+ const warnEnabled = infoEnabled || loggingLevel === "warn";
828
+ const errorEnabled = warnEnabled || loggingLevel === "error";
829
+ const info = infoEnabled ? (message) => console.info(`[${category}] ${message}`) : NO_OP;
830
+ const warn = warnEnabled ? (message) => console.warn(`[${category}] ${message}`) : NO_OP;
831
+ const debug2 = debugEnabled2 ? (message) => console.debug(`[${category}] ${message}`) : NO_OP;
832
+ const error = errorEnabled ? (message) => console.error(`[${category}] ${message}`) : NO_OP;
833
+ if (false) {
834
+ return {
835
+ errorEnabled,
836
+ error
837
+ };
838
+ } else {
839
+ return {
840
+ debugEnabled: debugEnabled2,
841
+ infoEnabled,
842
+ warnEnabled,
843
+ errorEnabled,
844
+ info,
845
+ warn,
846
+ debug: debug2,
847
+ error
848
+ };
849
+ }
850
+ };
851
+ var getLoggingConfig = () => {
852
+ const loggingLevel2 = getCookieValue("vuu-logging-level");
853
+ return `const loggingSettings = { loggingLevel: "${loggingLevel2}"};`;
854
+ };
855
+
856
+ // src/debug-utils.ts
857
+ var { debug, debugEnabled } = logger("range-monitor");
858
+ var RangeMonitor = class {
859
+ constructor(source) {
860
+ this.source = source;
861
+ this.range = { from: 0, to: 0 };
862
+ this.timestamp = 0;
863
+ }
864
+ isSet() {
865
+ return this.timestamp !== 0;
866
+ }
867
+ set({ from, to }) {
868
+ const { timestamp } = this;
869
+ this.range.from = from;
870
+ this.range.to = to;
871
+ this.timestamp = performance.now();
872
+ if (timestamp) {
873
+ debugEnabled && debug(
874
+ `<${this.source}> [${from}-${to}], ${(this.timestamp - timestamp).toFixed(0)} ms elapsed`
875
+ );
876
+ } else {
877
+ return 0;
878
+ }
879
+ }
880
+ };
881
+
737
882
  // src/html-utils.ts
738
883
  var createEl = (elementType, className, textContent) => {
739
884
  const el = document.createElement(elementType);
@@ -753,31 +898,29 @@ function isArrayOfListeners(listeners) {
753
898
  function isOnlyListener(listeners) {
754
899
  return !Array.isArray(listeners);
755
900
  }
901
+ var _events;
756
902
  var EventEmitter = class {
757
903
  constructor() {
758
- this._events = {};
904
+ __privateAdd(this, _events, /* @__PURE__ */ new Map());
759
905
  }
760
- addListener(type, listener) {
761
- if (!this._events) {
762
- this._events = {};
763
- }
764
- const listeners = this._events[type];
906
+ addListener(event, listener) {
907
+ const listeners = __privateGet(this, _events).get(event);
765
908
  if (!listeners) {
766
- this._events[type] = listener;
909
+ __privateGet(this, _events).set(event, listener);
767
910
  } else if (isArrayOfListeners(listeners)) {
768
911
  listeners.push(listener);
769
912
  } else if (isOnlyListener(listeners)) {
770
- this._events[type] = [listeners, listener];
913
+ __privateGet(this, _events).set(event, [listeners, listener]);
771
914
  }
772
915
  }
773
- removeListener(type, listener) {
774
- if (!this._events || !this._events[type]) {
916
+ removeListener(event, listener) {
917
+ if (!__privateGet(this, _events).has(event)) {
775
918
  return;
776
919
  }
777
- const listenerOrListeners = this._events[type];
920
+ const listenerOrListeners = __privateGet(this, _events).get(event);
778
921
  let position = -1;
779
922
  if (listenerOrListeners === listener) {
780
- delete this._events[type];
923
+ __privateGet(this, _events).delete(event);
781
924
  } else if (Array.isArray(listenerOrListeners)) {
782
925
  for (let i = length; i-- > 0; ) {
783
926
  if (listenerOrListeners[i] === listener) {
@@ -790,63 +933,58 @@ var EventEmitter = class {
790
933
  }
791
934
  if (listenerOrListeners.length === 1) {
792
935
  listenerOrListeners.length = 0;
793
- delete this._events[type];
936
+ __privateGet(this, _events).delete(event);
794
937
  } else {
795
938
  listenerOrListeners.splice(position, 1);
796
939
  }
797
940
  }
798
941
  }
799
- removeAllListeners(type) {
800
- if (!this._events) {
801
- return;
802
- } else if (type === void 0) {
803
- delete this._events;
804
- } else {
805
- delete this._events[type];
942
+ removeAllListeners(event) {
943
+ if (event && __privateGet(this, _events).has(event)) {
944
+ __privateGet(this, _events).delete(event);
945
+ } else if (event === void 0) {
946
+ __privateGet(this, _events).clear();
806
947
  }
807
948
  }
808
- emit(type, ...args) {
809
- if (this._events) {
810
- const handler = this._events[type];
949
+ emit(event, ...args) {
950
+ if (__privateGet(this, _events)) {
951
+ const handler = __privateGet(this, _events).get(event);
811
952
  if (handler) {
812
- invokeHandler(handler, type, args);
813
- }
814
- const wildcardHandler = this._events["*"];
815
- if (wildcardHandler) {
816
- invokeHandler(wildcardHandler, type, args);
953
+ this.invokeHandler(handler, args);
817
954
  }
818
955
  }
819
956
  }
820
- once(type, listener) {
821
- const handler = (evtName, message) => {
822
- this.removeListener(evtName, handler);
823
- listener(evtName, message);
957
+ once(event, listener) {
958
+ const handler = (...args) => {
959
+ this.removeListener(event, handler);
960
+ listener(...args);
824
961
  };
825
- this.on(type, handler);
962
+ this.on(event, handler);
826
963
  }
827
- on(type, listener) {
828
- return this.addListener(type, listener);
964
+ on(event, listener) {
965
+ this.addListener(event, listener);
829
966
  }
830
- };
831
- function invokeHandler(handler, type, args) {
832
- if (isArrayOfListeners(handler)) {
833
- handler.slice().forEach((listener) => invokeHandler(listener, type, args));
834
- } else {
835
- switch (args.length) {
836
- case 0:
837
- handler(type);
838
- break;
839
- case 1:
840
- handler(type, args[0]);
841
- break;
842
- case 2:
843
- handler(type, args[0], args[1]);
844
- break;
845
- default:
846
- handler.call(null, type, ...args);
967
+ invokeHandler(handler, args) {
968
+ if (isArrayOfListeners(handler)) {
969
+ handler.slice().forEach((listener) => this.invokeHandler(listener, args));
970
+ } else {
971
+ switch (args.length) {
972
+ case 0:
973
+ handler();
974
+ break;
975
+ case 1:
976
+ handler(args[0]);
977
+ break;
978
+ case 2:
979
+ handler(args[0], args[1]);
980
+ break;
981
+ default:
982
+ handler.call(null, ...args);
983
+ }
847
984
  }
848
985
  }
849
- }
986
+ };
987
+ _events = new WeakMap();
850
988
 
851
989
  // src/round-decimal.ts
852
990
  var PUNCTUATION_STR = String.fromCharCode(8200);
@@ -1034,6 +1172,136 @@ function invariant(condition, message) {
1034
1172
  }
1035
1173
  }
1036
1174
 
1175
+ // src/json-utils.ts
1176
+ var { COUNT } = metadataKeys;
1177
+ var isJsonData = (value) => typeof value === "object" && value !== null;
1178
+ var vuuRowDataItemTypes = ["boolean", "number", "string"];
1179
+ var isVuuRowDataItem = (value) => vuuRowDataItemTypes.includes(typeof value);
1180
+ var typeofVuuDataItem = (value) => typeof value === "boolean" ? "boolean" : typeof value === "number" ? "number" : "string";
1181
+ var getCellValue = (attribute, attributeValue) => {
1182
+ if (isJsonData(attributeValue)) {
1183
+ return { attribute: `${attribute}+`, attributeValue: "", type: "json" };
1184
+ } else if (isVuuRowDataItem(attributeValue)) {
1185
+ return {
1186
+ attribute,
1187
+ attributeValue,
1188
+ type: typeofVuuDataItem(attributeValue)
1189
+ };
1190
+ } else {
1191
+ throw Error(`unsupported type ${typeof attributeValue} in JSON`);
1192
+ }
1193
+ };
1194
+ var jsonColumnType = {
1195
+ name: "json",
1196
+ renderer: {
1197
+ name: "json"
1198
+ }
1199
+ };
1200
+ var jsonToDataSourceRows = (json) => {
1201
+ const cols = [];
1202
+ cols.push(
1203
+ {
1204
+ name: "col 1",
1205
+ type: jsonColumnType
1206
+ },
1207
+ {
1208
+ name: "col 2",
1209
+ type: jsonColumnType
1210
+ }
1211
+ );
1212
+ const rows = [];
1213
+ addChildValues(rows, json, cols);
1214
+ return [cols, rows];
1215
+ };
1216
+ var addChildValues = (rows, json, cols, index = { value: 0 }, keyBase = "$root", depth = 0) => {
1217
+ let leafCount = 0;
1218
+ let rowCount = 0;
1219
+ if (depth === cols.length - 1) {
1220
+ cols.push({
1221
+ name: `col ${cols.length + 1}`,
1222
+ hidden: true,
1223
+ type: jsonColumnType
1224
+ });
1225
+ }
1226
+ const columnEntries = Object.entries(json);
1227
+ for (let i = 0; i < columnEntries.length; i++, index.value += 1) {
1228
+ const [key, value] = columnEntries[i];
1229
+ const { attribute, attributeValue, type } = getCellValue(key, value);
1230
+ const isLeaf = type !== "json";
1231
+ const blanks = Array(depth).fill("");
1232
+ const fullKey = `${keyBase}|${key}`;
1233
+ const row = [index.value, index.value, isLeaf, false, depth, 0, fullKey, 0, ...blanks, attribute, attributeValue];
1234
+ rows.push(row);
1235
+ rowCount += 1;
1236
+ if (isJsonData(value)) {
1237
+ const [nestedLeafCount, nestedRowCount] = addChildValues(
1238
+ rows,
1239
+ value,
1240
+ cols,
1241
+ { value: index.value + 1 },
1242
+ fullKey,
1243
+ depth + 1
1244
+ );
1245
+ row[COUNT] = nestedLeafCount;
1246
+ leafCount += nestedLeafCount;
1247
+ rowCount += nestedRowCount;
1248
+ index.value += nestedRowCount;
1249
+ } else {
1250
+ leafCount += 1;
1251
+ }
1252
+ }
1253
+ return [leafCount, rowCount];
1254
+ };
1255
+
1256
+ // src/keyset.ts
1257
+ var KeySet = class {
1258
+ constructor(range) {
1259
+ this.keys = /* @__PURE__ */ new Map();
1260
+ this.free = [];
1261
+ this.nextKeyValue = 0;
1262
+ this.reset(range);
1263
+ }
1264
+ next() {
1265
+ if (this.free.length > 0) {
1266
+ return this.free.pop();
1267
+ } else {
1268
+ return this.nextKeyValue++;
1269
+ }
1270
+ }
1271
+ reset({ from, to }) {
1272
+ this.keys.forEach((keyValue, rowIndex) => {
1273
+ if (rowIndex < from || rowIndex >= to) {
1274
+ this.free.push(keyValue);
1275
+ this.keys.delete(rowIndex);
1276
+ }
1277
+ });
1278
+ const size = to - from;
1279
+ if (this.keys.size + this.free.length > size) {
1280
+ this.free.length = size - this.keys.size;
1281
+ }
1282
+ for (let rowIndex = from; rowIndex < to; rowIndex++) {
1283
+ if (!this.keys.has(rowIndex)) {
1284
+ const nextKeyValue = this.next();
1285
+ this.keys.set(rowIndex, nextKeyValue);
1286
+ }
1287
+ }
1288
+ }
1289
+ keyFor(rowIndex) {
1290
+ const key = this.keys.get(rowIndex);
1291
+ if (key === void 0) {
1292
+ console.log(`key not found
1293
+ keys: ${this.toDebugString()}
1294
+ free : ${this.free.join(",")}
1295
+ `);
1296
+ throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);
1297
+ }
1298
+ return key;
1299
+ }
1300
+ toDebugString() {
1301
+ return Array.from(this.keys.entries()).map((k, v) => `${k}=>${v}`).join(",");
1302
+ }
1303
+ };
1304
+
1037
1305
  // src/nanoid/index.ts
1038
1306
  var uuid = (size = 21) => {
1039
1307
  let id = "";
@@ -1053,35 +1321,35 @@ var uuid = (size = 21) => {
1053
1321
  return id;
1054
1322
  };
1055
1323
 
1056
- // src/row-utils.ts
1057
- function addRowsToIndex(rows, index, indexField) {
1058
- for (let idx = 0, len = rows.length; idx < len; idx++) {
1059
- index[rows[idx][indexField]] = idx;
1060
- }
1061
- return index;
1062
- }
1063
- function indexRows(rows, indexField) {
1064
- return addRowsToIndex(rows, {}, indexField);
1065
- }
1066
- function isEmptyRow(row) {
1067
- return row[0] === void 0;
1324
+ // src/perf-utils.ts
1325
+ function debounce(callback, timeInterval) {
1326
+ let timeout;
1327
+ return (...args) => {
1328
+ clearTimeout(timeout);
1329
+ timeout = window.setTimeout(() => callback(...args), timeInterval);
1330
+ };
1068
1331
  }
1069
- function update(rows, updates) {
1070
- const results = rows.slice();
1071
- const [[offsetIdx]] = rows;
1072
- for (let i = 0; i < updates.length; i++) {
1073
- const idx = updates[i][0] - offsetIdx;
1074
- if (rows[idx]) {
1075
- const row = rows[idx].slice();
1076
- for (let j = 1; j < updates[i].length; j += 3) {
1077
- row[updates[i][j]] = updates[i][j + 2];
1078
- }
1079
- results[idx] = row;
1332
+ function throttle(callback, limit) {
1333
+ let wait = false;
1334
+ let lastArgs = void 0;
1335
+ function checkLastArgs() {
1336
+ if (lastArgs == void 0) {
1337
+ wait = false;
1080
1338
  } else {
1081
- console.log(`row not found in rows`);
1339
+ callback(...lastArgs);
1340
+ lastArgs = void 0;
1341
+ setTimeout(checkLastArgs, limit);
1082
1342
  }
1083
1343
  }
1084
- return results;
1344
+ return (...args) => {
1345
+ if (wait) {
1346
+ lastArgs = args;
1347
+ } else {
1348
+ callback(...args);
1349
+ wait = true;
1350
+ setTimeout(checkLastArgs, limit);
1351
+ }
1352
+ };
1085
1353
  }
1086
1354
 
1087
1355
  // src/selection-utils.ts
@@ -1106,7 +1374,9 @@ var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExisting
1106
1374
  const singleSelect = selectionModel === "single";
1107
1375
  const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
1108
1376
  const actsLikeSingleSelect = singleSelect || multiSelect && !keepExistingSelection && !rangeSelect;
1109
- if (actsLikeSingleSelect) {
1377
+ if (selectionModel === "none") {
1378
+ return NO_SELECTION;
1379
+ } else if (actsLikeSingleSelect) {
1110
1380
  return [itemIndex];
1111
1381
  } else if (rangeSelect) {
1112
1382
  if (selected.length === 0) {
@@ -1274,39 +1544,4 @@ var lastWord = (text) => {
1274
1544
  return trimmedText.slice(pos + 1);
1275
1545
  }
1276
1546
  };
1277
-
1278
- // src/logging-utils.ts
1279
- var NO_OP = () => {
1280
- };
1281
- var ConsoleLogger = class {
1282
- constructor(options, level) {
1283
- const { buildEnv } = options || {};
1284
- if (buildEnv === "production") {
1285
- this.log = NO_OP;
1286
- this.warn = NO_OP;
1287
- this.error = NO_OP;
1288
- this.group = NO_OP;
1289
- this.groupCollapsed = NO_OP;
1290
- this.groupEnd = NO_OP;
1291
- this.assert = NO_OP;
1292
- this.trace = NO_OP;
1293
- this.debug = NO_OP;
1294
- this.info = NO_OP;
1295
- this.table = NO_OP;
1296
- return;
1297
- }
1298
- this.log = console.log.bind(console);
1299
- this.warn = console.warn.bind(console);
1300
- this.error = console.error.bind(console);
1301
- this.group = console.group.bind(console);
1302
- this.groupEnd = console.groupEnd.bind(console);
1303
- this.groupCollapsed = console.groupCollapsed.bind(console);
1304
- this.assert = console.assert.bind(console);
1305
- this.trace = console.trace.bind(console);
1306
- this.debug = console.debug.bind(console);
1307
- this.info = console.info.bind(console);
1308
- this.table = console.table.bind(console);
1309
- }
1310
- };
1311
- var logger = new ConsoleLogger({ buildEnv: "development" });
1312
1547
  //# sourceMappingURL=index.js.map