@economic/taco 2.4.3 → 2.6.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.
Files changed (70) hide show
  1. package/dist/components/Icon/components/ChartArea.d.ts +3 -0
  2. package/dist/components/Icon/components/ChartBar.d.ts +3 -0
  3. package/dist/components/Icon/components/ChartLine.d.ts +3 -0
  4. package/dist/components/Icon/components/ChartPie.d.ts +3 -0
  5. package/dist/components/Icon/components/ChartTable.d.ts +3 -0
  6. package/dist/components/Icon/components/index.d.ts +1 -1
  7. package/dist/components/Input/Input.d.ts +1 -1
  8. package/dist/components/Menu/components/Item.d.ts +1 -1
  9. package/dist/components/Menu/components/Link.d.ts +1 -1
  10. package/dist/components/Navigation2/components/Link.d.ts +1 -1
  11. package/dist/components/Select2/components/Option.d.ts +1 -1
  12. package/dist/components/Select2/components/Search.d.ts +1 -1
  13. package/dist/components/Table3/hooks/features/useSettings.d.ts +1 -0
  14. package/dist/components/Table3/hooks/useTable.d.ts +1 -0
  15. package/dist/components/Table3/types.d.ts +1 -0
  16. package/dist/components/Tag/Tag.d.ts +1 -1
  17. package/dist/esm/index.css +5 -0
  18. package/dist/esm/packages/taco/src/components/Icon/components/ChartArea.js +19 -0
  19. package/dist/esm/packages/taco/src/components/Icon/components/ChartArea.js.map +1 -0
  20. package/dist/esm/packages/taco/src/components/Icon/components/ChartBar.js +19 -0
  21. package/dist/esm/packages/taco/src/components/Icon/components/ChartBar.js.map +1 -0
  22. package/dist/esm/packages/taco/src/components/Icon/components/ChartLine.js +19 -0
  23. package/dist/esm/packages/taco/src/components/Icon/components/ChartLine.js.map +1 -0
  24. package/dist/esm/packages/taco/src/components/Icon/components/ChartPie.js +17 -0
  25. package/dist/esm/packages/taco/src/components/Icon/components/ChartPie.js.map +1 -0
  26. package/dist/esm/packages/taco/src/components/Icon/components/ChartTable.js +19 -0
  27. package/dist/esm/packages/taco/src/components/Icon/components/ChartTable.js.map +1 -0
  28. package/dist/esm/packages/taco/src/components/Icon/components/index.js +10 -0
  29. package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
  30. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +7 -2
  31. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js.map +1 -1
  32. package/dist/esm/packages/taco/src/components/Table2/components/row/Row.js +2 -1
  33. package/dist/esm/packages/taco/src/components/Table2/components/row/Row.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Table3/Table3.js +3 -1
  35. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  36. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Drag.js +2 -2
  37. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Drag.js.map +1 -1
  38. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js +3 -3
  39. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js.map +1 -1
  40. package/dist/esm/packages/taco/src/components/Table3/components/rows/Row.js +2 -1
  41. package/dist/esm/packages/taco/src/components/Table3/components/rows/Row.js.map +1 -1
  42. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js +2 -1
  43. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js.map +1 -1
  44. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js +3 -1
  45. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js.map +1 -1
  46. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js +14 -5
  47. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js.map +1 -1
  48. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js +10 -4
  49. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js.map +1 -1
  50. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js +82 -78
  51. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js.map +1 -1
  52. package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js +7 -1
  53. package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js.map +1 -1
  54. package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js +1 -0
  55. package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js.map +1 -1
  56. package/dist/esm/packages/taco/src/components/Table3/hooks/useTablePreset.js +5 -1
  57. package/dist/esm/packages/taco/src/components/Table3/hooks/useTablePreset.js.map +1 -1
  58. package/dist/esm/packages/taco/src/components/Table3/types.js.map +1 -1
  59. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js +11 -1
  60. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js.map +1 -1
  61. package/dist/esm/packages/taco/src/utils/hooks/useDropTarget.js +1 -1
  62. package/dist/esm/packages/taco/src/utils/hooks/useDropTarget.js.map +1 -1
  63. package/dist/hooks/useLocalStorage.d.ts +1 -1
  64. package/dist/index.css +5 -0
  65. package/dist/taco.cjs.development.js +232 -102
  66. package/dist/taco.cjs.development.js.map +1 -1
  67. package/dist/taco.cjs.production.min.js +1 -1
  68. package/dist/taco.cjs.production.min.js.map +1 -1
  69. package/package.json +2 -2
  70. package/types.json +21765 -11931
@@ -473,6 +473,79 @@ function IconCashReports(props, svgRef) {
473
473
  }
474
474
  var CashReports = /*#__PURE__*/React.forwardRef(IconCashReports);
475
475
 
