@carbon/ibm-products 2.26.0 → 2.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/css/index-full-carbon.css +517 -56
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +32 -14
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +517 -56
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +1 -1
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +488 -48
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +1 -1
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/BigNumbers/BigNumbers.d.ts +11 -0
  18. package/es/components/BigNumbers/BigNumbers.js +238 -0
  19. package/es/components/BigNumbers/constants.d.ts +13 -0
  20. package/es/components/BigNumbers/constants.js +67 -0
  21. package/es/components/BigNumbers/index.d.ts +1 -0
  22. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  23. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -2
  24. package/es/components/DataSpreadsheet/utils/checkForHoldingKey.d.ts +1 -0
  25. package/es/components/DataSpreadsheet/utils/checkForHoldingKey.js +17 -0
  26. package/es/components/Datagrid/Datagrid/Datagrid.js +9 -2
  27. package/es/components/Datagrid/Datagrid/DatagridContent.d.ts +3 -1
  28. package/es/components/Datagrid/Datagrid/DatagridContent.js +6 -2
  29. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +8 -4
  30. package/es/components/Datagrid/Datagrid/DatagridToolbar.d.ts +10 -1
  31. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +21 -4
  32. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +32 -9
  33. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.d.ts +3 -1
  34. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -1
  35. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +35 -3
  36. package/es/components/Datagrid/Datagrid/addons/stateReducer.js +1 -1
  37. package/es/components/Datagrid/useSelectAllToggle.js +5 -3
  38. package/es/components/SidePanel/SidePanel.js +13 -6
  39. package/es/components/SidePanel/motion/variants.d.ts +39 -12
  40. package/es/components/SidePanel/motion/variants.js +42 -11
  41. package/es/components/StringFormatter/StringFormatter.d.ts +6 -0
  42. package/es/components/StringFormatter/StringFormatter.js +79 -0
  43. package/es/components/StringFormatter/index.d.ts +1 -0
  44. package/es/components/StringFormatter/utils/enums.d.ts +14 -0
  45. package/es/components/StringFormatter/utils/enums.js +23 -0
  46. package/es/components/Tearsheet/TearsheetShell.js +10 -4
  47. package/es/components/UserAvatar/UserAvatar.js +58 -42
  48. package/es/components/index.d.ts +2 -0
  49. package/es/global/js/hooks/index.d.ts +1 -0
  50. package/es/global/js/hooks/useIsomorphicEffect.d.ts +2 -0
  51. package/es/global/js/hooks/useIsomorphicEffect.js +14 -0
  52. package/es/global/js/package-settings.d.ts +2 -0
  53. package/es/global/js/package-settings.js +2 -0
  54. package/es/index.js +2 -0
  55. package/es/settings.d.ts +2 -0
  56. package/lib/components/BigNumbers/BigNumbers.d.ts +11 -0
  57. package/lib/components/BigNumbers/BigNumbers.js +244 -0
  58. package/lib/components/BigNumbers/constants.d.ts +13 -0
  59. package/lib/components/BigNumbers/constants.js +76 -0
  60. package/lib/components/BigNumbers/index.d.ts +1 -0
  61. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  62. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -2
  63. package/lib/components/DataSpreadsheet/utils/checkForHoldingKey.d.ts +1 -0
  64. package/lib/components/DataSpreadsheet/utils/checkForHoldingKey.js +21 -0
  65. package/lib/components/Datagrid/Datagrid/Datagrid.js +9 -2
  66. package/lib/components/Datagrid/Datagrid/DatagridContent.d.ts +3 -1
  67. package/lib/components/Datagrid/Datagrid/DatagridContent.js +6 -2
  68. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +8 -4
  69. package/lib/components/Datagrid/Datagrid/DatagridToolbar.d.ts +10 -1
  70. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +20 -3
  71. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +30 -7
  72. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.d.ts +3 -1
  73. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -0
  74. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +33 -1
  75. package/lib/components/Datagrid/Datagrid/addons/stateReducer.js +1 -1
  76. package/lib/components/Datagrid/useSelectAllToggle.js +4 -2
  77. package/lib/components/SidePanel/SidePanel.js +11 -4
  78. package/lib/components/SidePanel/motion/variants.d.ts +39 -12
  79. package/lib/components/SidePanel/motion/variants.js +42 -10
  80. package/lib/components/StringFormatter/StringFormatter.d.ts +6 -0
  81. package/lib/components/StringFormatter/StringFormatter.js +85 -0
  82. package/lib/components/StringFormatter/index.d.ts +1 -0
  83. package/lib/components/StringFormatter/utils/enums.d.ts +14 -0
  84. package/lib/components/StringFormatter/utils/enums.js +27 -0
  85. package/lib/components/Tearsheet/TearsheetShell.js +10 -4
  86. package/lib/components/UserAvatar/UserAvatar.js +58 -42
  87. package/lib/components/index.d.ts +2 -0
  88. package/lib/global/js/hooks/index.d.ts +1 -0
  89. package/lib/global/js/hooks/useIsomorphicEffect.d.ts +2 -0
  90. package/lib/global/js/hooks/useIsomorphicEffect.js +18 -0
  91. package/lib/global/js/package-settings.d.ts +2 -0
  92. package/lib/global/js/package-settings.js +2 -0
  93. package/lib/index.js +10 -0
  94. package/lib/settings.d.ts +2 -0
  95. package/package.json +7 -7
  96. package/scss/components/BigNumbers/_big-numbers.scss +151 -0
  97. package/scss/components/BigNumbers/_carbon-imports.scss +11 -0
  98. package/scss/components/BigNumbers/_index-with-carbon.scss +9 -0
  99. package/scss/components/BigNumbers/_index.scss +8 -0
  100. package/scss/components/FullPageError/_full-page-error.scss +2 -2
  101. package/scss/components/SidePanel/_side-panel.scss +1 -1
  102. package/scss/components/StringFormatter/_carbon-imports.scss +10 -0
  103. package/scss/components/StringFormatter/_index-with-carbon.scss +9 -0
  104. package/scss/components/StringFormatter/_index.scss +8 -0
  105. package/scss/components/StringFormatter/_string-formatter.scss +97 -0
  106. package/scss/components/Tearsheet/_tearsheet.scss +34 -2
  107. package/scss/components/UserAvatar/_user-avatar.scss +40 -0
  108. package/scss/components/_index-with-carbon.scss +2 -0
  109. package/scss/components/_index.scss +2 -0
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ var checkForHoldingKey = function checkForHoldingKey(event, key) {
13
+ // possible key inputs: altKey,ctrlKey,metaKey,shiftKey
14
+ if (key == 'cmd') {
15
+ return event.metaKey || event.ctrlKey;
16
+ } else {
17
+ return event[key];
18
+ }
19
+ };
20
+
21
+ exports.checkForHoldingKey = checkForHoldingKey;
@@ -24,7 +24,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
24
24
 
