@pingux/astro 2.133.0 → 2.134.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/lib/cjs/components/Box/Box.styles.d.ts +4 -0
  2. package/lib/cjs/components/Box/Box.styles.js +5 -0
  3. package/lib/cjs/components/IconButton/IconButton.styles.d.ts +41 -0
  4. package/lib/cjs/components/IconButton/IconButton.styles.js +14 -1
  5. package/lib/cjs/components/ListBox/Option.js +11 -2
  6. package/lib/cjs/components/SelectField/SelectField.stories.d.ts +1 -0
  7. package/lib/cjs/components/SelectField/SelectField.stories.js +22 -2
  8. package/lib/cjs/components/SelectField/SelectField.test.js +11 -0
  9. package/lib/cjs/components/SelectFieldBase/SelectFieldBase.js +48 -27
  10. package/lib/cjs/components/SelectFieldBase/SelectFieldBase.test.js +26 -0
  11. package/lib/cjs/components/TableBase/TableBase.js +36 -6
  12. package/lib/cjs/components/TableBase/TableBase.stories.d.ts +14 -0
  13. package/lib/cjs/components/TableBase/TableBase.stories.js +193 -6
  14. package/lib/cjs/components/TableBase/TableBase.styles.d.ts +17 -1
  15. package/lib/cjs/components/TableBase/TableBase.styles.js +11 -2
  16. package/lib/cjs/components/TableBase/TableBase.test.js +267 -0
  17. package/lib/cjs/components/TableBase/stories/NextGenTableBase.js +2 -4
  18. package/lib/cjs/hooks/useGetTheme/useGetTheme.d.ts +2 -0
  19. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/customProperties/icons.d.ts +2 -0
  20. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/customProperties/index.d.ts +2 -0
  21. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.d.ts +0 -5
  22. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/variants.js +0 -5
  23. package/lib/cjs/styles/themes/astro/customProperties/icons.d.ts +2 -0
  24. package/lib/cjs/styles/themes/astro/customProperties/icons.js +1 -1
  25. package/lib/cjs/styles/themes/astro/customProperties/index.d.ts +2 -0
  26. package/lib/cjs/styles/themes/next-gen/customProperties/icons.d.ts +2 -0
  27. package/lib/cjs/styles/themes/next-gen/customProperties/icons.js +1 -1
  28. package/lib/cjs/styles/themes/next-gen/customProperties/index.d.ts +2 -0
  29. package/lib/cjs/styles/themes/next-gen/forms.d.ts +22 -0
  30. package/lib/cjs/styles/themes/next-gen/forms.js +12 -0
  31. package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +58 -6
  32. package/lib/cjs/styles/themes/next-gen/variants/button.d.ts +38 -2
  33. package/lib/cjs/styles/themes/next-gen/variants/button.js +29 -19
  34. package/lib/cjs/styles/themes/next-gen/variants/cards.d.ts +0 -1
  35. package/lib/cjs/styles/themes/next-gen/variants/cards.js +1 -3
  36. package/lib/cjs/styles/themes/next-gen/variants/tableBase.d.ts +4 -2
  37. package/lib/cjs/styles/themes/next-gen/variants/tableBase.js +4 -2
  38. package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +9 -3
  39. package/lib/cjs/styles/themes/next-gen/variants/variants.js +7 -2
  40. package/lib/cjs/types/selectField.d.ts +5 -0
  41. package/lib/components/Box/Box.styles.js +5 -0
  42. package/lib/components/IconButton/IconButton.styles.js +14 -1
  43. package/lib/components/ListBox/Option.js +12 -3
  44. package/lib/components/SelectField/SelectField.stories.js +19 -0
  45. package/lib/components/SelectField/SelectField.test.js +11 -0
  46. package/lib/components/SelectFieldBase/SelectFieldBase.js +41 -20
  47. package/lib/components/SelectFieldBase/SelectFieldBase.test.js +26 -0
  48. package/lib/components/TableBase/TableBase.js +38 -8
  49. package/lib/components/TableBase/TableBase.stories.js +195 -8
  50. package/lib/components/TableBase/TableBase.styles.js +11 -2
  51. package/lib/components/TableBase/TableBase.test.js +267 -1
  52. package/lib/components/TableBase/stories/NextGenTableBase.js +3 -5
  53. package/lib/styles/themeOverrides/nextGenDarkMode/variants/variants.js +0 -5
  54. package/lib/styles/themes/astro/customProperties/icons.js +1 -1
  55. package/lib/styles/themes/next-gen/customProperties/icons.js +1 -1
  56. package/lib/styles/themes/next-gen/forms.js +12 -0
  57. package/lib/styles/themes/next-gen/variants/button.js +29 -19
  58. package/lib/styles/themes/next-gen/variants/cards.js +1 -3
  59. package/lib/styles/themes/next-gen/variants/tableBase.js +4 -2
  60. package/lib/styles/themes/next-gen/variants/variants.js +7 -2
  61. package/package.json +1 -1
