@economic/taco 2.5.0 → 2.7.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 (78) hide show
  1. package/dist/components/Icon/components/AttachWarning.d.ts +3 -0
  2. package/dist/components/Icon/components/ChartArea.d.ts +3 -0
  3. package/dist/components/Icon/components/ChartBar.d.ts +3 -0
  4. package/dist/components/Icon/components/ChartLine.d.ts +3 -0
  5. package/dist/components/Icon/components/ChartPie.d.ts +3 -0
  6. package/dist/components/Icon/components/ChartTable.d.ts +3 -0
  7. package/dist/components/Icon/components/index.d.ts +1 -1
  8. package/dist/components/Input/Input.d.ts +1 -1
  9. package/dist/components/Menu/components/Item.d.ts +1 -1
  10. package/dist/components/Menu/components/Link.d.ts +1 -1
  11. package/dist/components/Navigation2/components/Link.d.ts +1 -1
  12. package/dist/components/Select2/components/Option.d.ts +1 -1
  13. package/dist/components/Select2/components/Search.d.ts +1 -1
  14. package/dist/components/Select2/components/Trigger.d.ts +1 -1
  15. package/dist/components/Table3/components/columns/cell/EditingCell.d.ts +5 -2
  16. package/dist/components/Table3/components/columns/cell/EditingControl.d.ts +21 -0
  17. package/dist/components/Table3/components/columns/cell/controls/TextAreaControl.d.ts +2 -0
  18. package/dist/components/Tag/Tag.d.ts +1 -1
  19. package/dist/esm/index.css +85 -22
  20. package/dist/esm/packages/taco/src/components/Icon/components/AttachWarning.js +19 -0
  21. package/dist/esm/packages/taco/src/components/Icon/components/AttachWarning.js.map +1 -0
  22. package/dist/esm/packages/taco/src/components/Icon/components/ChartArea.js +19 -0
  23. package/dist/esm/packages/taco/src/components/Icon/components/ChartArea.js.map +1 -0
  24. package/dist/esm/packages/taco/src/components/Icon/components/ChartBar.js +19 -0
  25. package/dist/esm/packages/taco/src/components/Icon/components/ChartBar.js.map +1 -0
  26. package/dist/esm/packages/taco/src/components/Icon/components/ChartLine.js +19 -0
  27. package/dist/esm/packages/taco/src/components/Icon/components/ChartLine.js.map +1 -0
  28. package/dist/esm/packages/taco/src/components/Icon/components/ChartPie.js +17 -0
  29. package/dist/esm/packages/taco/src/components/Icon/components/ChartPie.js.map +1 -0
  30. package/dist/esm/packages/taco/src/components/Icon/components/ChartTable.js +19 -0
  31. package/dist/esm/packages/taco/src/components/Icon/components/ChartTable.js.map +1 -0
  32. package/dist/esm/packages/taco/src/components/Icon/components/index.js +12 -0
  33. package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js +1 -1
  35. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js.map +1 -1
  36. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +6 -1
  37. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js.map +1 -1
  38. package/dist/esm/packages/taco/src/components/Table3/Table3.js +10 -3
  39. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  40. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js +27 -145
  41. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js.map +1 -1
  42. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingControl.js +158 -0
  43. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingControl.js.map +1 -0
  44. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/controls/TextAreaControl.js +102 -0
  45. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/controls/TextAreaControl.js.map +1 -0
  46. package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Footer.js +1 -1
  47. package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Footer.js.map +1 -1
  48. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Actions.js +2 -2
  49. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Actions.js.map +1 -1
  50. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Drag.js +2 -2
  51. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Drag.js.map +1 -1
  52. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js +3 -3
  53. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js.map +1 -1
  54. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js +0 -5
  55. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintButton.js.map +1 -1
  56. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js +4 -2
  57. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js.map +1 -1
  58. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js +14 -5
  59. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js.map +1 -1
  60. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js +4 -1
  61. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js.map +1 -1
  62. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js +82 -78
  63. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js.map +1 -1
  64. package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js +2 -0
  65. package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js.map +1 -1
  66. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js +11 -1
  67. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js.map +1 -1
  68. package/dist/esm/packages/taco/src/index.js +1 -1
  69. package/dist/hooks/useLocalStorage.d.ts +1 -1
  70. package/dist/index.css +85 -22
  71. package/dist/primitives/Listbox2/components/Root.d.ts +1 -1
  72. package/dist/primitives/Listbox2/types.d.ts +1 -1
  73. package/dist/taco.cjs.development.js +513 -257
  74. package/dist/taco.cjs.development.js.map +1 -1
  75. package/dist/taco.cjs.production.min.js +1 -1
  76. package/dist/taco.cjs.production.min.js.map +1 -1
  77. package/package.json +2 -2
  78. package/types.json +25442 -12989
@@ -318,6 +318,21 @@ function IconAttachCancel(props, svgRef) {
318
318
  }
319
319
  var AttachCancel = /*#__PURE__*/React.forwardRef(IconAttachCancel);
320
320
 
