@economic/taco 2.2.5 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/dist/components/Header/components/Agreement/types.d.ts +1 -1
  2. package/dist/components/Icon/components/PaymentPaid.d.ts +3 -0
  3. package/dist/components/Icon/components/PaymentUnpaid.d.ts +3 -0
  4. package/dist/components/Menu/Context.d.ts +2 -0
  5. package/dist/components/Menu/components/Item.d.ts +3 -2
  6. package/dist/components/Provider/Localization.d.ts +12 -0
  7. package/dist/components/Provider/Provider.d.ts +6 -1
  8. package/dist/components/Table2/types.d.ts +1 -1
  9. package/dist/components/Table3/Table3.d.ts +1 -1
  10. package/dist/components/Table3/components/toolbar/Filter/filters/components/Filter.d.ts +1 -2
  11. package/dist/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.d.ts +4 -4
  12. package/dist/components/Table3/components/toolbar/Filter/filters/components/FilterValue.d.ts +1 -1
  13. package/dist/components/Table3/hooks/features/useColumnFreezing.d.ts +2 -1
  14. package/dist/components/Table3/hooks/features/useSettings.d.ts +2 -0
  15. package/dist/components/Table3/hooks/listeners/useSettingsStateListener.d.ts +2 -2
  16. package/dist/components/Table3/hooks/useTable.d.ts +2 -1
  17. package/dist/components/Table3/types.d.ts +24 -12
  18. package/dist/esm/packages/taco/src/components/Menu/Context.js.map +1 -1
  19. package/dist/esm/packages/taco/src/components/Menu/Menu.js +1 -0
  20. package/dist/esm/packages/taco/src/components/Menu/Menu.js.map +1 -1
  21. package/dist/esm/packages/taco/src/components/Menu/components/Content.js +32 -2
  22. package/dist/esm/packages/taco/src/components/Menu/components/Content.js.map +1 -1
  23. package/dist/esm/packages/taco/src/components/Menu/components/Item.js.map +1 -1
  24. package/dist/esm/packages/taco/src/components/Provider/Localization.js +13 -1
  25. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  26. package/dist/esm/packages/taco/src/components/Provider/Provider.js +11 -4
  27. package/dist/esm/packages/taco/src/components/Provider/Provider.js.map +1 -1
  28. package/dist/esm/packages/taco/src/components/Select2/Select2.js +1 -1
  29. package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
  30. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js +13 -4
  31. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js.map +1 -1
  32. package/dist/esm/packages/taco/src/components/Select2/components/Search.js +7 -1
  33. package/dist/esm/packages/taco/src/components/Select2/components/Search.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js +1 -1
  35. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js.map +1 -1
  36. package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
  37. package/dist/esm/packages/taco/src/components/Table3/Table3.js +2 -1
  38. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  39. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js +2 -2
  40. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js.map +1 -1
  41. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Menu.js +4 -19
  42. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Menu.js.map +1 -1
  43. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js +8 -2
  44. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js.map +1 -1
  45. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js +4 -2
  46. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js.map +1 -1
  47. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Filter.js +2 -24
  48. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Filter.js.map +1 -1
  49. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.js +68 -17
  50. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.js.map +1 -1
  51. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.js +31 -2
  52. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.js.map +1 -1
  53. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.js +1 -5
  54. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.js.map +1 -1
  55. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js +18 -25
  56. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js.map +1 -1
  57. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.js +5 -0
  58. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.js.map +1 -1
  59. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js +3 -3
  60. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js.map +1 -1
  61. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Toolbar.js +6 -2
  62. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Toolbar.js.map +1 -1
  63. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js +20 -16
  64. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js.map +1 -1
  65. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js +18 -0
  66. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js.map +1 -0
  67. package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useSettingsStateListener.js.map +1 -1
  68. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js +2 -4
  69. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js.map +1 -1
  70. package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js +18 -12
  71. package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js.map +1 -1
  72. package/dist/esm/packages/taco/src/components/Table3/types.js +7 -5
  73. package/dist/esm/packages/taco/src/components/Table3/types.js.map +1 -1
  74. package/dist/esm/packages/taco/src/components/Table3/util/filtering.js +24 -6
  75. package/dist/esm/packages/taco/src/components/Table3/util/filtering.js.map +1 -1
  76. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js +34 -0
  77. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js.map +1 -0
  78. package/dist/esm/packages/taco/src/hooks/useTacoSettings.js +9 -0
  79. package/dist/esm/packages/taco/src/hooks/useTacoSettings.js.map +1 -0
  80. package/dist/esm/packages/taco/src/index.js +1 -1
  81. package/dist/hooks/useLocalStorage.d.ts +1 -0
  82. package/dist/hooks/useTacoSettings.d.ts +1 -0
  83. package/dist/taco.cjs.development.js +367 -183
  84. package/dist/taco.cjs.development.js.map +1 -1
  85. package/dist/taco.cjs.production.min.js +1 -1
  86. package/dist/taco.cjs.production.min.js.map +1 -1
  87. package/package.json +2 -2
  88. package/types.json +11451 -10602
  89. package/dist/components/Table3/components/toolbar/Filter/filters/components/Comparator.d.ts +0 -11
@@ -4182,7 +4182,16 @@ const defaultLocalisationTexts = {
4182
4182
  isNoneOf: 'Is none of',
4183
4183
  isAllOf: 'Is all of',
4184
4184
  isEmpty: 'Is empty',
4185
- isNotEmpty: 'Is not empty'
4185
+ isNotEmpty: 'Is not empty',
4186
+ isBefore: 'Is before',
4187
+ isAfter: 'Is after',
4188
+ isOnOrBefore: 'Is on or before',
4189
+ isOnOrAfter: 'Is on or after',
4190
+ isLessThanOrEqualTo: 'Is less than or equal to',
4191
+ isGreaterThanOrEqualTo: 'Is greater than or equal to',
4192
+ hasAnyOf: 'Has any of',
4193
+ hasAllOf: 'Has all of',
4194
+ hasNoneOf: 'Has none of'
4186
4195
  },
4187
4196
  conditions: {
4188
4197
  and: 'And',
@@ -4249,6 +4258,9 @@ const defaultLocalisationTexts = {
4249
4258
  selectAllRows: 'Select all rows',
4250
4259
  expandRow: 'Expand current row',
4251
4260
  collapseRow: 'Collapse current row'
4261
+ },
4262
+ otherOptions: {
4263
+ tooltip: 'Other options'
4252
4264
  }
4253
4265
  },
4254
4266
  searchInput: {
@@ -7228,6 +7240,35 @@ const Content$8 = /*#__PURE__*/React.forwardRef(function MenuContent(props, ref)
7228
7240
  ...otherProps
7229
7241
  } = props;
7230
7242
  const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);
7243
+ // attach refs to each child
7244
+ const childrenRefs = React.useRef([]);
7245
+ const childrenWithRefs = React.Children.toArray(props.children).filter(child => !!child) // remove falsey children
7246
+ .map((child, index) => {
7247
+ childrenRefs.current[index] = /*#__PURE__*/React.createRef();
7248
+ return /*#__PURE__*/React.cloneElement(child, {
7249
+ ref: childrenRefs.current[index]
7250
+ });
7251
+ });
7252
+ // register any shortcuts attached to children
7253
+ React.useEffect(() => {
7254
+ const shortcuts = [];
7255
+ childrenWithRefs.forEach((child, index) => {
7256
+ if (child.props.shortcut) {
7257
+ shortcuts.push(createShortcutKeyDownHandler(child.props.shortcut, event => {
7258
+ event.preventDefault();
7259
+ menu === null || menu === void 0 ? void 0 : menu.open();
7260
+ setTimeout(() => {
7261
+ var _childrenRefs$current, _childrenRefs$current2;
7262
+ return (_childrenRefs$current = childrenRefs.current[index]) === null || _childrenRefs$current === void 0 ? void 0 : (_childrenRefs$current2 = _childrenRefs$current.current) === null || _childrenRefs$current2 === void 0 ? void 0 : _childrenRefs$current2.click();
7263
+ }, 1);
7264
+ }));
7265
+ }
7266
+ });
7267
+ shortcuts.forEach(handler => document.addEventListener('keydown', handler));
7268
+ return () => {
7269
+ shortcuts.forEach(handler => document.removeEventListener('keydown', handler));
7270
+ };
7271
+ }, []);
7231
7272
  return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Portal, null, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Content, Object.assign({}, otherProps, {
7232
7273
  align: align,
7233
7274
  className: className,
@@ -7238,7 +7279,7 @@ const Content$8 = /*#__PURE__*/React.forwardRef(function MenuContent(props, ref)
7238
7279
  minWidth: menu === null || menu === void 0 ? void 0 : menu.minWidth
7239
7280
  },
7240
7281
  ref: internalRef
7241
- }), children));
7282
+ }), childrenWithRefs));
7242
7283
  });
