@economic/taco 2.3.0 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
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;