@carbon/ibm-products 2.10.2 → 2.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. package/README.md +7 -0
  2. package/css/index-full-carbon.css +71 -26
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +3 -3
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon-released-only.css +1 -0
  7. package/css/index-without-carbon-released-only.css.map +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +71 -26
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +68 -25
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +2 -2
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/APIKeyModal/APIKeyModal.js +10 -3
  18. package/es/components/AboutModal/AboutModal.js +10 -3
  19. package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +17 -5
  20. package/es/components/CreateModal/CreateModal.js +10 -3
  21. package/es/components/Datagrid/Datagrid/DatagridContent.js +9 -7
  22. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +3 -2
  23. package/es/components/Datagrid/Datagrid/DatagridExpandedRow.js +26 -13
  24. package/es/components/Datagrid/Datagrid/DatagridRow.js +47 -40
  25. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +30 -37
  26. package/es/components/Datagrid/Datagrid/DraggableElement.js +36 -132
  27. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +17 -49
  28. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +125 -40
  29. package/es/components/Datagrid/Extensions/ExpandableRow/ExpandableRow.docs-page.js +1 -1
  30. package/es/components/Datagrid/useExpandedRow.js +1 -1
  31. package/es/components/Datagrid/useNestedRowExpander.js +22 -9
  32. package/es/components/Datagrid/useRowExpander.js +22 -9
  33. package/es/components/Datagrid/utils/DatagridActions.js +1 -1
  34. package/es/components/Datagrid/utils/DatagridPagination.js +1 -1
  35. package/es/components/Datagrid/utils/getArgTypes.js +12 -0
  36. package/es/components/EditTearsheet/EditTearsheet.js +47 -38
  37. package/es/components/EditTearsheet/EditTearsheetForm.js +6 -0
  38. package/es/components/EditTearsheet/preview-components/MultiFormEditTearsheet.js +6 -1
  39. package/es/components/EmptyStates/EmptyState.js +1 -1
  40. package/es/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  41. package/es/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  42. package/es/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  43. package/es/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  44. package/es/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  45. package/es/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  46. package/es/components/EmptyStates/assets/ErrorIllustration.js +6 -11
  47. package/es/components/EmptyStates/assets/NoDataIllustration.js +6 -11
  48. package/es/components/EmptyStates/assets/NoTagsIllustration.js +6 -12
  49. package/es/components/EmptyStates/assets/NotFoundIllustration.js +6 -12
  50. package/es/components/EmptyStates/assets/NotificationsIllustration.js +6 -12
  51. package/es/components/EmptyStates/assets/UnauthorizedIllustration.js +6 -12
  52. package/es/components/ExportModal/ExportModal.js +10 -3
  53. package/es/components/ImportModal/ImportModal.js +10 -3
  54. package/es/components/RemoveModal/RemoveModal.js +10 -3
  55. package/es/components/TagSet/TagSet.js +5 -21
  56. package/es/components/TagSet/TagSetModal.js +7 -3
  57. package/es/components/Tearsheet/Tearsheet.js +2 -2
  58. package/es/components/Tearsheet/TearsheetNarrow.js +2 -2
  59. package/es/components/Tearsheet/TearsheetShell.js +14 -28
  60. package/es/global/decorators/sidePanelDecorator.js +7 -0
  61. package/es/global/js/hooks/usePortalTarget.js +30 -0
  62. package/es/global/js/hooks/useRetrieveFormTitles.js +20 -0
  63. package/es/global/js/hooks/useWindowScroll.js +5 -0
  64. package/es/global/js/package-settings.js +0 -1
  65. package/es/global/js/utils/getNodeTextContent.js +47 -0
  66. package/flags.js +6 -0
  67. package/lib/components/APIKeyModal/APIKeyModal.js +10 -3
  68. package/lib/components/AboutModal/AboutModal.js +10 -3
  69. package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +17 -5
  70. package/lib/components/CreateModal/CreateModal.js +10 -3
  71. package/lib/components/Datagrid/Datagrid/DatagridContent.js +9 -7
  72. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +2 -1
  73. package/lib/components/Datagrid/Datagrid/DatagridExpandedRow.js +26 -13
  74. package/lib/components/Datagrid/Datagrid/DatagridRow.js +46 -41
  75. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +30 -37
  76. package/lib/components/Datagrid/Datagrid/DraggableElement.js +37 -137
  77. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +20 -49
  78. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +130 -47
  79. package/lib/components/Datagrid/Extensions/ExpandableRow/ExpandableRow.docs-page.js +1 -1
  80. package/lib/components/Datagrid/useExpandedRow.js +1 -1
  81. package/lib/components/Datagrid/useNestedRowExpander.js +24 -9
  82. package/lib/components/Datagrid/useRowExpander.js +24 -9
  83. package/lib/components/Datagrid/utils/DatagridActions.js +1 -1
  84. package/lib/components/Datagrid/utils/DatagridPagination.js +1 -1
  85. package/lib/components/Datagrid/utils/getArgTypes.js +12 -0
  86. package/lib/components/EditTearsheet/EditTearsheet.js +47 -38
  87. package/lib/components/EditTearsheet/EditTearsheetForm.js +6 -0
  88. package/lib/components/EditTearsheet/preview-components/MultiFormEditTearsheet.js +6 -1
  89. package/lib/components/EmptyStates/EmptyState.js +1 -1
  90. package/lib/components/EmptyStates/ErrorEmptyState/ErrorEmptyState.js +1 -1
  91. package/lib/components/EmptyStates/NoDataEmptyState/NoDataEmptyState.js +1 -1
  92. package/lib/components/EmptyStates/NoTagsEmptyState/NoTagsEmptyState.js +1 -1
  93. package/lib/components/EmptyStates/NotFoundEmptyState/NotFoundEmptyState.js +1 -1
  94. package/lib/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -1
  95. package/lib/components/EmptyStates/UnauthorizedEmptyState/UnauthorizedEmptyState.js +1 -1
  96. package/lib/components/EmptyStates/assets/ErrorIllustration.js +6 -11
  97. package/lib/components/EmptyStates/assets/NoDataIllustration.js +6 -11
  98. package/lib/components/EmptyStates/assets/NoTagsIllustration.js +6 -12
  99. package/lib/components/EmptyStates/assets/NotFoundIllustration.js +6 -12
  100. package/lib/components/EmptyStates/assets/NotificationsIllustration.js +6 -12
  101. package/lib/components/EmptyStates/assets/UnauthorizedIllustration.js +6 -12
  102. package/lib/components/ExportModal/ExportModal.js +10 -3
  103. package/lib/components/ImportModal/ImportModal.js +10 -3
  104. package/lib/components/RemoveModal/RemoveModal.js +10 -3
  105. package/lib/components/TagSet/TagSet.js +5 -21
  106. package/lib/components/TagSet/TagSetModal.js +7 -3
  107. package/lib/components/Tearsheet/Tearsheet.js +2 -2
  108. package/lib/components/Tearsheet/TearsheetNarrow.js +2 -2
  109. package/lib/components/Tearsheet/TearsheetShell.js +14 -28
  110. package/lib/global/decorators/sidePanelDecorator.js +7 -0
  111. package/lib/global/js/hooks/usePortalTarget.js +38 -0
  112. package/lib/global/js/hooks/useRetrieveFormTitles.js +28 -0
  113. package/lib/global/js/hooks/useWindowScroll.js +6 -0
  114. package/lib/global/js/package-settings.js +0 -1
  115. package/lib/global/js/utils/getNodeTextContent.js +55 -0
  116. package/package.json +7 -3
  117. package/scss/components/ActionSet/_action-set.scss +2 -1
  118. package/scss/components/Datagrid/_datagrid.scss +9 -0
  119. package/scss/components/Datagrid/styles/_datagrid.scss +7 -6
  120. package/scss/components/Datagrid/styles/_draggableElement.scss +34 -16
  121. package/scss/components/Datagrid/styles/_useExpandedRow.scss +13 -0
  122. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +1 -1
  123. package/scss/components/Datagrid/styles/addons/_FilterFlyout.scss +23 -11
  124. package/scss/components/Datagrid/styles/addons/_FilterPanel.scss +7 -3
  125. package/scss/components/FilterSummary/_filter-summary.scss +3 -1
  126. package/scss/global/decorators/_side-panel-decorator.scss +7 -0
  127. package/scss/global/js/utils/_story-as-full-page.scss +0 -6