7243
7284
 
7244
7285
  const replaceWithShortform = key => {
@@ -7249,7 +7290,7 @@ const replaceWithShortform = key => {
7249
7290
  return 'Del';
7250
7291
  case 'Space':
7251
7292
  case ' ':
7252
- return '';
7293
+ return 'Space';
7253
7294
  case 'ArrowLeft':
7254
7295
  return '◄';
7255
7296
  case 'ArrowRight':
@@ -7663,6 +7704,7 @@ const Menu$1 = /*#__PURE__*/React.forwardRef(function Menu(externalProps, ref) {
7663
7704
  registerIndentation: () => setIndented(true),
7664
7705
  minWidth,
7665
7706
  setMinWidth: width => setMinWidth(width),
7707
+ open: () => setOpen(true),
7666
7708
  close: () => setOpen(false)
7667
7709
  }), [indented, minWidth]);
7668
7710
  return /*#__PURE__*/React.createElement(MenuContext.Provider, {
@@ -8724,14 +8766,21 @@ const ToastProvider = ({
8724
8766
  };
8725
8767
  const useToast = () => React.useContext(ToastContext);
8726
8768
 
8769
+ const TacoContext = /*#__PURE__*/React.createContext({
8770
+ uniqueUserIdentifier: ''
8771
+ });
8727
8772
  const Provider = props => {
8728
8773
  const {
8729
8774
  children,
8730
- localization
8775
+ localization,
8776
+ settings
8731
8777
  } = props;
8778
+ const context = React.useMemo(() => settings, [JSON.stringify(settings)]);
8732
8779
  return /*#__PURE__*/React.createElement(LocalizationProvider, {
8733
8780
  localization: localization
8734
- }, /*#__PURE__*/React.createElement(TooltipPrimitive.Provider, null, /*#__PURE__*/React.createElement(ToastProvider, null, children)));
8781
+ }, /*#__PURE__*/React.createElement(TacoContext.Provider, {
8782
+ value: context
8783
+ }, /*#__PURE__*/React.createElement(TooltipPrimitive.Provider, null, /*#__PURE__*/React.createElement(ToastProvider, null, children))));
8735
8784
  };
8736
8785
 
8737
8786
  const SearchInput = /*#__PURE__*/React.forwardRef(function SearchInput({
@@ -9468,16 +9517,25 @@ const EditPopover = props => {
9468
9517
  setColor(initialColor);
9469
9518
  };
9470
9519
  const preventKeyDownPropagation = event => {
9471
- if (event.key !== 'Escape') {
9520
+ // Need to allow 'Escape', 'Tab', 'Shift + Tab' to support default focus and close behaviour of Radix Popover.
9521
+ if (event.key === 'Escape' || event.key === 'Tab' || event.key === 'Tab' && event.shiftKey) {
9522
+ return;
9523
+ } else {
9472
9524
  event.stopPropagation();
9473
9525
  }
9474
9526
  };
9475
- return /*#__PURE__*/React__default.createElement(Popover, Object.assign({}, popoverProps, {
9476
- modal: true
9477
- }), /*#__PURE__*/React__default.createElement(Popover.Content, {
9527
+ const popoverContentKeyDown = event => {
9528
+ // Need to stop propagation of 'Tab', 'Shift + Tab' keys out of Popover content,
9529
+ // to avoid 'Tab' key execution on Option component and closing the dropdown.
9530
+ if (event.key === 'Tab' || event.key === 'Tab' && event.shiftKey) {
9531
+ event.stopPropagation();
9532
+ }
9533
+ };
9534
+ return /*#__PURE__*/React__default.createElement(Popover, Object.assign({}, popoverProps), /*#__PURE__*/React__default.createElement(Popover.Content, {
9478
9535
  onCloseAutoFocus: handleCloseAutoFocus,
9479
9536
  onInteractOutside: handleInteractOutside,
9480
9537
  onClick: event => event.stopPropagation(),
9538
+ onKeyDown: popoverContentKeyDown,
9481
9539
  placement: "right",
9482
9540
  tabIndex: -1,
9483
9541
  className: "focus:!shadow-none"
@@ -9984,7 +10042,8 @@ const Search$1 = /*#__PURE__*/React__default.forwardRef(function ListboxSearch(p
9984
10042
  searchQuery,
9985
10043
  setSearchQuery,
9986
10044
  setValidationError,
9987
- validationError
10045
+ validationError,
10046
+ setOpen
9988
10047
  } = useSelect2Context();
9989
10048
  const handleChange = event => {
9990
10049
  if (validationError) {
@@ -9997,6 +10056,11 @@ const Search$1 = /*#__PURE__*/React__default.forwardRef(function ListboxSearch(p
9997
10056
  if (event.key === ' ') {
9998
10057
  return;
9999
10058
  }
10059
+ // Select2 should close dropdown and receive focus, when user press Tab while searching (UX requirement to support better keyboard navigation)
10060
+ if (event.key === 'Tab') {
10061
+ setOpen(false);
10062
+ return;
10063
+ }
10000
10064
  if (isAriaSelectionKey(event) || event.key === 'ArrowDown' || event.key === 'ArrowUp') {
10001
10065
  var _listboxRef$current;
10002
10066
  event.preventDefault();
@@ -10287,7 +10351,7 @@ const Select2 = /*#__PURE__*/React__default.forwardRef(function Select2(props, r
10287
10351
  var _listboxRef$current;
10288
10352
  if (open) {
10289
10353
  event.preventDefault();
10290
- } else if (event.key === 'ArrowDown') {
10354
+ } else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/i.test(event.key))) {
10291
10355
  setOpen(true);
10292
10356
  }
10293
10357
  // the focus should always remain on the input, so we forward events on to the listbox
@@ -15695,20 +15759,6 @@ function isMenuAvailable(table, header) {
15695
15759
  const tableMeta = table.options.meta;
15696
15760
  return !!((_header$column$column = header.column.columnDef.meta) !== null && _header$column$column !== void 0 && _header$column$column.menu) || !!tableMeta.columnFreezing.isEnabled || !!table.options.enableHiding && !!header.column.getCanHide() || isGotoAvailable(table, header);
15697
15761
  }
15698
- function getInitialFrozenIndex(table) {
15699
- const tableMeta = table.options.meta;
15700
- let index = 0;
15701
- if (tableMeta.rowDrag.isEnabled) {
15702
- index++;
15703
- }
15704
- if (table.options.enableRowSelection) {
15705
- index++;
15706
- }
15707
- if (table.options.enableExpanding) {
15708
- index++;
15709
- }
15710
- return index;
15711
- }
15712
15762
  function Menu$3(props) {
15713
15763
  const {
15714
15764
  canFreeze,
@@ -15770,7 +15820,8 @@ function Menu$3(props) {
15770
15820
  if (handleGoto) {
15771
15821
  menuItems.push( /*#__PURE__*/React__default.createElement(Menu$1.Item, {
15772
15822
  icon: "move",
15773
- onClick: () => setPopover('goto')
15823
+ onClick: () => setPopover('goto'),
15824
+ shortcut: "g"
15774
15825
  }, texts.table3.columns.menu.gotoRow, "..."));
15775
15826
  }
15776
15827
  if (canHide) {
@@ -15782,10 +15833,8 @@ function Menu$3(props) {
15782
15833
  }, texts.table3.columns.menu.hideColumn));
15783
15834
  }
15784
15835
  if (canFreeze) {
15785
- const handleClick = () => {
15786
- tableMeta.columnFreezing.setFrozenColumnIndex(index);
15787
- };
15788
- const frozenIndex = index - getInitialFrozenIndex(table);
15836
+ const frozenIndex = index - tableMeta.columnFreezing.frozenInternalColumnCount;
15837
+ const handleClick = () => tableMeta.columnFreezing.setFrozenColumnIndex(frozenIndex);
15789
15838
  menuItems.push( /*#__PURE__*/React__default.createElement(Menu$1.Item, {
15790
15839
  icon: "column-freeze",
15791
15840
  onClick: handleClick
@@ -16069,10 +16118,10 @@ function DisplayCell(props) {
16069
16118
  }, [row.original, props.children, value]);
16070
16119
  const memoedHighlight = React__default.useMemo(() => {
16071
16120
  var _tableMeta$search$que;
16072
- if (!tableMeta.search.isHighlightingEnabled) {
16121
+ if (!tableMeta.search.isHighlightingEnabled || !columnMeta.enableSearch) {
16073
16122
  return false;
16074
16123
  }
16075
- if ((_tableMeta$search$que = tableMeta.search.query) !== null && _tableMeta$search$que !== void 0 && _tableMeta$search$que.length && columnMeta.enableSearch) {
16124
+ if ((_tableMeta$search$que = tableMeta.search.query) !== null && _tableMeta$search$que !== void 0 && _tableMeta$search$que.length) {
16076
16125
  return isCellHighlighted(tableMeta.search.query, value, memoedProps.children);
16077
16126
  }
16078
16127
  return false;
@@ -16603,11 +16652,13 @@ var Table3FilterComparator;
16603
16652
  Table3FilterComparator[Table3FilterComparator["IsGreaterThan"] = 4] = "IsGreaterThan";
16604
16653
  Table3FilterComparator[Table3FilterComparator["IsLessThan"] = 5] = "IsLessThan";
16605
16654
  Table3FilterComparator[Table3FilterComparator["IsBetween"] = 6] = "IsBetween";
16606
- Table3FilterComparator[Table3FilterComparator["IsOneOf"] = 7] = "IsOneOf";
16607
- Table3FilterComparator[Table3FilterComparator["IsNoneOf"] = 8] = "IsNoneOf";
16608
- Table3FilterComparator[Table3FilterComparator["IsAllOf"] = 9] = "IsAllOf";
16609
- Table3FilterComparator[Table3FilterComparator["IsEmpty"] = 10] = "IsEmpty";
16610
- Table3FilterComparator[Table3FilterComparator["IsNotEmpty"] = 11] = "IsNotEmpty";
16655
+ Table3FilterComparator[Table3FilterComparator["IsEmpty"] = 7] = "IsEmpty";
16656
+ Table3FilterComparator[Table3FilterComparator["IsNotEmpty"] = 8] = "IsNotEmpty";
16657
+ Table3FilterComparator[Table3FilterComparator["IsLessThanOrEqualTo"] = 9] = "IsLessThanOrEqualTo";
16658
+ Table3FilterComparator[Table3FilterComparator["IsGreaterThanOrEqualTo"] = 10] = "IsGreaterThanOrEqualTo";
16659
+ Table3FilterComparator[Table3FilterComparator["HasAnyOf"] = 11] = "HasAnyOf";
16660
+ Table3FilterComparator[Table3FilterComparator["HasAllOf"] = 12] = "HasAllOf";
16661
+ Table3FilterComparator[Table3FilterComparator["HasNoneOf"] = 13] = "HasNoneOf";
16611
16662
  })(Table3FilterComparator || (Table3FilterComparator = {}));
16612
16663
 
16613
16664
  const toLowerCase$1 = value => String(value !== null && value !== void 0 ? value : '').toLocaleLowerCase();
@@ -16669,6 +16720,24 @@ function columnFilterFn$1(value, filter) {
16669
16720
  return !isNaN(valueAsNumber) && filter.value !== undefined && valueAsNumber < filter.value;
16670
16721
  }
16671
16722
  }
16723
+ case Table3FilterComparator.IsLessThanOrEqualTo:
16724
+ {
16725
+ if (dateFns.isDate(value)) {
16726
+ return dateFns.isDate(filter.value) && (dateFns.isBefore(value, filter.value) || dateFns.isEqual(value, filter.value));
16727
+ } else {
16728
+ const valueAsNumber = parseInt(value);
16729
+ return !isNaN(valueAsNumber) && filter.value !== undefined && valueAsNumber <= filter.value;
16730
+ }
16731
+ }
16732
+ case Table3FilterComparator.IsGreaterThanOrEqualTo:
16733
+ {
16734
+ if (dateFns.isDate(value)) {
16735
+ return dateFns.isDate(filter.value) && (dateFns.isAfter(value, filter.value) || dateFns.isEqual(value, filter.value));
16736
+ } else {
16737
+ const valueAsNumber = parseInt(value);
16738
+ return !isNaN(valueAsNumber) && filter.value !== undefined && valueAsNumber >= filter.value;
16739
+ }
16740
+ }
16672
16741
  case Table3FilterComparator.IsBetween:
16673
16742
  {
16674
16743
  const [fromValue, toValue] = filter.value;
@@ -16692,11 +16761,11 @@ function columnFilterFn$1(value, filter) {
16692
16761
  return true;
16693
16762
  }
16694
16763
  }
16695
- case Table3FilterComparator.IsOneOf:
16696
- return Array.isArray(filter.value) ? filter.value.includes(value) : false;
16697
- case Table3FilterComparator.IsNoneOf:
16698
- return Array.isArray(filter.value) ? filter.value.includes(value) === false : false;
16699
- case Table3FilterComparator.IsAllOf:
16764
+ case Table3FilterComparator.HasAnyOf:
16765
+ return Array.isArray(filter.value) && Array.isArray(value) ? filter.value.some(item => value.includes(item)) : false;
16766
+ case Table3FilterComparator.HasNoneOf:
16767
+ return Array.isArray(filter.value) && Array.isArray(value) ? filter.value.every(item => value.includes(item) === false) : false;
16768
+ case Table3FilterComparator.HasAllOf:
16700
16769
  return Array.isArray(filter.value) && Array.isArray(value) ? filter.value.filter(v => value.includes(v)).length === filter.value.length : false;
16701
16770
  }
16702
16771
  return false;
@@ -16744,8 +16813,8 @@ function useCurrentRowListener(table) {
16744
16813
  }, [rows.length]);
16745
16814
  }
16746
16815
 
16747
- function getDefaultFrozenIndex(options, defaultFrozenIndex = -1) {
16748
- let index = defaultFrozenIndex;
16816
+ function getFrozenInternalColumnCount(options) {
16817
+ let index = 0;
16749
16818
  if (options.enableRowDrag) {
16750
16819
  index++;
16751
16820
  }
@@ -16755,7 +16824,7 @@ function getDefaultFrozenIndex(options, defaultFrozenIndex = -1) {
16755
16824
  if (options.enableRowExpansion) {
16756
16825
  index++;
16757
16826
  }
16758
- return index >= 0 ? index : undefined;
16827
+ return index;
16759
16828
  }
16760
16829
  /*
16761
16830
  Because of the desired behaviour of column freezing we use custom state and just an index.
@@ -16763,7 +16832,7 @@ If a frozen column is, for example, hidden, then the desired behaviour is that t
16763
16832
  If this behaviour were different we would just use the native column pinning functionality
16764
16833
  */
16765
16834
  function useColumnFreezing(defaultFrozenIndex, options) {
16766
- const [frozenColumnIndex, _setFrozenColumnIndex] = React__default.useState(getDefaultFrozenIndex(options, defaultFrozenIndex));
16835
+ const [frozenColumnIndex, _setFrozenColumnIndex] = React__default.useState(() => defaultFrozenIndex);
16767
16836
  const [horizontallyScrolled, setHorizontallyScrolled] = React__default.useState(false);
16768
16837
  const onScroll = event => {
16769
16838
  if (event.currentTarget.scrollLeft > 0 && !horizontallyScrolled) {
@@ -16772,11 +16841,13 @@ function useColumnFreezing(defaultFrozenIndex, options) {
16772
16841
  setHorizontallyScrolled(false);
16773
16842
  }
16774
16843
  };
16775
- const setFrozenColumnIndex = index => {
16776
- _setFrozenColumnIndex(index !== null && index !== void 0 ? index : getDefaultFrozenIndex(options));
16777
- };
16844
+ const frozenInternalColumnCount = React__default.useMemo(() => getFrozenInternalColumnCount(options), []);
16845
+ // we must set a value when undefined is explicitly set, otherwise nothing is saved to settings
16846
+ // and the next time the table loads it will fall back to the initial value even though the user changed it
16847
+ const setFrozenColumnIndex = index => _setFrozenColumnIndex(index !== null && index !== void 0 ? index : -1);
16778
16848
  return {
16779
16849
  isEnabled: options.enableColumnFreezing,
16850
+ frozenInternalColumnCount,
16780
16851
  frozenColumnIndex,
16781
16852
  setFrozenColumnIndex,
16782
16853
  horizontallyScrolled,
@@ -16784,6 +16855,7 @@ function useColumnFreezing(defaultFrozenIndex, options) {
16784
16855
  };
16785
16856
  }
16786
16857
  function useColumnFreezingStyle(tableId, table) {
16858
+ var _tableMeta$columnFree;
16787
16859
  const {
16788
16860
  columnOrder,
16789
16861
  columnSizing,
@@ -16791,9 +16863,10 @@ function useColumnFreezingStyle(tableId, table) {
16791
16863
  columnVisibility
16792
16864
  } = table.getState();
16793
16865
  const tableMeta = table.options.meta;
16866
+ const frozenColumnIndex = ((_tableMeta$columnFree = tableMeta.columnFreezing.frozenColumnIndex) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : -1) + tableMeta.columnFreezing.frozenInternalColumnCount;
16794
16867
  const style = React__default.useMemo(() => {
16795
- if (tableMeta.columnFreezing.isEnabled && tableMeta.columnFreezing.frozenColumnIndex !== undefined) {
16796
- const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, tableMeta.columnFreezing.frozenColumnIndex + 1).map(column => column.id);
16868
+ if (tableMeta.columnFreezing.isEnabled && frozenColumnIndex !== undefined) {
16869
+ const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, frozenColumnIndex + 1).map(column => column.id);
16797
16870
  // if all frozen columns haven't had their size set yet, then abort
16798
16871
  if (visibleFrozenColumns.every(id => columnSizing[id] === undefined)) {
16799
16872
  return undefined;
@@ -16803,26 +16876,26 @@ function useColumnFreezingStyle(tableId, table) {
16803
16876
  offsets[columnId] = offset;
16804
16877
  return offset + columnSizing[columnId];
16805
16878
  }, 0);
16806
- 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+${tableMeta.columnFreezing.frozenColumnIndex + 2})) {
16879
+ 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})) {
16807
16880
  position: sticky;
16808
- z-index: 20;
16809
- }`, `#${tableId}[data-horizontally-scrolled="true"] [role="row"] > :nth-child(${tableMeta.columnFreezing.frozenColumnIndex + 1}) {
16881
+ z-index: 20;
16882
+ }`, `#${tableId}[data-horizontally-scrolled="true"] [role="row"] > :nth-child(${frozenColumnIndex + 1}) {
16810
16883
  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;
16811
16884
  }`];
16812
- const columnId = visibleFrozenColumns[tableMeta.columnFreezing.frozenColumnIndex];
16885
+ const columnId = visibleFrozenColumns[frozenColumnIndex];
16813
16886
  // frozenColumnIndex could not be in the visible frozen column so it is important to check if columnId
16814
16887
  // exists before checking if it is internal.
16815
16888
  //
16816
16889
  // only add a border to the edge column if it isn't an internal column
16817
16890
  if (columnId && !isInternalColumn$1(columnId)) {
16818
- styles.push(`#${tableId}[data-horizontally-scrolled="false"] [role="row"] > :nth-child(${tableMeta.columnFreezing.frozenColumnIndex + 1}) {
16891
+ styles.push(`#${tableId}[data-horizontally-scrolled="false"] [role="row"] > :nth-child(${frozenColumnIndex + 1}) {
16819
16892
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), 1px 0px 0px #DDDDDD;
16820
16893
  }`);
16821
16894
  }
16822
16895
  return styles.join('\n');
16823
16896
  }
16824
16897
  return undefined;
16825
- }, [columnOrder, columnSizing, columnSizingInfo, columnVisibility, tableMeta.columnFreezing.isEnabled, tableMeta.columnFreezing.frozenColumnIndex]);
16898
+ }, [columnOrder, columnSizing, columnSizingInfo, columnVisibility, tableMeta.columnFreezing.isEnabled, frozenColumnIndex]);
16826
16899
  return style;
16827
16900
  }
16828
16901
 
@@ -17662,7 +17735,12 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17662
17735
  }
17663
17736
  tableMeta.rowSelection.lastSelectedRowIndex.current = rowIndex;
17664
17737
  };
17665
- return /*#__PURE__*/React__default.createElement(DisplayCell, Object.assign({}, context), /*#__PURE__*/React__default.createElement(Checkbox, {
17738
+ return /*#__PURE__*/React__default.createElement(DisplayCell, Object.assign({}, context), /*#__PURE__*/React__default.createElement(Tooltip, {
17739
+ title: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, title, /*#__PURE__*/React__default.createElement(Shortcut, {
17740
+ className: "ml-2",
17741
+ keys: "Space"
17742
+ }))
17743
+ }, /*#__PURE__*/React__default.createElement(Checkbox, {
17666
17744
  "aria-label": title,
17667
17745
  className: "!mt-0",
17668
17746
  checked: isSelected,
@@ -17670,7 +17748,7 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17670
17748
  // this is necessary to remove console spam from eslint
17671
17749
  onChange: () => false,
17672
17750
  tabIndex: isCurrentRow ? 0 : -1
17673
- }));
17751
+ })));
17674
17752
  } else {
17675
17753
  const className = cn('!mt-0', getRadioClassnames());
17676
17754
  const handleClick = event => {
@@ -17897,7 +17975,7 @@ function getSortingFn$1(dataType, customFnOrBuiltIn) {
17897
17975
  return customFnOrBuiltIn;
17898
17976
  }
17899
17977
  // some times we alias based on the type
17900
- if (dataType && dataType !== 'boolean') {
17978
+ if (dataType && dataType !== 'boolean' && dataType !== 'number') {
17901
17979
  return dataType;
17902
17980
  }
17903
17981
  // otherwise fall back to auto
@@ -17952,11 +18030,9 @@ function useConvertChildrenToColumns(props, options, editing) {
17952
18030
  control: child.props.control,
17953
18031
  dataType: child.props.dataType,
17954
18032
  enableOrdering: (_child$props$enableOr = child.props.enableOrdering) !== null && _child$props$enableOr !== void 0 ? _child$props$enableOr : true,
17955
- // react-table global filtering only samples from row 0 in a dataset for filtering and this
17956
- // leads to some columns being disabled if, e.g., a column in row 0 has an undefined value
17957
- // so we do not use the native enableGlobalFilter property and instead use our own enableSearch
17958
18033
  enableSearch: (_child$props$enableSe = child.props.enableSearch) !== null && _child$props$enableSe !== void 0 ? _child$props$enableSe : true,
17959
18034
  enableTruncate: (_child$props$enableTr = child.props.enableTruncate) !== null && _child$props$enableTr !== void 0 ? _child$props$enableTr : false,
18035
+ filters: child.props.filters,
17960
18036
  footer: child.props.footer,
17961
18037
  header: child.props.header,
17962
18038
  headerClassName: child.props.headerClassName,
@@ -18114,8 +18190,54 @@ function useRowActions$1(actionsForRow, actionsForRowLength = ACTIONS_ON_ROW_LEN
18114
18190
  };
18115
18191
  }
18116
18192
 
18193
+ const useLocalStorage = (key, initialValue) => {
18194
+ const [state, setState] = React__default.useState(() => {
18195
+ try {
18196
+ const localStorageValue = localStorage.getItem(key);
18197
+ if (typeof localStorageValue !== 'string') {
18198
+ localStorage.setItem(key, JSON.stringify(initialValue));
18199
+ return initialValue;
18200
+ } else {
18201
+ return JSON.parse(localStorageValue || 'null');
18202
+ }
18203
+ } catch {
18204
+ // If user is in private mode or has storage restriction
18205
+ // localStorage can throw. JSON.parse and JSON.stringify
18206
+ // can throw, too.
18207
+ return initialValue;
18208
+ }
18209
+ });
18210
+ React__default.useEffect(() => {
18211
+ try {
18212
+ const serializedState = JSON.stringify(state);
18213
+ localStorage.setItem(key, serializedState);
18214
+ } catch {
18215
+ // If user is in private mode or has storage restriction
18216
+ // localStorage can throw. Also JSON.stringify can throw.
18217
+ }
18218
+ }, [key, state]);
18219
+ const clear = () => localStorage.removeItem(key);
18220
+ return [state, setState, clear];
18221
+ };
18222
+
18223
+ function useTacoSettings() {
18224
+ return React__default.useContext(TacoContext);
18225
+ }
18226
+
18227
+ function useSettings(id, defaultSettings = {}, onChangeSettings) {
18228
+ const tacoSettings = useTacoSettings();
18229
+ const uniqueId = `taco.${tacoSettings.uniqueUserIdentifier}.table3.${id}.settings`;
18230
+ const [persistedSettings, setPersistedSettings] = useLocalStorage(uniqueId, defaultSettings);
18231
+ return React__default.useMemo(() => {
18232
+ if (onChangeSettings) {
18233
+ return [defaultSettings, onChangeSettings];
18234
+ }
18235
+ return [persistedSettings, setPersistedSettings];
18236
+ }, []);
18237
+ }
18238
+
18117
18239
  function useTable$2(props) {
18118
- var _ref, _props$defaultSetting, _props$defaultSetting2, _props$defaultSetting3, _props$defaultSetting4, _props$defaultSetting5, _props$defaultSetting6, _props$defaultSetting7, _props$defaultSetting8, _props$defaultSetting9, _props$length;
18240
+ var _ref, _defaultSettings$colu, _defaultSettings$rowH, _props$length;
18119
18241
  // options
18120
18242
  const options = useTablePreset(props);
18121
18243
  const tableOptions = {
@@ -18153,6 +18275,10 @@ function useTable$2(props) {
18153
18275
  return false;
18154
18276
  };
18155
18277
  tableOptions.getFilteredRowModel = reactTable$1.getFilteredRowModel();
18278
+ tableOptions.getColumnCanGlobalFilter = column => {
18279
+ var _column$columnDef$met;
18280
+ return (_column$columnDef$met = column.columnDef.meta.enableSearch) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : true;
18281
+ };
18156
18282
  }
18157
18283
  // sorting
18158
18284
  if (options.enableSorting) {
@@ -18163,24 +18289,25 @@ function useTable$2(props) {
18163
18289
  tableOptions.getSortedRowModel = reactTable$1.getSortedRowModel();
18164
18290
  }
18165
18291
  }
18292
+ const [defaultSettings, setSettings] = useSettings(props.id, props.defaultSettings, props.onChangeSettings);
18166
18293
  // custom features
18167
18294
  const columnFreezing = useColumnFreezing( // temporarily see if deprecated frozenColumnCount is there
18168
- (_ref = (_props$defaultSetting = (_props$defaultSetting2 = props.defaultSettings) === null || _props$defaultSetting2 === void 0 ? void 0 : _props$defaultSetting2.columnFreezingIndex) !== null && _props$defaultSetting !== void 0 ? _props$defaultSetting : (_props$defaultSetting3 = props.defaultSettings) === null || _props$defaultSetting3 === void 0 ? void 0 : _props$defaultSetting3.frozenColumnCount) !== null && _ref !== void 0 ? _ref : props.defaultColumnFreezingIndex, options);
18295
+ (_ref = (_defaultSettings$colu = defaultSettings.columnFreezingIndex) !== null && _defaultSettings$colu !== void 0 ? _defaultSettings$colu : defaultSettings === null || defaultSettings === void 0 ? void 0 : defaultSettings.frozenColumnCount) !== null && _ref !== void 0 ? _ref : props.defaultColumnFreezingIndex, options);
18169
18296
  const columnOrdering = useColumnOrdering(options);
18170
18297
  const currentRow = useCurrentRow(props.defaultCurrentRowIndex);
18171
18298
  const editing = useEditing(options.enableEditing, props.onSave);
18172
- const fontSize = useFontSize(options.enableFontSize, (_props$defaultSetting4 = props.defaultSettings) === null || _props$defaultSetting4 === void 0 ? void 0 : _props$defaultSetting4.fontSize);
18299
+ const fontSize = useFontSize(options.enableFontSize, defaultSettings.fontSize);
18173
18300
  const hoverState = usePauseHoverState();
18174
- const printing = usePrinting(options.enablePrinting, props.loadAll, (_props$defaultSetting5 = props.defaultSettings) === null || _props$defaultSetting5 === void 0 ? void 0 : _props$defaultSetting5.showWarningWhenPrintingLargeDataset);
18301
+ const printing = usePrinting(options.enablePrinting, props.loadAll, defaultSettings.showWarningWhenPrintingLargeDataset);
18175
18302
  const rowActions = useRowActions$1(props.actionsForRow, props.actionsForRowLength);
18176
18303
  const rowClick = useRowClick(props.onRowClick);
18177
18304
  const rowDrag = useRowDrag(options.enableRowDrag);
18178
18305
  const rowDrop = useRowDrop(options.enableRowDrop, props.onRowDrop);
18179
18306
  const rowGoto = useRowGoto(options.enableRowGoto, props.onRowGoto);
18180
18307
  const rowHeight = useRowHeight(options.enableRowHeight, // temporarily see if deprecated rowDensity is there
18181
- (_props$defaultSetting6 = (_props$defaultSetting7 = props.defaultSettings) === null || _props$defaultSetting7 === void 0 ? void 0 : _props$defaultSetting7.rowHeight) !== null && _props$defaultSetting6 !== void 0 ? _props$defaultSetting6 : (_props$defaultSetting8 = props.defaultSettings) === null || _props$defaultSetting8 === void 0 ? void 0 : _props$defaultSetting8.rowDensity);
18308
+ (_defaultSettings$rowH = defaultSettings.rowHeight) !== null && _defaultSettings$rowH !== void 0 ? _defaultSettings$rowH : defaultSettings === null || defaultSettings === void 0 ? void 0 : defaultSettings.rowDensity);
18182
18309
  const rowSelection = useRowSelection();
18183
- const search = useSearch(options.enableSearch, (_props$defaultSetting9 = props.defaultSettings) === null || _props$defaultSetting9 === void 0 ? void 0 : _props$defaultSetting9.excludeUnmatchedRecordsInSearch, props.loadAll);
18310
+ const search = useSearch(options.enableSearch, defaultSettings.excludeUnmatchedRecordsInSearch, props.loadAll);
18184
18311
  // columns
18185
18312
  const {
18186
18313
  columns,
@@ -18190,13 +18317,13 @@ function useTable$2(props) {
18190
18317
  } = useConvertChildrenToColumns(props, options, editing);
18191
18318
  // built-in features
18192
18319
  const initialState = React__default.useMemo(() => {
18193
- var _props$defaultSetting10, _props$defaultSetting11, _props$defaultSetting12, _props$defaultSetting13, _props$defaultSetting14, _props$defaultSetting15, _props$defaultSetting16;
18320
+ var _defaultSettings$colu2, _defaultSettings$colu3;
18194
18321
  const sanitizeSortedColumns = column => columns.find(definedColumn => definedColumn.id === column.id);
18195
18322
  return {
18196
- columnOrder: ensureOrdering$1(columns, (_props$defaultSetting10 = props.defaultSettings) === null || _props$defaultSetting10 === void 0 ? void 0 : _props$defaultSetting10.columnOrder),
18197
- columnSizing: (_props$defaultSetting11 = (_props$defaultSetting12 = props.defaultSettings) === null || _props$defaultSetting12 === void 0 ? void 0 : _props$defaultSetting12.columnSizing) !== null && _props$defaultSetting11 !== void 0 ? _props$defaultSetting11 : defaultColumnSizing,
18198
- columnVisibility: (_props$defaultSetting13 = (_props$defaultSetting14 = props.defaultSettings) === null || _props$defaultSetting14 === void 0 ? void 0 : _props$defaultSetting14.columnVisibility) !== null && _props$defaultSetting13 !== void 0 ? _props$defaultSetting13 : defaultColumnVisibility,
18199
- sorting: (_props$defaultSetting15 = props.defaultSettings) !== null && _props$defaultSetting15 !== void 0 && _props$defaultSetting15.sorting ? (_props$defaultSetting16 = props.defaultSettings) === null || _props$defaultSetting16 === void 0 ? void 0 : _props$defaultSetting16.sorting.filter(sanitizeSortedColumns) : defaultSorting
18323
+ columnOrder: ensureOrdering$1(columns, defaultSettings.columnOrder),
18324
+ columnSizing: (_defaultSettings$colu2 = defaultSettings.columnSizing) !== null && _defaultSettings$colu2 !== void 0 ? _defaultSettings$colu2 : defaultColumnSizing,
18325
+ columnVisibility: (_defaultSettings$colu3 = defaultSettings.columnVisibility) !== null && _defaultSettings$colu3 !== void 0 ? _defaultSettings$colu3 : defaultColumnVisibility,
18326
+ sorting: defaultSettings.sorting ? defaultSettings.sorting.filter(sanitizeSortedColumns) : defaultSorting
18200
18327
  };
18201
18328
  }, []);
18202
18329
  const table = reactTable$1.useReactTable({
@@ -18230,7 +18357,7 @@ function useTable$2(props) {
18230
18357
  useEditingStateListener(table);
18231
18358
  useFilteringStateListener(table, props.onFilter);
18232
18359
  useRowSelectionListener$1(table, props.onRowSelect);
18233
- useSettingsStateListener$1(table, props.onChangeSettings);
18360
+ useSettingsStateListener$1(table, setSettings);
18234
18361
  useShortcutsListener(table, props.shortcuts);
18235
18362
  useServerLoadingListener(table, props.loadPage);
18236
18363
  useSortingStateListener(table, props.onSort);
@@ -18808,12 +18935,12 @@ function resetHighlightedColumnIndexes(enabled, value, table) {
18808
18935
  table.getRowModel().rows.forEach((row, rowIndex) => {
18809
18936
  columns.forEach((column, columnIndex) => {
18810
18937
  try {
18811
- var _column$columnDef$met, _format, _format2;
18812
- if ((_column$columnDef$met = column.columnDef.meta) !== null && _column$columnDef$met !== void 0 && _column$columnDef$met.enableSearch && row.original && globalFilterFn$1(
18938
+ var _format, _column$columnDef$met, _format2;
18939
+ if (row.original && globalFilterFn$1(
18813
18940
  // if it's a date, format it first
18814
18941
  dateFns.isDate(row.original[column.id]) ? (_format = format(row.original[column.id])) !== null && _format !== void 0 ? _format : '' :
18815
18942
  // if its marked as a date but isn't a date, try to format it
18816
- column.columnDef.meta.dataType === 'datetime' ? (_format2 = format(parseFromISOString(row.original[column.id]))) !== null && _format2 !== void 0 ? _format2 : '' :
18943
+ ((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType) === 'datetime' ? (_format2 = format(parseFromISOString(row.original[column.id]))) !== null && _format2 !== void 0 ? _format2 : '' :
18817
18944
  // otherwise just string compare
18818
18945
  String(row.original[column.id]), value)) {
18819
18946
  indexes.push([rowIndex, columnIndex]);
@@ -18865,29 +18992,74 @@ function FilterColumn(props) {
18865
18992
 
18866
18993
  function FilterComparator(props) {
18867
18994
  const {
18995
+ column,
18868
18996
  onChange: handleChange,
18869
18997
  value,
18870
- validComparators,
18871
18998
  ...attributes
18872
18999
  } = props;
18873
19000
  const {
18874
19001
  texts
18875
19002
  } = useLocalization();
19003
+ const validComparators = guessComparatorsBasedOnControl$1(column);
18876
19004
  React__default.useEffect(() => {
18877
- if (value === undefined) {
19005
+ if (value === undefined || !validComparators.includes(value)) {
18878
19006
  handleChange === null || handleChange === void 0 ? void 0 : handleChange(validComparators[0]);
18879
19007
  }
18880
- }, []);
19008
+ }, [validComparators]);
18881
19009
  return /*#__PURE__*/React__default.createElement(Select2, Object.assign({}, attributes, {
18882
19010
  className: "!w-32 flex-shrink-0",
19011
+ disabled: !column,
18883
19012
  onChange: handleChange,
18884
19013
  value: value
18885
- }), validComparators.map(comp => /*#__PURE__*/React__default.createElement(Select2.Option, {
18886
- key: comp,
18887
- value: comp
18888
- }, getComparatorText$1(comp, texts))));
19014
+ }), validComparators.map(comparator => /*#__PURE__*/React__default.createElement(Select2.Option, {
19015
+ key: comparator,
19016
+ value: comparator
19017
+ }, getComparatorText$1(comparator, texts, column))));
18889
19018
  }
18890
- const getComparatorText$1 = (comparator, texts) => {
19019
+ function guessComparatorsBasedOnControl$1(column) {
19020
+ var _column$columnDef$met;
19021
+ const columnMeta = (_column$columnDef$met = column === null || column === void 0 ? void 0 : column.columnDef.meta) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : {};
19022
+ if (Array.isArray(columnMeta.filters)) {
19023
+ return columnMeta.filters;
19024
+ }
19025
+ if (typeof columnMeta.control === 'function') {
19026
+ const renderedControl = columnMeta.control({
19027
+ onBlur: () => undefined,
19028
+ onFocus: () => undefined,
19029
+ setValue: () => undefined,
19030
+ value: undefined,
19031
+ disabled: false,
19032
+ readOnly: false,
19033
+ ref: undefined
19034
+ });
19035
+ if ( /*#__PURE__*/React__default.isValidElement(renderedControl)) {
19036
+ const {
19037
+ props,
19038
+ type
19039
+ } = renderedControl;
19040
+ if (type.displayName === 'Select2') {
19041
+ if (props.multiple) {
19042
+ return [Table3FilterComparator.HasAnyOf, Table3FilterComparator.HasAllOf, Table3FilterComparator.IsEqualTo, Table3FilterComparator.HasNoneOf, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19043
+ }
19044
+ return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19045
+ }
19046
+ }
19047
+ }
19048
+ // @ts-expect-error -- we ignore it because it conflicts with Table2 also overridding ColumnMeta
19049
+ if (columnMeta.dataType === 'number') {
19050
+ return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19051
+ }
19052
+ if (columnMeta.control === 'datepicker' || columnMeta.dataType === 'datetime') {
19053
+ return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsBetween, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty, Table3FilterComparator.IsLessThanOrEqualTo, Table3FilterComparator.IsGreaterThanOrEqualTo];
19054
+ }
19055
+ if (columnMeta.control === 'switch') {
19056
+ return [Table3FilterComparator.IsEqualTo];
19057
+ }
19058
+ return [Table3FilterComparator.Contains, Table3FilterComparator.DoesNotContain, Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19059
+ }
19060
+ function getComparatorText$1(comparator, texts, column) {
19061
+ var _column$columnDef, _column$columnDef$met2;
19062
+ 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';
18891
19063
  switch (comparator) {
18892
19064
  case Table3FilterComparator.Contains:
18893
19065
  return texts.table3.filters.comparators.contains;
@@ -18898,23 +19070,61 @@ const getComparatorText$1 = (comparator, texts) => {
18898
19070
  case Table3FilterComparator.IsNotEqualTo:
18899
19071
  return texts.table3.filters.comparators.isNotEqualTo;
18900
19072
  case Table3FilterComparator.IsGreaterThan:
18901
- return texts.table3.filters.comparators.isGreaterThan;
19073
+ return isDate ? texts.table3.filters.comparators.isAfter : texts.table3.filters.comparators.isGreaterThan;
18902
19074
  case Table3FilterComparator.IsLessThan:
18903
- return texts.table3.filters.comparators.isLessThan;
19075
+ return isDate ? texts.table3.filters.comparators.isBefore : texts.table3.filters.comparators.isLessThan;
18904
19076
  case Table3FilterComparator.IsBetween:
18905
19077
  return texts.table3.filters.comparators.isBetween;
18906
- case Table3FilterComparator.IsOneOf:
18907
- return texts.table3.filters.comparators.isOneOf;
18908
- case Table3FilterComparator.IsNoneOf:
18909
- return texts.table3.filters.comparators.isNoneOf;
18910
- case Table3FilterComparator.IsAllOf:
18911
- return texts.table3.filters.comparators.isAllOf;
18912
19078
  case Table3FilterComparator.IsEmpty:
18913
19079
  return texts.table3.filters.comparators.isEmpty;
18914
19080
  case Table3FilterComparator.IsNotEmpty:
18915
19081
  return texts.table3.filters.comparators.isNotEmpty;
19082
+ case Table3FilterComparator.IsLessThanOrEqualTo:
19083
+ return isDate ? texts.table3.filters.comparators.isOnOrBefore : texts.table3.filters.comparators.isLessThanOrEqualTo;
19084
+ case Table3FilterComparator.IsGreaterThanOrEqualTo:
19085
+ return isDate ? texts.table3.filters.comparators.isOnOrAfter : texts.table3.filters.comparators.isGreaterThanOrEqualTo;
19086
+ case Table3FilterComparator.HasAnyOf:
19087
+ return texts.table3.filters.comparators.hasAnyOf;
19088
+ case Table3FilterComparator.HasAllOf:
19089
+ return texts.table3.filters.comparators.hasAllOf;
19090
+ case Table3FilterComparator.HasNoneOf:
19091
+ return texts.table3.filters.comparators.hasNoneOf;
19092
+ default:
19093
+ return '';
18916
19094
  }
18917
- };
19095
+ }
19096
+
19097
+ function Placeholder(props) {
19098
+ const {
19099
+ allColumns,
19100
+ filters,
19101
+ onCreate: handleCreate,
19102
+ onRemove: handleRemove,
19103
+ position
19104
+ } = props;
19105
+ const {
19106
+ texts
19107
+ } = useLocalization();
19108
+ return /*#__PURE__*/React__default.createElement("div", {
19109
+ className: "flex gap-2"
19110
+ }, /*#__PURE__*/React__default.createElement("div", {
19111
+ className: "flex w-14 flex-shrink-0 items-center justify-end pr-2 text-right"
19112
+ }, position > 0 ? texts.table3.filters.conditions.and : texts.table3.filters.conditions.where), /*#__PURE__*/React__default.createElement(FilterColumn, {
19113
+ allColumns: allColumns,
19114
+ filters: filters,
19115
+ onChange: handleCreate,
19116
+ value: null
19117
+ }), /*#__PURE__*/React__default.createElement(FilterComparator, null), /*#__PURE__*/React__default.createElement(Input, {
19118
+ "aria-label": texts.table3.filters.emptyFilter.value,
19119
+ className: "flex-grow",
19120
+ disabled: true,
19121
+ value: texts.table3.filters.emptyFilter.value
19122
+ }), handleRemove ? /*#__PURE__*/React__default.createElement(IconButton, {
19123
+ appearance: "discrete",
19124
+ icon: "close",
19125
+ onClick: handleRemove
19126
+ }) : null);
19127
+ }
18918
19128
 
18919
19129
  function FilterValue(props) {
18920
19130
  const {
@@ -18923,6 +19133,9 @@ function FilterValue(props) {
18923
19133
  onChange: handleChange,
18924
19134
  value
18925
19135
  } = props;
19136
+ const {
19137
+ texts
19138
+ } = useLocalization();
18926
19139
  if (comparator === Table3FilterComparator.IsEmpty || comparator === Table3FilterComparator.IsNotEmpty) {
18927
19140
  return null;
18928
19141
  }
@@ -18930,6 +19143,14 @@ function FilterValue(props) {
18930
19143
  var _column$columnDef$met;
18931
19144
  const fromValue = Array.isArray(value) ? value[0] : undefined;
18932
19145
  const toValue = Array.isArray(value) ? value[1] : undefined;
19146
+ if (column === undefined) {
19147
+ return /*#__PURE__*/React__default.createElement(Input, {
19148
+ "aria-label": texts.table3.filters.emptyFilter.value,
19149
+ className: "flex-grow",
19150
+ disabled: true,
19151
+ value: texts.table3.filters.emptyFilter.value
19152
+ });
19153
+ }
18933
19154
  if (((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType) === 'datetime') {
18934
19155
  return /*#__PURE__*/React__default.createElement("div", {
18935
19156
  className: "flex flex-grow items-center gap-2"
@@ -18958,6 +19179,7 @@ function FilterValue(props) {
18958
19179
  }));
18959
19180
  }
18960
19181
  return /*#__PURE__*/React__default.createElement(Control$1, {
19182
+ comparator: comparator,
18961
19183
  column: column,
18962
19184
  onChange: handleChange,
18963
19185
  value: value
@@ -18967,12 +19189,18 @@ function Control$1(props) {
18967
19189
  var _column$columnDef$met2, _column$columnDef$met3;
18968
19190
  const {
18969
19191
  column,
19192
+ comparator,
18970
19193
  onChange,
18971
19194
  value,
18972
19195
  ...attributes
18973
19196
  } = props;
18974
19197
  const controlRenderer = (_column$columnDef$met2 = column.columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.control;
18975
19198
  const dataType = (_column$columnDef$met3 = column.columnDef.meta) === null || _column$columnDef$met3 === void 0 ? void 0 : _column$columnDef$met3.dataType;
19199
+ React.useEffect(() => {
19200
+ if (controlRenderer === 'switch') {
19201
+ onChange(false);
19202
+ }
19203
+ }, []);
18976
19204
  if (typeof controlRenderer === 'function') {
18977
19205
  return controlRenderer({
18978
19206
  ...attributes,
@@ -18984,11 +19212,19 @@ function Control$1(props) {
18984
19212
  onChange: event => onChange(event.detail),
18985
19213
  value: value
18986
19214
  }));
18987
- } else if (controlRenderer === 'switch' || dataType === 'boolean') {
19215
+ } else if (controlRenderer === 'switch') {
18988
19216
  return /*#__PURE__*/React__default.createElement(Switch, Object.assign({}, attributes, {
19217
+ className: "m-1.5",
18989
19218
  checked: Boolean(value),
18990
19219
  onChange: onChange
18991
19220
  }));
19221
+ } else if ((controlRenderer === 'input' || controlRenderer === undefined) && dataType === 'number') {
19222
+ return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
19223
+ className: cn(getInputAppearanceClassnames(), 'flex-grow'),
19224
+ type: "number",
19225
+ onChange: event => onChange(event.target.valueAsNumber),
19226
+ value: String(value !== null && value !== void 0 ? value : '')
19227
+ }));
18992
19228
  }
18993
19229
  return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
18994
19230
  className: "flex-grow",
@@ -19056,8 +19292,8 @@ function Filter$1(props) {
19056
19292
  onChange: handleChangeColumn,
19057
19293
  value: id
19058
19294
  }), /*#__PURE__*/React__default.createElement(FilterComparator, {
19295
+ column: column,
19059
19296
  onChange: handleChangeComparator,
19060
- validComparators: guessComparatorsBasedOnControl$1(),
19061
19297
  value: comparator
19062
19298
  }), /*#__PURE__*/React__default.createElement(FilterValue, {
19063
19299
  column: column,
@@ -19071,63 +19307,6 @@ function Filter$1(props) {
19071
19307
  onClick: handleRemove
19072
19308
  }));
19073
19309
  }
19074
- function guessComparatorsBasedOnControl$1(instance, control) {
19075
- if ( /*#__PURE__*/React__default.isValidElement(instance)) {
19076
- const {
19077
- props,
19078
- type
19079
- } = instance;
19080
- if (type.displayName === 'Select2') {
19081
- if (props.multiple) {
19082
- return [Table3FilterComparator.IsOneOf, Table3FilterComparator.IsNoneOf, Table3FilterComparator.IsAllOf];
19083
- }
19084
- return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo];
19085
- }
19086
- }
19087
- switch (control) {
19088
- case 'datepicker':
19089
- return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween];
19090
- case 'switch':
19091
- return [Table3FilterComparator.IsEqualTo];
19092
- default:
19093
- return [Table3FilterComparator.Contains, Table3FilterComparator.DoesNotContain, Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween];
19094
- }
19095
- }
19096
-
19097
- function Placeholder(props) {
19098
- const {
19099
- allColumns,
19100
- filters,
19101
- onCreate: handleCreate,
19102
- onRemove: handleRemove,
19103
- position
19104
- } = props;
19105
- const {
19106
- texts
19107
- } = useLocalization();
19108
- return /*#__PURE__*/React__default.createElement("div", {
19109
- className: "flex gap-2"
19110
- }, /*#__PURE__*/React__default.createElement("div", {
19111
- className: "flex w-14 flex-shrink-0 items-center justify-end pr-2 text-right"
19112
- }, position > 0 ? texts.table3.filters.conditions.and : texts.table3.filters.conditions.where), /*#__PURE__*/React__default.createElement(FilterColumn, {
19113
- allColumns: allColumns,
19114
- filters: filters,
19115
- onChange: handleCreate,
19116
- value: null
19117
- }), /*#__PURE__*/React__default.createElement(FilterComparator, {
19118
- disabled: true,
19119
- validComparators: guessComparatorsBasedOnControl$1()
19120
- }), /*#__PURE__*/React__default.createElement(Input, {
19121
- "aria-label": texts.table3.filters.emptyFilter.value,
19122
- className: "flex-grow",
19123
- disabled: true,
19124
- value: texts.table3.filters.emptyFilter.value
19125
- }), handleRemove ? /*#__PURE__*/React__default.createElement(IconButton, {
19126
- appearance: "discrete",
19127
- icon: "close",
19128
- onClick: handleRemove
19129
- }) : null);
19130
- }
19131
19310
 
19132
19311
  function sortByHeader(a, b) {
19133
19312
  var _a$columnDef$meta, _a$columnDef$meta$hea, _a$columnDef$meta$hea2, _b$columnDef$meta;
@@ -19191,7 +19370,9 @@ function Filters(props) {
19191
19370
  //
19192
19371
  const handleApply = () => {
19193
19372
  table.setColumnFilters(filters.filter(f => {
19194
- if (f.value.comparator === Table3FilterComparator.IsEmpty || f.value.comparator === Table3FilterComparator.IsNotEmpty) {
19373
+ var _allColumns$find$colu;
19374
+ const controlRenderer = (_allColumns$find$colu = allColumns.find(c => c.id === f.id).columnDef.meta) === null || _allColumns$find$colu === void 0 ? void 0 : _allColumns$find$colu.control;
19375
+ if (f.value.comparator === Table3FilterComparator.IsEmpty || f.value.comparator === Table3FilterComparator.IsNotEmpty || controlRenderer === 'switch') {
19195
19376
  return true;
19196
19377
  }
19197
19378
  return !!f.value.value;
@@ -19396,6 +19577,11 @@ const PRINT_STYLES = `
19396
19577
  width: auto !important;
19397
19578
  }
19398
19579
 
19580
+ #root {
19581
+ /* chrome sometimes crops the bottom content of page and this padding will make sure that we see the whole content*/
19582
+ padding-bottom: 20px;
19583
+ }
19584
+
19399
19585
  [role="table"] {
19400
19586
  border-width: 0 !important;
19401
19587
  overflow-y: hidden !important;
@@ -19476,30 +19662,9 @@ function PrintIFrame({
19476
19662
  }) {
19477
19663
  const [contentRef, setContentRef] = React__default.useState(null);
19478
19664
  const [mountNode, setMountNode] = React__default.useState(null);
19665
+ const isFirefoxBrowser = React__default.useMemo(() => navigator.userAgent.toLowerCase().includes('firefox'), []);
19479
19666
  const iframeWindow = contentRef === null || contentRef === void 0 ? void 0 : contentRef.contentWindow;
19480
19667
  const stylesReady = useParentStylesheets(iframeWindow);
19481
- // Adds print events to the iframe window.
19482
- React__default.useEffect(() => {
19483
- if (iframeWindow === null || iframeWindow === undefined) {
19484
- return;
19485
- }
19486
- // Add print events to the window
19487
- if (onAfterPrint) {
19488
- iframeWindow.addEventListener('afterprint', onAfterPrint);
19489
- }
19490
- if (onBeforePrint) {
19491
- iframeWindow.addEventListener('beforeprint', onBeforePrint);
19492
- }
19493
- return () => {
19494
- // Remove print events from the window
19495
- if (onAfterPrint) {
19496
- iframeWindow.removeEventListener('afterprint', onAfterPrint);
19497
- }
19498
- if (onBeforePrint) {
19499
- iframeWindow.removeEventListener('beforeprint', onBeforePrint);
19500
- }
19501
- };
19502
- }, [iframeWindow]);
19503
19668
  // Calls print method when table has loaded in the iframe.
19504
19669
  React__default.useEffect(() => {
19505
19670
  let intervalId;
@@ -19510,7 +19675,8 @@ function PrintIFrame({
19510
19675
  intervalId = setInterval(function () {
19511
19676
  try {
19512
19677
  const tableWrapper = mountNode;
19513
- const hasTableRendered = !!tableWrapper.querySelector('[role="table"]');
19678
+ const table = tableWrapper.querySelector('[role="table"]');
19679
+ const hasTableRendered = !!table;
19514
19680
  if (hasTableRendered && intervalId) {
19515
19681
  var _contentRef$contentWi;
19516
19682
  clearInterval(intervalId);
@@ -19519,6 +19685,12 @@ function PrintIFrame({
19519
19685
  // Bug - Even though onBeforePrint is called before printing, the execution doesn't finish before
19520
19686
  // the print dialog shows up, which results into having a visible loading toast.
19521
19687
  onBeforePrint === null || onBeforePrint === void 0 ? void 0 : onBeforePrint();
19688
+ // By adding height to the tableWrapper, we make sure the content below absolutely positioned table
19689
+ // doesn't hide
19690
+ if (isFirefoxBrowser) {
19691
+ const tableHeight = `${table.offsetHeight}px`;
19692
+ tableWrapper.style.height = tableHeight;
19693
+ }
19522
19694
  contentRef === null || contentRef === void 0 ? void 0 : (_contentRef$contentWi = contentRef.contentWindow) === null || _contentRef$contentWi === void 0 ? void 0 : _contentRef$contentWi.print();
19523
19695
  // Calling the onAfterPrint method here as a fallback to do the cleanup, as certain browsers,
19524
19696
  // like Safari, do not trigger the beforeprint or afterprint events when a confirmation dialog
@@ -19557,6 +19729,11 @@ function PrintIFrame({
19557
19729
  tableWrapper.setAttribute('data-role', 'table-wrapper');
19558
19730
  // Adding h-fit class makes sure that table is rendered with the whole content.
19559
19731
  tableWrapper.classList.add('h-fit');
19732
+ tableWrapper.classList.add('[&>[role="table"]]:!h-fit');
19733
+ if (isFirefoxBrowser) {
19734
+ // Fix for firefox bug which adds page-long whitespace between page's top content and table
19735
+ tableWrapper.classList.add('[&>[role="table"]]:!absolute');
19736
+ }
19560
19737
  // Safari print preview assigns no width to the table when w-screen class is used.
19561
19738
  // By assigning table a big static width and hiding the horizontal scrollbar, the table on chrome
19562
19739
  // and safari will always take full page width.
@@ -19603,10 +19780,12 @@ function PrintIFrame({
19603
19780
  };
19604
19781
  // -top-60 -left-60 styles make sure that iframe is added outside of the viewport
19605
19782
  return /*#__PURE__*/React__default.createElement("iframe", {
19606
- ref: setContentRef,
19607
19783
  className: "fixed -left-60 -top-60 !h-0 !w-0",
19608
19784
  frameBorder: "0",
19609
- scrolling: "no"
19785
+ ref: setContentRef,
19786
+ scrolling: "no",
19787
+ // Temporary fix to support printing in firefox: Find another solution while upgrading React
19788
+ src: "javascript:void(0);"
19610
19789
  }, mountNode && stylesReady ? /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React__default.createElement(Table3, Object.assign({}, printTableProps)), mountNode) : null);
19611
19790
  }
19612
19791
 
@@ -19836,7 +20015,10 @@ function Toolbar(props) {
19836
20015
  }) : null, tableMeta.printing.isEnabled ? /*#__PURE__*/React__default.createElement(PrintButton, {
19837
20016
  table: table,
19838
20017
  tableProps: tableProps
19839
- }) : null, right, isMoreVisible(props) ? /*#__PURE__*/React__default.createElement(IconButton, {
20018
+ }) : null, right, isMoreVisible(props) ? /*#__PURE__*/React__default.createElement(Tooltip, {
20019
+ title: texts.table3.otherOptions.tooltip
20020
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
20021
+ "aria-label": texts.table3.otherOptions.tooltip,
19840
20022
  icon: "more",
19841
20023
  menu: menuProps => /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, {
19842
20024
  align: "end"
@@ -19851,7 +20033,7 @@ function Toolbar(props) {
19851
20033
  table: table
19852
20034
  })
19853
20035
  }, texts.table3.fontSize.tooltip) : null))
19854
- }) : null, tableMeta.search.isEnabled ? /*#__PURE__*/React__default.createElement(Search$3, {
20036
+ })) : null, tableMeta.search.isEnabled ? /*#__PURE__*/React__default.createElement(Search$3, {
19855
20037
  scrollToIndex: scrollToIndex,
19856
20038
  table: table
19857
20039
  }) : null));
@@ -20222,9 +20404,10 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20222
20404
  }, EmptyState ? /*#__PURE__*/React__default.createElement(EmptyState, null) : null)));
20223
20405
  });
20224
20406
  const Table3 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20407
+ const stringifiedChildren = String(props.children);
20225
20408
  // we force a remount (using key) when the child columns change because there are too many places to add children as an effect
20226
20409
  // this is cheaper from a complexity perspective, and probably performance wise as well
20227
- const key = React__default.useMemo(() => String('tableKey_' + String(props.children)), [props.children]);
20410
+ const key = React__default.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);
20228
20411
  return /*#__PURE__*/React__default.createElement(Table$1, Object.assign({}, props, {
20229
20412
  key: key,
20230
20413
  ref: ref
@@ -21269,6 +21452,7 @@ exports.Table = Table;
21269
21452
  exports.Table2 = Table2;
21270
21453
  exports.Table3 = Table3;
21271
21454
  exports.Tabs = Tabs;
21455
+ exports.TacoContext = TacoContext;
21272
21456
  exports.Tag = Tag$1;
21273
21457
  exports.Textarea = Textarea;
21274
21458
  exports.Title = Title$3;