@economic/taco 2.2.5 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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;