@@ -5,6 +5,7 @@ declare const _default: {
5
5
  indeterminateCheckboxIcon: {
6
6
  width: string;
7
7
  height: string;
8
+ borderRadius: string;
8
9
  '& rect[id="indeterminate-checkbox-icon-wrapper"]': {
9
10
  fill: string;
10
11
  stroke: string;
@@ -15,6 +16,9 @@ declare const _default: {
15
16
  stroke: string;
16
17
  };
17
18
  };
19
+ '&.is-focused': {
20
+ boxShadow: string;
21
+ };
18
22
  };
19
23
  };
20
24
  export default _default;
@@ -5,12 +5,14 @@ _Object$defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = void 0;
8
+ var _colors = require("../../styles/colors");
8
9
  var base = {
9
10
  display: 'flex'
10
11
  };
11
12
  var indeterminateCheckboxIcon = {
12
13
  width: '24px',
13
14
  height: '24px',
15
+ borderRadius: '4px',
14
16
  '& rect[id="indeterminate-checkbox-icon-wrapper"]': {
15
17
  fill: 'active',
16
18
  stroke: 'active'
@@ -20,6 +22,9 @@ var indeterminateCheckboxIcon = {
20
22
  fill: 'neutral.80',
21
23
  stroke: 'neutral.80'
22
24
  }
25
+ },
26
+ '&.is-focused': {
27
+ boxShadow: "inset 0px 0px 0px 1px ".concat(_colors.focus)
23
28
  }
24
29
  };
25
30
  var _default = {
@@ -722,5 +722,46 @@ declare const _default: {
722
722
  cursor: string;
723
723
  p: string;
724
724
  };
725
+ clearSelectionButton: {
726
+ width: string;
727
+ height: string;
728
+ position: string;
729
+ right: string;
730
+ top: string;
731
+ bg: string;
732
+ '.is-float-label &': {
733
+ top: string;
734
+ };
735
+ justifyContent: string;
736
+ appearance: string;
737
+ alignItems: string;
738
+ alignSelf: string;
739
+ display: string;
740
+ flexGrow: number;
741
+ flexShrink: number;
742
+ borderRadius: string;
743
+ cursor: string;
744
+ p: string;
745
+ path: {
746
+ fill: string;
747
+ };
748
+ outline: string;
749
+ '&.is-focused': {
750
+ outline: string;
751
+ outlineColor: string;
752
+ outlineOffset: string;
753
+ };
754
+ '&.is-hovered': {
755
+ bg: string;
756
+ boxShadow: string;
757
+ };
758
+ '&.is-pressed': {
759
+ path: {
760
+ fill: string;
761
+ };
762
+ bg: string;
763
+ boxShadow: string;
764
+ };
765
+ };
725
766
  };
726
767
  export default _default;
@@ -14,6 +14,7 @@ _Object$defineProperty(exports, "__esModule", {
14
14
  });
15
15
  exports.square = exports["default"] = exports.base = void 0;
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
+ var _tShirtSizes = _interopRequireDefault(require("../../styles/themes/astro/customProperties/tShirtSizes"));
17
18
  var _Badge = require("../Badge/Badge.styles");
18
19
  var _Buttons = require("../Button/Buttons.styles");
19
20
  var _CollapsiblePanel = require("../CollapsiblePanel/CollapsiblePanel.styles");
@@ -147,6 +148,17 @@ var searchClearButton = _objectSpread(_objectSpread({}, base), {}, {
147
148
  position: 'absolute',
148
149
  right: 10
149
150
  });
