@basic-ui/core 0.0.60 → 0.0.61

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 (214) hide show
  1. package/build/cjs/index.js.map +1 -1
  2. package/build/esm/Accordion/AccordionBody.d.ts.map +1 -1
  3. package/build/esm/Accordion/AccordionBody.js +6 -26
  4. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  5. package/build/esm/Accordion/AccordionHeader.d.ts.map +1 -1
  6. package/build/esm/Accordion/AccordionHeader.js +21 -69
  7. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  8. package/build/esm/Accordion/AccordionItem.d.ts.map +1 -1
  9. package/build/esm/Accordion/AccordionItem.js +31 -18
  10. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  11. package/build/esm/Accordion/context.d.ts +0 -8
  12. package/build/esm/Accordion/context.d.ts.map +1 -1
  13. package/build/esm/Accordion/context.js +0 -11
  14. package/build/esm/Accordion/context.js.map +1 -1
  15. package/build/esm/Accordion/scopeQuery.d.ts +1 -0
  16. package/build/esm/Accordion/scopeQuery.d.ts.map +1 -1
  17. package/build/esm/Accordion/scopeQuery.js +3 -0
  18. package/build/esm/Accordion/scopeQuery.js.map +1 -1
  19. package/build/esm/Collapsible/Collapsible.d.ts +13 -0
  20. package/build/esm/Collapsible/Collapsible.d.ts.map +1 -0
  21. package/build/esm/Collapsible/Collapsible.js +53 -0
  22. package/build/esm/Collapsible/Collapsible.js.map +1 -0
  23. package/build/esm/Collapsible/CollapsiblePanel.d.ts +10 -0
  24. package/build/esm/Collapsible/CollapsiblePanel.d.ts.map +1 -0
  25. package/build/esm/Collapsible/CollapsiblePanel.js +85 -0
  26. package/build/esm/Collapsible/CollapsiblePanel.js.map +1 -0
  27. package/build/esm/Collapsible/CollapsibleTrigger.d.ts +11 -0
  28. package/build/esm/Collapsible/CollapsibleTrigger.d.ts.map +1 -0
  29. package/build/esm/Collapsible/CollapsibleTrigger.js +51 -0
  30. package/build/esm/Collapsible/CollapsibleTrigger.js.map +1 -0
  31. package/build/esm/Collapsible/context.d.ts +16 -0
  32. package/build/esm/Collapsible/context.d.ts.map +1 -0
  33. package/build/esm/Collapsible/context.js +11 -0
  34. package/build/esm/Collapsible/context.js.map +1 -0
  35. package/build/esm/Collapsible/index.d.ts +4 -0
  36. package/build/esm/Collapsible/index.d.ts.map +1 -0
  37. package/build/esm/Collapsible/index.js +4 -0
  38. package/build/esm/Collapsible/index.js.map +1 -0
  39. package/build/esm/Menu/Menu.d.ts +3 -2
  40. package/build/esm/Menu/Menu.d.ts.map +1 -1
  41. package/build/esm/Menu/Menu.js +64 -4
  42. package/build/esm/Menu/Menu.js.map +1 -1
  43. package/build/esm/Menu/MenuButton.d.ts.map +1 -1
  44. package/build/esm/Menu/MenuButton.js +85 -8
  45. package/build/esm/Menu/MenuButton.js.map +1 -1
  46. package/build/esm/Menu/MenuItem.d.ts.map +1 -1
  47. package/build/esm/Menu/MenuItem.js +16 -4
  48. package/build/esm/Menu/MenuItem.js.map +1 -1
  49. package/build/esm/Menu/MenuList.d.ts.map +1 -1
  50. package/build/esm/Menu/MenuList.js +47 -12
  51. package/build/esm/Menu/MenuList.js.map +1 -1
  52. package/build/esm/Menu/MenuPopover.d.ts.map +1 -1
  53. package/build/esm/Menu/MenuPopover.js +12 -1
  54. package/build/esm/Menu/MenuPopover.js.map +1 -1
  55. package/build/esm/Menu/MenuSubmenuTrigger.d.ts +8 -0
  56. package/build/esm/Menu/MenuSubmenuTrigger.d.ts.map +1 -0
  57. package/build/esm/Menu/MenuSubmenuTrigger.js +131 -0
  58. package/build/esm/Menu/MenuSubmenuTrigger.js.map +1 -0
  59. package/build/esm/Menu/context.d.ts +13 -3
  60. package/build/esm/Menu/context.d.ts.map +1 -1
  61. package/build/esm/Menu/context.js +1 -0
  62. package/build/esm/Menu/context.js.map +1 -1
  63. package/build/esm/Menu/index.d.ts +3 -0
  64. package/build/esm/Menu/index.d.ts.map +1 -1
  65. package/build/esm/Menu/index.js +2 -0
  66. package/build/esm/Menu/index.js.map +1 -1
  67. package/build/esm/Menu/scope.d.ts +1 -0
  68. package/build/esm/Menu/scope.d.ts.map +1 -1
  69. package/build/esm/Menu/scope.js +2 -1
  70. package/build/esm/Menu/scope.js.map +1 -1
  71. package/build/esm/MenuBar/MenuBar.d.ts +11 -0
  72. package/build/esm/MenuBar/MenuBar.d.ts.map +1 -0
  73. package/build/esm/MenuBar/MenuBar.js +153 -0
  74. package/build/esm/MenuBar/MenuBar.js.map +1 -0
  75. package/build/esm/MenuBar/context.d.ts +29 -0
  76. package/build/esm/MenuBar/context.d.ts.map +1 -0
  77. package/build/esm/MenuBar/context.js +7 -0
  78. package/build/esm/MenuBar/context.js.map +1 -0
  79. package/build/esm/MenuBar/index.d.ts +2 -0
  80. package/build/esm/MenuBar/index.d.ts.map +1 -0
  81. package/build/esm/MenuBar/index.js +2 -0
  82. package/build/esm/MenuBar/index.js.map +1 -0
  83. package/build/esm/Slider/Slider.d.ts +47 -1
  84. package/build/esm/Slider/Slider.d.ts.map +1 -1
  85. package/build/esm/Slider/Slider.js +91 -5
  86. package/build/esm/Slider/Slider.js.map +1 -1
  87. package/build/esm/ToggleGroup/ToggleGroup.d.ts +40 -0
  88. package/build/esm/ToggleGroup/ToggleGroup.d.ts.map +1 -0
  89. package/build/esm/ToggleGroup/ToggleGroup.js +113 -0
  90. package/build/esm/ToggleGroup/ToggleGroup.js.map +1 -0
  91. package/build/esm/ToggleGroup/ToggleGroupContext.d.ts +10 -0
  92. package/build/esm/ToggleGroup/ToggleGroupContext.d.ts.map +1 -0
  93. package/build/esm/ToggleGroup/ToggleGroupContext.js +6 -0
  94. package/build/esm/ToggleGroup/ToggleGroupContext.js.map +1 -0
  95. package/build/esm/ToggleGroup/index.d.ts +3 -0
  96. package/build/esm/ToggleGroup/index.d.ts.map +1 -0
  97. package/build/esm/ToggleGroup/index.js +3 -0
  98. package/build/esm/ToggleGroup/index.js.map +1 -0
  99. package/build/esm/Tree/Tree.d.ts +3 -0
  100. package/build/esm/Tree/Tree.d.ts.map +1 -0
  101. package/build/esm/Tree/Tree.js +730 -0
  102. package/build/esm/Tree/Tree.js.map +1 -0
  103. package/build/esm/Tree/TreeHeader.d.ts +3 -0
  104. package/build/esm/Tree/TreeHeader.d.ts.map +1 -0
  105. package/build/esm/Tree/TreeHeader.js +5 -0
  106. package/build/esm/Tree/TreeHeader.js.map +1 -0
  107. package/build/esm/Tree/TreeItem.d.ts +3 -0
  108. package/build/esm/Tree/TreeItem.d.ts.map +1 -0
  109. package/build/esm/Tree/TreeItem.js +5 -0
  110. package/build/esm/Tree/TreeItem.js.map +1 -0
  111. package/build/esm/Tree/TreeItemContent.d.ts +3 -0
  112. package/build/esm/Tree/TreeItemContent.d.ts.map +1 -0
  113. package/build/esm/Tree/TreeItemContent.js +69 -0
  114. package/build/esm/Tree/TreeItemContent.js.map +1 -0
  115. package/build/esm/Tree/TreeSection.d.ts +3 -0
  116. package/build/esm/Tree/TreeSection.d.ts.map +1 -0
  117. package/build/esm/Tree/TreeSection.js +5 -0
  118. package/build/esm/Tree/TreeSection.js.map +1 -0
  119. package/build/esm/Tree/collection.d.ts +18 -0
  120. package/build/esm/Tree/collection.d.ts.map +1 -0
  121. package/build/esm/Tree/collection.js +252 -0
  122. package/build/esm/Tree/collection.js.map +1 -0
  123. package/build/esm/Tree/context.d.ts +3 -0
  124. package/build/esm/Tree/context.d.ts.map +1 -0
  125. package/build/esm/Tree/context.js +3 -0
  126. package/build/esm/Tree/context.js.map +1 -0
  127. package/build/esm/Tree/index.d.ts +8 -0
  128. package/build/esm/Tree/index.d.ts.map +1 -0
  129. package/build/esm/Tree/index.js +7 -0
  130. package/build/esm/Tree/index.js.map +1 -0
  131. package/build/esm/Tree/types.d.ts +128 -0
  132. package/build/esm/Tree/types.d.ts.map +1 -0
  133. package/build/esm/Tree/types.js +2 -0
  134. package/build/esm/Tree/types.js.map +1 -0
  135. package/build/esm/hooks/index.d.ts +1 -0
  136. package/build/esm/hooks/index.d.ts.map +1 -1
  137. package/build/esm/hooks/index.js +1 -0
  138. package/build/esm/hooks/index.js.map +1 -1
  139. package/build/esm/hooks/useTransitionStatus.d.ts +7 -0
  140. package/build/esm/hooks/useTransitionStatus.d.ts.map +1 -0
  141. package/build/esm/hooks/useTransitionStatus.js +48 -0
  142. package/build/esm/hooks/useTransitionStatus.js.map +1 -0
  143. package/build/esm/index.d.ts +5 -0
  144. package/build/esm/index.d.ts.map +1 -1
  145. package/build/esm/index.js +5 -0
  146. package/build/esm/index.js.map +1 -1
  147. package/build/esm/toggle/Toggle.d.ts +28 -0
  148. package/build/esm/toggle/Toggle.d.ts.map +1 -0
  149. package/build/esm/toggle/Toggle.js +55 -0
  150. package/build/esm/toggle/Toggle.js.map +1 -0
  151. package/build/esm/toggle/index.d.ts +2 -0
  152. package/build/esm/toggle/index.d.ts.map +1 -0
  153. package/build/esm/toggle/index.js +2 -0
  154. package/build/esm/toggle/index.js.map +1 -0
  155. package/build/esm/utils/assign-ref.d.ts +3 -3
  156. package/build/esm/utils/assign-ref.d.ts.map +1 -1
  157. package/build/esm/utils/assign-ref.js +1 -1
  158. package/build/esm/utils/assign-ref.js.map +1 -1
  159. package/build/tsconfig-build.tsbuildinfo +1 -1
  160. package/build/tsconfig.tsbuildinfo +1 -1
  161. package/package.json +7 -4
  162. package/src/Accordion/AccordionBody.tsx +6 -35
  163. package/src/Accordion/AccordionHeader.tsx +29 -103
  164. package/src/Accordion/AccordionItem.tsx +40 -29
  165. package/src/Accordion/context.ts +0 -18
  166. package/src/Accordion/scopeQuery.ts +4 -0
  167. package/src/Collapsible/Collapsible.story.tsx +153 -0
  168. package/src/Collapsible/Collapsible.tsx +79 -0
  169. package/src/Collapsible/CollapsiblePanel.tsx +103 -0
  170. package/src/Collapsible/CollapsibleTrigger.tsx +60 -0
  171. package/src/Collapsible/context.ts +28 -0
  172. package/src/Collapsible/index.ts +3 -0
  173. package/src/Menu/Menu.story.tsx +70 -1
  174. package/src/Menu/Menu.tsx +141 -65
  175. package/src/Menu/MenuButton.tsx +115 -9
  176. package/src/Menu/MenuItem.tsx +20 -3
  177. package/src/Menu/MenuList.tsx +50 -13
  178. package/src/Menu/MenuPopover.tsx +12 -2
  179. package/src/Menu/MenuSubmenuTrigger.tsx +167 -0
  180. package/src/Menu/context.ts +20 -10
  181. package/src/Menu/index.ts +3 -0
  182. package/src/Menu/scope.ts +4 -1
  183. package/src/Menu/styles.css +57 -22
  184. package/src/MenuBar/MenuBar.story.tsx +92 -0
  185. package/src/MenuBar/MenuBar.tsx +236 -0
  186. package/src/MenuBar/context.ts +46 -0
  187. package/src/MenuBar/index.ts +1 -0
  188. package/src/MenuBar/styles.css +78 -0
  189. package/src/Slider/Slider.story.tsx +1 -1
  190. package/src/Slider/Slider.tsx +145 -8
  191. package/src/Toggle/Toggle.story.tsx +42 -0
  192. package/src/Toggle/Toggle.tsx +95 -0
  193. package/src/Toggle/index.ts +1 -0
  194. package/src/Toggle/styles.css +39 -0
  195. package/src/ToggleGroup/ToggleGroup.story.tsx +86 -0
  196. package/src/ToggleGroup/ToggleGroup.tsx +185 -0
  197. package/src/ToggleGroup/ToggleGroupContext.ts +17 -0
  198. package/src/ToggleGroup/index.ts +2 -0
  199. package/src/ToggleGroup/styles.css +66 -0
  200. package/src/Tree/Tree.story.tsx +221 -0
  201. package/src/Tree/Tree.tsx +1081 -0
  202. package/src/Tree/TreeHeader.tsx +9 -0
  203. package/src/Tree/TreeItem.tsx +9 -0
  204. package/src/Tree/TreeItemContent.tsx +91 -0
  205. package/src/Tree/TreeSection.tsx +9 -0
  206. package/src/Tree/collection.tsx +371 -0
  207. package/src/Tree/context.ts +6 -0
  208. package/src/Tree/index.ts +7 -0
  209. package/src/Tree/styles.css +135 -0
  210. package/src/Tree/types.ts +161 -0
  211. package/src/hooks/index.ts +1 -0
  212. package/src/hooks/useTransitionStatus.ts +65 -0
  213. package/src/index.ts +5 -0
  214. package/src/utils/assign-ref.ts +4 -4