@@ -19,9 +19,10 @@ var _react2 = require("@carbon/react");
19
19
  var _classnames = _interopRequireDefault(require("classnames"));
20
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
21
21
  var _devtools = require("../../global/js/utils/devtools");
22
+ var _usePortalTarget = require("../../global/js/hooks/usePortalTarget");
22
23
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
23
24
  var _settings = require("../../settings");
24
- var _excluded = ["accept", "className", "defaultErrorBody", "defaultErrorHeader", "description", "fetchErrorBody", "fetchErrorHeader", "fileDropHeader", "fileDropLabel", "fileUploadLabel", "inputButtonIcon", "inputButtonText", "inputId", "inputLabel", "inputPlaceholder", "invalidFileTypeErrorBody", "invalidFileTypeErrorHeader", "invalidIconDescription", "maxFileSize", "maxFileSizeErrorBody", "maxFileSizeErrorHeader", "onClose", "onRequestSubmit", "open", "primaryButtonText", "secondaryButtonText", "title"]; //
25
+ var _excluded = ["accept", "className", "defaultErrorBody", "defaultErrorHeader", "description", "fetchErrorBody", "fetchErrorHeader", "fileDropHeader", "fileDropLabel", "fileUploadLabel", "inputButtonIcon", "inputButtonText", "inputId", "inputLabel", "inputPlaceholder", "invalidFileTypeErrorBody", "invalidFileTypeErrorHeader", "invalidIconDescription", "maxFileSize", "maxFileSizeErrorBody", "maxFileSizeErrorHeader", "onClose", "onRequestSubmit", "open", "portalTarget", "primaryButtonText", "secondaryButtonText", "title"]; //
25
26
  // Copyright IBM Corp. 2021, 2021
