@economic/taco 2.3.0 → 2.4.1

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 (124) hide show
  1. package/dist/components/Header/components/Agreement/types.d.ts +1 -1
  2. package/dist/components/Menu/Context.d.ts +2 -0
  3. package/dist/components/Menu/components/Item.d.ts +3 -2
  4. package/dist/components/Provider/Localization.d.ts +12 -0
  5. package/dist/components/Provider/Provider.d.ts +6 -1
  6. package/dist/components/SearchInput2/SearchInput2.d.ts +2 -1
  7. package/dist/components/Spinner/Spinner.d.ts +2 -2
  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/columns/internal/Selection.d.ts +1 -2
  11. package/dist/components/Table3/components/toolbar/Filter/filters/components/Filter.d.ts +1 -2
  12. package/dist/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.d.ts +4 -4
  13. package/dist/components/Table3/components/toolbar/Filter/filters/components/FilterValue.d.ts +1 -1
  14. package/dist/components/Table3/hooks/features/useColumnFreezing.d.ts +2 -1
  15. package/dist/components/Table3/hooks/features/useCurrentRow.d.ts +1 -1
  16. package/dist/components/Table3/hooks/features/useEditing.d.ts +1 -2
  17. package/dist/components/Table3/hooks/features/usePauseHoverState.d.ts +1 -1
  18. package/dist/components/Table3/hooks/features/useRowClick.d.ts +1 -2
  19. package/dist/components/Table3/hooks/features/useRowSelection.d.ts +1 -1
  20. package/dist/components/Table3/hooks/features/useSettings.d.ts +2 -0
  21. package/dist/components/Table3/hooks/listeners/useSettingsStateListener.d.ts +2 -2
  22. package/dist/components/Table3/hooks/useTable.d.ts +2 -1
  23. package/dist/components/Table3/types.d.ts +24 -12
  24. package/dist/components/Table3/util/columns.d.ts +5 -4
  25. package/dist/esm/packages/taco/src/components/Menu/Context.js.map +1 -1
  26. package/dist/esm/packages/taco/src/components/Menu/Menu.js +1 -0
  27. package/dist/esm/packages/taco/src/components/Menu/Menu.js.map +1 -1
  28. package/dist/esm/packages/taco/src/components/Menu/components/Content.js +32 -2
  29. package/dist/esm/packages/taco/src/components/Menu/components/Content.js.map +1 -1
  30. package/dist/esm/packages/taco/src/components/Menu/components/Item.js.map +1 -1
  31. package/dist/esm/packages/taco/src/components/Provider/Localization.js +13 -1
  32. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  33. package/dist/esm/packages/taco/src/components/Provider/Provider.js +11 -4
  34. package/dist/esm/packages/taco/src/components/Provider/Provider.js.map +1 -1
  35. package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js +30 -44
  36. package/dist/esm/packages/taco/src/components/SearchInput2/SearchInput2.js.map +1 -1
  37. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js +12 -1
  38. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js.map +1 -1
  39. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js +1 -1
  40. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js.map +1 -1
  41. package/dist/esm/packages/taco/src/components/Spinner/Spinner.js +1 -1
  42. package/dist/esm/packages/taco/src/components/Spinner/Spinner.js.map +1 -1
  43. package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
  44. package/dist/esm/packages/taco/src/components/Table3/Table3.js +17 -16
  45. package/dist/esm/packages/taco/src/components/Table3/Table3.js.map +1 -1
  46. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js +5 -5
  47. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/DisplayCell.js.map +1 -1
  48. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js +0 -2
  49. package/dist/esm/packages/taco/src/components/Table3/components/columns/cell/EditingCell.js.map +1 -1
  50. package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Footer.js +1 -1
  51. package/dist/esm/packages/taco/src/components/Table3/components/columns/footer/Footer.js.map +1 -1
  52. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Goto.js +1 -0
  53. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Goto.js.map +1 -1
  54. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Header.js +3 -4
  55. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Header.js.map +1 -1
  56. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Menu.js +5 -20
  57. package/dist/esm/packages/taco/src/components/Table3/components/columns/header/Menu.js.map +1 -1
  58. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Actions.js +1 -1
  59. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Actions.js.map +1 -1
  60. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js +20 -6
  61. package/dist/esm/packages/taco/src/components/Table3/components/columns/internal/Selection.js.map +1 -1
  62. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js +4 -2
  63. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/Filters.js.map +1 -1
  64. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Filter.js +2 -24
  65. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Filter.js.map +1 -1
  66. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.js +68 -17
  67. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterComparator.js.map +1 -1
  68. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.js +31 -2
  69. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/FilterValue.js.map +1 -1
  70. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.js +1 -5
  71. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Filter/filters/components/Placeholder.js.map +1 -1
  72. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js +18 -25
  73. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/PrintIFrame.js.map +1 -1
  74. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.js +5 -0
  75. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/PrintButton/hooks/useParentStylesheets.js.map +1 -1
  76. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js +40 -29
  77. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Search.js.map +1 -1
  78. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Toolbar.js +6 -2
  79. package/dist/esm/packages/taco/src/components/Table3/components/toolbar/Toolbar.js.map +1 -1
  80. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js +20 -16
  81. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useColumnFreezing.js.map +1 -1
  82. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useCurrentRow.js +1 -1
  83. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useCurrentRow.js.map +1 -1
  84. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useEditing.js +9 -13
  85. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useEditing.js.map +1 -1
  86. package/dist/esm/packages/taco/src/components/Table3/hooks/features/usePauseHoverState.js +3 -0
  87. package/dist/esm/packages/taco/src/components/Table3/hooks/features/usePauseHoverState.js.map +1 -1
  88. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowClick.js +1 -1
  89. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowClick.js.map +1 -1
  90. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowSelection.js +1 -1
  91. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useRowSelection.js.map +1 -1
  92. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js +18 -0
  93. package/dist/esm/packages/taco/src/components/Table3/hooks/features/useSettings.js.map +1 -0
  94. package/dist/esm/packages/taco/src/components/Table3/hooks/listeners/useSettingsStateListener.js.map +1 -1
  95. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js +4 -6
  96. package/dist/esm/packages/taco/src/components/Table3/hooks/useConvertChildrenToColumns.js.map +1 -1
  97. package/dist/esm/packages/taco/src/components/Table3/hooks/useCssGrid.js +1 -1
  98. package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js +18 -12
  99. package/dist/esm/packages/taco/src/components/Table3/hooks/useTable.js.map +1 -1
  100. package/dist/esm/packages/taco/src/components/Table3/types.js +7 -5
  101. package/dist/esm/packages/taco/src/components/Table3/types.js.map +1 -1
  102. package/dist/esm/packages/taco/src/components/Table3/util/columns.js +26 -7
  103. package/dist/esm/packages/taco/src/components/Table3/util/columns.js.map +1 -1
  104. package/dist/esm/packages/taco/src/components/Table3/util/filtering.js +24 -6
  105. package/dist/esm/packages/taco/src/components/Table3/util/filtering.js.map +1 -1
  106. package/dist/esm/packages/taco/src/hooks/useDebouncedEffect.js +15 -0
  107. package/dist/esm/packages/taco/src/hooks/useDebouncedEffect.js.map +1 -0
  108. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js +34 -0
  109. package/dist/esm/packages/taco/src/hooks/useLocalStorage.js.map +1 -0
  110. package/dist/esm/packages/taco/src/hooks/useTacoSettings.js +9 -0
  111. package/dist/esm/packages/taco/src/hooks/useTacoSettings.js.map +1 -0
  112. package/dist/esm/packages/taco/src/index.js +1 -1
  113. package/dist/esm/packages/taco/src/utils/keyboard.js +2 -2
  114. package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -1
  115. package/dist/hooks/useDebouncedEffect.d.ts +2 -0
  116. package/dist/hooks/useLocalStorage.d.ts +1 -0
  117. package/dist/hooks/useTacoSettings.d.ts +1 -0
  118. package/dist/taco.cjs.development.js +550 -340
  119. package/dist/taco.cjs.development.js.map +1 -1
  120. package/dist/taco.cjs.production.min.js +1 -1
  121. package/dist/taco.cjs.production.min.js.map +1 -1
  122. package/package.json +2 -2
  123. package/types.json +11529 -10643
  124. package/dist/components/Table3/components/toolbar/Filter/filters/components/Comparator.d.ts +0 -11
@@ -3707,9 +3707,9 @@ const useMergedRef = ref => {
3707
3707
  return internalRef;
3708
3708
  };
3709
3709
 
3710
- const WHITELISTED_ELEMENTS = ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT'];
3710
+ const INTERACTIVE_ELEMENTS = ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT'];
3711
3711
  function isEventTriggeredOnInteractiveElement(eventTarget) {
3712
- return WHITELISTED_ELEMENTS.includes(eventTarget.tagName);
3712
+ return INTERACTIVE_ELEMENTS.includes(eventTarget.tagName);
3713
3713
  }