321
+ function IconAttachWarning(props, svgRef) {
322
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
323
+ fill: "none",
324
+ xmlns: "http://www.w3.org/2000/svg",
325
+ viewBox: "0 0 24 24",
326
+ ref: svgRef
327
+ }, props), /*#__PURE__*/React.createElement("path", {
328
+ fillRule: "evenodd",
329
+ clipRule: "evenodd",
330
+ d: "M12.38 3.688a3.75 3.75 0 015.44 5.16l-.137.144-9.132 9.131a2.25 2.25 0 01-3.287-3.069l.105-.113 6.657-6.656a.75.75 0 011.128.983l-.068.077-6.656 6.657a.75.75 0 00.984 1.128l.076-.067 9.132-9.132a2.25 2.25 0 00-3.07-3.287l-.112.105-9.132 9.132a3.75 3.75 0 005.16 5.44l.144-.137 1.934-1.935a6.062 6.062 0 00.09 2.031l-.964.965a5.25 5.25 0 01-7.574-7.269l.15-.156 9.131-9.132zM22 18a4.5 4.5 0 10-9 0 4.5 4.5 0 009 0zm-5.243-2.852a.75.75 0 011.493.102v3.5l-.007.102a.75.75 0 01-1.493-.102v-3.5l.007-.102zM17.5 20a.75.75 0 100 1.5.75.75 0 000-1.5z",
331
+ fill: "currentColor"
332
+ }));
333
+ }
334
+ var AttachWarning = /*#__PURE__*/React.forwardRef(IconAttachWarning);
335
+
321
336
  function IconAttach(props, svgRef) {
322
337
  return /*#__PURE__*/React.createElement("svg", Object.assign({
323
338
  xmlns: "http://www.w3.org/2000/svg",
@@ -473,6 +488,79 @@ function IconCashReports(props, svgRef) {
473
488
  }
474
489
  var CashReports = /*#__PURE__*/React.forwardRef(IconCashReports);
475
490
 
491
+ function IconChartArea(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: "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",
501
+ fill: "currentColor"
502
+ }));
503
+ }
504
+ var ChartArea = /*#__PURE__*/React.forwardRef(IconChartArea);
505
+
506
+ function IconChartBar(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: "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",
516
+ fill: "currentColor"
517
+ }));
518
+ }
519
+ var ChartBar = /*#__PURE__*/React.forwardRef(IconChartBar);
520
+
521
+ function IconChartLine(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
+ fillRule: "evenodd",
529
+ clipRule: "evenodd",
530
+ 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",
531
+ fill: "currentColor"
532
+ }));
533
+ }
534
+ var ChartLine = /*#__PURE__*/React.forwardRef(IconChartLine);
535
+
536
+ function IconChartPie(props, svgRef) {
537
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
538
+ fill: "none",
539
+ xmlns: "http://www.w3.org/2000/svg",
540
+ viewBox: "0 0 24 24",
541
+ ref: svgRef
542
+ }, props), /*#__PURE__*/React.createElement("path", {
543
+ 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",
544
+ fill: "currentColor"
545
+ }));
546
+ }
547
+ var ChartPie = /*#__PURE__*/React.forwardRef(IconChartPie);
548
+
549
+ function IconChartTable(props, svgRef) {
550
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
551
+ fill: "none",
552
+ xmlns: "http://www.w3.org/2000/svg",
553
+ viewBox: "0 0 24 24",
554
+ ref: svgRef
555
+ }, props), /*#__PURE__*/React.createElement("path", {
556
+ fillRule: "evenodd",
557
+ clipRule: "evenodd",
558
+ 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",
559
+ fill: "currentColor"
560
+ }));
561
+ }
562
+ var ChartTable = /*#__PURE__*/React.forwardRef(IconChartTable);
563
+
476
564
  function IconChatSolid(props, svgRef) {
477
565
  return /*#__PURE__*/React.createElement("svg", Object.assign({
478
566
  xmlns: "http://www.w3.org/2000/svg",
@@ -3128,6 +3216,7 @@ const icons = {
3128
3216
  'arrow-up': ArrowUp,
3129
3217
  'attach-auto': AttachAuto,
3130
3218
  'attach-cancel': AttachCancel,
3219
+ 'attach-warning': AttachWarning,
3131
3220
  attach: Attach,
3132
3221
  'autotext-insert': AutotextInsert,
3133
3222
  autotext: Autotext,
@@ -3140,6 +3229,11 @@ const icons = {
3140
3229
  calendar: Calendar,
3141
3230
  'cash-account': CashAccount,
3142
3231
  'cash-reports': CashReports,
3232
+ 'chart-area': ChartArea,
3233
+ 'chart-bar': ChartBar,
3234
+ 'chart-line': ChartLine,
3235
+ 'chart-pie': ChartPie,
3236
+ 'chart-table': ChartTable,
3143
3237
  'chat-solid': ChatSolid,
3144
3238
  chat: Chat,
3145
3239
  'chevron-down-double': ChevronDownDouble,
@@ -9875,7 +9969,7 @@ const Multiple = /*#__PURE__*/React__default.forwardRef(function Select2TriggerM
9875
9969
  }, /*#__PURE__*/React__default.createElement("div", {
9876
9970
  className: "flex flex-wrap gap-1"
9877
9971
  }, valuesAsChildren.map(child => /*#__PURE__*/React__default.createElement(Tag$1, {
9878
- key: child.props.value,
9972
+ key: String(child.props.value),
9879
9973
  className: "truncate",
9880
9974
  color: tags ? child.props.color : undefined,
9881
9975
  disabled: disabled,
@@ -12992,9 +13086,14 @@ const Cell = function Cell(props) {
12992
13086
  };
12993
13087
  if (meta.editMode.onSave && hasCellControl && (canEditThisCell || isHoveringThisRowWhileEditing && isDataColumn)) {
12994
13088
  attributes.onMouseDown = event => {
12995
- handleMouseDown(event);
12996
13089
  const target = event.target;
12997
13090
  const isTargetInput = target !== null && target.nodeName === 'INPUT';
13091
+ // In Edit mode, If mouse click is happening outside of cell (in case of any dropdowns like date picker or select),
13092
+ // then it should not be processed as a click on a cell.
13093
+ if (!event.currentTarget.contains(target)) {
13094
+ return;
13095
+ }
13096
+ handleMouseDown(event);
12998
13097
  // event.target?.select is only truthy for input elements
12999
13098
  // if event.target is active element, then that means we should select the text
13000
13099
  if (isTargetInput && target !== document.activeElement) {
@@ -16211,7 +16310,7 @@ const MemoedFooter = /*#__PURE__*/React__default.memo(function MemoedFooter(prop
16211
16310
  className: className,
16212
16311
  "data-align": align,
16213
16312
  "data-column-index": index,
16214
- role: "cell"
16313
+ role: "columnheader"
16215
16314
  }, typeof meta.footer === 'function' ? /*#__PURE__*/React__default.createElement("span", {
16216
16315
  className: "flex-grow truncate"
16217
16316
  }, meta.footer(table.getRowModel().rows.map(row => row.original[id]))) : null);
@@ -16257,7 +16356,7 @@ const MemoedCell = /*#__PURE__*/React__default.memo(function MemoedCell(props) {
16257
16356
  const actionsOnRow = visibleActions.length === actionsLength ? visibleActions : visibleActions.slice(0, actionsLength - 1);
16258
16357
  const actionsInMenu = visibleActions.slice(visibleActions.length === actionsLength ? actionsLength : actionsLength - 1);
16259
16358
  content = /*#__PURE__*/React__default.createElement("span", {
16260
- className: "-mb-2 -mt-2 flex justify-end pl-2 text-right",
16359
+ className: "-mb-2 -mt-1.5 flex justify-end pl-2 text-right",
16261
16360
  ref: ref
16262
16361
  }, actionsOnRow.map((button, index) => {
16263
16362
  var _ref, _button$props$tooltip;
@@ -16307,7 +16406,7 @@ function createRowActionsColumn$1() {
16307
16406
  footer: Footer$4,
16308
16407
  meta: {
16309
16408
  align: 'right',
16310
- className: cn('!pt-[var(--table3-row-padding)] print:opacity-0 [[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:sticky [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:sticky right-0 !pl-1 !pr-1', '[[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:shadow-[-6px_0px_6px_theme(colors.grey.200)] [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:shadow-[-6px_0px_6px_theme(colors.grey.100)]', 'group-[[data-current="true"][data-selected="false"]]/row:text-grey-200', 'group-[[data-selected="true"]]/row:text-blue-100', 'group-[[data-selected="false"]:hover]/row:text-grey-100'),
16409
+ className: cn('!pt-[var(--table3-row-padding)] print:opacity-0 [[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:sticky [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:sticky right-0 !pl-1 !pr-1', 'shadow-[-6px_0px_6px_var(--table3-row-actions-shadow)]', 'group-[[data-current="true"][data-selected="false"]]/row:text-grey-200', 'group-[[data-selected="true"]]/row:text-blue-100', 'group-[[data-selected="false"]:hover]/row:text-grey-100'),
16311
16410
  enableOrdering: false,
16312
16411
  enableSearch: false,
16313
16412
  enableTruncate: false,
@@ -16401,6 +16500,8 @@ const useCssGrid = table => {
16401
16500
  if (column.id === COLUMN_ID) {
16402
16501
  size = 'minmax(max-content, auto)';
16403
16502
  } else {
16503
+ // getSize method is used instead of columnSizing state because columnSizing state doesn't have
16504
+ // sizes of internal columns.
16404
16505
  size = `${column.getSize()}px`;
16405
16506
  }
16406
16507
  } else if (width !== undefined) {
@@ -16909,17 +17010,26 @@ function useColumnFreezingStyle(tableId, table) {
16909
17010
  columnVisibility
16910
17011
  } = table.getState();
16911
17012
  const tableMeta = table.options.meta;
16912
- const frozenColumnIndex = ((_tableMeta$columnFree = tableMeta.columnFreezing.frozenColumnIndex) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : -1) + tableMeta.columnFreezing.frozenInternalColumnCount;
17013
+ const frozenColumnIndex =
17014
+ // If column freezing is not enabled then only internal frozen column should be frozen.
17015
+ (tableMeta.columnFreezing.isEnabled ? (_tableMeta$columnFree = tableMeta.columnFreezing.frozenColumnIndex) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : -1 : -1) + tableMeta.columnFreezing.frozenInternalColumnCount;
16913
17016
  const style = React__default.useMemo(() => {
16914
17017
  if (tableMeta.columnFreezing.frozenInternalColumnCount > 0 || tableMeta.columnFreezing.isEnabled && frozenColumnIndex !== undefined) {
16915
- const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, frozenColumnIndex + 1).map(column => column.id);
17018
+ var _visibleFrozenColumns;
17019
+ const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, frozenColumnIndex + 1);
16916
17020
  // if all frozen columns haven't had their size set yet, then abort
16917
- if (visibleFrozenColumns.every(id => columnSizing[id] === undefined)) {
17021
+ if (visibleFrozenColumns.every(column => columnSizing[column.id] === undefined)) {
16918
17022
  return undefined;
16919
17023
  }
16920
17024
  const offsets = {};
16921
- visibleFrozenColumns.reduce((offset, columnId) => {
17025
+ visibleFrozenColumns.reduce((offset, column) => {
17026
+ const columnId = column.id;
16922
17027
  offsets[columnId] = offset;
17028
+ if (isInternalColumn$1(columnId)) {
17029
+ // getSize method is used instead of columnSizing state because columnSizing state doesn't have
17030
+ // sizes of internal columns.
17031
+ return offset + column.getSize();
17032
+ }
16923
17033
  return offset + columnSizing[columnId];
16924
17034
  }, 0);
16925
17035
  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})) {
@@ -16928,7 +17038,7 @@ function useColumnFreezingStyle(tableId, table) {
16928
17038
  }`, `#${tableId}[data-horizontally-scrolled="true"] [role="row"] > :nth-child(${frozenColumnIndex + 1}) {
16929
17039
  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;
16930
17040
  }`];
16931
- const columnId = visibleFrozenColumns[frozenColumnIndex];
17041
+ const columnId = (_visibleFrozenColumns = visibleFrozenColumns[frozenColumnIndex]) === null || _visibleFrozenColumns === void 0 ? void 0 : _visibleFrozenColumns.id;
16932
17042
  // frozenColumnIndex could not be in the visible frozen column so it is important to check if columnId
16933
17043
  // exists before checking if it is internal.
16934
17044
  //
@@ -17435,121 +17545,133 @@ const willRowMoveAfterSorting$1 = (value, cell, rowIndex, rows, desc) => {
17435
17545
  return ((_resortedRows$index = resortedRows[index]) === null || _resortedRows$index === void 0 ? void 0 : _resortedRows$index.id) !== cell.row.id;
17436
17546
  };
17437
17547
 
17438
- function EditingCell$1(props) {
17439
- return /*#__PURE__*/React__default.createElement(MemoedEditingCell, Object.assign({}, props));
17440
- }
17441
- const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditingCell(props) {
17442
- var _tableMeta$editing$ge, _tableMeta$editing$ro, _rows$tableMeta$curre;
17548
+ const Textarea = /*#__PURE__*/React.forwardRef(function Textarea(props, ref) {
17443
17549
  const {
17444
- cell,
17550
+ defaultValue: _,
17551
+ highlighted,
17552
+ invalid,
17553
+ onKeyDown,
17554
+ ...otherProps
17555
+ } = props;
17556
+ const classNames = cn(getInputClasses(props), 'py-1 min-h-[75px] disabled:resize-none', props.className);
17557
+ // home and end keys only navigate to the start/end of textarea value if the textarea container does not scroll
17558
+ // if it has scroll height then the browser reverts to native scrolling behaviour only
17559
+ // so we manually override it to ensure _our_ desired behaviour remains intact
17560
+ const handleKeyDown = event => {
17561
+ if (event.key === 'Home' || event.key === 'End') {
17562
+ event.preventDefault();
17563
+ const position = event.key === 'End' ? event.currentTarget.value.length : 0;
17564
+ event.currentTarget.setSelectionRange(position, position);
17565
+ event.currentTarget.scrollTop = event.key === 'End' ? event.currentTarget.scrollHeight : 0;
17566
+ }
17567
+ if (onKeyDown) {
17568
+ onKeyDown(event);
17569
+ }
17570
+ };
17571
+ return /*#__PURE__*/React.createElement("textarea", Object.assign({}, otherProps, {
17572
+ className: classNames,
17573
+ "data-taco": "textarea",
17574
+ onKeyDown: handleKeyDown,
17575
+ ref: ref
17576
+ }));
17577
+ });
17578
+
17579
+ const TextAreaControl = /*#__PURE__*/React__default.forwardRef(function TextAreaControl(props, externalRef) {
17580
+ const {
17581
+ onKeyDown: handleKeyDown,
17582
+ onChange: handleChange,
17445
17583
  column,
17446
- index,
17447
- getValue,
17448
- table,
17449
- tableRef,
17450
- row
17584
+ isCellInDetailMode,
17585
+ align,
17586
+ isCurrentRow,
17587
+ value,
17588
+ ...attributes
17451
17589
  } = props;
17452
- const tableMeta = table.options.meta;
17590
+ const textareaMaxHeight = 120;
17591
+ const textareaMinHeight = 32;
17453
17592
  const columnMeta = column.columnDef.meta;
17454
- const cellRef = React__default.useRef(null);
17455
- const controlRef = React__default.useRef(null);
17456
- const handleChange = value => tableMeta.editing.setCellValue(cell, value);
17457
- const value = (_tableMeta$editing$ge = tableMeta.editing.getCellValue(cell)) !== null && _tableMeta$editing$ge !== void 0 ? _tableMeta$editing$ge : getValue();
17458
- const handleFocus = event => {
17459
- var _event$target;
17460
- // Check if cell is hidden behind pinned columns or edititng actions, and scroll to it.
17461
- const frozenColumnIndex = tableMeta.columnFreezing.frozenColumnIndex;
17462
- const tableElement = tableRef.current;
17463
- if (tableElement && frozenColumnIndex !== undefined && index > frozenColumnIndex) {
17464
- var _cellRef$current;
17465
- const lastFrozenColumnElement = getCurrentRowCellElement(frozenColumnIndex, tableElement);
17466
- const cellRect = (_cellRef$current = cellRef.current) === null || _cellRef$current === void 0 ? void 0 : _cellRef$current.getBoundingClientRect();
17467
- const lastFrozenRect = lastFrozenColumnElement === null || lastFrozenColumnElement === void 0 ? void 0 : lastFrozenColumnElement.getBoundingClientRect();
17468
- const tableRect = tableElement.getBoundingClientRect();
17469
- // Check for pinned columns overlap
17470
- if (cellRect && lastFrozenRect && cellRect.left < lastFrozenRect.left + lastFrozenRect.width) {
17471
- const pinnedColumnsWidth = lastFrozenRect.left + lastFrozenRect.width;
17472
- tableElement.scrollTo(cellRect.left - pinnedColumnsWidth, tableElement.scrollTop);
17473
- // Check for editing actions overlap
17474
- } else if (cellRect && tableRect && cellRect.right > tableRect.right - EDITING_ACTIONS_WIDTH) {
17475
- const spaceBetweenCellAndEditingActions = 10;
17476
- tableElement.scrollTo(
17477
- // Need to take into account if table has been already scrolled.
17478
- tableElement.scrollLeft + EDITING_ACTIONS_WIDTH + spaceBetweenCellAndEditingActions, tableElement.scrollTop);
17593
+ const ref = useMergedRef(externalRef);
17594
+ React__default.useEffect(() => {
17595
+ // If truncation is not enabled, then textarea should re-calculate it's height to fit with it's own content, when initialized.
17596
+ if (ref !== null && ref !== void 0 && ref.current && !(columnMeta !== null && columnMeta !== void 0 && columnMeta.enableTruncate)) {
17597
+ const textareaElement = ref === null || ref === void 0 ? void 0 : ref.current;
17598
+ resizeTextArea(textareaElement);
17599
+ }
17600
+ }, []);
17601
+ React__default.useEffect(() => {
17602
+ // If truncation is enabled, then textarea should only adjust to it's own content, when in detail mode.
17603
+ // Otherwise it should collapse to minimal height.
17604
+ if (ref !== null && ref !== void 0 && ref.current && columnMeta !== null && columnMeta !== void 0 && columnMeta.enableTruncate) {
17605
+ const textareaElement = ref === null || ref === void 0 ? void 0 : ref.current;
17606
+ if (isCellInDetailMode) {
17607
+ resizeTextArea(textareaElement);
17608
+ } else {
17609
+ textareaElement.style.height = `${textareaMinHeight}px`;
17479
17610
  }
17480
17611
  }
17481
- if ((_event$target = event.target) !== null && _event$target !== void 0 && _event$target.select) {
17482
- requestAnimationFrame(() => {
17483
- event.target.select();
17484
- });
17612
+ }, [isCellInDetailMode]);
17613
+ const resizeTextArea = textareaElement => {
17614
+ // Need to set inherit before calculating height, so that browser sets the scrollHeight properly,
17615
+ // depending on text inside.
17616
+ const textareaRect = textareaElement.getBoundingClientRect();
17617
+ const prevHeight = textareaRect.height;
17618
+ if (columnMeta !== null && columnMeta !== void 0 && columnMeta.enableTruncate) {
17619
+ if (prevHeight < textareaMaxHeight) {
17620
+ textareaElement.style.height = 'inherit';
17621
+ textareaElement.style.height = `${Math.min(textareaElement.scrollHeight, textareaMaxHeight)}px`;
17622
+ }
17623
+ } else {
17624
+ textareaElement.style.height = 'inherit';
17625
+ textareaElement.style.height = `${textareaElement.scrollHeight}px`;
17485
17626
  }
17486
17627
  };
17487
- const handleBlur = () => {
17488
- tableMeta.editing.setDetailModeEditing(false);
17489
- };
17490
- // row move indicator
17491
- const moveReason = (_tableMeta$editing$ro = tableMeta.editing.rowMoveReason[cell.column.id]) !== null && _tableMeta$editing$ro !== void 0 ? _tableMeta$editing$ro : null;
17492
- const rows = table.getRowModel().rows;
17493
- const isCurrentRow = ((_rows$tableMeta$curre = rows[tableMeta.currentRow.currentRowIndex]) === null || _rows$tableMeta$curre === void 0 ? void 0 : _rows$tableMeta$curre.id) === row.id;
17494
- const mountNode = React__default.useMemo(() => {
17495
- if (moveReason) {
17496
- var _cellRef$current2, _cellRef$current2$par;
17497
- return (_cellRef$current2 = cellRef.current) === null || _cellRef$current2 === void 0 ? void 0 : (_cellRef$current2$par = _cellRef$current2.parentElement) === null || _cellRef$current2$par === void 0 ? void 0 : _cellRef$current2$par.firstChild;
17498
- }
17499
- return null;
17500
- }, [moveReason, cellRef]);
17501
- const removeMoveReason = () => {
17502
- tableMeta.editing.removeRowMoveReason(cell.column.id);
17628
+ const handleTextareaChange = e => {
17629
+ resizeTextArea(e.target);
17503
17630
  };
17504
- React__default.useEffect(() => {
17505
- // To avoid reseting move reason on another row hover,
17506
- // we need to check for changes only if value got changed in the current row.
17507
- if (!isCurrentRow) {
17631
+ const textareaContainerClassName = cn('w-full', {
17632
+ 'focus-within:absolute focus-within:left-0 focus-within:top-0 focus-within:z-20 focus-within:px-2 focus-within:pt-[var(--table3-row-padding)]': columnMeta === null || columnMeta === void 0 ? void 0 : columnMeta.enableTruncate
17633
+ });
17634
+ const handleTextareaKeyDown = event => {
17635
+ // By default Shift + Enter in textarea makes a new line, we want to keep this behaviour
17636
+ if (event.shiftKey && event.key === 'Enter') {
17508
17637
  return;
17509
- }
17510
- if (hasChanged$1(getValue(), value)) {
17511
- const moveReason = getRowMoveReason(table, row.index, row.original, cell, value);
17512
- tableMeta.editing.setRowMoveReason({
17513
- [cell.column.id]: moveReason
17514
- });
17515
17638
  } else {
17516
- removeMoveReason();
17639
+ handleKeyDown(event);
17517
17640
  }
17518
- return removeMoveReason;
17519
- }, [value]);
17520
- const className = cn('!px-2 py-[var(--table3-row-padding)]',
17521
- // component overrides - grayscale for editing hover
17522
- '[[role="row"][data-current="false"]:hover_&>*]:!grayscale [[role="row"][data-current="false"]:hover_&_.bg-white]:!bg-grey-100',
17523
- // we alias to any because className conflicts with the Table2 definition,
17524
- // when Table2 is gone, remove this as any
17525
- typeof columnMeta.className === 'function' ? columnMeta.className(row.original) : columnMeta.className);
17526
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, moveReason !== null && mountNode && /*#__PURE__*/React__default.createElement(Indicator$1, {
17527
- reason: moveReason,
17528
- columnName: String(cell.column.columnDef.header),
17529
- mountNode: mountNode,
17530
- validationErrors: []
17531
- }), /*#__PURE__*/React__default.createElement("div", {
17532
- className: className,
17533
- "data-column-index": index,
17534
- role: "cell",
17535
- ref: cellRef
17536
- }, /*#__PURE__*/React__default.createElement(Control, {
17537
- align: columnMeta.align,
17538
- column: cell.column,
17539
- data: cell.row.original,
17540
- initialValue: getValue(),
17541
- onBlur: handleBlur,
17542
- onFocus: handleFocus,
17543
- onChange: handleChange,
17544
- ref: controlRef,
17545
- table: table,
17546
- tableRef: tableRef,
17547
- value: value,
17548
- cell: cell
17641
+ };
17642
+ return /*#__PURE__*/React__default.createElement("div", {
17643
+ className: textareaContainerClassName,
17644
+ "data-taco": "input-container"
17645
+ }, /*#__PURE__*/React__default.createElement(Textarea, Object.assign({}, attributes, {
17646
+ onChange: event => {
17647
+ handleChange(event.target.value);
17648
+ handleTextareaChange(event);
17649
+ },
17650
+ rows: 1,
17651
+ onKeyDown: e => {
17652
+ handleTextareaKeyDown(e);
17653
+ },
17654
+ onBlur: event => {
17655
+ // If truncation is enabled, then textarea should shring back to min height, when loosing focus.
17656
+ if (columnMeta !== null && columnMeta !== void 0 && columnMeta.enableTruncate) {
17657
+ const textareaElement = event.currentTarget;
17658
+ textareaElement.style.height = `${textareaMinHeight}px`;
17659
+ }
17660
+ },
17661
+ className: cn(getCellAlignmentClasses$1(align), `z-20 h-fit resize-none`, {
17662
+ [`!min-h-[${textareaMinHeight}px]`]: columnMeta === null || columnMeta === void 0 ? void 0 : columnMeta.enableTruncate,
17663
+ '!yt-focus-dark': isCellInDetailMode,
17664
+ [`h-[${textareaMinHeight}px]`]: !isCellInDetailMode && (columnMeta === null || columnMeta === void 0 ? void 0 : columnMeta.enableTruncate),
17665
+ // Only allow resizing when focused and truncation enabled
17666
+ 'focus:resize-y': isCurrentRow && (columnMeta === null || columnMeta === void 0 ? void 0 : columnMeta.enableTruncate)
17667
+ }),
17668
+ ref: ref,
17669
+ value: String(value !== null && value !== void 0 ? value : '')
17549
17670
  })));
17550
17671
  });
17551
- const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, ref) {
17552
- var _column$columnDef$met, _ref$current;
17672
+
17673
+ const EditingControl = /*#__PURE__*/React__default.forwardRef(function Control(props, externalRef) {
17674
+ var _ref$current;
17553
17675
  const {
17554
17676
  align,
17555
17677
  column,
@@ -17560,11 +17682,16 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17560
17682
  tableRef,
17561
17683
  value,
17562
17684
  cell,
17685
+ isCurrentRow,
17563
17686
  ...attributes
17564
17687
  } = props;
17565
17688
  const tableMeta = table.options.meta;
17566
- const controlRenderer = (_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.control;
17689
+ const ref = React__default.useRef();
17690
+ const refCallback = mergeRefs([ref, externalRef]);
17691
+ const columnMeta = column.columnDef.meta;
17692
+ const controlRenderer = columnMeta === null || columnMeta === void 0 ? void 0 : columnMeta.control;
17567
17693
  const isCellInDetailMode = tableMeta.editing.detailModeEditing && (ref === null || ref === void 0 ? void 0 : (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.contains(document.activeElement));
17694
+ // Revert to initial value if escape was pressed
17568
17695
  const handleKeyDown = event => {
17569
17696
  const target = event.target;
17570
17697
  if (target.readOnly) {
@@ -17572,12 +17699,10 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17572
17699
  }
17573
17700
  // prevent row arrow shortcuts triggering when in detail mode
17574
17701
  if (tableMeta.editing.detailModeEditing && (event.key === 'ArrowUp' || event.key === 'ArrowDown')) {
17575
- event.preventDefault();
17576
17702
  event.stopPropagation();
17577
17703
  }
17578
17704
  if (event.key === 'Escape') {
17579
17705
  event.preventDefault();
17580
- // Revert to initial value if escape was pressed in detail mode.
17581
17706
  if (tableMeta.editing.detailModeEditing) {
17582
17707
  tableMeta.editing.setDetailModeEditing(false);
17583
17708
  if (value !== initialValue) {
@@ -17595,7 +17720,9 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17595
17720
  }
17596
17721
  }
17597
17722
  } else {
17723
+ var _tableRef$current;
17598
17724
  tableMeta.editing.toggleEditing(false);
17725
+ (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.focus();
17599
17726
  }
17600
17727
  return;
17601
17728
  }
@@ -17613,6 +17740,15 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17613
17740
  return;
17614
17741
  }
17615
17742
  };
17743
+ const isNumber = typeof value === 'number';
17744
+ const handleInputKeyDown = event => {
17745
+ handleKeyDown(event);
17746
+ // Switching to editing mode, when key pressed any alphabetical character or number
17747
+ if (/^[a-z0-9]$/i.test(event.key)) {
17748
+ tableMeta.editing.setDetailModeEditing(true);
17749
+ return;
17750
+ }
17751
+ };
17616
17752
  const handleDatepickerChange = event => {
17617
17753
  // When datepicker looses focus, it triggers change event, even if date wasn't changed,
17618
17754
  // so adding additional check here to prevent adding change to the edititng state.
@@ -17625,7 +17761,7 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17625
17761
  if (typeof controlRenderer === 'function') {
17626
17762
  return controlRenderer({
17627
17763
  ...attributes,
17628
- ref,
17764
+ ref: ref,
17629
17765
  setValue: nextValue => {
17630
17766
  if (nextValue !== value) {
17631
17767
  handleChange(nextValue);
@@ -17647,7 +17783,7 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17647
17783
  }),
17648
17784
  onChange: handleDatepickerChange,
17649
17785
  onKeyDown: handleDatepickerKeyDown,
17650
- ref: ref,
17786
+ ref: refCallback,
17651
17787
  value: value
17652
17788
  }));
17653
17789
  } else if (controlRenderer === 'switch') {
@@ -17655,18 +17791,15 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17655
17791
  className: "mx-2 mt-1.5",
17656
17792
  checked: Boolean(value),
17657
17793
  onChange: handleChange,
17658
- ref: ref
17794
+ ref: refCallback
17795
+ }));
17796
+ } else if (controlRenderer === 'textarea') {
17797
+ return /*#__PURE__*/React__default.createElement(TextAreaControl, Object.assign({}, props, {
17798
+ isCellInDetailMode: isCellInDetailMode,
17799
+ onKeyDown: handleInputKeyDown,
17800
+ ref: refCallback
17659
17801
  }));
17660
17802
  }
17661
- const isNumber = typeof value === 'number';
17662
- const handleInputKeyDown = event => {
17663
- handleKeyDown(event);
17664
- // Switching to editing mode, when key pressed any alphabetical character or number
17665
- if (/^[a-z0-9]$/i.test(event.key)) {
17666
- tableMeta.editing.setDetailModeEditing(true);
17667
- return;
17668
- }
17669
- };
17670
17803
  return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
17671
17804
  className: cn(getInputAppearanceClassnames(), getCellAlignmentClasses$1(align), {
17672
17805
  '!yt-focus-dark': isCellInDetailMode
@@ -17675,11 +17808,143 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17675
17808
  handleChange(event.target.value);
17676
17809
  },
17677
17810
  onKeyDown: handleInputKeyDown,
17678
- ref: ref,
17811
+ ref: refCallback,
17679
17812
  type: isNumber ? 'number' : undefined,
17680
17813
  value: isNumber ? value : String(value !== null && value !== void 0 ? value : '')
17681
17814
  }));
17682
17815
  });
17816
+
17817
+ function EditingCell$1(props) {
17818
+ const {
17819
+ isHovered
17820
+ } = useRowContext$1();
17821
+ // Need to explicitly pass tableMeta, because just passing the table object will not trigger editing change since table object is not mutatable.
17822
+ const tableMeta = props.table.options.meta;
17823
+ return /*#__PURE__*/React__default.createElement(MemoedEditingCell, Object.assign({}, props, {
17824
+ isHovered: isHovered,
17825
+ tableMeta: tableMeta
17826
+ }));
17827
+ }
17828
+ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditingCell(props) {
17829
+ var _tableMeta$editing$ge, _tableMeta$editing$ro, _rows$tableMeta$curre, _column$columnDef$met;
17830
+ const {
17831
+ cell,
17832
+ column,
17833
+ index,
17834
+ getValue,
17835
+ table,
17836
+ tableRef,
17837
+ row,
17838
+ isHovered,
17839
+ tableMeta
17840
+ } = props;
17841
+ const columnMeta = column.columnDef.meta;
17842
+ const cellRef = React__default.useRef(null);
17843
+ const controlRef = React__default.useRef(null);
17844
+ const handleChange = value => tableMeta.editing.setCellValue(cell, value);
17845
+ const value = (_tableMeta$editing$ge = tableMeta.editing.getCellValue(cell)) !== null && _tableMeta$editing$ge !== void 0 ? _tableMeta$editing$ge : getValue();
17846
+ const handleFocus = event => {
17847
+ var _event$target;
17848
+ // Check if cell is hidden behind pinned columns or edititng actions, and scroll to it.
17849
+ const frozenColumnIndex = tableMeta.columnFreezing.frozenColumnIndex;
17850
+ const tableElement = tableRef.current;
17851
+ if (tableElement && frozenColumnIndex !== undefined && index > frozenColumnIndex) {
17852
+ var _cellRef$current;
17853
+ const lastFrozenColumnElement = getCurrentRowCellElement(frozenColumnIndex, tableElement);
17854
+ const cellRect = (_cellRef$current = cellRef.current) === null || _cellRef$current === void 0 ? void 0 : _cellRef$current.getBoundingClientRect();
17855
+ const lastFrozenRect = lastFrozenColumnElement === null || lastFrozenColumnElement === void 0 ? void 0 : lastFrozenColumnElement.getBoundingClientRect();
17856
+ const tableRect = tableElement.getBoundingClientRect();
17857
+ // Check for pinned columns overlap
17858
+ if (cellRect && lastFrozenRect && cellRect.left < lastFrozenRect.left + lastFrozenRect.width) {
17859
+ const pinnedColumnsWidth = lastFrozenRect.left + lastFrozenRect.width;
17860
+ tableElement.scrollTo(cellRect.left - pinnedColumnsWidth, tableElement.scrollTop);
17861
+ // Check for editing actions overlap
17862
+ } else if (cellRect && tableRect && cellRect.right > tableRect.right - EDITING_ACTIONS_WIDTH) {
17863
+ const spaceBetweenCellAndEditingActions = 10;
17864
+ tableElement.scrollTo(
17865
+ // Need to take into account if table has been already scrolled.
17866
+ tableElement.scrollLeft + EDITING_ACTIONS_WIDTH + spaceBetweenCellAndEditingActions, tableElement.scrollTop);
17867
+ }
17868
+ }
17869
+ if ((_event$target = event.target) !== null && _event$target !== void 0 && _event$target.select) {
17870
+ requestAnimationFrame(() => {
17871
+ event.target.select();
17872
+ });
17873
+ }
17874
+ };
17875
+ const handleBlur = () => {
17876
+ tableMeta.editing.setDetailModeEditing(false);
17877
+ };
17878
+ // row move indicator
17879
+ const moveReason = (_tableMeta$editing$ro = tableMeta.editing.rowMoveReason[cell.column.id]) !== null && _tableMeta$editing$ro !== void 0 ? _tableMeta$editing$ro : null;
17880
+ const rows = table.getRowModel().rows;
17881
+ const isCurrentRow = ((_rows$tableMeta$curre = rows[tableMeta.currentRow.currentRowIndex]) === null || _rows$tableMeta$curre === void 0 ? void 0 : _rows$tableMeta$curre.id) === row.id;
17882
+ const mountNode = React__default.useMemo(() => {
17883
+ if (moveReason) {
17884
+ var _cellRef$current2, _cellRef$current2$par;
17885
+ return (_cellRef$current2 = cellRef.current) === null || _cellRef$current2 === void 0 ? void 0 : (_cellRef$current2$par = _cellRef$current2.parentElement) === null || _cellRef$current2$par === void 0 ? void 0 : _cellRef$current2$par.firstChild;
17886
+ }
17887
+ return null;
17888
+ }, [moveReason, cellRef]);
17889
+ const removeMoveReason = () => {
17890
+ tableMeta.editing.removeRowMoveReason(cell.column.id);
17891
+ };
17892
+ React__default.useEffect(() => {
17893
+ // To avoid reseting move reason on another row hover,
17894
+ // we need to check for changes only if value got changed in the current row.
17895
+ if (!isCurrentRow) {
17896
+ return;
17897
+ }
17898
+ if (hasChanged$1(getValue(), value)) {
17899
+ const moveReason = getRowMoveReason(table, row.index, row.original, cell, value);
17900
+ tableMeta.editing.setRowMoveReason({
17901
+ [cell.column.id]: moveReason
17902
+ });
17903
+ } else {
17904
+ removeMoveReason();
17905
+ }
17906
+ return removeMoveReason;
17907
+ }, [value]);
17908
+ const controlRenderer = (_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.control;
17909
+ const className = cn('!px-2 py-[var(--table3-row-padding)]', {
17910
+ relative: (isCurrentRow || isHovered) && controlRenderer === 'textarea',
17911
+ // Need to set higher z-index, so that the current row textarea (in expanded state) overlaps rows below
17912
+ 'z-10': isCurrentRow,
17913
+ // When row is hovered and located below, then the hovered textarea overlaps the current row textarea(if the current row textarea is expanded to support multiple lines),
17914
+ // as result we need to set lower z-index for the hovered row -> cell.
17915
+ 'z-0': isHovered
17916
+ },
17917
+ // component overrides - grayscale for editing hover
17918
+ '[[role="row"][data-current="false"]:hover_&>*]:!grayscale [[role="row"][data-current="false"]:hover_&_.bg-white]:!bg-grey-100',
17919
+ // we alias to any because className conflicts with the Table2 definition,
17920
+ // when Table2 is gone, remove this as any
17921
+ typeof columnMeta.className === 'function' ? columnMeta.className(row.original) : columnMeta.className);
17922
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, moveReason !== null && mountNode && /*#__PURE__*/React__default.createElement(Indicator$1, {
17923
+ reason: moveReason,
17924
+ columnName: String(cell.column.columnDef.header),
17925
+ mountNode: mountNode,
17926
+ validationErrors: []
17927
+ }), /*#__PURE__*/React__default.createElement("div", {
17928
+ className: className,
17929
+ "data-column-index": index,
17930
+ role: "cell",
17931
+ ref: cellRef
17932
+ }, /*#__PURE__*/React__default.createElement(EditingControl, {
17933
+ align: columnMeta.align,
17934
+ column: cell.column,
17935
+ data: cell.row.original,
17936
+ initialValue: getValue(),
17937
+ onBlur: handleBlur,
17938
+ onFocus: handleFocus,
17939
+ onChange: handleChange,
17940
+ ref: controlRef,
17941
+ table: table,
17942
+ tableRef: tableRef,
17943
+ value: value,
17944
+ cell: cell,
17945
+ isCurrentRow: isCurrentRow
17946
+ })));
17947
+ });
17683
17948
  function getRowMoveReason(table, rowIndex, rowValues, cell, newValue) {
17684
17949
  var _table$getState$sorti;
17685
17950
  let rowMoveReason = null;
@@ -17816,7 +18081,7 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17816
18081
  return newTableMeta.currentRow.currentRowIndex === oldTableMeta.currentRow.currentRowIndex && newProps.row.getIsSelected() !== oldProps.row.getIsSelected();
17817
18082
  });
17818
18083
  function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17819
- const size = hasDrag ? 22 : 40;
18084
+ const size = hasDrag && hasExpansion ? 22 : 4;
17820
18085
  return {
17821
18086
  id: COLUMN_ID$2,
17822
18087
  header: Header$3,
@@ -17826,7 +18091,7 @@ function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17826
18091
  align: 'center',
17827
18092
  className: cn('!pt-[var(--table3-row-padding)] !justify-end !p-0', {
17828
18093
  '!pr-0.5': hasExpansion,
17829
- '!pr-2.5': !hasExpansion
18094
+ '!pr-3': !hasExpansion
17830
18095
  }),
17831
18096
  enableOrdering: false,
17832
18097
  enableSearch: false,
@@ -17834,7 +18099,7 @@ function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17834
18099
  header: '',
17835
18100
  headerClassName: cn('items-center !justify-end !p-0', {
17836
18101
  '!pr-0.5': hasExpansion,
17837
- '!pr-2.5': !hasExpansion
18102
+ '!pr-3': !hasExpansion
17838
18103
  })
17839
18104
  },
17840
18105
  // options
@@ -18009,8 +18274,8 @@ function createRowDragColumn(onRowDrag) {
18009
18274
  },
18010
18275
  // options
18011
18276
  enableResizing: false,
18012
- size: 15,
18013
- minSize: 15
18277
+ size: 20,
18278
+ minSize: 20
18014
18279
  };
18015
18280
  }
18016
18281
 
@@ -18030,88 +18295,92 @@ function getSortingFn$1(dataType, customFnOrBuiltIn) {
18030
18295
  return 'auto';
18031
18296
  }
18032
18297
  function useConvertChildrenToColumns(props, options, editing) {
18033
- var _props$actionsForRow;
18034
- const columnHelper = reactTable$1.createColumnHelper();
18035
- const columns = [];
18036
- const defaultColumnSizing = {};
18037
- const defaultColumnVisibility = {};
18038
- const defaultSorting = [];
18039
- React__default.Children.toArray(props.children).filter(child => !!child) // remove falsey children
18040
- .forEach(child => {
18041
- if ( /*#__PURE__*/React__default.isValidElement(child) && child.props.accessor) {
18042
- var _child$props$enableRe, _child$props$enableFi, _child$props$enableSo, _child$props$enableHi, _child$props$enableOr, _child$props$enableSe, _child$props$enableTr;
18043
- if (child.props.defaultWidth) {
18044
- defaultColumnSizing[child.props.accessor] = child.props.defaultWidth === 'grow' ? '1fr' : child.props.defaultWidth;
18045
- }
18046
- if (child.props.defaultHidden && options.enableColumnHiding) {
18047
- defaultColumnVisibility[child.props.accessor] = false;
18048
- }
18049
- if (child.props.sort !== undefined) {
18050
- defaultSorting.push({
18298
+ // It's important to memoise column definitions, because it prevents columns like "Drag column" to re-render on every state change,
18299
+ // and break dragging at the moment it happens.
18300
+ return React__default.useMemo(() => {
18301
+ var _props$actionsForRow;
18302
+ const columnHelper = reactTable$1.createColumnHelper();
18303
+ const columns = [];
18304
+ const defaultColumnSizing = {};
18305
+ const defaultColumnVisibility = {};
18306
+ const defaultSorting = [];
18307
+ React__default.Children.toArray(props.children).filter(child => !!child) // remove falsey children
18308
+ .forEach(child => {
18309
+ if ( /*#__PURE__*/React__default.isValidElement(child) && child.props.accessor) {
18310
+ var _child$props$enableRe, _child$props$enableFi, _child$props$enableSo, _child$props$enableHi, _child$props$enableOr, _child$props$enableSe, _child$props$enableTr;
18311
+ if (child.props.defaultWidth) {
18312
+ defaultColumnSizing[child.props.accessor] = child.props.defaultWidth === 'grow' ? '1fr' : child.props.defaultWidth;
18313
+ }
18314
+ if (child.props.defaultHidden && options.enableColumnHiding) {
18315
+ defaultColumnVisibility[child.props.accessor] = false;
18316
+ }
18317
+ if (child.props.sort !== undefined) {
18318
+ defaultSorting.push({
18319
+ id: child.props.accessor,
18320
+ desc: child.props.sort === 'desc'
18321
+ });
18322
+ }
18323
+ columns.push({
18324
+ accessorKey: child.props.accessor,
18051
18325
  id: child.props.accessor,
18052
- desc: child.props.sort === 'desc'
18326
+ header: Header$2,
18327
+ cell: Cell$3,
18328
+ footer: Footer$4,
18329
+ // sizing
18330
+ minSize: MIN_COLUMN_SIZE$1,
18331
+ enableResizing: (_child$props$enableRe = child.props.enableResizing) !== null && _child$props$enableRe !== void 0 ? _child$props$enableRe : true,
18332
+ // filtering
18333
+ enableColumnFilter: (_child$props$enableFi = child.props.enableFiltering) !== null && _child$props$enableFi !== void 0 ? _child$props$enableFi : true,
18334
+ filterFn: 'tacoFilter',
18335
+ // sorting
18336
+ enableSorting: (_child$props$enableSo = child.props.enableSorting) !== null && _child$props$enableSo !== void 0 ? _child$props$enableSo : true,
18337
+ sortingFn: getSortingFn$1(child.props.dataType, child.props.sortFn),
18338
+ sortDescFirst: false,
18339
+ sortUndefined: 1,
18340
+ // visibility
18341
+ enableHiding: (_child$props$enableHi = child.props.enableHiding) !== null && _child$props$enableHi !== void 0 ? _child$props$enableHi : true,
18342
+ // custom options
18343
+ meta: {
18344
+ align: child.props.align,
18345
+ className: child.props.className,
18346
+ control: child.props.control,
18347
+ dataType: child.props.dataType,
18348
+ enableOrdering: (_child$props$enableOr = child.props.enableOrdering) !== null && _child$props$enableOr !== void 0 ? _child$props$enableOr : true,
18349
+ enableSearch: (_child$props$enableSe = child.props.enableSearch) !== null && _child$props$enableSe !== void 0 ? _child$props$enableSe : true,
18350
+ enableTruncate: (_child$props$enableTr = child.props.enableTruncate) !== null && _child$props$enableTr !== void 0 ? _child$props$enableTr : false,
18351
+ filters: child.props.filters,
18352
+ footer: child.props.footer,
18353
+ header: child.props.header,
18354
+ headerClassName: child.props.headerClassName,
18355
+ menu: child.props.menu,
18356
+ renderer: child.props.renderer,
18357
+ tooltip: child.props.tooltip
18358
+ }
18053
18359
  });
18054
18360
  }
18055
- columns.push({
18056
- accessorKey: child.props.accessor,
18057
- id: child.props.accessor,
18058
- header: Header$2,
18059
- cell: Cell$3,
18060
- footer: Footer$4,
18061
- // sizing
18062
- minSize: MIN_COLUMN_SIZE$1,
18063
- enableResizing: (_child$props$enableRe = child.props.enableResizing) !== null && _child$props$enableRe !== void 0 ? _child$props$enableRe : true,
18064
- // filtering
18065
- enableColumnFilter: (_child$props$enableFi = child.props.enableFiltering) !== null && _child$props$enableFi !== void 0 ? _child$props$enableFi : true,
18066
- filterFn: 'tacoFilter',
18067
- // sorting
18068
- enableSorting: (_child$props$enableSo = child.props.enableSorting) !== null && _child$props$enableSo !== void 0 ? _child$props$enableSo : true,
18069
- sortingFn: getSortingFn$1(child.props.dataType, child.props.sortFn),
18070
- sortDescFirst: false,
18071
- sortUndefined: 1,
18072
- // visibility
18073
- enableHiding: (_child$props$enableHi = child.props.enableHiding) !== null && _child$props$enableHi !== void 0 ? _child$props$enableHi : true,
18074
- // custom options
18075
- meta: {
18076
- align: child.props.align,
18077
- className: child.props.className,
18078
- control: child.props.control,
18079
- dataType: child.props.dataType,
18080
- enableOrdering: (_child$props$enableOr = child.props.enableOrdering) !== null && _child$props$enableOr !== void 0 ? _child$props$enableOr : true,
18081
- enableSearch: (_child$props$enableSe = child.props.enableSearch) !== null && _child$props$enableSe !== void 0 ? _child$props$enableSe : true,
18082
- enableTruncate: (_child$props$enableTr = child.props.enableTruncate) !== null && _child$props$enableTr !== void 0 ? _child$props$enableTr : false,
18083
- filters: child.props.filters,
18084
- footer: child.props.footer,
18085
- header: child.props.header,
18086
- headerClassName: child.props.headerClassName,
18087
- menu: child.props.menu,
18088
- renderer: child.props.renderer,
18089
- tooltip: child.props.tooltip
18090
- }
18091
- });
18361
+ });
18362
+ if (options.enableRowExpansion && props.expandedRowRenderer) {
18363
+ columns.unshift(columnHelper.display(createRowExpansionColumn$1(props.expandedRowRenderer)));
18092
18364
  }
18093
- });
18094
- if (options.enableRowExpansion && props.expandedRowRenderer) {
18095
- columns.unshift(columnHelper.display(createRowExpansionColumn$1(props.expandedRowRenderer)));
18096
- }
18097
- if (options.enableRowSelection) {
18098
- columns.unshift(columnHelper.display(createRowSelectionColumn$1(!!(options.enableRowDrag && props.onRowDrag), !!props.expandedRowRenderer)));
18099
- }
18100
- if (options.enableRowDrag && props.onRowDrag) {
18101
- columns.unshift(columnHelper.display(createRowDragColumn(props.onRowDrag)));
18102
- }
18103
- if ((_props$actionsForRow = props.actionsForRow) !== null && _props$actionsForRow !== void 0 && _props$actionsForRow.length) {
18104
- columns.push(columnHelper.display(createRowActionsColumn$1()));
18105
- }
18106
- if (editing.isEnabled && editing.isEditing) {
18107
- columns.push(columnHelper.display(createRowEditingActionsColumn()));
18108
- }
18109
- return {
18110
- columns,
18111
- defaultColumnSizing,
18112
- defaultColumnVisibility,
18113
- defaultSorting
18114
- };
18365
+ if (options.enableRowSelection) {
18366
+ columns.unshift(columnHelper.display(createRowSelectionColumn$1(!!(options.enableRowDrag && props.onRowDrag), !!props.expandedRowRenderer)));
18367
+ }
18368
+ if (options.enableRowDrag && props.onRowDrag) {
18369
+ columns.unshift(columnHelper.display(createRowDragColumn(props.onRowDrag)));
18370
+ }
18371
+ if ((_props$actionsForRow = props.actionsForRow) !== null && _props$actionsForRow !== void 0 && _props$actionsForRow.length) {
18372
+ columns.push(columnHelper.display(createRowActionsColumn$1()));
18373
+ }
18374
+ if (editing.isEnabled && editing.isEditing) {
18375
+ columns.push(columnHelper.display(createRowEditingActionsColumn()));
18376
+ }
18377
+ return {
18378
+ columns,
18379
+ defaultColumnSizing,
18380
+ defaultColumnVisibility,
18381
+ defaultSorting
18382
+ };
18383
+ }, []);
18115
18384
  }
18116
18385
 
18117
18386
  function usePrinting(isEnabled, loadAll, showWarningWhenPrintingLargeDataset = true) {
@@ -18240,6 +18509,9 @@ function useRowActions$1(actionsForRow, actionsForRowLength = ACTIONS_ON_ROW_LEN
18240
18509
 
18241
18510
  const useLocalStorage = (key, initialValue) => {
18242
18511
  const [state, setState] = React__default.useState(() => {
18512
+ if (!key) {
18513
+ return initialValue;
18514
+ }
18243
18515
  try {
18244
18516
  const localStorageValue = localStorage.getItem(key);
18245
18517
  if (typeof localStorageValue !== 'string') {
@@ -18256,6 +18528,9 @@ const useLocalStorage = (key, initialValue) => {
18256
18528
  }
18257
18529
  });
18258
18530
  React__default.useEffect(() => {
18531
+ if (!key) {
18532
+ return;
18533
+ }
18259
18534
  try {
18260
18535
  const serializedState = JSON.stringify(state);
18261
18536
  localStorage.setItem(key, serializedState);
@@ -18264,7 +18539,11 @@ const useLocalStorage = (key, initialValue) => {
18264
18539
  // localStorage can throw. Also JSON.stringify can throw.
18265
18540
  }
18266
18541
  }, [key, state]);
18267
- const clear = () => localStorage.removeItem(key);
18542
+ const clear = () => {
18543
+ if (key) {
18544
+ localStorage.removeItem(key);
18545
+ }
18546
+ };
18268
18547
  return [state, setState, clear];
18269
18548
  };
18270
18549
 
@@ -18278,7 +18557,10 @@ function useUniqueTableId(tableId) {
18278
18557
  }
18279
18558
  function useSettings(id, defaultSettings = {}, onChangeSettings) {
18280
18559
  const uniqueId = useUniqueTableId(id);
18281
- const [persistedSettings, setPersistedSettings] = useLocalStorage(uniqueId, defaultSettings);
18560
+ // If the onChangeSettings prop is provided, we intend to handle settings changes externally rather than saving them
18561
+ // to local storage.
18562
+ const key = !onChangeSettings ? uniqueId : undefined;
18563
+ const [persistedSettings, setPersistedSettings] = useLocalStorage(key, defaultSettings);
18282
18564
  return React__default.useMemo(() => {
18283
18565
  if (onChangeSettings) {
18284
18566
  return [defaultSettings, onChangeSettings];
@@ -19245,11 +19527,11 @@ function FilterValue(props) {
19245
19527
  if (((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType) === 'datetime') {
19246
19528
  return /*#__PURE__*/React__default.createElement("div", {
19247
19529
  className: "flex flex-grow items-center gap-2"
19248
- }, /*#__PURE__*/React__default.createElement(Control$1, {
19530
+ }, /*#__PURE__*/React__default.createElement(Control, {
19249
19531
  column: column,
19250
19532
  onChange: value => handleChange([value, toValue]),
19251
19533
  value: fromValue
19252
- }), /*#__PURE__*/React__default.createElement(Control$1, {
19534
+ }), /*#__PURE__*/React__default.createElement(Control, {
19253
19535
  column: column,
19254
19536
  onChange: value => handleChange([fromValue, value]),
19255
19537
  value: toValue
@@ -19257,26 +19539,26 @@ function FilterValue(props) {
19257
19539
  }
19258
19540
  return /*#__PURE__*/React__default.createElement("div", {
19259
19541
  className: "flex flex-grow items-center gap-2"
19260
- }, /*#__PURE__*/React__default.createElement(Control$1, {
19542
+ }, /*#__PURE__*/React__default.createElement(Control, {
19261
19543
  column: column,
19262
19544
  onChange: value => handleChange([isNaN(value) ? undefined : value, toValue]),
19263
19545
  placeholder: "from",
19264
19546
  value: fromValue !== null && fromValue !== void 0 ? fromValue : ''
19265
- }), /*#__PURE__*/React__default.createElement(Control$1, {
19547
+ }), /*#__PURE__*/React__default.createElement(Control, {
19266
19548
  column: column,
19267
19549
  onChange: value => handleChange([fromValue, isNaN(value) ? undefined : value]),
19268
19550
  placeholder: "to",
19269
19551
  value: toValue !== null && toValue !== void 0 ? toValue : ''
19270
19552
  }));
19271
19553
  }
19272
- return /*#__PURE__*/React__default.createElement(Control$1, {
19554
+ return /*#__PURE__*/React__default.createElement(Control, {
19273
19555
  comparator: comparator,
19274
19556
  column: column,
19275
19557
  onChange: handleChange,
19276
19558
  value: value
19277
19559
  });
19278
19560
  }
19279
- function Control$1(props) {
19561
+ function Control(props) {
19280
19562
  var _column$columnDef$met2, _column$columnDef$met3;
19281
19563
  const {
19282
19564
  column,
@@ -19867,7 +20149,9 @@ function PrintIFrame({
19867
20149
  enableRowDrag: false,
19868
20150
  enableRowDrop: false,
19869
20151
  enableRowSelectionSingle: false,
19870
- preset: undefined
20152
+ preset: undefined,
20153
+ // The presence of the onChangeSettings prop ensures that settings won't be stored in local storage.
20154
+ onChangeSettings: () => undefined
19871
20155
  };
19872
20156
  // -top-60 -left-60 styles make sure that iframe is added outside of the viewport
19873
20157
  return /*#__PURE__*/React__default.createElement("iframe", {
@@ -19944,7 +20228,6 @@ function PrintButton(props) {
19944
20228
  printWarningDialogVisibility
19945
20229
  } = tableMeta.printing;
19946
20230
  const printTableId = `${tableProps.id}_print`;
19947
- const printTableLocalStorageKey = useUniqueTableId(printTableId);
19948
20231
  const defaultSettings = React__default.useMemo(() => ({
19949
20232
  columnFreezingIndex: tableMeta.columnFreezing.frozenColumnIndex,
19950
20233
  columnOrder: state.columnOrder,
@@ -19977,9 +20260,6 @@ function PrintButton(props) {
19977
20260
  var _loadingToastRef$curr;
19978
20261
  setIsPrinting(false);
19979
20262
  (_loadingToastRef$curr = loadingToastRef.current) === null || _loadingToastRef$curr === void 0 ? void 0 : _loadingToastRef$curr.close();
19980
- // Remove print table settings after printing. Doing this will not only remove unwanted localstorage space, but
19981
- // will also make sure that the table that is getting printed will always have the fresh table settings
19982
- localStorage.removeItem(printTableLocalStorageKey);
19983
20263
  };
19984
20264
  const handleBeforePrint = () => {
19985
20265
  var _loadingToastRef$curr2;
@@ -20408,10 +20688,12 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20408
20688
  } = useTableRenderStrategy$1(props, table, internalRef);
20409
20689
  const tableMeta = table.options.meta;
20410
20690
  const state = table.getState();
20691
+ const bodyRef = React__default.useRef(null);
20411
20692
  React__default.useEffect(() => {
20412
20693
  const handleKeyDown = event => {
20694
+ var _bodyRef$current;
20413
20695
  // prevent global shortcuts activating while active in other elements, like inputs or buttons
20414
- if (isEventTriggeredOnInteractiveElement(event.target)) {
20696
+ if (isEventTriggeredOnInteractiveElement(event.target) && !(bodyRef !== null && bodyRef !== void 0 && (_bodyRef$current = bodyRef.current) !== null && _bodyRef$current !== void 0 && _bodyRef$current.contains(event.target))) {
20415
20697
  return;
20416
20698
  }
20417
20699
  tableMeta.hoverState.handleKeyDown(event);
@@ -20424,7 +20706,11 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20424
20706
  return () => {
20425
20707
  document.removeEventListener('keydown', handleKeyDown);
20426
20708
  };
20427
- }, []);
20709
+ },
20710
+ // See https://github.com/e-conomic/taco/blob/dev/packages/taco/src/components/Table3/strategies/virtualised.tsx#L143
20711
+ // scrollToIndex function changes when row count changes, so it is important to update handlers with new
20712
+ // scrollToIndex function.
20713
+ [scrollToIndex]);
20428
20714
  const handleBlur = event => {
20429
20715
  tableMeta.editing.handleBlur(event);
20430
20716
  };
@@ -20495,7 +20781,8 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20495
20781
  })))))), table.getRowModel().rows.length ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(focus.FocusScope, null, /*#__PURE__*/React__default.createElement("div", {
20496
20782
  className: "group/body contents",
20497
20783
  "data-taco": "table2-body",
20498
- role: "rowgroup"
20784
+ role: "rowgroup",
20785
+ ref: bodyRef
20499
20786
  }, renderBody())), /*#__PURE__*/React__default.createElement("div", {
20500
20787
  className: "border-grey-300 col-span-full -mt-px border-t"
20501
20788
  }), tableMeta.enableFooter ? /*#__PURE__*/React__default.createElement("div", {
@@ -20609,37 +20896,6 @@ Tabs.List = TabList;
20609
20896
  Tabs.Trigger = TabTrigger;
20610
20897
  Tabs.Content = TabContent;
20611
20898
 
20612
- const Textarea = /*#__PURE__*/React.forwardRef(function Textarea(props, ref) {
20613
- const {
20614
- defaultValue: _,
20615
- highlighted,
20616
- invalid,
20617
- onKeyDown,
20618
- ...otherProps
20619
- } = props;
20620
- const classNames = cn(getInputClasses(props), 'py-1 min-h-[75px] disabled:resize-none', props.className);
20621
- // home and end keys only navigate to the start/end of textarea value if the textarea container does not scroll
20622
- // if it has scroll height then the browser reverts to native scrolling behaviour only
20623
- // so we manually override it to ensure _our_ desired behaviour remains intact
20624
- const handleKeyDown = event => {
20625
- if (event.key === 'Home' || event.key === 'End') {
20626
- event.preventDefault();
20627
- const position = event.key === 'End' ? event.currentTarget.value.length : 0;
20628
- event.currentTarget.setSelectionRange(position, position);
20629
- event.currentTarget.scrollTop = event.key === 'End' ? event.currentTarget.scrollHeight : 0;
20630
- }
20631
- if (onKeyDown) {
20632
- onKeyDown(event);
20633
- }
20634
- };
20635
- return /*#__PURE__*/React.createElement("textarea", Object.assign({}, otherProps, {
20636
- className: classNames,
20637
- "data-taco": "textarea",
20638
- onKeyDown: handleKeyDown,
20639
- ref: ref
20640
- }));
20641
- });
20642
-
20643
20899
  const Tooltip$1 = ({
20644
20900
  continuous,
20645
20901
  index,