26
27
  //
27
28
  // This source code is licensed under the Apache-2.0 license found in the
@@ -64,6 +65,7 @@ var ImportModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
64
65
  onClose = _ref.onClose,
65
66
  onRequestSubmit = _ref.onRequestSubmit,
66
67
  open = _ref.open,
68
+ portalTargetIn = _ref.portalTarget,
67
69
  primaryButtonText = _ref.primaryButtonText,
68
70
  secondaryButtonText = _ref.secondaryButtonText,
69
71
  title = _ref.title,
@@ -77,6 +79,7 @@ var ImportModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
77
79
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
78
80
  importUrl = _useState4[0],
79
81
  setImportUrl = _useState4[1];
82
+ var renderPortalUse = (0, _usePortalTarget.usePortalTarget)(portalTargetIn);
80
83
  var isInvalidFileType = function isInvalidFileType(file) {
81
84
  var acceptSet = new Set(accept);
82
85
  var name = file.name;
@@ -201,7 +204,7 @@ var ImportModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
201
204
  var importButtonDisabled = !importUrl || hasFiles;
202
205
  var fileStatusString = "".concat(numberOfValidFiles, " / ").concat(numberOfFiles, " ").concat(fileUploadLabel);
203
206
  var blockClass = "".concat(_settings.pkg.prefix, "--import-modal");
204
- return /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, _objectSpread({
207
+ return renderPortalUse( /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, _objectSpread({
205
208
  open: open,
206
209
  ref: ref
207
210
  }, (0, _devtools.getDevtoolsProps)(componentName)), {
@@ -278,7 +281,7 @@ var ImportModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
278
281
  kind: "primary",
279
282
  onClick: onSubmitHandler,
280
283
  disabled: primaryButtonDisabled
281
- }, primaryButtonText)));
284
+ }, primaryButtonText))));
282
285
  });
283
286
 
284
287
  // Return a placeholder if not released and not enabled by feature flag
@@ -381,6 +384,10 @@ ImportModal.propTypes = {
381
384
  * Specify whether the Modal is currently open
382
385
  */
383
386
  open: _propTypes.default.bool.isRequired,
387
+ /**
388
+ * The DOM node the tearsheet should be rendered within. Defaults to document.body.
389
+ */
390
+ portalTarget: _propTypes.default.node,
384
391
  /**
385
392
  * Specify the text for the primary button
386
393
  */
@@ -18,7 +18,8 @@ var _devtools = require("../../global/js/utils/devtools");
18
18
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
19
19
  var _settings = require("../../settings");
20
20
  var _hooks = require("../../global/js/hooks");
21
- var _excluded = ["body", "className", "iconDescription", "inputInvalidText", "inputLabelText", "inputPlaceholderText", "label", "onClose", "onRequestSubmit", "open", "preventCloseOnClickOutside", "primaryButtonDisabled", "primaryButtonText", "resourceName", "secondaryButtonText", "textConfirmation", "title"]; //
21
+ var _usePortalTarget = require("../../global/js/hooks/usePortalTarget");
22
+ var _excluded = ["body", "className", "iconDescription", "inputInvalidText", "inputLabelText", "inputPlaceholderText", "label", "onClose", "onRequestSubmit", "open", "portalTarget", "preventCloseOnClickOutside", "primaryButtonDisabled", "primaryButtonText", "resourceName", "secondaryButtonText", "textConfirmation", "title"]; //
22
23
  // Copyright IBM Corp. 2020, 2021
23
24
  //
24
25
  // This source code is licensed under the Apache-2.0 license found in the
@@ -46,6 +47,7 @@ var RemoveModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
46
47
  onClose = _ref.onClose,
47
48
  onRequestSubmit = _ref.onRequestSubmit,
48
49
  open = _ref.open,
50
+ portalTargetIn = _ref.portalTarget,
49
51
  preventCloseOnClickOutside = _ref.preventCloseOnClickOutside,
50
52
  primaryButtonDisabled = _ref.primaryButtonDisabled,
51
53
  primaryButtonText = _ref.primaryButtonText,
@@ -62,6 +64,7 @@ var RemoveModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
62
64
  userInput = _useState2[0],
63
65
  setUserInput = _useState2[1];
64
66
  var idRef = (0, _react.useRef)((0, _uuidv.default)());
67
+ var renderPortalUse = (0, _usePortalTarget.usePortalTarget)(portalTargetIn);
65
68
  var onChangeHandler = function onChangeHandler(e) {
66
69
  setUserInput(e.target.value);
67
70
  };
@@ -85,7 +88,7 @@ var RemoveModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
85
88
  setUserInput('');
86
89
  }