3714
3714
  function createShortcutKeyDownHandler(key, handler) {
3715
3715
  return function (event) {
@@ -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: {
@@ -4854,7 +4866,7 @@ const useListScrollTo = (internalRef, itemRefs) => {
4854
4866
 
4855
4867
  const Spinner = /*#__PURE__*/React__default.forwardRef(function Spinner(props, ref) {
4856
4868
  const {
4857
- delay = 500,
4869
+ delay = 350,
4858
4870
  label,
4859
4871
  ...otherProps
4860
4872
  } = props;
@@ -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({
@@ -8798,9 +8847,10 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8798
8847
  const {
8799
8848
  findCurrent,
8800
8849
  findTotal,
8850
+ loading = false,
8851
+ onChange: handleChange,
8801
8852
  onClickFindNext: handleClickFindNext,
8802
8853
  onClickFindPrevious: handleClickFindPrevious,
8803
- onSearch: handleSearch,
8804
8854
  settingsContent,
8805
8855
  shortcut,
8806
8856
  value,
@@ -8808,13 +8858,11 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8808
8858
  } = props;
8809
8859
  const internalRef = useMergedRef(ref);
8810
8860
  const settingsRef = React__default.useRef(null);
8811
- const [internalValue, setInternalValue] = React__default.useState(value !== null && value !== void 0 ? value : '');
8812
8861
  const [focused, setFocused] = React__default.useState(false);
8813
8862
  const {
8814
8863
  texts
8815
8864
  } = useLocalization();
8816
8865
  const isActive = value === null || value === void 0 ? void 0 : value.length;
8817
- const isSynced = internalValue === value;
8818
8866
  const hasFind = handleClickFindNext && handleClickFindPrevious && findCurrent !== undefined && findTotal !== undefined;
8819
8867
  useGlobalKeyDown(shortcut, event => {
8820
8868
  if (document.activeElement !== internalRef.current) {
@@ -8823,39 +8871,25 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8823
8871
  (_internalRef$current = internalRef.current) === null || _internalRef$current === void 0 ? void 0 : _internalRef$current.focus();
8824
8872
  }
8825
8873
  });
8826
- const handleSubmit = () => {
8827
- handleSearch(internalValue);
8828
- };
8829
8874
  const handleBlur = event => {
8830
8875
  var _settingsRef$current, _attributes$onBlur;
8831
- // trigger searches when leaving the field
8832
- if (!isSynced) {
8833
- handleSubmit();
8834
- }
8835
8876
  if (settingsRef.current && (settingsRef.current === event.relatedTarget || (_settingsRef$current = settingsRef.current) !== null && _settingsRef$current !== void 0 && _settingsRef$current.contains(event.relatedTarget))) {
8836
8877
  return;
8837
8878
  }
8838
8879
  setFocused(false);
8839
8880
  (_attributes$onBlur = attributes.onBlur) === null || _attributes$onBlur === void 0 ? void 0 : _attributes$onBlur.call(attributes, event);
8840
8881
  };
8841
- const handleChange = event => {
8842
- setInternalValue(event.target.value);
8843
- if (!event.target.value) {
8844
- handleClear();
8845
- }
8846
- };
8847
8882
  const handleClear = () => {
8848
8883
  requestAnimationFrame(() => {
8849
8884
  var _internalRef$current2;
8850
8885
  return (_internalRef$current2 = internalRef.current) === null || _internalRef$current2 === void 0 ? void 0 : _internalRef$current2.focus();
8851
8886
  });
8852
- setInternalValue('');
8853
- handleSearch('');
8887
+ handleChange('');
8854
8888
  };
8855
8889
  const handleFocus = event => {
8856
8890
  var _attributes$onFocus;
8857
- (_attributes$onFocus = attributes.onFocus) === null || _attributes$onFocus === void 0 ? void 0 : _attributes$onFocus.call(attributes, event);
8858
8891
  setFocused(true);
8892
+ (_attributes$onFocus = attributes.onFocus) === null || _attributes$onFocus === void 0 ? void 0 : _attributes$onFocus.call(attributes, event);
8859
8893
  };
8860
8894
  const handleKeyDown = event => {
8861
8895
  var _props$onKeyDown;
@@ -8865,14 +8899,12 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8865
8899
  }
8866
8900
  if (event.key === 'Enter') {
8867
8901
  event.preventDefault();
8868
- if (hasFind && isActive && isSynced) {
8902
+ if (hasFind && isActive) {
8869
8903
  if (event.shiftKey) {
8870
8904
  handleClickFindPrevious === null || handleClickFindPrevious === void 0 ? void 0 : handleClickFindPrevious();
8871
8905
  } else {
8872
8906
  handleClickFindNext === null || handleClickFindNext === void 0 ? void 0 : handleClickFindNext();
8873
8907
  }
8874
- } else {
8875
- handleSearch(internalValue);
8876
8908
  }
8877
8909
  return;
8878
8910
  }
@@ -8882,8 +8914,8 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8882
8914
  }
8883
8915
  };
8884
8916
  let postfix;
8885
- if (!attributes.disabled && !attributes.readOnly && (internalValue || focused)) {
8886
- if (internalValue) {
8917
+ if (!attributes.disabled && !attributes.readOnly && (value || focused)) {
8918
+ if (value) {
8887
8919
  postfix = /*#__PURE__*/React__default.createElement(IconButton, {
8888
8920
  "aria-label": texts.searchInput.clear,
8889
8921
  className: "scale-75 !bg-transparent hover:!bg-black/[0.08] [&>svg]:scale-125",
@@ -8898,7 +8930,9 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8898
8930
  if (hasFind && isActive) {
8899
8931
  postfix = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("span", {
8900
8932
  className: "text-grey-700 flex h-4 items-center border-r border-black/[0.25] pr-2"
8901
- }, findCurrent !== null && findCurrent !== void 0 ? findCurrent : 0, "/", findTotal !== null && findTotal !== void 0 ? findTotal : 0), findCurrent ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(IconButton, {
8933
+ }, loading ? /*#__PURE__*/React__default.createElement(Spinner, {
8934
+ className: "h-4 w-4"
8935
+ }) : `${findCurrent !== null && findCurrent !== void 0 ? findCurrent : 0}/${findTotal !== null && findTotal !== void 0 ? findTotal : 0}`), findCurrent ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(IconButton, {
8902
8936
  "aria-label": texts.searchInput.findPrevious,
8903
8937
  className: "scale-75 !bg-transparent hover:!bg-black/[0.08] [&>svg]:scale-125",
8904
8938
  icon: "chevron-up",
@@ -8921,7 +8955,7 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8921
8955
  })) : texts.searchInput.findNext
8922
8956
  })) : null, postfix);
8923
8957
  }
8924
- } else if (shortcut && !focused && !internalValue) {
8958
+ } else if (shortcut && !focused && !value) {
8925
8959
  postfix = /*#__PURE__*/React__default.createElement(Shortcut, {
8926
8960
  keys: shortcut,
8927
8961
  onClickCapture: () => {
@@ -8931,38 +8965,37 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8931
8965
  });
8932
8966
  }
8933
8967
  const className = cn('peer !pl-7', hasFind ? {
8934
- '!w-48': !internalValue && !focused,
8935
- '!w-72': internalValue || focused
8968
+ '!w-48': !value && !focused,
8969
+ '!w-72': value || focused
8936
8970
  } : '!w-48', {
8937
8971
  '!wcag-blue-100': isActive
8938
8972
  }, props.className);
8973
+ const icon = /*#__PURE__*/React__default.createElement(Icon, {
8974
+ "aria-label": texts.searchInput.button,
8975
+ className: "-ml-0.5 scale-95",
8976
+ name: "search",
8977
+ onClickCapture: () => {
8978
+ var _internalRef$current4;
8979
+ return (_internalRef$current4 = internalRef.current) === null || _internalRef$current4 === void 0 ? void 0 : _internalRef$current4.focus();
8980
+ }
8981
+ });
8939
8982
  const input = /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
8940
8983
  "aria-label": (_attributes$ariaLabe = attributes['aria-label']) !== null && _attributes$ariaLabe !== void 0 ? _attributes$ariaLabe : texts.searchInput.placeholder,
8941
8984
  className: className,
8942
8985
  "data-taco": "search-input2",
8943
8986
  onBlur: handleBlur,
8944
- onChange: handleChange,
8987
+ onChange: event => handleChange(event.target.value),
8945
8988
  onFocus: handleFocus,
8946
8989
  onKeyDown: handleKeyDown,
8947
8990
  placeholder: (_attributes$placehold = attributes.placeholder) !== null && _attributes$placehold !== void 0 ? _attributes$placehold : texts.searchInput.placeholder,
8948
- prefix: /*#__PURE__*/React__default.createElement(IconButton, {
8949
- "aria-label": texts.searchInput.button,
8950
- className: "scale-75 !bg-transparent hover:!bg-black/[0.08] [&>svg]:scale-125",
8951
- disabled: attributes.disabled || attributes.readOnly,
8952
- icon: "search",
8953
- onMouseDown: handleSubmit,
8954
- tabIndex: -1,
8955
- tooltip: focused && !isSynced ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, texts.searchInput.button, " ", /*#__PURE__*/React__default.createElement(Shortcut, {
8956
- keys: "Enter"
8957
- })) : texts.searchInput.button
8958
- }),
8991
+ prefix: icon,
8959
8992
  postfix: postfix,
8960
8993
  ref: internalRef,
8961
- value: internalValue
8994
+ value: value !== null && value !== void 0 ? value : ''
8962
8995
  }));
8963
8996
  if (settingsContent) {
8964
8997
  const handleSettingsBlur = event => {
8965
- if (event.currentTarget.contains(event.relatedTarget)) {
8998
+ if (event.currentTarget.contains(event.relatedTarget) || event.currentTarget.contains(event.target)) {
8966
8999
  return;
8967
9000
  }
8968
9001
  setFocused(false);
@@ -8976,8 +9009,8 @@ const SearchInput2 = /*#__PURE__*/React__default.forwardRef(function SearchInput
8976
9009
  }, input, focused ? /*#__PURE__*/React__default.createElement("div", {
8977
9010
  className: "border-grey-300 absolute left-0 right-0 top-full z-10 flex flex-col gap-y-4 rounded-b border border-t-0 bg-white p-3 shadow",
8978
9011
  onClickCapture: () => {
8979
- var _internalRef$current4;
8980
- return (_internalRef$current4 = internalRef.current) === null || _internalRef$current4 === void 0 ? void 0 : _internalRef$current4.focus();
9012
+ var _internalRef$current5;
9013
+ return (_internalRef$current5 = internalRef.current) === null || _internalRef$current5 === void 0 ? void 0 : _internalRef$current5.focus();
8981
9014
  },
8982
9015
  tabIndex: -1
8983
9016
  }, settingsContent) : null);
@@ -9468,7 +9501,17 @@ const EditPopover = props => {
9468
9501
  setColor(initialColor);
9469
9502
  };
9470
9503
  const preventKeyDownPropagation = event => {
9471
- if (event.key !== 'Escape') {
9504
+ // Need to allow 'Escape', 'Tab', 'Shift + Tab' to support default focus and close behaviour of Radix Popover.
9505
+ if (event.key === 'Escape' || event.key === 'Tab' || event.key === 'Tab' && event.shiftKey) {
9506
+ return;
9507
+ } else {
9508
+ event.stopPropagation();
9509
+ }
9510
+ };
9511
+ const popoverContentKeyDown = event => {
9512
+ // Need to stop propagation of 'Tab', 'Shift + Tab' keys out of Popover content,
9513
+ // to avoid 'Tab' key execution on Option component and closing the dropdown.
9514
+ if (event.key === 'Tab' || event.key === 'Tab' && event.shiftKey) {
9472
9515
  event.stopPropagation();
9473
9516
  }
9474
9517
  };
@@ -9476,6 +9519,7 @@ const EditPopover = props => {
9476
9519
  onCloseAutoFocus: handleCloseAutoFocus,
9477
9520
  onInteractOutside: handleInteractOutside,
9478
9521
  onClick: event => event.stopPropagation(),
9522
+ onKeyDown: popoverContentKeyDown,
9479
9523
  placement: "right",
9480
9524
  tabIndex: -1,
9481
9525
  className: "focus:!shadow-none"
@@ -15616,54 +15660,6 @@ const Table2 = /*#__PURE__*/React__default.forwardRef(function Table2(props, ref
15616
15660
  });
15617
15661
  Table2.Column = Column$3;
15618
15662
 
15619
- const isInternalColumn$1 = id => id.startsWith('__');
15620
- const isFrozenColumn = (index, table) => {
15621
- const tableMeta = table.options.meta;
15622
- if (!tableMeta.columnFreezing.isEnabled || tableMeta.columnFreezing.frozenColumnIndex === undefined) {
15623
- return false;
15624
- }
15625
- return tableMeta.columnFreezing.frozenColumnIndex >= index;
15626
- };
15627
- const getCurrentRowCellElement = (index, table) => {
15628
- const cellSelector = `[data-current="true"] [data-column-index="${index}"`;
15629
- return table.querySelector(cellSelector);
15630
- };
15631
- function scrollColumnIntoView(columnIndex, frozenColumnIndex, column, table) {
15632
- if (frozenColumnIndex !== undefined && columnIndex > frozenColumnIndex) {
15633
- const lastFrozenColumnElement = getCurrentRowCellElement(frozenColumnIndex, table);
15634
- const highlightRef = column === null || column === void 0 ? void 0 : column.getBoundingClientRect();
15635
- const lastFrozenRect = lastFrozenColumnElement === null || lastFrozenColumnElement === void 0 ? void 0 : lastFrozenColumnElement.getBoundingClientRect();
15636
- // offset the width of frozen columns so that the column being scrolled to is not hidden behind them
15637
- if (highlightRef && lastFrozenRect && highlightRef.left < lastFrozenRect.left + lastFrozenRect.width) {
15638
- const pinnedColumnsWidth = lastFrozenRect.left + lastFrozenRect.width;
15639
- table === null || table === void 0 ? void 0 : table.scrollTo(highlightRef.left - pinnedColumnsWidth, table.scrollTop);
15640
- }
15641
- } else {
15642
- column.scrollIntoView({
15643
- block: 'nearest',
15644
- inline: 'nearest'
15645
- });
15646
- }
15647
- }
15648
- function isCellHighlighted(query, value, children) {
15649
- // if we just stringify date, we get the full object with "Greenwich Meantime" etc in
15650
- const highlightValue = dateFns.isDate(value) ? children : value;
15651
- return String(highlightValue).toLocaleLowerCase().includes(query.toLocaleLowerCase());
15652
- }
15653
-
15654
- const MIN_COLUMN_SIZE$1 = 80; // accounts for padding and sort controls
15655
- const getCellAlignmentClasses$1 = (alignment = 'left') => {
15656
- return cn({
15657
- 'justify-start text-left': alignment === 'left',
15658
- 'justify-end text-right': alignment === 'right',
15659
- 'justify-center text-center': alignment === 'center'
15660
- });
15661
- };
15662
- // Hiding input number spin buttons
15663
- const getInputAppearanceClassnames = () => {
15664
- return cn('[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none');
15665
- };
15666
-
15667
15663
  function GotoPopover(props) {
15668
15664
  const {
15669
15665
  onGoto: handleGoto,
@@ -15680,6 +15676,7 @@ function GotoPopover(props) {
15680
15676
  "aria-label": texts.table3.columns.menu.gotoRow,
15681
15677
  name: "query",
15682
15678
  onSearch: handleSearch,
15679
+ onKeyDown: event => event.stopPropagation(),
15683
15680
  placeholder: `${texts.table3.columns.menu.gotoRow}...`
15684
15681
  })));
15685
15682
  }
@@ -15699,20 +15696,6 @@ function isMenuAvailable(table, header) {
15699
15696
  const tableMeta = table.options.meta;
15700
15697
  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);
15701
15698
  }
15702
- function getInitialFrozenIndex(table) {
15703
- const tableMeta = table.options.meta;
15704
- let index = 0;
15705
- if (tableMeta.rowDrag.isEnabled) {
15706
- index++;
15707
- }
15708
- if (table.options.enableRowSelection) {
15709
- index++;
15710
- }
15711
- if (table.options.enableExpanding) {
15712
- index++;
15713
- }
15714
- return index;
15715
- }
15716
15699
  function Menu$3(props) {
15717
15700
  const {
15718
15701
  canFreeze,
@@ -15774,7 +15757,8 @@ function Menu$3(props) {
15774
15757
  if (handleGoto) {
15775
15758
  menuItems.push( /*#__PURE__*/React__default.createElement(Menu$1.Item, {
15776
15759
  icon: "move",
15777
- onClick: () => setPopover('goto')
15760
+ onClick: () => setPopover('goto'),
15761
+ shortcut: "g"
15778
15762
  }, texts.table3.columns.menu.gotoRow, "..."));
15779
15763
  }
15780
15764
  if (canHide) {
@@ -15786,10 +15770,8 @@ function Menu$3(props) {
15786
15770
  }, texts.table3.columns.menu.hideColumn));
15787
15771
  }
15788
15772
  if (canFreeze) {
15789
- const handleClick = () => {
15790
- tableMeta.columnFreezing.setFrozenColumnIndex(index);
15791
- };
15792
- const frozenIndex = index - getInitialFrozenIndex(table);
15773
+ const frozenIndex = index - tableMeta.columnFreezing.frozenInternalColumnCount;
15774
+ const handleClick = () => tableMeta.columnFreezing.setFrozenColumnIndex(frozenIndex);
15793
15775
  menuItems.push( /*#__PURE__*/React__default.createElement(Menu$1.Item, {
15794
15776
  icon: "column-freeze",
15795
15777
  onClick: handleClick
@@ -15932,7 +15914,7 @@ function Header$2(props) {
15932
15914
  hasMenu: isMenuAvailable(table, header),
15933
15915
  id: header.id,
15934
15916
  index: header.index,
15935
- isFrozen: isFrozenColumn(header.index, table),
15917
+ isFrozen: isFrozenColumn(header, table),
15936
15918
  isResizing: column.getIsResizing(),
15937
15919
  length: table.getRowModel().rows.length,
15938
15920
  meta: columnMeta,
@@ -15984,7 +15966,7 @@ const MemoedHeader = /*#__PURE__*/React__default.memo(function MemoedHeader(prop
15984
15966
  React__default.useLayoutEffect(() => {
15985
15967
  if (internalRef && length) {
15986
15968
  // the actions column size gets set by the column itself
15987
- if (id === COLUMN_ID) {
15969
+ if (isInternalColumn$1(id)) {
15988
15970
  return;
15989
15971
  }
15990
15972
  table.setColumnSizing(sizes => ({
@@ -16073,14 +16055,14 @@ function DisplayCell(props) {
16073
16055
  }, [row.original, props.children, value]);
16074
16056
  const memoedHighlight = React__default.useMemo(() => {
16075
16057
  var _tableMeta$search$que;
16076
- if (!tableMeta.search.isHighlightingEnabled) {
16058
+ if (!tableMeta.search.isHighlightingEnabled || !columnMeta.enableSearch) {
16077
16059
  return false;
16078
16060
  }
16079
- if ((_tableMeta$search$que = tableMeta.search.query) !== null && _tableMeta$search$que !== void 0 && _tableMeta$search$que.length && columnMeta.enableSearch) {
16080
- return isCellHighlighted(tableMeta.search.query, value, memoedProps.children);
16061
+ if ((_tableMeta$search$que = tableMeta.search.query) !== null && _tableMeta$search$que !== void 0 && _tableMeta$search$que.length) {
16062
+ return isCellHighlighted(tableMeta.search.query, value, columnMeta.dataType);
16081
16063
  }
16082
16064
  return false;
16083
- }, [memoedProps.children, tableMeta.search.isHighlightingEnabled, tableMeta.search.excludeUnmatchedResults, tableMeta.search.query]);
16065
+ }, [value, tableMeta.search.isHighlightingEnabled, tableMeta.search.excludeUnmatchedResults, tableMeta.search.query]);
16084
16066
  const memoedHighlightCurrent = React__default.useMemo(() => {
16085
16067
  if (!tableMeta.search.isHighlightingEnabled || !memoedHighlight || tableMeta.search.currentHighlightColumnIndex === undefined) {
16086
16068
  return false;
@@ -16171,7 +16153,7 @@ function Footer$4(props) {
16171
16153
  align: meta.align,
16172
16154
  id: header.id,
16173
16155
  index: header.index,
16174
- isFrozen: isFrozenColumn(header.index, table),
16156
+ isFrozen: isFrozenColumn(header, table),
16175
16157
  meta,
16176
16158
  table
16177
16159
  };
@@ -16292,7 +16274,7 @@ function createRowActionsColumn$1() {
16292
16274
  footer: Footer$4,
16293
16275
  meta: {
16294
16276
  align: 'right',
16295
- className: cn('!pt-[var(--table3-row-padding)] print:opacity-0 [[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:sticky [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:sticky right-0 !pl-1 !pr-1', '[[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:shadow-[-6px_0px_6px] [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:shadow-[-6px_0px_6px]', 'group-[[data-current="true"][data-selected="false"]]/row:text-grey-200', 'group-[[data-selected="true"]]/row:text-blue-100', 'group-[[data-selected="false"]:hover]/row:text-grey-100'),
16277
+ className: cn('!pt-[var(--table3-row-padding)] print:opacity-0 [[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:sticky [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:sticky right-0 !pl-1 !pr-1', '[[role="table"][data-editing="false"]_&]:group-[[data-current="true"]]/row:shadow-[-6px_0px_6px_theme(colors.grey.200)] [[role="table"][data-pause-hover="false"][data-editing="false"]_&]:group-hover/row:shadow-[-6px_0px_6px_theme(colors.grey.100)]', 'group-[[data-current="true"][data-selected="false"]]/row:text-grey-200', 'group-[[data-selected="true"]]/row:text-blue-100', 'group-[[data-selected="false"]:hover]/row:text-grey-100'),
16296
16278
  enableOrdering: false,
16297
16279
  enableSearch: false,
16298
16280
  enableTruncate: false,
@@ -16304,6 +16286,71 @@ function createRowActionsColumn$1() {
16304
16286
  };
16305
16287
  }
16306
16288
 
16289
+ const isInternalColumn$1 = id => id.startsWith('__');
16290
+ const isFrozenColumn = (header, table) => {
16291
+ var _tableMeta$columnFree;
16292
+ const tableMeta = table.options.meta;
16293
+ if (header.column.id !== COLUMN_ID && isInternalColumn$1(header.column.id)) {
16294
+ return true;
16295
+ }
16296
+ if (!tableMeta.columnFreezing.isEnabled || tableMeta.columnFreezing.frozenColumnIndex === undefined) {
16297
+ return false;
16298
+ }
16299
+ return tableMeta.columnFreezing.frozenColumnIndex + ((_tableMeta$columnFree = tableMeta.columnFreezing.frozenInternalColumnCount) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : 0) >= header.index;
16300
+ };
16301
+ const getCurrentRowCellElement = (index, table) => {
16302
+ const cellSelector = `[data-current="true"] [data-column-index="${index}"`;
16303
+ return table.querySelector(cellSelector);
16304
+ };
16305
+ function scrollColumnIntoView(columnIndex, frozenColumnIndex, column, table) {
16306
+ if (frozenColumnIndex !== undefined && columnIndex > frozenColumnIndex) {
16307
+ const lastFrozenColumnElement = getCurrentRowCellElement(frozenColumnIndex, table);
16308
+ const highlightRef = column === null || column === void 0 ? void 0 : column.getBoundingClientRect();
16309
+ const lastFrozenRect = lastFrozenColumnElement === null || lastFrozenColumnElement === void 0 ? void 0 : lastFrozenColumnElement.getBoundingClientRect();
16310
+ // offset the width of frozen columns so that the column being scrolled to is not hidden behind them
16311
+ if (highlightRef && lastFrozenRect && highlightRef.left < lastFrozenRect.left + lastFrozenRect.width) {
16312
+ const pinnedColumnsWidth = lastFrozenRect.left + lastFrozenRect.width;
16313
+ table === null || table === void 0 ? void 0 : table.scrollTo(highlightRef.left - pinnedColumnsWidth, table.scrollTop);
16314
+ }
16315
+ } else {
16316
+ column.scrollIntoView({
16317
+ block: 'nearest',
16318
+ inline: 'nearest'
16319
+ });
16320
+ }
16321
+ }
16322
+ function isCellHighlighted(query, value, dataType) {
16323
+ if (value === undefined || value === null) {
16324
+ return false;
16325
+ }
16326
+ return String(getCellValueAsString(value, dataType)).toLocaleLowerCase().includes(query.toLocaleLowerCase());
16327
+ }
16328
+ function getCellValueAsString(value, dataType) {
16329
+ if (value === undefined || value === null) {
16330
+ return '';
16331
+ } else if (dateFns.isDate(value)) {
16332
+ var _format;
16333
+ return (_format = format(value)) !== null && _format !== void 0 ? _format : '';
16334
+ } else if (dataType === 'datetime' && typeof value === 'string') {
16335
+ var _format2;
16336
+ return (_format2 = format(parseFromISOString(value))) !== null && _format2 !== void 0 ? _format2 : '';
16337
+ }
16338
+ return String(value);
16339
+ }
16340
+
16341
+ const MIN_COLUMN_SIZE$1 = 80; // accounts for padding and sort controls
16342
+ const getCellAlignmentClasses$1 = (alignment = 'left') => {
16343
+ return cn({
16344
+ 'justify-start text-left': alignment === 'left',
16345
+ 'justify-end text-right': alignment === 'right',
16346
+ 'justify-center text-center': alignment === 'center'
16347
+ });
16348
+ };
16349
+ // Hiding input number spin buttons
16350
+ const getInputAppearanceClassnames = () => {
16351
+ return cn('[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none');
16352
+ };
16353
+
16307
16354
  const useCssGrid = table => {
16308
16355
  const allVisibleColumns = table.getVisibleLeafColumns();
16309
16356
  const columnSizing = table.getState().columnSizing;
@@ -16361,7 +16408,7 @@ function useCurrentRow(defaultCurrentRowIndex = 0) {
16361
16408
  const moveUp = (length, callback) => move(-1, length, callback);
16362
16409
  const moveDown = (length, callback) => move(1, length, callback);
16363
16410
  const onKeyDown = React__default.useCallback((event, length, scrollToIndex) => {
16364
- if (event.isDefaultPrevented() || event.isPropagationStopped()) {
16411
+ if (event.defaultPrevented) {
16365
16412
  return;
16366
16413
  }
16367
16414
  if (event.key === 'ArrowUp') {
@@ -16402,6 +16449,9 @@ const getNextIndex$2 = (direction, currentIndex, length) => {
16402
16449
  function usePauseHoverState() {
16403
16450
  const [isHoverStatePaused, setHoverStatePaused] = useIsHoverStatePaused();
16404
16451
  const onKeyDown = React__default.useCallback(event => {
16452
+ if (event.defaultPrevented) {
16453
+ return;
16454
+ }
16405
16455
  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
16406
16456
  setHoverStatePaused(true);
16407
16457
  }
@@ -16607,11 +16657,13 @@ var Table3FilterComparator;
16607
16657
  Table3FilterComparator[Table3FilterComparator["IsGreaterThan"] = 4] = "IsGreaterThan";
16608
16658
  Table3FilterComparator[Table3FilterComparator["IsLessThan"] = 5] = "IsLessThan";
16609
16659
  Table3FilterComparator[Table3FilterComparator["IsBetween"] = 6] = "IsBetween";
16610
- Table3FilterComparator[Table3FilterComparator["IsOneOf"] = 7] = "IsOneOf";
16611
- Table3FilterComparator[Table3FilterComparator["IsNoneOf"] = 8] = "IsNoneOf";
16612
- Table3FilterComparator[Table3FilterComparator["IsAllOf"] = 9] = "IsAllOf";
16613
- Table3FilterComparator[Table3FilterComparator["IsEmpty"] = 10] = "IsEmpty";
16614
- Table3FilterComparator[Table3FilterComparator["IsNotEmpty"] = 11] = "IsNotEmpty";
16660
+ Table3FilterComparator[Table3FilterComparator["IsEmpty"] = 7] = "IsEmpty";
16661
+ Table3FilterComparator[Table3FilterComparator["IsNotEmpty"] = 8] = "IsNotEmpty";
16662
+ Table3FilterComparator[Table3FilterComparator["IsLessThanOrEqualTo"] = 9] = "IsLessThanOrEqualTo";
16663
+ Table3FilterComparator[Table3FilterComparator["IsGreaterThanOrEqualTo"] = 10] = "IsGreaterThanOrEqualTo";
16664
+ Table3FilterComparator[Table3FilterComparator["HasAnyOf"] = 11] = "HasAnyOf";
16665
+ Table3FilterComparator[Table3FilterComparator["HasAllOf"] = 12] = "HasAllOf";
16666
+ Table3FilterComparator[Table3FilterComparator["HasNoneOf"] = 13] = "HasNoneOf";
16615
16667
  })(Table3FilterComparator || (Table3FilterComparator = {}));
16616
16668
 
16617
16669
  const toLowerCase$1 = value => String(value !== null && value !== void 0 ? value : '').toLocaleLowerCase();
@@ -16673,6 +16725,24 @@ function columnFilterFn$1(value, filter) {
16673
16725
  return !isNaN(valueAsNumber) && filter.value !== undefined && valueAsNumber < filter.value;
16674
16726
  }
16675
16727
  }
16728
+ case Table3FilterComparator.IsLessThanOrEqualTo:
16729
+ {
16730
+ if (dateFns.isDate(value)) {
16731
+ return dateFns.isDate(filter.value) && (dateFns.isBefore(value, filter.value) || dateFns.isEqual(value, filter.value));
16732
+ } else {
16733
+ const valueAsNumber = parseInt(value);
16734
+ return !isNaN(valueAsNumber) && filter.value !== undefined && valueAsNumber <= filter.value;
16735
+ }
16736
+ }
16737
+ case Table3FilterComparator.IsGreaterThanOrEqualTo:
16738
+ {
16739
+ if (dateFns.isDate(value)) {
16740
+ return dateFns.isDate(filter.value) && (dateFns.isAfter(value, filter.value) || dateFns.isEqual(value, filter.value));
16741
+ } else {
16742
+ const valueAsNumber = parseInt(value);
16743
+ return !isNaN(valueAsNumber) && filter.value !== undefined && valueAsNumber >= filter.value;
16744
+ }
16745
+ }
16676
16746
  case Table3FilterComparator.IsBetween:
16677
16747
  {
16678
16748
  const [fromValue, toValue] = filter.value;
@@ -16696,11 +16766,11 @@ function columnFilterFn$1(value, filter) {
16696
16766
  return true;
16697
16767
  }
16698
16768
  }
16699
- case Table3FilterComparator.IsOneOf:
16700
- return Array.isArray(filter.value) ? filter.value.includes(value) : false;
16701
- case Table3FilterComparator.IsNoneOf:
16702
- return Array.isArray(filter.value) ? filter.value.includes(value) === false : false;
16703
- case Table3FilterComparator.IsAllOf:
16769
+ case Table3FilterComparator.HasAnyOf:
16770
+ return Array.isArray(filter.value) && Array.isArray(value) ? filter.value.some(item => value.includes(item)) : false;
16771
+ case Table3FilterComparator.HasNoneOf:
16772
+ return Array.isArray(filter.value) && Array.isArray(value) ? filter.value.every(item => value.includes(item) === false) : false;
16773
+ case Table3FilterComparator.HasAllOf:
16704
16774
  return Array.isArray(filter.value) && Array.isArray(value) ? filter.value.filter(v => value.includes(v)).length === filter.value.length : false;
16705
16775
  }
16706
16776
  return false;
@@ -16748,8 +16818,8 @@ function useCurrentRowListener(table) {
16748
16818
  }, [rows.length]);
16749
16819
  }
16750
16820
 
16751
- function getDefaultFrozenIndex(options, defaultFrozenIndex = -1) {
16752
- let index = defaultFrozenIndex;
16821
+ function getFrozenInternalColumnCount(options) {
16822
+ let index = 0;
16753
16823
  if (options.enableRowDrag) {
16754
16824
  index++;
16755
16825
  }
@@ -16759,7 +16829,7 @@ function getDefaultFrozenIndex(options, defaultFrozenIndex = -1) {
16759
16829
  if (options.enableRowExpansion) {
16760
16830
  index++;
16761
16831
  }
16762
- return index >= 0 ? index : undefined;
16832
+ return index;
16763
16833
  }
16764
16834
  /*
16765
16835
  Because of the desired behaviour of column freezing we use custom state and just an index.
@@ -16767,7 +16837,7 @@ If a frozen column is, for example, hidden, then the desired behaviour is that t
16767
16837
  If this behaviour were different we would just use the native column pinning functionality
16768
16838
  */
16769
16839
  function useColumnFreezing(defaultFrozenIndex, options) {
16770
- const [frozenColumnIndex, _setFrozenColumnIndex] = React__default.useState(getDefaultFrozenIndex(options, defaultFrozenIndex));
16840
+ const [frozenColumnIndex, _setFrozenColumnIndex] = React__default.useState(() => defaultFrozenIndex);
16771
16841
  const [horizontallyScrolled, setHorizontallyScrolled] = React__default.useState(false);
16772
16842
  const onScroll = event => {
16773
16843
  if (event.currentTarget.scrollLeft > 0 && !horizontallyScrolled) {
@@ -16776,11 +16846,13 @@ function useColumnFreezing(defaultFrozenIndex, options) {
16776
16846
  setHorizontallyScrolled(false);
16777
16847
  }
16778
16848
  };
16779
- const setFrozenColumnIndex = index => {
16780
- _setFrozenColumnIndex(index !== null && index !== void 0 ? index : getDefaultFrozenIndex(options));
16781
- };
16849
+ const frozenInternalColumnCount = React__default.useMemo(() => getFrozenInternalColumnCount(options), []);
16850
+ // we must set a value when undefined is explicitly set, otherwise nothing is saved to settings
16851
+ // and the next time the table loads it will fall back to the initial value even though the user changed it
16852
+ const setFrozenColumnIndex = index => _setFrozenColumnIndex(index !== null && index !== void 0 ? index : -1);
16782
16853
  return {
16783
16854
  isEnabled: options.enableColumnFreezing,
16855
+ frozenInternalColumnCount,
16784
16856
  frozenColumnIndex,
16785
16857
  setFrozenColumnIndex,
16786
16858
  horizontallyScrolled,
@@ -16788,6 +16860,7 @@ function useColumnFreezing(defaultFrozenIndex, options) {
16788
16860
  };
16789
16861
  }
16790
16862
  function useColumnFreezingStyle(tableId, table) {
16863
+ var _tableMeta$columnFree;
16791
16864
  const {
16792
16865
  columnOrder,
16793
16866
  columnSizing,
@@ -16795,9 +16868,10 @@ function useColumnFreezingStyle(tableId, table) {
16795
16868
  columnVisibility
16796
16869
  } = table.getState();
16797
16870
  const tableMeta = table.options.meta;
16871
+ const frozenColumnIndex = ((_tableMeta$columnFree = tableMeta.columnFreezing.frozenColumnIndex) !== null && _tableMeta$columnFree !== void 0 ? _tableMeta$columnFree : -1) + tableMeta.columnFreezing.frozenInternalColumnCount;
16798
16872
  const style = React__default.useMemo(() => {
16799
- if (tableMeta.columnFreezing.isEnabled && tableMeta.columnFreezing.frozenColumnIndex !== undefined) {
16800
- const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, tableMeta.columnFreezing.frozenColumnIndex + 1).map(column => column.id);
16873
+ if (tableMeta.columnFreezing.frozenInternalColumnCount > 0 || tableMeta.columnFreezing.isEnabled && frozenColumnIndex !== undefined) {
16874
+ const visibleFrozenColumns = table.getVisibleLeafColumns().slice(0, frozenColumnIndex + 1).map(column => column.id);
16801
16875
  // if all frozen columns haven't had their size set yet, then abort
16802
16876
  if (visibleFrozenColumns.every(id => columnSizing[id] === undefined)) {
16803
16877
  return undefined;
@@ -16807,33 +16881,33 @@ function useColumnFreezingStyle(tableId, table) {
16807
16881
  offsets[columnId] = offset;
16808
16882
  return offset + columnSizing[columnId];
16809
16883
  }, 0);
16810
- 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})) {
16884
+ 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})) {
16811
16885
  position: sticky;
16812
- z-index: 20;
16813
- }`, `#${tableId}[data-horizontally-scrolled="true"] [role="row"] > :nth-child(${tableMeta.columnFreezing.frozenColumnIndex + 1}) {
16886
+ z-index: 20;
16887
+ }`, `#${tableId}[data-horizontally-scrolled="true"] [role="row"] > :nth-child(${frozenColumnIndex + 1}) {
16814
16888
  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;
16815
16889
  }`];
16816
- const columnId = visibleFrozenColumns[tableMeta.columnFreezing.frozenColumnIndex];
16890
+ const columnId = visibleFrozenColumns[frozenColumnIndex];
16817
16891
  // frozenColumnIndex could not be in the visible frozen column so it is important to check if columnId
16818
16892
  // exists before checking if it is internal.
16819
16893
  //
16820
16894
  // only add a border to the edge column if it isn't an internal column
16821
16895
  if (columnId && !isInternalColumn$1(columnId)) {
16822
- styles.push(`#${tableId}[data-horizontally-scrolled="false"] [role="row"] > :nth-child(${tableMeta.columnFreezing.frozenColumnIndex + 1}) {
16896
+ styles.push(`#${tableId}[data-horizontally-scrolled="false"] [role="row"] > :nth-child(${frozenColumnIndex + 1}) {
16823
16897
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), 1px 0px 0px #DDDDDD;
16824
16898
  }`);
16825
16899
  }
16826
16900
  return styles.join('\n');
16827
16901
  }
16828
16902
  return undefined;
16829
- }, [columnOrder, columnSizing, columnSizingInfo, columnVisibility, tableMeta.columnFreezing.isEnabled, tableMeta.columnFreezing.frozenColumnIndex]);
16903
+ }, [columnOrder, columnSizing, columnSizingInfo, columnVisibility, tableMeta.columnFreezing.isEnabled, frozenColumnIndex]);
16830
16904
  return style;
16831
16905
  }
16832
16906
 
16833
16907
  function useRowSelection() {
16834
16908
  const lastSelectedRowIndex = React__default.useRef();
16835
16909
  const onKeyDown = React__default.useCallback((event, table) => {
16836
- if (!table.options.enableRowSelection || event.isDefaultPrevented() || event.isPropagationStopped()) {
16910
+ if (!table.options.enableRowSelection || event.defaultPrevented) {
16837
16911
  return;
16838
16912
  }
16839
16913
  const rows = table.getRowModel().rows;
@@ -16857,7 +16931,7 @@ function useRowSelection() {
16857
16931
 
16858
16932
  function useRowClick(onRowClick) {
16859
16933
  const onKeyDown = React__default.useCallback((event, table) => {
16860
- if (typeof onRowClick !== 'function' || event.isDefaultPrevented() || event.isPropagationStopped()) {
16934
+ if (typeof onRowClick !== 'function' || event.defaultPrevented) {
16861
16935
  return;
16862
16936
  }
16863
16937
  const rows = table.getRowModel().rows;
@@ -16927,29 +17001,25 @@ function useEditing(isEnabled, onSave) {
16927
17001
  }
16928
17002
  setChanges(currentChanges);
16929
17003
  }
16930
- const handleKeyDown = (event, tableRef) => {
17004
+ const handleKeyDown = React__default.useCallback(event => {
17005
+ if (event.defaultPrevented) {
17006
+ return;
17007
+ }
16931
17008
  if (event.ctrlKey || event.metaKey) {
16932
17009
  if (event.key === 'e') {
16933
- if (isEditing) {
16934
- var _tableRef$current;
16935
- setIsEditing(false);
16936
- (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.focus();
16937
- } else {
16938
- setIsEditing(true);
16939
- }
16940
- }
16941
- if (event.key === 's') {
17010
+ setIsEditing(editing => !editing);
17011
+ } else if (event.key === 's') {
16942
17012
  // Prevent default browser save
16943
17013
  event.preventDefault();
16944
17014
  saveChangesIfNeeded();
16945
17015
  }
16946
17016
  }
16947
- };
16948
- const handleBlur = event => {
17017
+ }, [isEditing]);
17018
+ const handleBlur = React__default.useCallback(event => {
16949
17019
  if (event.target === event.currentTarget) {
16950
17020
  saveChangesIfNeeded();
16951
17021
  }
16952
- };
17022
+ }, []);
16953
17023
  // Creates initial saving states from changes object
16954
17024
  const addSavingStates = () => {
16955
17025
  const changeset = Object.keys(changes || {});
@@ -17484,9 +17554,7 @@ const Control = /*#__PURE__*/React__default.forwardRef(function Control(props, r
17484
17554
  }
17485
17555
  }
17486
17556
  } else {
17487
- var _tableRef$current;
17488
17557
  tableMeta.editing.toggleEditing(false);
17489
- (_tableRef$current = tableRef.current) === null || _tableRef$current === void 0 ? void 0 : _tableRef$current.focus();
17490
17558
  }
17491
17559
  return;
17492
17560
  }
@@ -17666,7 +17734,12 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17666
17734
  }
17667
17735
  tableMeta.rowSelection.lastSelectedRowIndex.current = rowIndex;
17668
17736
  };
17669
- return /*#__PURE__*/React__default.createElement(DisplayCell, Object.assign({}, context), /*#__PURE__*/React__default.createElement(Checkbox, {
17737
+ return /*#__PURE__*/React__default.createElement(DisplayCell, Object.assign({}, context), /*#__PURE__*/React__default.createElement(Tooltip, {
17738
+ title: /*#__PURE__*/React__default.createElement(React__default.Fragment, null, title, /*#__PURE__*/React__default.createElement(Shortcut, {
17739
+ className: "ml-2",
17740
+ keys: "Space"
17741
+ }))
17742
+ }, /*#__PURE__*/React__default.createElement(Checkbox, {
17670
17743
  "aria-label": title,
17671
17744
  className: "!mt-0",
17672
17745
  checked: isSelected,
@@ -17674,7 +17747,7 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17674
17747
  // this is necessary to remove console spam from eslint
17675
17748
  onChange: () => false,
17676
17749
  tabIndex: isCurrentRow ? 0 : -1
17677
- }));
17750
+ })));
17678
17751
  } else {
17679
17752
  const className = cn('!mt-0', getRadioClassnames());
17680
17753
  const handleClick = event => {
@@ -17701,7 +17774,8 @@ const Cell$4 = /*#__PURE__*/React__default.memo(function MemoedCell(context) {
17701
17774
  // and we don't really care about re-rendering in any other scenario
17702
17775
  return newTableMeta.currentRow.currentRowIndex === oldTableMeta.currentRow.currentRowIndex && newProps.row.getIsSelected() !== oldProps.row.getIsSelected();
17703
17776
  });
17704
- function createRowSelectionColumn$1(onRowDrag) {
17777
+ function createRowSelectionColumn$1(hasDrag, hasExpansion) {
17778
+ const size = hasDrag ? 22 : 40;
17705
17779
  return {
17706
17780
  id: COLUMN_ID$2,
17707
17781
  header: Header$3,
@@ -17709,16 +17783,23 @@ function createRowSelectionColumn$1(onRowDrag) {
17709
17783
  footer: Footer$4,
17710
17784
  meta: {
17711
17785
  align: 'center',
17712
- className: '!pt-[var(--table3-row-padding)] !justify-end !p-0 !pr-0.5',
17786
+ className: cn('!pt-[var(--table3-row-padding)] !justify-end !p-0', {
17787
+ '!pr-0.5': hasExpansion,
17788
+ '!pr-2.5': !hasExpansion
17789
+ }),
17713
17790
  enableOrdering: false,
17714
17791
  enableSearch: false,
17715
17792
  enableTruncate: false,
17716
17793
  header: '',
17717
- headerClassName: 'items-center !justify-end !p-0 !pr-0.5'
17794
+ headerClassName: cn('items-center !justify-end !p-0', {
17795
+ '!pr-0.5': hasExpansion,
17796
+ '!pr-2.5': !hasExpansion
17797
+ })
17718
17798
  },
17719
17799
  // options
17720
17800
  enableResizing: false,
17721
- size: onRowDrag ? 22 : 32
17801
+ size,
17802
+ minSize: size
17722
17803
  };
17723
17804
  }
17724
17805
 
@@ -17901,7 +17982,7 @@ function getSortingFn$1(dataType, customFnOrBuiltIn) {
17901
17982
  return customFnOrBuiltIn;
17902
17983
  }
17903
17984
  // some times we alias based on the type
17904
- if (dataType && dataType !== 'boolean') {
17985
+ if (dataType && dataType !== 'boolean' && dataType !== 'number') {
17905
17986
  return dataType;
17906
17987
  }
17907
17988
  // otherwise fall back to auto
@@ -17956,11 +18037,9 @@ function useConvertChildrenToColumns(props, options, editing) {
17956
18037
  control: child.props.control,
17957
18038
  dataType: child.props.dataType,
17958
18039
  enableOrdering: (_child$props$enableOr = child.props.enableOrdering) !== null && _child$props$enableOr !== void 0 ? _child$props$enableOr : true,
17959
- // react-table global filtering only samples from row 0 in a dataset for filtering and this
17960
- // leads to some columns being disabled if, e.g., a column in row 0 has an undefined value
17961
- // so we do not use the native enableGlobalFilter property and instead use our own enableSearch
17962
18040
  enableSearch: (_child$props$enableSe = child.props.enableSearch) !== null && _child$props$enableSe !== void 0 ? _child$props$enableSe : true,
17963
18041
  enableTruncate: (_child$props$enableTr = child.props.enableTruncate) !== null && _child$props$enableTr !== void 0 ? _child$props$enableTr : false,
18042
+ filters: child.props.filters,
17964
18043
  footer: child.props.footer,
17965
18044
  header: child.props.header,
17966
18045
  headerClassName: child.props.headerClassName,
@@ -17975,7 +18054,7 @@ function useConvertChildrenToColumns(props, options, editing) {
17975
18054
  columns.unshift(columnHelper.display(createRowExpansionColumn$1(props.expandedRowRenderer)));
17976
18055
  }
17977
18056
  if (options.enableRowSelection) {
17978
- columns.unshift(columnHelper.display(createRowSelectionColumn$1(options.enableRowDrag ? props.onRowDrag : undefined)));
18057
+ columns.unshift(columnHelper.display(createRowSelectionColumn$1(!!(options.enableRowDrag && props.onRowDrag), !!props.expandedRowRenderer)));
17979
18058
  }
17980
18059
  if (options.enableRowDrag && props.onRowDrag) {
17981
18060
  columns.unshift(columnHelper.display(createRowDragColumn(props.onRowDrag)));
@@ -18118,8 +18197,54 @@ function useRowActions$1(actionsForRow, actionsForRowLength = ACTIONS_ON_ROW_LEN
18118
18197
  };
18119
18198
  }
18120
18199
 
18200
+ const useLocalStorage = (key, initialValue) => {
18201
+ const [state, setState] = React__default.useState(() => {
18202
+ try {
18203
+ const localStorageValue = localStorage.getItem(key);
18204
+ if (typeof localStorageValue !== 'string') {
18205
+ localStorage.setItem(key, JSON.stringify(initialValue));
18206
+ return initialValue;
18207
+ } else {
18208
+ return JSON.parse(localStorageValue || 'null');
18209
+ }
18210
+ } catch {
18211
+ // If user is in private mode or has storage restriction
18212
+ // localStorage can throw. JSON.parse and JSON.stringify
18213
+ // can throw, too.
18214
+ return initialValue;
18215
+ }
18216
+ });
18217
+ React__default.useEffect(() => {
18218
+ try {
18219
+ const serializedState = JSON.stringify(state);
18220
+ localStorage.setItem(key, serializedState);
18221
+ } catch {
18222
+ // If user is in private mode or has storage restriction
18223
+ // localStorage can throw. Also JSON.stringify can throw.
18224
+ }
18225
+ }, [key, state]);
18226
+ const clear = () => localStorage.removeItem(key);
18227
+ return [state, setState, clear];
18228
+ };
18229
+
18230
+ function useTacoSettings() {
18231
+ return React__default.useContext(TacoContext);
18232
+ }
18233
+
18234
+ function useSettings(id, defaultSettings = {}, onChangeSettings) {
18235
+ const tacoSettings = useTacoSettings();
18236
+ const uniqueId = `taco.${tacoSettings.uniqueUserIdentifier}.table3.${id}.settings`;
18237
+ const [persistedSettings, setPersistedSettings] = useLocalStorage(uniqueId, defaultSettings);
18238
+ return React__default.useMemo(() => {
18239
+ if (onChangeSettings) {
18240
+ return [defaultSettings, onChangeSettings];
18241
+ }
18242
+ return [persistedSettings, setPersistedSettings];
18243
+ }, []);
18244
+ }
18245
+
18121
18246
  function useTable$2(props) {
18122
- var _ref, _props$defaultSetting, _props$defaultSetting2, _props$defaultSetting3, _props$defaultSetting4, _props$defaultSetting5, _props$defaultSetting6, _props$defaultSetting7, _props$defaultSetting8, _props$defaultSetting9, _props$length;
18247
+ var _ref, _defaultSettings$colu, _defaultSettings$rowH, _props$length;
18123
18248
  // options
18124
18249
  const options = useTablePreset(props);
18125
18250
  const tableOptions = {
@@ -18157,6 +18282,10 @@ function useTable$2(props) {
18157
18282
  return false;
18158
18283
  };
18159
18284
  tableOptions.getFilteredRowModel = reactTable$1.getFilteredRowModel();
18285
+ tableOptions.getColumnCanGlobalFilter = column => {
18286
+ var _column$columnDef$met;
18287
+ return (_column$columnDef$met = column.columnDef.meta.enableSearch) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : true;
18288
+ };
18160
18289
  }
18161
18290
  // sorting
18162
18291
  if (options.enableSorting) {
@@ -18167,24 +18296,25 @@ function useTable$2(props) {
18167
18296
  tableOptions.getSortedRowModel = reactTable$1.getSortedRowModel();
18168
18297
  }
18169
18298
  }
18299
+ const [defaultSettings, setSettings] = useSettings(props.id, props.defaultSettings, props.onChangeSettings);
18170
18300
  // custom features
18171
18301
  const columnFreezing = useColumnFreezing( // temporarily see if deprecated frozenColumnCount is there
18172
- (_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);
18302
+ (_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);
18173
18303
  const columnOrdering = useColumnOrdering(options);
18174
18304
  const currentRow = useCurrentRow(props.defaultCurrentRowIndex);
18175
18305
  const editing = useEditing(options.enableEditing, props.onSave);
18176
- const fontSize = useFontSize(options.enableFontSize, (_props$defaultSetting4 = props.defaultSettings) === null || _props$defaultSetting4 === void 0 ? void 0 : _props$defaultSetting4.fontSize);
18306
+ const fontSize = useFontSize(options.enableFontSize, defaultSettings.fontSize);
18177
18307
  const hoverState = usePauseHoverState();
18178
- const printing = usePrinting(options.enablePrinting, props.loadAll, (_props$defaultSetting5 = props.defaultSettings) === null || _props$defaultSetting5 === void 0 ? void 0 : _props$defaultSetting5.showWarningWhenPrintingLargeDataset);
18308
+ const printing = usePrinting(options.enablePrinting, props.loadAll, defaultSettings.showWarningWhenPrintingLargeDataset);
18179
18309
  const rowActions = useRowActions$1(props.actionsForRow, props.actionsForRowLength);
18180
18310
  const rowClick = useRowClick(props.onRowClick);
18181
18311
  const rowDrag = useRowDrag(options.enableRowDrag);
18182
18312
  const rowDrop = useRowDrop(options.enableRowDrop, props.onRowDrop);
18183
18313
  const rowGoto = useRowGoto(options.enableRowGoto, props.onRowGoto);
18184
18314
  const rowHeight = useRowHeight(options.enableRowHeight, // temporarily see if deprecated rowDensity is there
18185
- (_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);
18315
+ (_defaultSettings$rowH = defaultSettings.rowHeight) !== null && _defaultSettings$rowH !== void 0 ? _defaultSettings$rowH : defaultSettings === null || defaultSettings === void 0 ? void 0 : defaultSettings.rowDensity);
18186
18316
  const rowSelection = useRowSelection();
18187
- const search = useSearch(options.enableSearch, (_props$defaultSetting9 = props.defaultSettings) === null || _props$defaultSetting9 === void 0 ? void 0 : _props$defaultSetting9.excludeUnmatchedRecordsInSearch, props.loadAll);
18317
+ const search = useSearch(options.enableSearch, defaultSettings.excludeUnmatchedRecordsInSearch, props.loadAll);
18188
18318
  // columns
18189
18319
  const {
18190
18320
  columns,
@@ -18194,13 +18324,13 @@ function useTable$2(props) {
18194
18324
  } = useConvertChildrenToColumns(props, options, editing);
18195
18325
  // built-in features
18196
18326
  const initialState = React__default.useMemo(() => {
18197
- var _props$defaultSetting10, _props$defaultSetting11, _props$defaultSetting12, _props$defaultSetting13, _props$defaultSetting14, _props$defaultSetting15, _props$defaultSetting16;
18327
+ var _defaultSettings$colu2, _defaultSettings$colu3;
18198
18328
  const sanitizeSortedColumns = column => columns.find(definedColumn => definedColumn.id === column.id);
18199
18329
  return {
18200
- columnOrder: ensureOrdering$1(columns, (_props$defaultSetting10 = props.defaultSettings) === null || _props$defaultSetting10 === void 0 ? void 0 : _props$defaultSetting10.columnOrder),
18201
- 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,
18202
- 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,
18203
- 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
18330
+ columnOrder: ensureOrdering$1(columns, defaultSettings.columnOrder),
18331
+ columnSizing: (_defaultSettings$colu2 = defaultSettings.columnSizing) !== null && _defaultSettings$colu2 !== void 0 ? _defaultSettings$colu2 : defaultColumnSizing,
18332
+ columnVisibility: (_defaultSettings$colu3 = defaultSettings.columnVisibility) !== null && _defaultSettings$colu3 !== void 0 ? _defaultSettings$colu3 : defaultColumnVisibility,
18333
+ sorting: defaultSettings.sorting ? defaultSettings.sorting.filter(sanitizeSortedColumns) : defaultSorting
18204
18334
  };
18205
18335
  }, []);
18206
18336
  const table = reactTable$1.useReactTable({
@@ -18234,7 +18364,7 @@ function useTable$2(props) {
18234
18364
  useEditingStateListener(table);
18235
18365
  useFilteringStateListener(table, props.onFilter);
18236
18366
  useRowSelectionListener$1(table, props.onRowSelect);
18237
- useSettingsStateListener$1(table, props.onChangeSettings);
18367
+ useSettingsStateListener$1(table, setSettings);
18238
18368
  useShortcutsListener(table, props.shortcuts);
18239
18369
  useServerLoadingListener(table, props.loadPage);
18240
18370
  useSortingStateListener(table, props.onSort);
@@ -18699,6 +18829,23 @@ function RowHeight(props) {
18699
18829
  }, texts.table3.rowHeight.sizes.extraTall)));
18700
18830
  }
18701
18831
 
18832
+ // augments useEffect to not run debounced
18833
+ function useDebouncedEffect(effect, deps, ms = 200) {
18834
+ const timeoutRef = React__default.useRef();
18835
+ React__default.useEffect(() => {
18836
+ timeoutRef.current = setTimeout(effect, ms);
18837
+ return () => {
18838
+ clearTimeout(timeoutRef.current);
18839
+ };
18840
+ }, deps);
18841
+ }
18842
+
18843
+ var LoadingState;
18844
+ (function (LoadingState) {
18845
+ LoadingState[LoadingState["Incomplete"] = 0] = "Incomplete";
18846
+ LoadingState[LoadingState["Loading"] = 1] = "Loading";
18847
+ LoadingState[LoadingState["Completed"] = 2] = "Completed";
18848
+ })(LoadingState || (LoadingState = {}));
18702
18849
  function Search$3(props) {
18703
18850
  const {
18704
18851
  scrollToIndex,
@@ -18709,6 +18856,8 @@ function Search$3(props) {
18709
18856
  } = useLocalization();
18710
18857
  const ref = React__default.useRef(null);
18711
18858
  const tableMeta = table.options.meta;
18859
+ const [query, setQuery] = React__default.useState(tableMeta.search.query);
18860
+ const [loading, setLoading] = React__default.useState(LoadingState.Incomplete);
18712
18861
  const scrollTo = rowIndex => scrollToIndex(rowIndex, {
18713
18862
  align: 'center'
18714
18863
  });
@@ -18719,32 +18868,38 @@ function Search$3(props) {
18719
18868
  if (firstRowIndex) {
18720
18869
  scrollTo(firstRowIndex);
18721
18870
  }
18722
- }, [tableMeta.search.query, tableMeta.search.excludeUnmatchedResults, table.getRowModel().rows.length, JSON.stringify(table.getState().sorting), JSON.stringify(table.getState().columnVisibility)]);
18723
- const handleSearch = function (query) {
18724
- try {
18725
- function _temp2() {
18726
- if (tableMeta.search.excludeUnmatchedResults) {
18727
- if (value !== null && value !== void 0 && value.length) {
18728
- table.setGlobalFilter(value);
18729
- } else {
18730
- table.resetGlobalFilter();
18731
- }
18732
- }
18733
- tableMeta.search.setQuery(value);
18871
+ }, [tableMeta.search.query, tableMeta.search.excludeUnmatchedResults, table.getRowModel().rows.length, JSON.stringify(table.getState().sorting), JSON.stringify(table.getState().columnVisibility), loading]);
18872
+ // update the table search and filtering on a debounce
18873
+ useDebouncedEffect(() => {
18874
+ tableMeta.search.setQuery(query);
18875
+ if (tableMeta.search.excludeUnmatchedResults) {
18876
+ if (query !== null && query !== void 0 && query.length) {
18877
+ table.setGlobalFilter(query);
18878
+ } else {
18879
+ table.resetGlobalFilter();
18734
18880
  }
18735
- const value = String(query !== null && query !== void 0 ? query : '');
18736
- // load all data if that is possible
18881
+ }
18882
+ }, [query]);
18883
+ const handleFocus = function () {
18884
+ try {
18737
18885
  const _temp = function () {
18738
- if (tableMeta.search.loadAll) {
18886
+ if (tableMeta.search.loadAll && loading === LoadingState.Incomplete) {
18887
+ setLoading(LoadingState.Loading);
18739
18888
  // don't pass the search query because we need all data - not filtered data
18740
- return Promise.resolve(tableMeta.search.loadAll(table.getState().sorting, table.getState().columnFilters, undefined)).then(function () {});
18889
+ return Promise.resolve(tableMeta.search.loadAll(table.getState().sorting, table.getState().columnFilters, undefined)).then(function () {
18890
+ setLoading(LoadingState.Completed);
18891
+ });
18741
18892
  }
18742
18893
  }();
18743
- return Promise.resolve(_temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp));
18894
+ // load all data if that is possible
18895
+ return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
18744
18896
  } catch (e) {
18745
18897
  return Promise.reject(e);
18746
18898
  }
18747
18899
  };
18900
+ const handleChange = query => {
18901
+ setQuery(String(query !== null && query !== void 0 ? query : ''));
18902
+ };
18748
18903
  const handleToggleExcludeUnmatchedResults = enabled => {
18749
18904
  tableMeta.search.toggleExcludeUnmatchedResults(enabled);
18750
18905
  if (enabled) {
@@ -18789,9 +18944,11 @@ function Search$3(props) {
18789
18944
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(SearchInput2, {
18790
18945
  findCurrent: tableMeta.search.currentHighlightColumnIndex !== undefined ? tableMeta.search.currentHighlightColumnIndex + 1 : null,
18791
18946
  findTotal: tableMeta.search.highlightedColumnIndexes ? tableMeta.search.highlightedColumnIndexes.length : null,
18947
+ loading: loading === LoadingState.Loading,
18792
18948
  onClickFindPrevious: handlePreviousResult,
18793
18949
  onClickFindNext: handleNextResult,
18794
- onSearch: handleSearch,
18950
+ onChange: handleChange,
18951
+ onFocus: handleFocus,
18795
18952
  placeholder: texts.table3.search.placeholder,
18796
18953
  settingsContent: settings,
18797
18954
  ref: ref,
@@ -18800,7 +18957,7 @@ function Search$3(props) {
18800
18957
  meta: true,
18801
18958
  shift: false
18802
18959
  },
18803
- value: tableMeta.search.query
18960
+ value: query
18804
18961
  }));
18805
18962
  }
18806
18963
  function resetHighlightedColumnIndexes(enabled, value, table) {
@@ -18812,14 +18969,9 @@ function resetHighlightedColumnIndexes(enabled, value, table) {
18812
18969
  table.getRowModel().rows.forEach((row, rowIndex) => {
18813
18970
  columns.forEach((column, columnIndex) => {
18814
18971
  try {
18815
- var _column$columnDef$met, _format, _format2;
18816
- if ((_column$columnDef$met = column.columnDef.meta) !== null && _column$columnDef$met !== void 0 && _column$columnDef$met.enableSearch && row.original && globalFilterFn$1(
18817
- // if it's a date, format it first
18818
- dateFns.isDate(row.original[column.id]) ? (_format = format(row.original[column.id])) !== null && _format !== void 0 ? _format : '' :
18819
- // if its marked as a date but isn't a date, try to format it
18820
- column.columnDef.meta.dataType === 'datetime' ? (_format2 = format(parseFromISOString(row.original[column.id]))) !== null && _format2 !== void 0 ? _format2 : '' :
18821
- // otherwise just string compare
18822
- String(row.original[column.id]), value)) {
18972
+ var _row$original, _column$columnDef$met;
18973
+ const cellValue = getCellValueAsString((_row$original = row.original) === null || _row$original === void 0 ? void 0 : _row$original[column.id], (_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType);
18974
+ if (cellValue && globalFilterFn$1(cellValue, value)) {
18823
18975
  indexes.push([rowIndex, columnIndex]);
18824
18976
  }
18825
18977
  } catch (e) {
@@ -18869,29 +19021,74 @@ function FilterColumn(props) {
18869
19021
 
18870
19022
  function FilterComparator(props) {
18871
19023
  const {
19024
+ column,
18872
19025
  onChange: handleChange,
18873
19026
  value,
18874
- validComparators,
18875
19027
  ...attributes
18876
19028
  } = props;
18877
19029
  const {
18878
19030
  texts
18879
19031
  } = useLocalization();
19032
+ const validComparators = guessComparatorsBasedOnControl$1(column);
18880
19033
  React__default.useEffect(() => {
18881
- if (value === undefined) {
19034
+ if (value === undefined || !validComparators.includes(value)) {
18882
19035
  handleChange === null || handleChange === void 0 ? void 0 : handleChange(validComparators[0]);
18883
19036
  }
18884
- }, []);
19037
+ }, [validComparators]);
18885
19038
  return /*#__PURE__*/React__default.createElement(Select2, Object.assign({}, attributes, {
18886
19039
  className: "!w-32 flex-shrink-0",
19040
+ disabled: !column,
18887
19041
  onChange: handleChange,
18888
19042
  value: value
18889
- }), validComparators.map(comp => /*#__PURE__*/React__default.createElement(Select2.Option, {
18890
- key: comp,
18891
- value: comp
18892
- }, getComparatorText$1(comp, texts))));
19043
+ }), validComparators.map(comparator => /*#__PURE__*/React__default.createElement(Select2.Option, {
19044
+ key: comparator,
19045
+ value: comparator
19046
+ }, getComparatorText$1(comparator, texts, column))));
18893
19047
  }
18894
- const getComparatorText$1 = (comparator, texts) => {
19048
+ function guessComparatorsBasedOnControl$1(column) {
19049
+ var _column$columnDef$met;
19050
+ const columnMeta = (_column$columnDef$met = column === null || column === void 0 ? void 0 : column.columnDef.meta) !== null && _column$columnDef$met !== void 0 ? _column$columnDef$met : {};
19051
+ if (Array.isArray(columnMeta.filters)) {
19052
+ return columnMeta.filters;
19053
+ }
19054
+ if (typeof columnMeta.control === 'function') {
19055
+ const renderedControl = columnMeta.control({
19056
+ onBlur: () => undefined,
19057
+ onFocus: () => undefined,
19058
+ setValue: () => undefined,
19059
+ value: undefined,
19060
+ disabled: false,
19061
+ readOnly: false,
19062
+ ref: undefined
19063
+ });
19064
+ if ( /*#__PURE__*/React__default.isValidElement(renderedControl)) {
19065
+ const {
19066
+ props,
19067
+ type
19068
+ } = renderedControl;
19069
+ if (type.displayName === 'Select2') {
19070
+ if (props.multiple) {
19071
+ return [Table3FilterComparator.HasAnyOf, Table3FilterComparator.HasAllOf, Table3FilterComparator.IsEqualTo, Table3FilterComparator.HasNoneOf, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19072
+ }
19073
+ return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19074
+ }
19075
+ }
19076
+ }
19077
+ // @ts-expect-error -- we ignore it because it conflicts with Table2 also overridding ColumnMeta
19078
+ if (columnMeta.dataType === 'number') {
19079
+ return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19080
+ }
19081
+ if (columnMeta.control === 'datepicker' || columnMeta.dataType === 'datetime') {
19082
+ return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsBetween, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty, Table3FilterComparator.IsLessThanOrEqualTo, Table3FilterComparator.IsGreaterThanOrEqualTo];
19083
+ }
19084
+ if (columnMeta.control === 'switch') {
19085
+ return [Table3FilterComparator.IsEqualTo];
19086
+ }
19087
+ return [Table3FilterComparator.Contains, Table3FilterComparator.DoesNotContain, Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty];
19088
+ }
19089
+ function getComparatorText$1(comparator, texts, column) {
19090
+ var _column$columnDef, _column$columnDef$met2;
19091
+ 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';
18895
19092
  switch (comparator) {
18896
19093
  case Table3FilterComparator.Contains:
18897
19094
  return texts.table3.filters.comparators.contains;
@@ -18902,23 +19099,61 @@ const getComparatorText$1 = (comparator, texts) => {
18902
19099
  case Table3FilterComparator.IsNotEqualTo:
18903
19100
  return texts.table3.filters.comparators.isNotEqualTo;
18904
19101
  case Table3FilterComparator.IsGreaterThan:
18905
- return texts.table3.filters.comparators.isGreaterThan;
19102
+ return isDate ? texts.table3.filters.comparators.isAfter : texts.table3.filters.comparators.isGreaterThan;
18906
19103
  case Table3FilterComparator.IsLessThan:
18907
- return texts.table3.filters.comparators.isLessThan;
19104
+ return isDate ? texts.table3.filters.comparators.isBefore : texts.table3.filters.comparators.isLessThan;
18908
19105
  case Table3FilterComparator.IsBetween:
18909
19106
  return texts.table3.filters.comparators.isBetween;
18910
- case Table3FilterComparator.IsOneOf:
18911
- return texts.table3.filters.comparators.isOneOf;
18912
- case Table3FilterComparator.IsNoneOf:
18913
- return texts.table3.filters.comparators.isNoneOf;
18914
- case Table3FilterComparator.IsAllOf:
18915
- return texts.table3.filters.comparators.isAllOf;
18916
19107
  case Table3FilterComparator.IsEmpty:
18917
19108
  return texts.table3.filters.comparators.isEmpty;
18918
19109
  case Table3FilterComparator.IsNotEmpty:
18919
19110
  return texts.table3.filters.comparators.isNotEmpty;
19111
+ case Table3FilterComparator.IsLessThanOrEqualTo:
19112
+ return isDate ? texts.table3.filters.comparators.isOnOrBefore : texts.table3.filters.comparators.isLessThanOrEqualTo;
19113
+ case Table3FilterComparator.IsGreaterThanOrEqualTo:
19114
+ return isDate ? texts.table3.filters.comparators.isOnOrAfter : texts.table3.filters.comparators.isGreaterThanOrEqualTo;
19115
+ case Table3FilterComparator.HasAnyOf:
19116
+ return texts.table3.filters.comparators.hasAnyOf;
19117
+ case Table3FilterComparator.HasAllOf:
19118
+ return texts.table3.filters.comparators.hasAllOf;
19119
+ case Table3FilterComparator.HasNoneOf:
19120
+ return texts.table3.filters.comparators.hasNoneOf;
19121
+ default:
19122
+ return '';
18920
19123
  }
18921
- };
19124
+ }
19125
+
19126
+ function Placeholder(props) {
19127
+ const {
19128
+ allColumns,
19129
+ filters,
19130
+ onCreate: handleCreate,
19131
+ onRemove: handleRemove,
19132
+ position
19133
+ } = props;
19134
+ const {
19135
+ texts
19136
+ } = useLocalization();
19137
+ return /*#__PURE__*/React__default.createElement("div", {
19138
+ className: "flex gap-2"
19139
+ }, /*#__PURE__*/React__default.createElement("div", {
19140
+ className: "flex w-14 flex-shrink-0 items-center justify-end pr-2 text-right"
19141
+ }, position > 0 ? texts.table3.filters.conditions.and : texts.table3.filters.conditions.where), /*#__PURE__*/React__default.createElement(FilterColumn, {
19142
+ allColumns: allColumns,
19143
+ filters: filters,
19144
+ onChange: handleCreate,
19145
+ value: null
19146
+ }), /*#__PURE__*/React__default.createElement(FilterComparator, null), /*#__PURE__*/React__default.createElement(Input, {
19147
+ "aria-label": texts.table3.filters.emptyFilter.value,
19148
+ className: "flex-grow",
19149
+ disabled: true,
19150
+ value: texts.table3.filters.emptyFilter.value
19151
+ }), handleRemove ? /*#__PURE__*/React__default.createElement(IconButton, {
19152
+ appearance: "discrete",
19153
+ icon: "close",
19154
+ onClick: handleRemove
19155
+ }) : null);
19156
+ }
18922
19157
 
18923
19158
  function FilterValue(props) {
18924
19159
  const {
@@ -18927,6 +19162,9 @@ function FilterValue(props) {
18927
19162
  onChange: handleChange,
18928
19163
  value
18929
19164
  } = props;
19165
+ const {
19166
+ texts
19167
+ } = useLocalization();
18930
19168
  if (comparator === Table3FilterComparator.IsEmpty || comparator === Table3FilterComparator.IsNotEmpty) {
18931
19169
  return null;
18932
19170
  }
@@ -18934,6 +19172,14 @@ function FilterValue(props) {
18934
19172
  var _column$columnDef$met;
18935
19173
  const fromValue = Array.isArray(value) ? value[0] : undefined;
18936
19174
  const toValue = Array.isArray(value) ? value[1] : undefined;
19175
+ if (column === undefined) {
19176
+ return /*#__PURE__*/React__default.createElement(Input, {
19177
+ "aria-label": texts.table3.filters.emptyFilter.value,
19178
+ className: "flex-grow",
19179
+ disabled: true,
19180
+ value: texts.table3.filters.emptyFilter.value
19181
+ });
19182
+ }
18937
19183
  if (((_column$columnDef$met = column.columnDef.meta) === null || _column$columnDef$met === void 0 ? void 0 : _column$columnDef$met.dataType) === 'datetime') {
18938
19184
  return /*#__PURE__*/React__default.createElement("div", {
18939
19185
  className: "flex flex-grow items-center gap-2"
@@ -18962,6 +19208,7 @@ function FilterValue(props) {
18962
19208
  }));
18963
19209
  }
18964
19210
  return /*#__PURE__*/React__default.createElement(Control$1, {
19211
+ comparator: comparator,
18965
19212
  column: column,
18966
19213
  onChange: handleChange,
18967
19214
  value: value
@@ -18971,12 +19218,18 @@ function Control$1(props) {
18971
19218
  var _column$columnDef$met2, _column$columnDef$met3;
18972
19219
  const {
18973
19220
  column,
19221
+ comparator,
18974
19222
  onChange,
18975
19223
  value,
18976
19224
  ...attributes
18977
19225
  } = props;
18978
19226
  const controlRenderer = (_column$columnDef$met2 = column.columnDef.meta) === null || _column$columnDef$met2 === void 0 ? void 0 : _column$columnDef$met2.control;
18979
19227
  const dataType = (_column$columnDef$met3 = column.columnDef.meta) === null || _column$columnDef$met3 === void 0 ? void 0 : _column$columnDef$met3.dataType;
19228
+ React.useEffect(() => {
19229
+ if (controlRenderer === 'switch') {
19230
+ onChange(false);
19231
+ }
19232
+ }, []);
18980
19233
  if (typeof controlRenderer === 'function') {
18981
19234
  return controlRenderer({
18982
19235
  ...attributes,
@@ -18988,11 +19241,19 @@ function Control$1(props) {
18988
19241
  onChange: event => onChange(event.detail),
18989
19242
  value: value
18990
19243
  }));
18991
- } else if (controlRenderer === 'switch' || dataType === 'boolean') {
19244
+ } else if (controlRenderer === 'switch') {
18992
19245
  return /*#__PURE__*/React__default.createElement(Switch, Object.assign({}, attributes, {
19246
+ className: "m-1.5",
18993
19247
  checked: Boolean(value),
18994
19248
  onChange: onChange
18995
19249
  }));
19250
+ } else if ((controlRenderer === 'input' || controlRenderer === undefined) && dataType === 'number') {
19251
+ return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
19252
+ className: cn(getInputAppearanceClassnames(), 'flex-grow'),
19253
+ type: "number",
19254
+ onChange: event => onChange(event.target.valueAsNumber),
19255
+ value: String(value !== null && value !== void 0 ? value : '')
19256
+ }));
18996
19257
  }
18997
19258
  return /*#__PURE__*/React__default.createElement(Input, Object.assign({}, attributes, {
18998
19259
  className: "flex-grow",
@@ -19060,8 +19321,8 @@ function Filter$1(props) {
19060
19321
  onChange: handleChangeColumn,
19061
19322
  value: id
19062
19323
  }), /*#__PURE__*/React__default.createElement(FilterComparator, {
19324
+ column: column,
19063
19325
  onChange: handleChangeComparator,
19064
- validComparators: guessComparatorsBasedOnControl$1(),
19065
19326
  value: comparator
19066
19327
  }), /*#__PURE__*/React__default.createElement(FilterValue, {
19067
19328
  column: column,
@@ -19075,63 +19336,6 @@ function Filter$1(props) {
19075
19336
  onClick: handleRemove
19076
19337
  }));
19077
19338
  }
19078
- function guessComparatorsBasedOnControl$1(instance, control) {
19079
- if ( /*#__PURE__*/React__default.isValidElement(instance)) {
19080
- const {
19081
- props,
19082
- type
19083
- } = instance;
19084
- if (type.displayName === 'Select2') {
19085
- if (props.multiple) {
19086
- return [Table3FilterComparator.IsOneOf, Table3FilterComparator.IsNoneOf, Table3FilterComparator.IsAllOf];
19087
- }
19088
- return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo];
19089
- }
19090
- }
19091
- switch (control) {
19092
- case 'datepicker':
19093
- return [Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween];
19094
- case 'switch':
19095
- return [Table3FilterComparator.IsEqualTo];
19096
- default:
19097
- return [Table3FilterComparator.Contains, Table3FilterComparator.DoesNotContain, Table3FilterComparator.IsEqualTo, Table3FilterComparator.IsNotEqualTo, Table3FilterComparator.IsEmpty, Table3FilterComparator.IsNotEmpty, Table3FilterComparator.IsGreaterThan, Table3FilterComparator.IsLessThan, Table3FilterComparator.IsBetween];
19098
- }
19099
- }
19100
-
19101
- function Placeholder(props) {
19102
- const {
19103
- allColumns,
19104
- filters,
19105
- onCreate: handleCreate,
19106
- onRemove: handleRemove,
19107
- position
19108
- } = props;
19109
- const {
19110
- texts
19111
- } = useLocalization();
19112
- return /*#__PURE__*/React__default.createElement("div", {
19113
- className: "flex gap-2"
19114
- }, /*#__PURE__*/React__default.createElement("div", {
19115
- className: "flex w-14 flex-shrink-0 items-center justify-end pr-2 text-right"
19116
- }, position > 0 ? texts.table3.filters.conditions.and : texts.table3.filters.conditions.where), /*#__PURE__*/React__default.createElement(FilterColumn, {
19117
- allColumns: allColumns,
19118
- filters: filters,
19119
- onChange: handleCreate,
19120
- value: null
19121
- }), /*#__PURE__*/React__default.createElement(FilterComparator, {
19122
- disabled: true,
19123
- validComparators: guessComparatorsBasedOnControl$1()
19124
- }), /*#__PURE__*/React__default.createElement(Input, {
19125
- "aria-label": texts.table3.filters.emptyFilter.value,
19126
- className: "flex-grow",
19127
- disabled: true,
19128
- value: texts.table3.filters.emptyFilter.value
19129
- }), handleRemove ? /*#__PURE__*/React__default.createElement(IconButton, {
19130
- appearance: "discrete",
19131
- icon: "close",
19132
- onClick: handleRemove
19133
- }) : null);
19134
- }
19135
19339
 
19136
19340
  function sortByHeader(a, b) {
19137
19341
  var _a$columnDef$meta, _a$columnDef$meta$hea, _a$columnDef$meta$hea2, _b$columnDef$meta;
@@ -19195,7 +19399,9 @@ function Filters(props) {
19195
19399
  //
19196
19400
  const handleApply = () => {
19197
19401
  table.setColumnFilters(filters.filter(f => {
19198
- if (f.value.comparator === Table3FilterComparator.IsEmpty || f.value.comparator === Table3FilterComparator.IsNotEmpty) {
19402
+ var _allColumns$find$colu;
19403
+ 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;
19404
+ if (f.value.comparator === Table3FilterComparator.IsEmpty || f.value.comparator === Table3FilterComparator.IsNotEmpty || controlRenderer === 'switch') {
19199
19405
  return true;
19200
19406
  }
19201
19407
  return !!f.value.value;
@@ -19400,6 +19606,11 @@ const PRINT_STYLES = `
19400
19606
  width: auto !important;
19401
19607
  }
19402
19608
 
19609
+ #root {
19610
+ /* chrome sometimes crops the bottom content of page and this padding will make sure that we see the whole content*/
19611
+ padding-bottom: 20px;
19612
+ }
19613
+
19403
19614
  [role="table"] {
19404
19615
  border-width: 0 !important;
19405
19616
  overflow-y: hidden !important;
@@ -19480,30 +19691,9 @@ function PrintIFrame({
19480
19691
  }) {
19481
19692
  const [contentRef, setContentRef] = React__default.useState(null);
19482
19693
  const [mountNode, setMountNode] = React__default.useState(null);
19694
+ const isFirefoxBrowser = React__default.useMemo(() => navigator.userAgent.toLowerCase().includes('firefox'), []);
19483
19695
  const iframeWindow = contentRef === null || contentRef === void 0 ? void 0 : contentRef.contentWindow;
19484
19696
  const stylesReady = useParentStylesheets(iframeWindow);
19485
- // Adds print events to the iframe window.
19486
- React__default.useEffect(() => {
19487
- if (iframeWindow === null || iframeWindow === undefined) {
19488
- return;
19489
- }
19490
- // Add print events to the window
19491
- if (onAfterPrint) {
19492
- iframeWindow.addEventListener('afterprint', onAfterPrint);
19493
- }
19494
- if (onBeforePrint) {
19495
- iframeWindow.addEventListener('beforeprint', onBeforePrint);
19496
- }
19497
- return () => {
19498
- // Remove print events from the window
19499
- if (onAfterPrint) {
19500
- iframeWindow.removeEventListener('afterprint', onAfterPrint);
19501
- }
19502
- if (onBeforePrint) {
19503
- iframeWindow.removeEventListener('beforeprint', onBeforePrint);
19504
- }
19505
- };
19506
- }, [iframeWindow]);
19507
19697
  // Calls print method when table has loaded in the iframe.
19508
19698
  React__default.useEffect(() => {
19509
19699
  let intervalId;
@@ -19514,7 +19704,8 @@ function PrintIFrame({
19514
19704
  intervalId = setInterval(function () {
19515
19705
  try {
19516
19706
  const tableWrapper = mountNode;
19517
- const hasTableRendered = !!tableWrapper.querySelector('[role="table"]');
19707
+ const table = tableWrapper.querySelector('[role="table"]');
19708
+ const hasTableRendered = !!table;
19518
19709
  if (hasTableRendered && intervalId) {
19519
19710
  var _contentRef$contentWi;
19520
19711
  clearInterval(intervalId);
@@ -19523,6 +19714,12 @@ function PrintIFrame({
19523
19714
  // Bug - Even though onBeforePrint is called before printing, the execution doesn't finish before
19524
19715
  // the print dialog shows up, which results into having a visible loading toast.
19525
19716
  onBeforePrint === null || onBeforePrint === void 0 ? void 0 : onBeforePrint();
19717
+ // By adding height to the tableWrapper, we make sure the content below absolutely positioned table
19718
+ // doesn't hide
19719
+ if (isFirefoxBrowser) {
19720
+ const tableHeight = `${table.offsetHeight}px`;
19721
+ tableWrapper.style.height = tableHeight;
19722
+ }
19526
19723
  contentRef === null || contentRef === void 0 ? void 0 : (_contentRef$contentWi = contentRef.contentWindow) === null || _contentRef$contentWi === void 0 ? void 0 : _contentRef$contentWi.print();
19527
19724
  // Calling the onAfterPrint method here as a fallback to do the cleanup, as certain browsers,
19528
19725
  // like Safari, do not trigger the beforeprint or afterprint events when a confirmation dialog
@@ -19561,6 +19758,11 @@ function PrintIFrame({
19561
19758
  tableWrapper.setAttribute('data-role', 'table-wrapper');
19562
19759
  // Adding h-fit class makes sure that table is rendered with the whole content.
19563
19760
  tableWrapper.classList.add('h-fit');
19761
+ tableWrapper.classList.add('[&>[role="table"]]:!h-fit');
19762
+ if (isFirefoxBrowser) {
19763
+ // Fix for firefox bug which adds page-long whitespace between page's top content and table
19764
+ tableWrapper.classList.add('[&>[role="table"]]:!absolute');
19765
+ }
19564
19766
  // Safari print preview assigns no width to the table when w-screen class is used.
19565
19767
  // By assigning table a big static width and hiding the horizontal scrollbar, the table on chrome
19566
19768
  // and safari will always take full page width.
@@ -19607,10 +19809,12 @@ function PrintIFrame({
19607
19809
  };
19608
19810
  // -top-60 -left-60 styles make sure that iframe is added outside of the viewport
19609
19811
  return /*#__PURE__*/React__default.createElement("iframe", {
19610
- ref: setContentRef,
19611
19812
  className: "fixed -left-60 -top-60 !h-0 !w-0",
19612
19813
  frameBorder: "0",
19613
- scrolling: "no"
19814
+ ref: setContentRef,
19815
+ scrolling: "no",
19816
+ // Temporary fix to support printing in firefox: Find another solution while upgrading React
19817
+ src: "javascript:void(0);"
19614
19818
  }, mountNode && stylesReady ? /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React__default.createElement(Table3, Object.assign({}, printTableProps)), mountNode) : null);
19615
19819
  }
19616
19820
 
@@ -19840,7 +20044,10 @@ function Toolbar(props) {
19840
20044
  }) : null, tableMeta.printing.isEnabled ? /*#__PURE__*/React__default.createElement(PrintButton, {
19841
20045
  table: table,
19842
20046
  tableProps: tableProps
19843
- }) : null, right, isMoreVisible(props) ? /*#__PURE__*/React__default.createElement(IconButton, {
20047
+ }) : null, right, isMoreVisible(props) ? /*#__PURE__*/React__default.createElement(Tooltip, {
20048
+ title: texts.table3.otherOptions.tooltip
20049
+ }, /*#__PURE__*/React__default.createElement(IconButton, {
20050
+ "aria-label": texts.table3.otherOptions.tooltip,
19844
20051
  icon: "more",
19845
20052
  menu: menuProps => /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, {
19846
20053
  align: "end"
@@ -19855,7 +20062,7 @@ function Toolbar(props) {
19855
20062
  table: table
19856
20063
  })
19857
20064
  }, texts.table3.fontSize.tooltip) : null))
19858
- }) : null, tableMeta.search.isEnabled ? /*#__PURE__*/React__default.createElement(Search$3, {
20065
+ })) : null, tableMeta.search.isEnabled ? /*#__PURE__*/React__default.createElement(Search$3, {
19859
20066
  scrollToIndex: scrollToIndex,
19860
20067
  table: table
19861
20068
  }) : null));
@@ -20123,16 +20330,19 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20123
20330
  } = useTableRenderStrategy$1(props, table, internalRef);
20124
20331
  const tableMeta = table.options.meta;
20125
20332
  const state = table.getState();
20126
- const handleKeyDown = event => {
20127
- if (isEventTriggeredOnInteractiveElement(event.target)) {
20128
- return;
20129
- }
20130
- tableMeta.hoverState.handleKeyDown(event);
20131
- tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex);
20132
- tableMeta.rowClick.handleKeyDown(event, table);
20133
- tableMeta.rowSelection.handleKeyDown(event, table);
20134
- tableMeta.editing.handleKeyDown(event, internalRef);
20135
- };
20333
+ React__default.useEffect(() => {
20334
+ const handleKeyDown = event => {
20335
+ tableMeta.hoverState.handleKeyDown(event);
20336
+ tableMeta.currentRow.handleKeyDown(event, table.getRowModel().rows.length, scrollToIndex);
20337
+ tableMeta.rowClick.handleKeyDown(event, table);
20338
+ tableMeta.rowSelection.handleKeyDown(event, table);
20339
+ tableMeta.editing.handleKeyDown(event);
20340
+ };
20341
+ document.addEventListener('keydown', handleKeyDown);
20342
+ return () => {
20343
+ document.removeEventListener('keydown', handleKeyDown);
20344
+ };
20345
+ }, []);
20136
20346
  const handleBlur = event => {
20137
20347
  tableMeta.editing.handleBlur(event);
20138
20348
  };
@@ -20144,7 +20354,7 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20144
20354
  return Promise.reject(e);
20145
20355
  }
20146
20356
  };
20147
- const className = cn('border-grey-300 relative grid h-full w-full flex-grow overflow-auto rounded border bg-white scroll-mt-[41px]', 'focus:yt-focus focus-within:yt-focus', '[&[data-resizing="true"]]:select-none', {
20357
+ const className = cn('border-grey-300 relative grid h-full w-full flex-grow overflow-auto rounded border bg-white scroll-mt-[41px]', '[&[data-resizing="true"]]:select-none', {
20148
20358
  'text-xs': tableMeta.fontSize.size === 'small',
20149
20359
  'text-sm': tableMeta.fontSize.size === 'medium',
20150
20360
  'text-base': tableMeta.fontSize.size === 'large'
@@ -20183,12 +20393,10 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20183
20393
  "data-resizing": !!state.columnSizingInfo.isResizingColumn,
20184
20394
  "data-taco": "table2",
20185
20395
  onBlur: handleBlur,
20186
- onKeyDown: handleKeyDown,
20187
20396
  onScroll: handleScroll,
20188
20397
  ref: internalRef,
20189
20398
  role: "table",
20190
- style: style,
20191
- tabIndex: 0
20399
+ style: style
20192
20400
  }, isServerLoadingAndNotReady ? null : /*#__PURE__*/React__default.createElement("div", {
20193
20401
  className: "group/header contents",
20194
20402
  "data-taco": "table2-header",
@@ -20226,9 +20434,10 @@ const Table$1 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20226
20434
  }, EmptyState ? /*#__PURE__*/React__default.createElement(EmptyState, null) : null)));
20227
20435
  });
20228
20436
  const Table3 = /*#__PURE__*/fixedForwardRef(function Table3(props, ref) {
20437
+ const stringifiedChildren = String(props.children);
20229
20438
  // we force a remount (using key) when the child columns change because there are too many places to add children as an effect
20230
20439
  // this is cheaper from a complexity perspective, and probably performance wise as well
20231
- const key = React__default.useMemo(() => String('tableKey_' + String(props.children)), [props.children]);
20440
+ const key = React__default.useMemo(() => String('tableKey_' + stringifiedChildren), [stringifiedChildren]);
20232
20441
  return /*#__PURE__*/React__default.createElement(Table$1, Object.assign({}, props, {
20233
20442
  key: key,
20234
20443
  ref: ref
@@ -21273,6 +21482,7 @@ exports.Table = Table;
21273
21482
  exports.Table2 = Table2;
21274
21483
  exports.Table3 = Table3;
21275
21484
  exports.Tabs = Tabs;
21485
+ exports.TacoContext = TacoContext;
21276
21486
  exports.Tag = Tag$1;
21277
21487
  exports.Textarea = Textarea;
21278
21488
  exports.Title = Title$3;