@economic/taco 2.33.1 → 2.34.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. package/dist/components/Icon/components/DocumentSigned.d.ts +3 -0
  2. package/dist/components/Icon/components/Home2.d.ts +3 -0
  3. package/dist/components/Icon/components/Id.d.ts +3 -0
  4. package/dist/components/Icon/components/MastercardOs.d.ts +3 -0
  5. package/dist/components/Icon/components/NovemberFirst.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 +2 -2
  12. package/dist/components/Select2/components/Search.d.ts +1 -1
  13. package/dist/components/Table3/components/Columns/Internal/EditingActionsMenu.d.ts +1 -0
  14. package/dist/components/Table3/features/useTableEditing.d.ts +0 -1
  15. package/dist/components/Table3/listeners/useTableEditingListener.d.ts +3 -1
  16. package/dist/components/Tag/Tag.d.ts +1 -1
  17. package/dist/esm/index.css +4 -4
  18. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +4 -5
  19. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js.map +1 -1
  20. package/dist/esm/packages/taco/src/components/Icon/components/DocumentSigned.js +19 -0
  21. package/dist/esm/packages/taco/src/components/Icon/components/DocumentSigned.js.map +1 -0
  22. package/dist/esm/packages/taco/src/components/Icon/components/Home2.js +19 -0
  23. package/dist/esm/packages/taco/src/components/Icon/components/Home2.js.map +1 -0
  24. package/dist/esm/packages/taco/src/components/Icon/components/Id.js +19 -0
  25. package/dist/esm/packages/taco/src/components/Icon/components/Id.js.map +1 -0
  26. package/dist/esm/packages/taco/src/components/Icon/components/MastercardOs.js +23 -0
  27. package/dist/esm/packages/taco/src/components/Icon/components/MastercardOs.js.map +1 -0
  28. package/dist/esm/packages/taco/src/components/Icon/components/NovemberFirst.js +20 -0
  29. package/dist/esm/packages/taco/src/components/Icon/components/NovemberFirst.js.map +1 -0
  30. package/dist/esm/packages/taco/src/components/Icon/components/index.js +10 -0
  31. package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
  32. package/dist/esm/packages/taco/src/components/Input/Input.js +5 -0
  33. package/dist/esm/packages/taco/src/components/Input/Input.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js +9 -7
  35. package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js.map +1 -1
  36. package/dist/esm/packages/taco/src/components/Select2/Select2.js +3 -1
  37. package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
  38. package/dist/esm/packages/taco/src/components/Table3/Table3.js +1 -7
  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/Editing/RowMoveIndicator.js +1 -1
  41. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js.map +1 -1
  42. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +3 -1
  43. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  44. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js +9 -1
  45. package/dist/esm/packages/taco/src/components/Table3/components/Columns/Internal/EditingActionsMenu.js.map +1 -1
  46. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js +1 -1
  47. package/dist/esm/packages/taco/src/components/Table3/components/Row/Row.js.map +1 -1
  48. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js +1 -13
  49. package/dist/esm/packages/taco/src/components/Table3/features/useTableEditing.js.map +1 -1
  50. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js +16 -1
  51. package/dist/esm/packages/taco/src/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  52. package/dist/esm/packages/taco/src/components/Table3/useTable3.js +3 -2
  53. package/dist/esm/packages/taco/src/components/Table3/useTable3.js.map +1 -1
  54. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +2 -1
  55. package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
  56. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js +21 -1
  57. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js.map +1 -1
  58. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js +1 -2
  59. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js.map +1 -1
  60. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/Filter.js +12 -3
  61. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/Filter.js.map +1 -1
  62. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/FilterComparator.js +3 -47
  63. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/components/FilterComparator.js.map +1 -1
  64. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/util.js +44 -1
  65. package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Filters/util.js.map +1 -1
  66. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +1 -1
  67. package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  68. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +5 -5
  69. package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
  70. package/dist/esm/packages/taco/src/utils/dom.js +4 -1
  71. package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
  72. package/dist/index.css +4 -4
  73. package/dist/primitives/Table/Core/components/Body/Body.d.ts +2 -0
  74. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/util.d.ts +2 -1
  75. package/dist/taco.cjs.development.js +221 -97
  76. package/dist/taco.cjs.development.js.map +1 -1
  77. package/dist/taco.cjs.production.min.js +1 -1
  78. package/dist/taco.cjs.production.min.js.map +1 -1
  79. package/dist/utils/dom.d.ts +1 -0
  80. package/package.json +2 -2
@@ -1239,6 +1239,21 @@ function IconDocumentRejectedRequest(props, svgRef) {
1239
1239
  }
1240
1240
  var DocumentRejectedRequest = /*#__PURE__*/React.forwardRef(IconDocumentRejectedRequest);
1241
1241
 