87
90
  }, [open, previousState === null || previousState === void 0 ? void 0 : previousState.open]);
88
- return /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
91
+ return renderPortalUse( /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
89
92
  className: (0, _classnames.default)(blockClass, className),
90
93
  size: "sm",
91
94
  "aria-label": title
@@ -119,7 +122,7 @@ var RemoveModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
119
122
  kind: "danger",
120
123
  onClick: onRequestSubmit,
121
124
  disabled: primaryButtonStatus
122
- }, primaryButtonText)));
125
+ }, primaryButtonText))));
123
126
  });
124
127
 
125
128
  // Return a placeholder if not released and not enabled by feature flag
@@ -166,6 +169,10 @@ RemoveModal.propTypes = {
166
169
  * Specify whether the Modal is currently open
167
170
  */
168
171
  open: _propTypes.default.bool.isRequired,
172
+ /**
173
+ * The DOM node the tearsheet should be rendered within. Defaults to document.body.
174
+ */
175
+ portalTarget: _propTypes.default.node,
169
176
  /**
170
177
  * Prevent closing on click outside of modal
171
178
  */
@@ -11,7 +11,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
- var _reactDom = require("react-dom");
15
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
16
15
  var _classnames = _interopRequireDefault(require("classnames"));
17
16
  var _TagSetOverflow = require("./TagSetOverflow");
@@ -40,13 +39,12 @@ var allTagsModalSearchThreshold = 10;
40
39
  // Default values for props
41
40
  var defaults = {
42
41
  align: 'start',
43
- // allTagsModalTarget: document.body,
44
42
  overflowAlign: 'bottom'
45
43
  };
46
44
  var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
47
45
  var _ref$align = _ref.align,
48
46
  align = _ref$align === void 0 ? defaults.align : _ref$align,
49
- allTagsModalTargetIn = _ref.allTagsModalTarget,
47
+ allTagsModalTarget = _ref.allTagsModalTarget,
50
48
  className = _ref.className,
51
49
  maxVisible = _ref.maxVisible,
52
50
  multiline = _ref.multiline,
@@ -84,22 +82,9 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
84
82
  sizingTags = _useState10[0],
85
83
  setSizingTags = _useState10[1];
86
84
  var overflowTag = (0, _react.useRef)(null);
87
- var _useState11 = (0, _react.useState)(null),
88
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
89
- allTagsModalTarget = _useState12[0],
90
- setAllTagsModalTarget = _useState12[1];
91
85
  var handleShowAllClick = function handleShowAllClick() {
92
86
  setShowAllModalOpen(true);
93
87
  };
94
- (0, _react.useEffect)(function () {
95
- if (allTagsModalTargetIn) {
96
- setAllTagsModalTarget(allTagsModalTargetIn);
97
- } else {
98
- if (_settings.pkg.isFeatureEnabled('default-portal-target-body')) {
99
- setAllTagsModalTarget(document.body);
100
- }
101
- }
102
- }, [allTagsModalTargetIn]);
103
88
  (0, _react.useEffect)(function () {
104
89
  var newSizingTags = [];
105
90
  // create sizing tags
@@ -219,16 +204,15 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
219
204
  }, hiddenSizingTags), /*#__PURE__*/_react.default.createElement("div", {
220
205
  className: (0, _classnames.default)(["".concat(blockClass, "__tag-container"), multiline && "".concat(blockClass, "__tag-container--multiline")]),
221
206
  ref: displayedArea
222
- }, displayedTags)), (allTagsModalTarget ? _reactDom.createPortal : function (children) {
223
- return children;
224
- })( /*#__PURE__*/_react.default.createElement(_TagSetModal.TagSetModal, {
207
+ }, displayedTags)), /*#__PURE__*/_react.default.createElement(_TagSetModal.TagSetModal, {
225
208
  allTags: tags,
226
209
  open: showAllModalOpen,
227
210
  title: allTagsModalTitle,
228
211
  onClose: handleModalClose,
229
212
  searchLabel: allTagsModalSearchLabel,
230
- searchPlaceholder: allTagsModalSearchPlaceholderText
231
- }), allTagsModalTarget));
213
+ searchPlaceholder: allTagsModalSearchPlaceholderText,
214
+ portalTarget: allTagsModalTarget
215
+ }));
232
216
  });
233
217
 