151
+ var clearSelectionButton = _objectSpread(_objectSpread({}, base), {}, {
152
+ width: _tShirtSizes["default"].md,
153
+ height: _tShirtSizes["default"].md,
154
+ position: 'absolute',
155
+ right: '15px',
156
+ top: '7px',
157
+ bg: 'white',
158
+ '.is-float-label &': {
159
+ top: '9px'
160
+ }
161
+ });
150
162
  var filter = _objectSpread(_objectSpread({}, base), {}, {
151
163
  bg: 'white',
152
164
  border: '1px solid',
@@ -196,6 +208,7 @@ var _default = {
196
208
  applicationPortal: applicationPortal,
197
209
  applicationPortalPinned: applicationPortalPinned,
198
210
  searchClearButton: searchClearButton,
199
- filter: filter
211
+ filter: filter,
212
+ clearSelectionButton: clearSelectionButton
200
213
  };
201
214
  exports["default"] = _default;
@@ -19,6 +19,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/he
19
19
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
20
20
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
21
21
  var _react = _interopRequireWildcard(require("react"));
22
+ var _CheckIcon = _interopRequireDefault(require("@pingux/mdi-react/CheckIcon"));
22
23
  var _CircleSmallIcon = _interopRequireDefault(require("@pingux/mdi-react/CircleSmallIcon"));
23
24
  var _listbox = require("@react-aria/listbox");
24
25
  var _MultivaluesContext = require("../../context/MultivaluesContext");
@@ -99,6 +100,8 @@ var Option = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
99
100
  state.selectionManager.setFocusedKey(item.key);
100
101
  }
101
102
  };
103
+ var _useGetTheme = (0, _hooks.useGetTheme)(),
104
+ isOnyx = _useGetTheme.themeState.isOnyx;
102
105
  var _useStatusClasses = (0, _hooks.useStatusClasses)(null, {
103
106
  isDisabled: isDisabled || isSeparator,
104
107
  isFocused: focused,
@@ -139,12 +142,18 @@ var Option = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
139
142
  mr: "xs",
140
143
  className: classNames,
141
144
  variant: "listBox.checkboxIcon"
142
- }) : isSelected && (0, _react2.jsx)(_Icon["default"], {
145
+ }) : isSelected && !isOnyx && (0, _react2.jsx)(_Icon["default"], {
143
146
  icon: _CircleSmallIcon["default"],
144
147
  title: {
145
148
  name: 'Circle Small Icon'
146
149
  }
147
- }), rendered);
150
+ }), rendered, isSelected && isOnyx && (0, _react2.jsx)(_Icon["default"], {
151
+ icon: _CheckIcon["default"],
152
+ title: {
153
+ name: 'Check Icon'
154
+ },
155
+ color: "green-500"
156
+ }));
148
157
  });
149
158
  var _default = Option;
150
159
  exports["default"] = _default;
@@ -57,3 +57,4 @@ export declare const DynamicItems: {
57
57
  export declare const AsyncLoading: () => React.JSX.Element;
58
58
  export declare const WithoutStatusIndicator: (args: any) => React.JSX.Element;
59
59
  export declare const WithHelpHint: (args: any) => React.JSX.Element;
60
+ export declare const WithClearButton: (args: any) => React.JSX.Element;
@@ -21,7 +21,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
21
21
  _Object$defineProperty(exports, "__esModule", {
22
22
  value: true
23
23
  });
24
- exports["default"] = exports.WithoutStatusIndicator = exports.WithSlots = exports.WithSections = exports.WithNoneOption = exports.WithHelpHint = exports.WithCustomHeight = exports.NoOptionsAvailable = exports.HelperText = exports.FloatLabel = exports.DynamicItems = exports.DisabledOptions = exports.DisabledField = exports.Default = exports.Controlled = exports.AsyncLoading = void 0;
24
+ exports["default"] = exports.WithoutStatusIndicator = exports.WithSlots = exports.WithSections = exports.WithNoneOption = exports.WithHelpHint = exports.WithCustomHeight = exports.WithClearButton = exports.NoOptionsAvailable = exports.HelperText = exports.FloatLabel = exports.DynamicItems = exports.DisabledOptions = exports.DisabledField = exports.Default = exports.Controlled = exports.AsyncLoading = void 0;
25
25
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
26
26
  var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/values"));
27
27
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
@@ -484,4 +484,24 @@ var WithHelpHint = function WithHelpHint(args) {
484
484
  key: "yellow"
485
485
  }, "Yellow")));
486
486
  };