@@ -11,11 +11,12 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
11
11
  onSelect,
12
12
  onClick,
13
13
  onKeyDown,
14
+ onFocus,
15
+ onMouseMove,
14
16
  ...otherProps
15
17
  } = props;
16
18
  const {
17
- onChange,
18
- buttonRef
19
+ closeAllMenus
19
20
  } = useMenuContext();
20
21
  const {
21
22
  navigationItem,
@@ -25,8 +26,7 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
25
26
  const itemId = useId();
26
27
  const isActive = ref.current && ref.current === navigationItem;
27
28
  const handleSelect = wrapEvent(onSelect, e => {
28
- onChange(e, false);
29
- buttonRef.current?.focus();
29
+ closeAllMenus(e);
30
30
  e.preventDefault();
31
31
  });
32
32
  const handleClick = e => {
@@ -45,6 +45,16 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
45
45
  break;
46
46
  }
47
47
  };
48
+ const handleFocus = () => {
49
+ if (!disabled && ref.current && ref.current !== navigationItem) {
50
+ onNavigate && onNavigate(ref.current);
51
+ }
52
+ };
53
+ const handleMouseMove = () => {
54
+ if (!disabled && ref.current && ref.current !== navigationItem) {
55
+ onNavigate && onNavigate(ref.current);
56
+ }
57
+ };
48
58
  return /*#__PURE__*/_jsx(Comp, {
49
59
  ref: assignMultipleRefs(ref, forwardedRef),
50
60
  as: innerAs,
@@ -55,6 +65,8 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
55
65
  onClick: wrapEvent(onClick, handleClick),
56
66
  tabIndex: disabled ? -1 : 0,
57
67
  onKeyDown: wrapEvent(onKeyDown, handleKeyDown),
68
+ onFocus: wrapEvent(onFocus, handleFocus),
69
+ onMouseMove: wrapEvent(onMouseMove, handleMouseMove),
58
70
  "data-disabled": disabled ? '' : undefined,
59
71
  "aria-disabled": disabled ? '' : undefined,
60
72
  disabled: disabled,
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","names":["forwardRef","useRef","useId","useMenuContext","useMenuListContext","assignMultipleRefs","wrapEvent","jsx","_jsx","MenuItem","props","forwardedRef","as","Comp","innerAs","disabled","onSelect","onClick","onKeyDown","otherProps","onChange","buttonRef","navigationItem","onNavigate","ref","itemId","isActive","current","handleSelect","e","focus","preventDefault","handleClick","handleKeyDown","key","id","undefined","role","tabIndex"],"sources":["../../../src/Menu/MenuItem.tsx"],"sourcesContent":["import type {\n LiHTMLAttributes,\n ElementType,\n MouseEvent,\n KeyboardEvent,\n KeyboardEventHandler,\n} from 'react';\nimport { forwardRef, useRef, useId } from 'react';\n\nimport { useMenuContext, useMenuListContext } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { wrapEvent } from '../utils';\n\nexport interface MenuItemProps extends LiHTMLAttributes<HTMLLIElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n onSelect?: (\n e: MouseEvent<HTMLLIElement> | KeyboardEvent<HTMLLIElement>\n ) => void;\n disabled?: boolean;\n}\n\nexport const MenuItem = forwardRef<any, MenuItemProps>(function MenuItem(\n props,\n forwardedRef\n) {\n const {\n as: Comp = 'li',\n innerAs,\n disabled,\n onSelect,\n onClick,\n onKeyDown,\n ...otherProps\n } = props;\n const { onChange, buttonRef } = useMenuContext();\n const { navigationItem, onNavigate } = useMenuListContext();\n const ref = useRef<HTMLLIElement | null>(null);\n const itemId = useId();\n\n const isActive = ref.current && ref.current === navigationItem;\n\n const handleSelect = wrapEvent(\n onSelect,\n (e: KeyboardEvent<HTMLLIElement> | MouseEvent<HTMLLIElement>) => {\n onChange(e, false);\n buttonRef.current?.focus();\n e.preventDefault();\n }\n );\n\n const handleClick = (e: MouseEvent<HTMLLIElement>) => {\n if (!disabled) {\n onNavigate && onNavigate(ref.current!);\n handleSelect(e);\n }\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n switch (e.key) {\n case ' ':\n case 'Enter':\n if (!disabled) {\n handleSelect(e);\n }\n break;\n }\n };\n\n return (\n <Comp\n ref={assignMultipleRefs(ref, forwardedRef)}\n as={innerAs}\n id={disabled ? undefined : itemId}\n data-menu-item=\"\"\n data-highlighted={isActive ? '' : undefined}\n role=\"menuitem\"\n onClick={wrapEvent(onClick, handleClick)}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n data-disabled={disabled ? '' : undefined}\n aria-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...otherProps}\n />\n );\n});\n"],"mappings":"AAOA,SAASA,UAAU,EAAEC,MAAM,EAAEC,KAAK,QAAQ,OAAO;AAEjD,SAASC,cAAc,EAAEC,kBAAkB,QAAQ,WAAW;AAC9D,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,SAASC,SAAS,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAWrC,OAAO,MAAMC,QAAQ,gBAAGT,UAAU,CAAqB,SAASS,QAAQA,CACtEC,KAAK,EACLC,YAAY,EACZ;EACA,MAAM;IACJC,EAAE,EAAEC,IAAI,GAAG,IAAI;IACfC,OAAO;IACPC,QAAQ;IACRC,QAAQ;IACRC,OAAO;IACPC,SAAS;IACT,GAAGC;EACL,CAAC,GAAGT,KAAK;EACT,MAAM;IAAEU,QAAQ;IAAEC;EAAU,CAAC,GAAGlB,cAAc,CAAC,CAAC;EAChD,MAAM;IAAEmB,cAAc;IAAEC;EAAW,CAAC,GAAGnB,kBAAkB,CAAC,CAAC;EAC3D,MAAMoB,GAAG,GAAGvB,MAAM,CAAuB,IAAI,CAAC;EAC9C,MAAMwB,MAAM,GAAGvB,KAAK,CAAC,CAAC;EAEtB,MAAMwB,QAAQ,GAAGF,GAAG,CAACG,OAAO,IAAIH,GAAG,CAACG,OAAO,KAAKL,cAAc;EAE9D,MAAMM,YAAY,GAAGtB,SAAS,CAC5BU,QAAQ,EACPa,CAA2D,IAAK;IAC/DT,QAAQ,CAACS,CAAC,EAAE,KAAK,CAAC;IAClBR,SAAS,CAACM,OAAO,EAAEG,KAAK,CAAC,CAAC;IAC1BD,CAAC,CAACE,cAAc,CAAC,CAAC;EACpB,CACF,CAAC;EAED,MAAMC,WAAW,GAAIH,CAA4B,IAAK;IACpD,IAAI,CAACd,QAAQ,EAAE;MACbQ,UAAU,IAAIA,UAAU,CAACC,GAAG,CAACG,OAAQ,CAAC;MACtCC,YAAY,CAACC,CAAC,CAAC;IACjB;EACF,CAAC;EAED,MAAMI,aAAkD,GAAIJ,CAAC,IAAK;IAChE,QAAQA,CAAC,CAACK,GAAG;MACX,KAAK,GAAG;MACR,KAAK,OAAO;QACV,IAAI,CAACnB,QAAQ,EAAE;UACba,YAAY,CAACC,CAAC,CAAC;QACjB;QACA;IACJ;EACF,CAAC;EAED,oBACErB,IAAA,CAACK,IAAI;IACHW,GAAG,EAAEnB,kBAAkB,CAACmB,GAAG,EAAEb,YAAY,CAAE;IAC3CC,EAAE,EAAEE,OAAQ;IACZqB,EAAE,EAAEpB,QAAQ,GAAGqB,SAAS,GAAGX,MAAO;IAClC,kBAAe,EAAE;IACjB,oBAAkBC,QAAQ,GAAG,EAAE,GAAGU,SAAU;IAC5CC,IAAI,EAAC,UAAU;IACfpB,OAAO,EAAEX,SAAS,CAACW,OAAO,EAAEe,WAAW,CAAE;IACzCM,QAAQ,EAAEvB,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAE;IAC5BG,SAAS,EAAEZ,SAAS,CAACY,SAAS,EAAEe,aAAa,CAAE;IAC/C,iBAAelB,QAAQ,GAAG,EAAE,GAAGqB,SAAU;IACzC,iBAAerB,QAAQ,GAAG,EAAE,GAAGqB,SAAU;IACzCrB,QAAQ,EAAEA,QAAS;IAAA,GACfI;EAAU,CACf,CAAC;AAEN,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"MenuItem.js","names":["forwardRef","useRef","useId","useMenuContext","useMenuListContext","assignMultipleRefs","wrapEvent","jsx","_jsx","MenuItem","props","forwardedRef","as","Comp","innerAs","disabled","onSelect","onClick","onKeyDown","onFocus","onMouseMove","otherProps","closeAllMenus","navigationItem","onNavigate","ref","itemId","isActive","current","handleSelect","e","preventDefault","handleClick","handleKeyDown","key","handleFocus","handleMouseMove","id","undefined","role","tabIndex"],"sources":["../../../src/Menu/MenuItem.tsx"],"sourcesContent":["import type {\n FocusEventHandler,\n LiHTMLAttributes,\n ElementType,\n MouseEvent,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n} from 'react';\nimport { forwardRef, useRef, useId } from 'react';\n\nimport { useMenuContext, useMenuListContext } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { wrapEvent } from '../utils';\n\nexport interface MenuItemProps extends LiHTMLAttributes<HTMLLIElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n onSelect?: (\n e: MouseEvent<HTMLLIElement> | KeyboardEvent<HTMLLIElement>\n ) => void;\n disabled?: boolean;\n}\n\nexport const MenuItem = forwardRef<any, MenuItemProps>(function MenuItem(\n props,\n forwardedRef\n) {\n const {\n as: Comp = 'li',\n innerAs,\n disabled,\n onSelect,\n onClick,\n onKeyDown,\n onFocus,\n onMouseMove,\n ...otherProps\n } = props;\n const { closeAllMenus } = useMenuContext();\n const { navigationItem, onNavigate } = useMenuListContext();\n const ref = useRef<HTMLLIElement | null>(null);\n const itemId = useId();\n\n const isActive = ref.current && ref.current === navigationItem;\n\n const handleSelect = wrapEvent(\n onSelect,\n (e: KeyboardEvent<HTMLLIElement> | MouseEvent<HTMLLIElement>) => {\n closeAllMenus(e);\n e.preventDefault();\n }\n );\n\n const handleClick = (e: MouseEvent<HTMLLIElement>) => {\n if (!disabled) {\n onNavigate && onNavigate(ref.current!);\n handleSelect(e);\n }\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n switch (e.key) {\n case ' ':\n case 'Enter':\n if (!disabled) {\n handleSelect(e);\n }\n break;\n }\n };\n\n const handleFocus: FocusEventHandler<HTMLLIElement> = () => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n };\n\n const handleMouseMove: MouseEventHandler<HTMLLIElement> = () => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n };\n\n return (\n <Comp\n ref={assignMultipleRefs(ref, forwardedRef)}\n as={innerAs}\n id={disabled ? undefined : itemId}\n data-menu-item=\"\"\n data-highlighted={isActive ? '' : undefined}\n role=\"menuitem\"\n onClick={wrapEvent(onClick, handleClick)}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onFocus={wrapEvent(onFocus, handleFocus)}\n onMouseMove={wrapEvent(onMouseMove, handleMouseMove)}\n data-disabled={disabled ? '' : undefined}\n aria-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...otherProps}\n />\n );\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,OAAO,CAAC;AAoBxE,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,QAAQ,4GAmOpB,CAAC"}
1
+ {"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,OAAO,CAAC;AAoBxE,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,QAAQ,4GAwQpB,CAAC"}
@@ -3,7 +3,7 @@ import { useMenuContext, MenuListProvider } from './context';
3
3
  import { assignMultipleRefs } from '../utils/assign-ref';
4
4
  import { useOnClickOutside } from '../hooks/useOnClickOutside';
5
5
  import { useScope } from '../hooks';
6
- import { queryScope } from './scope';
6
+ import { MENU_SUBMENU_TRIGGER_ATTR, queryScope } from './scope';
7
7
  import { getCircularIndex, wrapEvent } from '../utils';
8
8
  import { jsx as _jsx } from "react/jsx-runtime";
9
9
  const useEnhancedEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
@@ -22,15 +22,18 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
22
22
  const {
23
23
  menuListIdRef,
24
24
  buttonRef,
25
- onChange,
25
+ closeMenu,
26
26
  openWithArrowKeyRef,
27
27
  open,
28
- isContextMenu
28
+ isContextMenu,
29
+ menuBar,
30
+ menuBarMenuId
29
31
  } = useMenuContext();
30
32
  const [navigationItem, setNavigationItem] = useState();
31
33
  const [mounted, setMounted] = useState(false);
32
34
  const menuListRef = useRef(null);
33
35
  const scope = useScope(menuListRef);
36
+ const getAllItems = useCallback(() => scope.current.queryAllNodes((type, props, instance) => queryScope(type, props) && instance.closest('[data-menu-list]') === menuListRef.current), [scope]);
34
37
  const onNavigate = el => {
35
38
  el.focus({
36
39
  preventScroll: true
@@ -40,7 +43,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
40
43
  menuListIdRef.current = preferredId || menuListIdRef.current;
41
44
  useEnhancedEffect(() => {
42
45
  if (!mounted) {
43
- const allItems = scope.current.queryAllNodes(queryScope);
46
+ const allItems = getAllItems();
44
47
  let index = getCircularIndex(openWithArrowKeyRef.current === 'ArrowUp' ? -1 : 0, allItems.length);
45
48
  if (defaultActiveItemValue) {
46
49
  if (typeof defaultActiveItemValue === 'string') {
@@ -67,7 +70,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
67
70
  }
68
71
  openWithArrowKeyRef.current = null;
69
72
  setMounted(true);
70
- }, [mounted, navigationItem, onNavigate, openWithArrowKeyRef, scope, defaultActiveItemValue]);
73
+ }, [mounted, navigationItem, onNavigate, openWithArrowKeyRef, getAllItems, defaultActiveItemValue]);
71
74
  const handleClickOutside = useCallback(e => {
72
75
  if (isContextMenu.current) {
73
76
  if (!interactedOutside.current && e.pointerType === 'touch') {
@@ -77,25 +80,57 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
77
80
  return;
78
81
  }
79
82
  if (e.button === 0) {
80
- onChange(e, false);
83
+ closeMenu(e);
81
84
  }
82
85
  } else {
83
86
  if (e.target instanceof HTMLElement && e.target !== buttonRef.current && !buttonRef.current?.contains(e.target)) {
84
- onChange(e, false);
87
+ closeMenu(e);
85
88
  }
86
89
  }
87
90
  e.preventDefault();
88
- }, [buttonRef, isContextMenu, onChange]);
91
+ }, [buttonRef, isContextMenu, closeMenu]);
89
92
  useOnClickOutside(menuListRef, handleClickOutside, open);
90
93
  function handleKeyDown(e) {
94
+ const isHorizontalMenuBarMenu = menuBar && menuBarMenuId && menuBar.orientation === 'horizontal';
91
95
  switch (e.key) {
92
96
  case 'Escape':
93
97
  case 'Tab':
94
98
  {
95
- onChange(e, false);
99
+ closeMenu(e, {
100
+ focusTrigger: true
101
+ });
96
102
  e.preventDefault(); // prevents focusing on next element, because we will be handling it
97
103
  itemSearchStr.current = '';
98
- buttonRef.current?.focus();
104
+ break;
105
+ }
106
+ case 'ArrowRight':
107
+ {
108
+ if (isHorizontalMenuBarMenu) {
109
+ menuBar.moveFocus(menuBarMenuId, 1, e, {
110
+ open: true,
111
+ focusKey: 'ArrowDown'
112
+ });
113
+ e.preventDefault();
114
+ itemSearchStr.current = '';
115
+ }
116
+ break;
117
+ }
118
+ case 'ArrowLeft':
119
+ {
120
+ if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {
121
+ closeMenu(e, {
122
+ focusTrigger: true
123
+ });
124
+ e.preventDefault();
125
+ itemSearchStr.current = '';
126
+ } else if (isHorizontalMenuBarMenu) {
127
+ menuBar.moveFocus(menuBarMenuId, -1, e, {
128
+ open: true,
129
+ focusKey: 'ArrowDown'
130
+ });
131
+ e.preventDefault();
132
+ itemSearchStr.current = '';
133
+ }
99
134
  break;
100
135
  }
101
136
  case 'Home':
@@ -104,7 +139,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
104
139
  case 'ArrowUp':
105
140
  e.preventDefault();
106
141
  itemSearchStr.current = '';
107
- const allItems = scope ? scope.current.queryAllNodes(queryScope) : [];
142
+ const allItems = getAllItems();
108
143
  const currentIndex = allItems.findIndex(e => e === navigationItem);
109
144
  if (allItems.length === 0) {
110
145
  return;
@@ -140,7 +175,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
140
175
  itemSearchClearTimeout.current = setTimeout(() => {
141
176
  itemSearchStr.current = '';
142
177
  }, 500);
143
- const allItems = scope ? scope.current.queryAllNodes(queryScope) : [];
178
+ const allItems = getAllItems();
144
179
  const currentIndex = allItems.findIndex(e => e === navigationItem);
145
180
  const searchStr = itemSearchStr.current;
146
181
  let nextIndex = -1;
@@ -1 +1 @@
1
- {"version":3,"file":"MenuList.js","names":["useCallback","forwardRef","useEffect","useRef","useState","useLayoutEffect","useMenuContext","MenuListProvider","assignMultipleRefs","useOnClickOutside","useScope","queryScope","getCircularIndex","wrapEvent","jsx","_jsx","useEnhancedEffect","window","MenuList","props","forwardedRef","as","Comp","innerAs","onKeyDown","id","preferredId","defaultActiveItemValue","otherProps","interactedOutside","itemSearchStr","itemSearchClearTimeout","undefined","menuListIdRef","buttonRef","onChange","openWithArrowKeyRef","open","isContextMenu","navigationItem","setNavigationItem","mounted","setMounted","menuListRef","scope","onNavigate","el","focus","preventScroll","current","allItems","queryAllNodes","index","length","i","dataset","value","Array","isArray","set","Set","val","has","handleClickOutside","e","pointerType","button","target","HTMLElement","contains","preventDefault","handleKeyDown","key","currentIndex","findIndex","nextIndex","ctrlKey","altKey","slice","clearTimeout","setTimeout","searchStr","idx","dom","domText","innerText","toLowerCase","startsWith","children","ref","role","tabIndex"],"sources":["../../../src/Menu/MenuList.tsx"],"sourcesContent":["import type { HTMLAttributes, ElementType, KeyboardEvent } from 'react';\nimport {\n useCallback,\n forwardRef,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from 'react';\n\nimport { useMenuContext, MenuListProvider } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { useOnClickOutside } from '../hooks/useOnClickOutside';\nimport { useScope } from '../hooks';\nimport { queryScope } from './scope';\nimport { getCircularIndex, wrapEvent } from '../utils';\n\nconst useEnhancedEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport interface MenuListProps extends HTMLAttributes<HTMLUListElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n defaultActiveItemValue?: string | string[];\n}\n\nexport const MenuList = forwardRef<HTMLUListElement, MenuListProps>(\n function MenuList(props, forwardedRef) {\n const {\n as: Comp = 'ul',\n innerAs,\n onKeyDown,\n id: preferredId,\n defaultActiveItemValue,\n ...otherProps\n } = props;\n\n const interactedOutside = useRef(false);\n const itemSearchStr = useRef('');\n const itemSearchClearTimeout = useRef<\n ReturnType<typeof setTimeout> | undefined\n >(undefined);\n\n const {\n menuListIdRef,\n buttonRef,\n onChange,\n openWithArrowKeyRef,\n open,\n isContextMenu,\n } = useMenuContext();\n\n const [navigationItem, setNavigationItem] = useState<\n HTMLElement | undefined\n >();\n\n const [mounted, setMounted] = useState(false);\n\n const menuListRef = useRef<HTMLUListElement | null>(null);\n\n const scope = useScope<HTMLLIElement, HTMLUListElement>(menuListRef);\n\n const onNavigate = (el: HTMLElement) => {\n el.focus({ preventScroll: true });\n setNavigationItem(el);\n };\n\n menuListIdRef.current = preferredId || menuListIdRef.current;\n\n useEnhancedEffect(() => {\n if (!mounted) {\n const allItems = scope.current.queryAllNodes(queryScope);\n let index = getCircularIndex(\n openWithArrowKeyRef.current === 'ArrowUp' ? -1 : 0,\n allItems.length\n );\n\n if (defaultActiveItemValue) {\n if (typeof defaultActiveItemValue === 'string') {\n for (let i = 0; i < allItems.length; i++) {\n if (allItems[i].dataset.value === defaultActiveItemValue) {\n index = i;\n break;\n }\n }\n } else if (Array.isArray(defaultActiveItemValue)) {\n const set = new Set(defaultActiveItemValue);\n for (let i = 0; i < allItems.length; i++) {\n const val = allItems[i].dataset.value;\n if (val && set.has(val)) {\n index = i;\n break;\n }\n }\n }\n }\n\n if (index !== null) {\n onNavigate && onNavigate(allItems[index]);\n }\n }\n\n openWithArrowKeyRef.current = null;\n setMounted(true);\n }, [\n mounted,\n navigationItem,\n onNavigate,\n openWithArrowKeyRef,\n scope,\n defaultActiveItemValue,\n ]);\n\n const handleClickOutside = useCallback(\n (e: PointerEvent) => {\n if (isContextMenu.current) {\n if (!interactedOutside.current && e.pointerType === 'touch') {\n // First interaction should be ignored, because\n // this is what triggered the context menu to open\n interactedOutside.current = true;\n return;\n }\n\n if (e.button === 0) {\n onChange(e as any, false);\n }\n } else {\n if (\n e.target instanceof HTMLElement &&\n e.target !== buttonRef.current &&\n !buttonRef.current?.contains(e.target)\n ) {\n onChange(e as any, false);\n }\n }\n e.preventDefault();\n },\n [buttonRef, isContextMenu, onChange]\n );\n\n useOnClickOutside(menuListRef, handleClickOutside, open);\n\n function handleKeyDown(e: KeyboardEvent<HTMLUListElement>) {\n switch (e.key) {\n case 'Escape':\n case 'Tab': {\n onChange(e, false);\n e.preventDefault(); // prevents focusing on next element, because we will be handling it\n itemSearchStr.current = '';\n buttonRef.current?.focus();\n break;\n }\n case 'Home':\n case 'End':\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n itemSearchStr.current = '';\n const allItems = scope ? scope.current.queryAllNodes(queryScope) : [];\n const currentIndex = allItems.findIndex((e) => e === navigationItem);\n if (allItems.length === 0) {\n return;\n }\n let nextIndex: number = currentIndex;\n switch (e.key) {\n case 'ArrowUp':\n nextIndex += -1;\n break;\n case 'ArrowDown':\n nextIndex += 1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = -1;\n break;\n }\n // We already checked if allItems.length = 0 above\n nextIndex = getCircularIndex(nextIndex, allItems.length)!;\n onNavigate && onNavigate(allItems[nextIndex]);\n break;\n default: {\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey) {\n // A-Z\n e.preventDefault();\n\n if (\n itemSearchStr.current.length === 0 ||\n itemSearchStr.current.slice(-1) !== e.key\n ) {\n itemSearchStr.current = itemSearchStr.current + e.key;\n }\n clearTimeout(itemSearchClearTimeout.current as any);\n itemSearchClearTimeout.current = setTimeout(() => {\n itemSearchStr.current = '';\n }, 500);\n\n const allItems = scope\n ? scope.current.queryAllNodes(queryScope)\n : [];\n const currentIndex = allItems.findIndex(\n (e) => e === navigationItem\n );\n const searchStr = itemSearchStr.current;\n let nextIndex = -1;\n for (\n let i = searchStr.length === 1 ? 1 : 0;\n i < allItems.length;\n i++\n ) {\n const idx = getCircularIndex(currentIndex + i, allItems.length)!;\n const dom = allItems[idx];\n const domText = dom.innerText.toLowerCase();\n if (domText.length > 0 && domText.startsWith(searchStr)) {\n nextIndex = idx;\n break;\n }\n }\n if (nextIndex >= 0 && nextIndex < allItems.length) {\n onNavigate && onNavigate(allItems[nextIndex]);\n }\n }\n }\n }\n }\n\n if (!open) {\n interactedOutside.current = false;\n return null;\n }\n\n return (\n <MenuListProvider\n value={{\n navigationItem,\n onNavigate,\n }}\n >\n <Comp\n ref={assignMultipleRefs(forwardedRef, menuListRef)}\n as={innerAs}\n id={menuListIdRef.current}\n role=\"menu\"\n aria-labelledby={buttonRef.current?.id}\n data-menu-list=\"\"\n tabIndex=\"-1\"\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n {...otherProps}\n />\n </MenuListProvider>\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MenuList.js","names":["useCallback","forwardRef","useEffect","useRef","useState","useLayoutEffect","useMenuContext","MenuListProvider","assignMultipleRefs","useOnClickOutside","useScope","MENU_SUBMENU_TRIGGER_ATTR","queryScope","getCircularIndex","wrapEvent","jsx","_jsx","useEnhancedEffect","window","MenuList","props","forwardedRef","as","Comp","innerAs","onKeyDown","id","preferredId","defaultActiveItemValue","otherProps","interactedOutside","itemSearchStr","itemSearchClearTimeout","undefined","menuListIdRef","buttonRef","closeMenu","openWithArrowKeyRef","open","isContextMenu","menuBar","menuBarMenuId","navigationItem","setNavigationItem","mounted","setMounted","menuListRef","scope","getAllItems","current","queryAllNodes","type","instance","closest","onNavigate","el","focus","preventScroll","allItems","index","length","i","dataset","value","Array","isArray","set","Set","val","has","handleClickOutside","e","pointerType","button","target","HTMLElement","contains","preventDefault","handleKeyDown","isHorizontalMenuBarMenu","orientation","key","focusTrigger","moveFocus","focusKey","hasAttribute","currentIndex","findIndex","nextIndex","ctrlKey","altKey","slice","clearTimeout","setTimeout","searchStr","idx","dom","domText","innerText","toLowerCase","startsWith","children","ref","role","tabIndex"],"sources":["../../../src/Menu/MenuList.tsx"],"sourcesContent":["import type { HTMLAttributes, ElementType, KeyboardEvent } from 'react';\nimport {\n useCallback,\n forwardRef,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from 'react';\n\nimport { useMenuContext, MenuListProvider } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { useOnClickOutside } from '../hooks/useOnClickOutside';\nimport { useScope } from '../hooks';\nimport { MENU_SUBMENU_TRIGGER_ATTR, queryScope } from './scope';\nimport { getCircularIndex, wrapEvent } from '../utils';\n\nconst useEnhancedEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport interface MenuListProps extends HTMLAttributes<HTMLUListElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n defaultActiveItemValue?: string | string[];\n}\n\nexport const MenuList = forwardRef<HTMLUListElement, MenuListProps>(\n function MenuList(props, forwardedRef) {\n const {\n as: Comp = 'ul',\n innerAs,\n onKeyDown,\n id: preferredId,\n defaultActiveItemValue,\n ...otherProps\n } = props;\n\n const interactedOutside = useRef(false);\n const itemSearchStr = useRef('');\n const itemSearchClearTimeout = useRef<\n ReturnType<typeof setTimeout> | undefined\n >(undefined);\n\n const {\n menuListIdRef,\n buttonRef,\n closeMenu,\n openWithArrowKeyRef,\n open,\n isContextMenu,\n menuBar,\n menuBarMenuId,\n } = useMenuContext();\n\n const [navigationItem, setNavigationItem] = useState<\n HTMLElement | undefined\n >();\n\n const [mounted, setMounted] = useState(false);\n\n const menuListRef = useRef<HTMLUListElement | null>(null);\n\n const scope = useScope<HTMLLIElement, HTMLUListElement>(menuListRef);\n const getAllItems = useCallback(\n () =>\n scope.current.queryAllNodes(\n (type, props, instance) =>\n queryScope(type, props) &&\n instance.closest('[data-menu-list]') === menuListRef.current\n ),\n [scope]\n );\n\n const onNavigate = (el: HTMLElement) => {\n el.focus({ preventScroll: true });\n setNavigationItem(el);\n };\n\n menuListIdRef.current = preferredId || menuListIdRef.current;\n\n useEnhancedEffect(() => {\n if (!mounted) {\n const allItems = getAllItems();\n let index = getCircularIndex(\n openWithArrowKeyRef.current === 'ArrowUp' ? -1 : 0,\n allItems.length\n );\n\n if (defaultActiveItemValue) {\n if (typeof defaultActiveItemValue === 'string') {\n for (let i = 0; i < allItems.length; i++) {\n if (allItems[i].dataset.value === defaultActiveItemValue) {\n index = i;\n break;\n }\n }\n } else if (Array.isArray(defaultActiveItemValue)) {\n const set = new Set(defaultActiveItemValue);\n for (let i = 0; i < allItems.length; i++) {\n const val = allItems[i].dataset.value;\n if (val && set.has(val)) {\n index = i;\n break;\n }\n }\n }\n }\n\n if (index !== null) {\n onNavigate && onNavigate(allItems[index]);\n }\n }\n\n openWithArrowKeyRef.current = null;\n setMounted(true);\n }, [\n mounted,\n navigationItem,\n onNavigate,\n openWithArrowKeyRef,\n getAllItems,\n defaultActiveItemValue,\n ]);\n\n const handleClickOutside = useCallback(\n (e: PointerEvent) => {\n if (isContextMenu.current) {\n if (!interactedOutside.current && e.pointerType === 'touch') {\n // First interaction should be ignored, because\n // this is what triggered the context menu to open\n interactedOutside.current = true;\n return;\n }\n\n if (e.button === 0) {\n closeMenu(e);\n }\n } else {\n if (\n e.target instanceof HTMLElement &&\n e.target !== buttonRef.current &&\n !buttonRef.current?.contains(e.target)\n ) {\n closeMenu(e);\n }\n }\n e.preventDefault();\n },\n [buttonRef, isContextMenu, closeMenu]\n );\n\n useOnClickOutside(menuListRef, handleClickOutside, open);\n\n function handleKeyDown(e: KeyboardEvent<HTMLUListElement>) {\n const isHorizontalMenuBarMenu =\n menuBar && menuBarMenuId && menuBar.orientation === 'horizontal';\n\n switch (e.key) {\n case 'Escape':\n case 'Tab': {\n closeMenu(e, { focusTrigger: true });\n e.preventDefault(); // prevents focusing on next element, because we will be handling it\n itemSearchStr.current = '';\n break;\n }\n case 'ArrowRight': {\n if (isHorizontalMenuBarMenu) {\n menuBar!.moveFocus(menuBarMenuId!, 1, e, {\n open: true,\n focusKey: 'ArrowDown',\n });\n e.preventDefault();\n itemSearchStr.current = '';\n }\n break;\n }\n case 'ArrowLeft': {\n if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {\n closeMenu(e, { focusTrigger: true });\n e.preventDefault();\n itemSearchStr.current = '';\n } else if (isHorizontalMenuBarMenu) {\n menuBar!.moveFocus(menuBarMenuId!, -1, e, {\n open: true,\n focusKey: 'ArrowDown',\n });\n e.preventDefault();\n itemSearchStr.current = '';\n }\n break;\n }\n case 'Home':\n case 'End':\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n itemSearchStr.current = '';\n const allItems = getAllItems();\n const currentIndex = allItems.findIndex((e) => e === navigationItem);\n if (allItems.length === 0) {\n return;\n }\n let nextIndex: number = currentIndex;\n switch (e.key) {\n case 'ArrowUp':\n nextIndex += -1;\n break;\n case 'ArrowDown':\n nextIndex += 1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = -1;\n break;\n }\n // We already checked if allItems.length = 0 above\n nextIndex = getCircularIndex(nextIndex, allItems.length)!;\n onNavigate && onNavigate(allItems[nextIndex]);\n break;\n default: {\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey) {\n // A-Z\n e.preventDefault();\n\n if (\n itemSearchStr.current.length === 0 ||\n itemSearchStr.current.slice(-1) !== e.key\n ) {\n itemSearchStr.current = itemSearchStr.current + e.key;\n }\n clearTimeout(itemSearchClearTimeout.current as any);\n itemSearchClearTimeout.current = setTimeout(() => {\n itemSearchStr.current = '';\n }, 500);\n\n const allItems = getAllItems();\n const currentIndex = allItems.findIndex(\n (e) => e === navigationItem\n );\n const searchStr = itemSearchStr.current;\n let nextIndex = -1;\n for (\n let i = searchStr.length === 1 ? 1 : 0;\n i < allItems.length;\n i++\n ) {\n const idx = getCircularIndex(currentIndex + i, allItems.length)!;\n const dom = allItems[idx];\n const domText = dom.innerText.toLowerCase();\n if (domText.length > 0 && domText.startsWith(searchStr)) {\n nextIndex = idx;\n break;\n }\n }\n if (nextIndex >= 0 && nextIndex < allItems.length) {\n onNavigate && onNavigate(allItems[nextIndex]);\n }\n }\n }\n }\n }\n\n if (!open) {\n interactedOutside.current = false;\n return null;\n }\n\n return (\n <MenuListProvider\n value={{\n navigationItem,\n onNavigate,\n }}\n >\n <Comp\n ref={assignMultipleRefs(forwardedRef, menuListRef)}\n as={innerAs}\n id={menuListIdRef.current}\n role=\"menu\"\n aria-labelledby={buttonRef.current?.id}\n data-menu-list=\"\"\n tabIndex=\"-1\"\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n {...otherProps}\n />\n </MenuListProvider>\n );\n }\n);\n"],"mappings":"AACA,SACEA,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,QAAQ,EACRC,eAAe,QACV,OAAO;AAEd,SAASC,cAAc,EAAEC,gBAAgB,QAAQ,WAAW;AAC5D,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,QAAQ,QAAQ,UAAU;AACnC,SAASC,yBAAyB,EAAEC,UAAU,QAAQ,SAAS;AAC/D,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvD,MAAMC,iBAAiB,GACrB,OAAOC,MAAM,KAAK,WAAW,GAAGb,eAAe,GAAGH,SAAS;AAQ7D,OAAO,MAAMiB,QAAQ,gBAAGlB,UAAU,CAChC,SAASkB,QAAQA,CAACC,KAAK,EAAEC,YAAY,EAAE;EACrC,MAAM;IACJC,EAAE,EAAEC,IAAI,GAAG,IAAI;IACfC,OAAO;IACPC,SAAS;IACTC,EAAE,EAAEC,WAAW;IACfC,sBAAsB;IACtB,GAAGC;EACL,CAAC,GAAGT,KAAK;EAET,MAAMU,iBAAiB,GAAG3B,MAAM,CAAC,KAAK,CAAC;EACvC,MAAM4B,aAAa,GAAG5B,MAAM,CAAC,EAAE,CAAC;EAChC,MAAM6B,sBAAsB,GAAG7B,MAAM,CAEnC8B,SAAS,CAAC;EAEZ,MAAM;IACJC,aAAa;IACbC,SAAS;IACTC,SAAS;IACTC,mBAAmB;IACnBC,IAAI;IACJC,aAAa;IACbC,OAAO;IACPC;EACF,CAAC,GAAGnC,cAAc,CAAC,CAAC;EAEpB,MAAM,CAACoC,cAAc,EAAEC,iBAAiB,CAAC,GAAGvC,QAAQ,CAElD,CAAC;EAEH,MAAM,CAACwC,OAAO,EAAEC,UAAU,CAAC,GAAGzC,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAM0C,WAAW,GAAG3C,MAAM,CAA0B,IAAI,CAAC;EAEzD,MAAM4C,KAAK,GAAGrC,QAAQ,CAAkCoC,WAAW,CAAC;EACpE,MAAME,WAAW,GAAGhD,WAAW,CAC7B,MACE+C,KAAK,CAACE,OAAO,CAACC,aAAa,CACzB,CAACC,IAAI,EAAE/B,KAAK,EAAEgC,QAAQ,KACpBxC,UAAU,CAACuC,IAAI,EAAE/B,KAAK,CAAC,IACvBgC,QAAQ,CAACC,OAAO,CAAC,kBAAkB,CAAC,KAAKP,WAAW,CAACG,OACzD,CAAC,EACH,CAACF,KAAK,CACR,CAAC;EAED,MAAMO,UAAU,GAAIC,EAAe,IAAK;IACtCA,EAAE,CAACC,KAAK,CAAC;MAAEC,aAAa,EAAE;IAAK,CAAC,CAAC;IACjCd,iBAAiB,CAACY,EAAE,CAAC;EACvB,CAAC;EAEDrB,aAAa,CAACe,OAAO,GAAGtB,WAAW,IAAIO,aAAa,CAACe,OAAO;EAE5DhC,iBAAiB,CAAC,MAAM;IACtB,IAAI,CAAC2B,OAAO,EAAE;MACZ,MAAMc,QAAQ,GAAGV,WAAW,CAAC,CAAC;MAC9B,IAAIW,KAAK,GAAG9C,gBAAgB,CAC1BwB,mBAAmB,CAACY,OAAO,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,EAClDS,QAAQ,CAACE,MACX,CAAC;MAED,IAAIhC,sBAAsB,EAAE;QAC1B,IAAI,OAAOA,sBAAsB,KAAK,QAAQ,EAAE;UAC9C,KAAK,IAAIiC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAACE,MAAM,EAAEC,CAAC,EAAE,EAAE;YACxC,IAAIH,QAAQ,CAACG,CAAC,CAAC,CAACC,OAAO,CAACC,KAAK,KAAKnC,sBAAsB,EAAE;cACxD+B,KAAK,GAAGE,CAAC;cACT;YACF;UACF;QACF,CAAC,MAAM,IAAIG,KAAK,CAACC,OAAO,CAACrC,sBAAsB,CAAC,EAAE;UAChD,MAAMsC,GAAG,GAAG,IAAIC,GAAG,CAACvC,sBAAsB,CAAC;UAC3C,KAAK,IAAIiC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAACE,MAAM,EAAEC,CAAC,EAAE,EAAE;YACxC,MAAMO,GAAG,GAAGV,QAAQ,CAACG,CAAC,CAAC,CAACC,OAAO,CAACC,KAAK;YACrC,IAAIK,GAAG,IAAIF,GAAG,CAACG,GAAG,CAACD,GAAG,CAAC,EAAE;cACvBT,KAAK,GAAGE,CAAC;cACT;YACF;UACF;QACF;MACF;MAEA,IAAIF,KAAK,KAAK,IAAI,EAAE;QAClBL,UAAU,IAAIA,UAAU,CAACI,QAAQ,CAACC,KAAK,CAAC,CAAC;MAC3C;IACF;IAEAtB,mBAAmB,CAACY,OAAO,GAAG,IAAI;IAClCJ,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC,EAAE,CACDD,OAAO,EACPF,cAAc,EACdY,UAAU,EACVjB,mBAAmB,EACnBW,WAAW,EACXpB,sBAAsB,CACvB,CAAC;EAEF,MAAM0C,kBAAkB,GAAGtE,WAAW,CACnCuE,CAAe,IAAK;IACnB,IAAIhC,aAAa,CAACU,OAAO,EAAE;MACzB,IAAI,CAACnB,iBAAiB,CAACmB,OAAO,IAAIsB,CAAC,CAACC,WAAW,KAAK,OAAO,EAAE;QAC3D;QACA;QACA1C,iBAAiB,CAACmB,OAAO,GAAG,IAAI;QAChC;MACF;MAEA,IAAIsB,CAAC,CAACE,MAAM,KAAK,CAAC,EAAE;QAClBrC,SAAS,CAACmC,CAAC,CAAC;MACd;IACF,CAAC,MAAM;MACL,IACEA,CAAC,CAACG,MAAM,YAAYC,WAAW,IAC/BJ,CAAC,CAACG,MAAM,KAAKvC,SAAS,CAACc,OAAO,IAC9B,CAACd,SAAS,CAACc,OAAO,EAAE2B,QAAQ,CAACL,CAAC,CAACG,MAAM,CAAC,EACtC;QACAtC,SAAS,CAACmC,CAAC,CAAC;MACd;IACF;IACAA,CAAC,CAACM,cAAc,CAAC,CAAC;EACpB,CAAC,EACD,CAAC1C,SAAS,EAAEI,aAAa,EAAEH,SAAS,CACtC,CAAC;EAED3B,iBAAiB,CAACqC,WAAW,EAAEwB,kBAAkB,EAAEhC,IAAI,CAAC;EAExD,SAASwC,aAAaA,CAACP,CAAkC,EAAE;IACzD,MAAMQ,uBAAuB,GAC3BvC,OAAO,IAAIC,aAAa,IAAID,OAAO,CAACwC,WAAW,KAAK,YAAY;IAElE,QAAQT,CAAC,CAACU,GAAG;MACX,KAAK,QAAQ;MACb,KAAK,KAAK;QAAE;UACV7C,SAAS,CAACmC,CAAC,EAAE;YAAEW,YAAY,EAAE;UAAK,CAAC,CAAC;UACpCX,CAAC,CAACM,cAAc,CAAC,CAAC,CAAC,CAAC;UACpB9C,aAAa,CAACkB,OAAO,GAAG,EAAE;UAC1B;QACF;MACA,KAAK,YAAY;QAAE;UACjB,IAAI8B,uBAAuB,EAAE;YAC3BvC,OAAO,CAAE2C,SAAS,CAAC1C,aAAa,EAAG,CAAC,EAAE8B,CAAC,EAAE;cACvCjC,IAAI,EAAE,IAAI;cACV8C,QAAQ,EAAE;YACZ,CAAC,CAAC;YACFb,CAAC,CAACM,cAAc,CAAC,CAAC;YAClB9C,aAAa,CAACkB,OAAO,GAAG,EAAE;UAC5B;UACA;QACF;MACA,KAAK,WAAW;QAAE;UAChB,IAAId,SAAS,CAACc,OAAO,EAAEoC,YAAY,CAAC1E,yBAAyB,CAAC,EAAE;YAC9DyB,SAAS,CAACmC,CAAC,EAAE;cAAEW,YAAY,EAAE;YAAK,CAAC,CAAC;YACpCX,CAAC,CAACM,cAAc,CAAC,CAAC;YAClB9C,aAAa,CAACkB,OAAO,GAAG,EAAE;UAC5B,CAAC,MAAM,IAAI8B,uBAAuB,EAAE;YAClCvC,OAAO,CAAE2C,SAAS,CAAC1C,aAAa,EAAG,CAAC,CAAC,EAAE8B,CAAC,EAAE;cACxCjC,IAAI,EAAE,IAAI;cACV8C,QAAQ,EAAE;YACZ,CAAC,CAAC;YACFb,CAAC,CAACM,cAAc,CAAC,CAAC;YAClB9C,aAAa,CAACkB,OAAO,GAAG,EAAE;UAC5B;UACA;QACF;MACA,KAAK,MAAM;MACX,KAAK,KAAK;MACV,KAAK,WAAW;MAChB,KAAK,SAAS;QACZsB,CAAC,CAACM,cAAc,CAAC,CAAC;QAClB9C,aAAa,CAACkB,OAAO,GAAG,EAAE;QAC1B,MAAMS,QAAQ,GAAGV,WAAW,CAAC,CAAC;QAC9B,MAAMsC,YAAY,GAAG5B,QAAQ,CAAC6B,SAAS,CAAEhB,CAAC,IAAKA,CAAC,KAAK7B,cAAc,CAAC;QACpE,IAAIgB,QAAQ,CAACE,MAAM,KAAK,CAAC,EAAE;UACzB;QACF;QACA,IAAI4B,SAAiB,GAAGF,YAAY;QACpC,QAAQf,CAAC,CAACU,GAAG;UACX,KAAK,SAAS;YACZO,SAAS,IAAI,CAAC,CAAC;YACf;UACF,KAAK,WAAW;YACdA,SAAS,IAAI,CAAC;YACd;UACF,KAAK,MAAM;YACTA,SAAS,GAAG,CAAC;YACb;UACF,KAAK,KAAK;YACRA,SAAS,GAAG,CAAC,CAAC;YACd;QACJ;QACA;QACAA,SAAS,GAAG3E,gBAAgB,CAAC2E,SAAS,EAAE9B,QAAQ,CAACE,MAAM,CAAE;QACzDN,UAAU,IAAIA,UAAU,CAACI,QAAQ,CAAC8B,SAAS,CAAC,CAAC;QAC7C;MACF;QAAS;UACP,IAAIjB,CAAC,CAACU,GAAG,CAACrB,MAAM,KAAK,CAAC,IAAI,CAACW,CAAC,CAACkB,OAAO,IAAI,CAAClB,CAAC,CAACmB,MAAM,EAAE;YACjD;YACAnB,CAAC,CAACM,cAAc,CAAC,CAAC;YAElB,IACE9C,aAAa,CAACkB,OAAO,CAACW,MAAM,KAAK,CAAC,IAClC7B,aAAa,CAACkB,OAAO,CAAC0C,KAAK,CAAC,CAAC,CAAC,CAAC,KAAKpB,CAAC,CAACU,GAAG,EACzC;cACAlD,aAAa,CAACkB,OAAO,GAAGlB,aAAa,CAACkB,OAAO,GAAGsB,CAAC,CAACU,GAAG;YACvD;YACAW,YAAY,CAAC5D,sBAAsB,CAACiB,OAAc,CAAC;YACnDjB,sBAAsB,CAACiB,OAAO,GAAG4C,UAAU,CAAC,MAAM;cAChD9D,aAAa,CAACkB,OAAO,GAAG,EAAE;YAC5B,CAAC,EAAE,GAAG,CAAC;YAEP,MAAMS,QAAQ,GAAGV,WAAW,CAAC,CAAC;YAC9B,MAAMsC,YAAY,GAAG5B,QAAQ,CAAC6B,SAAS,CACpChB,CAAC,IAAKA,CAAC,KAAK7B,cACf,CAAC;YACD,MAAMoD,SAAS,GAAG/D,aAAa,CAACkB,OAAO;YACvC,IAAIuC,SAAS,GAAG,CAAC,CAAC;YAClB,KACE,IAAI3B,CAAC,GAAGiC,SAAS,CAAClC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EACtCC,CAAC,GAAGH,QAAQ,CAACE,MAAM,EACnBC,CAAC,EAAE,EACH;cACA,MAAMkC,GAAG,GAAGlF,gBAAgB,CAACyE,YAAY,GAAGzB,CAAC,EAAEH,QAAQ,CAACE,MAAM,CAAE;cAChE,MAAMoC,GAAG,GAAGtC,QAAQ,CAACqC,GAAG,CAAC;cACzB,MAAME,OAAO,GAAGD,GAAG,CAACE,SAAS,CAACC,WAAW,CAAC,CAAC;cAC3C,IAAIF,OAAO,CAACrC,MAAM,GAAG,CAAC,IAAIqC,OAAO,CAACG,UAAU,CAACN,SAAS,CAAC,EAAE;gBACvDN,SAAS,GAAGO,GAAG;gBACf;cACF;YACF;YACA,IAAIP,SAAS,IAAI,CAAC,IAAIA,SAAS,GAAG9B,QAAQ,CAACE,MAAM,EAAE;cACjDN,UAAU,IAAIA,UAAU,CAACI,QAAQ,CAAC8B,SAAS,CAAC,CAAC;YAC/C;UACF;QACF;IACF;EACF;EAEA,IAAI,CAAClD,IAAI,EAAE;IACTR,iBAAiB,CAACmB,OAAO,GAAG,KAAK;IACjC,OAAO,IAAI;EACb;EAEA,oBACEjC,IAAA,CAACT,gBAAgB;IACfwD,KAAK,EAAE;MACLrB,cAAc;MACdY;IACF,CAAE;IAAA+C,QAAA,eAEFrF,IAAA,CAACO,IAAI;MACH+E,GAAG,EAAE9F,kBAAkB,CAACa,YAAY,EAAEyB,WAAW,CAAE;MACnDxB,EAAE,EAAEE,OAAQ;MACZE,EAAE,EAAEQ,aAAa,CAACe,OAAQ;MAC1BsD,IAAI,EAAC,MAAM;MACX,mBAAiBpE,SAAS,CAACc,OAAO,EAAEvB,EAAG;MACvC,kBAAe,EAAE;MACjB8E,QAAQ,EAAC,IAAI;MACb/E,SAAS,EAAEX,SAAS,CAACW,SAAS,EAAEqD,aAAa,CAAE;MAAA,GAC3CjD;IAAU,CACf;EAAC,CACc,CAAC;AAEvB,CACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,6GAqBvB,CAAC"}
1
+ {"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,6GA8BvB,CAAC"}
@@ -1,11 +1,13 @@
1
1
  import { forwardRef } from 'react';
2
2
  import { Popper } from '../Popper';
3
3
  import { useMenuContext } from './context';
4
+ import { MENU_SUBMENU_TRIGGER_ATTR } from './scope';
4
5
  import { jsx as _jsx } from "react/jsx-runtime";
5
6
  export const MenuPopover = /*#__PURE__*/forwardRef(function MenuPopover(props, forwardedRef) {
6
7
  const {
7
8
  as = 'div',
8
9
  innerAs,
10
+ placement,
9
11
  ...otherProps
10
12
  } = props;
11
13
  const {
@@ -14,6 +16,15 @@ export const MenuPopover = /*#__PURE__*/forwardRef(function MenuPopover(props, f
14
16
  offsetFn,
15
17
  isContextMenu
16
18
  } = useMenuContext();
19
+ const getDefaultPlacement = () => {
20
+ if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {
21
+ return 'right-start';
22
+ }
23
+ if (isContextMenu.current) {
24
+ return 'bottom-start';
25
+ }
26
+ return undefined;
27
+ };
17
28
  if (!open) {
18
29
  return null;
19
30
  }
@@ -23,7 +34,7 @@ export const MenuPopover = /*#__PURE__*/forwardRef(function MenuPopover(props, f
23
34
  ref: forwardedRef,
24
35
  anchorEl: buttonRef,
25
36
  offsetFn: offsetFn,
26
- placement: isContextMenu.current ? 'bottom-start' : undefined,
37
+ placement: placement ?? getDefaultPlacement(),
27
38
  ...otherProps
28
39
  });
29
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.js","names":["forwardRef","Popper","useMenuContext","jsx","_jsx","MenuPopover","props","forwardedRef","as","innerAs","otherProps","buttonRef","open","offsetFn","isContextMenu","ref","anchorEl","placement","current","undefined"],"sources":["../../../src/Menu/MenuPopover.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { PopperProps } from '../Popper';\nimport { Popper } from '../Popper';\nimport { useMenuContext } from './context';\n\nexport interface MenuPopoverProps extends Omit<PopperProps, 'anchorEl'> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n}\n\nexport const MenuPopover = forwardRef<HTMLDivElement, MenuPopoverProps>(\n function MenuPopover(props, forwardedRef) {\n const { as = 'div', innerAs, ...otherProps } = props;\n const { buttonRef, open, offsetFn, isContextMenu } = useMenuContext();\n\n if (!open) {\n return null;\n }\n\n return (\n <Popper\n as={as}\n innerAs={innerAs}\n ref={forwardedRef}\n anchorEl={buttonRef}\n offsetFn={offsetFn}\n placement={isContextMenu.current ? 'bottom-start' : undefined}\n {...otherProps}\n />\n );\n }\n);\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,OAAO;AAGlC,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,cAAc,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ3C,OAAO,MAAMC,WAAW,gBAAGL,UAAU,CACnC,SAASK,WAAWA,CAACC,KAAK,EAAEC,YAAY,EAAE;EACxC,MAAM;IAAEC,EAAE,GAAG,KAAK;IAAEC,OAAO;IAAE,GAAGC;EAAW,CAAC,GAAGJ,KAAK;EACpD,MAAM;IAAEK,SAAS;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAc,CAAC,GAAGZ,cAAc,CAAC,CAAC;EAErE,IAAI,CAACU,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,oBACER,IAAA,CAACH,MAAM;IACLO,EAAE,EAAEA,EAAG;IACPC,OAAO,EAAEA,OAAQ;IACjBM,GAAG,EAAER,YAAa;IAClBS,QAAQ,EAAEL,SAAU;IACpBE,QAAQ,EAAEA,QAAS;IACnBI,SAAS,EAAEH,aAAa,CAACI,OAAO,GAAG,cAAc,GAAGC,SAAU;IAAA,GAC1DT;EAAU,CACf,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"MenuPopover.js","names":["forwardRef","Popper","useMenuContext","MENU_SUBMENU_TRIGGER_ATTR","jsx","_jsx","MenuPopover","props","forwardedRef","as","innerAs","placement","otherProps","buttonRef","open","offsetFn","isContextMenu","getDefaultPlacement","current","hasAttribute","undefined","ref","anchorEl"],"sources":["../../../src/Menu/MenuPopover.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { PopperProps } from '../Popper';\nimport { Popper } from '../Popper';\nimport { useMenuContext } from './context';\nimport { MENU_SUBMENU_TRIGGER_ATTR } from './scope';\n\nexport interface MenuPopoverProps extends Omit<PopperProps, 'anchorEl'> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n}\n\nexport const MenuPopover = forwardRef<HTMLDivElement, MenuPopoverProps>(\n function MenuPopover(props, forwardedRef) {\n const { as = 'div', innerAs, placement, ...otherProps } = props;\n const { buttonRef, open, offsetFn, isContextMenu } = useMenuContext();\n const getDefaultPlacement = () => {\n if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {\n return 'right-start';\n }\n if (isContextMenu.current) {\n return 'bottom-start';\n }\n return undefined;\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <Popper\n as={as}\n innerAs={innerAs}\n ref={forwardedRef}\n anchorEl={buttonRef}\n offsetFn={offsetFn}\n placement={placement ?? getDefaultPlacement()}\n {...otherProps}\n />\n );\n }\n);\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,OAAO;AAGlC,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,cAAc,QAAQ,WAAW;AAC1C,SAASC,yBAAyB,QAAQ,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpD,OAAO,MAAMC,WAAW,gBAAGN,UAAU,CACnC,SAASM,WAAWA,CAACC,KAAK,EAAEC,YAAY,EAAE;EACxC,MAAM;IAAEC,EAAE,GAAG,KAAK;IAAEC,OAAO;IAAEC,SAAS;IAAE,GAAGC;EAAW,CAAC,GAAGL,KAAK;EAC/D,MAAM;IAAEM,SAAS;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAc,CAAC,GAAGd,cAAc,CAAC,CAAC;EACrE,MAAMe,mBAAmB,GAAGA,CAAA,KAAM;IAChC,IAAIJ,SAAS,CAACK,OAAO,EAAEC,YAAY,CAAChB,yBAAyB,CAAC,EAAE;MAC9D,OAAO,aAAa;IACtB;IACA,IAAIa,aAAa,CAACE,OAAO,EAAE;MACzB,OAAO,cAAc;IACvB;IACA,OAAOE,SAAS;EAClB,CAAC;EAED,IAAI,CAACN,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,oBACET,IAAA,CAACJ,MAAM;IACLQ,EAAE,EAAEA,EAAG;IACPC,OAAO,EAAEA,OAAQ;IACjBW,GAAG,EAAEb,YAAa;IAClBc,QAAQ,EAAET,SAAU;IACpBE,QAAQ,EAAEA,QAAS;IACnBJ,SAAS,EAAEA,SAAS,IAAIM,mBAAmB,CAAC,CAAE;IAAA,GAC1CL;EAAU,CACf,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import type { LiHTMLAttributes, ElementType } from 'react';
2
+ export interface MenuSubmenuTriggerProps extends LiHTMLAttributes<HTMLLIElement> {
3
+ as?: ElementType<any>;
4
+ innerAs?: ElementType<any>;
5
+ disabled?: boolean;
6
+ }
7
+ export declare const MenuSubmenuTrigger: import("react").ForwardRefExoticComponent<MenuSubmenuTriggerProps & import("react").RefAttributes<any>>;
8
+ //# sourceMappingURL=MenuSubmenuTrigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSubmenuTrigger.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuSubmenuTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,gBAAgB,EAChB,WAAW,EAKZ,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,uBACf,SAAQ,gBAAgB,CAAC,aAAa,CAAC;IACvC,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,yGA6I9B,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { forwardRef, useEffect, useId, useRef } from 'react';
2
+ import { useMenuContext, useMenuListContext } from './context';
3
+ import { MENU_SUBMENU_TRIGGER_ATTR } from './scope';
4
+ import { assignMultipleRefs } from '../utils/assign-ref';
5
+ import { wrapEvent } from '../utils';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export const MenuSubmenuTrigger = /*#__PURE__*/forwardRef(function MenuSubmenuTrigger(props, forwardedRef) {
8
+ const {
9
+ as: Comp = 'li',
10
+ innerAs,
11
+ disabled,
12
+ onClick,
13
+ onFocus,
14
+ onKeyDown,
15
+ onMouseMove,
16
+ onPointerUp,
17
+ ...otherProps
18
+ } = props;
19
+ const {
20
+ buttonRef,
21
+ menuListIdRef,
22
+ open,
23
+ onChange,
24
+ openWithArrowKeyRef
25
+ } = useMenuContext();
26
+ const {
27
+ navigationItem,
28
+ onNavigate
29
+ } = useMenuListContext();
30
+ const ref = useRef(null);
31
+ const itemId = useId();
32
+ const isActive = ref.current && ref.current === navigationItem;
33
+ const setTrigger = () => {
34
+ if (ref.current) {
35
+ buttonRef.current = ref.current;
36
+ }
37
+ };
38
+ const createMenuTriggerEvent = () => ({
39
+ // This close path is only used when roving focus leaves the trigger.
40
+ // Internal state transitions only need currentTarget/target plus
41
+ // preventDefault/defaultPrevented for wrapEvent compatibility.
42
+ currentTarget: ref.current,
43
+ target: ref.current,
44
+ preventDefault() {},
45
+ defaultPrevented: false
46
+ });
47
+ const openSubmenu = function (e) {
48
+ let focusFirstItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
49
+ if (disabled || !ref.current) {
50
+ return;
51
+ }
52
+ setTrigger();
53
+ onNavigate && onNavigate(ref.current);
54
+ if (focusFirstItem) {
55
+ openWithArrowKeyRef.current = 'ArrowDown';
56
+ }
57
+ onChange(e, true);
58
+ };
59
+ useEffect(() => {
60
+ if (!open || !ref.current) {
61
+ return;
62
+ }
63
+ if (navigationItem && navigationItem !== ref.current) {
64
+ onChange(createMenuTriggerEvent(), false);
65
+ }
66
+ }, [navigationItem, onChange, open]);
67
+ const handleClick = e => {
68
+ openSubmenu(e);
69
+ e.preventDefault();
70
+ };
71
+ const handleFocus = () => {
72
+ if (!disabled && ref.current && ref.current !== navigationItem) {
73
+ onNavigate && onNavigate(ref.current);
74
+ }
75
+ setTrigger();
76
+ };
77
+ const handleKeyDown = e => {
78
+ switch (e.key) {
79
+ case ' ':
80
+ case 'Enter':
81
+ openSubmenu(e, true);
82
+ e.preventDefault();
83
+ break;
84
+ case 'ArrowRight':
85
+ if (!open) {
86
+ openSubmenu(e, true);
87
+ e.preventDefault();
88
+ }
89
+ break;
90
+ }
91
+ };
92
+ const handleMouseMove = e => {
93
+ if (!disabled && ref.current && ref.current !== navigationItem) {
94
+ onNavigate && onNavigate(ref.current);
95
+ }
96
+ if (!disabled && !open) {
97
+ openSubmenu(e);
98
+ } else {
99
+ setTrigger();
100
+ }
101
+ };
102
+ const handlePointerUp = e => {
103
+ if (e.pointerType === 'touch') {
104
+ openSubmenu(e);
105
+ e.preventDefault();
106
+ }
107
+ };
108
+ return /*#__PURE__*/_jsx(Comp, {
109
+ ref: assignMultipleRefs(ref, forwardedRef),
110
+ as: innerAs,
111
+ id: disabled ? undefined : itemId,
112
+ [MENU_SUBMENU_TRIGGER_ATTR]: '',
113
+ "data-menu-submenu-trigger": "",
114
+ "data-highlighted": isActive ? '' : undefined,
115
+ role: "menuitem",
116
+ "aria-haspopup": "menu",
117
+ "aria-controls": menuListIdRef.current,
118
+ "aria-expanded": open ? true : undefined,
119
+ onClick: wrapEvent(onClick, handleClick),
120
+ tabIndex: disabled ? -1 : 0,
121
+ onFocus: wrapEvent(onFocus, handleFocus),
122
+ onKeyDown: wrapEvent(onKeyDown, handleKeyDown),
123
+ onMouseMove: wrapEvent(onMouseMove, handleMouseMove),
124
+ onPointerUp: wrapEvent(onPointerUp, handlePointerUp),
125
+ "data-disabled": disabled ? '' : undefined,
126
+ "aria-disabled": disabled ? '' : undefined,
127
+ disabled: disabled,
128
+ ...otherProps
129
+ });
130
+ });
131
+ //# sourceMappingURL=MenuSubmenuTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSubmenuTrigger.js","names":["forwardRef","useEffect","useId","useRef","useMenuContext","useMenuListContext","MENU_SUBMENU_TRIGGER_ATTR","assignMultipleRefs","wrapEvent","jsx","_jsx","MenuSubmenuTrigger","props","forwardedRef","as","Comp","innerAs","disabled","onClick","onFocus","onKeyDown","onMouseMove","onPointerUp","otherProps","buttonRef","menuListIdRef","open","onChange","openWithArrowKeyRef","navigationItem","onNavigate","ref","itemId","isActive","current","setTrigger","createMenuTriggerEvent","currentTarget","target","preventDefault","defaultPrevented","openSubmenu","e","focusFirstItem","arguments","length","undefined","handleClick","handleFocus","handleKeyDown","key","handleMouseMove","handlePointerUp","pointerType","id","role","tabIndex"],"sources":["../../../src/Menu/MenuSubmenuTrigger.tsx"],"sourcesContent":["import type {\n FocusEventHandler,\n KeyboardEvent,\n KeyboardEventHandler,\n LiHTMLAttributes,\n ElementType,\n MouseEvent,\n MouseEventHandler,\n PointerEvent,\n PointerEventHandler,\n} from 'react';\nimport { forwardRef, useEffect, useId, useRef } from 'react';\n\nimport { useMenuContext, useMenuListContext } from './context';\nimport { MENU_SUBMENU_TRIGGER_ATTR } from './scope';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { wrapEvent } from '../utils';\n\nexport interface MenuSubmenuTriggerProps\n extends LiHTMLAttributes<HTMLLIElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n disabled?: boolean;\n}\n\nexport const MenuSubmenuTrigger = forwardRef<any, MenuSubmenuTriggerProps>(\n function MenuSubmenuTrigger(props, forwardedRef) {\n const {\n as: Comp = 'li',\n innerAs,\n disabled,\n onClick,\n onFocus,\n onKeyDown,\n onMouseMove,\n onPointerUp,\n ...otherProps\n } = props;\n const {\n buttonRef,\n menuListIdRef,\n open,\n onChange,\n openWithArrowKeyRef,\n } = useMenuContext();\n const { navigationItem, onNavigate } = useMenuListContext();\n const ref = useRef<HTMLLIElement | null>(null);\n const itemId = useId();\n\n const isActive = ref.current && ref.current === navigationItem;\n\n const setTrigger = () => {\n if (ref.current) {\n buttonRef.current = ref.current;\n }\n };\n\n const createMenuTriggerEvent = () =>\n ({\n // This close path is only used when roving focus leaves the trigger.\n // Internal state transitions only need currentTarget/target plus\n // preventDefault/defaultPrevented for wrapEvent compatibility.\n currentTarget: ref.current,\n target: ref.current,\n preventDefault() {},\n defaultPrevented: false,\n }) as unknown as Parameters<typeof onChange>[0];\n\n const openSubmenu = (\n e:\n | MouseEvent<HTMLLIElement>\n | KeyboardEvent<HTMLLIElement>\n | PointerEvent<HTMLLIElement>,\n focusFirstItem = false\n ) => {\n if (disabled || !ref.current) {\n return;\n }\n setTrigger();\n onNavigate && onNavigate(ref.current);\n if (focusFirstItem) {\n openWithArrowKeyRef.current = 'ArrowDown';\n }\n onChange(e, true);\n };\n\n useEffect(() => {\n if (!open || !ref.current) {\n return;\n }\n if (navigationItem && navigationItem !== ref.current) {\n onChange(createMenuTriggerEvent(), false);\n }\n }, [navigationItem, onChange, open]);\n\n const handleClick = (e: MouseEvent<HTMLLIElement>) => {\n openSubmenu(e);\n e.preventDefault();\n };\n\n const handleFocus: FocusEventHandler<HTMLLIElement> = () => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n setTrigger();\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n switch (e.key) {\n case ' ':\n case 'Enter':\n openSubmenu(e, true);\n e.preventDefault();\n break;\n case 'ArrowRight':\n if (!open) {\n openSubmenu(e, true);\n e.preventDefault();\n }\n break;\n }\n };\n\n const handleMouseMove: MouseEventHandler<HTMLLIElement> = (e) => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n if (!disabled && !open) {\n openSubmenu(e);\n } else {\n setTrigger();\n }\n };\n\n const handlePointerUp: PointerEventHandler<HTMLLIElement> = (e) => {\n if (e.pointerType === 'touch') {\n openSubmenu(e);\n e.preventDefault();\n }\n };\n\n return (\n <Comp\n ref={assignMultipleRefs(ref, forwardedRef)}\n as={innerAs}\n id={disabled ? undefined : itemId}\n {...{ [MENU_SUBMENU_TRIGGER_ATTR]: '' }}\n data-menu-submenu-trigger=\"\"\n data-highlighted={isActive ? '' : undefined}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-controls={menuListIdRef.current}\n aria-expanded={open ? true : undefined}\n onClick={wrapEvent(onClick, handleClick)}\n tabIndex={disabled ? -1 : 0}\n onFocus={wrapEvent(onFocus, handleFocus)}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onMouseMove={wrapEvent(onMouseMove, handleMouseMove)}\n onPointerUp={wrapEvent(onPointerUp, handlePointerUp)}\n data-disabled={disabled ? '' : undefined}\n aria-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...otherProps}\n />\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
@@ -1,22 +1,32 @@
1
1
  import type { OffsetsFunction } from '@popperjs/core/lib/modifiers/offset';
2
- import type { Dispatch, KeyboardEvent, MouseEvent, MutableRefObject, PointerEvent, SetStateAction } from 'react';
2
+ import type { Dispatch, KeyboardEvent, MouseEvent, MutableRefObject, PointerEvent as ReactPointerEvent, SetStateAction } from 'react';
3
+ import type { MenuBarContextProps } from '../MenuBar/context';
3
4
  export type ItemObject = {
4
5
  text: string;
5
6
  value: any;
6
7
  id: string | undefined;
7
8
  };
9
+ export type MenuTriggerEvent = KeyboardEvent<any> | MouseEvent<any> | ReactPointerEvent<any> | PointerEvent;
8
10
  export interface MenuContextProps {
9
11
  buttonRef: MutableRefObject<HTMLElement | null>;
10
12
  menuListIdRef: MutableRefObject<undefined | string>;
11
13
  openWithArrowKeyRef: MutableRefObject<string | null>;
12
- onChange: (e: KeyboardEvent<HTMLElement> | MouseEvent<HTMLElement> | PointerEvent<HTMLElement>, isOpen: boolean) => void;
14
+ onChange: (e: MenuTriggerEvent, isOpen: boolean) => void;
13
15
  open: boolean;
14
16
  offsetFn: OffsetsFunction | undefined;
15
17
  setOffsetFn: Dispatch<SetStateAction<OffsetsFunction | undefined>>;
16
18
  isContextMenu: MutableRefObject<boolean>;
19
+ parentMenu: MenuContextProps | null;
20
+ menuBar: MenuBarContextProps | null;
21
+ menuBarMenuId: string | null;
22
+ closeMenu: (e: MenuTriggerEvent, options?: {
23
+ focusTrigger?: boolean;
24
+ }) => void;
25
+ closeAllMenus: (e: MenuTriggerEvent) => void;
17
26
  }
18
- export declare const MenuProvider: import("react").Provider<MenuContextProps>;
27
+ export declare const MenuProvider: import("react").Provider<MenuContextProps | null>;
19
28
  export declare const useMenuContext: () => MenuContextProps;
29
+ export declare const useOptionalMenuContext: () => MenuContextProps | null;
20
30
  export interface MenuListContextProps {
21
31
  navigationItem: HTMLElement | undefined;
22
32
  onNavigate: undefined | ((idx: HTMLElement) => void);
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/Menu/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAG9E,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,gBAAgB,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IACpD,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrD,QAAQ,EAAE,CACR,CAAC,EACG,aAAa,CAAC,WAAW,CAAC,GAC1B,UAAU,CAAC,WAAW,CAAC,GACvB,YAAY,CAAC,WAAW,CAAC,EAC7B,MAAM,EAAE,OAAO,KACZ,IAAI,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;IACtC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC;IACnE,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAC1C;AAGD,eAAO,MAAkB,YAAY,4CAAgB,CAAC;AACtD,eAAO,MAAM,cAAc,wBAAgC,CAAC;AAG5D,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC;CACtD;AAGD,eAAO,MAAM,gBAAgB,gDAA2B,CAAC;AACzD,eAAO,MAAM,kBAAkB,4BAAoC,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/Menu/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,IAAI,iBAAiB,EACjC,cAAc,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GACxB,aAAa,CAAC,GAAG,CAAC,GAClB,UAAU,CAAC,GAAG,CAAC,GACf,iBAAiB,CAAC,GAAG,CAAC,GACtB,YAAY,CAAC;AAGjB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,gBAAgB,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IACpD,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;IACtC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC;IACnE,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,CACT,CAAC,EAAE,gBAAgB,EACnB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KACjC,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C;AAGD,eAAO,MAAkB,YAAY,mDAAgB,CAAC;AACtD,eAAO,MAAM,cAAc,QAAoC,gBAAgB,CAAC;AAChF,eAAO,MAAM,sBAAsB,+BAAgC,CAAC;AAGpE,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC;CACtD;AAGD,eAAO,MAAM,gBAAgB,gDAA2B,CAAC;AACzD,eAAO,MAAM,kBAAkB,4BAAoC,CAAC"}
@@ -7,6 +7,7 @@ export const {
7
7
  Provider: MenuProvider
8
8
  } = menuContext;
9
9
  export const useMenuContext = () => useContext(menuContext);
10
+ export const useOptionalMenuContext = () => useContext(menuContext);
10
11
 
11
12
  // MenuList
12
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["createContext","useContext","menuContext","Provider","MenuProvider","useMenuContext","menuListContext","MenuListProvider","useMenuListContext"],"sources":["../../../src/Menu/context.ts"],"sourcesContent":["import type { OffsetsFunction } from '@popperjs/core/lib/modifiers/offset';\nimport type {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n PointerEvent,\n SetStateAction,\n} from 'react';\nimport { createContext, useContext } from 'react';\n\nexport type ItemObject = { text: string; value: any; id: string | undefined };\n\n// MenuRoot\nexport interface MenuContextProps {\n buttonRef: MutableRefObject<HTMLElement | null>;\n menuListIdRef: MutableRefObject<undefined | string>;\n openWithArrowKeyRef: MutableRefObject<string | null>;\n onChange: (\n e:\n | KeyboardEvent<HTMLElement>\n | MouseEvent<HTMLElement>\n | PointerEvent<HTMLElement>,\n isOpen: boolean\n ) => void;\n open: boolean;\n offsetFn: OffsetsFunction | undefined;\n setOffsetFn: Dispatch<SetStateAction<OffsetsFunction | undefined>>;\n isContextMenu: MutableRefObject<boolean>;\n}\n\nconst menuContext = createContext<MenuContextProps>(null as any);\nexport const { Provider: MenuProvider } = menuContext;\nexport const useMenuContext = () => useContext(menuContext);\n\n// MenuList\nexport interface MenuListContextProps {\n navigationItem: HTMLElement | undefined;\n onNavigate: undefined | ((idx: HTMLElement) => void);\n}\n\nconst menuListContext = createContext<MenuListContextProps>(null as any);\nexport const MenuListProvider = menuListContext.Provider;\nexport const useMenuListContext = () => useContext(menuListContext);\n"],"mappings":"AASA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;;AAkBA,MAAMC,WAAW,gBAAGF,aAAa,CAAmB,IAAW,CAAC;AAChE,OAAO,MAAM;EAAEG,QAAQ,EAAEC;AAAa,CAAC,GAAGF,WAAW;AACrD,OAAO,MAAMG,cAAc,GAAGA,CAAA,KAAMJ,UAAU,CAACC,WAAW,CAAC;;AAE3D;;AAMA,MAAMI,eAAe,gBAAGN,aAAa,CAAuB,IAAW,CAAC;AACxE,OAAO,MAAMO,gBAAgB,GAAGD,eAAe,CAACH,QAAQ;AACxD,OAAO,MAAMK,kBAAkB,GAAGA,CAAA,KAAMP,UAAU,CAACK,eAAe,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":["createContext","useContext","menuContext","Provider","MenuProvider","useMenuContext","useOptionalMenuContext","menuListContext","MenuListProvider","useMenuListContext"],"sources":["../../../src/Menu/context.ts"],"sourcesContent":["import type { OffsetsFunction } from '@popperjs/core/lib/modifiers/offset';\nimport type {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n PointerEvent as ReactPointerEvent,\n SetStateAction,\n} from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { MenuBarContextProps } from '../MenuBar/context';\n\nexport type ItemObject = { text: string; value: any; id: string | undefined };\nexport type MenuTriggerEvent =\n | KeyboardEvent<any>\n | MouseEvent<any>\n | ReactPointerEvent<any>\n | PointerEvent;\n\n// MenuRoot\nexport interface MenuContextProps {\n buttonRef: MutableRefObject<HTMLElement | null>;\n menuListIdRef: MutableRefObject<undefined | string>;\n openWithArrowKeyRef: MutableRefObject<string | null>;\n onChange: (e: MenuTriggerEvent, isOpen: boolean) => void;\n open: boolean;\n offsetFn: OffsetsFunction | undefined;\n setOffsetFn: Dispatch<SetStateAction<OffsetsFunction | undefined>>;\n isContextMenu: MutableRefObject<boolean>;\n parentMenu: MenuContextProps | null;\n menuBar: MenuBarContextProps | null;\n menuBarMenuId: string | null;\n closeMenu: (\n e: MenuTriggerEvent,\n options?: { focusTrigger?: boolean }\n ) => void;\n closeAllMenus: (e: MenuTriggerEvent) => void;\n}\n\nconst menuContext = createContext<MenuContextProps | null>(null);\nexport const { Provider: MenuProvider } = menuContext;\nexport const useMenuContext = () => useContext(menuContext) as MenuContextProps;\nexport const useOptionalMenuContext = () => useContext(menuContext);\n\n// MenuList\nexport interface MenuListContextProps {\n navigationItem: HTMLElement | undefined;\n onNavigate: undefined | ((idx: HTMLElement) => void);\n}\n\nconst menuListContext = createContext<MenuListContextProps>(null as any);\nexport const MenuListProvider = menuListContext.Provider;\nexport const useMenuListContext = () => useContext(menuListContext);\n"],"mappings":"AASA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAWjD;;AAoBA,MAAMC,WAAW,gBAAGF,aAAa,CAA0B,IAAI,CAAC;AAChE,OAAO,MAAM;EAAEG,QAAQ,EAAEC;AAAa,CAAC,GAAGF,WAAW;AACrD,OAAO,MAAMG,cAAc,GAAGA,CAAA,KAAMJ,UAAU,CAACC,WAAW,CAAqB;AAC/E,OAAO,MAAMI,sBAAsB,GAAGA,CAAA,KAAML,UAAU,CAACC,WAAW,CAAC;;AAEnE;;AAMA,MAAMK,eAAe,gBAAGP,aAAa,CAAuB,IAAW,CAAC;AACxE,OAAO,MAAMQ,gBAAgB,GAAGD,eAAe,CAACJ,QAAQ;AACxD,OAAO,MAAMM,kBAAkB,GAAGA,CAAA,KAAMR,UAAU,CAACM,eAAe,CAAC","ignoreList":[]}
@@ -4,4 +4,7 @@ export * from './ContextMenuTrigger';
4
4
  export * from './MenuItem';
5
5
  export * from './MenuList';
6
6
  export * from './MenuPopover';
7
+ export { Menu as MenuSubmenu } from './Menu';
8
+ export type { MenuProps as MenuSubmenuProps } from './Menu';
9
+ export * from './MenuSubmenuTrigger';
7
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7C,YAAY,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC5D,cAAc,sBAAsB,CAAC"}
@@ -4,4 +4,6 @@ export * from './ContextMenuTrigger';
4
4
  export * from './MenuItem';
5
5
  export * from './MenuList';
6
6
  export * from './MenuPopover';
7
+ export { Menu as MenuSubmenu } from './Menu';
8
+ export * from './MenuSubmenuTrigger';
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/Menu/index.ts"],"sourcesContent":["export * from './Menu';\nexport * from './MenuButton';\nexport * from './ContextMenuTrigger';\nexport * from './MenuItem';\nexport * from './MenuList';\nexport * from './MenuPopover';\n"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,cAAc;AAC5B,cAAc,sBAAsB;AACpC,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Menu","MenuSubmenu"],"sources":["../../../src/Menu/index.ts"],"sourcesContent":["export * from './Menu';\nexport * from './MenuButton';\nexport * from './ContextMenuTrigger';\nexport * from './MenuItem';\nexport * from './MenuList';\nexport * from './MenuPopover';\nexport { Menu as MenuSubmenu } from './Menu';\nexport type { MenuProps as MenuSubmenuProps } from './Menu';\nexport * from './MenuSubmenuTrigger';\n"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,cAAc;AAC5B,cAAc,sBAAsB;AACpC,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,eAAe;AAC7B,SAASA,IAAI,IAAIC,WAAW,QAAQ,QAAQ;AAE5C,cAAc,sBAAsB","ignoreList":[]}