234
218
  // Return a placeholder if not released and not enabled by feature flag
@@ -16,7 +16,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
16
16
  var _react2 = require("@carbon/react");
17
17
  var _settings = require("../../settings");
18
18
  var _propsHelper = require("../../global/js/utils/props-helper");
19
- var _excluded = ["allTags", "className", "title", "onClose", "open", "searchLabel", "searchPlaceholder"],
19
+ var _usePortalTarget = require("../../global/js/hooks/usePortalTarget");
20
+ var _excluded = ["allTags", "className", "title", "onClose", "open", "portalTarget", "searchLabel", "searchPlaceholder"],
20
21
  _excluded2 = ["label"]; //
21
22
  // Copyright IBM Corp. 2021, 2020
22
23
  //
@@ -41,6 +42,7 @@ var TagSetModal = function TagSetModal(_ref) {
41
42
  title = _ref.title,
42
43
  onClose = _ref.onClose,
43
44
  open = _ref.open,
45
+ portalTargetIn = _ref.portalTarget,
44
46
  _ref$searchLabel = _ref.searchLabel,
45
47
  searchLabel = _ref$searchLabel === void 0 ? defaults.searchLabel : _ref$searchLabel,
46
48
  searchPlaceholder = _ref.searchPlaceholder,
@@ -53,6 +55,7 @@ var TagSetModal = function TagSetModal(_ref) {
53
55
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
54
56
  search = _useState4[0],
55
57
  setSearch = _useState4[1];
58
+ var renderPortalUse = (0, _usePortalTarget.usePortalTarget)(portalTargetIn);
56
59
  (0, _react.useEffect)(function () {
57
60
  var newFilteredModalTags = [];
58
61
  if (open) {
@@ -75,7 +78,7 @@ var TagSetModal = function TagSetModal(_ref) {
75
78
  var handleSearch = function handleSearch(ev) {
76
79
  setSearch(ev.target.value || '');
77
80
  };
78
- return /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
81
+ return renderPortalUse( /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
79
82
  containerClassName: "".concat(blockClass, "__container"),
80
83
  className: (0, _classnames.default)(className, "".concat(blockClass)),
81
84
  size: "sm",
@@ -104,7 +107,7 @@ var TagSetModal = function TagSetModal(_ref) {
104
107
  }), label);
105
108
  })), /*#__PURE__*/_react.default.createElement("div", {
106
109
  className: "".concat(blockClass, "__fade")
107
- }));
110
+ })));
108
111
  };
109
112
  exports.TagSetModal = TagSetModal;