1242
+ function IconDocumentSigned(props, svgRef) {
1243
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
1244
+ fill: "none",
1245
+ xmlns: "http://www.w3.org/2000/svg",
1246
+ viewBox: "0 0 24 24",
1247
+ ref: svgRef
1248
+ }, props), /*#__PURE__*/React.createElement("path", {
1249
+ fillRule: "evenodd",
1250
+ clipRule: "evenodd",
1251
+ d: "M14.293 2.293A1 1 0 0013.586 2H5.75A1.75 1.75 0 004 3.75v16.5c0 .966.784 1.75 1.75 1.75h12.5A1.75 1.75 0 0020 20.25V8.414a1 1 0 00-.293-.707l-5.414-5.414zM5.75 3.5H13v3.75l.006.144A1.75 1.75 0 0014.75 9h3.75v11.25l-.007.057a.25.25 0 01-.243.193H5.75l-.057-.007a.25.25 0 01-.193-.243V3.75l.007-.057A.25.25 0 015.75 3.5zm8.75 1.121V7.25a.25.25 0 00.193.243l.057.007h2.63L14.5 4.621zm-6.693 9.425C8.183 12.37 9.194 11 10.43 11c1.547 0 1.796 1.624 1 3.337a6.972 6.972 0 01-1.424 2.009l-.156.148.138-.007.17-.017c1.058-.13 1.702-.687 2.014-1.725l.044-.16.026-.08c.239-.613 1.208-.407 1.13.292a10.03 10.03 0 00-.074 1.205l.006.168.084-.093.202-.245c.451-.532.863-.748 1.332-.404.185.135.278.313.343.543l.019.072.033.156.064.387.087-.088.147-.16.172-.202.197-.242.22-.284.23-.312.057-.067a.59.59 0 01.898.758l-.133.182-.252.334-.127.162c-.665.834-1.147 1.225-1.605 1.266-.419.037-.725-.198-.889-.556a1.83 1.83 0 01-.128-.403l-.016-.081-.08.09-.093.096c-.583.591-1.13.773-1.585.251l-.068-.084-.054-.08a1.31 1.31 0 01-.128-.29l-.011-.04-.098.082-.152.112c-.568.398-1.28.616-2.126.645l-.2.003-.167-.005a1.862 1.862 0 01-.843-.253l-.016-.01-.077.046-.256.137a6.378 6.378 0 01-.8.342l-.222.072-.078.018a.59.59 0 01-.267-1.145 5.16 5.16 0 00.806-.324l.15-.08-.043-.116-.056-.188c-.133-.511-.144-1.121-.036-1.775l.031-.17.038-.181zm2.617-.347c.422-.975.323-1.52.004-1.52-.545 0-1.255 1.006-1.502 2.273-.09.462-.108.86-.061 1.178l.025.14.082-.07.197-.186a5.84 5.84 0 001.1-1.488l.091-.185.064-.142z",
1252
+ fill: "currentColor"
1253
+ }));
1254
+ }
1255
+ var DocumentSigned = /*#__PURE__*/React.forwardRef(IconDocumentSigned);
1256
+
1242
1257
  function IconDocumentSplit(props, svgRef) {
1243
1258
  return /*#__PURE__*/React.createElement("svg", Object.assign({
1244
1259
  xmlns: "http://www.w3.org/2000/svg",
@@ -1763,6 +1778,21 @@ function IconHeightTall(props, svgRef) {
1763
1778
  }
1764
1779
  var HeightTall = /*#__PURE__*/React.forwardRef(IconHeightTall);
1765
1780
 
1781
+ function IconHome2(props, svgRef) {
1782
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
1783
+ fill: "none",
1784
+ xmlns: "http://www.w3.org/2000/svg",
1785
+ viewBox: "0 0 24 24",
1786
+ ref: svgRef
1787
+ }, props), /*#__PURE__*/React.createElement("path", {
1788
+ fillRule: "evenodd",
1789
+ clipRule: "evenodd",
1790
+ d: "M11.116 2.823a1.25 1.25 0 011.768 0L17.25 7.19V6a.75.75 0 011.5 0v2.69l2.78 2.78a.75.75 0 01-1.06 1.06l-2.994-2.993-.013-.013L12 4.061l-8.47 8.47a.75.75 0 01-1.06-1.061l8.646-8.647zm1.768 3.25l7 7c.234.235.366.553.366.884v6.293c0 .69-.56 1.25-1.25 1.25h-4c-.69 0-1.25-.56-1.25-1.25V16.5h-3.5v3.75c0 .69-.56 1.25-1.25 1.25H5c-.69 0-1.25-.56-1.25-1.25v-6.293c0-.332.132-.65.366-.884l7-7a1.25 1.25 0 011.768 0zM12 7.311l-6.75 6.75V20h3.5v-3.75c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25V20h3.5v-5.94L12 7.31z",
1791
+ fill: "currentColor"
1792
+ }));
1793
+ }
1794
+ var Home2 = /*#__PURE__*/React.forwardRef(IconHome2);
1795
+
1766
1796
  function IconHome(props, svgRef) {
1767
1797
  return /*#__PURE__*/React.createElement("svg", Object.assign({
1768
1798
  xmlns: "http://www.w3.org/2000/svg",
@@ -1776,6 +1806,21 @@ function IconHome(props, svgRef) {
1776
1806
  }
1777
1807
  var Home = /*#__PURE__*/React.forwardRef(IconHome);
1778
1808
 
1809
+ function IconId(props, svgRef) {
1810
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
1811
+ fill: "none",
1812
+ xmlns: "http://www.w3.org/2000/svg",
1813
+ viewBox: "0 0 24 24",
1814
+ ref: svgRef
1815
+ }, props), /*#__PURE__*/React.createElement("path", {
1816
+ fillRule: "evenodd",
1817
+ clipRule: "evenodd",
1818
+ d: "M20.25 5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0120.25 19H3.75A1.75 1.75 0 012 17.25V6.75C2 5.784 2.784 5 3.75 5h16.5zm0 1.5H3.75a.25.25 0 00-.243.193L3.5 6.75v10.5a.25.25 0 00.193.243l.057.007h16.5a.25.25 0 00.243-.193l.007-.057V6.75a.25.25 0 00-.193-.243L20.25 6.5zm-9.268 7.993c-.316-1.81-1.31-2.714-2.982-2.714-1.673 0-2.667.905-2.982 2.714a1.204 1.204 0 001.184 1.41h3.595a1.204 1.204 0 001.185-1.41zM8 8c.76 0 1.374.77 1.374 1.718 0 .949-.615 1.718-1.374 1.718-.759 0-1.374-.77-1.374-1.718C6.626 8.769 7.24 8 8 8zm11 .75a.75.75 0 00-.75-.75h-6a.75.75 0 000 1.5h6a.75.75 0 00.75-.75zM18.25 14a.75.75 0 010 1.5h-4.5a.75.75 0 010-1.5h4.5zm.75-2.25a.75.75 0 00-.75-.75h-4.5a.75.75 0 000 1.5h4.5a.75.75 0 00.75-.75z",
1819
+ fill: "currentColor"
1820
+ }));
1821
+ }
1822
+ var Id = /*#__PURE__*/React.forwardRef(IconId);
1823
+
1779
1824
  function IconImages(props, svgRef) {
1780
1825
  return /*#__PURE__*/React.createElement("svg", Object.assign({
1781
1826
  xmlns: "http://www.w3.org/2000/svg",
@@ -2266,6 +2311,25 @@ function IconMarket(props, svgRef) {
2266
2311
  }
2267
2312
  var Market = /*#__PURE__*/React.forwardRef(IconMarket);
2268
2313
 
2314
+ function IconMastercardOs(props, svgRef) {
2315
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
2316
+ fill: "none",
2317
+ xmlns: "http://www.w3.org/2000/svg",
2318
+ viewBox: "0 0 24 24",
2319
+ ref: svgRef
2320
+ }, props), /*#__PURE__*/React.createElement("path", {
2321
+ d: "M14.698 7.314H9.286v9.66h5.412v-9.66z",
2322
+ fill: "#FF5A00"
2323
+ }), /*#__PURE__*/React.createElement("path", {
2324
+ d: "M9.646 12.144c0-1.963.929-3.704 2.354-4.83A6.178 6.178 0 008.185 6C4.766 6 2 8.748 2 12.144s2.766 6.143 6.185 6.143A6.178 6.178 0 0012 16.973a6.117 6.117 0 01-2.354-4.83z",
2325
+ fill: "#EB001B"
2326
+ }), /*#__PURE__*/React.createElement("path", {
2327
+ d: "M22 12.144c0 3.396-2.766 6.143-6.185 6.143A6.178 6.178 0 0112 16.973a6.095 6.095 0 002.354-4.83A6.146 6.146 0 0012 7.315 6.168 6.168 0 0115.813 6C19.233 6 22 8.766 22 12.144z",
2328
+ fill: "#F79E1B"
2329
+ }));
2330
+ }
2331
+ var MastercardOs = /*#__PURE__*/React.forwardRef(IconMastercardOs);
2332
+
2269
2333
  function IconMatchAmount(props, svgRef) {
2270
2334
  return /*#__PURE__*/React.createElement("svg", Object.assign({
2271
2335
  xmlns: "http://www.w3.org/2000/svg",
@@ -2435,6 +2499,22 @@ function IconNote(props, svgRef) {
2435
2499
  }
2436
2500
  var Note = /*#__PURE__*/React.forwardRef(IconNote);
2437
2501
 
2502
+ function IconNovemberFirst(props, svgRef) {
2503
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
2504
+ fill: "none",
2505
+ xmlns: "http://www.w3.org/2000/svg",
2506
+ viewBox: "0 0 24 24",
2507
+ ref: svgRef
2508
+ }, props), /*#__PURE__*/React.createElement("path", {
2509
+ d: "M21.484 8.828C19.73 3.592 14.065.768 8.829 2.519 3.592 4.271.767 9.936 2.519 15.172c1.752 5.237 7.418 8.06 12.655 6.308a9.997 9.997 0 006.31-12.653z",
2510
+ fill: "#0D2840"
2511
+ }), /*#__PURE__*/React.createElement("path", {
2512
+ d: "M13.977 7.263v5.445l-4.14-5.445H7.264l.78 1.156v7.686h1.919v-5.619l4.28 5.62H15.9V7.262h-1.922z",
2513
+ fill: "#2CD7B3"
2514
+ }));
2515
+ }
2516
+ var NovemberFirst = /*#__PURE__*/React.forwardRef(IconNovemberFirst);
2517
+
2438
2518
  function IconNumbers(props, svgRef) {
2439
2519
  return /*#__PURE__*/React.createElement("svg", Object.assign({
2440
2520
  fill: "none",
@@ -3486,6 +3566,7 @@ const icons = {
3486
3566
  'document-preview': DocumentPreview,
3487
3567
  'document-received': DocumentReceived,
3488
3568
  'document-rejected-request': DocumentRejectedRequest,
3569
+ 'document-signed': DocumentSigned,
3489
3570
  'document-split': DocumentSplit,
3490
3571
  'document-time': DocumentTime,
3491
3572
  document: Document,
@@ -3525,7 +3606,9 @@ const icons = {
3525
3606
  'height-medium': HeightMedium,
3526
3607
  'height-short': HeightShort,
3527
3608
  'height-tall': HeightTall,
3609
+ home2: Home2,
3528
3610
  home: Home,
3611
+ id: Id,
3529
3612
  images: Images,
3530
3613
  import: Import,
3531
3614
  'inbox-einvoicing': InboxEinvoicing,
@@ -3562,6 +3645,7 @@ const icons = {
3562
3645
  'log-out': LogOut,
3563
3646
  log: Log,
3564
3647
  market: Market,
3648
+ 'mastercard-os': MastercardOs,
3565
3649
  'match-amount': MatchAmount,
3566
3650
  'match-entries': MatchEntries,
3567
3651
  menu: Menu,
@@ -3575,6 +3659,7 @@ const icons = {
3575
3659
  'note-follow-up': NoteFollowUp,
3576
3660
  'note-read': NoteRead,
3577
3661
  note: Note,
3662
+ 'november-first': NovemberFirst,
3578
3663
  numbers: Numbers,
3579
3664
  'partner-api': PartnerApi,
3580
3665
  'payment-paid': PaymentPaid,
@@ -4122,6 +4207,9 @@ function isElementInteractive(element) {
4122
4207
  }
4123
4208
  return ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT', 'LABEL', 'OPTION'].includes(element.tagName) && !element.hidden && !element.disabled && !element.readOnly;
4124
4209
  }
4210
+ function isElementInsideTable3OrReport(element) {
4211
+ return !!(element !== null && element !== void 0 && element.closest('[data-taco^=table]'));
4212
+ }
4125
4213
 
4126
4214
  function isPressingMetaKey(event) {
4127
4215
  return isMacOs() ? event.metaKey : event.ctrlKey;
@@ -5214,6 +5302,11 @@ const InputWithoutDeprecatedFeatures = /*#__PURE__*/React.forwardRef(function In
5214
5302
  event.preventDefault();
5215
5303
  const position = event.key === 'End' ? event.currentTarget.value.length : 0;
5216
5304
  event.currentTarget.setSelectionRange(position, position);
5305
+ // Necessary for ensuring the cursor is scrolled into view when using Home/End keys on Windows
5306
+ if (internalRef.current) {
5307
+ const scrollPosition = event.key === 'End' ? internalRef.current.scrollWidth : 0;
5308
+ internalRef.current.scrollLeft = scrollPosition;
5309
+ }
5217
5310
  }
5218
5311
  }
5219
5312
  if (typeof onKeyDown === 'function') {
@@ -5823,9 +5916,7 @@ const useCombobox = ({
5823
5916
  }
5824
5917
  };
5825
5918
  const handleInputKeyDown = event => {
5826
- var _inputRef$current;
5827
5919
  event.persist();
5828
- const insideTheTable = !!((_inputRef$current = inputRef.current) !== null && _inputRef$current !== void 0 && _inputRef$current.closest('table, [role="rowgroup"]'));
5829
5920
  if (!event.ctrlKey && !event.metaKey) {
5830
5921
  switch (event.key) {
5831
5922
  case 'Backspace':
@@ -5847,7 +5938,7 @@ const useCombobox = ({
5847
5938
  }
5848
5939
  case 'Enter':
5849
5940
  {
5850
- if (insideTheTable) {
5941
+ if (isElementInsideTable3OrReport(event.currentTarget)) {
5851
5942
  event.preventDefault();
5852
5943
  if (inline && !open) {
5853
5944
  setOpen(true);
@@ -5865,7 +5956,7 @@ const useCombobox = ({
5865
5956
  if (open) {
5866
5957
  event.preventDefault();
5867
5958
  } else {
5868
- if (!inline && buttonRef.current && !insideTheTable) {
5959
+ if (!inline && buttonRef.current && !isElementInsideTable3OrReport(event.currentTarget)) {
5869
5960
  buttonRef.current.click();
5870
5961
  }
5871
5962
  }
@@ -5885,7 +5976,7 @@ const useCombobox = ({
5885
5976
  listRef.current.dispatchEvent(createCustomKeyboardEvent(event));
5886
5977
  }
5887
5978
  if (inline && !open) {
5888
- if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && !insideTheTable) {
5979
+ if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && !isElementInsideTable3OrReport(event.currentTarget)) {
5889
5980
  event.preventDefault();
5890
5981
  const initialIndex = event.key === 'ArrowUp' ? data.length - 1 : 0;
5891
5982
  setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);
@@ -8194,12 +8285,13 @@ const Link$1 = /*#__PURE__*/React.forwardRef(function MenuLink(props, ref) {
8194
8285
  const Trigger$6 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref) {
8195
8286
  const menu = useCurrentMenu();
8196
8287
  const internalRef = useMergedRef(ref);
8197
- const preventArrowDownShortcut = event => {
8198
- var _internalRef$current;
8199
- const isRenderedInTable = !!((_internalRef$current = internalRef.current) !== null && _internalRef$current !== void 0 && _internalRef$current.closest('tbody'));
8200
- if (isRenderedInTable && event.key === 'ArrowDown') {
8201
- var _internalRef$current2, _internalRef$current3;
8202
- internalRef === null || internalRef === void 0 ? void 0 : (_internalRef$current2 = internalRef.current) === null || _internalRef$current2 === void 0 ? void 0 : (_internalRef$current3 = _internalRef$current2.parentNode) === null || _internalRef$current3 === void 0 ? void 0 : _internalRef$current3.dispatchEvent(createCustomKeyboardEvent(event));
8288
+ const handleKeyDown = event => {
8289
+ if (event.key === 'ArrowDown') {
8290
+ if (isElementInsideTable3OrReport(event.currentTarget)) {
8291
+ var _event$currentTarget$;
8292
+ event.preventDefault();
8293
+ (_event$currentTarget$ = event.currentTarget.parentNode) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.dispatchEvent(createCustomKeyboardEvent(event));
8294
+ }
8203
8295
  }
8204
8296
  };
8205
8297
  React.useEffect(() => {
@@ -8210,7 +8302,7 @@ const Trigger$6 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref)
8210
8302
  return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Trigger, Object.assign({}, props, {
8211
8303
  asChild: true,
8212
8304
  ref: internalRef,
8213
- onKeyDown: preventArrowDownShortcut
8305
+ onKeyDown: handleKeyDown
8214
8306
  }));
8215
8307
  });
8216
8308
 
@@ -10437,11 +10529,11 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
10437
10529
  const [rowActiveIndex, setRowActiveIndex] = React__default.useState(initialRowActiveIndex);
10438
10530
  const [rowHoverIndex, setRowHoverIndex] = React__default.useState(undefined);
10439
10531
  const [isHoverStatePaused, setHoverStatePaused] = useIsHoverStatePaused();
10440
- const move = (direction, length, scrollToIndex) => setRowActiveIndex(currentIndex => {
10441
- const nextIndex = currentIndex !== undefined ? getNextIndex(direction, currentIndex, length) : 0;
10442
- setTimeout(() => scrollToIndex(nextIndex), 1);
10443
- return nextIndex;
10444
- });
10532
+ const move = (direction, length, scrollToIndex) => {
10533
+ const nextIndex = rowActiveIndex !== undefined ? getNextIndex(direction, rowActiveIndex, length) : 0;
10534
+ scrollToIndex(nextIndex);
10535
+ setTimeout(() => setRowActiveIndex(nextIndex), 50);
10536
+ };
10445
10537
  const onKeyDown = React__default.useCallback((event, length, scrollToIndex) => {
10446
10538
  if (!isEnabled || event.defaultPrevented) {
10447
10539
  return;
@@ -11663,7 +11755,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
11663
11755
  } = useRowHeightVirtualisation(table);
11664
11756
  // row groups
11665
11757
  const rangeExtractor = useRowGroupVirtualisation(table);
11666
- // account for thead and tfoot in the scroll area
11758
+ // account for thead and tfoot in the scroll area - both are always medium row height
11667
11759
  const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;
11668
11760
  // column groups offset the bottom padding :shrug:, multiplying by 1.5 ensures the bottom padding remains
11669
11761
  // consistent when there are groups and when there aren't. 1.5 is relatively arbitrary, but it gives alignment
@@ -12421,7 +12513,7 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
12421
12513
  const handleClickCapture = React__default.useCallback(() => {
12422
12514
  // do this in the next frame, otherwise it remounts the row and prevents row actions on hover from being clickable
12423
12515
  requestAnimationFrame(() => tableMeta.rowActive.setRowActiveIndex(index));
12424
- }, []);
12516
+ }, [index]);
12425
12517
  // row active
12426
12518
  if (tableMeta.rowActive.isEnabled) {
12427
12519
  attributes['data-row-active'] = tableMeta.rowActive.rowActiveIndex === index ? true : undefined;
@@ -12434,7 +12526,6 @@ const DisplayRow = /*#__PURE__*/React__default.memo(function DisplayRow(props) {
12434
12526
  }
12435
12527
  // row drag
12436
12528
  if (tableMeta.rowDrag.isEnabled) {
12437
- attributes.draggable = true;
12438
12529
  attributes['aria-grabbed'] = !!tableMeta.rowDrag.dragging[row.id];
12439
12530
  }
12440
12531
  // row drop
@@ -13121,6 +13212,7 @@ function Body(props) {
13121
13212
  enableHorizontalArrowKeyNavigation = false,
13122
13213
  scrollToIndex,
13123
13214
  table,
13215
+ tableElement,
13124
13216
  ...attributes
13125
13217
  } = props;
13126
13218
  const ref = React__default.useRef(null);
@@ -13138,12 +13230,30 @@ function Body(props) {
13138
13230
  return;
13139
13231
  }
13140
13232
  tableMeta.rowActive.setHoverStatePaused(true);
13141
- const focusedElement = event.shiftKey || event.key === 'ArrowLeft' ? focusManager.focusPrevious() : focusManager.focusNext();
13233
+ const isMetaKeyPressed = isPressingMetaKey(event);
13234
+ let focusedElement;
13235
+ switch (event.key) {
13236
+ case 'ArrowLeft':
13237
+ focusedElement = isMetaKeyPressed ? focusManager.focusFirst() : focusManager.focusPrevious();
13238
+ break;
13239
+ case 'ArrowRight':
13240
+ focusedElement = isMetaKeyPressed ? focusManager.focusLast() : focusManager.focusNext();
13241
+ // Scrolls table all the way to the right
13242
+ if (isMetaKeyPressed && tableElement) {
13243
+ tableElement.scrollLeft = tableElement.scrollWidth;
13244
+ }
13245
+ break;
13246
+ default:
13247
+ focusedElement = event.shiftKey ? focusManager.focusPrevious() : focusManager.focusNext();
13248
+ break;
13249
+ }
13142
13250
  if (focusedElement) {
13143
13251
  // override default behaviour, since we're handling focus internally now
13144
13252
  event.preventDefault();
13145
13253
  return;
13146
13254
  }
13255
+ // The code below only executes when focusedElement was undefined/null. This happens only when arrow-left/shift+tab
13256
+ // is pressed on the first cell or arrow-right/tab is pressed on the last cell.
13147
13257
  if (event.shiftKey || event.key === 'ArrowLeft') {
13148
13258
  if (!isFirstRow) {
13149
13259
  // there are no previous elements to focus, go up a row or go outside the table
@@ -15223,6 +15333,8 @@ const Select2 = /*#__PURE__*/React__default.forwardRef(function Select2(props, r
15223
15333
  var _listboxRef$current;
15224
15334
  if (open) {
15225
15335
  event.preventDefault();
15336
+ } else if (isElementInsideTable3OrReport(event.currentTarget)) {
15337
+ return;
15226
15338
  } else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/i.test(event.key))) {
15227
15339
  setOpen(true);
15228
15340
  }
@@ -15639,6 +15751,46 @@ function sortByHeader(a, b) {
15639
15751
  function isEmptyFilter(filter) {
15640
15752
  return !filter.value.hasOwnProperty('value'); // eslint-disable-line no-prototype-builtins
15641
15753
  }
15754
+ function guessComparatorsBasedOnControl(column) {
15755
+ var _column$columnDef$met;
15756
+ const columnMeta = (_column$columnDef$met = column === null || column === void 0 ? void 0 : column.columnDef.meta) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : {};
15757
+ if (Array.isArray(columnMeta.filters)) {
15758
+ return columnMeta.filters;
15759
+ }
15760
+ if (typeof columnMeta.control === 'function') {
15761
+ const renderedControl = columnMeta.control({
15762
+ onBlur: () => undefined,
15763
+ onFocus: () => undefined,
15764
+ setValue: () => undefined,
15765
+ value: undefined,
15766
+ disabled: false,
15767
+ readOnly: false,
15768
+ ref: undefined
15769
+ });
15770
+ if ( /*#__PURE__*/React__default.isValidElement(renderedControl)) {
15771
+ const {
15772
+ props,
15773
+ type
15774
+ } = renderedControl;
15775
+ if (type.displayName === 'Select2') {
15776
+ if (props.multiple) {
15777
+ return [exports.TableFilterComparator.HasAnyOf, exports.TableFilterComparator.HasAllOf, exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.HasNoneOf, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15778
+ }
15779
+ return [exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15780
+ }
15781
+ }
15782
+ }
15783
+ if (columnMeta.dataType === 'number') {
15784
+ return [exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsGreaterThan, exports.TableFilterComparator.IsLessThan, exports.TableFilterComparator.IsBetween, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15785
+ }
15786
+ if (columnMeta.control === 'datepicker' || columnMeta.dataType === 'datetime') {
15787
+ return [exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsBetween, exports.TableFilterComparator.IsLessThan, exports.TableFilterComparator.IsGreaterThan, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty, exports.TableFilterComparator.IsLessThanOrEqualTo, exports.TableFilterComparator.IsGreaterThanOrEqualTo];
15788
+ }
15789
+ if (columnMeta.control === 'switch') {
15790
+ return [exports.TableFilterComparator.IsEqualTo];
15791
+ }
15792
+ return [exports.TableFilterComparator.Contains, exports.TableFilterComparator.DoesNotContain, exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15793
+ }
15642
15794
 
15643
15795
  const FilterColumn = /*#__PURE__*/React__default.forwardRef((props, ref) => {
15644
15796
  const {
@@ -15692,11 +15844,6 @@ function FilterComparator(props) {
15692
15844
  texts
15693
15845
  } = useLocalization();
15694
15846
  const validComparators = guessComparatorsBasedOnControl(column);
15695
- React__default.useEffect(() => {
15696
- if (value === undefined || !validComparators.includes(value)) {
15697
- handleChange === null || handleChange === void 0 ? void 0 : handleChange(validComparators[0]);
15698
- }
15699
- }, [validComparators]);
15700
15847
  return /*#__PURE__*/React__default.createElement(Select2, Object.assign({}, attributes, {
15701
15848
  className: "!w-32 flex-shrink-0",
15702
15849
  disabled: !column,
@@ -15707,49 +15854,9 @@ function FilterComparator(props) {
15707
15854
  value: comparator
15708
15855
  }, getComparatorText(comparator, texts, column)))));
15709
15856
  }
15710
- function guessComparatorsBasedOnControl(column) {
15711
- var _column$columnDef$met;
15712
- const columnMeta = (_column$columnDef$met = column === null || column === void 0 ? void 0 : column.columnDef.meta) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : {};
15713
- if (Array.isArray(columnMeta.filters)) {
15714
- return columnMeta.filters;
15715
- }
15716
- if (typeof columnMeta.control === 'function') {
15717
- const renderedControl = columnMeta.control({
15718
- onBlur: () => undefined,
15719
- onFocus: () => undefined,
15720
- setValue: () => undefined,
15721
- value: undefined,
15722
- disabled: false,
15723
- readOnly: false,
15724
- ref: undefined
15725
- });
15726
- if ( /*#__PURE__*/React__default.isValidElement(renderedControl)) {
15727
- const {
15728
- props,
15729
- type
15730
- } = renderedControl;
15731
- if (type.displayName === 'Select2') {
15732
- if (props.multiple) {
15733
- return [exports.TableFilterComparator.HasAnyOf, exports.TableFilterComparator.HasAllOf, exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.HasNoneOf, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15734
- }
15735
- return [exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15736
- }
15737
- }
15738
- }
15739
- if (columnMeta.dataType === 'number') {
15740
- return [exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsGreaterThan, exports.TableFilterComparator.IsLessThan, exports.TableFilterComparator.IsBetween, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15741
- }
15742
- if (columnMeta.control === 'datepicker' || columnMeta.dataType === 'datetime') {
15743
- return [exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsBetween, exports.TableFilterComparator.IsLessThan, exports.TableFilterComparator.IsGreaterThan, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty, exports.TableFilterComparator.IsLessThanOrEqualTo, exports.TableFilterComparator.IsGreaterThanOrEqualTo];
15744
- }
15745
- if (columnMeta.control === 'switch') {
15746
- return [exports.TableFilterComparator.IsEqualTo];
15747
- }
15748
- return [exports.TableFilterComparator.Contains, exports.TableFilterComparator.DoesNotContain, exports.TableFilterComparator.IsEqualTo, exports.TableFilterComparator.IsNotEqualTo, exports.TableFilterComparator.IsEmpty, exports.TableFilterComparator.IsNotEmpty];
15749
- }
15750
15857
  function getComparatorText(comparator, texts, column) {
15751
- var _column$columnDef, _column$columnDef$met2;
15752
- const isDate = (column === null || column === void 0 ? void 0 : (_column$columnDef = column.columnDef) === null || _column$columnDef === void 0 ? void 0 : (_column$columnDef$met2 = _column$columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.control) === 'datepicker';
15858
+ var _column$columnDef, _column$columnDef$met;
15859
+ const isDate = (column === null || column === void 0 ? void 0 : (_column$columnDef = column.columnDef) === null || _column$columnDef === void 0 ? void 0 : (_column$columnDef$met = _column$columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.control) === 'datepicker';
15753
15860
  switch (comparator) {
15754
15861
  case exports.TableFilterComparator.Contains:
15755
15862
  return texts.table.filters.comparators.contains;
@@ -15925,14 +16032,22 @@ function Filter$1(props) {
15925
16032
  }
15926
16033
  } = filter;
15927
16034
  const handleChangeColumn = columnId => {
15928
- var _previousColumn$colum, _nextColumn$columnDef;
16035
+ var _previousColumn$colum, _previousColumn$colum2, _nextColumn$columnDef;
15929
16036
  const previousColumn = allColumns.find(column => column.id === id);
15930
16037
  const nextColumn = allColumns.find(column => column.id === columnId);
15931
16038
  // UX requirement: if old column data type is the same as next column data type,
15932
16039
  // then we applying the same filter value for the next column,
15933
16040
  // but when data types are different, we're reseting comparator ans value for the next column
15934
- const value = (previousColumn === null || previousColumn === void 0 ? void 0 : (_previousColumn$colum = previousColumn.columnDef.meta) === null || _previousColumn$colum === void 0 ? void 0 : _previousColumn$colum.dataType) === (nextColumn === null || nextColumn === void 0 ? void 0 : (_nextColumn$columnDef = nextColumn.columnDef.meta) === null || _nextColumn$columnDef === void 0 ? void 0 : _nextColumn$columnDef.dataType) ? filter.value : {
15935
- comparator: exports.TableFilterComparator.Contains,
16041
+ if (previousColumn !== null && previousColumn !== void 0 && (_previousColumn$colum = previousColumn.columnDef.meta) !== null && _previousColumn$colum !== void 0 && _previousColumn$colum.dataType && (previousColumn === null || previousColumn === void 0 ? void 0 : (_previousColumn$colum2 = previousColumn.columnDef.meta) === null || _previousColumn$colum2 === void 0 ? void 0 : _previousColumn$colum2.dataType) === (nextColumn === null || nextColumn === void 0 ? void 0 : (_nextColumn$columnDef = nextColumn.columnDef.meta) === null || _nextColumn$columnDef === void 0 ? void 0 : _nextColumn$columnDef.dataType)) {
16042
+ handleChange(position, {
16043
+ id: columnId,
16044
+ value: filter.value
16045
+ });
16046
+ return;
16047
+ }
16048
+ const validComparators = guessComparatorsBasedOnControl(nextColumn);
16049
+ const value = {
16050
+ comparator: validComparators[0],
15936
16051
  value: undefined
15937
16052
  };
15938
16053
  handleChange(position, {
@@ -16242,9 +16357,10 @@ function TableGrid(props) {
16242
16357
  key: props.id,
16243
16358
  header: props,
16244
16359
  scrollToIndex: table.renderer.scrollToIndex
16245
- }))))))), table.instance.getRowModel().rows.length ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Body, {
16360
+ }))))))), table.instance.getCoreRowModel().rows.length ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Body, {
16246
16361
  enableHorizontalArrowKeyNavigation: enableHorizontalArrowKeyNavigation,
16247
16362
  table: table.instance,
16363
+ tableElement: table.ref.current,
16248
16364
  scrollToIndex: table.renderer.scrollToIndex,
16249
16365
  style: table.renderer.style
16250
16366
  }, table.renderer.rows), table.meta.footer.isEnabled ? /*#__PURE__*/React__default.createElement(Foot, {
@@ -17752,7 +17868,7 @@ const useTableRowCreation = (data, tableRef) => {
17752
17868
  };
17753
17869
  };
17754
17870
 
17755
- function useTableEditingListener(table) {
17871
+ function useTableEditingListener(table, tableRef) {
17756
17872
  const tableMeta = table.options.meta;
17757
17873
  const saveChanges = () => {
17758
17874
  requestAnimationFrame(() => {
@@ -17794,6 +17910,20 @@ function useTableEditingListener(table) {
17794
17910
  window.removeEventListener('beforeunload', showUnsavedChangesWarning);
17795
17911
  };
17796
17912
  }, [tableMeta.editing.isEditing, hasChanges]);
17913
+ React__default.useEffect(() => {
17914
+ const onClickOutside = event => {
17915
+ if (tableMeta.editing.isEditing) {
17916
+ var _event$target$getAttr, _event$target;
17917
+ const element = (_event$target$getAttr = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.getAttribute('data-taco')) !== null && _event$target$getAttr !== void 0 ? _event$target$getAttr : '';
17918
+ const insideTable = isElementInsideOrTriggeredFromContainer(event.target, tableRef.current) || element === 'backdrop';
17919
+ if (!insideTable) {
17920
+ saveChanges();
17921
+ }
17922
+ }
17923
+ };
17924
+ document.addEventListener('click', onClickOutside);
17925
+ return () => document.removeEventListener('click', onClickOutside);
17926
+ }, [saveChanges, tableMeta.editing.isEditing]);
17797
17927
  }
17798
17928
 
17799
17929
  function willRowMove(cell, change, rowIndex) {
@@ -17872,15 +18002,6 @@ function useTableEditing(isEnabled = false, handleSave, validator) {
17872
18002
  // changes are saved as soon as the active row changes, so in most cases this will only contain the active row's changes
17873
18003
  // but not always - if validation or server requests fail when saving, those rows remain until the failure is resolved
17874
18004
  const pendingChangesFns = usePendingChanges(isEnabled, handleSave, validator);
17875
- // if focus leaves the table in any way, trigger a save
17876
- const handleBlur = React__default.useCallback(event => {
17877
- // custom event from datepicker, and it doesn't have the relatedTarget property set.
17878
- const isClosingDatepicker = dateFns.isDate(event.detail);
17879
- if (event.relatedTarget !== event.currentTarget && !isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget) && !isClosingDatepicker) {
17880
- pendingChangesFns.saveChanges();
17881
- }
17882
- }, [pendingChangesFns.saveChanges]);
17883
- // TODO: using useGlobalKeyDown prevents trigger when focused on inputs, but it's more "proper"
17884
18005
  useGlobalKeyDown(isEnabled && isEditing ? {
17885
18006
  key: 's',
17886
18007
  meta: true,
@@ -17897,8 +18018,7 @@ function useTableEditing(isEnabled = false, handleSave, validator) {
17897
18018
  toggleEditing: isEnabled ? toggleEditing : () => undefined,
17898
18019
  lastFocusedCellIndex,
17899
18020
  setLastFocusedCellIndex,
17900
- ...pendingChangesFns,
17901
- handleBlur: isEnabled && isEditing ? handleBlur : () => undefined
18021
+ ...pendingChangesFns
17902
18022
  };
17903
18023
  }
17904
18024
  function usePendingChanges(isEnabled, handleSave, validator) {
@@ -18222,7 +18342,7 @@ function RowMoveIndicator(props) {
18222
18342
  if (cellRef.current) {
18223
18343
  if (isActiveRow && !!moveReason) {
18224
18344
  var _cellRef$current$pare;
18225
- const firstChild = (_cellRef$current$pare = cellRef.current.parentElement) === null || _cellRef$current$pare === void 0 ? void 0 : _cellRef$current$pare.querySelector('td');
18345
+ const firstChild = (_cellRef$current$pare = cellRef.current.parentElement) === null || _cellRef$current$pare === void 0 ? void 0 : _cellRef$current$pare.querySelector(`td[data-taco="cell-control"]`);
18226
18346
  if (cellRef.current === firstChild) {
18227
18347
  var _cellRef$current$pare2;
18228
18348
  setShow(true);
@@ -18477,6 +18597,7 @@ function EditingControlCell(props) {
18477
18597
  const cellAttributes = {
18478
18598
  ...getCellAttributes(cell, index, isHighlighted),
18479
18599
  'data-cell-editing-invalid': error ? true : undefined,
18600
+ 'data-taco': 'cell-control',
18480
18601
  onFocus: handleFocus,
18481
18602
  ref: cellRef,
18482
18603
  tabIndex: -1
@@ -18575,7 +18696,7 @@ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditin
18575
18696
  return;
18576
18697
  }
18577
18698
  // toggle into detailed mode when actually inputting something
18578
- if (/^[a-z0-9]$/i.test(event.key) || event.key === 'Backspace') {
18699
+ if (!isPressingMetaKey(event) && (/^[a-z0-9]$/i.test(event.key) || event.key === 'Backspace')) {
18579
18700
  toggleDetailedMode(true);
18580
18701
  }
18581
18702
  };
@@ -18674,16 +18795,24 @@ function EditingActionMenu(props) {
18674
18795
  hasErrors,
18675
18796
  onClear: handleClear,
18676
18797
  onExit: handleExit,
18677
- onSave: handleSave
18798
+ onSave: handleSave,
18799
+ isLastRow
18678
18800
  } = props;
18679
18801
  const {
18680
18802
  texts
18681
18803
  } = useLocalization();
18804
+ const handleKeyDown = event => {
18805
+ // normally we handle this on change of active row, but when tabbing out of the last row the active row state stays on the last one.
18806
+ if (isLastRow && hasChanges && event.key === 'Tab') {
18807
+ handleSave();
18808
+ }
18809
+ };
18682
18810
  return /*#__PURE__*/React__default.createElement(IconButton, {
18683
18811
  appearance: "transparent",
18684
18812
  "aria-label": texts.table3.editing.actions.tooltip,
18685
18813
  className: "group-[[data-row-editing-status]]/row:hidden",
18686
18814
  icon: "more",
18815
+ onKeyDown: handleKeyDown,
18687
18816
  menu: menuProps => ( /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, null, /*#__PURE__*/React__default.createElement(Menu$1.Item, {
18688
18817
  icon: "tick",
18689
18818
  disabled: !hasChanges || hasErrors,
@@ -18783,7 +18912,7 @@ function Row$2(props) {
18783
18912
  if (tableMeta.editing.isEditing && isActiveRow) {
18784
18913
  var _event$target$closest, _event$target$closest2;
18785
18914
  const cellIndex = Number((_event$target$closest = (_event$target$closest2 = event.target.closest('td')) === null || _event$target$closest2 === void 0 ? void 0 : _event$target$closest2.getAttribute('data-cell-index')) !== null && _event$target$closest !== void 0 ? _event$target$closest : undefined);
18786
- if (!isNaN(cellIndex) && tableMeta.editing.lastFocusedCellIndex !== cellIndex) {
18915
+ if (!isNaN(cellIndex)) {
18787
18916
  tableMeta.editing.setLastFocusedCellIndex(Number(cellIndex));
18788
18917
  }
18789
18918
  }
@@ -18813,7 +18942,8 @@ function useTable3(props, ref) {
18813
18942
  hasErrors: editing.hasRowErrors(rowId),
18814
18943
  onClear: () => editing.resetChanges(rowId),
18815
18944
  onSave: () => editing.saveChanges(rowId),
18816
- onExit: () => editing.toggleEditing(false)
18945
+ onExit: () => editing.toggleEditing(false),
18946
+ isLastRow: table.meta.rowActive.rowActiveIndex === table.meta.length - 1
18817
18947
  }))] : props.rowActions
18818
18948
  };
18819
18949
  const meta = {
@@ -18821,7 +18951,7 @@ function useTable3(props, ref) {
18821
18951
  };
18822
18952
  const table = useTable(extendedProps, ref, RENDERERS$1, meta);
18823
18953
  // listeners
18824
- useTableEditingListener(table.instance);
18954
+ useTableEditingListener(table.instance, table.ref);
18825
18955
  React__default.useEffect(() => {
18826
18956
  if (table.ref.current) {
18827
18957
  table.ref.current.instance.toggleEditing = enabled => table.meta.editing.toggleEditing(enabled !== null && enabled !== void 0 ? enabled : editing => !editing);
@@ -19010,15 +19140,9 @@ Group$5.displayName = 'Table3Group';
19010
19140
  const BaseTable3 = /*#__PURE__*/fixedForwardRef(function BaseTable3(props, ref) {
19011
19141
  var _table3$meta$editing, _table3$meta$editing2;
19012
19142
  const table3 = useTable3(props, ref);
19013
- const handleBlur = event => {
19014
- if (table3.meta.editing.isEditing) {
19015
- table3.meta.editing.handleBlur(event);
19016
- }
19017
- };
19018
19143
  const gridAttributes = {
19019
19144
  'data-table-editing-mode': (_table3$meta$editing = table3.meta.editing) !== null && _table3$meta$editing !== void 0 && _table3$meta$editing.isEditing ? (_table3$meta$editing2 = table3.meta.editing) !== null && _table3$meta$editing2 !== void 0 && _table3$meta$editing2.isDetailedMode ? 'detailed' : 'normal' : undefined,
19020
- enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing,
19021
- onBlur: handleBlur
19145
+ enableHorizontalArrowKeyNavigation: table3.meta.editing.isEditing
19022
19146
  };
19023
19147
  const hasValidationErrors = table3.meta.editing.hasErrors(table3.instance, table3.ref);
19024
19148
  return /*#__PURE__*/React__default.createElement(Table, null, /*#__PURE__*/React__default.createElement(Table.Toolbar, {