487
- exports.WithHelpHint = WithHelpHint;
487
+ exports.WithHelpHint = WithHelpHint;
488
+ var WithClearButton = function WithClearButton(args) {
489
+ var _useState5 = (0, _react.useState)('red'),
490
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
491
+ selectedKey = _useState6[0],
492
+ setSelectedKey = _useState6[1];
493
+ return (0, _react2.jsx)(_reactAria.OverlayProvider, null, (0, _react2.jsx)(_index.SelectField, (0, _extends2["default"])({}, args, {
494
+ width: "100%",
495
+ label: "What's your favorite color?",
496
+ hasClearButton: true,
497
+ selectedKey: selectedKey,
498
+ onSelectionChange: setSelectedKey
499
+ }), (0, _react2.jsx)(_index.Item, {
500
+ key: "red"
501
+ }, "Red"), (0, _react2.jsx)(_index.Item, {
502
+ key: "blue"
503
+ }, "Blue"), (0, _react2.jsx)(_index.Item, {
504
+ key: "yellow"
505
+ }, "Yellow")));
506
+ };
507
+ exports.WithClearButton = WithClearButton;
@@ -194,4 +194,15 @@ test('should show hintText text if prop is passed', function () {
194
194
  _testWrapper.fireEvent.mouseMove(helpHintButton);
195
195
  _testWrapper.fireEvent.mouseEnter(helpHintButton);
196
196
  expect(_testWrapper.screen.getByText(hintText)).toBeInTheDocument();
197
+ });
198
+ test('should have clear button if hasClearButton prop is true', function () {
199
+ getComponent({
200
+ selectedKey: 'a',
201
+ hasClearButton: true,
202
+ clearButtonProps: {
203
+ 'data-testid': 'clear-button'
204
+ }
205
+ });
206
+ var clearButton = _testWrapper.screen.getByTestId('clear-button');
207
+ expect(clearButton).toBeInTheDocument();
197
208
  });
@@ -19,21 +19,16 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/he
19
19
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
20
20
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
21
21
  var _react = _interopRequireWildcard(require("react"));
22
+ var _CloseIcon = _interopRequireDefault(require("@pingux/mdi-react/CloseIcon"));
22
23
  var _uuid = require("uuid");
24
+ var _ = require("../..");
23
25
  var _useGetTheme2 = _interopRequireDefault(require("../../hooks/useGetTheme"));
24
26
  var _labelModes = require("../../utils/devUtils/constants/labelModes");
25
27
  var _pendoID = require("../../utils/devUtils/constants/pendoID");
26
28
  var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
27
- var _Box = _interopRequireDefault(require("../Box"));
28
- var _Button = _interopRequireDefault(require("../Button"));
29
- var _FieldHelperText = _interopRequireDefault(require("../FieldHelperText"));
30
- var _Icon = _interopRequireDefault(require("../Icon"));
31
- var _Label = _interopRequireDefault(require("../Label"));
32
- var _Loader = _interopRequireDefault(require("../Loader"));
33
- var _Text = _interopRequireDefault(require("../Text"));
34
29
  var _HiddenSelect = require("./HiddenSelect");
35
30
  var _react2 = require("@emotion/react");
