@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/esm/index.js CHANGED
@@ -75,6 +75,7 @@ var singleValueFilterOps = /* @__PURE__ */ new Set([
75
75
  "starts",
76
76
  "ends"
77
77
  ]);
78
+ var isNamedFilter = (f) => f !== void 0 && f.name !== void 0;
78
79
  var isSingleValueFilter = (f) => f !== void 0 && singleValueFilterOps.has(f.op);
79
80
  var isFilterClause = (f) => f !== void 0 && (isSingleValueFilter(f) || isMultiValueFilter(f));
80
81
  var isMultiValueFilter = (f) => f !== void 0 && f.op === "in";
@@ -84,6 +85,28 @@ var isOrFilter = (f) => f.op === "or";
84
85
  function isMultiClauseFilter(f) {
85
86
  return f !== void 0 && (f.op === "and" || f.op === "or");
86
87
  }
88
+ var filterValue = (value) => typeof value === "string" ? `"${value}"` : value;
89
+ var filterAsQuery = (f) => {
90
+ if (isMultiClauseFilter(f)) {
91
+ return f.filters.map((filter) => filterAsQuery(filter)).join(` ${f.op} `);
92
+ } else if (isMultiValueFilter(f)) {
93
+ return `${f.column} ${f.op} [${f.values.join(",")}]`;
94
+ } else {
95
+ return `${f.column} ${f.op} ${filterValue(f.value)}`;
96
+ }
97
+ };
98
+ var removeColumnFromFilter = (column, filter) => {
99
+ if (isMultiClauseFilter(filter)) {
100
+ const [clause1, clause2] = filter.filters;
101
+ if (clause1.column === column.name) {
102
+ return [clause2, filterAsQuery(clause2)];
103
+ }
104
+ if (clause2.column === column.name) {
105
+ return [clause1, filterAsQuery(clause1)];
106
+ }
107
+ }
108
+ return [void 0, ""];
109
+ };
87
110
 
88
111
  // src/column-utils.ts
89
112
  var SORT_ASC = "asc";
@@ -281,7 +304,7 @@ var sortPinnedColumns = (columns) => {
281
304
  const leftPinnedColumns = [];
282
305
  const rightPinnedColumns = [];
283
306
  const restColumns = [];
284
- let pinnedWidthLeft = 0;
307
+ let pinnedWidthLeft = 4;
285
308
  for (const column of columns) {
286
309
  switch (column.pin) {
287
310
  case "left":
@@ -357,9 +380,17 @@ var getTableHeadings = (columns) => {
357
380
  };
358
381
  var getColumnStyle = ({
359
382
  pin,
360
- pinnedOffset,
383
+ pinnedOffset = pin === "left" ? 0 : 4,
361
384
  width
362
- }) => pin === "left" ? { left: pinnedOffset, width } : pin === "right" ? { right: pinnedOffset, width } : { width };
385
+ }) => pin === "left" ? {
386
+ left: pinnedOffset,
387
+ width,
388
+ "--pin-width": `${pinnedOffset + width - 5}px`
389
+ } : pin === "right" ? {
390
+ right: pinnedOffset,
391
+ width,
392
+ "--pin-width": `${pinnedOffset + width}px`
393
+ } : { width };
363
394
  var setAggregations = (aggregations, column, aggType) => {
364
395
  return aggregations.filter((agg) => agg.column !== column.name).concat({ column: column.name, aggType });
365
396
  };
@@ -471,6 +502,17 @@ var findColumn = (columns, columnName) => {
471
502
  }
472
503
  }
473
504
  };
505
+ function updateColumn(columns, column, options) {
506
+ const targetColumn = typeof column === "string" ? columns.find((col) => col.name === column) : column;
507
+ if (targetColumn) {
508
+ const replacementColumn = options ? { ...targetColumn, ...options } : targetColumn;
509
+ return columns.map(
510
+ (col) => col.name === replacementColumn.name ? replacementColumn : col
511
+ );
512
+ } else {
513
+ throw Error("column-utils.replaceColun, column not found");
514
+ }
515
+ }
474
516
  var toDataSourceColumns = (column) => column.expression ? `${column.name}:${column.serverDataType}:${column.expression}` : column.name;
475
517
  var getRowRecord = (row, columnMap) => {
476
518
  return Object.entries(columnMap).reduce(
@@ -518,6 +560,27 @@ var visibleColumnAtIndex = (columns, index) => {
518
560
  return columns.filter(isNotHidden).at(index);
519
561
  }
520
562
  };
563
+ var { DEPTH, IS_LEAF } = metadataKeys;
564
+ var getGroupValueAndOffset = (columns, row) => {
565
+ const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;
566
+ if (isLeaf || depth > columns.length) {
567
+ return [null, depth === null ? 0 : Math.max(0, depth - 1)];
568
+ } else if (depth === 0) {
569
+ return ["$root", 0];
570
+ } else {
571
+ const { key, valueFormatter } = columns[depth - 1];
572
+ const value = valueFormatter(row[key]);
573
+ return [value, depth - 1];
574
+ }
575
+ };
576
+
577
+ // src/cookie-utils.ts
578
+ var getCookieValue = (name) => {
579
+ var _a, _b;
580
+ if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
581
+ return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
582
+ }
583
+ };
521
584
 