110
113
  TagSetModal.propTypes = {
@@ -114,6 +117,7 @@ TagSetModal.propTypes = {
114
117
  className: _propTypes.default.string,
115
118
  onClose: _propTypes.default.func,
116
119
  open: _propTypes.default.bool,
120
+ portalTarget: _propTypes.default.node,
117
121
  searchLabel: _propTypes.default.string,
118
122
  searchPlaceholder: _propTypes.default.string,
119
123
  title: _propTypes.default.string
@@ -182,9 +182,9 @@ Tearsheet.propTypes = _objectSpread({
182
182
  */
183
183
  open: _propTypes.default.bool,
184
184
  /**
185
- * The DOM node the tearsheet should be rendered within. Defaults to document.body.
185
+ * The DOM element that the tearsheet should be rendered within. Defaults to document.body.
186
186
  */
187
- portalTarget: _propTypes.default.node,
187
+ portalTarget: _propTypes.default.instanceOf(Element),
188
188
  /**
189
189
  * Specify a CSS selector that matches the DOM element that should be focused when the Modal opens
190
190
  */
@@ -148,9 +148,9 @@ TearsheetNarrow.propTypes = _objectSpread({
148
148
  */
149
149
  open: _propTypes.default.bool,
150
150
  /**
151
- * The DOM node the tearsheet should be rendered within. Defaults to document.body.
151
+ * The DOM element that the tearsheet should be rendered within. Defaults to document.body.
152
152
  */
153
- portalTarget: _propTypes.default.node,
153
+ portalTarget: _propTypes.default.instanceOf(Element),
154
154
  /**
155
155
  * The main title of the tearsheet, displayed in the header area.
156
156
  */
@@ -11,15 +11,16 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
- var _reactDom = require("react-dom");
15
14
  var _useResizeObserver2 = require("../../global/js/hooks/useResizeObserver");
16
15
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
16
  var _classnames = _interopRequireDefault(require("classnames"));
18
17
  var _settings = require("../../settings");
19
18
  var _pconsole = _interopRequireDefault(require("../../global/js/utils/pconsole"));
19
+ var _getNodeTextContent = require("../../global/js/utils/getNodeTextContent");
20
20
  var _react2 = require("@carbon/react");
21
21
  var _ActionSet = require("../ActionSet");
22
22
  var _Wrap = require("../../global/js/utils/Wrap");
23
+ var _usePortalTarget = require("../../global/js/hooks/usePortalTarget");
23
24
  var _excluded = ["actions", "children", "className", "closeIconDescription", "description", "hasCloseIcon", "headerActions", "influencer", "influencerPosition", "influencerWidth", "label", "navigation", "onClose", "open", "selectorPrimaryFocus", "size", "portalTarget", "title", "verticalPosition"];
24
25
  /**
25
26
  * Copyright IBM Corp. 2020, 2023
@@ -94,20 +95,7 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
94
95
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
95
96
  var carbonPrefix = (0, _react2.usePrefix)();
96
97
  var bcModalHeader = "".concat(carbonPrefix, "--modal-header");
97
- // node the modal tearsheet is hosted in
98
- var _useState = (0, _react.useState)(null),
99
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
100
- portalTarget = _useState2[0],
101
- setPortalTarget = _useState2[1];
102
- (0, _react.useEffect)(function () {
103
- if (portalTargetIn) {
104
- setPortalTarget(portalTargetIn);
105
- } else {
106
- if (_settings.pkg.isFeatureEnabled('default-portal-target-body')) {
107
- setPortalTarget(document.body);
108
- }
109
- }
110
- }, [portalTargetIn]);
98
+ var renderPortalUse = (0, _usePortalTarget.usePortalTarget)(portalTargetIn);
111
99
  var localRef = (0, _react.useRef)();
112
100
  var resizer = (0, _react.useRef)(null);
113
101
  var modalRef = ref || localRef;
@@ -116,14 +104,14 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
116
104
  var wide = size === 'wide';
117
105
 
118
106
  // Keep track of the stack depth and our position in it (1-based, 0=closed)
107
+ var _useState = (0, _react.useState)(0),
108
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
109
+ depth = _useState2[0],
110
+ setDepth = _useState2[1];
119
111
  var _useState3 = (0, _react.useState)(0),
120
112
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
121
- depth = _useState4[0],
122
- setDepth = _useState4[1];
123
- var _useState5 = (0, _react.useState)(0),
124
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
125
- position = _useState6[0],
126
- setPosition = _useState6[1];
113
+ position = _useState4[0],
114
+ setPosition = _useState4[1];
127
115
 
128
116
  // Keep a record of the previous value of depth.
129
117
  var prevDepth = (0, _react.useRef)();
@@ -208,10 +196,8 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
208
196
 
209
197
  // Include an ActionSet if and only if one or more actions is given.
210
198
  var includeActions = actions && (actions === null || actions === void 0 ? void 0 : actions.length) > 0;
211
- return (portalTarget ? _reactDom.createPortal : function (children) {
212
- return children;
213
- })( /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
214
- "aria-label": title,
199
+ return renderPortalUse( /*#__PURE__*/_react.default.createElement(_react2.ComposedModal, (0, _extends2.default)({}, rest, {
200
+ "aria-label": (0, _getNodeTextContent.getNodeTextContent)(title),
215
201
  className: (0, _classnames.default)(bc, className, (_cx = {}, (0, _defineProperty2.default)(_cx, "".concat(bc, "--stacked-").concat(position, "-of-").concat(depth),
216
202
  // Don't apply this on the initial open of a single tearsheet.
217
203
  depth > 1 || depth === 1 && prevDepth.current > 1), (0, _defineProperty2.default)(_cx, "".concat(bc, "--wide"), wide), (0, _defineProperty2.default)(_cx, "".concat(bc, "--narrow"), !wide), _cx)),
@@ -275,7 +261,7 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
275
261
  })))), /*#__PURE__*/_react.default.createElement("div", {
276
262
  className: "".concat(bc, "__resize-detector"),
277
263
  ref: resizer
278
- })), portalTarget);
264
+ })));
279
265
  } else {
280
266
  _pconsole.default.warn('Tearsheet not rendered: maximum stacking depth exceeded.');
281
267
  return null;
@@ -408,9 +394,9 @@ TearsheetShell.propTypes = _objectSpread({
408
394
  */
409
395
  open: _propTypes.default.bool,
410
396
  /**
411
- * The DOM node the tearsheet should be rendered within. Defaults to document.body.
397
+ * The DOM element that the tearsheet should be rendered within. Defaults to document.body.
412
398
  */
413
- portalTarget: _propTypes.default.node,
399
+ portalTarget: _propTypes.default.instanceOf(Element),
414
400
  /**
415
401
  * Specifies the width of the tearsheet, 'narrow' or 'wide'.
416
402
  */
@@ -7,6 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.sidePanelDecorator = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _react2 = require("@carbon/react");
10
+ /**
11
+ * Copyright IBM Corp. 2023, 2023
12
+ *
13
+ * This source code is licensed under the Apache-2.0 license found in the
14
+ * LICENSE file in the root directory of this source tree.
15
+ */
16
+
10
17
  var sidePanelDecorator = function sidePanelDecorator(renderHeader, prefix) {
11
18
  return function (Story) {
12
19
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.usePortalTarget = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = require("react");
10
+ var _settings = require("../../../settings");
11
+ var _reactDom = require("react-dom");
12
+ /**
13
+ * Copyright IBM Corp. 2023, 2023
14
+ *
15
+ * This source code is licensed under the Apache-2.0 license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */
18
+
19
+ var usePortalTarget = function usePortalTarget(portalTargetIn) {
20
+ var _useState = (0, _react.useState)(null),
21
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
22
+ portalTarget = _useState2[0],
23
+ setPortalTarget = _useState2[1];
24
+ (0, _react.useEffect)(function () {
25
+ if (portalTargetIn) {
26
+ setPortalTarget(portalTargetIn);
27
+ } else {
28
+ if (_settings.pkg.isFeatureEnabled('default-portal-target-body')) {
29
+ setPortalTarget(document.body);
30
+ }
31
+ }
32
+ }, [portalTargetIn]);
33
+ var renderPortalUse = (0, _react.useCallback)(function (children) {
34
+ return portalTarget ? /*#__PURE__*/(0, _reactDom.createPortal)(children, portalTarget) : children;
35
+ }, [portalTarget]);
36
+ return renderPortalUse;
37
+ };
38
+ exports.usePortalTarget = usePortalTarget;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useRetrieveFormTitles = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _react = require("react");
10
+ var useRetrieveFormTitles = function useRetrieveFormTitles(_ref) {
11
+ var formContext = _ref.formContext,
12
+ formNumber = _ref.formNumber,
13
+ title = _ref.title;
14
+ (0, _react.useEffect)(function () {
15
+ if (formContext) {
16
+ formContext.setFormTitles(function (prev) {
17
+ var prevTitle = prev[formNumber];
18
+ if (prevTitle !== title) {
19
+ var clone = (0, _toConsumableArray2.default)(prev);
20
+ clone[formNumber] = title;
21
+ return clone;
22
+ }
23
+ return prev;
24
+ });
25
+ }
26
+ }, [title, formContext, formNumber]);
27
+ };
28
+ exports.useRetrieveFormTitles = useRetrieveFormTitles;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useNearestScroll = useNearestScroll;
8
+ exports.useScroll = useScroll;
8
9
  exports.useWindowScroll = useWindowScroll;
9
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
11
  var _react = require("react");
@@ -83,4 +84,9 @@ function useNearestScroll(ref, effect, deps) {
83
84
  scrollableTarget = window;
84
85
  }
85
86
  return useTargetScroll(scrollableTarget, effect, deps, throttle);
87
+ }
88
+ function useScroll(ref, effect, deps) {
89
+ var _ref$current;
90
+ var throttle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
91
+ return useTargetScroll((_ref$current = ref === null || ref === void 0 ? void 0 : ref.current) !== null && _ref$current !== void 0 ? _ref$current : null, effect, deps, throttle);
86
92
  }
@@ -79,7 +79,6 @@ var defaults = {
79
79
 
80
80
  // feature level flags
81
81
  feature: {
82
- 'a-new-feature': false,
83
82
  'default-portal-target-body': true,
84
83
  'Datagrid.useInfiniteScroll': false,
85
84
  'Datagrid.useInlineEdit': false,
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getNodeTextContent = void 0;
8
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
+ /**
10
+ * Copyright IBM Corp. 2023
11
+ *
12
+ * This source code is licensed under the Apache-2.0 license found in the
13
+ * LICENSE file in the root directory of this source tree.
14
+ */
15
+
16
+ /**
17
+ * Returns a compiled string of all the text content of a React node and any of its child nodes.
18
+ * This is meant to be used in a limited fashion to convert a "styled" sentence into a single string:
19
+ * e.g. <p>Title <b>Page</b>.</p> --> "Title Page."
20
+ * This will likely not work for arrays of nodes due to the lack of word spacing:
21
+ * e.g. <ul>
22
+ * <li>Item 1</li>
23
+ * <li>Item 2</li>
24
+ * <li>Item 3</li>
25
+ * </ul>
26
+ * --> "Item 1Item 2Item 3"
27
+ * @param {Node} node A React node
28
+ * @returns {string}
29
+ */
30
+ var getNodeTextContent = function getNodeTextContent(node) {
31
+ if (node == null) {
32
+ return '';
33
+ }
34
+ switch ((0, _typeof2.default)(node)) {
35
+ case 'string':
36
+ case 'number':
37
+ return node.toString();
38
+ case 'object':
39
+ {
40
+ if (node instanceof Array) {
41
+ return node.map(getNodeTextContent).join('');
42
+ }
43
+ if ('props' in node) {
44
+ return getNodeTextContent(node.props.children);
45
+ }
46
+
47
+ // Ignore any other JavaScript 'object' types.
48
+ return '';
49
+ }
50
+ default:
51
+ // Ignore all other JavaScript types.
52
+ return '';
53
+ }
54
+ };
55
+ exports.getNodeTextContent = getNodeTextContent;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "2.10.2",
4
+ "version": "2.11.1",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -23,7 +23,8 @@
23
23
  "css",
24
24
  "es",
25
25
  "lib",
26
- "scss"
26
+ "scss",
27
+ "flags.js"
27
28
  ],
28
29
  "keywords": [
29
30
  "carbon",
@@ -76,6 +77,9 @@
76
77
  "dependencies": {
77
78
  "@babel/runtime": "^7.22.10",
78
79
  "@carbon/telemetry": "^0.1.0",
80
+ "@dnd-kit/core": "^6.0.8",
81
+ "@dnd-kit/sortable": "^7.0.2",
82
+ "@dnd-kit/utilities": "^3.2.1",
79
83
  "framer-motion": "^6.5.1 < 7",
80
84
  "immutability-helper": "^3.1.1",
81
85
  "lodash": "^4.17.21",
@@ -92,5 +96,5 @@
92
96
  "react": "^16.8.6 || ^17.0.1 || ^18.2.0",
93
97
  "react-dom": "^16.8.6 || ^17.0.1 || ^18.2.0"
94
98
  },
95
- "gitHead": "4bad2f42da78adaf3eddc9d68db068b0d2d71834"
99
+ "gitHead": "7764b5a83d2878931c637c3a76e04c857f0aeb19"
96
100
  }
@@ -107,7 +107,8 @@ $action-set-block-class: #{c4p-settings.$pkg-prefix}--action-set;
107
107
  .#{$action-set-block-class}__action-button:not(
108
108
  .#{$action-set-block-class}__action-button--ghost
109
109
  ) {
110
- max-width: rem(232px);
110
+ /* stylelint-disable-next-line function-no-unknown -- to-rem carbon replacement for rem */
111
+ max-width: to-rem(232px);
111
112
  flex: 0 1 25%;
112
113
  }
113
114
 
@@ -31,6 +31,7 @@ $block-class: #{c4p-settings.$pkg-prefix}--datagrid;
31
31
  .#{$block-class}__datagridWrap {
32
32
  display: block;
33
33
  width: 100%;
34
+
34
35
  :global(.#{c4p-settings.$carbon-prefix}--checkbox) {
35
36
  display: none;
36
37
  }
@@ -70,3 +71,11 @@ $block-class: #{c4p-settings.$pkg-prefix}--datagrid;
70
71
  }
71
72
  }
72
73
  }
74
+
75
+ // firefox fix for issue mentioned in 3442
76
+ .#{$block-class}
77
+ .#{c4p-settings.$carbon-prefix}--menu-button__trigger:not(
78
+ .#{c4p-settings.$carbon-prefix}--btn--ghost
79
+ ) {
80
+ min-width: auto;
81
+ }
@@ -6,6 +6,7 @@
6
6
  //
