carbon-react 147.10.0 → 148.0.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 (189) hide show
  1. package/esm/__internal__/checkable-input/checkable-input.component.js +9 -4
  2. package/esm/__internal__/checkable-input/hidden-checkable-input.component.js +9 -4
  3. package/esm/__internal__/input/input.component.js +9 -4
  4. package/esm/__internal__/radio-button-mapper/radio-button-mapper.component.js +1 -1
  5. package/esm/__internal__/utils/helpers/events/composedPath.d.ts +1 -1
  6. package/esm/__internal__/utils/helpers/events/events.d.ts +1 -1
  7. package/esm/components/accordion/accordion.component.js +1 -1
  8. package/esm/components/action-popover/action-popover-menu/action-popover-menu.component.js +1 -6
  9. package/esm/components/action-popover/action-popover.component.js +7 -2
  10. package/esm/components/advanced-color-picker/advanced-color-picker.component.d.ts +2 -2
  11. package/esm/components/advanced-color-picker/advanced-color-picker.component.js +1 -1
  12. package/esm/components/anchor-navigation/anchor-navigation.component.js +1 -1
  13. package/esm/components/box/box.component.js +1 -1
  14. package/esm/components/breadcrumbs/crumb/crumb.component.d.ts +1 -1
  15. package/esm/components/breadcrumbs/crumb/crumb.component.js +5 -1
  16. package/esm/components/breadcrumbs/crumb/crumb.style.d.ts +2 -2
  17. package/esm/components/button-toggle/button-toggle-group/button-toggle-group.component.js +1 -3
  18. package/esm/components/checkbox/checkbox.component.js +9 -4
  19. package/esm/components/content/content.style.js +2 -2
  20. package/esm/components/date/date.component.js +40 -60
  21. package/esm/components/decimal/decimal.component.js +10 -5
  22. package/esm/components/dialog/dialog.component.d.ts +1 -1
  23. package/esm/components/dialog-full-screen/dialog-full-screen.component.d.ts +1 -1
  24. package/esm/components/draggable/draggable-container.component.js +4 -1
  25. package/esm/components/drawer/drawer.component.js +1 -1
  26. package/esm/components/duelling-picklist/picklist-group/picklist-group.component.js +3 -0
  27. package/esm/components/grouped-character/grouped-character.component.js +9 -4
  28. package/esm/components/heading/heading.style.d.ts +1 -1
  29. package/esm/components/help/help.component.js +1 -1
  30. package/esm/components/hr/hr.component.d.ts +0 -1
  31. package/esm/components/image/image.style.d.ts +1 -1
  32. package/esm/components/link/link.component.d.ts +1 -3
  33. package/esm/components/link/link.component.js +5 -5
  34. package/esm/components/link/link.style.js +7 -4
  35. package/esm/components/loader-star/internal/star.component.d.ts +0 -1
  36. package/esm/components/loader-star/loader-star.component.d.ts +0 -1
  37. package/esm/components/menu/__internal__/menu.context.d.ts +1 -0
  38. package/esm/components/menu/__internal__/submenu/submenu.component.d.ts +1 -1
  39. package/esm/components/menu/__internal__/submenu/submenu.component.js +14 -37
  40. package/esm/components/menu/__internal__/submenu/submenu.context.d.ts +1 -2
  41. package/esm/components/menu/__internal__/submenu/submenu.style.js +0 -11
  42. package/esm/components/menu/menu-item/menu-item.component.js +39 -46
  43. package/esm/components/menu/menu-item/menu-item.style.d.ts +2 -2
  44. package/esm/components/menu/menu-item/menu-item.style.js +65 -83
  45. package/esm/components/menu/menu.component.js +1 -0
  46. package/esm/components/modal/modal.component.d.ts +1 -1
  47. package/esm/components/multi-action-button/multi-action-button.component.js +8 -4
  48. package/esm/components/number/number.component.js +9 -4
  49. package/esm/components/pager/pager.component.js +1 -1
  50. package/esm/components/pager/pager.style.d.ts +1 -1
  51. package/esm/components/pages/pages.component.js +1 -1
  52. package/esm/components/popover-container/popover-container.component.d.ts +1 -1
  53. package/esm/components/portrait/portrait.component.d.ts +2 -1
  54. package/esm/components/profile/profile.style.d.ts +1 -1
  55. package/esm/components/radio-button/radio-button.component.js +9 -4
  56. package/esm/components/radio-button/radio-button.style.d.ts +1 -1
  57. package/esm/components/search/search.component.js +0 -1
  58. package/esm/components/select/__internal__/select-list/select-list.component.d.ts +9 -8
  59. package/esm/components/select/__internal__/select-list/select-list.component.js +34 -66
  60. package/esm/components/select/__internal__/select-list/select-list.style.js +9 -3
  61. package/esm/components/select/__internal__/select-textbox/select-textbox.component.d.ts +1 -1
  62. package/esm/components/select/__internal__/select-textbox/select-textbox.component.js +10 -5
  63. package/esm/components/select/filterable-select/filterable-select.component.js +16 -13
  64. package/esm/components/select/multi-select/multi-select.component.js +12 -7
  65. package/esm/components/select/option/option.component.d.ts +6 -5
  66. package/esm/components/select/option/option.component.js +10 -5
  67. package/esm/components/select/option-row/option-row.component.d.ts +2 -2
  68. package/esm/components/select/simple-select/simple-select.component.d.ts +0 -7
  69. package/esm/components/select/simple-select/simple-select.component.js +12 -7
  70. package/esm/components/sidebar/sidebar.component.d.ts +1 -1
  71. package/esm/components/simple-color-picker/simple-color-picker.component.js +3 -6
  72. package/esm/components/split-button/split-button.component.js +8 -4
  73. package/esm/components/step-flow/step-flow.component.js +0 -1
  74. package/esm/components/switch/switch.component.js +9 -4
  75. package/esm/components/tabs/__internal__/tab-title/tab-title.component.js +2 -11
  76. package/esm/components/tabs/tab/tab.component.d.ts +3 -3
  77. package/esm/components/tabs/tabs.component.js +15 -25
  78. package/esm/components/text-editor/__internal__/editor-link/editor-link.style.d.ts +1 -1
  79. package/esm/components/textarea/textarea.component.js +9 -4
  80. package/esm/components/textbox/textbox.component.js +9 -4
  81. package/esm/components/tile/flex-tile-cell/flex-tile-cell.component.js +1 -1
  82. package/esm/components/tile/flex-tile-divider/flex-tile-divider.component.d.ts +0 -1
  83. package/esm/components/time/time.component.js +0 -1
  84. package/esm/components/toast/toast.style.d.ts +3 -3
  85. package/esm/components/typography/typography.style.d.ts +2 -2
  86. package/esm/components/vertical-divider/vertical-divider.component.d.ts +0 -1
  87. package/esm/components/vertical-menu/vertical-menu-full-screen/vertical-menu-full-screen.component.d.ts +1 -1
  88. package/esm/components/vertical-menu/vertical-menu-full-screen/vertical-menu-full-screen.component.js +1 -2
  89. package/esm/components/vertical-menu/vertical-menu-item/vertical-menu-item.component.d.ts +1 -1
  90. package/esm/hooks/__internal__/useCharacterCount/useCharacterCount.d.ts +0 -1
  91. package/esm/hooks/__internal__/useChildButtons/useChildButtons.d.ts +1 -1
  92. package/esm/hooks/__internal__/useMenuKeyboardNavigation/useMenuKeyboardNavigation.d.ts +1 -1
  93. package/esm/hooks/__internal__/useMenuKeyboardNavigation/useMenuKeyboardNavigation.js +2 -2
  94. package/esm/hooks/__internal__/useStableCallback/useStableCallback.d.ts +1 -1
  95. package/lib/__internal__/checkable-input/checkable-input.component.js +9 -4
  96. package/lib/__internal__/checkable-input/hidden-checkable-input.component.js +9 -4
  97. package/lib/__internal__/input/input.component.js +9 -4
  98. package/lib/__internal__/radio-button-mapper/radio-button-mapper.component.js +1 -1
  99. package/lib/__internal__/utils/helpers/events/composedPath.d.ts +1 -1
  100. package/lib/__internal__/utils/helpers/events/events.d.ts +1 -1
  101. package/lib/components/accordion/accordion.component.js +1 -1
  102. package/lib/components/action-popover/action-popover-menu/action-popover-menu.component.js +1 -6
  103. package/lib/components/action-popover/action-popover.component.js +7 -2
  104. package/lib/components/advanced-color-picker/advanced-color-picker.component.d.ts +2 -2
  105. package/lib/components/advanced-color-picker/advanced-color-picker.component.js +1 -1
  106. package/lib/components/anchor-navigation/anchor-navigation.component.js +1 -1
  107. package/lib/components/box/box.component.js +1 -1
  108. package/lib/components/breadcrumbs/crumb/crumb.component.d.ts +1 -1
  109. package/lib/components/breadcrumbs/crumb/crumb.component.js +5 -1
  110. package/lib/components/breadcrumbs/crumb/crumb.style.d.ts +2 -2
  111. package/lib/components/button-toggle/button-toggle-group/button-toggle-group.component.js +1 -3
  112. package/lib/components/checkbox/checkbox.component.js +9 -4
  113. package/lib/components/content/content.style.js +2 -2
  114. package/lib/components/date/date.component.js +40 -60
  115. package/lib/components/decimal/decimal.component.js +10 -5
  116. package/lib/components/dialog/dialog.component.d.ts +1 -1
  117. package/lib/components/dialog-full-screen/dialog-full-screen.component.d.ts +1 -1
  118. package/lib/components/draggable/draggable-container.component.js +4 -1
  119. package/lib/components/drawer/drawer.component.js +1 -1
  120. package/lib/components/duelling-picklist/picklist-group/picklist-group.component.js +3 -0
  121. package/lib/components/grouped-character/grouped-character.component.js +9 -4
  122. package/lib/components/heading/heading.style.d.ts +1 -1
  123. package/lib/components/help/help.component.js +1 -1
  124. package/lib/components/hr/hr.component.d.ts +0 -1
  125. package/lib/components/image/image.style.d.ts +1 -1
  126. package/lib/components/link/link.component.d.ts +1 -3
  127. package/lib/components/link/link.component.js +5 -5
  128. package/lib/components/link/link.style.js +7 -4
  129. package/lib/components/loader-star/internal/star.component.d.ts +0 -1
  130. package/lib/components/loader-star/loader-star.component.d.ts +0 -1
  131. package/lib/components/menu/__internal__/menu.context.d.ts +1 -0
  132. package/lib/components/menu/__internal__/submenu/submenu.component.d.ts +1 -1
  133. package/lib/components/menu/__internal__/submenu/submenu.component.js +14 -37
  134. package/lib/components/menu/__internal__/submenu/submenu.context.d.ts +1 -2
  135. package/lib/components/menu/__internal__/submenu/submenu.style.js +0 -11
  136. package/lib/components/menu/menu-item/menu-item.component.js +38 -45
  137. package/lib/components/menu/menu-item/menu-item.style.d.ts +2 -2
  138. package/lib/components/menu/menu-item/menu-item.style.js +65 -83
  139. package/lib/components/menu/menu.component.js +1 -0
  140. package/lib/components/modal/modal.component.d.ts +1 -1
  141. package/lib/components/multi-action-button/multi-action-button.component.js +8 -4
  142. package/lib/components/number/number.component.js +9 -4
  143. package/lib/components/pager/pager.component.js +1 -1
  144. package/lib/components/pager/pager.style.d.ts +1 -1
  145. package/lib/components/pages/pages.component.js +1 -1
  146. package/lib/components/popover-container/popover-container.component.d.ts +1 -1
  147. package/lib/components/portrait/portrait.component.d.ts +2 -1
  148. package/lib/components/profile/profile.style.d.ts +1 -1
  149. package/lib/components/radio-button/radio-button.component.js +9 -4
  150. package/lib/components/radio-button/radio-button.style.d.ts +1 -1
  151. package/lib/components/search/search.component.js +0 -1
  152. package/lib/components/select/__internal__/select-list/select-list.component.d.ts +9 -8
  153. package/lib/components/select/__internal__/select-list/select-list.component.js +34 -66
  154. package/lib/components/select/__internal__/select-list/select-list.style.js +9 -3
  155. package/lib/components/select/__internal__/select-textbox/select-textbox.component.d.ts +1 -1
  156. package/lib/components/select/__internal__/select-textbox/select-textbox.component.js +10 -5
  157. package/lib/components/select/filterable-select/filterable-select.component.js +16 -13
  158. package/lib/components/select/multi-select/multi-select.component.js +12 -7
  159. package/lib/components/select/option/option.component.d.ts +6 -5
  160. package/lib/components/select/option/option.component.js +10 -5
  161. package/lib/components/select/option-row/option-row.component.d.ts +2 -2
  162. package/lib/components/select/simple-select/simple-select.component.d.ts +0 -7
  163. package/lib/components/select/simple-select/simple-select.component.js +12 -7
  164. package/lib/components/sidebar/sidebar.component.d.ts +1 -1
  165. package/lib/components/simple-color-picker/simple-color-picker.component.js +3 -6
  166. package/lib/components/split-button/split-button.component.js +8 -4
  167. package/lib/components/step-flow/step-flow.component.js +0 -1
  168. package/lib/components/switch/switch.component.js +9 -4
  169. package/lib/components/tabs/__internal__/tab-title/tab-title.component.js +2 -11
  170. package/lib/components/tabs/tab/tab.component.d.ts +3 -3
  171. package/lib/components/tabs/tabs.component.js +15 -25
  172. package/lib/components/text-editor/__internal__/editor-link/editor-link.style.d.ts +1 -1
  173. package/lib/components/textarea/textarea.component.js +9 -4
  174. package/lib/components/textbox/textbox.component.js +9 -4
  175. package/lib/components/tile/flex-tile-cell/flex-tile-cell.component.js +1 -1
  176. package/lib/components/tile/flex-tile-divider/flex-tile-divider.component.d.ts +0 -1
  177. package/lib/components/time/time.component.js +0 -1
  178. package/lib/components/toast/toast.style.d.ts +3 -3
  179. package/lib/components/typography/typography.style.d.ts +2 -2
  180. package/lib/components/vertical-divider/vertical-divider.component.d.ts +0 -1
  181. package/lib/components/vertical-menu/vertical-menu-full-screen/vertical-menu-full-screen.component.d.ts +1 -1
  182. package/lib/components/vertical-menu/vertical-menu-full-screen/vertical-menu-full-screen.component.js +1 -2
  183. package/lib/components/vertical-menu/vertical-menu-item/vertical-menu-item.component.d.ts +1 -1
  184. package/lib/hooks/__internal__/useCharacterCount/useCharacterCount.d.ts +0 -1
  185. package/lib/hooks/__internal__/useChildButtons/useChildButtons.d.ts +1 -1
  186. package/lib/hooks/__internal__/useMenuKeyboardNavigation/useMenuKeyboardNavigation.d.ts +1 -1
  187. package/lib/hooks/__internal__/useMenuKeyboardNavigation/useMenuKeyboardNavigation.js +2 -2
  188. package/lib/hooks/__internal__/useStableCallback/useStableCallback.d.ts +1 -1
  189. package/package.json +31 -36
