@carbon/ibm-products 2.60.0-rc.0 → 2.61.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/css/index-full-carbon.css +113 -497
  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 +64 -492
  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 +93 -492
  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 +93 -510
  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/ActionBar/ActionBar.d.ts +3 -3
  18. package/es/components/ActionBar/ActionBar.js +47 -150
  19. package/es/components/ActionBar/ActionBarOverflowItems.js +1 -1
  20. package/es/components/Checklist/ChecklistChart.js +1 -1
  21. package/es/components/Coachmark/Coachmark.js +1 -1
  22. package/es/components/CoachmarkOverlayElements/CoachmarkOverlayElements.js +1 -1
  23. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItem.js +3 -3
  24. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemDate/ConditionBuilderItemDate.js +4 -1
  25. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ItemOption.js +7 -2
  26. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ItemOptionForValueField.js +7 -2
  27. package/es/components/ConditionBuilder/utils/handleKeyboardEvents.js +15 -15
  28. package/es/components/ConditionBuilder/utils/util.d.ts +1 -0
  29. package/es/components/ConditionBuilder/utils/util.js +7 -1
  30. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +1 -3
  31. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useShouldDisableButtons.js +2 -2
  32. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -2
  33. package/es/components/Datagrid/useDatagrid.js +2 -2
  34. package/es/components/Datagrid/useInfiniteScroll.js +2 -5
  35. package/es/components/Datagrid/useRowIsMouseOver.d.ts +1 -1
  36. package/es/components/Datagrid/useRowIsMouseOver.js +2 -1
  37. package/es/components/Datagrid/useStickyColumn.d.ts +1 -1
  38. package/es/components/Datagrid/useStickyColumn.js +1 -1
  39. package/es/components/FilterSummary/FilterSummary.js +1 -1
  40. package/es/components/InterstitialScreen/InterstitialScreen.js +1 -1
  41. package/es/components/Nav/NavItem.js +1 -1
  42. package/es/components/NotificationsPanel/NotificationsPanel.d.ts +5 -0
  43. package/es/components/NotificationsPanel/NotificationsPanel.js +11 -17
  44. package/es/components/OptionsTile/OptionsTile.d.ts +2 -3
  45. package/es/components/OptionsTile/OptionsTile.js +49 -97
  46. package/es/components/PageHeader/PageHeader.js +16 -14
  47. package/es/components/PageHeader/PageHeaderTitle.js +2 -2
  48. package/es/components/ScrollGradient/ScrollGradient.js +74 -25
  49. package/es/components/ScrollGradient/constants.d.ts +0 -5
  50. package/es/components/ScrollGradient/constants.js +2 -47
  51. package/es/components/SteppedAnimatedMedia/SteppedAnimatedMedia.js +1 -1
  52. package/es/components/TagOverflow/TagOverflow.d.ts +5 -1
  53. package/es/components/Tearsheet/Tearsheet.d.ts +5 -1
  54. package/es/components/Tearsheet/TearsheetNarrow.d.ts +5 -1
  55. package/es/components/WebTerminal/WebTerminal.js +0 -13
  56. package/es/global/js/hooks/useControllableState.d.ts +12 -24
  57. package/es/global/js/hooks/useControllableState.js +18 -60
  58. package/es/global/js/hooks/useOverflowItems.d.ts +7 -2
  59. package/es/global/js/hooks/useOverflowItems.js +50 -17
  60. package/es/global/js/hooks/useOverflowString.d.ts +9 -0
  61. package/es/global/js/hooks/useOverflowString.js +52 -0
  62. package/es/global/js/hooks/usePresence.d.ts +1 -1
  63. package/es/global/js/hooks/usePresence.js +2 -2
  64. package/es/global/js/utils/checkForOverflow.js +1 -11
  65. package/es/global/js/utils/clamp.d.ts +7 -0
  66. package/es/global/js/utils/clamp.js +25 -0
  67. package/es/global/js/utils/debounce.d.ts +7 -0
  68. package/es/global/js/utils/debounce.js +30 -0
  69. package/es/global/js/utils/deepCompareObject.d.ts +7 -0
  70. package/es/global/js/utils/deepCompareObject.js +47 -0
  71. package/es/global/js/utils/throttle.d.ts +7 -0
  72. package/es/global/js/utils/throttle.js +19 -0
  73. package/es/global/js/utils/uuidv4.d.ts +2 -2
  74. package/es/global/js/utils/uuidv4.js +3 -2
  75. package/es/node_modules/@carbon/icons-react/es/generated/bucket-10.js +2787 -0
  76. package/es/node_modules/@carbon/icons-react/es/generated/bucket-3.js +1013 -943
  77. package/lib/components/ActionBar/ActionBar.d.ts +3 -3
  78. package/lib/components/ActionBar/ActionBar.js +45 -148
  79. package/lib/components/ActionBar/ActionBarOverflowItems.js +1 -1
  80. package/lib/components/Checklist/ChecklistChart.js +2 -2
  81. package/lib/components/Coachmark/Coachmark.js +2 -2
  82. package/lib/components/CoachmarkOverlayElements/CoachmarkOverlayElements.js +4 -4
  83. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItem.js +2 -2
  84. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemDate/ConditionBuilderItemDate.js +3 -0
  85. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ItemOption.js +6 -1
  86. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ItemOptionForValueField.js +6 -1
  87. package/lib/components/ConditionBuilder/utils/handleKeyboardEvents.js +15 -15
  88. package/lib/components/ConditionBuilder/utils/util.d.ts +1 -0
  89. package/lib/components/ConditionBuilder/utils/util.js +7 -0
  90. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/common.js +1 -3
  91. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useShouldDisableButtons.js +2 -2
  92. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -2
  93. package/lib/components/Datagrid/useDatagrid.js +2 -2
  94. package/lib/components/Datagrid/useInfiniteScroll.js +2 -5
  95. package/lib/components/Datagrid/useRowIsMouseOver.d.ts +1 -1
  96. package/lib/components/Datagrid/useRowIsMouseOver.js +3 -2
  97. package/lib/components/Datagrid/useStickyColumn.d.ts +1 -1
  98. package/lib/components/Datagrid/useStickyColumn.js +2 -2
  99. package/lib/components/FilterSummary/FilterSummary.js +2 -2
  100. package/lib/components/InterstitialScreen/InterstitialScreen.js +3 -3
  101. package/lib/components/Nav/NavItem.js +2 -2
  102. package/lib/components/NotificationsPanel/NotificationsPanel.d.ts +5 -0
  103. package/lib/components/NotificationsPanel/NotificationsPanel.js +11 -17
  104. package/lib/components/OptionsTile/OptionsTile.d.ts +2 -3
  105. package/lib/components/OptionsTile/OptionsTile.js +49 -97
  106. package/lib/components/PageHeader/PageHeader.js +16 -14
  107. package/lib/components/PageHeader/PageHeaderTitle.js +2 -2
  108. package/lib/components/ScrollGradient/ScrollGradient.js +72 -23
  109. package/lib/components/ScrollGradient/constants.d.ts +0 -5
  110. package/lib/components/ScrollGradient/constants.js +1 -48
  111. package/lib/components/SteppedAnimatedMedia/SteppedAnimatedMedia.js +2 -2
  112. package/lib/components/TagOverflow/TagOverflow.d.ts +5 -1
  113. package/lib/components/Tearsheet/Tearsheet.d.ts +5 -1
  114. package/lib/components/Tearsheet/TearsheetNarrow.d.ts +5 -1
  115. package/lib/components/WebTerminal/WebTerminal.js +0 -13
  116. package/lib/global/js/hooks/useControllableState.d.ts +12 -24
  117. package/lib/global/js/hooks/useControllableState.js +17 -59
  118. package/lib/global/js/hooks/useOverflowItems.d.ts +7 -2
  119. package/lib/global/js/hooks/useOverflowItems.js +49 -16
  120. package/lib/global/js/hooks/useOverflowString.d.ts +9 -0
  121. package/lib/global/js/hooks/useOverflowString.js +55 -0
  122. package/lib/global/js/hooks/usePresence.d.ts +1 -1
  123. package/lib/global/js/hooks/usePresence.js +2 -2
  124. package/lib/global/js/utils/checkForOverflow.js +0 -11
  125. package/lib/global/js/utils/clamp.d.ts +7 -0
  126. package/lib/global/js/utils/clamp.js +27 -0
  127. package/lib/global/js/utils/debounce.d.ts +7 -0
  128. package/lib/global/js/utils/debounce.js +32 -0
  129. package/lib/global/js/utils/deepCompareObject.d.ts +7 -0
  130. package/lib/global/js/utils/deepCompareObject.js +49 -0
  131. package/lib/global/js/utils/throttle.d.ts +7 -0
  132. package/lib/global/js/utils/throttle.js +21 -0
  133. package/lib/global/js/utils/uuidv4.d.ts +2 -2
  134. package/lib/global/js/utils/uuidv4.js +3 -2
  135. package/lib/node_modules/@carbon/icons-react/es/generated/bucket-10.js +2913 -0
  136. package/lib/node_modules/@carbon/icons-react/es/generated/bucket-3.js +1018 -948
  137. package/package.json +6 -7
  138. package/scss/components/NotificationsPanel/_notifications-panel.scss +33 -20
  139. package/scss/components/ScrollGradient/_scroll-gradient.scss +30 -0
  140. package/scss/components/UserAvatar/_user-avatar.scss +2 -6
  141. package/scss/components/WebTerminal/_web-terminal.scss +13 -1
  142. package/es/node_modules/@carbon/icons-react/es/generated/bucket-9.js +0 -2959
  143. package/lib/node_modules/@carbon/icons-react/es/generated/bucket-9.js +0 -3085
