@carbon/ibm-products 1.51.0 → 1.52.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. package/README.md +10 -5
  2. package/css/index-full-carbon.css +89 -64
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +1 -1
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon.css +89 -64
  7. package/css/index-without-carbon.css.map +1 -1
  8. package/css/index-without-carbon.min.css +1 -1
  9. package/css/index-without-carbon.min.css.map +1 -1
  10. package/css/index.css +89 -64
  11. package/css/index.css.map +1 -1
  12. package/css/index.min.css +1 -1
  13. package/css/index.min.css.map +1 -1
  14. package/es/components/AboutModal/AboutModal.js +3 -4
  15. package/es/components/ActionBar/ActionBar.js +9 -18
  16. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +8 -13
  17. package/es/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +7 -11
  18. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +5 -5
  19. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -4
  20. package/es/components/Datagrid/index.js +1 -0
  21. package/es/components/Datagrid/useActionsColumn.js +10 -7
  22. package/es/components/Datagrid/useCustomizeColumns.js +5 -1
  23. package/es/components/Datagrid/useEditableCell.js +12 -0
  24. package/es/components/Datagrid/useExpandedRow.js +11 -7
  25. package/es/components/Datagrid/useFiltering.js +11 -8
  26. package/es/components/Datagrid/useInlineEdit.js +17 -8
  27. package/es/components/Datagrid/useNestedRows.js +10 -6
  28. package/es/components/ExampleComponent/ExampleComponent.js +32 -4
  29. package/es/components/ExampleComponent/useExample.js +49 -0
  30. package/es/components/InlineEditV1/InlineEditV1.js +3 -1
  31. package/es/components/NonLinearReading/NonLinearReading.js +7 -7
  32. package/es/components/PageHeader/PageHeader.js +28 -31
  33. package/es/components/SidePanel/SidePanel.js +25 -26
  34. package/es/components/TagSet/TagSet.js +5 -7
  35. package/es/components/Tearsheet/TearsheetShell.js +4 -6
  36. package/es/components/index.js +1 -1
  37. package/es/global/js/hooks/useResizeObserver.js +74 -0
  38. package/es/global/js/package-settings.js +34 -4
  39. package/es/global/js/utils/test-helper.js +34 -3
  40. package/es/settings.js +26 -30
  41. package/lib/components/AboutModal/AboutModal.js +3 -4
  42. package/lib/components/ActionBar/ActionBar.js +9 -18
  43. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +8 -13
  44. package/lib/components/ButtonSetWithOverflow/ButtonSetWithOverflow.js +7 -11
  45. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +4 -4
  46. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -4
  47. package/lib/components/Datagrid/index.js +7 -0
  48. package/lib/components/Datagrid/useActionsColumn.js +7 -1
  49. package/lib/components/Datagrid/useCustomizeColumns.js +4 -0
  50. package/lib/components/Datagrid/useEditableCell.js +20 -0
  51. package/lib/components/Datagrid/useExpandedRow.js +4 -0
  52. package/lib/components/Datagrid/useFiltering.js +4 -0
  53. package/lib/components/Datagrid/useInlineEdit.js +19 -8
  54. package/lib/components/Datagrid/useNestedRows.js +9 -6
  55. package/lib/components/ExampleComponent/ExampleComponent.js +35 -4
  56. package/lib/components/ExampleComponent/useExample.js +58 -0
  57. package/lib/components/InlineEditV1/InlineEditV1.js +3 -1
  58. package/lib/components/NonLinearReading/NonLinearReading.js +6 -6
  59. package/lib/components/PageHeader/PageHeader.js +28 -31
  60. package/lib/components/SidePanel/SidePanel.js +25 -26
  61. package/lib/components/TagSet/TagSet.js +5 -7
  62. package/lib/components/Tearsheet/TearsheetShell.js +4 -6
  63. package/lib/components/index.js +6 -0
  64. package/lib/global/js/hooks/useResizeObserver.js +83 -0
  65. package/lib/global/js/package-settings.js +33 -3
  66. package/lib/global/js/utils/test-helper.js +37 -5
  67. package/lib/settings.js +26 -30
  68. package/package.json +2 -3
  69. package/scss/components/NonLinearReading/_non-linear-reading.scss +76 -67
  70. package/scss/components/NonLinearReading/_storybook-styles.scss +16 -0
@@ -14,7 +14,7 @@ var _react = _interopRequireWildcard(require("react"));
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
  var _layout = require("@carbon/layout");
16
16
  var _classnames = _interopRequireDefault(require("classnames"));
17
- var _reactResizeDetector = require("react-resize-detector");
17
+ var _useResizeObserver = require("../../global/js/hooks/useResizeObserver");
18
18
  var _carbonComponentsReact = require("carbon-components-react");
19
19
  var _hooks = require("../../global/js/hooks");
20
20
  var _devtools = require("../../global/js/utils/devtools");
@@ -39,7 +39,7 @@ var defaults = {
39
39
  narrowGrid: false
40
40
  };
41
41
  var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