@@ -95,7 +95,7 @@ exports.Help = Help;
95
95
  if (process.env.NODE_ENV !== "production") {
96
96
  Help.propTypes = {
97
97
  "ariaLabel": _propTypes.default.string,
98
- "as": _propTypes.default.oneOf(["a", "abbr", "address", "animate", "animateMotion", "animateTransform", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "circle", "cite", "clipPath", "code", "col", "colgroup", "data", "datalist", "dd", "defs", "del", "desc", "details", "dfn", "dialog", "div", "dl", "dt", "ellipse", "em", "embed", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "fieldset", "figcaption", "figure", "filter", "footer", "foreignObject", "form", "g", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "image", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "line", "linearGradient", "link", "main", "map", "mark", "marker", "mask", "menu", "menuitem", "meta", "metadata", "meter", "mpath", "nav", "noindex", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "path", "pattern", "picture", "polygon", "polyline", "pre", "progress", "q", "radialGradient", "rect", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "slot", "small", "source", "span", "stop", "strong", "style", "sub", "summary", "sup", "svg", "switch", "symbol", "table", "tbody", "td", "template", "text", "textarea", "textPath", "tfoot", "th", "thead", "time", "title", "tr", "track", "tspan", "u", "ul", "use", "var", "video", "view", "wbr", "webview"]),
98
+ "as": _propTypes.default.oneOf(["a", "abbr", "address", "animate", "animateMotion", "animateTransform", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "center", "circle", "cite", "clipPath", "code", "col", "colgroup", "data", "datalist", "dd", "defs", "del", "desc", "details", "dfn", "dialog", "div", "dl", "dt", "ellipse", "em", "embed", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "fieldset", "figcaption", "figure", "filter", "footer", "foreignObject", "form", "g", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "image", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "line", "linearGradient", "link", "main", "map", "mark", "marker", "mask", "menu", "menuitem", "meta", "metadata", "meter", "mpath", "nav", "noindex", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "path", "pattern", "picture", "polygon", "polyline", "pre", "progress", "q", "radialGradient", "rect", "rp", "rt", "ruby", "s", "samp", "script", "search", "section", "select", "set", "slot", "small", "source", "span", "stop", "strong", "style", "sub", "summary", "sup", "svg", "switch", "symbol", "table", "tbody", "td", "template", "text", "textarea", "textPath", "tfoot", "th", "thead", "time", "title", "tr", "track", "tspan", "u", "ul", "use", "var", "video", "view", "wbr", "webview"]),
99
99
  "children": _propTypes.default.node,
100
100
  "helpId": _propTypes.default.string,
101
101
  "href": _propTypes.default.string,
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { MarginProps } from "styled-system";
3
2
  export interface HrProps extends MarginProps {
4
3
  /** Set whether the component should be recognised by assistive technologies */
@@ -33,5 +33,5 @@ declare const StyledImage: import("styled-components").StyledComponent<"div", an
33
33
  bottom: string | undefined;
34
34
  left: string | undefined;
35
35
  as?: string | undefined;
36
- } & StyledImageProps, "hidden" | "children" | "as" | "left" | "right" | "top" | "bottom" | "src" | "position">;
36
+ } & StyledImageProps, "hidden" | "children" | "left" | "right" | "top" | "bottom" | "src" | "as" | "position">;
37
37
  export { StyledImage };
@@ -24,8 +24,6 @@ export interface LinkProps extends StyledLinkProps, React.AriaAttributes {
24
24
  ariaLabel?: string;
25
25
  /** allows to set rel property in <a> tag */
26
26
  rel?: string;
27
- /** @ignore @private internal prop to be set when no href or onClick passed */
28
- placeholderTabIndex?: boolean;
29
27
  /** @ignore @private internal prop to be set when no aria-label should be specified */
30
28
  removeAriaLabelOnIcon?: boolean;
31
29
  /**
@@ -35,5 +33,5 @@ export interface LinkProps extends StyledLinkProps, React.AriaAttributes {
35
33
  * Sets className for component. INTERNAL USE ONLY. */
36
34
  className?: string;
37
35
  }
38
- export declare const Link: React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLButtonElement | HTMLLinkElement>>;
36
+ export declare const Link: React.ForwardRefExoticComponent<LinkProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
39
37
  export default Link;
@@ -33,7 +33,6 @@ const Link = exports.Link = /*#__PURE__*/_react.default.forwardRef(({
33
33
  target,
34
34
  variant = "default",
35
35
  isDarkBackground,
36
- placeholderTabIndex,
37
36
  removeAriaLabelOnIcon,
38
37
  className,
39
38
  ...rest
@@ -91,9 +90,6 @@ const Link = exports.Link = /*#__PURE__*/_react.default.forwardRef(({
91
90
  ...buttonProps
92
91
  } : {
93
92
  ...componentProps,
94
- ...(placeholderTabIndex && href === undefined && !onClick && {
95
- tabIndex: -1
96
- }),
97
93
  "data-role": "link-anchor"
98
94
  }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, renderLinkIcon(), /*#__PURE__*/_react.default.createElement(_link.StyledContent, null, isSkipLink ? l.link.skipLinkLabel() : children), renderLinkIcon("right")));
99
95
  };
@@ -122,14 +118,18 @@ if (process.env.NODE_ENV !== "production") {
122
118
  "aria-activedescendant": _propTypes.default.string,
123
119
  "aria-atomic": _propTypes.default.oneOfType([_propTypes.default.oneOf(["false", "true"]), _propTypes.default.bool]),
124
120
  "aria-autocomplete": _propTypes.default.oneOf(["both", "inline", "list", "none"]),
121
+ "aria-braillelabel": _propTypes.default.string,
122
+ "aria-brailleroledescription": _propTypes.default.string,
125
123
  "aria-busy": _propTypes.default.oneOfType([_propTypes.default.oneOf(["false", "true"]), _propTypes.default.bool]),
126
124
  "aria-checked": _propTypes.default.oneOfType([_propTypes.default.oneOf(["false", "mixed", "true"]), _propTypes.default.bool]),
127
125
  "aria-colcount": _propTypes.default.number,
128
126
  "aria-colindex": _propTypes.default.number,
127
+ "aria-colindextext": _propTypes.default.string,
129
128
  "aria-colspan": _propTypes.default.number,
130
129
  "aria-controls": _propTypes.default.string,
131
130
  "aria-current": _propTypes.default.oneOfType([_propTypes.default.oneOf(["date", "false", "location", "page", "step", "time", "true"]), _propTypes.default.bool]),
132
131
  "aria-describedby": _propTypes.default.string,
132
+ "aria-description": _propTypes.default.string,
133
133
  "aria-details": _propTypes.default.string,
134
134
  "aria-disabled": _propTypes.default.oneOfType([_propTypes.default.oneOf(["false", "true"]), _propTypes.default.bool]),
135
135
  "aria-dropeffect": _propTypes.default.oneOf(["copy", "execute", "link", "move", "none", "popup"]),
@@ -159,6 +159,7 @@ if (process.env.NODE_ENV !== "production") {
159
159
  "aria-roledescription": _propTypes.default.string,
160
160
  "aria-rowcount": _propTypes.default.number,
161
161
  "aria-rowindex": _propTypes.default.number,
162
+ "aria-rowindextext": _propTypes.default.string,
162
163
  "aria-rowspan": _propTypes.default.number,
163
164
  "aria-selected": _propTypes.default.oneOfType([_propTypes.default.oneOf(["false", "true"]), _propTypes.default.bool]),
164
165
  "aria-setsize": _propTypes.default.number,
@@ -180,7 +181,6 @@ if (process.env.NODE_ENV !== "production") {
180
181
  "onClick": _propTypes.default.func,
181
182
  "onKeyDown": _propTypes.default.func,
182
183
  "onMouseDown": _propTypes.default.func,
183
- "placeholderTabIndex": _propTypes.default.bool,
184
184
  "rel": _propTypes.default.string,
185
185
  "removeAriaLabelOnIcon": _propTypes.default.bool,
186
186
  "target": _propTypes.default.string,
@@ -138,6 +138,13 @@ const StyledLink = exports.StyledLink = _styledComponents.default.span`
138
138
  }
139
139
  `}
140
140
 
141
+ ${!disabled && (0, _styledComponents.css)`
142
+ > a:any-link:hover,
143
+ > button:hover {
144
+ cursor: pointer;
145
+ }
146
+ `}
147
+
141
148
  > a,
142
149
  > button {
143
150
  text-decoration: ${hasContent ? "underline" : "none"};
@@ -156,10 +163,6 @@ const StyledLink = exports.StyledLink = _styledComponents.default.span`
156
163
  `}
157
164
  }
158
165
 
159
- &:hover {
160
- cursor: pointer;
161
- }
162
-
163
166
  &:focus {
164
167
  color: var(--colorsActionMajorYin090);
165
168
  outline: none;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface StarProps {
3
2
  starContainerClassName: "star-1" | "star-2" | "star-3";
4
3
  gradientId: "gradient1" | "gradient2" | "gradient3";
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { TagProps } from "../../__internal__/utils/helpers/tags/tags";
3
2
  export interface LoaderStarProps extends Omit<TagProps, "data-component"> {
4
3
  /**
@@ -9,6 +9,7 @@ export interface MenuContextProps {
9
9
  registerItem?: (id: string) => void;
10
10
  unregisterItem?: (id: string) => void;
11
11
  focusId?: string;
12
+ updateFocusId?: (id: string) => void;
12
13
  }
13
14
  declare const _default: React.Context<MenuContextProps>;
14
15
  export default _default;
@@ -41,5 +41,5 @@ export interface SubmenuProps {
41
41
  /** Sets the max-width of the submenu container element */
42
42
  submenuMaxWidth?: string;
43
43
  }
44
- declare const Submenu: React.ForwardRefExoticComponent<SubmenuProps & React.RefAttributes<HTMLAnchorElement & HTMLButtonElement & HTMLDivElement>>;
44
+ declare const Submenu: React.ForwardRefExoticComponent<SubmenuProps & React.RefAttributes<HTMLAnchorElement>>;
45
45
  export default Submenu;
@@ -12,11 +12,11 @@ var _events = _interopRequireDefault(require("../../../../__internal__/utils/hel
12
12
  var _menu = _interopRequireDefault(require("../menu.context"));
13
13
  var _keyboardNavigation = require("../keyboard-navigation");
14
14
  var _submenu2 = _interopRequireDefault(require("./submenu.context"));
15
- var _useClickAwayListener = _interopRequireDefault(require("../../../../hooks/__internal__/useClickAwayListener"));
16
15
  var _guid = _interopRequireDefault(require("../../../../__internal__/utils/helpers/guid"));
17
16
  var _locators = require("../locators");
18
17
  var _useStableCallback = _interopRequireDefault(require("../../../../hooks/__internal__/useStableCallback/useStableCallback"));
19
18
  var _fixedNavigationBar = _interopRequireDefault(require("../../../navigation-bar/__internal__/fixed-navigation-bar.context"));
19
+ var _focusTrapUtils = require("../../../../__internal__/focus-trap/focus-trap-utils");
20
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -55,7 +55,6 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
55
55
  const [characterString, setCharacterString] = (0, _react.useState)("");
56
56
  const [applyFocusRadius, setApplyFocusRadius] = (0, _react.useState)(false);
57
57
  const [applyFocusRadiusToLastItem, setApplyFocusRadiusToLastItem] = (0, _react.useState)(false);
58
- const shiftTabPressed = (0, _react.useRef)(false);
59
58
  const focusFirstMenuItemOnOpen = (0, _react.useRef)(false);
60
59
  const numberOfChildren = submenuItemIds.length;
61
60
  const {
@@ -146,7 +145,6 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
146
145
  }
147
146
  }, [submenuOpen, onSubmenuOpen]);
148
147
  const closeSubmenu = (0, _react.useCallback)(() => {
149
- shiftTabPressed.current = false;
150
148
  setSubmenuOpen(false);
151
149
  setSubmenuFocusId(null);
152
150
  if (onSubmenuClose) {
@@ -175,38 +173,20 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
175
173
  const index = findCurrentIndex(submenuFocusId);
176
174
  let nextIndex = index;
177
175
  if (href && !submenuFocusId) {
178
- if (_events.default.isDownKey(event) || _events.default.isUpKey(event) || _events.default.isTabKey(event) && !_events.default.isShiftKey(event)) {
176
+ if (_events.default.isDownKey(event) || _events.default.isUpKey(event)) {
179
177
  event.preventDefault();
180
178
  setSubmenuFocusId(submenuItemIds[0]);
181
179
  return;
182
180
  }
183
181
  }
184
- if (_events.default.isTabKey(event) && !_events.default.isShiftKey(event)) {
185
- if (nextIndex === numberOfChildren - 1) {
186
- closeSubmenu();
187
- return;
188
- }
189
- shiftTabPressed.current = false;
190
- nextIndex += 1;
191
- }
192
- if (_events.default.isTabKey(event) && _events.default.isShiftKey(event)) {
193
- if (nextIndex <= 0) {
194
- closeSubmenu();
195
- return;
196
- }
197
- shiftTabPressed.current = true;
198
- nextIndex -= 1;
199
- }
200
182
  if (_events.default.isDownKey(event)) {
201
183
  event.preventDefault();
202
- shiftTabPressed.current = false;
203
184
  if (nextIndex < numberOfChildren - 1) {
204
185
  nextIndex += 1;
205
186
  }
206
187
  }
207
188
  if (_events.default.isUpKey(event)) {
208
189
  event.preventDefault();
209
- shiftTabPressed.current = false;
210
190
  setApplyFocusRadius(false);
211
191
  if (nextIndex > 0) {
212
192
  nextIndex -= 1;
@@ -219,17 +199,16 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
219
199
  }
220
200
  if (_events.default.isHomeKey(event)) {
221
201
  event.preventDefault();
222
- shiftTabPressed.current = false;
202
+ event.stopPropagation();
223
203
  nextIndex = 0;
224
204
  }
225
205
  if (_events.default.isEndKey(event)) {
226
206
  event.preventDefault();
227
- shiftTabPressed.current = false;
207
+ event.stopPropagation();
228
208
  nextIndex = numberOfChildren - 1;
229
209
  }
230
210
  if (event.key.length === 1) {
231
211
  event.stopPropagation();
232
- shiftTabPressed.current = false;
233
212
  if (characterTimer.current) {
234
213
  restartCharacterTimeout();
235
214
  } else {
@@ -239,7 +218,7 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
239
218
  } else {
240
219
  setCharacterString("");
241
220
  }
242
- const eventIsFromInput = _events.default.composedPath(event).find(p => p.getAttribute("data-element") === "input" || p.getAttribute("data-element") === "input-icon-toggle");
221
+ const eventIsFromInput = _events.default.composedPath(event.nativeEvent).find(p => p instanceof HTMLElement && (p.getAttribute("data-element") === "input" || p.getAttribute("data-element") === "input-icon-toggle"));
243
222
  if (!eventIsFromInput) {
244
223
  if (_events.default.isEnterKey(event)) {
245
224
  /* timeout enforces that the "closeSubmenu" method will be run after
@@ -259,7 +238,7 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
259
238
 
260
239
  /* istanbul ignore else */
261
240
  if (items) {
262
- setSubmenuItemIds(Array.from(items).map(item => item.getAttribute("id")));
241
+ setSubmenuItemIds(Array.from(items).filter(item => item.querySelector(_focusTrapUtils.defaultFocusableSelectors)).map(item => item.getAttribute("id")));
263
242
  }
264
243
  }
265
244
  }, [children, submenuOpen, submenuRef]);
@@ -269,11 +248,6 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
269
248
  setSubmenuFocusId(submenuItemIds[0]);
270
249
  }
271
250
  }, [submenuOpen, submenuFocusId, submenuItemIds]);
272
- const handleClickAway = () => {
273
- document.removeEventListener("click", handleClickAway);
274
- closeSubmenu();
275
- };
276
- const handleClickInside = (0, _useClickAwayListener.default)(handleClickAway);
277
251
  const handleClick = event => {
278
252
  openSubmenu();
279
253
  if (onClick) {
@@ -290,13 +264,17 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
290
264
  }
291
265
  }
292
266
  }, [submenuRef, characterString, submenuItemIds]);
267
+ const handleSubmenuBlur = event => {
268
+ if (!event.currentTarget.contains(event.relatedTarget)) {
269
+ closeSubmenu();
270
+ }
271
+ };
293
272
  if (inFullscreenView) {
294
273
  return /*#__PURE__*/_react.default.createElement(_submenu.StyledSubmenuWrapper, {
295
274
  "data-component": "submenu-wrapper",
296
275
  inFullscreenView: inFullscreenView,
297
276
  asPassiveItem: asPassiveItem,
298
- menuType: menuContext.menuType,
299
- onClick: handleClickInside
277
+ menuType: menuContext.menuType
300
278
  }, /*#__PURE__*/_react.default.createElement(_menuItem.default, _extends({}, rest, {
301
279
  onClick: asPassiveItem ? undefined : onClick,
302
280
  className: className,
@@ -328,7 +306,6 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
328
306
  onMouseOver: !clickToOpen ? () => openSubmenu() : undefined,
329
307
  onMouseLeave: () => closeSubmenu(),
330
308
  isSubmenuOpen: submenuOpen,
331
- onClick: handleClickInside,
332
309
  ref: setSubmenuRef
333
310
  }, /*#__PURE__*/_react.default.createElement(_menuItem.default, _extends({}, rest, {
334
311
  className: className,
@@ -356,14 +333,14 @@ const Submenu = /*#__PURE__*/_react.default.forwardRef(({
356
333
  maxHeight: submenuMaxHeight,
357
334
  applyFocusRadiusStyling: applyFocusRadius,
358
335
  applyFocusRadiusStylingToLastItem: applyFocusRadiusToLastItem,
359
- submenuMaxWidth: submenuMaxWidth
336
+ submenuMaxWidth: submenuMaxWidth,
337
+ onBlur: handleSubmenuBlur
360
338
  }, /*#__PURE__*/_react.default.createElement(_submenu2.default.Provider, {
361
339
  value: {
362
340
  submenuFocusId,
363
341
  handleKeyDown,
364
342
  blockIndex,
365
343
  updateFocusId: setSubmenuFocusId,
366
- shiftTabPressed: shiftTabPressed.current,
367
344
  submenuHasMaxWidth: !!submenuMaxWidth
368
345
  }
369
346
  }, children)));
@@ -2,8 +2,7 @@ import React from "react";
2
2
  export interface SubmenuContextProps {
3
3
  submenuFocusId?: string | null;
4
4
  updateFocusId?: (id: string) => void;
5
- handleKeyDown?: (event: React.KeyboardEvent<HTMLAnchorElement>) => void;
6
- shiftTabPressed?: boolean;
5
+ handleKeyDown?: (event: React.KeyboardEvent<HTMLAnchorElement> | React.KeyboardEvent<HTMLButtonElement>) => void;
7
6
  blockIndex?: number;
8
7
  submenuHasMaxWidth?: boolean;
9
8
  }
@@ -158,7 +158,6 @@ const StyledSubmenu = exports.StyledSubmenu = _styledComponents.default.ul`
158
158
  display: flex;
159
159
  align-items: center;
160
160
  white-space: nowrap;
161
- cursor: pointer;
162
161
 
163
162
  ${inFullscreenView && (0, _styledComponents.css)`
164
163
  white-space: normal;
@@ -178,16 +177,6 @@ const StyledSubmenu = exports.StyledSubmenu = _styledComponents.default.ul`
178
177
  background-color: ${_menu2.default[menuType].submenuItemBackground};
179
178
  }
180
179
 
181
- > a:hover,
182
- > button:hover {
183
- background-color: transparent;
184
- color: var(--colorsComponentsMenuYang100);
185
-
186
- > [data-component="icon"] {
187
- color: var(--colorsComponentsMenuYang100);
188
- }
189
- }
190
-
191
180
  > a,
192
181
  > button {
193
182
  padding: 11px 16px 12px;
@@ -7,6 +7,7 @@ exports.default = exports.MenuItem = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _invariant = _interopRequireDefault(require("invariant"));
10
+ var _focusTrapUtils = require("../../../__internal__/focus-trap/focus-trap-utils");
10
11
  var _utils = require("../../../style/utils");
11
12
  var _menuItem = _interopRequireDefault(require("./menu-item.style"));
12
13
  var _events = _interopRequireDefault(require("../../../__internal__/utils/helpers/events"));
@@ -48,6 +49,7 @@ const MenuItem = ({
48
49
  !(icon || children) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "Either prop `icon` must be defined or this node must have `children`.") : (0, _invariant.default)(false) : void 0;
49
50
  !(children || ariaLabel || typeof submenu === "string") ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "If no text is provided an `ariaLabel` should be given to facilitate accessibility.") : (0, _invariant.default)(false) : void 0;
50
51
  !(typeof submenu === "boolean" || submenu === undefined || children && typeof submenu === "string" && submenu.length) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "You should not pass `children` when `submenu` is an empty string") : (0, _invariant.default)(false) : void 0;
52
+ const menuItemId = (0, _react.useRef)((0, _guid.default)());
51
53
  const {
52
54
  isChildOfSegment,
53
55
  overriddenVariant
@@ -57,24 +59,21 @@ const MenuItem = ({
57
59
  registerItem,
58
60
  unregisterItem,
59
61
  focusId,
60
- menuType,
61
- openSubmenuId
62
+ updateFocusId,
63
+ menuType
62
64
  } = (0, _react.useContext)(_menu.default);
63
- const menuItemId = (0, _react.useRef)((0, _guid.default)());
64
65
  const submenuContext = (0, _react.useContext)(_submenu2.default);
66
+ const isInSubmenu = Object.keys(submenuContext).length > 0;
65
67
  const {
66
68
  submenuFocusId,
67
69
  updateFocusId: updateSubmenuFocusId,
68
70
  handleKeyDown: handleSubmenuKeyDown,
69
- shiftTabPressed,
70
71
  submenuHasMaxWidth
71
72
  } = submenuContext;
72
- const ref = (0, _react.useRef)(null);
73
73
  const focusFromMenu = focusId === menuItemId.current;
74
74
  const focusFromSubmenu = submenuFocusId ? submenuFocusId === menuItemId.current : undefined;
75
- const inputRef = (0, _react.useRef)(null);
76
- inputRef.current = ref.current ? ref.current.querySelector("[data-element='input']") : null;
77
- const focusRef = inputRef.current ? inputRef : ref;
75
+ const ref = (0, _react.useRef)(null);
76
+ const firstFocusableChild = ref.current?.querySelector(_focusTrapUtils.defaultFocusableSelectors) ?? null;
78
77
  (0, _react.useEffect)(() => {
79
78
  const id = menuItemId.current;
80
79
 
@@ -90,41 +89,35 @@ const MenuItem = ({
90
89
  };
91
90
  }, [registerItem, unregisterItem]);
92
91
  (0, _react.useEffect)(() => {
93
- const inputIcon = ref.current?.querySelector("[data-element='input-icon-toggle']");
94
- if (!openSubmenuId && focusFromSubmenu === undefined && focusFromMenu) {
95
- /* istanbul ignore else */
96
- if (focusRef.current) {
97
- focusRef.current?.focus();
98
- }
99
- } else if (focusFromSubmenu && !(shiftTabPressed && inputIcon?.getAttribute("tabindex") === "0")) {
100
- /* istanbul ignore else */
101
- if (focusRef.current) {
102
- focusRef.current?.focus();
92
+ if (focusFromMenu && !focusFromSubmenu || focusFromSubmenu) {
93
+ if (firstFocusableChild) {
94
+ firstFocusableChild.focus();
95
+ return;
103
96
  }
97
+ ref.current?.focus();
104
98
  }
105
- }, [openSubmenuId, focusFromMenu, focusFromSubmenu, shiftTabPressed, focusRef]);
106
- const updateFocusOnClick = (0, _react.useCallback)(() => {
107
- if (updateSubmenuFocusId) {
108
- updateSubmenuFocusId(menuItemId.current);
109
- }
110
- }, [updateSubmenuFocusId]);
111
- const handleKeyDown = (0, _react.useCallback)(event => {
112
- if (onKeyDown) {
113
- onKeyDown(event);
99
+ }, [firstFocusableChild, focusFromMenu, focusFromSubmenu]);
100
+ const handleFocus = event => {
101
+ if (isInSubmenu) {
102
+ event.stopPropagation();
103
+ updateSubmenuFocusId?.(menuItemId.current);
104
+ } else {
105
+ updateFocusId?.(menuItemId.current);
114
106
  }
115
- if (ref.current && _events.default.isEscKey(event)) {
107
+ };
108
+ const handleKeyDown = event => {
109
+ onKeyDown?.(event);
110
+ if (_events.default.isEscKey(event)) {
116
111
  ref.current?.focus();
117
112
  }
118
- if (handleSubmenuKeyDown) {
119
- handleSubmenuKeyDown(event);
120
- }
121
- }, [onKeyDown, handleSubmenuKeyDown]);
113
+ handleSubmenuKeyDown?.(event);
114
+ };
122
115
  const elementProps = {
123
116
  className: href || onClick ? "carbon-menu-item--has-link" : "",
124
- href,
117
+ href: firstFocusableChild ? undefined : href,
118
+ onClick: firstFocusableChild ? undefined : onClick,
125
119
  target,
126
120
  rel,
127
- onClick,
128
121
  icon,
129
122
  removeAriaLabelOnIcon: true,
130
123
  selected,
@@ -137,8 +130,7 @@ const MenuItem = ({
137
130
  }
138
131
  const getTitle = title => maxWidth && typeof title === "string" ? title : undefined;
139
132
  const itemMaxWidth = !inFullscreenView ? maxWidth : undefined;
140
- const asPassiveItem = !(onClick || href);
141
- const hasInput = !!inputRef.current;
133
+ const asPassiveItem = !(onClick || href || firstFocusableChild);
142
134
  if (submenu) {
143
135
  return /*#__PURE__*/_react.default.createElement(_menu2.StyledMenuItem, _extends({
144
136
  "data-component": "menu-item",
@@ -146,12 +138,12 @@ const MenuItem = ({
146
138
  "data-role": dataRole,
147
139
  menuType: menuType,
148
140
  title: getTitle(submenu),
149
- maxWidth: itemMaxWidth,
150
- onClick: updateFocusOnClick
141
+ maxWidth: itemMaxWidth
151
142
  }, rest, {
152
143
  inFullscreenView: inFullscreenView,
153
144
  id: menuItemId.current,
154
- as: as
145
+ as: as,
146
+ onFocus: handleFocus
155
147
  }), /*#__PURE__*/_react.default.createElement(_submenu.default, _extends({}, typeof submenu !== "boolean" && {
156
148
  title: submenu
157
149
  }, {
@@ -169,19 +161,20 @@ const MenuItem = ({
169
161
  }, rest), children));
170
162
  }
171
163
  const paddingProps = (0, _utils.filterStyledSystemPaddingProps)(rest);
164
+ const hasInput = !!ref.current?.querySelector("[data-element='input']");
172
165
  return /*#__PURE__*/_react.default.createElement(_menu2.StyledMenuItem, _extends({
173
166
  "data-component": "menu-item",
174
167
  "data-element": dataElement,
175
168
  "data-role": dataRole,
176
169
  menuType: menuType,
177
- inSubmenu: !!handleSubmenuKeyDown,
170
+ inSubmenu: isInSubmenu,
178
171
  title: getTitle(children),
179
172
  maxWidth: itemMaxWidth
180
173
  }, rest, {
181
174
  inFullscreenView: inFullscreenView && !Object.keys(submenuContext).length,
182
175
  id: menuItemId.current,
183
- onClick: updateFocusOnClick,
184
- as: as
176
+ as: as,
177
+ onFocus: handleFocus
185
178
  }), /*#__PURE__*/_react.default.createElement(_menuItem.default, _extends({
186
179
  menuType: menuType,
187
180
  "data-role": "menu-item-wrapper"
@@ -190,12 +183,12 @@ const MenuItem = ({
190
183
  ariaLabel: ariaLabel,
191
184
  maxWidth: !submenuHasMaxWidth ? itemMaxWidth : undefined,
192
185
  inFullscreenView: inFullscreenView,
193
- asPassiveItem: asPassiveItem,
194
- placeholderTabIndex: asPassiveItem
186
+ asPassiveItem: asPassiveItem
195
187
  }, paddingProps, {
196
188
  asDiv: hasInput || as === "div",
189
+ hasFocusableChild: !!firstFocusableChild,
197
190
  hasInput: hasInput,
198
- inSubmenu: !!handleSubmenuKeyDown
191
+ inSubmenu: isInSubmenu
199
192
  }), children));
200
193
  };
201
194
  exports.MenuItem = MenuItem;
@@ -9,15 +9,15 @@ interface StyledMenuItemWrapperProps extends Pick<MenuWithChildren, "href" | "sh
9
9
  isOpen?: boolean;
10
10
  inFullscreenView?: boolean;
11
11
  asPassiveItem?: boolean;
12
- placeholderTabIndex?: boolean;
13
12
  icon?: string;
14
13
  ariaLabel?: string;
15
14
  asDiv?: boolean;
15
+ hasFocusableChild?: boolean;
16
16
  hasInput?: boolean;
17
17
  menuItemVariant?: Pick<MenuWithChildren, "variant">["variant"];
18
18
  inSubmenu?: boolean;
19
19
  }
20
20
  declare const StyledMenuItemWrapper: import("styled-components").StyledComponent<"a", any, {
21
- as: import("react").ForwardRefExoticComponent<import("../../link").LinkProps & import("react").RefAttributes<HTMLButtonElement | HTMLLinkElement>>;
21
+ as: import("react").ForwardRefExoticComponent<import("../../link").LinkProps & import("react").RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
22
22
  } & StyledMenuItemWrapperProps, "as">;
23
23
  export default StyledMenuItemWrapper;