@@ -18,7 +18,7 @@ var icons = require('@carbon/react/icons');
18
18
  var index = require('../../_virtual/index.js');
19
19
  var TagSet = require('../TagSet/TagSet.js');
20
20
  var cx = require('classnames');
21
- var debounce = require('lodash/debounce');
21
+ var debounce = require('../../global/js/utils/debounce.js');
22
22
  var devtools = require('../../global/js/utils/devtools.js');
23
23
  var settings = require('../../settings.js');
24
24
  var uuidv4 = require('../../global/js/utils/uuidv4.js');
@@ -121,7 +121,7 @@ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
121
121
  setMultiline(false);
122
122
  }
123
123
  };
124
- var filterResize = debounce(handleFilterSummaryResize, 500);
124
+ var filterResize = debounce.debounce(handleFilterSummaryResize, 500);
125
125
  filterResize();
126
126
  }, [previousState === null || previousState === undefined ? undefined : previousState.multiline, multiline]);
127
127
  return /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({}, devtools.getDevtoolsProps(componentName), {
@@ -15,8 +15,8 @@ var Carousel = require('../Carousel/Carousel.js');
15
15
  require('../Carousel/CarouselItem.js');
16
16
  var index = require('../../_virtual/index.js');
17
17
  var SteppedAnimatedMedia = require('../SteppedAnimatedMedia/SteppedAnimatedMedia.js');
18
- var lodash = require('lodash');
19
18
  var cx = require('classnames');
19
+ var clamp = require('../../global/js/utils/clamp.js');
20
20
  var devtools = require('../../global/js/utils/devtools.js');
21
21
  var settings = require('../../settings.js');
22
22
 
@@ -139,13 +139,13 @@ exports.InterstitialScreen = /*#__PURE__*/React.forwardRef(function (props, ref)
139
139
  });
140
140
  };
