@gooddata/sdk-ui-kit 10.28.0-alpha.5 → 10.28.0-alpha.51

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 (202) hide show
  1. package/esm/@ui/@types/size.d.ts +4 -0
  2. package/esm/@ui/@types/size.d.ts.map +1 -1
  3. package/esm/@ui/@types/size.js +1 -0
  4. package/esm/@ui/@types/size.js.map +1 -1
  5. package/esm/@ui/@utils/keyboardNavigation.d.ts +44 -12
  6. package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
  7. package/esm/@ui/@utils/keyboardNavigation.js +55 -65
  8. package/esm/@ui/@utils/keyboardNavigation.js.map +1 -1
  9. package/esm/@ui/UiChip/UiChip.d.ts +2 -1
  10. package/esm/@ui/UiChip/UiChip.d.ts.map +1 -1
  11. package/esm/@ui/UiChip/UiChip.js +2 -2
  12. package/esm/@ui/UiChip/UiChip.js.map +1 -1
  13. package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
  14. package/esm/@ui/UiFocusTrap/UiFocusTrap.js +4 -1
  15. package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
  16. package/esm/@ui/UiIconButton/UiIconButton.d.ts +2 -2
  17. package/esm/@ui/UiIconButton/UiIconButton.d.ts.map +1 -1
  18. package/esm/@ui/UiIconButton/UiIconButton.js +23 -2
  19. package/esm/@ui/UiIconButton/UiIconButton.js.map +1 -1
  20. package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -1
  21. package/esm/@ui/UiListbox/UiListbox.js +4 -5
  22. package/esm/@ui/UiListbox/UiListbox.js.map +1 -1
  23. package/esm/@ui/UiMenu/UiMenu.d.ts +1 -1
  24. package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -1
  25. package/esm/@ui/UiMenu/UiMenu.js +26 -6
  26. package/esm/@ui/UiMenu/UiMenu.js.map +1 -1
  27. package/esm/@ui/UiMenu/components/Item.d.ts +4 -0
  28. package/esm/@ui/UiMenu/components/Item.d.ts.map +1 -0
  29. package/esm/@ui/UiMenu/components/Item.js +26 -0
  30. package/esm/@ui/UiMenu/components/Item.js.map +1 -0
  31. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.d.ts +10 -0
  32. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.d.ts.map +1 -0
  33. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.js +29 -0
  34. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.js.map +1 -0
  35. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts +12 -0
  36. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts.map +1 -0
  37. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js +60 -0
  38. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js.map +1 -0
  39. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuGroupItem.d.ts +7 -0
  40. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuGroupItem.d.ts.map +1 -0
  41. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuGroupItemComponent.js → components/defaults/DefaultUiMenuGroupItem.js} +5 -5
  42. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuGroupItemComponent.js.map → components/defaults/DefaultUiMenuGroupItem.js.map} +1 -1
  43. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.d.ts +8 -0
  44. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.d.ts.map +1 -0
  45. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.js +49 -0
  46. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.js.map +1 -0
  47. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts +11 -0
  48. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts.map +1 -0
  49. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuInteractiveItemComponent.js → components/defaults/DefaultUiMenuInteractiveItem.js} +7 -7
  50. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.js.map +1 -0
  51. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.d.ts +8 -0
  52. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.d.ts.map +1 -0
  53. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuStaticItemComponent.js → components/defaults/DefaultUiMenuStaticItem.js} +3 -3
  54. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.js.map +1 -0
  55. package/esm/@ui/UiMenu/context.d.ts +6 -2
  56. package/esm/@ui/UiMenu/context.d.ts.map +1 -1
  57. package/esm/@ui/UiMenu/context.js +10 -0
  58. package/esm/@ui/UiMenu/context.js.map +1 -1
  59. package/esm/@ui/UiMenu/hooks.d.ts +10 -4
  60. package/esm/@ui/UiMenu/hooks.d.ts.map +1 -1
  61. package/esm/@ui/UiMenu/hooks.js +90 -37
  62. package/esm/@ui/UiMenu/hooks.js.map +1 -1
  63. package/esm/@ui/UiMenu/itemUtils.d.ts +60 -1
  64. package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -1
  65. package/esm/@ui/UiMenu/itemUtils.js +69 -1
  66. package/esm/@ui/UiMenu/itemUtils.js.map +1 -1
  67. package/esm/@ui/UiMenu/types.d.ts +65 -18
  68. package/esm/@ui/UiMenu/types.d.ts.map +1 -1
  69. package/esm/Button/Button.d.ts.map +1 -1
  70. package/esm/Button/Button.js +2 -2
  71. package/esm/Button/Button.js.map +1 -1
  72. package/esm/Button/typings.d.ts +1 -0
  73. package/esm/Button/typings.d.ts.map +1 -1
  74. package/esm/Dialog/DialogCloseButton.d.ts +3 -0
  75. package/esm/Dialog/DialogCloseButton.d.ts.map +1 -1
  76. package/esm/Dialog/DialogCloseButton.js +6 -2
  77. package/esm/Dialog/DialogCloseButton.js.map +1 -1
  78. package/esm/Dialog/index.d.ts +1 -0
  79. package/esm/Dialog/index.d.ts.map +1 -1
  80. package/esm/Dialog/index.js +2 -1
  81. package/esm/Dialog/index.js.map +1 -1
  82. package/esm/Dialog/typings.d.ts +3 -1
  83. package/esm/Dialog/typings.d.ts.map +1 -1
  84. package/esm/Dropdown/Dropdown.d.ts +2 -0
  85. package/esm/Dropdown/Dropdown.d.ts.map +1 -1
  86. package/esm/Dropdown/Dropdown.js +20 -20
  87. package/esm/Dropdown/Dropdown.js.map +1 -1
  88. package/esm/Header/generateHeaderAccountMenuItems.d.ts +0 -4
  89. package/esm/Header/generateHeaderAccountMenuItems.d.ts.map +1 -1
  90. package/esm/Header/generateHeaderAccountMenuItems.js +2 -6
  91. package/esm/Header/generateHeaderAccountMenuItems.js.map +1 -1
  92. package/esm/List/MenuList.d.ts.map +1 -1
  93. package/esm/List/MenuList.js +2 -2
  94. package/esm/List/MenuList.js.map +1 -1
  95. package/esm/List/guid.d.ts.map +1 -1
  96. package/esm/List/guid.js +5 -2
  97. package/esm/List/guid.js.map +1 -1
  98. package/esm/Menu/menuOpener/MenuOpener.js +2 -2
  99. package/esm/Menu/menuOpener/MenuOpener.js.map +1 -1
  100. package/esm/Overlay/Overlay.d.ts.map +1 -1
  101. package/esm/Overlay/Overlay.js +6 -2
  102. package/esm/Overlay/Overlay.js.map +1 -1
  103. package/esm/RecurrenceForm/DateTime.d.ts +1 -0
  104. package/esm/RecurrenceForm/DateTime.d.ts.map +1 -1
  105. package/esm/RecurrenceForm/DateTime.js +2 -2
  106. package/esm/RecurrenceForm/DateTime.js.map +1 -1
  107. package/esm/RecurrenceForm/Recurrence.d.ts +1 -0
  108. package/esm/RecurrenceForm/Recurrence.d.ts.map +1 -1
  109. package/esm/RecurrenceForm/Recurrence.js +2 -2
  110. package/esm/RecurrenceForm/Recurrence.js.map +1 -1
  111. package/esm/RecurrenceForm/RecurrenceForm.d.ts +1 -0
  112. package/esm/RecurrenceForm/RecurrenceForm.d.ts.map +1 -1
  113. package/esm/RecurrenceForm/RecurrenceForm.js +3 -3
  114. package/esm/RecurrenceForm/RecurrenceForm.js.map +1 -1
  115. package/esm/RecurrenceForm/RepeatTypeSelect.d.ts +1 -0
  116. package/esm/RecurrenceForm/RepeatTypeSelect.d.ts.map +1 -1
  117. package/esm/RecurrenceForm/RepeatTypeSelect.js +2 -2
  118. package/esm/RecurrenceForm/RepeatTypeSelect.js.map +1 -1
  119. package/esm/Timepicker/Timepicker.d.ts +1 -0
  120. package/esm/Timepicker/Timepicker.d.ts.map +1 -1
  121. package/esm/Timepicker/Timepicker.js +2 -2
  122. package/esm/Timepicker/Timepicker.js.map +1 -1
  123. package/esm/ZoomContext/ZoomContext.js +6 -6
  124. package/esm/ZoomContext/ZoomContext.js.map +1 -1
  125. package/esm/index.d.ts +14 -6
  126. package/esm/index.d.ts.map +1 -1
  127. package/esm/index.js +11 -4
  128. package/esm/index.js.map +1 -1
  129. package/esm/responsive/useMediaQuery.d.ts.map +1 -1
  130. package/esm/responsive/useMediaQuery.js +3 -1
  131. package/esm/responsive/useMediaQuery.js.map +1 -1
  132. package/esm/sdk-ui-kit.d.ts +319 -73
  133. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.d.ts +13 -5
  134. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.d.ts.map +1 -1
  135. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.js +5 -1
  136. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.js.map +1 -1
  137. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.d.ts +16 -0
  138. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.d.ts.map +1 -0
  139. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.js +65 -0
  140. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.js.map +1 -0
  141. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.d.ts +8 -0
  142. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.d.ts.map +1 -0
  143. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.js +21 -0
  144. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.js.map +1 -0
  145. package/esm/syntaxHighlightingInput/hooks/useCodemirror.d.ts +11 -9
  146. package/esm/syntaxHighlightingInput/hooks/useCodemirror.d.ts.map +1 -1
  147. package/esm/syntaxHighlightingInput/hooks/useCodemirror.js +41 -96
  148. package/esm/syntaxHighlightingInput/hooks/useCodemirror.js.map +1 -1
  149. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.d.ts +4 -0
  150. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.d.ts.map +1 -0
  151. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.js +35 -0
  152. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.js.map +1 -0
  153. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.d.ts +6 -0
  154. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.d.ts.map +1 -0
  155. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.js +24 -0
  156. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.js.map +1 -0
  157. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.d.ts +9 -0
  158. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.d.ts.map +1 -0
  159. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.js +26 -0
  160. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.js.map +1 -0
  161. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.d.ts +8 -0
  162. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.d.ts.map +1 -0
  163. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.js +27 -0
  164. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.js.map +1 -0
  165. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.d.ts +10 -0
  166. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.d.ts.map +1 -0
  167. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.js +21 -0
  168. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.js.map +1 -0
  169. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.d.ts +20 -0
  170. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.d.ts.map +1 -0
  171. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.js +25 -0
  172. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.js.map +1 -0
  173. package/esm/typings/accessibility.d.ts +1 -0
  174. package/esm/typings/accessibility.d.ts.map +1 -1
  175. package/esm/utils/domUtilities.d.ts +8 -1
  176. package/esm/utils/domUtilities.d.ts.map +1 -1
  177. package/esm/utils/domUtilities.js +8 -0
  178. package/esm/utils/domUtilities.js.map +1 -1
  179. package/esm/utils/useAutofocusOnMount.d.ts +7 -0
  180. package/esm/utils/useAutofocusOnMount.d.ts.map +1 -0
  181. package/esm/utils/useAutofocusOnMount.js +40 -0
  182. package/esm/utils/useAutofocusOnMount.js.map +1 -0
  183. package/package.json +9 -8
  184. package/src/@ui/UiMenu/UiMenu.scss +15 -7
  185. package/styles/css/header.css.map +1 -1
  186. package/styles/css/main.css +14 -7
  187. package/styles/css/main.css.map +1 -1
  188. package/styles/css/shareDialogSelectControl.css.map +1 -1
  189. package/styles/scss/header.scss +2 -4
  190. package/styles/scss/shareDialogSelectControl.scss +0 -1
  191. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts +0 -7
  192. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts.map +0 -1
  193. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +0 -9
  194. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +0 -1
  195. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +0 -39
  196. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +0 -1
  197. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +0 -11
  198. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +0 -1
  199. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +0 -1
  200. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +0 -8
  201. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +0 -1
  202. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js.map +0 -1