522
585
  // src/component-registry.ts
523
586
  var cellRenderersMap = /* @__PURE__ */ new Map();
@@ -763,14 +826,6 @@ var formatDate = (date, format = "dd.mm.yyyy") => {
763
826
  }
764
827
  };
765
828
 
766
- // src/cookie-utils.ts
767
- var getCookieValue = (name) => {
768
- var _a, _b;
769
- if (((_a = globalThis.document) == null ? void 0 : _a.cookie) !== void 0) {
770
- return (_b = globalThis.document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _b.split("=")[1];
771
- }
772
- };
773
-
774
829
  // src/logging-utils.ts
775
830
  var logLevels = ["error", "warn", "info", "debug"];
776
831
  var isValidLogLevel = (value) => typeof value === "string" && logLevels.includes(value);
@@ -1305,6 +1360,9 @@ var KeySet = class {
1305
1360
  }
1306
1361
  };
1307
1362
 
1363
+ // src/menu-utils.ts
1364
+ var isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
1365
+
1308
1366
  // src/nanoid/index.ts
1309
1367
  var uuid = (size = 21) => {
1310
1368
  let id = "";
@@ -1375,6 +1433,14 @@ var virtualRowPositioning = (rowHeight, additionalPixelsNeeded, pctScrollTop) =>
1375
1433
 
1376
1434
  // src/selection-utils.ts
1377
1435
  var NO_SELECTION = [];
1436
+ var { SELECTED } = metadataKeys;
1437
+ var RowSelected = {
1438
+ False: 0,
1439
+ True: 1,
1440
+ First: 2,
1441
+ Last: 4
1442
+ };
1443
+ var isRowSelected = (row) => (row[SELECTED] & RowSelected.True) === RowSelected.True;
1378
1444
  var inAscendingOrder = (item1, item2) => {
1379
1445
  const n1 = typeof item1 === "number" ? item1 : item1[0];
1380
1446
  const n2 = typeof item2 === "number" ? item2 : item2[0];
@@ -1391,6 +1457,58 @@ var deselectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExisti
1391
1457
  }
1392
1458
  return NO_SELECTION;
1393
1459
  };
1460
+ var newSelectedFillsGapOrExtends = (selection, itemIndex) => {
1461
+ for (let i = 0; i < selection.length; i++) {
1462
+ const item = selection[i];
1463
+ if (typeof item === "number") {
1464
+ if (item === itemIndex - 1) {
1465
+ return true;
1466
+ } else if (item > itemIndex) {
1467
+ return false;
1468
+ }
1469
+ } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {
1470
+ return true;
1471
+ } else if (item[0] > itemIndex) {
1472
+ return false;
1473
+ }
1474
+ }
1475
+ return false;
1476
+ };
1477
+ var fillGapOrExtendSelection = (selection, itemIndex) => {
1478
+ for (let i = 0; i < selection.length; i++) {
1479
+ const item = selection[i];
1480
+ if (typeof item === "number") {
1481
+ if (item === itemIndex - 1) {
1482
+ const nextSelectionItem = selection[i + 1];
1483
+ if (nextSelectionItem === itemIndex + 1) {
1484
+ const newRange = [item, nextSelectionItem];
1485
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
1486
+ } else {
1487
+ const newRange = [item, itemIndex];
1488
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
1489
+ }
1490
+ } else if (item > itemIndex) {
1491
+ break;
1492
+ }
1493
+ } else if (item[0] === itemIndex + 1) {
1494
+ const newRange = [itemIndex, item[1]];
1495
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
1496
+ } else if (item[1] === itemIndex - 1) {
1497
+ const nextItem = selection[i + 1];
1498
+ if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {
1499
+ const newRange = [item[0], nextItem[1]];
1500
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
1501
+ } else if (typeof nextItem === "number" && nextItem === itemIndex + 1) {
1502
+ const newRange = [item[0], nextItem];
1503
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 2));
1504
+ } else {
1505
+ const newRange = [item[0], itemIndex];
1506
+ return selection.slice(0, i).concat([newRange]).concat(selection.slice(i + 1));
1507
+ }
1508
+ }
1509
+ }
1510
+ return selection;
1511
+ };
1394
1512
  var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExistingSelection = false, activeItemIndex = -1) => {
1395
1513
  const singleSelect = selectionModel === "single";
1396
1514
  const multiSelect = selectionModel === "extended" || selectionModel === "checkbox";
@@ -1407,7 +1525,11 @@ var selectItem = (selectionModel, selected, itemIndex, rangeSelect, keepExisting
1407
1525
  return insertRange(selected, range);
1408
1526
  }
1409
1527
  } else if (!rangeSelect) {
1410
- return selected == null ? void 0 : selected.concat(itemIndex).sort(inAscendingOrder);
1528
+ if (newSelectedFillsGapOrExtends(selected, itemIndex)) {
1529
+ return fillGapOrExtendSelection(selected, itemIndex);
1530
+ } else {
1531
+ return selected == null ? void 0 : selected.concat(itemIndex).sort(inAscendingOrder);
1532
+ }
1411
1533
  } else if (multiSelect) {
1412
1534
  }
