@economic/taco 2.4.3 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
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
  });