@@ -1,37 +1,65 @@
1
1
  // (C) 2022-2025 GoodData Corporation
2
2
  import { makeMenuKeyboardNavigation } from "../@utils/keyboardNavigation.js";
3
- import { getClosestFocusableSibling, getInteractiveItem, getItemInteractiveParent, getItemsByInteractiveParent, getSiblingItems, unwrapGroupItems, } from "./itemUtils.js";
3
+ import { getClosestFocusableSibling, getFocusableItem, getItemInteractiveParent, getItemsByInteractiveParent, getSiblingItems, unwrapGroupItems, } from "./itemUtils.js";
4
4
  import { useAutoupdateRef } from "@gooddata/sdk-ui";
5
5
  import React from "react";
6
- import { DefaultUiMenuInteractiveItemComponent, DefaultUiMenuInteractiveItemWrapperComponent, } from "./defaults/DefaultUiMenuInteractiveItemComponent.js";
7
- import { DefaultUiMenuStaticItemComponent } from "./defaults/DefaultUiMenuStaticItemComponent.js";
8
- import { DefaultUiMenuGroupItemComponent } from "./defaults/DefaultUiMenuGroupItemComponent.js";
9
- import { DefaultUiMenuHeaderComponent } from "./defaults/DefaultUiMenuHeaderComponent.js";
6
+ import { DefaultUiMenuInteractiveItem, DefaultUiMenuInteractiveItemWrapper, } from "./components/defaults/DefaultUiMenuInteractiveItem.js";
7
+ import { DefaultUiMenuStaticItem } from "./components/defaults/DefaultUiMenuStaticItem.js";
8
+ import { DefaultUiMenuGroupItem } from "./components/defaults/DefaultUiMenuGroupItem.js";
9
+ import { DefaultUiMenuHeader } from "./components/defaults/DefaultUiMenuHeader.js";
10
10
  import { v4 as uuid } from "uuid";