141
141
  var handleClickPrev = function handleClickPrev() {
142
- var targetStep = lodash.clamp(progStep - 1, progStepFloor, progStepCeil);
142
+ var targetStep = clamp.clamp(progStep - 1, progStepFloor, progStepCeil);
143
143
  scrollRef.current.scrollPrev();
144
144
  scrollBodyToTop();
145
145
  setProgStep(targetStep);
146
146
  };
147
147
  var handleClickNext = function handleClickNext() {
148
- var targetStep = lodash.clamp(progStep + 1, progStepFloor, progStepCeil);
148
+ var targetStep = clamp.clamp(progStep + 1, progStepFloor, progStepCeil);
149
149
  scrollRef.current.scrollNext();
150
150
  scrollBodyToTop();
151
151
  setProgStep(targetStep);
@@ -16,7 +16,7 @@ var cx = require('classnames');
16
16
  var settings = require('../../settings.js');
17
17
  var uuidv4 = require('../../global/js/utils/uuidv4.js');
18
18
  var NavItemLink = require('./NavItemLink.js');
19
- var bucket9 = require('../../node_modules/@carbon/icons-react/es/generated/bucket-9.js');
19
+ var bucket10 = require('../../node_modules/@carbon/icons-react/es/generated/bucket-10.js');
20
20
 
21
21
  var _excluded = ["activeHref", "children", "className", "current", "disabled", "element", "href", "id", "label", "onClick", "tabIndex"];
22
22
 
@@ -95,7 +95,7 @@ exports.NavItem = function NavItem(_ref) {
95
95
  element: element,
96
96
  href: href,
97
97
  tabIndex: navItemTabIndex
98
- }, rest, externalLinkProps), children, externalLink && /*#__PURE__*/React.createElement(bucket9.Launch, {
98
+ }, rest, externalLinkProps), children, externalLink && /*#__PURE__*/React.createElement(bucket10.Launch, {
99
99
  className: "".concat(blockClass, "__link--external__icon")
100
100
  })));
101
101
  };
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { Link } from '@carbon/react';
8
8
  import React, { RefObject } from 'react';