25
25
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
26
 
27
- var _excluded = ["datagridState", "title"];
27
+ var _excluded = ["datagridState", "title", "ariaToolbarLabel"];
28
28
  var blockClass = "".concat(settings.pkg.prefix, "--datagrid");
29
29
  var componentName = 'Datagrid';
30
30
 
@@ -34,6 +34,7 @@ var componentName = 'Datagrid';
34
34
  exports.Datagrid = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
35
35
  var datagridState = _ref.datagridState,
36
36
  title = _ref.title,
37
+ ariaToolbarLabel = _ref.ariaToolbarLabel,
37
38
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
38
39
  if (!datagridState) {
39
40
  pconsole["default"].warn('Datagrid was not passed datagridState which is required to render this component.');
@@ -49,7 +50,8 @@ exports.Datagrid = /*#__PURE__*/React__default["default"].forwardRef(function (_
49
50
  var rows = DatagridPagination && datagridState.page || datagridState.rows;
50
51
  var props = {
51
52
  title: title,
52
- datagridState: datagridState
53
+ datagridState: datagridState,
54
+ ariaToolbarLabel: ariaToolbarLabel
53
55
  };
54
56
  return /*#__PURE__*/React__default["default"].createElement(FilterProvider.FilterProvider, {
55
57
  filters: filters,
@@ -70,6 +72,11 @@ exports.Datagrid = settings.pkg.checkComponentEnabled(exports.Datagrid, componen
70
72
  // is used in preference to relying on function.name.
71
73
  exports.Datagrid.displayName = componentName;
72
74
  exports.Datagrid.propTypes = {
75
+ /**
76
+ * Specify a label to be read by screen readers on the container node
77
+ * 'aria-label' of the TableToolbar component.
78
+ */
79
+ ariaToolbarLabel: index$1["default"].string,
73
80
  /**
74
81
  * The data grid state, much of it being supplied by the useDatagrid hook
75
82
  */
@@ -1,9 +1,11 @@
1
- export function DatagridContent({ datagridState, title }: {
1
+ export function DatagridContent({ datagridState, title, ariaToolbarLabel }: {
2
2
  datagridState: any;
3
3
  title: any;
4
+ ariaToolbarLabel: any;
4
5
  }): import("react/jsx-runtime").JSX.Element;
5
6
  export namespace DatagridContent {
6
7
  namespace propTypes {
8
+ let ariaToolbarLabel: PropTypes.Requireable<string>;
7
9
  let datagridState: PropTypes.Requireable<PropTypes.InferProps<{
8
10
  getTableProps: PropTypes.Requireable<(...args: any[]) => any>;
9
11
  getFilterFlyoutProps: PropTypes.Requireable<(...args: any[]) => any>;
@@ -38,7 +38,8 @@ var blockClass = "".concat(settings.pkg.prefix, "--datagrid");
38
38
  var gcClass = "".concat(blockClass, "__grid-container");
39
39
  var DatagridContent = function DatagridContent(_ref) {
40
40
  var datagridState = _ref.datagridState,
41
- title = _ref.title;
41
+ title = _ref.title,
42
+ ariaToolbarLabel = _ref.ariaToolbarLabel;
42
43
  var _useContext = React.useContext(InlineEditContext.InlineEditContext),
43
44
  inlineEditState = _useContext.state,
44
45
  dispatch = _useContext.dispatch;
@@ -159,7 +160,9 @@ var DatagridContent = function DatagridContent(_ref) {
159
160
  className: index["default"]("".concat(gcClass), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(gcClass, "-active"), gridActive), "".concat(gcClass, "-active--without-toolbar"), withInlineEdit && !DatagridActions), "".concat(gcClass, "-inline-edit"), withInlineEdit), "".concat(blockClass, "__full-height"), withVirtualScroll || fullHeightDatagrid), "".concat(blockClass, "__with-pagination"), DatagridPagination), "".concat(blockClass, "__dense-header"), useDenseHeader)),
160
161
  title: gridTitle,
161
162
  description: gridDescription
162
- }, /*#__PURE__*/React__default["default"].createElement(DatagridToolbar["default"], datagridState), /*#__PURE__*/React__default["default"].createElement("div", {
163
+ }, /*#__PURE__*/React__default["default"].createElement(DatagridToolbar["default"], _rollupPluginBabelHelpers["extends"]({}, datagridState, {
164
+ ariaToolbarLabel: ariaToolbarLabel
165
+ })), /*#__PURE__*/React__default["default"].createElement("div", {
163
166
  className: index["default"]("".concat(blockClass, "__table-container"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__table-container--filter-open"), panelOpen)),
164
167
  ref: gridAreaRef
165
168
  }, (filterProps === null || filterProps === void 0 ? void 0 : filterProps.variation) === 'panel' && /*#__PURE__*/React__default["default"].createElement(FilterPanel["default"], _rollupPluginBabelHelpers["extends"]({}, getFilterFlyoutProps(), {
@@ -179,6 +182,7 @@ var DatagridContent = function DatagridContent(_ref) {
179
182
  }));
180
183
  };
181
184
  DatagridContent.propTypes = {
185
+ ariaToolbarLabel: index$1["default"].string,
182
186
  datagridState: index$1["default"].shape({
183
187
  getTableProps: index$1["default"].func,
184
188
  getFilterFlyoutProps: index$1["default"].func,
@@ -50,7 +50,8 @@ var ResizeHeader = function ResizeHeader(_ref) {
50
50
  minWidth = _ref.minWidth,
51
51
  dispatch = _ref.dispatch,
52
52
  onColResizeEnd = _ref.onColResizeEnd,
53
- resizerAriaLabel = _ref.resizerAriaLabel;
53
+ resizerAriaLabel = _ref.resizerAriaLabel,
54
+ isFetching = _ref.isFetching;
54
55
  // eslint-disable-next-line no-unused-vars
55
56
  resizerProps.role;
56
57
  var headerProps = _rollupPluginBabelHelpers.objectWithoutProperties(resizerProps, _excluded);
@@ -88,7 +89,8 @@ var ResizeHeader = function ResizeHeader(_ref) {
88
89
  className: "".concat(blockClass, "__col-resizer-range"),
89
90
  type: "range",
90
91
  defaultValue: originalCol.width,
91
- "aria-label": resizerAriaLabel || 'Resize column'
92
+ "aria-label": resizerAriaLabel || 'Resize column',
93
+ disabled: isFetching
92
94
  })), /*#__PURE__*/React__default["default"].createElement("span", {
93
95
  className: "".concat(blockClass, "__col-resize-indicator")
94
96
  }));
@@ -96,7 +98,8 @@ var ResizeHeader = function ResizeHeader(_ref) {
96
98
  var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
97
99
  var resizerAriaLabel = datagridState.resizerAriaLabel,
98
100
  isTableSortable = datagridState.isTableSortable,
99
- rows = datagridState.rows;
101
+ rows = datagridState.rows,
102
+ isFetching = datagridState.isFetching;
100
103
  // Used to measure the height of the table and uses that value
101
104
  // to display a vertical line to indicate the column you are resizing
102
105
  React.useEffect(function () {
@@ -197,7 +200,8 @@ var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
197
200
  minWidth: minWidth,
198
201
  dispatch: dispatch,
199
202
  onColResizeEnd: onColResizeEnd,
200
- resizerAriaLabel: resizerAriaLabel
203
+ resizerAriaLabel: resizerAriaLabel,
204
+ isFetching: isFetching
201
205
  }));
202
206
  }));
203
207
  };
@@ -1,2 +1,11 @@
1
1
  export default DatagridToolbar;
2
- declare function DatagridToolbar(datagridState: any): import("react/jsx-runtime").JSX.Element | null;
2
+ declare function DatagridToolbar({ ariaToolbarLabel, ...datagridState }: {
3
+ [x: string]: any;
4
+ ariaToolbarLabel: any;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
6
+ declare namespace DatagridToolbar {
7
+ namespace propTypes {
8
+ let ariaToolbarLabel: PropTypes.Requireable<string>;
9
+ }
10
+ }
11
+ import PropTypes from 'prop-types';
@@ -11,6 +11,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
13
13
  var React = require('react');
14
+ var index$1 = require('../../../node_modules/prop-types/index.js');
14
15
  var react = require('@carbon/react');
15
16
  var useResizeObserver = require('../../../global/js/hooks/useResizeObserver.js');
16
17
  var settings = require('../../../settings.js');
@@ -21,6 +22,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
21
22
 
22
23
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
24
 
25
+ var _excluded = ["ariaToolbarLabel"];
24
26
  var blockClass = "".concat(settings.pkg.prefix, "--datagrid__table-toolbar");
25
27
  var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridState, width, ref) {
26
28
  var _useState = React.useState(false),
@@ -115,6 +117,12 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
115
117
  }
116
118
  };
117
119
  var onCancelHandler = function onCancelHandler() {
120
+ stateReducer.handleSelectAllRowData({
121
+ dispatch: dispatch,
122
+ rows: [],
123
+ getRowId: getRowId,
124
+ isChecked: false
125
+ });
118
126
  toggleAllRowsSelected(false);
119
127
  setGlobalFilter(null);
120
128
  };
@@ -152,7 +160,9 @@ var DatagridBatchActionsToolbar = function DatagridBatchActionsToolbar(datagridS
152
160
  }
153
161
  })), renderBatchActionOverflow());
154
162
  };
155
- var DatagridToolbar = function DatagridToolbar(datagridState) {
163
+ var DatagridToolbar = function DatagridToolbar(_ref2) {
164
+ var ariaToolbarLabel = _ref2.ariaToolbarLabel,
165
+ datagridState = _rollupPluginBabelHelpers.objectWithoutProperties(_ref2, _excluded);
156
166
  var ref = React.useRef(null);
157
167
  var _useResizeObserver = useResizeObserver.useResizeObserver(ref),
158
168
  width = _useResizeObserver.width;
@@ -164,9 +174,16 @@ var DatagridToolbar = function DatagridToolbar(datagridState) {
164
174
  return batchActions && DatagridActions ? /*#__PURE__*/React__default["default"].createElement("div", {
165
175
  ref: ref,
166
176
  className: index["default"]([blockClass, "".concat(blockClass, "--").concat(getRowHeight)])
167
- }, /*#__PURE__*/React__default["default"].createElement(react.TableToolbar, null, DatagridActions && /*#__PURE__*/React__default["default"].createElement(DatagridActions, datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/React__default["default"].createElement("div", {
177
+ }, /*#__PURE__*/React__default["default"].createElement(react.TableToolbar, {
178
+ "aria-label": ariaToolbarLabel
179
+ }, DatagridActions && /*#__PURE__*/React__default["default"].createElement(DatagridActions, datagridState), DatagridBatchActionsToolbar && DatagridBatchActionsToolbar(datagridState, width, ref))) : DatagridActions ? /*#__PURE__*/React__default["default"].createElement("div", {
168
180
  className: blockClass
169
- }, /*#__PURE__*/React__default["default"].createElement(react.TableToolbar, null, DatagridActions && /*#__PURE__*/React__default["default"].createElement(DatagridActions, datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
181
+ }, /*#__PURE__*/React__default["default"].createElement(react.TableToolbar, {
182
+ "aria-label": ariaToolbarLabel
183
+ }, DatagridActions && /*#__PURE__*/React__default["default"].createElement(DatagridActions, datagridState), DatagridBatchActions && DatagridBatchActions(datagridState))) : null;
184
+ };
185
+ DatagridToolbar.propTypes = {
186
+ ariaToolbarLabel: index$1["default"].string
170
187
  };
171
188
  var DatagridToolbar$1 = DatagridToolbar;
172
189
 
@@ -147,22 +147,45 @@ var prepareFiltersForTags = function prepareFiltersForTags(filters, renderDateLa
147
147
  });
148
148
  return tags;
149
149
  };
150
- var FilterProvider = function FilterProvider(_ref3) {
151
- var children = _ref3.children,
152
- filters = _ref3.filters,
153
- filterProps = _ref3.filterProps;
154
- var _ref4 = filterProps || {},
155
- renderDateLabel = _ref4.renderDateLabel;
150
+ var filteringReducer = function filteringReducer(state, action) {
151
+ switch (action.type) {
152
+ case constants.SAVED_FILTERS:
153
+ {
154
+ var _ref3 = action.payload || {},
155
+ savedFilters = _ref3.savedFilters;
156
+ return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, state), {}, {
157
+ savedFilters: savedFilters
158
+ });
159
+ }
160
+ default:
161
+ return state;
162
+ }
163
+ };
164
+ var FilterProvider = function FilterProvider(_ref4) {
165
+ var children = _ref4.children,
166
+ filters = _ref4.filters,
167
+ filterProps = _ref4.filterProps;
168
+ var _ref5 = filterProps || {},
169
+ renderDateLabel = _ref5.renderDateLabel;
156
170
  var filterTags = prepareFiltersForTags(filters, renderDateLabel);
157
171
  var _useState = React.useState(false),
158
172
  _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
159
173
  panelOpen = _useState2[0],
160
174
  setPanelOpen = _useState2[1];
175
+ var initialState = {
176
+ savedFilters: []
177
+ };
178
+ var _useReducer = React.useReducer(filteringReducer, initialState),
179
+ _useReducer2 = _rollupPluginBabelHelpers.slicedToArray(_useReducer, 2),
180
+ state = _useReducer2[0],
181
+ dispatch = _useReducer2[1];
161
182
  var value = {
162
183
  filterTags: filterTags,
163
184
  EventEmitter: EventEmitter,
164
185
  panelOpen: panelOpen,
165
- setPanelOpen: setPanelOpen
186
+ setPanelOpen: setPanelOpen,
187
+ state: state,
188
+ dispatch: dispatch
166
189
  };
167
190
  return /*#__PURE__*/React__default["default"].createElement(FilterContext.Provider, {
168
191
  value: value
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2022, 2022
2
+ * Copyright IBM Corp. 2022, 2024
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -22,3 +22,5 @@ export const CLEAR_SINGLE_FILTER: "clearSingleFilter";
22
22
  /** Constants for panel dimensions */
23
23
  export const PANEL_WIDTH: 320;
24
24
  export const ACTION_SET_HEIGHT: 64;
25
+ /** Constants for local reducer */
26
+ export const SAVED_FILTERS: "savedFilters";
@@ -32,6 +32,9 @@ var CLEAR_SINGLE_FILTER = 'clearSingleFilter';
32
32
  var PANEL_WIDTH = 320;
33
33
  var ACTION_SET_HEIGHT = 64;
34
34
 
35
+ /** Constants for local reducer */
36
+ var SAVED_FILTERS = 'savedFilters';
37
+
35
38
  exports.ACTION_SET_HEIGHT = ACTION_SET_HEIGHT;
36
39
  exports.BATCH = BATCH;
37
40
  exports.CHECKBOX = CHECKBOX;
@@ -45,3 +48,4 @@ exports.NUMBER = NUMBER;
45
48
  exports.PANEL = PANEL;
46
49
  exports.PANEL_WIDTH = PANEL_WIDTH;
47
50
  exports.RADIO = RADIO;
51
+ exports.SAVED_FILTERS = SAVED_FILTERS;
@@ -15,6 +15,7 @@ var react = require('@carbon/react');
15
15
  var React = require('react');
16
16
  var OverflowCheckboxes = require('../OverflowCheckboxes.js');
17
17
  var utils = require('../utils.js');
18
+ var FilterProvider = require('../FilterProvider.js');
18
19
  var handleCheckboxChange = require('../handleCheckboxChange.js');
19
20
  var usePreviousValue = require('../../../../../../global/js/hooks/usePreviousValue.js');
20
21
 
@@ -33,6 +34,10 @@ var useFilters = function useFilters(_ref) {
33
34
  panelOpen = _ref.panelOpen,
34
35
  autoHideFilters = _ref.autoHideFilters,
35
36
  isFetching = _ref.isFetching;
37
+ var _useContext = React.useContext(FilterProvider.FilterContext),
38
+ state = _useContext.state,
39
+ localDispatch = _useContext.dispatch;
40
+ var savedFilters = state.savedFilters;
36
41
  /** State */
37
42
  var _useState = React.useState(utils.getInitialStateFromFilters(filters, variation, reactTableFiltersState)),
38
43
  _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
@@ -130,6 +135,16 @@ var useFilters = function useFilters(_ref) {
130
135
  filterCopy.splice(index, 1);
131
136
  }
132
137
  setFiltersObjectArray(filterCopy);
138
+
139
+ // Dispatch action from local filter context to track filters in order
140
+ // to keep history if `isFetching` becomes true. If so, react-table
141
+ // clears all filter history
142
+ localDispatch({
143
+ type: constants.SAVED_FILTERS,
144
+ payload: {
145
+ savedFilters: filterCopy
146
+ }
147
+ });
133
148
  if (updateMethod === constants.INSTANT) {
134
149
  setAllFilters(filterCopy);
135
150
  }
@@ -320,10 +335,27 @@ var useFilters = function useFilters(_ref) {
320
335
  setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
321
336
  setFetchingReset(true);
322
337
  }
338
+ if (isFetching && fetchingReset) {
339
+ var cleanFilters = function cleanFilters(originalFilterState) {
340
+ var copy = _rollupPluginBabelHelpers.objectSpread2({}, originalFilterState);
341
+ var updatedFilters = savedFilters.map(function (f) {
342
+ if (Object.hasOwn(copy, f.id)) {
343
+ copy[f.id] = f;
344
+ return copy;
345
+ }
346
+ return copy;
347
+ });
348
+ return updatedFilters[0];
349
+ };
350
+ setFiltersObjectArray(savedFilters);
351
+ var filterStateCopy = cleanFilters(filtersState);
352
+ setFiltersState(filterStateCopy);
353
+ }
323
354
  if (!isFetching) {
324
355
  setFetchingReset(false);
325
356
  }
326
- }, [isFetching, reactTableFiltersState, setAllFilters, fetchingReset]);
357
+ // eslint-disable-next-line react-hooks/exhaustive-deps
358
+ }, [isFetching, reactTableFiltersState, setAllFilters, fetchingReset, savedFilters, filtersObjectArray]);
327
359
  var cancel = function cancel() {
328
360
  // Reverting to previous filters only applies when using batch actions
329
361
  if (updateMethod === constants.BATCH) {
@@ -120,7 +120,7 @@ var stateReducer = function stateReducer(newState, action) {
120
120
  var dataWithRemovedRow = Object.fromEntries(Object.entries(newData).filter(function (_ref5) {
121
121
  var _ref6 = _rollupPluginBabelHelpers.slicedToArray(_ref5, 1),
122
122
  key = _ref6[0];
123
- return parseInt(key) !== parseInt(rowData.index);
123
+ return parseInt(key) !== parseInt(_getRowId(rowData.original, rowData.index));
124
124
  }));
125
125
  return _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, newState), {}, {
126
126
  selectedRowData: dataWithRemovedRow
@@ -15,6 +15,7 @@ var index = require('../../node_modules/classnames/index.js');
15
15
  var commonColumnIds = require('./common-column-ids.js');
16
16
  var DatagridSelectAllWithToggle = require('./Datagrid/DatagridSelectAllWithToggle.js');
17
17
  var settings = require('../../settings.js');
18
+ var useIsomorphicEffect = require('../../global/js/hooks/useIsomorphicEffect.js');
18
19
 
19
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
21
 
@@ -44,11 +45,12 @@ var useSelectAllWithToggleComponent = function useSelectAllWithToggleComponent(h
44
45
  hooks.useInstance.push(useInstance);
45
46
  };
46
47
  var useAddClassNameToSelectRow = function useAddClassNameToSelectRow(hooks) {
47
- var _useState = React.useState(typeof window !== 'undefined' ? window.innerWidth : ''),
48
+ var _useState = React.useState(0),
48
49
  _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
49
50
  windowSize = _useState2[0],
50
51
  setWindowSize = _useState2[1];
51
- React.useLayoutEffect(function () {
52
+ useIsomorphicEffect.useIsomorphicEffect(function () {
53
+ setWindowSize(window.innerWidth);
52
54
  function updateSize() {
53
55
  setWindowSize(window.innerWidth);
54
56
  }
@@ -25,8 +25,8 @@ var react = require('@carbon/react');
25
25
  var icons = require('@carbon/react/icons');
26
26
  var variants = require('./motion/variants.js');
27
27
  var pconsole = require('../../global/js/utils/pconsole.js');
28
- var usePreviousValue = require('../../global/js/hooks/usePreviousValue.js');
29
28
  var ActionSet = require('../ActionSet/ActionSet.js');
29
+ var usePreviousValue = require('../../global/js/hooks/usePreviousValue.js');
30
30
 
31
31
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
32
32
 
@@ -48,6 +48,7 @@ var defaults = {
48
48
  placement: 'right',
49
49
  size: 'md'
50
50
  };
51
+ var MotionActionSet = framerMotion.motion(ActionSet.ActionSet);
51
52
 
52
53
  /**
53
54
  * Side panels keep users in-context of a page while performing tasks like navigating, editing, viewing details, or configuring something new.
@@ -115,6 +116,7 @@ exports.SidePanel = /*#__PURE__*/React__default["default"].forwardRef(function (
115
116
  _useState6 = _rollupPluginBabelHelpers.slicedToArray(_useState5, 2),
116
117
  doAnimateTitle = _useState6[0],
117
118
  setDoAnimateTitle = _useState6[1];
119
+ var shouldReduceMotion = framerMotion.useReducedMotion();
118
120
  React.useEffect(function () {
119
121
  setDoAnimateTitle(animateTitle);
120
122
  }, [animateTitle]);
@@ -437,7 +439,10 @@ exports.SidePanel = /*#__PURE__*/React__default["default"].forwardRef(function (
437
439
  initial: "hidden",
438
440
  animate: "visible",
439
441
  exit: "exit",
440
- custom: placement
442
+ custom: {
443
+ placement: placement,
444
+ shouldReduceMotion: shouldReduceMotion
445
+ }
441
446
  }), /*#__PURE__*/React__default["default"].createElement("span", {
442
447
  ref: startTrapRef,
443
448
  tabIndex: "0",
@@ -446,10 +451,12 @@ exports.SidePanel = /*#__PURE__*/React__default["default"].forwardRef(function (
446
451
  }, "Focus sentinel"), doAnimateTitle ? /*#__PURE__*/React__default["default"].createElement("div", {
447
452
  ref: animatedScrollRef,
448
453
  className: "".concat(blockClass, "__animated-scroll-wrapper ").concat(blockClass, "--scrolls")
449
- }, renderHeader(), renderMain()) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, renderHeader(), renderMain()), /*#__PURE__*/React__default["default"].createElement(ActionSet.ActionSet, {
454
+ }, renderHeader(), renderMain()) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, renderHeader(), renderMain()), /*#__PURE__*/React__default["default"].createElement(MotionActionSet, {
450
455
  actions: actions,
451
456
  className: primaryActionContainerClassNames,
452
- size: size === 'xs' ? 'sm' : size
457
+ size: size === 'xs' ? 'sm' : size,
458
+ custom: shouldReduceMotion,
459
+ variants: variants.actionSetVariants
453
460
  }), /*#__PURE__*/React__default["default"].createElement("span", {
454
461
  ref: endTrapRef,
455
462
  tabIndex: "0",
@@ -16,27 +16,54 @@ export namespace overlayVariants {
16
16
  }
17
17
  }
18
18
  export namespace panelVariants {
19
- export namespace visible_1 {
20
- export let x: number;
21
- export namespace transition_1 {
22
- let duration_1: number;
23
- export { duration_1 as duration };
24
- let ease_1: number[];
25
- export { ease_1 as ease };
26
- }
27
- export { transition_1 as transition };
28
- }
19
+ export function visible_1({ shouldReduceMotion }: {
20
+ shouldReduceMotion: any;
21
+ }): {
22
+ x: number;
23
+ transition: {
24
+ duration: number;
25
+ ease: number[];
26
+ };
27
+ opacity: any;
28
+ };
29
29
  export { visible_1 as visible };
30
- export function hidden_1(placement: any): {
30
+ export function hidden_1({ placement, shouldReduceMotion }: {
31
+ placement: any;
32
+ shouldReduceMotion: any;
33
+ }): {
31
34
  x: string | number;
35
+ opacity: any;
32
36
  };
33
37
  export { hidden_1 as hidden };
34
- export function exit_1(placement: any): {
38
+ export function exit_1({ placement, shouldReduceMotion }: {
39
+ placement: any;
40
+ shouldReduceMotion: any;
41
+ }): {
35
42
  x: string | number;
36
43
  transition: {
37
44
  duration: number;
38
45
  ease: number[];
39
46
  };
47
+ opacity: any;
40
48
  };
41
49
  export { exit_1 as exit };
42
50
  }
51
+ export namespace actionSetVariants {
52
+ export function hidden_2(shouldReduceMotion: any): {
53
+ opacity: number;
54
+ transition: {
55
+ duration: number;
56
+ ease: number | number[];
57
+ };
58
+ };
59
+ export { hidden_2 as hidden };
60
+ export function visible_2(shouldReduceMotion: any): {
61
+ opacity: number;
62
+ transition: {
63
+ duration: number;
64
+ ease: number | number[];
65
+ delay: number;
66
+ };
67
+ };
68
+ export { visible_2 as visible };
69
+ }
@@ -27,28 +27,60 @@ var overlayVariants = {
27
27
  }
28
28
  };
29
29
  var panelVariants = {
30
- visible: {
31
- x: 0,
32
- transition: {
33
- duration: motionConstants.DURATIONS.moderate02,
34
- ease: motionConstants.EASINGS.productive.standard
35
- }
30
+ visible: function visible(_ref) {
31
+ var shouldReduceMotion = _ref.shouldReduceMotion;
32
+ return {
33
+ x: 0,
34
+ transition: {
35
+ duration: motionConstants.DURATIONS.moderate02,
36
+ ease: motionConstants.EASINGS.productive.standard
37
+ },
38
+ opacity: shouldReduceMotion && 1
39
+ };
36
40
  },
37
- hidden: function hidden(placement) {
41
+ hidden: function hidden(_ref2) {
42
+ var placement = _ref2.placement,
43
+ shouldReduceMotion = _ref2.shouldReduceMotion;
38
44
  return {
39
- x: placement === 'right' ? '100%' : -320
45
+ x: placement === 'right' ? shouldReduceMotion ? 0 : '100%' : shouldReduceMotion ? 0 : -320,
46
+ opacity: shouldReduceMotion && 0
40
47
  };
41
48
  },
42
- exit: function exit(placement) {
49
+ exit: function exit(_ref3) {
50
+ var placement = _ref3.placement,
51
+ shouldReduceMotion = _ref3.shouldReduceMotion;
43
52
  return {
44
- x: placement === 'right' ? '100%' : -320,
53
+ x: placement === 'right' ? shouldReduceMotion ? 0 : '100%' : shouldReduceMotion ? 0 : -320,
45
54
  transition: {
46
55
  duration: motionConstants.DURATIONS.moderate01,
47
56
  ease: motionConstants.EASINGS.productive.exit
57
+ },
58
+ opacity: shouldReduceMotion && 0
59
+ };
60
+ }
61
+ };
62
+ var actionSetVariants = {
63
+ hidden: function hidden(shouldReduceMotion) {
64
+ return {
65
+ opacity: shouldReduceMotion ? 0 : 1,
66
+ transition: {
67
+ duration: shouldReduceMotion ? motionConstants.DURATIONS.moderate01 : motionConstants.DURATIONS.fast01,
68
+ ease: shouldReduceMotion ? 0 : motionConstants.EASINGS.productive.exit
69
+ }
70
+ };
71
+ },
72
+ visible: function visible(shouldReduceMotion) {
73
+ return {
74
+ opacity: 1,
75
+ transition: {
76
+ duration: shouldReduceMotion ? motionConstants.DURATIONS.moderate01 : motionConstants.DURATIONS.fast02,
77
+ ease: shouldReduceMotion ? 0 : motionConstants.EASINGS.productive.entrance,
78
+ delay: shouldReduceMotion ? 0.075 : 0
48
79
  }
49
80
  };
50
81
  }
51
82
  };
52
83
 
84
+ exports.actionSetVariants = actionSetVariants;
53
85
  exports.overlayVariants = overlayVariants;
54
86
  exports.panelVariants = panelVariants;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * StringFormatter allows for truncating text while displaying a tooltip
3
+ * overlay on hover or focus with the entirety of the provided copy.
4
+ */
5
+ export let StringFormatter: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
6
+ import React from 'react';