36
- var _excluded = ["columnStyleProps", "defaultText", "fieldContainerProps", "fieldControlInputProps", "fieldControlWrapperProps", "fieldLabelProps", "helperText", "isLoadingInitial", "isDisabled", "label", "labelMode", "name", "overlay", "placeholder", "slots", "state", "status", "trigger", "triggerProps", "triggerRef", "valueProps", "selectProps"];
31
+ var _excluded = ["columnStyleProps", "defaultText", "fieldContainerProps", "fieldControlInputProps", "fieldControlWrapperProps", "fieldLabelProps", "helperText", "isLoadingInitial", "isDisabled", "label", "labelMode", "name", "overlay", "placeholder", "slots", "state", "status", "trigger", "triggerProps", "triggerRef", "valueProps", "selectProps", "hasClearButton", "clearButtonProps", "onClear"];
37
32
  /**
38
33
  * Select field (dropdown) that does not rely on native browser or mobile implementations.
39
34
  *
@@ -68,6 +63,9 @@ var SelectFieldBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
68
63
  triggerRef = props.triggerRef,
69
64
  valueProps = props.valueProps,
70
65
  selectProps = props.selectProps,
66
+ hasClearButton = props.hasClearButton,
67
+ clearButtonProps = props.clearButtonProps,
68
+ onClear = props.onClear,
71
69
  others = (0, _objectWithoutProperties2["default"])(props, _excluded);
72
70
  var _getAriaAttributeProp = (0, _ariaAttributes.getAriaAttributeProps)(others),
73
71
  ariaProps = _getAriaAttributeProp.ariaProps;
@@ -78,44 +76,67 @@ var SelectFieldBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
78
76
  var helperTextId = (0, _react.useMemo)(function () {
79
77
  return (0, _uuid.v4)();
80
78
  }, []);
81
- var defaultTrigger = (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({}, fieldControlWrapperProps, {
79
+ var handleOnClear = function handleOnClear() {
80
+ if (onClear) {
81
+ onClear();
82
+ }
83
+ state.setSelectedKey(null);
84
+ };
85
+ var buttonRendered = !(hasClearButton && state.selectedKey) && (0, _react2.jsx)(_.Box, {
86
+ as: "span",
87
+ "aria-hidden": "true",
88
+ variant: "forms.select.arrow"
89
+ }, (0, _react2.jsx)(_.Icon, {
90
+ icon: state.isOpen ? MenuUp : MenuDown,
91
+ title: {
92
+ name: 'Menu down'
93
+ },
94
+ size: "md"
95
+ }));
96
+ var clearButton = hasClearButton && state.selectedKey && (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
97
+ tabIndex: 0,
98
+ as: "span",
99
+ role: "button",
100
+ "aria-label": "Clear selection",
101
+ variant: "clearSelectionButton",
102
+ onPress: handleOnClear,
103
+ color: "text.secondary"
104
+ }, clearButtonProps), (0, _react2.jsx)(_.Icon, {
105
+ icon: _CloseIcon["default"],
106
+ title: {
107
+ name: 'Clear selection Icon'
108
+ }
109
+ }));
110
+ var defaultTrigger = (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
111
+ isRow: true
112
+ }, fieldControlWrapperProps, {
82
113
  variant: "forms.input.fieldControlWrapper"
83
- }), (0, _react2.jsx)(_Button["default"], (0, _extends2["default"])({
114
+ }), (0, _react2.jsx)(_.Button, (0, _extends2["default"])({
84
115
  className: fieldControlInputProps.className,
85
116
  ref: triggerRef,
86
117
  variant: "forms.select"
87
118
  }, triggerProps, ariaProps, {
88
119
  "aria-describedby": helperText && helperTextId
89
- }), slots === null || slots === void 0 ? void 0 : slots.leftOfData, (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
120
+ }), slots === null || slots === void 0 ? void 0 : slots.leftOfData, (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
90
121
  as: "span",
91
122
  variant: "forms.select.currentValue"
92
- }, valueProps), state.selectedItem ? state.selectedItem.rendered : (0, _react2.jsx)(_Text["default"], {
123
+ }, valueProps), state.selectedItem ? state.selectedItem.rendered : (0, _react2.jsx)(_.Text, {
93
124
  variant: "placeholder"
94
- }, labelMode === _labelModes.modes.FLOAT ? '' : placeholder || defaultText)), isLoadingInitial && (0, _react2.jsx)(_Loader["default"], {
125
+ }, labelMode === _labelModes.modes.FLOAT ? '' : placeholder || defaultText)), isLoadingInitial && (0, _react2.jsx)(_.Loader, {
95
126
  variant: "loader.withinInput"
96
- }), (0, _react2.jsx)(_Box["default"], {
97
- as: "span",
98
- "aria-hidden": "true",
99
- variant: "forms.select.arrow"
100
- }, (0, _react2.jsx)(_Icon["default"], {
101
- icon: state.isOpen ? MenuUp : MenuDown,
102
- title: {
103
- name: 'Menu down'
104
- },
105
- size: "md"
106
- }))), slots === null || slots === void 0 ? void 0 : slots.inContainer);
107
- return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
127
+ }), buttonRendered), clearButton, slots === null || slots === void 0 ? void 0 : slots.inContainer);
128
+ return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
108
129
  ref: ref,
109
130
  variant: "forms.input.fieldContainer"
110
131
  }, (0, _pendoID.getPendoID)('SelectField'), fieldContainerProps, {
111
132
  sx: _objectSpread(_objectSpread({}, columnStyleProps === null || columnStyleProps === void 0 ? void 0 : columnStyleProps.sx), fieldContainerProps === null || fieldContainerProps === void 0 ? void 0 : fieldContainerProps.sx)
112
- }), (0, _react2.jsx)(_Label["default"], fieldLabelProps, label), (0, _react2.jsx)(_HiddenSelect.HiddenSelect, (0, _extends2["default"])({
133
+ }), (0, _react2.jsx)(_.Label, fieldLabelProps, label), (0, _react2.jsx)(_HiddenSelect.HiddenSelect, (0, _extends2["default"])({
113
134
  state: state,
114
135
  triggerRef: triggerRef,
115
136
  label: label,
116
137
  name: name,
117
138
  isDisabled: isDisabled
118
- }, selectProps)), trigger || defaultTrigger, overlay, helperText && (0, _react2.jsx)(_FieldHelperText["default"], {
139
+ }, selectProps)), trigger || defaultTrigger, overlay, helperText && (0, _react2.jsx)(_.FieldHelperText, {
119
140
  status: status,
120
141
  id: helperTextId
121
142
  }, helperText));
@@ -51,6 +51,7 @@ var defaultProps = {
51
51
  value: testValue,
52
52
  items: items
53
53
  };
54
+ var onClear = jest.fn();
54
55
  var SelectFieldWrapper = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
55
56
  var _useSelectField = (0, _hooks.useSelectField)(props, ref),
56
57
  selectFieldProps = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_useSelectField), _useSelectField));
@@ -436,4 +437,29 @@ test('popover closes on button blur', function () {
436
437
  }, item.name);
437
438
  });
438
439
  }
440
+ });
441
+ test('should have clear button if hasClearButton prop is true', function () {
442
+ getComponent({
443
+ selectedKey: 'a',
444
+ hasClearButton: true,
445
+ clearButtonProps: {
446
+ 'data-testid': 'clear-button'
447
+ }
448
+ });
449
+ var clearButton = _testWrapper.screen.getByTestId('clear-button');
450
+ expect(clearButton).toBeInTheDocument();
451
+ });
452
+ test('should have call onClear function', function () {
453
+ getComponent({
454
+ selectedKey: 'a',
455
+ hasClearButton: true,
456
+ clearButtonProps: {
457
+ 'data-testid': 'clear-button'
458
+ },
459
+ onClear: onClear
460
+ });
461
+ var clearButton = _testWrapper.screen.getByTestId('clear-button');
462
+ expect(clearButton).toBeInTheDocument();
463
+ _userEvent["default"].click(clearButton);
464
+ expect(onClear).toHaveBeenCalledTimes(1);
439
465
  });
@@ -63,7 +63,6 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
63
63
  var bodyRef = (0, _react.useRef)(null);
64
64
  var collection = state.collection;
65
65
  var _useTable = (0, _table.useTable)(_objectSpread(_objectSpread({}, props), {}, {
66
- 'aria-describedby': props['aria-describedby'] || 'table-caption',
67
66
  scrollRef: bodyRef
68
67
  }), state, tableRef),
69
68
  gridProps = _useTable.gridProps;
@@ -105,8 +104,7 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
105
104
  as: "caption",
106
105
  display: "table-caption",
107
106
  variant: "tableBase.caption",
108
- textAlign: "left",
109
- id: props['aria-describedby'] || 'table-caption'
107
+ textAlign: "left"
110
108
  }, caption), (0, _react2.jsx)(TableRowGroup, {
111
109
  type: "thead",
112
110
  hasCaption: !!caption,
@@ -133,7 +131,18 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
133
131
  })), (0, _react2.jsx)(TableRowGroup, (0, _extends2["default"])({
134
132
  ref: bodyRef,
135
133
  type: "tbody"
136
- }, tableBodyProps), (0, _map["default"])(_context3 = (0, _from["default"])(collection)).call(_context3, function (row) {
134
+ }, tableBodyProps), collection.size === 0 && (0, _react2.jsx)(_.Box, {
135
+ role: "row",
136
+ key: "loading",
137
+ "data-testid": "loading",
138
+ as: "tr",
139
+ alignItems: "center",
140
+ justifyContent: "center",
141
+ px: "lg",
142
+ py: "md"
143
+ }, (0, _react2.jsx)(_.Loader, {
144
+ color: "active"
145
+ })), (0, _map["default"])(_context3 = (0, _from["default"])(collection)).call(_context3, function (row) {
137
146
  var _context4;
138
147
  return (0, _react2.jsx)(TableRow, {
139
148
  key: row.key,
@@ -195,6 +204,7 @@ function TableHeaderRow(props) {
195
204
  }), children);
196
205
  }
197
206
  function TableColumnHeader(props) {
207
+ var _column$props;
198
208
  var column = props.column,
199
209
  state = props.state,
200
210
  className = props.className,
@@ -207,19 +217,37 @@ function TableColumnHeader(props) {
207
217
  var _useFocusRing = (0, _focus.useFocusRing)(),
208
218
  isFocusVisible = _useFocusRing.isFocusVisible,
209
219
  focusProps = _useFocusRing.focusProps;
220
+ var allowsSorting = (_column$props = column.props) === null || _column$props === void 0 ? void 0 : _column$props.allowsSorting;
221
+ var _useGetTheme = (0, _hooks.useGetTheme)(),
222
+ icons = _useGetTheme.icons;
223
+ var Ascending = icons.Ascending,
224
+ Descending = icons.Descending;
225
+ var sortDescriptor = state.sortDescriptor;
226
+ var arrowIcon = (sortDescriptor === null || sortDescriptor === void 0 ? void 0 : sortDescriptor.column) === column.key && (sortDescriptor === null || sortDescriptor === void 0 ? void 0 : sortDescriptor.direction) === 'ascending' ? Ascending : Descending;
227
+ var sortIcon = (0, _react2.jsx)(_.Icon, {
228
+ icon: arrowIcon,
229
+ size: "xs",
230
+ "aria-hidden": "true",
231
+ title: {
232
+ name: (sortDescriptor === null || sortDescriptor === void 0 ? void 0 : sortDescriptor.direction) === 'ascending' ? 'Sort ascending' : 'Sort descending'
233
+ }
234
+ });
210
235
  var _useStatusClasses2 = (0, _hooks.useStatusClasses)(className, {
211
236
  isFocused: isFocusVisible
212
237
  }),
213
238
  classNames = _useStatusClasses2.classNames;
214
239
  return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
240
+ isRow: true,
215
241
  ref: ref,
216
242
  as: "th",
217
243
  variant: "tableBase.head",
218
244
  className: classNames,
245
+ alignItems: "center",
219
246
  sx: _objectSpread({
247
+ gap: 'sm',
220
248
  width: layoutState === null || layoutState === void 0 ? void 0 : layoutState.getColumnWidth(column.key)
221
249
  }, column.props.sx)
222
- }, (0, _utils.mergeProps)(columnHeaderProps, focusProps, column.props)), column.rendered);
250
+ }, (0, _utils.mergeProps)(columnHeaderProps, focusProps, column.props)), column.rendered, allowsSorting && sortIcon);
223
251
  }
224
252
  function TableRow(props) {
225
253
  var item = props.item,
@@ -232,6 +260,7 @@ function TableRow(props) {
232
260
  }, state, ref),
233
261
  rowProps = _useTableRow.rowProps;
234
262
  var isSelected = state.selectionManager.isSelected(item.key);
263
+ var isDisabled = state.disabledKeys.has(item.key);
235
264
  var _useFocusRing2 = (0, _focus.useFocusRing)(),
236
265
  isFocusVisible = _useFocusRing2.isFocusVisible,
237
266
  focusProps = _useFocusRing2.focusProps;
@@ -247,7 +276,8 @@ function TableRow(props) {
247
276
  isSelected: isSelected,
248
277
  isHovered: isHovered,
249
278
  isPressed: isPressed,
250
- isFocused: isFocusVisible
279
+ isFocused: isFocusVisible,
280
+ isDisabled: isDisabled
251
281
  }),
252
282
  classNames = _useStatusClasses3.classNames;
253
283
  return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { StoryFn } from '@storybook/react';
2
3
  import { TableBaseProps } from '../../types/tableBase';
3
4
  declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, import("@storybook/types").Args>;
@@ -6,3 +7,16 @@ export declare const Default: StoryFn<TableBaseProps<object>>;
6
7
  export declare const MultiSelection: StoryFn<TableBaseProps<object>>;
7
8
  export declare const WithStickyHeader: StoryFn<TableBaseProps<object>>;
8
9
  export declare const WithPagination: StoryFn<TableBaseProps<object>>;
10
+ export declare const DynamicWithSorting: {
11
+ (): React.JSX.Element;
12
+ parameters: {
13
+ a11y: {
14
+ config: {
15
+ rules: {
16
+ id: string;
17
+ enabled: boolean;
18
+ }[];
19
+ };
20
+ };
21
+ };
22
+ };