9
+ export type Themes = 'light' | 'dark';
9
10
  interface Link {
10
11
  url: string;
11
12
  text: string;
@@ -61,6 +62,10 @@ export interface NotificationsPanelProps {
61
62
  * Sets the `hours ago` label text
62
63
  */
63
64
  hoursAgoText?: (value: number) => string;
65
+ /**
66
+ * Determines the theme of the empty state's illustration.
67
+ */
68
+ illustrationTheme: Themes;
64
69
  /**
65
70
  * Sets the `minute ago` label text
66
71
  */
@@ -24,19 +24,17 @@ var cx = require('classnames');
24
24
  var devtools = require('../../global/js/utils/devtools.js');
25
25
  var settings = require('../../settings.js');
26
26
  var propsHelper = require('../../global/js/utils/props-helper.js');
27
- var utils = require('./utils.js');
28
27
  var usePrefersReducedMotion = require('../../global/js/hooks/usePrefersReducedMotion.js');
28
+ var utils = require('./utils.js');
29
29
  var usePreviousValue = require('../../global/js/hooks/usePreviousValue.js');
30
30
  var useClickOutside = require('../../global/js/hooks/useClickOutside.js');
31
- var useIsomorphicEffect = require('../../global/js/hooks/useIsomorphicEffect.js');
32
31
 
33
32
  var _Close;
34
- var _excluded = ["className", "data", "daysAgoText", "dismissAllLabel", "dismissSingleNotificationIconDescription", "doNotDisturbDefaultToggled", "doNotDisturbLabel", "emptyStateLabel", "hourAgoText", "hoursAgoText", "minuteAgoText", "minutesAgoText", "monthAgoText", "monthsAgoText", "nowText", "onClickOutside", "onDismissAllNotifications", "onDismissSingleNotification", "onDoNotDisturbChange", "onSettingsClick", "onViewAllClick", "open", "previousLabel", "readLessLabel", "readMoreLabel", "secondsAgoText", "settingsIconDescription", "title", "todayLabel", "viewAllLabel", "yearAgoText", "yearsAgoText", "yesterdayAtText", "yesterdayLabel", "triggerButtonRef"];
33
+ var _excluded = ["className", "data", "daysAgoText", "dismissAllLabel", "dismissSingleNotificationIconDescription", "doNotDisturbDefaultToggled", "doNotDisturbLabel", "emptyStateLabel", "hourAgoText", "hoursAgoText", "illustrationTheme", "minuteAgoText", "minutesAgoText", "monthAgoText", "monthsAgoText", "nowText", "onClickOutside", "onDismissAllNotifications", "onDismissSingleNotification", "onDoNotDisturbChange", "onSettingsClick", "onViewAllClick", "open", "previousLabel", "readLessLabel", "readMoreLabel", "secondsAgoText", "settingsIconDescription", "title", "todayLabel", "viewAllLabel", "yearAgoText", "yearsAgoText", "yesterdayAtText", "yesterdayLabel", "triggerButtonRef"];
35
34
 
36
35
  // The block part of our conventional BEM class names (blockClass__E--M).
37
36
  var componentName = 'NotificationsPanel';
38
37
  var blockClass = "".concat(settings.pkg.prefix, "--notifications-panel");
39
-
40
38
  // Default values for props
41
39
  var defaults = {
42
40
  daysAgoText: function daysAgoText(value) {
@@ -52,6 +50,7 @@ var defaults = {
52
50
  hoursAgoText: function hoursAgoText(value) {
53
51
  return "".concat(value, " hours ago");
54
52
  },
53
+ illustrationTheme: 'light',
55
54
  minuteAgoText: function minuteAgoText(value) {
56
55
  return "".concat(value, " minute ago");
57
56
  },
@@ -108,6 +107,8 @@ exports.NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, ref)
108
107
  hourAgoText = _ref$hourAgoText === undefined ? defaults.hourAgoText : _ref$hourAgoText,
109
108
  _ref$hoursAgoText = _ref.hoursAgoText,
110
109
  hoursAgoText = _ref$hoursAgoText === undefined ? defaults.hoursAgoText : _ref$hoursAgoText,
110
+ _ref$illustrationThem = _ref.illustrationTheme,
111
+ illustrationTheme = _ref$illustrationThem === undefined ? defaults.illustrationTheme : _ref$illustrationThem,
111
112
  _ref$minuteAgoText = _ref.minuteAgoText,
112
113
  minuteAgoText = _ref$minuteAgoText === undefined ? defaults.minuteAgoText : _ref$minuteAgoText,
113
114
  _ref$minutesAgoText = _ref.minutesAgoText,
@@ -365,17 +366,6 @@ exports.NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, ref)
365
366
  onDismissSingleNotification(notification);
366
367
  };
367
368
  var mainSectionClassName = cx(["".concat(blockClass, "__main-section"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__main-section-empty"), allNotifications && !allNotifications.length)]);
368
- useIsomorphicEffect.useIsomorphicEffect(function () {
369
- // setTimeout ensures that this gets run
370
- var timeout = setTimeout(function () {
371
- if (notificationPanelRef.current && !reducedMotion) {
372
- notificationPanelRef.current.style.animation = open ? 'fade-in 250ms' : 'fade-out forwards 250ms';
373
- }
374
- }, 0);
375
- return function () {
376
- return clearTimeout(timeout);
377
- };
378
- }, [open, reducedMotion]);
379
369
  return shouldRender ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
380
370
  type: "button",
381
371
  className: "".concat(carbonPrefix, "--visually-hidden"),
@@ -387,7 +377,7 @@ exports.NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, ref)
387
377
  tabIndex: 0
388
378
  }, rest, {
389
379
  id: blockClass,
390
- className: cx(blockClass, className, "".concat(blockClass, "__container")),
380
+ className: cx(blockClass, className, "".concat(blockClass, "__container"), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__entrance"), open), "".concat(blockClass, "__exit"), !open)),
391
381
  onAnimationEnd: onAnimationEnd,
392
382
  ref: ref || notificationPanelRef
393
383
  }, devtools.getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement("div", {
@@ -430,7 +420,7 @@ exports.NotificationsPanel = /*#__PURE__*/React.forwardRef(function (_ref, ref)
430
420
  }, previousLabel), previousNotifications.map(function (notification, index) {
431
421
  return renderNotification('previous', notification, index);
432
422
  })) : null, !allNotifications.length && /*#__PURE__*/React.createElement(NotificationsEmptyState.NotificationsEmptyState, {
433
- illustrationTheme: "dark",
423
+ illustrationTheme: illustrationTheme,
434
424
  title: "",
435
425
  subtitle: emptyStateLabel
436
426
  })), onViewAllClick && onSettingsClick && allNotifications && allNotifications.length > 0 && /*#__PURE__*/React.createElement("div", {
@@ -523,6 +513,10 @@ exports.NotificationsPanel.propTypes = {
523
513
  * Sets the `hours ago` label text
524
514
  */
525
515
  hoursAgoText: index.default.func,
516
+ /**
517
+ * Determines the theme of the empty state's illustration.
518
+ */
519
+ illustrationTheme: index.default.oneOf(['light', 'dark']),
526
520
  /**
527
521
  * Sets the `minute ago` label text
528
522
  */
@@ -37,8 +37,7 @@ export interface OptionsTileProps {
37
37
  */
38
38
  lockedText?: string;
39
39
  /**
40
- * Provide a function which will be called each time the user
41
- * toggles the open state of the OptionsTile.
40
+ * A handler for managing the controlled state of open prop. If not passed the open prop will not be honored and an uncontrolled state will be used.
42
41
  */
43
42
  onChange?: (value: boolean) => void;
44
43
  /**
@@ -47,7 +46,7 @@ export interface OptionsTileProps {
47
46
  */
48
47
  onToggle?: (value: boolean) => void;
49
48
  /**
50
- * Whether the OptionsTile is in open state.
49
+ * For controlled usage of the tile open state. This prop only works when an onChange prop is also passed, otherwise an uncontrolled state is used.
51
50
  */
52
51
  open?: boolean;
53
52
  /**
@@ -47,64 +47,43 @@ var componentName = 'OptionsTile';
47
47
  var defaults = {
48
48
  size: 'lg'
49
49
  };
50
- exports.OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
51
- var children = _ref.children,
52
- className = _ref.className,
53
- enabled = _ref.enabled,
54
- invalid = _ref.invalid,
55
- invalidText = _ref.invalidText,
56
- locked = _ref.locked,
57
- lockedText = _ref.lockedText,
58
- _onChange = _ref.onChange,
59
- onToggle = _ref.onToggle,
60
- open = _ref.open,
61
- _ref$size = _ref.size,
62
- size = _ref$size === undefined ? defaults.size : _ref$size,
63
- summary = _ref.summary,
64
- title = _ref.title,
65
- userDefinedTitleId = _ref.titleId,
66
- warn = _ref.warn,
67
- warnText = _ref.warnText,
68
- rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
69
- var _useState = React.useState(open),
50
+ exports.OptionsTile = /*#__PURE__*/React.forwardRef(function (props, ref) {
51
+ var children = props.children,
52
+ className = props.className,
53
+ enabled = props.enabled,
54
+ invalid = props.invalid,
55
+ invalidText = props.invalidText,
56
+ locked = props.locked,
57
+ lockedText = props.lockedText,
58
+ onChange = props.onChange,
59
+ onToggle = props.onToggle,
60
+ userOpen = props.open,
61
+ _props$size = props.size,
62
+ size = _props$size === undefined ? defaults.size : _props$size,
63
+ summary = props.summary,
64
+ title = props.title,
65
+ userDefinedTitleId = props.titleId,
66
+ warn = props.warn,
67
+ warnText = props.warnText,
68
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(props, _excluded);
69
+ var _useState = React.useState(false),
70
70
  _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
71
- prevIsOpen = _useState2[0],
72
- setPrevIsOpen = _useState2[1];
73
- var _useState3 = React.useState(false),
74
- _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
75
- closing = _useState4[0],
76
- setClosing = _useState4[1];
77
- var _useControllableState = useControllableState.useControllableState({
78
- defaultValue: open || null,
79
- name: 'OptionsTile',
80
- onChange: function onChange(value) {
81
- return _onChange === null || _onChange === undefined ? undefined : _onChange(value);
82
- },
83
- value: open
84
- }),
71
+ closing = _useState2[0],
72
+ setClosing = _useState2[1];
73
+ var _useControllableState = useControllableState.useControllableState(userOpen !== null && userOpen !== undefined ? userOpen : false, onChange),
85
74
  _useControllableState2 = _rollupPluginBabelHelpers.slicedToArray(_useControllableState, 2),
86
- isOpen = _useControllableState2[0],
87
- setIsOpen = _useControllableState2[1];
75
+ open = _useControllableState2[0],
76
+ setOpen = _useControllableState2[1];
88
77
  var detailsRef = React.useRef(null);
89
78
  var contentRef = React.useRef(null);
90
- var id = uuidv4.default();
91
- var titleId = userDefinedTitleId !== null && userDefinedTitleId !== undefined ? userDefinedTitleId : "".concat(id, "-title");
79
+ var titleId = userDefinedTitleId !== null && userDefinedTitleId !== undefined ? userDefinedTitleId : "".concat(uuidv4.default(), "-title");
92
80
  var isExpandable = children !== undefined;
93
- var isInvalid = invalid;
94
- var isWarn = !isInvalid && warn;
95
- var isLocked = !isInvalid && !isWarn && locked;
81
+ var isWarn = !invalid && warn;
82
+ var isLocked = !invalid && !isWarn && locked;
96
83
  var shouldReduceMotion = usePrefersReducedMotion.usePrefersReducedMotion();
97
- if (open !== prevIsOpen) {
98
- if (isOpen && !open) {
99
- collapse();
100
- } else if (!isOpen && open) {
101
- expand();
102
- }
103
- setPrevIsOpen(open);
104
- }
105
- function expand() {
84
+ var expand = function expand() {
106
85
  if (detailsRef.current && contentRef.current && !shouldReduceMotion) {
107
- setIsOpen(true);
86
+ setOpen(true);
108
87
  detailsRef.current.open = true;
109
88
  var _getComputedStyle = getComputedStyle(contentRef.current),
110
89
  paddingTop = _getComputedStyle.paddingTop,
@@ -127,11 +106,10 @@ exports.OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
127
106
  easing: carbonMotion__namespace.easings.entrance.productive
128
107
  });
129
108
  } else {
130
- // in case the refs are not set or the user prefers reduced motion, skip the animation
131
- setIsOpen(true);
109
+ setOpen(true);
132
110
  }
133
- }
134
- function collapse() {
111
+ };
112
+ var collapse = function collapse() {
135
113
  if (contentRef.current && !shouldReduceMotion) {
136
114
  setClosing(true);
137
115
  var _getComputedStyle2 = getComputedStyle(contentRef.current),
@@ -154,76 +132,57 @@ exports.OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
154
132
  easing: carbonMotion__namespace.easings.entrance.productive
155
133
  });
156
134
  var callback = function callback() {
157
- setIsOpen(false);
135
+ setOpen(false);
158
136
  setClosing(false);
159
137
  };
160
-
161
- //This is to fix the flicking issue while collapsing.
162
- //root cause : after the animation is finished , isOpen is still true until onFinish callback is triggered.For that minute duration , collapsed content will again show.
163
- // To avoid this , isOpen is set to false after the 90% of animation duration.
164
138
  setTimeout(function () {
165
139
  callback();
166
140
  }, animationDuration * 0.9);
167
-
168
- // animation.onfinish = callback;
169
141
  animation.oncancel = callback;
170
142
  } else {
171
- // in case the ref is not set or the user prefers reduced motion, skip the animation
172
- setIsOpen(false);
143
+ setOpen(false);
173
144
  }
174
- }
175
- function toggle(e) {
176
- e.preventDefault();
177
- if (isOpen) {
145
+ };
146
+ var toggle = function toggle(evt) {
147
+ evt.preventDefault();
148
+ if (open) {
178
149
  collapse();
179
150
  } else {
180
151
  expand();
181
152
  }
182
- }
183
- function renderTitle() {
153
+ };
154
+ var renderTitle = function renderTitle() {
184
155
  var Icon = null;
185
156
  var text = summary;
186
- var summaryClasses = ["".concat(blockClass, "__summary")];
187
- if (closing) {
188
- summaryClasses.push("".concat(blockClass, "__summary--closing"));
189
- }
190
- if (isOpen) {
191
- summaryClasses.push("".concat(blockClass, "__summary--open"));
192
- }
193
157
  if (invalid) {
194
158
  Icon = icons.WarningFilled;
195
159
  text = invalidText;
196
- summaryClasses.push("".concat(blockClass, "__summary--invalid"));
197
160
  } else if (warn) {
198
161
  Icon = icons.WarningAltFilled;
199
162
  text = warnText;
200
- summaryClasses.push("".concat(blockClass, "__summary--warn"));
201
163
  } else if (locked) {
202
164
  Icon = icons.Locked;
203
- summaryClasses.push("".concat(blockClass, "__summary--locked"));
204
165
  if (!text) {
205
166
  text = lockedText;
206
167
  }
207
168
  }
208
169
  var hasValidationState = invalid || warn || locked;
209
170
  var summaryHidden = !hasValidationState && enabled === false;
210
- if (summaryHidden) {
211
- summaryClasses.push("".concat(blockClass, "__summary--hidden"));
212
- }
171
+ var summaryClasses = cx("".concat(blockClass, "__summary"), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__summary--closing"), closing), "".concat(blockClass, "__summary--open"), open), "".concat(blockClass, "__summary--invalid"), invalid), "".concat(blockClass, "__summary--warn"), warn), "".concat(blockClass, "__summary--locked"), locked), "".concat(blockClass, "__summary--hidden"), summaryHidden));
213
172
  return /*#__PURE__*/React.createElement("div", {
214
173
  className: "".concat(blockClass, "__heading")
215
174
  }, /*#__PURE__*/React.createElement("h6", {
216
175
  id: titleId,
217
176
  className: "".concat(blockClass, "__title")
218
177
  }, title), text && /*#__PURE__*/React.createElement("span", {
219
- className: cx(summaryClasses),
178
+ className: summaryClasses,
220
179
  "aria-hidden": summaryHidden
221
180
  }, Icon && /*#__PURE__*/React.createElement(Icon, {
222
181
  size: 16
223
182
  }), /*#__PURE__*/React.createElement("span", {
224
183
  className: "".concat(blockClass, "__summary-text")
225
184
  }, text)));
226
- }
185
+ };
227
186
  return /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({}, rest, {
228
187
  className: cx(blockClass, className, "".concat(blockClass, "--").concat(size), _rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "--closing"), closing)),
229
188
  ref: ref
@@ -239,20 +198,14 @@ exports.OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
239
198
  size: "sm",
240
199
  disabled: isLocked
241
200
  })), isExpandable ? /*#__PURE__*/React.createElement("details", {
242
- open: isOpen,
201
+ open: open,
243
202
  ref: detailsRef
244
- },
245
- /*#__PURE__*/
246
- /* summary should not be considered non-interactive
247
- * https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/656
248
- * https://github.com/A11yance/axobject-query/issues/319
249
- */
250
- React.createElement("summary", {
203
+ }, /*#__PURE__*/React.createElement("summary", {
251
204
  className: "".concat(blockClass, "__header"),
252
205
  onClick: toggle
253
206
  }, /*#__PURE__*/React.createElement(icons.ChevronDown, {
254
207
  size: 16,
255
- className: cx("".concat(blockClass, "__chevron"), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__chevron--open"), isOpen), "".concat(blockClass, "__chevron--closing"), closing))
208
+ className: cx("".concat(blockClass, "__chevron"), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__chevron--open"), open), "".concat(blockClass, "__chevron--closing"), closing))
256
209
  }), renderTitle()), /*#__PURE__*/React.createElement("div", {
257
210
  className: "".concat(blockClass, "__content"),
258
211
  ref: contentRef
@@ -307,8 +260,7 @@ exports.OptionsTile.propTypes = {
307
260
  */
308
261
  lockedText: index.default.string,
309
262
  /**
310
- * Provide a function which will be called each time the user
311
- * toggles the open state of the OptionsTile.
263
+ * A handler for managing the controlled state of open prop. If not passed the open prop will not be honored and an uncontrolled state will be used.
312
264
  */
313
265
  onChange: index.default.func,
314
266
  /**
@@ -317,7 +269,7 @@ exports.OptionsTile.propTypes = {
317
269
  */
318
270
  onToggle: index.default.func,
319
271
  /**
320
- * Whether the OptionsTile is in open state.
272
+ * For controlled usage of the tile open state. This prop only works when an onChange prop is also passed, otherwise an uncontrolled state is used.
321
273
  */
322
274
  open: index.default.bool,
323
275
  /**
@@ -21,7 +21,7 @@ var cx = require('classnames');
21
21
  var devtools = require('../../global/js/utils/devtools.js');
22
22
  var settings = require('../../settings.js');
23
23
  var useResizeObserver = require('../../global/js/hooks/useResizeObserver.js');
24
- var checkForOverflow = require('../../global/js/utils/checkForOverflow.js');
24
+ var useOverflowString = require('../../global/js/hooks/useOverflowString.js');
25
25
  var useWindowScroll = require('../../global/js/hooks/useWindowScroll.js');
26
26
  var useWindowResize = require('../../global/js/hooks/useWindowResize.js');
27
27
  var useIsomorphicEffect = require('../../global/js/hooks/useIsomorphicEffect.js');
@@ -175,21 +175,23 @@ exports.PageHeader = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
175
175
 
176
176
  // handlers
177
177
  var handleActionBarWidthChange = function handleActionBarWidthChange(_ref2) {
178
- var _overflowMenuRef$curr;
179
178
  var minWidth = _ref2.minWidth,
180
179
  maxWidth = _ref2.maxWidth;
181
- var overflowMenuWidth = 0;
182
- var overflowMenu = overflowMenuRef === null || overflowMenuRef === undefined || (_overflowMenuRef$curr = overflowMenuRef.current) === null || _overflowMenuRef$curr === undefined ? undefined : _overflowMenuRef$curr.querySelector(".".concat(prefix, "--overflow-menu"));
183
- if (overflowMenu) {
184
- overflowMenuWidth = overflowMenu.offsetWidth;
185
- }
180
+ if (minWidth !== actionBarMinWidth || maxWidth !== actionBarMaxWidth) {
181
+ var _overflowMenuRef$curr;
182
+ var overflowMenuWidth = 0;
183
+ var overflowMenu = overflowMenuRef === null || overflowMenuRef === undefined || (_overflowMenuRef$curr = overflowMenuRef.current) === null || _overflowMenuRef$curr === undefined ? undefined : _overflowMenuRef$curr.querySelector(".".concat(prefix, "--overflow-menu"));
184
+ if (overflowMenu) {
185
+ overflowMenuWidth = overflowMenu.offsetWidth;
186
+ }
186
187
 
187
- /* don't know how to test resize */
188
- /* istanbul ignore next */
189
- setActionBarMaxWidth(maxWidth + overflowMenuWidth);
190
- /* don't know how to test resize */
191
- /* istanbul ignore next */
192
- setActionBarMinWidth(minWidth);
188
+ /* don't know how to test resize */
189
+ /* istanbul ignore next */
190
+ setActionBarMaxWidth(maxWidth + overflowMenuWidth);
191
+ /* don't know how to test resize */
192
+ /* istanbul ignore next */
193
+ setActionBarMinWidth(minWidth);
194
+ }
193
195
  };
194
196
  var handlePageActionWidthChange = function handlePageActionWidthChange(_ref3) {
195
197
  var minWidth = _ref3.minWidth,
@@ -375,7 +377,7 @@ exports.PageHeader = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
375
377
  });
376
378
  }, [headerRef, pageHeaderStyles]);
377
379
  var subtitleRef = React.useRef(null);
378
- var isOverflowing = checkForOverflow.checkHeightOverflow(subtitleRef.current);
380
+ var isOverflowing = useOverflowString.useOverflowStringHeight(subtitleRef);
379
381
  var subtitleContent = /*#__PURE__*/React.createElement("span", {
380
382
  ref: subtitleRef,
381
383
  className: "".concat(PageHeaderUtils.blockClass, "__subtitle-text")
@@ -13,7 +13,7 @@ var index = require('../../_virtual/index.js');
13
13
  var cx = require('classnames');
14
14
  var react = require('@carbon/react');
15
15
  var EditInPlace = require('../EditInPlace/EditInPlace.js');
16
- var checkForOverflow = require('../../global/js/utils/checkForOverflow.js');
16
+ var useOverflowString = require('../../global/js/hooks/useOverflowString.js');
17
17
 
18
18
  var _excluded = ["text", "content", "loading", "icon", "asText", "onChange", "onSave", "editDescription", "editableLabel", "cancelDescription", "saveDescription", "tooltipAlignment"];
19
19
 
@@ -47,7 +47,7 @@ var PageHeaderTitle = function PageHeaderTitle(_ref) {
47
47
  var titleText;
48
48
  var isEditable = !!onSave;
49
49
  var titleRef = React.useRef();
50
- var isEllipsisApplied = checkForOverflow.checkWidthOverflow(titleRef.current);
50
+ var isEllipsisApplied = useOverflowString.useOverflowStringWidth(titleRef);
51
51
  if (text || !content) {
52
52
  if (text === undefined && typeof title === 'string') {
53
53
  text = title;
@@ -13,7 +13,6 @@ var index = require('../../_virtual/index.js');
13
13
  var cx = require('classnames');
14
14
  var devtools = require('../../global/js/utils/devtools.js');
15
15
  var settings = require('../../settings.js');
16
- var lodash = require('lodash');
17
16
  var constants = require('./constants.js');
18
17
  var useIsomorphicEffect = require('../../global/js/hooks/useIsomorphicEffect.js');
19
18
 
@@ -45,6 +44,10 @@ exports.ScrollGradient = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
45
44
  _ref$hideStartGradien = _ref.hideStartGradient,
46
45
  hideStartGradient = _ref$hideStartGradien === undefined ? defaults.hideStartGradient : _ref$hideStartGradien,
47
46
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
47
+ var intersectionStartRef = React.useRef();
48
+ var intersectionEndRef = React.useRef();
49
+ var intersectionLeftRef = React.useRef();
50
+ var intersectionRightRef = React.useRef();
48
51
  var scrollContainer = React.useRef(undefined);
49
52
  var contentChildrenContainer = React.useRef(undefined);
50
53
  var _useIsOverflow = constants.useIsOverflow(scrollContainer),
@@ -53,13 +56,11 @@ exports.ScrollGradient = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
53
56
  var gradientRight = yScrollable && scrollContainer.current && contentChildrenContainer.current ? scrollContainer.current.offsetWidth - contentChildrenContainer.current.offsetWidth : 0;
54
57
  var gradientBottom = xScrollable && scrollContainer.current && contentChildrenContainer.current ? scrollContainer.current.offsetHeight - contentChildrenContainer.current.offsetHeight : 0;
55
58
  var _useState = React.useState(constants.ScrollStates.NONE),
56
- _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
57
- verticalPosition = _useState2[0],
58
- setVerticalPosition = _useState2[1];
59
+ _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 1),
60
+ verticalPosition = _useState2[0];
59
61
  var _useState3 = React.useState(constants.ScrollStates.NONE),
60
- _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
61
- horizontalPosition = _useState4[0],
62
- setHorizontalPosition = _useState4[1];
62
+ _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 1),
63
+ horizontalPosition = _useState4[0];
63
64
  var startVerticalRef = React.useRef(null);
64
65
  var startHorizontalRef = React.useRef(null);
65
66
  var endVerticalRef = React.useRef(null);
@@ -80,36 +81,84 @@ exports.ScrollGradient = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
80
81
  endHorizontalRef.current.style.bottom = gradientBottom;
81
82
  endHorizontalRef.current.style.backgroundImage = "linear-gradient(-90deg, ".concat(color, " 10%, transparent)");
82
83
  }, [color, gradientRight, gradientBottom]);
83
- var updateScrollState = lodash.throttle(function () {
84
- var updatedVerticalVal = constants.getScrollState(scrollContainer.current, constants.ScrollDirection.Y);
85
- var updatedHorizontalVal = constants.getScrollState(scrollContainer.current, constants.ScrollDirection.X);
86
- setVerticalPosition(updatedVerticalVal);
87
- setHorizontalPosition(updatedHorizontalVal);
88
- }, 150);
89
- var scrollHandler = React.useCallback(function (event) {
90
- onScroll(event);
91
- updateScrollState();
92
- }, [onScroll, updateScrollState]);
84
+ var setGradientOnIntersection = function setGradientOnIntersection(entry, gradientRef) {
85
+ if (gradientRef.current) {
86
+ if (entry.isIntersecting) {
87
+ gradientRef.current.style.opacity = 0;
88
+ gradientRef.current.style.display = 'none';
89
+ gradientRef === null || gradientRef === undefined || gradientRef.current.setAttribute('aria-hidden', false);
90
+ } else {
91
+ gradientRef.current.style.opacity = 1;
92
+ gradientRef.current.style.display = 'block';
93
+ gradientRef === null || gradientRef === undefined || gradientRef.current.setAttribute('aria-hidden', true);
94
+ }
95
+ }
96
+ };
97
+ React.useEffect(function () {
98
+ var observer = new IntersectionObserver(function (entries) {
99
+ entries.forEach(function (entry) {
100
+ if (entry.target.hasAttribute('data-start-vertical')) {
101
+ setGradientOnIntersection(entry, startVerticalRef);
102
+ }
103
+ if (entry.target.hasAttribute('data-end-vertical')) {
104
+ setGradientOnIntersection(entry, endVerticalRef);
105
+ }
106
+ if (entry.target.hasAttribute('data-start-horizontal')) {
107
+ setGradientOnIntersection(entry, startHorizontalRef);
108
+ }
109
+ if (entry.target.hasAttribute('data-end-horizontal')) {
110
+ setGradientOnIntersection(entry, endHorizontalRef);
111
+ }
112
+ });
113
+ }, {
114
+ root: null,
115
+ rootMargin: '0px',
116
+ threshold: 0.1
117
+ });
118
+ observer.observe(intersectionStartRef.current);
119
+ observer.observe(intersectionEndRef.current);
120
+ observer.observe(intersectionLeftRef.current);
121
+ observer.observe(intersectionRightRef.current);
122
+ var startVerticalRefValue = intersectionStartRef.current;
123
+ var endVerticalRefValue = intersectionEndRef.current;
124
+ var startHorizontalRefValue = intersectionLeftRef.current;
125
+ var endHorizontalRefValue = intersectionRightRef.current;
126
+ return function () {
127
+ observer.unobserve(startVerticalRefValue);
128
+ observer.unobserve(endVerticalRefValue);
129
+ observer.unobserve(startHorizontalRefValue);
130
+ observer.unobserve(endHorizontalRefValue);
131
+ };
132
+ }, []);
93
133
  var setRefs = function setRefs(element) {
94
134
  scrollContainer.current = element;
95
135
  getScrollElementRef(element);
96
136
  };
97
- React.useEffect(function () {
98
- scrollHandler();
99
- }, [scrollHandler]);
100
137
  return /*#__PURE__*/React.createElement("div", _rollupPluginBabelHelpers.extends({}, rest, {
101
138
  className: cx(blockClass, "".concat(blockClass, "--x-").concat(horizontalPosition.toLowerCase()), "".concat(blockClass, "--y-").concat(verticalPosition.toLowerCase()), _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "--x-scrollable"), xScrollable), "".concat(blockClass, "--y-scrollable"), yScrollable), className),
102
139
  ref: ref,
103
140
  role: "presentation"
104
141
  }, devtools.getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement("div", {
105
- onScroll: scrollHandler,
142
+ onScroll: onScroll,
106
143
  ref: setRefs,
107
144
  className: cx("".concat(blockClass, "__content"), scrollElementClassName),
108
145
  tabIndex: 0
109
- }, /*#__PURE__*/React.createElement("div", {
146
+ }, /*#__PURE__*/React.createElement("span", {
147
+ ref: intersectionStartRef,
148
+ "data-start-vertical": true
149
+ }), /*#__PURE__*/React.createElement("span", {
150
+ ref: intersectionLeftRef,
151
+ "data-start-horizontal": true
152
+ }), /*#__PURE__*/React.createElement("div", {
110
153
  ref: contentChildrenContainer,
111
154
  className: "".concat(blockClass, "__content-children")
112
- }, children)), !hideStartGradient && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
155
+ }, children), /*#__PURE__*/React.createElement("span", {
156
+ ref: intersectionEndRef,
157
+ "data-end-vertical": true
158
+ }), /*#__PURE__*/React.createElement("span", {
159
+ ref: intersectionRightRef,
160
+ "data-end-horizontal": true
161
+ })), !hideStartGradient && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
113
162
  ref: startVerticalRef,
114
163
  className: "".concat(blockClass, "__start-vertical"),
115
164
  role: "presentation",