11
- import { typedUiMenuContextStore } from "./context.js";
11
+ import { DefaultUiMenuContentItem, DefaultUiMenuContentItemWrapper, } from "./components/defaults/DefaultUiMenuContentItem.js";
12
+ import { DefaultUiMenuContent } from "./components/defaults/DefaultUiMenuContent.js";
13
+ import { Item } from "./components/Item.js";
14
+ import { isElementTextInput } from "../../utils/domUtilities.js";
12
15
  /**
13
16
  * @internal
14
17
  */
15
18
  export function useUiMenuContextValue(props, menuComponentRef, itemsContainerRef) {
16
- const { items, itemClassName, onSelect, onClose, InteractiveItemComponent = DefaultUiMenuInteractiveItemComponent, InteractiveItemWrapperComponent = DefaultUiMenuInteractiveItemWrapperComponent, StaticItemComponent = DefaultUiMenuStaticItemComponent, GroupItemComponent = DefaultUiMenuGroupItemComponent, MenuHeaderComponent = DefaultUiMenuHeaderComponent, shouldCloseOnSelect = true, isDisabledFocusable = true, ariaAttributes, } = props;
19
+ const { items, itemClassName, onSelect, onLevelChange, onClose, InteractiveItem: InteractiveItemComponent = DefaultUiMenuInteractiveItem, InteractiveItemWrapper: InteractiveItemWrapperComponent = DefaultUiMenuInteractiveItemWrapper, StaticItem: StaticItemComponent = DefaultUiMenuStaticItem, GroupItem: GroupItemComponent = DefaultUiMenuGroupItem, MenuHeader: MenuHeaderComponent = DefaultUiMenuHeader, ContentItem: ContentItemComponent = DefaultUiMenuContentItem, ContentItemWrapper: ContentItemWrapperComponent = DefaultUiMenuContentItemWrapper, Content: ContentComponent = DefaultUiMenuContent, shouldCloseOnSelect = true, isDisabledFocusable = true, ariaAttributes, menuCtxData, } = props;
17
20
  const [controlType, setControlType] = React.useState("unknown");
18
21
  const isItemFocusable = React.useCallback((item) => {
19
- if (!item || item.type !== "interactive") {
22
+ if (!item || (item.type !== "interactive" && item.type !== "content")) {
20
23
  return false;
21
24
  }
22
25
  return isDisabledFocusable || !item.isDisabled;
23
26
  }, [isDisabledFocusable]);
24
27
  const [focusedId, setFocusedId_internal] = React.useState(() => unwrapGroupItems(items).find(isItemFocusable)?.id);
28
+ const [shownCustomContentItemId, setShownCustomContentItemId] = React.useState(undefined);
25
29
  const setFocusedId = React.useCallback((...args) => {
26
30
  setFocusedId_internal(...args);
27
31
  // Focus is lost when clicking on an item that opens a submenu. We need to refocus the menu.
28
32
  menuComponentRef.current?.focus();
29
33
  }, [menuComponentRef]);
30
- const focusedItem = focusedId === undefined ? undefined : getInteractiveItem(items, focusedId);
34
+ const focusedItem = focusedId !== undefined ? getFocusableItem(items, focusedId) : undefined;
35
+ const parentItemId = React.useMemo(() => {
36
+ if (shownCustomContentItemId) {
37
+ return shownCustomContentItemId;
38
+ }
39
+ if (focusedItem) {
40
+ return getItemInteractiveParent(items, focusedItem.id)?.id;
41
+ }
42
+ return undefined;
43
+ }, [focusedItem, items, shownCustomContentItemId]);
44
+ React.useEffect(() => {
45
+ if (parentItemId) {
46
+ const item = getFocusableItem(items, parentItemId);
47
+ onLevelChange?.(1, item);
48
+ }
49
+ else {
50
+ onLevelChange?.(0, undefined);
51
+ }
52
+ }, [parentItemId, onLevelChange, items]);
31
53
  const handleSelectItem = React.useCallback((item) => {
32
54
  if (!item || item.isDisabled) {
33
55
  return;
34
56
  }
57
+ if (item.type === "content") {
58
+ if (item.Component) {
59
+ setShownCustomContentItemId(item.id);
60
+ }
61
+ return;
62
+ }
35
63
  // If there is no submenu, select the item
36
64
  if (!item.subItems) {
37
65
  onSelect?.(item);
@@ -39,14 +67,21 @@ export function useUiMenuContextValue(props, menuComponentRef, itemsContainerRef
39
67
  return;
40
68
  }
41
69
  // Otherwise focus the first focusable child
42
- const itemToFocus = getItemsByInteractiveParent(items, item.id)?.filter(isItemFocusable)[0];
70
+ const itemToFocus = unwrapGroupItems(getItemsByInteractiveParent(items, item.id) ?? []).filter(isItemFocusable)[0];
43
71
  if (!itemToFocus) {
44
72
  return;
45
73
  }
46
74
  setFocusedId(itemToFocus.id);
47
75
  menuComponentRef.current?.focus();
48
76
  }, [isItemFocusable, items, menuComponentRef, onClose, onSelect, setFocusedId, shouldCloseOnSelect]);
49
- const makeItemId = React.useCallback((item) => (item && item.type === "interactive" ? `item-${ariaAttributes.id}-${item.id}` : uuid()), [ariaAttributes.id]);
77
+ const makeItemId = React.useCallback((item) => {
78
+ if (!item) {
79
+ return undefined;
80
+ }
81
+ return item && (item.type === "interactive" || item.type === "content")
82
+ ? `item-${ariaAttributes.id}-${item.id}`
83
+ : uuid();
84
+ }, [ariaAttributes.id]);
50
85
  const scrollToView = React.useCallback((element) => {
51
86
  if (!element) {
52
87
  return;
@@ -62,6 +97,8 @@ export function useUiMenuContextValue(props, menuComponentRef, itemsContainerRef
62
97
  setControlType,
63
98
  setFocusedId,
64
99
  focusedItem,
100
+ setShownCustomContentItemId,
101
+ shownCustomContentItemId,
65
102
  onClose,
66
103
  items,
67
104
  onSelect: handleSelectItem,
@@ -71,39 +108,24 @@ export function useUiMenuContextValue(props, menuComponentRef, itemsContainerRef
71
108
  scrollToView,
72
109
  menuComponentRef,
73
110
  itemsContainerRef,
74
- InteractiveItemWrapperComponent,
75
- InteractiveItemComponent,
76
- StaticItemComponent,
77
- GroupItemComponent,
78
- MenuHeaderComponent,
79
- ItemComponent,
111
+ InteractiveItemWrapper: InteractiveItemWrapperComponent,
112
+ InteractiveItem: InteractiveItemComponent,
113
+ StaticItem: StaticItemComponent,
114
+ GroupItem: GroupItemComponent,
115
+ MenuHeader: MenuHeaderComponent,
116
+ ContentItemWrapper: ContentItemWrapperComponent,
117
+ ContentItem: ContentItemComponent,
118
+ Content: ContentComponent,
119
+ ItemComponent: Item,
120
+ menuCtxData,
80
121
  };
81
122
  }
82
- const ItemComponent = React.memo(function ItemComponent({ item, }) {
83
- const { InteractiveItemWrapperComponent, StaticItemComponent, GroupItemComponent } = typedUiMenuContextStore().useContextStore((ctx) => ({
84
- InteractiveItemWrapperComponent: ctx.InteractiveItemWrapperComponent,
85
- StaticItemComponent: ctx.StaticItemComponent,
86
- GroupItemComponent: ctx.GroupItemComponent,
87
- }));
88
- if (item.type === "interactive") {
89
- return React.createElement(InteractiveItemWrapperComponent, { item: item });
90
- }
91
- if (item.type === "static") {
92
- return React.createElement(StaticItemComponent, { item: item });
93
- }
94
- if (item.type === "group") {
95
- return React.createElement(GroupItemComponent, { item: item });
96
- }
97
- return null;
98
- });
99
123
  /**
100
124
  * @internal
101
125
  */
102
126
  export function useKeyNavigation({ menuContextValue, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, onUnhandledKeyDown, }) {
103
127
  const menuContextRef = useAutoupdateRef(menuContextValue);
104
128
  return makeMenuKeyboardNavigation({
105
- shouldPreventDefault: shouldKeyboardActionPreventDefault,
106
- shouldStopPropagation: shouldKeyboardActionStopPropagation,
107
129
  onFocusPrevious: () => {
108
130
  const { setFocusedId, items, isItemFocusable } = menuContextRef.current;
109
131
  setFocusedId((prevId) => getClosestFocusableSibling({
@@ -148,7 +170,9 @@ export function useKeyNavigation({ menuContextValue, shouldKeyboardActionPrevent
148
170
  },
149
171
  onEnterLevel: () => {
150
172
  const { onSelect, focusedItem } = menuContextRef.current;
151
- if (focusedItem?.type !== "interactive" || !focusedItem.subItems) {
173
+ if ((focusedItem?.type !== "interactive" && focusedItem?.type !== "content") ||
174
+ (focusedItem?.type === "interactive" && !focusedItem.subItems) ||
175
+ (focusedItem?.type === "content" && !focusedItem.Component)) {
152
176
  return;
153
177
  }
154
178
  onSelect(focusedItem);
@@ -168,6 +192,35 @@ export function useKeyNavigation({ menuContextValue, shouldKeyboardActionPrevent
168
192
  onUnhandledKeyDown: (event) => {
169
193
  onUnhandledKeyDown?.(event, menuContextRef.current);
170
194
  },
195
+ }, {
196
+ shouldPreventDefault: shouldKeyboardActionPreventDefault,
197
+ shouldStopPropagation: shouldKeyboardActionStopPropagation,
198
+ });
199
+ }
200
+ export function useCustomContentKeyNavigation({ menuContextValue, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, onUnhandledKeyDown, }) {
201
+ const menuContextRef = useAutoupdateRef(menuContextValue);
202
+ return makeMenuKeyboardNavigation({
203
+ onLeaveLevel: () => {
204
+ const isInputFocused = isElementTextInput(document.activeElement);
205
+ if (isInputFocused) {
206
+ return;
207
+ }
208
+ const { setShownCustomContentItemId } = menuContextRef.current;
209
+ setShownCustomContentItemId(undefined);
210
+ },
211
+ onClose: () => {
212
+ const isInputFocused = isElementTextInput(document.activeElement);
213
+ if (isInputFocused) {
214
+ return;
215
+ }
216
+ menuContextRef.current.onClose?.();
217
+ },
218
+ onUnhandledKeyDown: (event) => {
219
+ onUnhandledKeyDown?.(event, menuContextRef.current);
220
+ },
221
+ }, {
222
+ shouldPreventDefault: shouldKeyboardActionPreventDefault,
223
+ shouldStopPropagation: shouldKeyboardActionStopPropagation,
171
224
  });
172
225
  }
173
226
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.tsx"],"names":[],"mappings":"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"}
@@ -1,18 +1,77 @@
1
- import { IUiMenuInteractiveItem, IUiMenuItem, IUiMenuItemData } from "./types.js";
1
+ import { IUiMenuContentItem, IUiMenuFocusableItem, IUiMenuInteractiveItem, IUiMenuItem, IUiMenuItemData } from "./types.js";
2
+ /**
3
+ * Recursively finds an item in the menu tree that matches the predicate.
4
+ * @internal
5
+ */
2
6
  export declare const findItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], predicate: (item: IUiMenuItem<T>) => boolean) => IUiMenuItem<T>;
7
+ /**
8
+ * Gets a menu item by its ID.
9
+ * @internal
10
+ */
3
11
  export declare const getItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuItem<T>;
12
+ /**
13
+ * Finds an interactive menu item that matches the predicate.
14
+ * @internal
15
+ */
4
16
  export declare const findInteractiveItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], predicate: (item: IUiMenuInteractiveItem<T>) => boolean) => IUiMenuInteractiveItem<T>;
17
+ /**
18
+ * Finds a content menu item that matches the predicate.
19
+ * @internal
20
+ */
21
+ export declare const findContentItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], predicate: (item: IUiMenuContentItem<T>) => boolean) => IUiMenuContentItem<T>;
22
+ /**
23
+ * Gets an interactive menu item by its ID.
24
+ * @internal
25
+ */
5
26
  export declare const getInteractiveItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuInteractiveItem<T>;
27
+ /**
28
+ * Gets a content menu item by its ID.
29
+ * @internal
30
+ */
31
+ export declare const getContentItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuContentItem<T>;
32
+ /**
33
+ * Gets a focusable (either interactive or content) menu item by its ID.
34
+ * @internal
35
+ */
36
+ export declare const getFocusableItem: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuFocusableItem | undefined;
37
+ /**
38
+ * Gets all items under a specific interactive parent item.
39
+ * @internal
40
+ */
6
41
  export declare const getItemsByInteractiveParent: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], parentId?: string) => IUiMenuItem<T>[];
42
+ /**
43
+ * Gets the interactive parent of a menu item.
44
+ * @internal
45
+ */
7
46
  export declare const getItemInteractiveParent: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuInteractiveItem<T>;
47
+ /**
48
+ * Gets all sibling items of a menu item.
49
+ * @internal
50
+ */
8
51
  export declare const getSiblingItems: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuItem<T>[];
52
+ /**
53
+ * Gets all next sibling items of a menu item with wraparound.
54
+ * @internal
55
+ */
9
56
  export declare const getNextSiblings: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuItem<T>[];
57
+ /**
58
+ * Gets all previous sibling items of a menu item with wraparound.
59
+ * @internal
60
+ */
10
61
  export declare const getPreviousSiblings: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[], itemId: string) => IUiMenuItem<T>[];
62
+ /**
63
+ * Gets the closest focusable sibling item in the specified direction.
64
+ * @internal
65
+ */
11
66
  export declare const getClosestFocusableSibling: <T extends IUiMenuItemData = object>(args: {
12
67
  items: IUiMenuItem<T>[];
13
68
  isItemFocusable: (item: IUiMenuItem<T>) => boolean;
14
69
  itemId?: string;
15
70
  direction: "forward" | "backward";
16
71
  }) => IUiMenuItem<T>;
72
+ /**
73
+ * Unwraps items from group containers into a flat array.
74
+ * @internal
75
+ */
17
76
  export declare function unwrapGroupItems<T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[]): IUiMenuItem<T>[];
18
77
  //# sourceMappingURL=itemUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"itemUtils.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElF,eAAO,MAAM,QAAQ,qGAEoB,OAAO,mBAgB/C,CAAC;AAEF,eAAO,MAAM,OAAO,wEAER,MAAM,mBAGjB,CAAC;AAEF,eAAO,MAAM,mBAAmB,gHAEoB,OAAO,8BAK1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,wEAEnB,MAAM,8BAGjB,CAAC;AAEF,eAAO,MAAM,2BAA2B,2EAEzB,MAAM,qBAKpB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wEAEzB,MAAM,8BAmBjB,CAAC;AAEF,eAAO,MAAM,eAAe,wEAEhB,MAAM,qBAQjB,CAAC;AAEF,eAAO,MAAM,eAAe,wEAEhB,MAAM,qBAWjB,CAAC;AAEF,eAAO,MAAM,mBAAmB,wEAEpB,MAAM,qBAWjB,CAAC;AAEF,eAAO,MAAM,0BAA0B;;+CAEQ,OAAO;aACzC,MAAM;eACJ,SAAS,GAAG,UAAU;oBAkBpC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,oBAkB3F"}
1
+ {"version":3,"file":"itemUtils.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,eAAe,EAClB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,QAAQ,qGAEoB,OAAO,mBAgB/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,wEAER,MAAM,mBAGjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,gHAEoB,OAAO,8BAK1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,4GAEoB,OAAO,0BAKtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wEAEnB,MAAM,8BAGjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,wEAEf,MAAM,0BAGjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,wEAEjB,MAAM,KACf,oBAAoB,GAAG,SAEzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,2EAEzB,MAAM,qBAKpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wEAEzB,MAAM,8BAuBjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,wEAEhB,MAAM,qBAQjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,wEAEhB,MAAM,qBAWjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,wEAEpB,MAAM,qBAWjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;+CAEQ,OAAO;aACzC,MAAM;eACJ,SAAS,GAAG,UAAU;oBAkBpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,oBAkB3F"}
@@ -1,4 +1,8 @@
1
1
  // (C) 2025 GoodData Corporation
2
+ /**
3
+ * Recursively finds an item in the menu tree that matches the predicate.
4
+ * @internal
5
+ */
2
6
  export const findItem = (items, predicate) => {
3
7
  for (const item of items) {
4
8
  if (predicate(item)) {
@@ -13,23 +17,67 @@ export const findItem = (items, predicate) => {
13
17
  }
14
18
  return undefined;
15
19
  };
20
+ /**
21
+ * Gets a menu item by its ID.
22
+ * @internal
23
+ */
16
24
  export const getItem = (items, itemId) => {
17
25
  return findItem(items, (item) => item.id === itemId);
18
26
  };
27
+ /**
28
+ * Finds an interactive menu item that matches the predicate.
29
+ * @internal
30
+ */
19
31
  export const findInteractiveItem = (items, predicate) => {
20
32
  const foundItem = findItem(items, (item) => item.type === "interactive" && predicate(item));
21
33
  return foundItem?.type === "interactive" ? foundItem : undefined;
22
34
  };
35
+ /**
36
+ * Finds a content menu item that matches the predicate.
37
+ * @internal
38
+ */
39
+ export const findContentItem = (items, predicate) => {
40
+ const foundItem = findItem(items, (item) => item.type === "content" && predicate(item));
41
+ return foundItem?.type === "content" ? foundItem : undefined;
42
+ };
43
+ /**
44
+ * Gets an interactive menu item by its ID.
45
+ * @internal
46
+ */
23
47
  export const getInteractiveItem = (items, itemId) => {
24
48
  return findInteractiveItem(items, (item) => item.id === itemId);
25
49
  };
50
+ /**
51
+ * Gets a content menu item by its ID.
52
+ * @internal
53
+ */
54
+ export const getContentItem = (items, itemId) => {
55
+ return findContentItem(items, (item) => item.id === itemId);
56
+ };
57
+ /**
58
+ * Gets a focusable (either interactive or content) menu item by its ID.
59
+ * @internal
60
+ */
61
+ export const getFocusableItem = (items, itemId) => {
62
+ return getContentItem(items, itemId) || getInteractiveItem(items, itemId);
63
+ };
64
+ /**
65
+ * Gets all items under a specific interactive parent item.
66
+ * @internal
67
+ */
26
68
  export const getItemsByInteractiveParent = (items, parentId) => {
27
69
  const isRootLevel = parentId === undefined;
28
70
  return isRootLevel ? items : findInteractiveItem(items, (item) => item.id === parentId)?.subItems;
29
71
  };
72
+ /**
73
+ * Gets the interactive parent of a menu item.
74
+ * @internal
75
+ */
30
76
  export const getItemInteractiveParent = (items, itemId) => {
31
77
  const parent = findItem(items, (item) => {
32
- if (item.type === "static" || item.subItems === undefined) {
78
+ if (item.type === "static" ||
79
+ (item.type === "interactive" && item.subItems === undefined) ||
80
+ item.type === "content") {
33
81
  return false;
34
82
  }
35
83
  return item.subItems.some((subMenuItem) => subMenuItem.id === itemId);
@@ -42,6 +90,10 @@ export const getItemInteractiveParent = (items, itemId) => {
42
90
  }
43
91
  return undefined;
44
92
  };
93
+ /**
94
+ * Gets all sibling items of a menu item.
95
+ * @internal
96
+ */
45
97
  export const getSiblingItems = (items, itemId) => {
46
98
  // If itemId is provided but the item doesn't exist, return undefined
47
99
  if (!getItem(items, itemId)) {
@@ -49,6 +101,10 @@ export const getSiblingItems = (items, itemId) => {
49
101
  }
50
102
  return getItemsByInteractiveParent(items, getItemInteractiveParent(items, itemId)?.id);
51
103
  };
104
+ /**
105
+ * Gets all next sibling items of a menu item with wraparound.
106
+ * @internal
107
+ */
52
108
  export const getNextSiblings = (items, itemId) => {
53
109
  const siblingItems = getSiblingItems(items, itemId);
54
110
  const itemIndex = siblingItems?.findIndex((item) => item.id === itemId) ?? -1;
@@ -58,6 +114,10 @@ export const getNextSiblings = (items, itemId) => {
58
114
  // Wraparound
59
115
  return [...siblingItems.slice(itemIndex + 1), ...siblingItems.slice(0, itemIndex)];
60
116
  };
117
+ /**
118
+ * Gets all previous sibling items of a menu item with wraparound.
119
+ * @internal
120
+ */
61
121
  export const getPreviousSiblings = (items, itemId) => {
62
122
  const siblingItems = getSiblingItems(items, itemId);
63
123
  const itemIndex = siblingItems?.findIndex((item) => item.id === itemId) ?? -1;
@@ -67,6 +127,10 @@ export const getPreviousSiblings = (items, itemId) => {
67
127
  // Wraparound
68
128
  return [...siblingItems.slice(0, itemIndex).reverse(), ...siblingItems.slice(itemIndex + 1).reverse()];
69
129
  };
130
+ /**
131
+ * Gets the closest focusable sibling item in the specified direction.
132
+ * @internal
133
+ */
70
134
  export const getClosestFocusableSibling = (args) => {
71
135
  const { items, isItemFocusable, itemId, direction } = args;
72
136
  const unwrappedItems = unwrapGroupItems(items);
@@ -83,6 +147,10 @@ export const getClosestFocusableSibling = (args) => {
83
147
  return getPreviousSiblings(unwrappedItems, itemId).find(isItemFocusable);
84
148
  }
85
149
  };
150
+ /**
151
+ * Unwraps items from group containers into a flat array.
152
+ * @internal
153
+ */
86
154
  export function unwrapGroupItems(items) {
87
155
  const result = [];
88
156
  for (const item of items) {
@@ -1 +1 @@
1
- {"version":3,"file":"itemUtils.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"itemUtils.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"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"}
@@ -38,23 +38,48 @@ export type IUiMenuGroupItem<T extends IUiMenuItemData = object> = {
38
38
  /**
39
39
  * @internal
40
40
  */
41
- export type IUiMenuItem<T extends IUiMenuItemData = object> = IUiMenuStaticItem<T> | IUiMenuInteractiveItem<T> | IUiMenuGroupItem<T>;
41
+ export type IUiMenuContentItem<T extends IUiMenuItemData = object> = {
42
+ type: "content";
43
+ id: string;
44
+ stringTitle: string;
45
+ isDisabled?: boolean;
46
+ showComponentOnly?: boolean;
47
+ data: T["content"];
48
+ Component: React.ComponentType<{
49
+ onBack: () => void;
50
+ onClose: () => void;
51
+ }>;
52
+ };
53
+ /**
54
+ * @internal
55
+ */
56
+ export type IUiMenuItem<T extends IUiMenuItemData = object> = IUiMenuStaticItem<T> | IUiMenuInteractiveItem<T> | IUiMenuGroupItem<T> | IUiMenuContentItem<T>;
57
+ /**
58
+ * @internal
59
+ */
60
+ export type IUiMenuFocusableItem<T extends IUiMenuItemData = object> = IUiMenuInteractiveItem<T> | IUiMenuContentItem<T>;
42
61
  /**
43
62
  * @internal
44
63
  */
45
- export interface UiMenuItemProps<T extends IUiMenuItemData = object> {
64
+ export interface IUiMenuItemProps<T extends IUiMenuItemData = object> {
46
65
  item: IUiMenuItem<T>;
47
66
  }
48
67
  /**
49
68
  * @internal
50
69
  */
51
- export interface UiMenuInteractiveItemWrapperProps<T extends IUiMenuItemData = object> {
70
+ export interface IUiMenuInteractiveItemWrapperProps<T extends IUiMenuItemData = object> {
52
71
  item: IUiMenuInteractiveItem<T>;
53
72
  }
54
73
  /**
55
74
  * @internal
56
75
  */
57
- export interface UiMenuInteractiveItemProps<T extends IUiMenuItemData = object> {
76
+ export interface IUiMenuContentItemWrapperProps<T extends IUiMenuItemData = object> {
77
+ item: IUiMenuContentItem<T>;
78
+ }
79
+ /**
80
+ * @internal
81
+ */
82
+ export interface IUiMenuInteractiveItemProps<T extends IUiMenuItemData = object> {
58
83
  item: IUiMenuInteractiveItem<T>;
59
84
  isFocused: boolean;
60
85
  onSelect: () => void;
@@ -62,15 +87,29 @@ export interface UiMenuInteractiveItemProps<T extends IUiMenuItemData = object>
62
87
  /**
63
88
  * @internal
64
89
  */
65
- export interface UiMenuGroupItemProps<T extends IUiMenuItemData = object> {
90
+ export interface IUiMenuGroupItemProps<T extends IUiMenuItemData = object> {
66
91
  item: IUiMenuGroupItem<T>;
67
92
  }
68
93
  /**
69
94
  * @internal
70
95
  */
71
- export interface UiMenuStaticItemProps<T extends IUiMenuItemData = object> {
96
+ export interface IUiMenuStaticItemProps<T extends IUiMenuItemData = object> {
72
97
  item: IUiMenuStaticItem<T>;
73
98
  }
99
+ /**
100
+ * @internal
101
+ */
102
+ export interface IUiMenuContentItemProps<T extends IUiMenuItemData = object> {
103
+ item: IUiMenuContentItem<T>;
104
+ isFocused: boolean;
105
+ onSelect: () => void;
106
+ }
107
+ /**
108
+ * @internal
109
+ */
110
+ export interface IUiMenuContentProps<T extends IUiMenuItemData = object> {
111
+ item: IUiMenuContentItem<T>;
112
+ }
74
113
  /**
75
114
  * @internal
76
115
  */
@@ -79,40 +118,47 @@ export type IUiMenuControlType = "keyboard" | "mouse" | "unknown";
79
118
  * @internal
80
119
  */
81
120
  export interface IUiMenuPluggableComponents<T extends IUiMenuItemData = object> {
82
- InteractiveItemComponent: React.ComponentType<UiMenuInteractiveItemProps<T>>;
83
- InteractiveItemWrapperComponent: React.ComponentType<UiMenuInteractiveItemWrapperProps<T>>;
84
- GroupItemComponent: React.ComponentType<UiMenuGroupItemProps<T>>;
85
- StaticItemComponent: React.ComponentType<UiMenuStaticItemProps<T>>;
86
- MenuHeaderComponent: React.ComponentType;
121
+ InteractiveItem: React.ComponentType<IUiMenuInteractiveItemProps<T>>;
122
+ InteractiveItemWrapper: React.ComponentType<IUiMenuInteractiveItemWrapperProps<T>>;
123
+ GroupItem: React.ComponentType<IUiMenuGroupItemProps<T>>;
124
+ StaticItem: React.ComponentType<IUiMenuStaticItemProps<T>>;
125
+ ContentItemWrapper: React.ComponentType<IUiMenuContentItemWrapperProps<T>>;
126
+ ContentItem: React.ComponentType<IUiMenuContentItemProps<T>>;
127
+ Content: React.ComponentType<IUiMenuContentProps<T>>;
128
+ MenuHeader: React.ComponentType;
87
129
  }
88
130
  /**
89
131
  * @internal
90
132
  */
91
- export interface IUiMenuContext<T extends IUiMenuItemData = object> extends IUiMenuPluggableComponents<T> {
133
+ export interface IUiMenuContext<T extends IUiMenuItemData = object, M = object> extends IUiMenuPluggableComponents<T> {
92
134
  items: IUiMenuItem<T>[];
93
- focusedItem: IUiMenuInteractiveItem<T> | undefined;
94
- onSelect: (item: IUiMenuInteractiveItem<T> | undefined) => void;
135
+ focusedItem: IUiMenuFocusableItem<T> | undefined;
136
+ shownCustomContentItemId?: string;
137
+ setShownCustomContentItemId: React.Dispatch<React.SetStateAction<string | undefined>>;
138
+ onSelect: (item: IUiMenuFocusableItem<T> | undefined) => void;
95
139
  onClose?: () => void;
96
140
  setFocusedId: React.Dispatch<React.SetStateAction<string | undefined>>;
97
141
  isItemFocusable: (item: IUiMenuItem<T>) => boolean;
98
142
  controlType: IUiMenuControlType;
99
143
  setControlType: React.Dispatch<React.SetStateAction<IUiMenuControlType>>;
100
144
  scrollToView: (element: HTMLElement | null) => void;
101
- makeItemId: (item: IUiMenuItem<T>) => string;
145
+ makeItemId: (item: IUiMenuItem<T>) => string | undefined;
102
146
  itemClassName?: ((item: IUiMenuItem<T>) => string | undefined) | string;
103
- ItemComponent: React.ComponentType<UiMenuItemProps<T>>;
147
+ ItemComponent: React.ComponentType<IUiMenuItemProps<T>>;
104
148
  menuComponentRef: React.RefObject<HTMLElement>;
105
149
  itemsContainerRef: React.RefObject<HTMLElement>;
150
+ menuCtxData?: M;
106
151
  }
107
152
  /**
108
153
  * @internal
109
154
  */
110
- export interface UiMenuProps<T extends IUiMenuItemData = object> extends Partial<IUiMenuPluggableComponents<T>> {
155
+ export interface UiMenuProps<T extends IUiMenuItemData = object, M = object> extends Partial<IUiMenuPluggableComponents<T>> {
111
156
  items: IUiMenuItem<T>[];
112
- className?: string;
157
+ className?: ((context: IUiMenuContext<T>) => string | undefined) | string;
113
158
  itemClassName?: ((item: IUiMenuItem<T>) => string | undefined) | string;
114
159
  maxWidth?: number;
115
160
  onSelect?: (item: IUiMenuInteractiveItem<T>) => void;
161
+ onLevelChange?: (level: number, item?: IUiMenuContentItem<T> | IUiMenuInteractiveItem<T>) => void;
116
162
  onClose?: () => void;
117
163
  onUnhandledKeyDown?: (event: React.KeyboardEvent, context: IUiMenuContext<T>) => void;
118
164
  shouldKeyboardActionPreventDefault?: boolean;
@@ -120,5 +166,6 @@ export interface UiMenuProps<T extends IUiMenuItemData = object> extends Partial
120
166
  shouldCloseOnSelect?: boolean;
121
167
  isDisabledFocusable?: boolean;
122
168
  ariaAttributes: Omit<IDropdownBodyRenderProps["ariaAttributes"], "role">;
169
+ menuCtxData?: M;
123
170
  }
124
171
  //# sourceMappingURL=types.d.ts.map