42
- var _withoutBackground, _enableBreadcrumbScro, _ref6, _cx2, _ref7, _cx4, _cx7;
42
+ var _withoutBackground, _enableBreadcrumbScro, _ref7, _cx2, _ref8, _cx4, _cx7;
43
43
  var actionBarItems = _ref.actionBarItems,
44
44
  actionBarMenuOptionsClass = _ref.actionBarMenuOptionsClass,
45
45
  actionBarOverflowAriaLabel = _ref.actionBarOverflowAriaLabel,
@@ -176,7 +176,8 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
176
176
  };
177
177
 
178
178
  /* istanbul ignore next */
179
- var handleResizeActionBarColumn = function handleResizeActionBarColumn(width) {
179
+ var handleResizeActionBarColumn = function handleResizeActionBarColumn(_ref4) {
180
+ var width = _ref4.width;
180
181
  /* don't know how to test resize */
181
182
  /* istanbul ignore next */
182
183
  setActionBarColumnWidth(width);
@@ -250,8 +251,8 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
250
251
  (0, _hooks.useNearestScroll)(headerRef,
251
252
  // on scroll or various layout changes check updates if needed
252
253
  // istanbul ignore next
253
- function (_ref4) {
254
- var current = _ref4.current;
254
+ function (_ref5) {
255
+ var current = _ref5.current;
255
256
  setPageHeaderStyles(function (prev) {
256
257
  return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2.default)({}, "--".concat(_PageHeaderUtils.blockClass, "--breadcrumb-top"), "".concat(metrics.headerOffset, "px")));
257
258
  });
@@ -267,8 +268,8 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
267
268
  document.documentElement.style.setProperty("--".concat(_PageHeaderUtils.blockClass, "--tagset-tooltip-offset"), "".concat(tagsetTooltipOffset, "px"));
268
269
  setScrollYValue(current.scrollY);
269
270
  }, [metrics.headerHeight, metrics.headerTopValue, metrics.headerOffset, enableBreadcrumbScroll]);
270
- (0, _hooks.useWindowResize)(function (_ref5) {
271
- var current = _ref5.current;
271
+ (0, _hooks.useWindowResize)(function (_ref6) {
272
+ var current = _ref6.current;
272
273
  // on window resize and other updates some values may have changed
273
274
  checkUpdateVerticalSpace();
274
275
  setWidthIsNarrow(current.innerWidth / 16 < parseInt(_layout.breakpoints.md.width)); // small (below medium) media query
@@ -314,15 +315,11 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
314
315
  (0, _PageHeaderUtils.utilSetCollapsed)(collapseHeader, metrics.headerOffset, metrics.headerTopValue);
315
316
  }
316
317
  }, [collapseHeader, metrics.headerOffset, metrics.headerTopValue]);
317
- (0, _reactResizeDetector.useResizeDetector)({
318
- onResize: handleResizeActionBarColumn,
319
- targetRef: sizingContainerRef,
320
- handleWidth: true
318
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
319
+ callback: handleResizeActionBarColumn
321
320
  });
322
- (0, _reactResizeDetector.useResizeDetector)({
323
- onResize: handleResize,
324
- targetRef: headerRef,
325
- handleHeight: true
321
+ (0, _useResizeObserver.useResizeObserver)(headerRef, {
322
+ callback: handleResize
326
323
  });
327
324
 
328
325
  // Determine what form of title to display in the breadcrumb
@@ -331,7 +328,7 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
331
328
  className: "".concat(_PageHeaderUtils.blockClass, "--offset-top-measuring-element"),
332
329
  ref: offsetTopMeasuringRef
333
330
  }), /*#__PURE__*/_react.default.createElement("section", (0, _extends2.default)({}, rest, {
334
- className: (0, _classnames.default)([_PageHeaderUtils.blockClass, "".concat(_PageHeaderUtils.blockClass, "--no-margins-below-row"), className, (_ref6 = {}, (0, _defineProperty2.default)(_ref6, "".concat(_PageHeaderUtils.blockClass, "--has-navigation"), navigation || tags), (0, _defineProperty2.default)(_ref6, "".concat(_PageHeaderUtils.blockClass, "--has-navigation-tags-only"), !navigation && tags), _ref6)]),
331
+ className: (0, _classnames.default)([_PageHeaderUtils.blockClass, "".concat(_PageHeaderUtils.blockClass, "--no-margins-below-row"), className, (_ref7 = {}, (0, _defineProperty2.default)(_ref7, "".concat(_PageHeaderUtils.blockClass, "--has-navigation"), navigation || tags), (0, _defineProperty2.default)(_ref7, "".concat(_PageHeaderUtils.blockClass, "--has-navigation-tags-only"), !navigation && tags), _ref7)]),
335
332
  style: pageHeaderStyles,
336
333
  ref: headerRef
337
334
  }, (0, _devtools.getDevtoolsProps)(componentName)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Grid, {
@@ -352,7 +349,7 @@ var PageHeader = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
352
349
  overflowAriaLabel: breadcrumbOverflowAriaLabel,
353
350
  breadcrumbs: breadcrumbs && breadcrumbItemForTitle ? breadcrumbs.concat(breadcrumbItemForTitle) : breadcrumbItemForTitle ? [breadcrumbItemForTitle] : breadcrumbs // breadcrumbs may be null or undefined
354
351
  }) : null), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Column, {
355
- className: (0, _classnames.default)(["".concat(_PageHeaderUtils.blockClass, "__action-bar-column ").concat(_PageHeaderUtils.blockClass, "__action-bar-column--background"), (_ref7 = {}, (0, _defineProperty2.default)(_ref7, "".concat(_PageHeaderUtils.blockClass, "__action-bar-column--has-page-actions"), pageActions), (0, _defineProperty2.default)(_ref7, "".concat(_PageHeaderUtils.blockClass, "__action-bar-column--influenced-by-collapse-button"), spaceForCollapseButton), _ref7)])
352
+ className: (0, _classnames.default)(["".concat(_PageHeaderUtils.blockClass, "__action-bar-column ").concat(_PageHeaderUtils.blockClass, "__action-bar-column--background"), (_ref8 = {}, (0, _defineProperty2.default)(_ref8, "".concat(_PageHeaderUtils.blockClass, "__action-bar-column--has-page-actions"), pageActions), (0, _defineProperty2.default)(_ref8, "".concat(_PageHeaderUtils.blockClass, "__action-bar-column--influenced-by-collapse-button"), spaceForCollapseButton), _ref8)])
356
353
  }, /*#__PURE__*/_react.default.createElement("div", {
357
354
  className: "".concat(_PageHeaderUtils.blockClass, "__action-bar-column-content"),
358
355
  ref: sizingContainerRef
@@ -503,8 +500,8 @@ PageHeader.propTypes = _objectSpread({
503
500
  *
504
501
  * NOTE: This prop is required if actionBarItems are supplied
505
502
  */
506
- actionBarOverflowAriaLabel: _propTypes.default.string.isRequired.if(function (_ref9) {
507
- var actionBarItems = _ref9.actionBarItems;
503
+ actionBarOverflowAriaLabel: _propTypes.default.string.isRequired.if(function (_ref10) {
504
+ var actionBarItems = _ref10.actionBarItems;
508
505
  return actionBarItems && actionBarItems.length > 0;
509
506
  }),
510
507
  /**
@@ -535,8 +532,8 @@ PageHeader.propTypes = _objectSpread({
535
532
  * If the user supplies breadcrumbs then this property is required.
536
533
  * It is used in an overflow menu when there is insufficient space to display all breadcrumbs inline.
537
534
  */
538
- breadcrumbOverflowAriaLabel: _propTypes.default.string.isRequired.if(function (_ref10) {
539
- var breadcrumbs = _ref10.breadcrumbs;
535
+ breadcrumbOverflowAriaLabel: _propTypes.default.string.isRequired.if(function (_ref11) {
536
+ var breadcrumbs = _ref11.breadcrumbs;
540
537
  return breadcrumbs && breadcrumbs.length > 0;
541
538
  }),
542
539
  /**
@@ -570,8 +567,8 @@ PageHeader.propTypes = _objectSpread({
570
567
  /**
571
568
  * A text version of the `label` for display, required if `label` is not a string.
572
569
  */
573
- title: _propTypes.default.string.isRequired.if(function (_ref11) {
574
- var label = _ref11.label;
570
+ title: _propTypes.default.string.isRequired.if(function (_ref12) {
571
+ var label = _ref12.label;
575
572
  return typeof label !== 'string';
576
573
  })
577
574
  })),
@@ -597,9 +594,9 @@ PageHeader.propTypes = _objectSpread({
597
594
  * If `hasCollapseHeaderToggle` is set and `withoutBackground` is unset/falsy then assistive text is
598
595
  * required for both the expend and collapse states of the button component used.
599
596
  */
600
- collapseHeaderIconDescription: _propTypes.default.string.isRequired.if(function (_ref12) {
601
- var withoutBackground = _ref12.withoutBackground,
602
- hasCollapseHeaderToggle = _ref12.hasCollapseHeaderToggle;
597
+ collapseHeaderIconDescription: _propTypes.default.string.isRequired.if(function (_ref13) {
598
+ var withoutBackground = _ref13.withoutBackground,
599
+ hasCollapseHeaderToggle = _ref13.hasCollapseHeaderToggle;
603
600
  return !withoutBackground && hasCollapseHeaderToggle;
604
601
  }),
605
602
  /**
@@ -616,9 +613,9 @@ PageHeader.propTypes = _objectSpread({
616
613
  * If `hasCollapseHeaderToggle` is set and `withoutBackground` is unset/falsy then assistive text is
617
614
  * required for both the expend and collapse states of the button component used.
618
615
  */
619
- expandHeaderIconDescription: _propTypes.default.string.isRequired.if(function (_ref13) {
620
- var withoutBackground = _ref13.withoutBackground,
621
- hasCollapseHeaderToggle = _ref13.hasCollapseHeaderToggle;
616
+ expandHeaderIconDescription: _propTypes.default.string.isRequired.if(function (_ref14) {
617
+ var withoutBackground = _ref14.withoutBackground,
618
+ hasCollapseHeaderToggle = _ref14.hasCollapseHeaderToggle;
622
619
  return !withoutBackground && hasCollapseHeaderToggle;
623
620
  }),
624
621
  /**
@@ -682,8 +679,8 @@ PageHeader.propTypes = _objectSpread({
682
679
  *
683
680
  * NOTE: This prop is required if pageActions are supplied
684
681
  */
685
- pageActionsOverflowLabel: _propTypes.default.node.isRequired.if(function (_ref14) {
686
- var pageActions = _ref14.pageActions;
682
+ pageActionsOverflowLabel: _propTypes.default.node.isRequired.if(function (_ref15) {
683
+ var pageActions = _ref15.pageActions;
687
684
  return pageActions && pageActions.length > 0 && !pageActions.content;
688
685
  }),
689
686
  /**
@@ -14,7 +14,7 @@ var _react = _interopRequireWildcard(require("react"));
14
14
  var _framerMotion = require("framer-motion");
15
15
  var _propTypes = _interopRequireDefault(require("prop-types"));
16
16
  var _classnames = _interopRequireDefault(require("classnames"));
17
- var _reactResizeDetector = require("react-resize-detector");
17
+ var _useResizeObserver = require("../../global/js/hooks/useResizeObserver");
18
18
  var _motion = require("@carbon/motion");
19
19
  var _devtools = require("../../global/js/utils/devtools");
20
20
  var _propsHelper = require("../../global/js/utils/props-helper");
@@ -51,7 +51,7 @@ var defaults = {
51
51
  * Side panels keep users in-context of a page while performing tasks like navigating, editing, viewing details, or configuring something new.
52
52
  */
53
53
  var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
54
- var _window, _ref4, _cx4;
54
+ var _window, _ref5, _cx4;
55
55
  var actionToolbarButtons = _ref.actionToolbarButtons,
56
56
  actions = _ref.actions,
57
57
  _ref$animateTitle = _ref.animateTitle,
@@ -163,8 +163,9 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
163
163
  }, [labelText, title]);
164
164
 
165
165
  /* istanbul ignore next */
166
- var handleResize = function handleResize(width, height) {
166
+ var handleResize = function handleResize(_ref2) {
167
167
  var _sidePanelOuter$style3;
168
+ var height = _ref2.height;
168
169
  setPanelHeight(height);
169
170
  var sidePanelOuter = document.querySelector("#".concat(blockClass, "-outer"));
170
171
  var actionsContainer = getActionsContainerElement();
@@ -351,9 +352,9 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
351
352
 
352
353
  // adds focus trap functionality
353
354
  /* istanbul ignore next */
354
- var handleBlur = function handleBlur(_ref2) {
355
- var oldActiveNode = _ref2.target,
356
- currentActiveNode = _ref2.relatedTarget;
355
+ var handleBlur = function handleBlur(_ref3) {
356
+ var oldActiveNode = _ref3.target,
357
+ currentActiveNode = _ref3.relatedTarget;
357
358
  // focus trap should only be set if the side panel is a `slideOver` type
358
359
  if (open && sidePanelInnerRef && !slideIn) {
359
360
  (0, _wrapFocus.default)({
@@ -366,7 +367,7 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
366
367
  }
367
368
  };
368
369
  var primaryActionContainerClassNames = (0, _classnames.default)(["".concat(blockClass, "__actions-container"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__actions-container-condensed"), condensedActions)]);
369
- var mainPanelClassNames = (0, _classnames.default)([blockClass, className, "".concat(blockClass, "__container"), "".concat(blockClass, "__container--").concat(size), (_ref4 = {}, (0, _defineProperty2.default)(_ref4, "".concat(blockClass, "__container-right-placement"), placement === 'right'), (0, _defineProperty2.default)(_ref4, "".concat(blockClass, "__container-left-placement"), placement === 'left'), (0, _defineProperty2.default)(_ref4, "".concat(blockClass, "__container-with-action-toolbar"), actionToolbarButtons && actionToolbarButtons.length), (0, _defineProperty2.default)(_ref4, "".concat(blockClass, "__container-without-overlay"), !includeOverlay && !slideIn), (0, _defineProperty2.default)(_ref4, "".concat(blockClass, "__container-is-animating"), !animationComplete || !open), _ref4)]);
370
+ var mainPanelClassNames = (0, _classnames.default)([blockClass, className, "".concat(blockClass, "__container"), "".concat(blockClass, "__container--").concat(size), (_ref5 = {}, (0, _defineProperty2.default)(_ref5, "".concat(blockClass, "__container-right-placement"), placement === 'right'), (0, _defineProperty2.default)(_ref5, "".concat(blockClass, "__container-left-placement"), placement === 'left'), (0, _defineProperty2.default)(_ref5, "".concat(blockClass, "__container-with-action-toolbar"), actionToolbarButtons && actionToolbarButtons.length), (0, _defineProperty2.default)(_ref5, "".concat(blockClass, "__container-without-overlay"), !includeOverlay && !slideIn), (0, _defineProperty2.default)(_ref5, "".concat(blockClass, "__container-is-animating"), !animationComplete || !open), _ref5)]);
370
371
  var renderHeader = function renderHeader() {
371
372
  var _cx, _cx2;
372
373
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
@@ -395,17 +396,17 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
395
396
  className: (0, _classnames.default)("".concat(blockClass, "__subtitle-text"), (_cx2 = {}, (0, _defineProperty2.default)(_cx2, "".concat(blockClass, "__subtitle-text-no-animation"), !animateTitle), (0, _defineProperty2.default)(_cx2, "".concat(blockClass, "__subtitle-text-no-animation-no-action-toolbar"), !animateTitle && (!actionToolbarButtons || !actionToolbarButtons.length)), (0, _defineProperty2.default)(_cx2, "".concat(blockClass, "__subtitle-text-is-animating"), !animationComplete && animateTitle), (0, _defineProperty2.default)(_cx2, "".concat(blockClass, "__subtitle-without-title"), !title), _cx2))
396
397
  }, subtitle), actionToolbarButtons && actionToolbarButtons.length && /*#__PURE__*/_react.default.createElement("div", {
397
398
  className: (0, _classnames.default)("".concat(blockClass, "__action-toolbar"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__action-toolbar-no-animation"), !animateTitle))
398
- }, actionToolbarButtons.map(function (_ref5) {
399
- var label = _ref5.label,
400
- kind = _ref5.kind,
401
- icon = _ref5.icon,
402
- tooltipPosition = _ref5.tooltipPosition,
403
- tooltipAlignment = _ref5.tooltipAlignment,
404
- leading = _ref5.leading,
405
- disabled = _ref5.disabled,
406
- className = _ref5.className,
407
- onClick = _ref5.onClick,
408
- rest = (0, _objectWithoutProperties2.default)(_ref5, _excluded2);
399
+ }, actionToolbarButtons.map(function (_ref6) {
400
+ var label = _ref6.label,
401
+ kind = _ref6.kind,
402
+ icon = _ref6.icon,
403
+ tooltipPosition = _ref6.tooltipPosition,
404
+ tooltipAlignment = _ref6.tooltipAlignment,
405
+ leading = _ref6.leading,
406
+ disabled = _ref6.disabled,
407
+ className = _ref6.className,
408
+ onClick = _ref6.onClick,
409
+ rest = (0, _objectWithoutProperties2.default)(_ref6, _excluded2);
409
410
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, (0, _extends2.default)({}, rest, {
410
411
  key: label,
411
412
  kind: kind || 'ghost',
@@ -433,10 +434,8 @@ var SidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
433
434
  }, title));
434
435
  };
435
436
  var contentRef = ref || sidePanelRef;
436
- (0, _reactResizeDetector.useResizeDetector)({
437
- handleHeight: true,
438
- onResize: handleResize,
439
- targetRef: contentRef
437
+ (0, _useResizeObserver.useResizeObserver)(contentRef, {
438
+ callback: handleResize
440
439
  });
441
440
  return /*#__PURE__*/_react.default.createElement(_framerMotion.AnimatePresence, null, open && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_framerMotion.motion.div, (0, _extends2.default)({}, (0, _devtools.getDevtoolsProps)(componentName), rest, {
442
441
  id: "".concat(blockClass, "-outer"),
@@ -590,8 +589,8 @@ SidePanel.propTypes = {
590
589
  * This is the selector to the element that contains all of the page content that will shrink if the panel is a slide in.
591
590
  * This prop is required when using the `slideIn` variant of the side panel.
592
591
  */
593
- selectorPageContent: _propTypes.default.string.isRequired.if(function (_ref7) {
594
- var slideIn = _ref7.slideIn;
592
+ selectorPageContent: _propTypes.default.string.isRequired.if(function (_ref8) {
593
+ var slideIn = _ref8.slideIn;
595
594
  return slideIn;
596
595
  }),
597
596
  /**
@@ -614,8 +613,8 @@ SidePanel.propTypes = {
614
613
  /**
615
614
  * Sets the title text
616
615
  */
617
- title: _propTypes.default.string.isRequired.if(function (_ref8) {
618
- var labelText = _ref8.labelText;
616
+ title: _propTypes.default.string.isRequired.if(function (_ref9) {
617
+ var labelText = _ref9.labelText;
619
618
  return labelText;
620
619
  })
621
620
  };
@@ -17,7 +17,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
17
17
  var _TagSetOverflow = require("./TagSetOverflow");
18
18
  var _TagSetModal = require("./TagSetModal");
19
19
  var _carbonComponentsReact = require("carbon-components-react");
20
- var _reactResizeDetector = require("react-resize-detector");
20
+ var _useResizeObserver = require("../../global/js/hooks/useResizeObserver");
21
21
  var _devtools = require("../../global/js/utils/devtools");
22
22
  var _propsHelper = require("../../global/js/utils/props-helper");
23
23
  var _settings = require("../../settings");
@@ -205,13 +205,11 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
205
205
  var handleModalClose = function handleModalClose() {
206
206
  setShowAllModalOpen(false);
207
207
  };
208
- (0, _reactResizeDetector.useResizeDetector)({
209
- onResize: handleSizerTagsResize,
210
- targetRef: sizingContainerRef
208
+ (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, {
209
+ callback: handleSizerTagsResize
211
210
  });
212
- (0, _reactResizeDetector.useResizeDetector)({
213
- onResize: handleResize,
214
- targetRef: tagSetRef
211
+ (0, _useResizeObserver.useResizeObserver)(tagSetRef, {
212
+ callback: handleResize
215
213
  });
216
214
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
217
215
  className: (0, _classnames.default)([blockClass, className]),
@@ -12,7 +12,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _reactDom = require("react-dom");
15
- var _reactResizeDetector = require("react-resize-detector");
15
+ var _useResizeObserver2 = require("../../global/js/hooks/useResizeObserver");
16
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
  var _classnames = _interopRequireDefault(require("classnames"));
18
18
  var _settings = require("../../settings");
@@ -93,12 +93,10 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
93
93
  }
94
94
  }, [portalTargetIn]);
95
95
  var localRef = (0, _react.useRef)();
96
+ var resizer = (0, _react.useRef)(null);
96
97
  var modalRef = ref || localRef;
97
- var _useResizeDetector = (0, _reactResizeDetector.useResizeDetector)({
98
- handleHeight: false
99
- }),
100
- width = _useResizeDetector.width,
101
- resizer = _useResizeDetector.ref;
98
+ var _useResizeObserver = (0, _useResizeObserver2.useResizeObserver)(resizer),
99
+ width = _useResizeObserver.width;
102
100
 
103
101
  // Keep track of the stack depth and our position in it (1-based, 0=closed)
104
102
  var _useState3 = (0, _react.useState)(0),
@@ -393,6 +393,12 @@ Object.defineProperty(exports, "useDisableSelectRows", {
393
393
  return _Datagrid.useDisableSelectRows;
394
394
  }
395
395
  });
396
+ Object.defineProperty(exports, "useEditableCell", {
397
+ enumerable: true,
398
+ get: function get() {
399
+ return _Datagrid.useEditableCell;
400
+ }
401
+ });
396
402
  Object.defineProperty(exports, "useExpandedRow", {
397
403
  enumerable: true,
398
404
  get: function get() {
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useResizeObserver = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = require("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
+
17
+ var useResizeObserver = function useResizeObserver(ref) {
18
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
19
+ callback: null,
20
+ throttleInterval: 0
21
+ };
22
+ var callback = options.callback,
23
+ throttleInterval = options.throttleInterval;
24
+ var _useState = (0, _react.useState)(0),
25
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
26
+ width = _useState2[0],
27
+ setWidth = _useState2[1];
28
+ var _useState3 = (0, _react.useState)(0),
29
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
30
+ height = _useState4[0],
31
+ setHeight = _useState4[1];
32
+ var throttleTimeout = (0, _react.useRef)(null);
33
+ var entriesToHandle = (0, _react.useRef)(null);
34
+ (0, _react.useLayoutEffect)(function () {
35
+ if (!(ref !== null && ref !== void 0 && ref.current)) {
36
+ return;
37
+ }
38
+ var doCallbacks = function doCallbacks() {
39
+ if (!(ref !== null && ref !== void 0 && ref.current) || !Array.isArray(entriesToHandle === null || entriesToHandle === void 0 ? void 0 : entriesToHandle.current)) {
40
+ return;
41
+ }
42
+ var entry = entriesToHandle.current[0];
43
+ setWidth(entry.contentRect.width);
44
+ setHeight(entry.contentRect.height);
45
+ throttleTimeout.current = null;
46
+ callback && callback(entry.contentRect);
47
+ };
48
+ var observer = new ResizeObserver(function (entries) {
49
+ // always update entriesToHandle
50
+ entriesToHandle.current = entries;
51
+ if (throttleInterval) {
52
+ // if a throttleInterval check for running timeout
53
+ if (throttleTimeout.current === null) {
54
+ // no live timeout set entries to handle and move on
55
+
56
+ // set up throttle
57
+ throttleTimeout.current = setTimeout(function () {
58
+ // do callbacks
59
+ doCallbacks();
60
+ // reset throttle
61
+ throttleTimeout.current = null;
62
+ }, throttleInterval);
63
+ }
64
+ } else {
65
+ // no throttle do callbacks every time
66
+ doCallbacks();
67
+ }
68
+ });
69
+
70
+ // observe all refs passed
71
+ observer.observe(ref.current);
72
+ return function () {
73
+ observer.disconnect();
74
+ observer = null;
75
+ };
76
+ // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ }, [ref, options]);
78
+ return {
79
+ width: width,
80
+ height: height
81
+ };
82
+ };
83
+ exports.useResizeObserver = useResizeObserver;
@@ -79,7 +79,15 @@ var defaults = {
79
79
  // feature level flags
80
80
  feature: {
81
81
  'a-new-feature': false,
82
- 'default-portal-target-body': true
82
+ 'default-portal-target-body': true,
83
+ 'Datagrid.useExpandedRow': false,
84
+ 'Datagrid.useNestedRows': false,
85
+ 'Datagrid.useInlineEdit': false,
86
+ 'Datagrid.useActionsColumn': false,
87
+ 'Datagrid.useFiltering': false,
88
+ 'Datagrid.useCustomizeColumns': false,
89
+ 'ExampleComponent.secondaryIcon': false,
90
+ 'ExampleComponent.useExample': false
83
91
  }
84
92
  };
85
93
  var warningMessageComponent = function warningMessageComponent(property) {
@@ -88,6 +96,9 @@ var warningMessageComponent = function warningMessageComponent(property) {
88
96
  var warningMessageFeature = function warningMessageFeature(property) {
89
97
  return "Carbon for IBM Products (WARNING): Feature \"".concat(property, "\" enabled via feature flags.");
90
98
  };
99
+ var errorMessageFeature = function errorMessageFeature(property) {
100
+ return "Carbon for IBM Products (Error): Feature \"".concat(property, "\" not enabled. To enable see the notes on feature flags in the README.");
101
+ };
91
102
  var warningMessageAllComponents = 'Carbon for IBM Products (WARNING): All components enabled through use of setAllComponents. This includes components that have not yet completed their review process.';
92
103
  var warningMessageAllFeatures = 'Carbon for IBM Products (WARNING): All features enabled through use of setAllFeatures';
93
104
 
@@ -109,7 +120,10 @@ var allFeatures = all.INITIAL;
109
120
  var silent = false;
110
121
  var component = new Proxy(_objectSpread({}, defaults.component), {
111
122
  set: function set(target, property, value) {
112
- value && !silent && console.warn(warningMessageComponent(property));
123
+ if (target[property] !== true && !silent && value) {
124
+ // not already true, not silent, and now true
125
+ console.warn(warningMessageComponent(property));
126
+ }
113
127
  target[property] = value;
114
128
  return true; // value set
115
129
  },
@@ -120,7 +134,15 @@ var component = new Proxy(_objectSpread({}, defaults.component), {
120
134
  });
121
135
  var feature = new Proxy(_objectSpread({}, defaults.feature), {
122
136
  set: function set(target, property, value) {
123
- value && !silent && console.warn(warningMessageFeature(property));
137
+ // If we receive a feature flag that doesn't exist in our defaults we should not log
138
+ // a warning message and instead just return
139
+ if (!Object.getOwnPropertyDescriptor(defaults.feature, property)) {
140
+ return true;
141
+ }
142
+ if (target[property] !== true && !silent && value) {
143
+ // not already true, not silent, and now true
144
+ console.warn(warningMessageFeature(property));
145
+ }
124
146
  target[property] = value;
125
147
  return true; // value set
126
148
  },
@@ -149,6 +171,14 @@ var _default = {
149
171
  var byDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
150
172
  return byDefault ? defaults.feature[featureName] : feature[featureName];
151
173
  },
174
+ checkReportFeatureEnabled: function checkReportFeatureEnabled(featureName) {
175
+ if (feature[featureName]) {
176
+ // NOTE: Warning emitted if feature flag is enabled (see Proxy above)
177
+ return true;
178
+ } else {
179
+ console.error(errorMessageFeature(featureName));
180
+ }
181
+ },
152
182
  isFeaturePublic: function isFeaturePublic(featureName) {
153
183
  var byDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
154
184
  return Object.prototype.hasOwnProperty.call(byDefault ? defaults.feature : feature, featureName);
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.scssCompile = exports.scssCheck = exports.required = exports.mockHTMLElement = exports.invalid = exports.expectWarnAsync = exports.expectWarn = exports.expectMultipleWarn = exports.expectMultipleError = exports.expectError = exports.deprecatedUsage = exports.deprecated = void 0;
7
+ exports.scssCompile = exports.scssCheck = exports.required = exports.mockHTMLElement = exports.invalid = exports.expectWarnAsync = exports.expectWarn = exports.expectMultipleWarn = exports.expectMultipleError = exports.expectLogging = exports.expectError = exports.deprecatedUsage = exports.deprecated = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
@@ -194,6 +194,40 @@ var expectMultipleWarn = function expectMultipleWarn(messages, test) {
194
194
  warn.mockRestore();
195
195
  return result;
196
196
  };
197
+ exports.expectMultipleWarn = expectMultipleWarn;
198
+ var checkLogging = function checkLogging(mock, message) {
199
+ if (message) {
200
+ var _expect4;
201
+ expect(mock).toBeCalled();
202
+ (_expect4 = expect(mock)).toHaveBeenCalledWith.apply(_expect4, (0, _toConsumableArray2.default)(makeMatcherArray(message)));
203
+ }
204
+ };
205
+
206
+ /**
207
+ * A helper function to enable a test to expect a single call to
208
+ * console.error, for example when intentionally omitting a required prop
209
+ * or supplying an invalid prop type or value for the purposes of the test.
210
+ * @param {errors: {string|regex|function|[]}, warnings: {string|regex|function|[]}} messages the expected parameters for the call to
211
+ * console.error or console.warn, which must be called exactly once. A single string or regex or an
212
+ * expect matcher can be used to match a single-argument call to console.error (most common),
213
+ * while an array of strings and/or regex and/or expect matchers can be used to match a
214
+ * multiple-argument call. Strings can be full or substring matches to the corresponding
215
+ * argument.
216
+ * @param {Function} test the test function to call, during which the call to
217
+ * console.error will be expected.
218
+ */
219
+ var expectLogging = function expectLogging(_ref2, test) {
220
+ var errors = _ref2.errors,
221
+ warnings = _ref2.warnings;
222
+ var error = jest.spyOn(console, 'error').mockImplementation(jest.fn());
223
+ var warn = jest.spyOn(console, 'warn').mockImplementation(jest.fn());
224
+ var result = test();
225
+ checkLogging(error, errors);
226
+ checkLogging(warn, warnings);
227
+ error.mockRestore();
228
+ warn.mockRestore();
229
+ return result;
230
+ };
197
231
 
198
232
  /**
199
233
  * A helper function to enable a test to expect a single call to
@@ -208,13 +242,11 @@ var expectMultipleWarn = function expectMultipleWarn(messages, test) {
208
242
  * @param {Function} test the test function to call, during which the call to
209
243
  * console.error will be expected.
210
244
  */
211
- exports.expectMultipleWarn = expectMultipleWarn;
245
+ exports.expectLogging = expectLogging;
212
246
  var expectError = function expectError(message, test) {
213
- var _expect4;
214
247
  var error = jest.spyOn(console, 'error').mockImplementation(jest.fn());
215
248
  var result = test();
216
- expect(error).toBeCalledTimes(1);
217
- (_expect4 = expect(error)).toHaveBeenCalledWith.apply(_expect4, (0, _toConsumableArray2.default)(makeMatcherArray(message)));
249
+ checkLogging(error, message);
218
250
  error.mockRestore();
219
251
  return result;
220
252
  };
package/lib/settings.js CHANGED
@@ -43,24 +43,22 @@ _packageSettings.default.logDeprecated = function (component, name) {
43
43
  // Note that the returned stub carries any other properties which had already
44
44
  // been assigned (eg propTypes, displayName, etc).
45
45
  _packageSettings.default.checkComponentEnabled = function (component, name) {
46
- _packageSettings.default.logDeprecated(component, name);
47
46
  if (component.render) {
48
47
  // The component is a forward-ref, so make a stub forward-ref.
49
48
  var forward = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
50
- return (
51
- // Replace the stub's render fn so this test only happens once.
52
- (forward.render = _packageSettings.default.isComponentEnabled(name) || !_packageSettings.default.isComponentPublic(name) ?
53
- // If the component is enabled, or if it's not a public component,
54
- // replace the stub's render fn with the component's render fn.
55
- component.render :
56
- // Note that Canary is a direct render fn (not a forward-ref) and
57
- // will ignore the passed props and ref (if any)
58
- _Canary.Canary.bind(undefined, {
59
- componentName: name
60
- }))(
61
- // Call it now (after this it will be directly called).
62
- props, ref)
63
- );
49
+ _packageSettings.default.logDeprecated(component, name); // may log don't care about result
50
+ // Replace the stub's render fn so this test only happens once.
51
+ return (forward.render = _packageSettings.default.isComponentEnabled(name) || !_packageSettings.default.isComponentPublic(name) ?
52
+ // If the component is enabled, or if it's not a public component,
53
+ // replace the stub's render fn with the component's render fn.
54
+ component.render :
55
+ // Note that Canary is a direct render fn (not a forward-ref) and
56
+ // will ignore the passed props and ref (if any)
57
+ _Canary.Canary.bind(undefined, {
58
+ componentName: name
59
+ }))(
60
+ // Call it now (after this it will be directly called).
61
+ props, ref);
64
62
  });
65
63
 
66
64
  // Transfer object properties already assigned (eg propTypes, displayName)
@@ -70,22 +68,20 @@ _packageSettings.default.checkComponentEnabled = function (component, name) {
70
68
  } else {
71
69
  // The component is a direct render fn, so make a stub render fn.
72
70
  var _render = function render(props) {
73
- return (
74
- // Replace the stub render fn so this test only happens once.
75
- (_render = _packageSettings.default.isComponentEnabled(name) || !_packageSettings.default.isComponentPublic(name) ?
76
- // If the component is enabled, or if it's not a public component,
77
- // replace the stub render fn with the component render fn.
78
- component :
79
- // Replace the stub render fn with the Canary render fn, which will
80
- // ignore the passed props.
81
- _Canary.Canary.bind(undefined, {
82
- componentName: name
83
- }))(
84
- // Call it now (after this it will be directly called).
85
- props)
86
- );
71
+ _packageSettings.default.logDeprecated(component, name); // may log don't care about result
72
+ // Replace the stub render fn so this test only happens once.
73
+ return (_render = _packageSettings.default.isComponentEnabled(name) || !_packageSettings.default.isComponentPublic(name) ?
74
+ // If the component is enabled, or if it's not a public component,
75
+ // replace the stub render fn with the component render fn.
76
+ component :
77
+ // Replace the stub render fn with the Canary render fn, which will
78
+ // ignore the passed props.
79
+ _Canary.Canary.bind(undefined, {
80
+ componentName: name
81
+ }))(
82
+ // Call it now (after this it will be directly called).
83
+ props);
87
84
  };
88
-
89
85
  // Transfer object properties already assigned (eg propTypes, displayName)
90
86
  // to a function which calls the stub render fn which checks the component
91
87
  // status when first used.