1413
1535
  return NO_SELECTION;
@@ -1463,6 +1585,27 @@ var includedInRange = (selectedItem, index) => {
1463
1585
  return rangeIncludes(selectedItem, index);
1464
1586
  };
1465
1587
  var rangeIncludes = (range, index) => index >= range[0] && index <= range[1];
1588
+ var SINGLE_SELECTED_ROW = RowSelected.True + RowSelected.First + RowSelected.Last;
1589
+ var FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;
1590
+ var LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;
1591
+ var getSelectionStatus = (selected, itemIndex) => {
1592
+ for (const item of selected) {
1593
+ if (typeof item === "number") {
1594
+ if (item === itemIndex) {
1595
+ return SINGLE_SELECTED_ROW;
1596
+ }
1597
+ } else if (rangeIncludes(item, itemIndex)) {
1598
+ if (itemIndex === item[0]) {
1599
+ return FIRST_SELECTED_ROW_OF_BLOCK;
1600
+ } else if (itemIndex === item[1]) {
1601
+ return LAST_SELECTED_ROW_OF_BLOCK;
1602
+ } else {
1603
+ return RowSelected.True;
1604
+ }
1605
+ }
1606
+ }
1607
+ return RowSelected.False;
1608
+ };
1466
1609
  var isSelected = (selected, itemIndex) => {
1467
1610
  for (const item of selected) {
1468
1611
  if (typeof item === "number") {
@@ -1565,6 +1708,13 @@ var lastWord = (text) => {
1565
1708
  return trimmedText.slice(pos + 1);
1566
1709
  }
1567
1710
  };
1711
+
1712
+ // src/url-utils.ts
1713
+ var getUrlParameter = (paramName, defaultValue) => {
1714
+ var _a;
1715
+ return (_a = new URL(document.location.href).searchParams.get(paramName)) != null ? _a : defaultValue;
1716
+ };
1717
+ var hasUrlParameter = (paramName) => new URL(document.location.href).searchParams.has(paramName);
1568
1718
  export {
1569
1719
  AggregationType,
1570
1720
  DOWN1,
@@ -1573,6 +1723,7 @@ export {
1573
1723
  EventEmitter,
1574
1724
  KeySet,
1575
1725
  RangeMonitor,
1726
+ RowSelected,
1576
1727
  UP1,
1577
1728
  UP2,
1578
1729
  WindowRange,
@@ -1592,6 +1743,7 @@ export {
1592
1743
  expandSelection,
1593
1744
  extractFilterForColumn,
1594
1745
  extractGroupColumn,
1746
+ filterAsQuery,
1595
1747
  findColumn,
1596
1748
  flattenColumnGroup,
1597
1749
  formatDate,
@@ -1603,14 +1755,18 @@ export {
1603
1755
  getColumnsInViewport,
1604
1756
  getCookieValue,
1605
1757
  getFullRange,
1758
+ getGroupValueAndOffset,
1606
1759
  getLoggingConfigForWorker,
1607
1760
  getMovingValueDirection,
1608
1761
  getRegisteredCellRenderers,
1609
1762
  getRowRecord,
1763
+ getSelectionStatus,
1610
1764
  getTableHeadings,
1611
1765
  getUniqueId,
1766
+ getUrlParameter,
1612
1767
  getValueFormatter,
1613
1768
  hasHeadings,
1769
+ hasUrlParameter,
1614
1770
  invariant,
1615
1771
  isAndFilter,
1616
1772
  isCharacterKey,
@@ -1623,6 +1779,7 @@ export {
1623
1779
  isFilterClause,
1624
1780
  isFilteredColumn,
1625
1781
  isGroupColumn,
1782
+ isGroupMenuItemDescriptor,
1626
1783
  isInFilter,
1627
1784
  isJsonAttribute,
1628
1785
  isJsonColumn,
@@ -1631,11 +1788,13 @@ export {
1631
1788
  isMappedValueTypeRenderer,
1632
1789
  isMultiClauseFilter,
1633
1790
  isMultiValueFilter,
1791
+ isNamedFilter,
1634
1792
  isNumericColumn,
1635
1793
  isOrFilter,
1636
1794
  isPinned,
1637
1795
  isQuoteKey,
1638
1796
  isResizing,
1797
+ isRowSelected,
1639
1798
  isSelected,
1640
1799
  isSingleValueFilter,
1641
1800
  isTextColumn,
@@ -1657,6 +1816,7 @@ export {
1657
1816
  projectUpdates,
1658
1817
  rangeNewItems,
1659
1818
  registerComponent,
1819
+ removeColumnFromFilter,
1660
1820
  resetRange,
1661
1821
  roundDecimal,
1662
1822
  selectItem,
@@ -1668,6 +1828,7 @@ export {
1668
1828
  throttle,
1669
1829
  toColumnDescriptor,
1670
1830
  toDataSourceColumns,
1831
+ updateColumn,
1671
1832
  uuid,
1672
1833
  virtualRowPositioning,
1673
1834
  visibleColumnAtIndex,