7
7
 
8
8
  @use '@carbon/styles/scss/theme' as *;
9
+ @use '@carbon/layout/scss/convert' as *;
9
10
  @use '@carbon/styles/scss/spacing' as *;
10
11
  @use '@carbon/react/scss/components/button/tokens' as *;
11
12
  @use '../../../global/styles/project-settings' as c4p-settings;
@@ -92,10 +93,10 @@
92
93
  &.#{c4p-settings.$carbon-prefix}--data-table--sm,
93
94
  &.#{c4p-settings.$carbon-prefix}--data-table--md {
94
95
  .#{$block-class}__cell {
95
- /* stylelint-disable-next-line carbon/layout-token-use */
96
- padding-top: rem(7px);
97
- /* stylelint-disable-next-line carbon/layout-token-use */
98
- padding-bottom: rem(6px);
96
+ /* stylelint-disable-next-line -- to-rem carbon replacement for rem */
97
+ padding-top: to-rem(7px);
98
+ /* stylelint-disable-next-line -- to-rem carbon replacement for rem */
99
+ padding-bottom: to-rem(6px);
99
100
  }
100
101
  }
101
102
 
@@ -123,8 +124,8 @@
123
124
  }
124
125
 
125
126
  .#{c4p-settings.$carbon-prefix}--table-column-checkbox {
126
- /* stylelint-disable-next-line carbon/layout-token-use */
127
- padding-top: rem(13px);
127
+ /* stylelint-disable-next-line -- to-rem carbon replacement for rem */
128
+ padding-top: to-rem(13px);
128
129
  }
129
130
  }
130
131