476
+ function IconChartArea(props, svgRef) {
477
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
478
+ fill: "none",
479
+ xmlns: "http://www.w3.org/2000/svg",
480
+ viewBox: "0 0 24 24",
481
+ ref: svgRef
482
+ }, props), /*#__PURE__*/React.createElement("path", {
483
+ fillRule: "evenodd",
484
+ clipRule: "evenodd",
485
+ d: "M3.5 4.75a.75.75 0 00-1.5 0v14.5c0 .414.336.75.75.75h18.5a.75.75 0 000-1.5h-1.5V6a.75.75 0 00-1.14-.64l-6.88 4.188-3.045-2.682a.75.75 0 00-.921-.055L3.5 9.745V4.75zm0 6.816V18.5h14.75V7.335l-6.211 3.782a.75.75 0 01-.886-.078l-3.02-2.66L3.5 11.565z",
486
+ fill: "currentColor"
487
+ }));
488
+ }
489
+ var ChartArea = /*#__PURE__*/React.forwardRef(IconChartArea);
490
+
491
+ function IconChartBar(props, svgRef) {
492
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
493
+ fill: "none",
494
+ xmlns: "http://www.w3.org/2000/svg",
495
+ viewBox: "0 0 24 24",
496
+ ref: svgRef
497
+ }, props), /*#__PURE__*/React.createElement("path", {
498
+ fillRule: "evenodd",
499
+ clipRule: "evenodd",
500
+ d: "M11 17.75A1.75 1.75 0 009.25 16h-4.5A1.75 1.75 0 003 17.75v1.5c0 .966.784 1.75 1.75 1.75h4.5A1.75 1.75 0 0011 19.25v-1.5zm6-6.5a1.75 1.75 0 00-1.75-1.75H4.75A1.75 1.75 0 003 11.25v1.5c0 .966.784 1.75 1.75 1.75h10.5A1.75 1.75 0 0017 12.75v-1.5zm4-6.5A1.75 1.75 0 0019.25 3H4.75A1.75 1.75 0 003 4.75v1.5C3 7.216 3.784 8 4.75 8h14.5A1.75 1.75 0 0021 6.25v-1.5zm-11.5 13v1.5a.25.25 0 01-.193.243l-.057.007h-4.5a.25.25 0 01-.243-.193L4.5 19.25v-1.5a.25.25 0 01.193-.243l.057-.007h4.5a.25.25 0 01.243.193l.007.057zm6-6.5v1.5a.25.25 0 01-.193.243L15.25 13H4.75a.25.25 0 01-.243-.193L4.5 12.75v-1.5a.25.25 0 01.193-.243L4.75 11h10.5a.25.25 0 01.243.193l.007.057zm4-6.5v1.5a.25.25 0 01-.193.243l-.057.007H4.75a.25.25 0 01-.243-.193L4.5 6.25v-1.5a.25.25 0 01.193-.243L4.75 4.5h14.5a.25.25 0 01.243.193l.007.057z",
501
+ fill: "currentColor"
502
+ }));
503
+ }
504
+ var ChartBar = /*#__PURE__*/React.forwardRef(IconChartBar);
505
+
506
+ function IconChartLine(props, svgRef) {
507
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
508
+ fill: "none",
509
+ xmlns: "http://www.w3.org/2000/svg",
510
+ viewBox: "0 0 24 24",
511
+ ref: svgRef
512
+ }, props), /*#__PURE__*/React.createElement("path", {
513
+ fillRule: "evenodd",
514
+ clipRule: "evenodd",
515
+ d: "M3.5 4.75a.75.75 0 00-1.5 0v14.5c0 .414.336.75.75.75h18.5a.75.75 0 000-1.5H3.5V4.75zm18.06 2.53a.75.75 0 10-1.06-1.06l-5.97 5.97-3.47-3.47a.75.75 0 00-1.06 0l-4.47 4.47a.75.75 0 001.061 1.06l3.94-3.94L14 13.78a.75.75 0 001.06 0l6.5-6.5z",
516
+ fill: "currentColor"
517
+ }));
518
+ }
519
+ var ChartLine = /*#__PURE__*/React.forwardRef(IconChartLine);
520
+
521
+ function IconChartPie(props, svgRef) {
522
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
523
+ fill: "none",
524
+ xmlns: "http://www.w3.org/2000/svg",
525
+ viewBox: "0 0 24 24",
526
+ ref: svgRef
527
+ }, props), /*#__PURE__*/React.createElement("path", {
528
+ d: "M10.25 4.25A.75.75 0 0111 5v8h8a.75.75 0 01.743.648l.007.102c0 4.97-4.03 8.5-9 8.5a9 9 0 01-9-9c0-4.97 3.53-9 8.5-9zM9.5 5.787l-.209.024c-3.69.47-6.041 3.622-6.041 7.439a7.5 7.5 0 007.5 7.5c3.817 0 6.968-2.352 7.44-6.041l.022-.209H10.25a.75.75 0 01-.743-.648L9.5 13.75V5.787zm3.75-4.037a9 9 0 019 9 .75.75 0 01-.75.75h-8.25a.75.75 0 01-.75-.75V2.5a.75.75 0 01.75-.75zM14 3.287V10h6.712l-.023-.209a7.504 7.504 0 00-6.48-6.48L14 3.287z",
529
+ fill: "currentColor"
530
+ }));
531
+ }
532
+ var ChartPie = /*#__PURE__*/React.forwardRef(IconChartPie);
533
+
534
+ function IconChartTable(props, svgRef) {
535
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
536
+ fill: "none",
537
+ xmlns: "http://www.w3.org/2000/svg",
538
+ viewBox: "0 0 24 24",
539
+ ref: svgRef
540
+ }, props), /*#__PURE__*/React.createElement("path", {
541
+ fillRule: "evenodd",
542
+ clipRule: "evenodd",
543
+ d: "M4.5 4.5h15v3.75h-15V4.5zM3 9.75V4.5A1.5 1.5 0 014.5 3h15A1.5 1.5 0 0121 4.5v15a1.5 1.5 0 01-1.5 1.5h-15A1.5 1.5 0 013 19.5V9.75zM4.5 14V9.75h4V14h-4zm0 1.5v4h4v-4h-4zm5.5 4h4v-4h-4v4zm5.5 0h4v-4h-4v4zm4-5.5V9.75h-4V14h4zM10 9.75h4V14h-4V9.75z",
544
+ fill: "currentColor"
545
+ }));
546
+ }
547
+ var ChartTable = /*#__PURE__*/React.forwardRef(IconChartTable);
548
+
476
549
  function IconChatSolid(props, svgRef) {
477
550
  return /*#__PURE__*/React.createElement("svg", Object.assign({
478
551
  xmlns: "http://www.w3.org/2000/svg",
@@ -3140,6 +3213,11 @@ const icons = {
3140
3213
  calendar: Calendar,
3141
3214
  'cash-account': CashAccount,
3142
3215
  'cash-reports': CashReports,
3216
+ 'chart-area': ChartArea,
3217
+ 'chart-bar': ChartBar,
3218
+ 'chart-line': ChartLine,
3219
+ 'chart-pie': ChartPie,
3220
+ 'chart-table': ChartTable,
3143
3221
  'chat-solid': ChatSolid,
3144
3222
  chat: Chat,
3145
3223
  'chevron-down-double': ChevronDownDouble,
@@ -7832,7 +7910,7 @@ const useDropTarget = onDrop => {
7832
7910
  }, []);
7833
7911
  const handleDragLeave = React__default.useCallback(event => {
7834
7912
  event.preventDefault();
7835
- if (event.target === event.currentTarget) {
7913
+ if (event.target === event.currentTarget || event.relatedTarget && !event.currentTarget.contains(event.relatedTarget)) {
7836
7914
  setDraggedOver(false);
7837
7915
  }
7838
7916
  }, []);
@@ -12918,7 +12996,7 @@ const Cell = function Cell(props) {
12918
12996
  return (_tableRef$current2 = tableRef.current) === null || _tableRef$current2 === void 0 ? void 0 : _tableRef$current2.classList.remove('pb-4');
12919
12997
  };
12920
12998
  }, [isIndicatorVisible, isLastRow]);
12921
- const className = cn('[&>[data-taco="tag"]]:-my-0.5', {
12999
+ const className = cn('[&>[data-taco="tag"]]:-my-0.5', '[[data-dragged-over="true"]_&]:bg-grey-100', {
12922
13000
  'border-b': !isLastRow,
12923
13001
  'sticky z-[1]': isFrozen,
12924
13002
  // use isHoveredRow rather than css group-hover/row because we want to hide hover state when keyboard navigating
@@ -12992,9 +13070,14 @@ const Cell = function Cell(props) {
12992
13070
  };
12993
13071
  if (meta.editMode.onSave && hasCellControl && (canEditThisCell || isHoveringThisRowWhileEditing && isDataColumn)) {
12994
13072
  attributes.onMouseDown = event => {
12995
- handleMouseDown(event);
12996
13073
  const target = event.target;
12997
13074
  const isTargetInput = target !== null && target.nodeName === 'INPUT';
13075
+ // In Edit mode, If mouse click is happening outside of cell (in case of any dropdowns like date picker or select),
13076
+ // then it should not be processed as a click on a cell.
13077
+ if (!event.currentTarget.contains(target)) {
13078
+ return;
13079
+ }
13080
+ handleMouseDown(event);
12998
13081
  // event.target?.select is only truthy for input elements
12999
13082
  // if event.target is active element, then that means we should select the text
13000
13083
  if (isTargetInput && target !== document.activeElement) {
@@ -14656,13 +14739,14 @@ const InternalRow = ({
14656
14739
  const meta = table.options.meta;
14657
14740
  const isActiveRow = meta.activeRowIndex === rowIndex;
14658
14741
  const isDragging = meta.dragging[row.id];
14659
- const [, dropTargetProps] = useDropTarget(event => onRowDrop(event, row.original));
14742
+ const [isDraggedOver, dropTargetProps] = useDropTarget(event => onRowDrop(event, row.original));
14660
14743
  const attributes = {
14661
14744
  ...props,
14662
14745
  ...(typeof onRowDrop === 'function' ? dropTargetProps : undefined),
14663
14746
  'aria-current': isActiveRow ? true : undefined,
14664
14747
  'aria-grabbed': isDragging ? true : undefined,
14665
14748
  'data-row-index': rowIndex,
14749
+ 'data-dragged-over': isDraggedOver,
14666
14750
  draggable: meta.enableRowDragging ? true : undefined,
14667
14751
  onMouseEnter: () => setIsHovered(true),
14668
14752
  onMouseLeave: () => setIsHovered(false),
@@ -16386,7 +16470,9 @@ const getInputAppearanceClassnames = () => {
16386
16470
  const useCssGrid = table => {
16387
16471
  const allVisibleColumns = table.getVisibleLeafColumns();
16388
16472
  const columnSizing = table.getState().columnSizing;
16389
- const length = table.getRowModel().rows.length;
16473
+ const rowsLength = table.getRowModel().rows.length;
16474
+ const expandedRowsLength = Object.keys(table.getState().expanded).length;
16475
+ const length = rowsLength + expandedRowsLength;
16390
16476
  const gridTemplateColumns = React__default.useMemo(() => {
16391
16477
  return allVisibleColumns.reduce((accum, column, index) => {
16392
16478
  let size;
@@ -16398,6 +16484,8 @@ const useCssGrid = table => {
16398
16484
  if (column.id === COLUMN_ID) {
16399
16485
  size = 'minmax(max-content, auto)';
16400
16486
  } else {
16487
+ // getSize method is used instead of columnSizing state because columnSizing state doesn't have
16488
+ // sizes of internal columns.
16401
16489
  size = `${column.getSize()}px`;
16402
16490
  }
16403
16491
  } else if (width !== undefined) {
@@ -16419,6 +16507,8 @@ const useCssGrid = table => {
16419
16507
  }, '');
16420
16508
  }, [allVisibleColumns, columnSizing]);
16421
16509
  const gridTemplateRows = React__default.useMemo(() => {
16510
+ // 1fr makes sure that there is always a free space between the rows and footer when table height exceeds the
16511
+ // cumulative height of all rows
16422
16512
  return `min-content repeat(${length}, min-content) 1fr min-content`;
16423
16513
  }, [length]);
16424
16514
  const style = {
@@ -16501,6 +16591,7 @@ const DEFAULT_ALL_DISABLED = {
16501
16591
  enableColumnOrdering: false,
16502
16592
  enableColumnResizing: false,
16503
16593
  enableFontSize: false,
16594
+ enableFooter: false,
16504
16595
  enablePrinting: false,
16505
16596
  enableRowDrag: false,
16506
16597
  enableRowDrop: false,
@@ -16521,6 +16612,7 @@ const presets = {
16521
16612
  enableColumnOrdering: true,
16522
16613
  enableColumnResizing: true,
16523
16614
  enableFontSize: true,
16615
+ enableFooter: true,
16524
16616
  enablePrinting: false,
16525
16617
  enableRowDrag: true,
16526
16618
  enableRowDrop: true,
@@ -16540,6 +16632,7 @@ const presets = {
16540
16632
  enableColumnOrdering: true,
16541
16633
  enableColumnResizing: true,
16542
16634
  enableFontSize: true,
16635
+ enableFooter: true,
16543
16636
  enablePrinting: false,
16544
16637
  enableRowDrag: true,
16545
16638
  enableRowDrop: true,
@@ -16555,7 +16648,7 @@ const presets = {
16555
16648
  }
16556
16649
  };
16557
16650
  function useTablePreset(props) {
16558
- var _props$enableRowExpan, _props$enableRowSelec, _props$enableColumnFr, _props$enableColumnHi, _props$enableColumnOr, _props$enableColumnRe, _props$enableFontSize, _props$enablePrinting, _props$enableRowDrag, _props$enableRowDrop, _props$enableRowGoto, _props$enableRowHeigh, _props$enableRowSelec2, _props$enableEditing, _props$enableFilterin, _props$enableSearch, _props$enableSorting;
16651
+ var _props$enableRowExpan, _props$enableRowSelec, _props$enableColumnFr, _props$enableColumnHi, _props$enableColumnOr, _props$enableColumnRe, _props$enableFontSize, _props$enableFooter, _props$enablePrinting, _props$enableRowDrag, _props$enableRowDrop, _props$enableRowGoto, _props$enableRowHeigh, _props$enableRowSelec2, _props$enableEditing, _props$enableFilterin, _props$enableSearch, _props$enableSorting;
16559
16652
  const presetOptions = props.preset ? presets[props.preset] : DEFAULT_ALL_DISABLED;
16560
16653
  const enableRowExpansion = (_props$enableRowExpan = props.enableRowExpansion) !== null && _props$enableRowExpan !== void 0 ? _props$enableRowExpan : presetOptions.enableRowExpansion;
16561
16654
  const enableRowSelection = (_props$enableRowSelec = props.enableRowSelection) !== null && _props$enableRowSelec !== void 0 ? _props$enableRowSelec : presetOptions.enableRowSelection;
@@ -16574,6 +16667,7 @@ function useTablePreset(props) {
16574
16667
  enableColumnOrdering: (_props$enableColumnOr = props.enableColumnOrdering) !== null && _props$enableColumnOr !== void 0 ? _props$enableColumnOr : presetOptions.enableColumnOrdering,
16575
16668
  enableColumnResizing: (_props$enableColumnRe = props.enableColumnResizing) !== null && _props$enableColumnRe !== void 0 ? _props$enableColumnRe : presetOptions.enableColumnResizing,
16576
16669
  enableFontSize: (_props$enableFontSize = props.enableFontSize) !== null && _props$enableFontSize !== void 0 ? _props$enableFontSize : presetOptions.enableFontSize,
16670
+ enableFooter: (_props$enableFooter = props.enableFooter) !== null && _props$enableFooter !== void 0 ? _props$enableFooter : presetOptions.enableFooter,
16577
16671
  enablePrinting: (_props$enablePrinting = props.enablePrinting) !== null && _props$enablePrinting !== void 0 ? _props$enablePrinting : presetOptions.enablePrinting,
16578
16672
  enableRowDrag: ((_props$enableRowDrag = props.enableRowDrag) !== null && _props$enableRowDrag !== void 0 ? _props$enableRowDrag : presetOptions.enableRowDrag) && !!props.onRowDrag,
16579
16673
  enableRowDrop: ((_props$enableRowDrop = props.enableRowDrop) !== null && _props$enableRowDrop !== void 0 ? _props$enableRowDrop : presetOptions.enableRowDrop) && !!props.onRowDrop,
@@ -16900,17 +16994,26 @@ function useColumnFreezingStyle(tableId, table) {
16900
16994
  columnVisibility
16901
16995
  } = table.getState();
16902
16996
  const tableMeta = table.options.meta;
16903
- const frozenColumnIndex = ((_tableMeta$columnFree = tableMeta.columnFreezing.frozenColumnIndex) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : -1) + tableMeta.columnFreezing.frozenInternalColumnCount;
16997
+ const frozenColumnIndex =
16998
+ // If column freezing is not enabled then only internal frozen column should be frozen.
16999
+ (tableMeta.columnFreezing.isEnabled ? (_tableMeta$columnFree = tableMeta.columnFreezing.frozenColumnIndex) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : -1 : -1) + tableMeta.columnFreezing.frozenInternalColumnCount;
16904
17000
  const style = React__default.useMemo(() => {
16905
17001
  if (tableMeta.columnFreezing.frozenInternalColumnCount > 0 || tableMeta.columnFreezing.isEnabled && frozenColumnIndex !== undefined) {
16906
- const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, frozenColumnIndex + 1).map(column => column.id);
17002
+ var _visibleFrozenColumns;
17003
+ const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, frozenColumnIndex + 1);
16907
17004
  // if all frozen columns haven't had their size set yet, then abort
16908
- if (visibleFrozenColumns.every(id => columnSizing[id] === undefined)) {
17005
+ if (visibleFrozenColumns.every(column => columnSizing[column.id] === undefined)) {
16909
17006
  return undefined;
16910
17007
  }
16911
17008
  const offsets = {};
16912
- visibleFrozenColumns.reduce((offset, columnId) => {
17009
+ visibleFrozenColumns.reduce((offset, column) => {
17010
+ const columnId = column.id;
16913
17011
  offsets[columnId] = offset;
17012
+ if (isInternalColumn$1(columnId)) {
17013
+ // getSize method is used instead of columnSizing state because columnSizing state doesn't have
17014
+ // sizes of internal columns.
17015
+ return offset + column.getSize();
17016
+ }
16914
17017
  return offset + columnSizing[columnId];
16915
17018
  }, 0);
16916
17019
  const styles = [Object.values(offsets).map((offset, index) => `#${tableId} [role="row"] > :nth-child(${index + 1}) { left: ${offset}px }`).join('\n'), `#${tableId} [role="row"] > :not(:nth-child(n+${frozenColumnIndex + 2})) {
@@ -16919,7 +17022,7 @@ function useColumnFreezingStyle(tableId, table) {
16919
17022
  }`, `#${tableId}[data-horizontally-scrolled="true"] [role="row"] > :nth-child(${frozenColumnIndex + 1}) {
16920
17023
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), 6px 0px 6px rgb(0 0 0/8%), 1px 0px 0px #DDDDDD;
16921
17024
  }`];
16922
- const columnId = visibleFrozenColumns[frozenColumnIndex];
17025
+ const columnId = (_visibleFrozenColumns = visibleFrozenColumns[frozenColumnIndex]) === null || _visibleFrozenColumns === void 0 ? void 0 : _visibleFrozenColumns.id;
16923
17026
  // frozenColumnIndex could not be in the visible frozen column so it is important to check if columnId
16924
17027
  // exists before checking if it is internal.
16925
17028
  //
@@ -17807,7 +17910,7 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17807
17910
  return newTableMeta.currentRow.currentRowIndex === oldTableMeta.currentRow.currentRowIndex && newProps.row.getIsSelected() !== oldProps.row.getIsSelected();
17808
17911
  });
17809
17912
  function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17810
- const size = hasDrag ? 22 : 40;
17913
+ const size = hasDrag && hasExpansion ? 22 : 40;
17811
17914
  return {
17812
17915
  id: COLUMN_ID$2,
17813
17916
  header: Header$3,
@@ -17817,7 +17920,7 @@ function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17817
17920
  align: 'center',
17818
17921
  className: cn('!pt-[var(--table3-row-padding)] !justify-end !p-0', {
17819
17922
  '!pr-0.5': hasExpansion,
17820
- '!pr-2.5': !hasExpansion
17923
+ '!pr-3': !hasExpansion
17821
17924
  }),
17822
17925
  enableOrdering: false,
17823
17926
  enableSearch: false,
@@ -17825,7 +17928,7 @@ function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17825
17928
  header: '',
17826
17929
  headerClassName: cn('items-center !justify-end !p-0', {
17827
17930
  '!pr-0.5': hasExpansion,
17828
- '!pr-2.5': !hasExpansion
17931
+ '!pr-3': !hasExpansion
17829
17932
  })
17830
17933
  },
17831
17934
  // options
@@ -18000,8 +18103,8 @@ function createRowDragColumn(onRowDrag) {
18000
18103
  },
18001
18104
  // options
18002
18105
  enableResizing: false,
18003
- size: 15,
18004
- minSize: 15
18106
+ size: 20,
18107
+ minSize: 20
18005
18108
  };
18006
18109
  }
18007
18110
 
@@ -18021,88 +18124,92 @@ function getSortingFn$1(dataType, customFnOrBuiltIn) {
18021
18124
  return 'auto';
18022
18125
  }
18023
18126
  function useConvertChildrenToColumns(props, options, editing) {
18024
- var _props$actionsForRow;
18025
- const columnHelper = reactTable$1.createColumnHelper();
18026
- const columns = [];
18027
- const defaultColumnSizing = {};
18028
- const defaultColumnVisibility = {};
18029
- const defaultSorting = [];
18030
- React__default.Children.toArray(props.children).filter(child => !!child) // remove falsey children
18031
- .forEach(child => {
18032
- if ( /*#__PURE__*/React__default.isValidElement(child) && child.props.accessor) {
18033
- var _child$props$enableRe, _child$props$enableFi, _child$props$enableSo, _child$props$enableHi, _child$props$enableOr, _child$props$enableSe, _child$props$enableTr;
18034
- if (child.props.defaultWidth) {
18035
- defaultColumnSizing[child.props.accessor] = child.props.defaultWidth === 'grow' ? '1fr' : child.props.defaultWidth;
18036
- }
18037
- if (child.props.defaultHidden && options.enableColumnHiding) {
18038
- defaultColumnVisibility[child.props.accessor] = false;
18039
- }
18040
- if (child.props.sort !== undefined) {
18041
- defaultSorting.push({
18127
+ // It's important to memoise column definitions, because it prevents columns like "Drag column" to re-render on every state change,
18128
+ // and break dragging at the moment it happens.
18129
+ return React__default.useMemo(() => {
18130
+ var _props$actionsForRow;
18131
+ const columnHelper = reactTable$1.createColumnHelper();
18132
+ const columns = [];
18133
+ const defaultColumnSizing = {};
18134
+ const defaultColumnVisibility = {};
18135
+ const defaultSorting = [];
18136
+ React__default.Children.toArray(props.children).filter(child => !!child) // remove falsey children
18137
+ .forEach(child => {
18138
+ if ( /*#__PURE__*/React__default.isValidElement(child) && child.props.accessor) {
18139
+ var _child$props$enableRe, _child$props$enableFi, _child$props$enableSo, _child$props$enableHi, _child$props$enableOr, _child$props$enableSe, _child$props$enableTr;
18140
+ if (child.props.defaultWidth) {
18141
+ defaultColumnSizing[child.props.accessor] = child.props.defaultWidth === 'grow' ? '1fr' : child.props.defaultWidth;
18142
+ }
18143
+ if (child.props.defaultHidden && options.enableColumnHiding) {
18144
+ defaultColumnVisibility[child.props.accessor] = false;
18145
+ }
18146
+ if (child.props.sort !== undefined) {
18147
+ defaultSorting.push({
18148
+ id: child.props.accessor,
18149
+ desc: child.props.sort === 'desc'
18150
+ });
18151
+ }
18152
+ columns.push({
18153
+ accessorKey: child.props.accessor,
18042
18154
  id: child.props.accessor,
18043
- desc: child.props.sort === 'desc'
18155
+ header: Header$2,
18156
+ cell: Cell$3,
18157
+ footer: Footer$4,
18158
+ // sizing
18159
+ minSize: MIN_COLUMN_SIZE$1,
18160
+ enableResizing: (_child$props$enableRe = child.props.enableResizing) !== null && _child$props$enableRe !== void 0 ? _child$props$enableRe : true,
18161
+ // filtering
18162
+ enableColumnFilter: (_child$props$enableFi = child.props.enableFiltering) !== null && _child$props$enableFi !== void 0 ? _child$props$enableFi : true,
18163
+ filterFn: 'tacoFilter',
18164
+ // sorting
18165
+ enableSorting: (_child$props$enableSo = child.props.enableSorting) !== null && _child$props$enableSo !== void 0 ? _child$props$enableSo : true,
18166
+ sortingFn: getSortingFn$1(child.props.dataType, child.props.sortFn),
18167
+ sortDescFirst: false,
18168
+ sortUndefined: 1,
18169
+ // visibility
18170
+ enableHiding: (_child$props$enableHi = child.props.enableHiding) !== null && _child$props$enableHi !== void 0 ? _child$props$enableHi : true,
18171
+ // custom options
18172
+ meta: {
18173
+ align: child.props.align,
18174
+ className: child.props.className,
18175
+ control: child.props.control,
18176
+ dataType: child.props.dataType,
18177
+ enableOrdering: (_child$props$enableOr = child.props.enableOrdering) !== null && _child$props$enableOr !== void 0 ? _child$props$enableOr : true,
18178
+ enableSearch: (_child$props$enableSe = child.props.enableSearch) !== null && _child$props$enableSe !== void 0 ? _child$props$enableSe : true,
18179
+ enableTruncate: (_child$props$enableTr = child.props.enableTruncate) !== null && _child$props$enableTr !== void 0 ? _child$props$enableTr : false,
18180
+ filters: child.props.filters,
18181
+ footer: child.props.footer,
18182
+ header: child.props.header,
18183
+ headerClassName: child.props.headerClassName,
18184
+ menu: child.props.menu,
18185
+ renderer: child.props.renderer,
18186
+ tooltip: child.props.tooltip
18187
+ }
18044
18188
  });
18045
18189
  }
18046
- columns.push({
18047
- accessorKey: child.props.accessor,
18048
- id: child.props.accessor,
18049
- header: Header$2,
18050
- cell: Cell$3,
18051
- footer: Footer$4,
18052
- // sizing
18053
- minSize: MIN_COLUMN_SIZE$1,
18054
- enableResizing: (_child$props$enableRe = child.props.enableResizing) !== null && _child$props$enableRe !== void 0 ? _child$props$enableRe : true,
18055
- // filtering
18056
- enableColumnFilter: (_child$props$enableFi = child.props.enableFiltering) !== null && _child$props$enableFi !== void 0 ? _child$props$enableFi : true,
18057
- filterFn: 'tacoFilter',
18058
- // sorting
18059
- enableSorting: (_child$props$enableSo = child.props.enableSorting) !== null && _child$props$enableSo !== void 0 ? _child$props$enableSo : true,
18060
- sortingFn: getSortingFn$1(child.props.dataType, child.props.sortFn),
18061
- sortDescFirst: false,
18062
- sortUndefined: 1,
18063
- // visibility
18064
- enableHiding: (_child$props$enableHi = child.props.enableHiding) !== null && _child$props$enableHi !== void 0 ? _child$props$enableHi : true,
18065
- // custom options
18066
- meta: {
18067
- align: child.props.align,
18068
- className: child.props.className,
18069
- control: child.props.control,
18070
- dataType: child.props.dataType,
18071
- enableOrdering: (_child$props$enableOr = child.props.enableOrdering) !== null && _child$props$enableOr !== void 0 ? _child$props$enableOr : true,
18072
- enableSearch: (_child$props$enableSe = child.props.enableSearch) !== null && _child$props$enableSe !== void 0 ? _child$props$enableSe : true,
18073
- enableTruncate: (_child$props$enableTr = child.props.enableTruncate) !== null && _child$props$enableTr !== void 0 ? _child$props$enableTr : false,
18074
- filters: child.props.filters,
18075
- footer: child.props.footer,
18076
- header: child.props.header,
18077
- headerClassName: child.props.headerClassName,
18078
- menu: child.props.menu,
18079
- renderer: child.props.renderer,
18080
- tooltip: child.props.tooltip
18081
- }
18082
- });
18190
+ });
18191
+ if (options.enableRowExpansion && props.expandedRowRenderer) {
18192
+ columns.unshift(columnHelper.display(createRowExpansionColumn$1(props.expandedRowRenderer)));
18083
18193
  }
18084
- });
18085
- if (options.enableRowExpansion && props.expandedRowRenderer) {
18086
- columns.unshift(columnHelper.display(createRowExpansionColumn$1(props.expandedRowRenderer)));
18087
- }
18088
- if (options.enableRowSelection) {
18089
- columns.unshift(columnHelper.display(createRowSelectionColumn$1(!!(options.enableRowDrag && props.onRowDrag), !!props.expandedRowRenderer)));
18090
- }
18091
- if (options.enableRowDrag && props.onRowDrag) {
18092
- columns.unshift(columnHelper.display(createRowDragColumn(props.onRowDrag)));
18093
- }
18094
- if ((_props$actionsForRow = props.actionsForRow) !== null && _props$actionsForRow !== void 0 && _props$actionsForRow.length) {
18095
- columns.push(columnHelper.display(createRowActionsColumn$1()));
18096
- }
18097
- if (editing.isEnabled && editing.isEditing) {
18098
- columns.push(columnHelper.display(createRowEditingActionsColumn()));
18099
- }
18100
- return {
18101
- columns,
18102
- defaultColumnSizing,
18103
- defaultColumnVisibility,
18104
- defaultSorting
18105
- };
18194
+ if (options.enableRowSelection) {
18195
+ columns.unshift(columnHelper.display(createRowSelectionColumn$1(!!(options.enableRowDrag && props.onRowDrag), !!props.expandedRowRenderer)));
18196
+ }
18197
+ if (options.enableRowDrag && props.onRowDrag) {
18198
+ columns.unshift(columnHelper.display(createRowDragColumn(props.onRowDrag)));
18199
+ }
18200
+ if ((_props$actionsForRow = props.actionsForRow) !== null && _props$actionsForRow !== void 0 && _props$actionsForRow.length) {
18201
+ columns.push(columnHelper.display(createRowActionsColumn$1()));
18202
+ }
18203
+ if (editing.isEnabled && editing.isEditing) {
18204
+ columns.push(columnHelper.display(createRowEditingActionsColumn()));
18205
+ }
18206
+ return {
18207
+ columns,
18208
+ defaultColumnSizing,
18209
+ defaultColumnVisibility,
18210
+ defaultSorting
18211
+ };
18212
+ }, [props.children]);
18106
18213
  }
18107
18214
 
18108
18215
  function usePrinting(isEnabled, loadAll, showWarningWhenPrintingLargeDataset = true) {
@@ -18231,6 +18338,9 @@ function useRowActions$1(actionsForRow, actionsForRowLength = ACTIONS_ON_ROW_LEN
18231
18338
 
18232
18339
  const useLocalStorage = (key, initialValue) => {
18233
18340
  const [state, setState] = React__default.useState(() => {
18341
+ if (!key) {
18342
+ return initialValue;
18343
+ }
18234
18344
  try {
18235
18345
  const localStorageValue = localStorage.getItem(key);
18236
18346
  if (typeof localStorageValue !== 'string') {
@@ -18247,6 +18357,9 @@ const useLocalStorage = (key, initialValue) => {
18247
18357
  }
18248
18358
  });
18249
18359
  React__default.useEffect(() => {
18360
+ if (!key) {
18361
+ return;
18362
+ }
18250
18363
  try {
18251
18364
  const serializedState = JSON.stringify(state);
18252
18365
  localStorage.setItem(key, serializedState);
@@ -18255,7 +18368,11 @@ const useLocalStorage = (key, initialValue) => {
18255
18368
  // localStorage can throw. Also JSON.stringify can throw.
18256
18369
  }
18257
18370
  }, [key, state]);
18258
- const clear = () => localStorage.removeItem(key);
18371
+ const clear = () => {
18372
+ if (key) {
18373
+ localStorage.removeItem(key);
18374
+ }
18375
+ };
18259
18376
  return [state, setState, clear];
18260
18377
  };
18261
18378
 
@@ -18263,10 +18380,16 @@ function useTacoSettings() {
18263
18380
  return React__default.useContext(TacoContext);
18264
18381
  }
18265
18382
 
18266
- function useSettings(id, defaultSettings = {}, onChangeSettings) {
18383
+ function useUniqueTableId(tableId) {
18267
18384
  const tacoSettings = useTacoSettings();
18268
- const uniqueId = `taco.${tacoSettings.uniqueUserIdentifier}.table3.${id}.settings`;
18269
- const [persistedSettings, setPersistedSettings] = useLocalStorage(uniqueId, defaultSettings);
18385
+ return `taco.${tacoSettings.uniqueUserIdentifier}.table3.${tableId}.settings`;
18386
+ }
18387
+ function useSettings(id, defaultSettings = {}, onChangeSettings) {
18388
+ const uniqueId = useUniqueTableId(id);
18389
+ // If the onChangeSettings prop is provided, we intend to handle settings changes externally rather than saving them
18390
+ // to local storage.
18391
+ const key = !onChangeSettings ? uniqueId : undefined;
18392
+ const [persistedSettings, setPersistedSettings] = useLocalStorage(key, defaultSettings);
18270
18393
  return React__default.useMemo(() => {
18271
18394
  if (onChangeSettings) {
18272
18395
  return [defaultSettings, onChangeSettings];
@@ -18393,6 +18516,7 @@ function useTable$2(props) {
18393
18516
  columnOrdering,
18394
18517
  currentRow,
18395
18518
  editing,
18519
+ enableFooter: options.enableFooter,
18396
18520
  fontSize,
18397
18521
  hoverState,
18398
18522
  isUsingServer: !!props.loadPage,
@@ -18659,7 +18783,7 @@ const MemoedRow = /*#__PURE__*/React__default.memo(function MemoedRow(props) {
18659
18783
  }
18660
18784
  setIsHovered(false);
18661
18785
  };
18662
- const [, dropTargetProps] = useDropTarget(event => onDrop === null || onDrop === void 0 ? void 0 : onDrop(event, row.original));
18786
+ const [isDraggedOver, dropTargetProps] = useDropTarget(event => onDrop === null || onDrop === void 0 ? void 0 : onDrop(event, row.original));
18663
18787
  const className = cn('group/row contents',
18664
18788
  // resizing column requires dragging, which means the mouse might (on rare occasions) move over rows and trigger hover state
18665
18789
  // that in turn triggers rendering of e.g. row actions, which could cause janky ui - so don't allow mouse interaction when resizing
@@ -18669,6 +18793,7 @@ const MemoedRow = /*#__PURE__*/React__default.memo(function MemoedRow(props) {
18669
18793
  return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, onDrop ? dropTargetProps : undefined, {
18670
18794
  className: className,
18671
18795
  "data-row-index": index,
18796
+ "data-dragged-over": isDraggedOver,
18672
18797
  onClick: handleClick,
18673
18798
  onClickCapture: handleClickCapture,
18674
18799
  onMouseEnter: handleMouseEnter,
@@ -19853,7 +19978,9 @@ function PrintIFrame({
19853
19978
  enableRowDrag: false,
19854
19979
  enableRowDrop: false,
19855
19980
  enableRowSelectionSingle: false,
19856
- preset: undefined
19981
+ preset: undefined,
19982
+ // The presence of the onChangeSettings prop ensures that settings won't be stored in local storage.
19983
+ onChangeSettings: () => undefined
19857
19984
  };
19858
19985
  // -top-60 -left-60 styles make sure that iframe is added outside of the viewport
19859
19986
  return /*#__PURE__*/React__default.createElement("iframe", {
@@ -19929,6 +20056,7 @@ function PrintButton(props) {
19929
20056
  const {
19930
20057
  printWarningDialogVisibility
19931
20058
  } = tableMeta.printing;
20059
+ const printTableId = `${tableProps.id}_print`;
19932
20060
  const defaultSettings = React__default.useMemo(() => ({
19933
20061
  columnFreezingIndex: tableMeta.columnFreezing.frozenColumnIndex,
19934
20062
  columnOrder: state.columnOrder,
@@ -19945,7 +20073,7 @@ function PrintButton(props) {
19945
20073
  const iframeTableProps = {
19946
20074
  ...tableProps,
19947
20075
  defaultSettings,
19948
- id: `${tableProps.id}_print`
20076
+ id: printTableId
19949
20077
  };
19950
20078
  useGlobalKeyDown({
19951
20079
  key: 'p',
@@ -20478,6 +20606,8 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20478
20606
  "data-taco": "table2-body",
20479
20607
  role: "rowgroup"
20480
20608
  }, renderBody())), /*#__PURE__*/React__default.createElement("div", {
20609
+ className: "border-grey-300 col-span-full -mt-px border-t"
20610
+ }), tableMeta.enableFooter ? /*#__PURE__*/React__default.createElement("div", {
20481
20611
  className: "group/footer contents",
20482
20612
  "data-taco": "table2-footer",
20483
20613
  role: "rowgroup"
@@ -20490,7 +20620,7 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20490
20620
  }, reactTable$1.flexRender(footer.column.columnDef.footer, footer.getContext()))))), length ? /*#__PURE__*/React__default.createElement(Summary$1, {
20491
20621
  length: length,
20492
20622
  table: table
20493
- }) : null)) : /*#__PURE__*/React__default.createElement("div", {
20623
+ }) : null) : null) : /*#__PURE__*/React__default.createElement("div", {
20494
20624
  className: "col-span-full min-h-[theme(spacing.8)]"
20495
20625
  }, EmptyState ? /*#__PURE__*/React__default.createElement(EmptyState, null) : null)));
20496
20626
  });