@vuu-ui/vuu-utils 0.7.6-debug → 0.8.0-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
@@ -40,6 +40,7 @@ __export(src_exports, {
40
40
  EventEmitter: () => EventEmitter,
41
41
  KeySet: () => KeySet,
42
42
  RangeMonitor: () => RangeMonitor,
43
+ RowSelected: () => RowSelected,
43
44
  UP1: () => UP1,
44
45
  UP2: () => UP2,
45
46
  WindowRange: () => WindowRange,
@@ -59,6 +60,7 @@ __export(src_exports, {
59
60
  expandSelection: () => expandSelection,
60
61
  extractFilterForColumn: () => extractFilterForColumn,
61
62
  extractGroupColumn: () => extractGroupColumn,
63
+ filterAsQuery: () => filterAsQuery,
62
64
  findColumn: () => findColumn,
63
65
  flattenColumnGroup: () => flattenColumnGroup,
64
66
  formatDate: () => formatDate,
@@ -70,14 +72,18 @@ __export(src_exports, {
70
72
  getColumnsInViewport: () => getColumnsInViewport,
71
73
  getCookieValue: () => getCookieValue,
72
74
  getFullRange: () => getFullRange,
75
+ getGroupValueAndOffset: () => getGroupValueAndOffset,
73
76
  getLoggingConfigForWorker: () => getLoggingConfigForWorker,
74
77
  getMovingValueDirection: () => getMovingValueDirection,
75
78
  getRegisteredCellRenderers: () => getRegisteredCellRenderers,
76
79
  getRowRecord: () => getRowRecord,
80
+ getSelectionStatus: () => getSelectionStatus,
77
81
  getTableHeadings: () => getTableHeadings,
78
82
  getUniqueId: () => getUniqueId,
83
+ getUrlParameter: () => getUrlParameter,
79
84
  getValueFormatter: () => getValueFormatter,
80
85
  hasHeadings: () => hasHeadings,
86
+ hasUrlParameter: () => hasUrlParameter,
81
87
  invariant: () => invariant,
82
88
  isAndFilter: () => isAndFilter,
83
89
  isCharacterKey: () => isCharacterKey,
@@ -90,6 +96,7 @@ __export(src_exports, {
90
96
  isFilterClause: () => isFilterClause,
91
97
  isFilteredColumn: () => isFilteredColumn,
92
98
  isGroupColumn: () => isGroupColumn,
99
+ isGroupMenuItemDescriptor: () => isGroupMenuItemDescriptor,
93
100
  isInFilter: () => isInFilter,
94
101
  isJsonAttribute: () => isJsonAttribute,
95
102
  isJsonColumn: () => isJsonColumn,
@@ -98,11 +105,13 @@ __export(src_exports, {
98
105
  isMappedValueTypeRenderer: () => isMappedValueTypeRenderer,
99
106
  isMultiClauseFilter: () => isMultiClauseFilter,
100
107
  isMultiValueFilter: () => isMultiValueFilter,
108
+ isNamedFilter: () => isNamedFilter,
101
109
  isNumericColumn: () => isNumericColumn,
102
110
  isOrFilter: () => isOrFilter,
103
111
  isPinned: () => isPinned,
104
112
  isQuoteKey: () => isQuoteKey,
105
113
  isResizing: () => isResizing,
114
+ isRowSelected: () => isRowSelected,
106
115
  isSelected: () => isSelected,
107
116
  isSingleValueFilter: () => isSingleValueFilter,
108
117
  isTextColumn: () => isTextColumn,
@@ -124,6 +133,7 @@ __export(src_exports, {
124
133
  projectUpdates: () => projectUpdates,
125
134
  rangeNewItems: () => rangeNewItems,
126
135
  registerComponent: () => registerComponent,
136
+ removeColumnFromFilter: () => removeColumnFromFilter,
127
137
  resetRange: () => resetRange,
128
138
  roundDecimal: () => roundDecimal,
129
139
  selectItem: () => selectItem,
@@ -135,6 +145,7 @@ __export(src_exports, {
135
145
  throttle: () => throttle,
136
146
  toColumnDescriptor: () => toColumnDescriptor,
137
147
  toDataSourceColumns: () => toDataSourceColumns,
148
+ updateColumn: () => updateColumn,
138
149
  uuid: () => uuid,
139
150
  virtualRowPositioning: () => virtualRowPositioning,
140
151
  visibleColumnAtIndex: () => visibleColumnAtIndex,
@@ -205,6 +216,7 @@ var singleValueFilterOps = /* @__PURE__ */ new Set([
205
216
  "starts",
206
217
  "ends"
207
218
  ]);
219
+ var isNamedFilter = (f) => f !== void 0 && f.name !== void 0;
208
220
  var isSingleValueFilter = (f) => f !== void 0 && singleValueFilterOps.has(f.op);
209
221
  var isFilterClause = (f) => f !== void 0 && (isSingleValueFilter(f) || isMultiValueFilter(f));
210
222
  var isMultiValueFilter = (f) => f !== void 0 && f.op === "in";
@@ -214,6 +226,28 @@ var isOrFilter = (f) => f.op === "or";
214
226
  function isMultiClauseFilter(f) {
215
227
  return f !== void 0 && (f.op === "and" || f.op === "or");
216
228
  }
229
+ var filterValue = (value) => typeof value === "string" ? `"${value}"` : value;
230
+ var filterAsQuery = (f) => {
231
+ if (isMultiClauseFilter(f)) {
232
+ return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);
233
+ } else if (isMultiValueFilter(f)) {
234
+ return `${f.column} ${f.op} [${f.values.join(",")}]`;
235
+ } else {
236
+ return `${f.column} ${f.op} ${filterValue(f.value)}`;
237
+ }
238
+ };
239
+ var removeColumnFromFilter = (column, filter) => {
240
+ if (isMultiClauseFilter(filter)) {
241
+ const [clause1, clause2] = filter.filters;
242
+ if (clause1.column === column.name) {
243
+ return [clause2, filterAsQuery(clause2)];
244
+ }
245
+ if (clause2.column === column.name) {
246
+ return [clause1, filterAsQuery(clause1)];
247
+ }
248
+ }
249
+ return [void 0, ""];
250
+ };
217
251
 
218
252
  // src/column-utils.ts
219
253
  var SORT_ASC = "asc";
@@ -411,7 +445,7 @@ var sortPinnedColumns = (columns) => {
411
445
  const leftPinnedColumns = [];
412
446
  const rightPinnedColumns = [];
413
447
  const restColumns = [];
414
- let pinnedWidthLeft = 0;
448
+ let pinnedWidthLeft = 4;
415
449
  for (const column of columns) {
416
450
  switch (column.pin) {
417
451
  case "left":
@@ -487,9 +521,17 @@ var getTableHeadings = (columns) => {
487
521
  };
488
522
  var getColumnStyle = ({
489
523
  pin,
490
- pinnedOffset,
524
+ pinnedOffset = pin === "left" ? 0 : 4,
491
525
  width
492
- }) => pin === "left" ? { left: pinnedOffset, width } : pin === "right" ? { right: pinnedOffset, width } : { width };
526
+ }) => pin === "left" ? {
527
+ left: pinnedOffset,
528
+ width,
529
+ "--pin-width": `${pinnedOffset + width - 5}px`
530
+ } : pin === "right" ? {
531
+ right: pinnedOffset,
532
+ width,
533
+ "--pin-width": `${pinnedOffset + width}px`
534
+ } : { width };
493
535
  var setAggregations = (aggregations, column, aggType) => {
494
536
  return aggregations.filter((agg) => agg.column !== column.name).concat({ column: column.name, aggType });
495
537
  };
@@ -601,6 +643,17 @@ var findColumn = (columns, columnName) => {
601
643
  }
602
644
  }
603
645
  };
646
+ function updateColumn(columns, column, options) {
647
+ const targetColumn = typeof column === "string" ? columns.find((col) => col.name === column) : column;
648
+ if (targetColumn) {
649
+ const replacementColumn = options ? { ...targetColumn, ...options } : targetColumn;
650
+ return columns.map(
651
+ (col) => col.name === replacementColumn.name ? replacementColumn : col
652
+ );
653
+ } else {
654
+ throw Error("column-utils.replaceColun, column not found");
655
+ }
656
+ }
604
657
  var toDataSourceColumns = (column) => column.expression ? `${column.name}:${column.serverDataType}:${column.expression}` : column.name;
605
658
  var getRowRecord = (row, columnMap) => {
606
659
  return Object.entries(columnMap).reduce(
@@ -648,6 +701,27 @@ var visibleColumnAtIndex = (columns, index) => {
648
701
  return columns.filter(isNotHidden).at(index);
649
702
  }
650
703
  };
704
+ var { DEPTH, IS_LEAF } = metadataKeys;
705
+ var getGroupValueAndOffset = (columns, row) => {
706
+ const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;
707
+ if (isLeaf || depth > columns.length) {
708
+ return [null, depth === null ? 0 : Math.max(0, depth - 1)];
709
+ } else if (depth === 0) {
710
+ return ["$root", 0];
711
+ } else {
712
+ const { key, valueFormatter } = columns[depth - 1];
713
+ const value = valueFormatter(row[key]);
714
+ return [value, depth - 1];
715
+ }
716
+ };
717
+
718
+ // src/cookie-utils.ts
719
+ var getCookieValue = (name) => {
720
+ var _a, _b;
721
+ if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
722
+ return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
723
+ }
724
+ };
651
725
 
652
726
  // src/component-registry.ts
653
727
  var cellRenderersMap = /* @__PURE__ */ new Map();
@@ -893,14 +967,6 @@ var formatDate = (date, format = "dd.mm.yyyy") => {
893
967
  }
894
968
  };
895
969
 
896
- // src/cookie-utils.ts
897
- var getCookieValue = (name) => {
898
- var _a, _b;
899
- if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
900
- return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
901
- }
902
- };
903
-
904
970
  // src/logging-utils.ts
905
971
  var logLevels = ["error", "warn", "info", "debug"];
906
972
  var isValidLogLevel = (value) => typeof value === "string" && logLevels.includes(value);
@@ -1435,6 +1501,9 @@ var KeySet = class {
1435
1501
  }
1436
1502
  };
1437
1503
 
1504
+ // src/menu-utils.ts
1505
+ var isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
1506
+
1438
1507
  // src/nanoid/index.ts
1439
1508
  var uuid = (size = 21) => {
1440
1509
  let id = "";
@@ -1505,6 +1574,14 @@ var virtualRowPositioning = (rowHeight, additionalPixelsNeeded, pctScrollTop) =>
1505
1574
 
1506
1575
  // src/selection-utils.ts
1507
1576
  var NO_SELECTION = [];
1577
+ var { SELECTED } = metadataKeys;
1578
+ var RowSelected = {
1579
+ False: 0,
1580
+ True: 1,
1581
+ First: 2,
1582
+ Last: 4
1583
+ };
1584
+ var isRowSelected = (row) => (row[SELECTED] & RowSelected.True) === RowSelected.True;
1508
1585
  var inAscendingOrder = (item1, item2) => {
1509
1586
  const n1 = typeof item1 === "number" ? item1 : item1[0];
1510
1587
  const n2 = typeof item2 === "number" ? item2 : item2[0];
@@ -1521,6 +1598,58 @@ var deselectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExisti
1521
1598
  }
1522
1599
  return NO_SELECTION;
1523
1600
  };
1601
+ var newSelectedFillsGapOrExtends = (selection, itemIndex) => {
1602
+ for (let i = 0; i < selection.length; i++) {
1603
+ const item = selection[i];
1604
+ if (typeof item === "number") {
1605
+ if (item === itemIndex - 1) {
1606
+ return true;
1607
+ } else if (item > itemIndex) {
1608
+ return false;
1609
+ }
1610
+ } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {
1611
+ return true;
1612
+ } else if (item[0] > itemIndex) {
1613
+ return false;
1614
+ }
1615
+ }
1616
+ return false;
1617
+ };
1618
+ var fillGapOrExtendSelection = (selection, itemIndex) => {
1619
+ for (let i = 0; i < selection.length; i++) {
1620
+ const item = selection[i];
1621
+ if (typeof item === "number") {
1622
+ if (item === itemIndex - 1) {
1623
+ const nextSelectionItem = selection[i + 1];
1624
+ if (nextSelectionItem === itemIndex + 1) {
1625
+ const newRange = [item, nextSelectionItem];
1626
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
1627
+ } else {
1628
+ const newRange = [item, itemIndex];
1629
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
1630
+ }
1631
+ } else if (item > itemIndex) {
1632
+ break;
1633
+ }
1634
+ } else if (item[0] === itemIndex + 1) {
1635
+ const newRange = [itemIndex, item[1]];
1636
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
1637
+ } else if (item[1] === itemIndex - 1) {
1638
+ const nextItem = selection[i + 1];
1639
+ if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {
1640
+ const newRange = [item[0], nextItem[1]];
1641
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
1642
+ } else if (typeof nextItem === "number" && nextItem === itemIndex + 1) {
1643
+ const newRange = [item[0], nextItem];
1644
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
1645
+ } else {
1646
+ const newRange = [item[0], itemIndex];
1647
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
1648
+ }
1649
+ }
1650
+ }
1651
+ return selection;
1652
+ };
1524
1653
  var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false, activeItemIndex = -1) => {
1525
1654
  const singleSelect = selectionModel === "single";
1526
1655
  const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
@@ -1537,7 +1666,11 @@ var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExisting
1537
1666
  return insertRange(selected, range);
1538
1667
  }
1539
1668
  } else if (!rangeSelect) {
1540
- return selected == null ? void 0 : selected.concat(itemIndex).sort(inAscendingOrder);
1669
+ if (newSelectedFillsGapOrExtends(selected, itemIndex)) {
1670
+ return fillGapOrExtendSelection(selected, itemIndex);
1671
+ } else {
1672
+ return selected == null ? void 0 : selected.concat(itemIndex).sort(inAscendingOrder);
1673
+ }
1541
1674
  } else if (multiSelect) {
1542
1675
  }
1543
1676
  return NO_SELECTION;
@@ -1593,6 +1726,27 @@ var includedInRange = (selectedItem, index) => {
1593
1726
  return rangeIncludes(selectedItem, index);
1594
1727
  };
1595
1728
  var rangeIncludes = (range, index) => index >= range[0] && index <= range[1];
1729
+ var SINGLE_SELECTED_ROW = RowSelected.True + RowSelected.First + RowSelected.Last;
1730
+ var FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;
1731
+ var LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;
1732
+ var getSelectionStatus = (selected, itemIndex) => {
1733
+ for (const item of selected) {
1734
+ if (typeof item === "number") {
1735
+ if (item === itemIndex) {
1736
+ return SINGLE_SELECTED_ROW;
1737
+ }
1738
+ } else if (rangeIncludes(item, itemIndex)) {
1739
+ if (itemIndex === item[0]) {
1740
+ return FIRST_SELECTED_ROW_OF_BLOCK;
1741
+ } else if (itemIndex === item[1]) {
1742
+ return LAST_SELECTED_ROW_OF_BLOCK;
1743
+ } else {
1744
+ return RowSelected.True;
1745
+ }
1746
+ }
1747
+ }
1748
+ return RowSelected.False;
1749
+ };
1596
1750
  var isSelected = (selected, itemIndex) => {
1597
1751
  for (const item of selected) {
1598
1752
  if (typeof item === "number") {
@@ -1695,4 +1849,11 @@ var lastWord = (text) => {
1695
1849
  return trimmedText.slice(pos + 1);
1696
1850
  }
1697
1851
  };
1852
+
1853
+ // src/url-utils.ts
1854
+ var getUrlParameter = (paramName, defaultValue) => {
1855
+ var _a;
1856
+ return (_a = new URL(document.location.href).searchParams.get(paramName)) != null ? _a : defaultValue;
1857
+ };
1858
+ var hasUrlParameter = (paramName) => new URL(document.location.href).searchParams.has(paramName);
1698
1859
  //# sourceMappingURL=index.js.map