@fluentui/react-menu 9.19.5 → 9.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/CHANGELOG.md +51 -10
  2. package/dist/index.d.ts +13 -13
  3. package/lib/components/Menu/Menu.js +1 -0
  4. package/lib/components/Menu/Menu.js.map +1 -1
  5. package/lib/components/Menu/Menu.types.js.map +1 -1
  6. package/lib/components/Menu/useMenu.js +1 -0
  7. package/lib/components/Menu/useMenu.js.map +1 -1
  8. package/lib/components/MenuDivider/MenuDivider.js +1 -0
  9. package/lib/components/MenuDivider/MenuDivider.js.map +1 -1
  10. package/lib/components/MenuDivider/renderMenuDivider.js.map +1 -1
  11. package/lib/components/MenuDivider/useMenuDividerStyles.styles.js +2 -0
  12. package/lib/components/MenuDivider/useMenuDividerStyles.styles.js.map +1 -1
  13. package/lib/components/MenuDivider/useMenuDividerStyles.styles.raw.js +1 -0
  14. package/lib/components/MenuDivider/useMenuDividerStyles.styles.raw.js.map +1 -1
  15. package/lib/components/MenuGroup/MenuGroup.js +1 -0
  16. package/lib/components/MenuGroup/MenuGroup.js.map +1 -1
  17. package/lib/components/MenuGroup/renderMenuGroup.js.map +1 -1
  18. package/lib/components/MenuGroup/useMenuGroupContextValues.js +1 -0
  19. package/lib/components/MenuGroup/useMenuGroupContextValues.js.map +1 -1
  20. package/lib/components/MenuGroupHeader/MenuGroupHeader.js +1 -0
  21. package/lib/components/MenuGroupHeader/MenuGroupHeader.js.map +1 -1
  22. package/lib/components/MenuGroupHeader/renderMenuGroupHeader.js.map +1 -1
  23. package/lib/components/MenuGroupHeader/useMenuGroupHeader.js +1 -0
  24. package/lib/components/MenuGroupHeader/useMenuGroupHeader.js.map +1 -1
  25. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js +2 -0
  26. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js.map +1 -1
  27. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js +1 -0
  28. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js.map +1 -1
  29. package/lib/components/MenuItem/MenuItem.js +1 -0
  30. package/lib/components/MenuItem/MenuItem.js.map +1 -1
  31. package/lib/components/MenuItem/renderMenuItem.js.map +1 -1
  32. package/lib/components/MenuItem/useCharacterSearch.js +1 -0
  33. package/lib/components/MenuItem/useCharacterSearch.js.map +1 -1
  34. package/lib/components/MenuItem/useMenuItem.js +13 -1
  35. package/lib/components/MenuItem/useMenuItem.js.map +1 -1
  36. package/lib/components/MenuItem/useMenuItemStyles.styles.js +2 -0
  37. package/lib/components/MenuItem/useMenuItemStyles.styles.js.map +1 -1
  38. package/lib/components/MenuItem/useMenuItemStyles.styles.raw.js +1 -0
  39. package/lib/components/MenuItem/useMenuItemStyles.styles.raw.js.map +1 -1
  40. package/lib/components/MenuItemCheckbox/MenuItemCheckbox.js +1 -0
  41. package/lib/components/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
  42. package/lib/components/MenuItemCheckbox/renderMenuItemCheckbox.js.map +1 -1
  43. package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js +1 -0
  44. package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
  45. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js +2 -0
  46. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js.map +1 -1
  47. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js +1 -0
  48. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js.map +1 -1
  49. package/lib/components/MenuItemLink/MenuItemLink.js +1 -0
  50. package/lib/components/MenuItemLink/MenuItemLink.js.map +1 -1
  51. package/lib/components/MenuItemLink/renderMenuItemLink.js.map +1 -1
  52. package/lib/components/MenuItemLink/useMenuItemLink.js +1 -0
  53. package/lib/components/MenuItemLink/useMenuItemLink.js.map +1 -1
  54. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.js +2 -0
  55. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.js.map +1 -1
  56. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js +1 -0
  57. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js.map +1 -1
  58. package/lib/components/MenuItemRadio/MenuItemRadio.js +1 -0
  59. package/lib/components/MenuItemRadio/MenuItemRadio.js.map +1 -1
  60. package/lib/components/MenuItemRadio/renderMenuItemRadio.js.map +1 -1
  61. package/lib/components/MenuItemRadio/useMenuItemRadio.js +1 -0
  62. package/lib/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  63. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.js +2 -0
  64. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.js.map +1 -1
  65. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js +1 -0
  66. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js.map +1 -1
  67. package/lib/components/MenuItemSwitch/MenuItemSwitch.js +1 -0
  68. package/lib/components/MenuItemSwitch/MenuItemSwitch.js.map +1 -1
  69. package/lib/components/MenuItemSwitch/renderMenuItemSwitch.js.map +1 -1
  70. package/lib/components/MenuItemSwitch/useMenuItemSwitch.js +1 -0
  71. package/lib/components/MenuItemSwitch/useMenuItemSwitch.js.map +1 -1
  72. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js +2 -0
  73. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js.map +1 -1
  74. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js +1 -0
  75. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js.map +1 -1
  76. package/lib/components/MenuList/MenuList.js +1 -0
  77. package/lib/components/MenuList/MenuList.js.map +1 -1
  78. package/lib/components/MenuList/renderMenuList.js.map +1 -1
  79. package/lib/components/MenuList/useMenuList.js +4 -1
  80. package/lib/components/MenuList/useMenuList.js.map +1 -1
  81. package/lib/components/MenuList/useMenuListStyles.styles.js +2 -0
  82. package/lib/components/MenuList/useMenuListStyles.styles.js.map +1 -1
  83. package/lib/components/MenuList/useMenuListStyles.styles.raw.js +1 -0
  84. package/lib/components/MenuList/useMenuListStyles.styles.raw.js.map +1 -1
  85. package/lib/components/MenuPopover/MenuPopover.js +1 -0
  86. package/lib/components/MenuPopover/MenuPopover.js.map +1 -1
  87. package/lib/components/MenuPopover/renderMenuPopover.js.map +1 -1
  88. package/lib/components/MenuPopover/useMenuPopover.js +1 -0
  89. package/lib/components/MenuPopover/useMenuPopover.js.map +1 -1
  90. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.js +2 -0
  91. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.js.map +1 -1
  92. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.raw.js +1 -0
  93. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.raw.js.map +1 -1
  94. package/lib/components/MenuSplitGroup/MenuSplitGroup.js +1 -0
  95. package/lib/components/MenuSplitGroup/MenuSplitGroup.js.map +1 -1
  96. package/lib/components/MenuSplitGroup/renderMenuSplitGroup.js.map +1 -1
  97. package/lib/components/MenuSplitGroup/useMenuSplitGroup.js +2 -1
  98. package/lib/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
  99. package/lib/components/MenuSplitGroup/useMenuSplitGroupContextValues.js +1 -0
  100. package/lib/components/MenuSplitGroup/useMenuSplitGroupContextValues.js.map +1 -1
  101. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js +2 -0
  102. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js.map +1 -1
  103. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js +1 -0
  104. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js.map +1 -1
  105. package/lib/components/MenuTrigger/MenuTrigger.js +1 -0
  106. package/lib/components/MenuTrigger/MenuTrigger.js.map +1 -1
  107. package/lib/components/MenuTrigger/useMenuTrigger.js +1 -0
  108. package/lib/components/MenuTrigger/useMenuTrigger.js.map +1 -1
  109. package/lib/contexts/menuContext.js +1 -0
  110. package/lib/contexts/menuContext.js.map +1 -1
  111. package/lib/contexts/menuGroupContext.js +1 -0
  112. package/lib/contexts/menuGroupContext.js.map +1 -1
  113. package/lib/contexts/menuListContext.js +1 -0
  114. package/lib/contexts/menuListContext.js.map +1 -1
  115. package/lib/contexts/menuSplitGroupContext.js +1 -0
  116. package/lib/contexts/menuSplitGroupContext.js.map +1 -1
  117. package/lib/contexts/menuTriggerContext.js +1 -0
  118. package/lib/contexts/menuTriggerContext.js.map +1 -1
  119. package/lib/selectable/useCheckmarkStyles.styles.js +2 -0
  120. package/lib/selectable/useCheckmarkStyles.styles.js.map +1 -1
  121. package/lib/selectable/useCheckmarkStyles.styles.raw.js +1 -0
  122. package/lib/selectable/useCheckmarkStyles.styles.raw.js.map +1 -1
  123. package/lib/utils/index.js +1 -0
  124. package/lib/utils/index.js.map +1 -1
  125. package/lib/utils/useIsSubmenu.js +1 -0
  126. package/lib/utils/useIsSubmenu.js.map +1 -1
  127. package/lib/utils/useOnMenuEnter.js +1 -0
  128. package/lib/utils/useOnMenuEnter.js.map +1 -1
  129. package/lib/utils/useOnMenuSafeZoneTimeout.js +1 -0
  130. package/lib/utils/useOnMenuSafeZoneTimeout.js.map +1 -1
  131. package/lib/utils/useValidateNesting.js +80 -0
  132. package/lib/utils/useValidateNesting.js.map +1 -0
  133. package/lib-commonjs/components/Menu/Menu.js +1 -0
  134. package/lib-commonjs/components/Menu/Menu.js.map +1 -1
  135. package/lib-commonjs/components/Menu/Menu.types.js.map +1 -1
  136. package/lib-commonjs/components/Menu/useMenu.js +1 -0
  137. package/lib-commonjs/components/Menu/useMenu.js.map +1 -1
  138. package/lib-commonjs/components/MenuDivider/MenuDivider.js +1 -0
  139. package/lib-commonjs/components/MenuDivider/MenuDivider.js.map +1 -1
  140. package/lib-commonjs/components/MenuDivider/renderMenuDivider.js.map +1 -1
  141. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.js +1 -0
  142. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.js.map +1 -1
  143. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.raw.js +1 -0
  144. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.raw.js.map +1 -1
  145. package/lib-commonjs/components/MenuGroup/MenuGroup.js +1 -0
  146. package/lib-commonjs/components/MenuGroup/MenuGroup.js.map +1 -1
  147. package/lib-commonjs/components/MenuGroup/renderMenuGroup.js.map +1 -1
  148. package/lib-commonjs/components/MenuGroup/useMenuGroupContextValues.js +1 -0
  149. package/lib-commonjs/components/MenuGroup/useMenuGroupContextValues.js.map +1 -1
  150. package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.js +1 -0
  151. package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.js.map +1 -1
  152. package/lib-commonjs/components/MenuGroupHeader/renderMenuGroupHeader.js.map +1 -1
  153. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeader.js +1 -0
  154. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeader.js.map +1 -1
  155. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js +1 -0
  156. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js.map +1 -1
  157. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js +1 -0
  158. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js.map +1 -1
  159. package/lib-commonjs/components/MenuItem/MenuItem.js +1 -0
  160. package/lib-commonjs/components/MenuItem/MenuItem.js.map +1 -1
  161. package/lib-commonjs/components/MenuItem/renderMenuItem.js.map +1 -1
  162. package/lib-commonjs/components/MenuItem/useCharacterSearch.js +1 -0
  163. package/lib-commonjs/components/MenuItem/useCharacterSearch.js.map +1 -1
  164. package/lib-commonjs/components/MenuItem/useMenuItem.js +13 -1
  165. package/lib-commonjs/components/MenuItem/useMenuItem.js.map +1 -1
  166. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.js +1 -0
  167. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.js.map +1 -1
  168. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.raw.js +1 -0
  169. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.raw.js.map +1 -1
  170. package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.js +1 -0
  171. package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
  172. package/lib-commonjs/components/MenuItemCheckbox/renderMenuItemCheckbox.js.map +1 -1
  173. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js +1 -0
  174. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
  175. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js +1 -0
  176. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js.map +1 -1
  177. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js +1 -0
  178. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js.map +1 -1
  179. package/lib-commonjs/components/MenuItemLink/MenuItemLink.js +1 -0
  180. package/lib-commonjs/components/MenuItemLink/MenuItemLink.js.map +1 -1
  181. package/lib-commonjs/components/MenuItemLink/renderMenuItemLink.js.map +1 -1
  182. package/lib-commonjs/components/MenuItemLink/useMenuItemLink.js +1 -0
  183. package/lib-commonjs/components/MenuItemLink/useMenuItemLink.js.map +1 -1
  184. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.js +1 -0
  185. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.js.map +1 -1
  186. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js +1 -0
  187. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js.map +1 -1
  188. package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.js +1 -0
  189. package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.js.map +1 -1
  190. package/lib-commonjs/components/MenuItemRadio/renderMenuItemRadio.js.map +1 -1
  191. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js +1 -0
  192. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  193. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.js +1 -0
  194. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.js.map +1 -1
  195. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js +1 -0
  196. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js.map +1 -1
  197. package/lib-commonjs/components/MenuItemSwitch/MenuItemSwitch.js +1 -0
  198. package/lib-commonjs/components/MenuItemSwitch/MenuItemSwitch.js.map +1 -1
  199. package/lib-commonjs/components/MenuItemSwitch/renderMenuItemSwitch.js.map +1 -1
  200. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitch.js +1 -0
  201. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitch.js.map +1 -1
  202. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js +1 -0
  203. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js.map +1 -1
  204. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js +1 -0
  205. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js.map +1 -1
  206. package/lib-commonjs/components/MenuList/MenuList.js +1 -0
  207. package/lib-commonjs/components/MenuList/MenuList.js.map +1 -1
  208. package/lib-commonjs/components/MenuList/renderMenuList.js.map +1 -1
  209. package/lib-commonjs/components/MenuList/useMenuList.js +4 -1
  210. package/lib-commonjs/components/MenuList/useMenuList.js.map +1 -1
  211. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.js +1 -0
  212. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.js.map +1 -1
  213. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.raw.js +1 -0
  214. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.raw.js.map +1 -1
  215. package/lib-commonjs/components/MenuPopover/MenuPopover.js +1 -0
  216. package/lib-commonjs/components/MenuPopover/MenuPopover.js.map +1 -1
  217. package/lib-commonjs/components/MenuPopover/renderMenuPopover.js.map +1 -1
  218. package/lib-commonjs/components/MenuPopover/useMenuPopover.js +1 -0
  219. package/lib-commonjs/components/MenuPopover/useMenuPopover.js.map +1 -1
  220. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.js +1 -0
  221. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.js.map +1 -1
  222. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.raw.js +1 -0
  223. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.raw.js.map +1 -1
  224. package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.js +1 -0
  225. package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.js.map +1 -1
  226. package/lib-commonjs/components/MenuSplitGroup/renderMenuSplitGroup.js.map +1 -1
  227. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js +2 -1
  228. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
  229. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupContextValues.js +1 -0
  230. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupContextValues.js.map +1 -1
  231. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js +1 -0
  232. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js.map +1 -1
  233. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js +1 -0
  234. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js.map +1 -1
  235. package/lib-commonjs/components/MenuTrigger/MenuTrigger.js +1 -0
  236. package/lib-commonjs/components/MenuTrigger/MenuTrigger.js.map +1 -1
  237. package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js +1 -0
  238. package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js.map +1 -1
  239. package/lib-commonjs/contexts/menuContext.js +1 -0
  240. package/lib-commonjs/contexts/menuContext.js.map +1 -1
  241. package/lib-commonjs/contexts/menuGroupContext.js +1 -0
  242. package/lib-commonjs/contexts/menuGroupContext.js.map +1 -1
  243. package/lib-commonjs/contexts/menuListContext.js +1 -0
  244. package/lib-commonjs/contexts/menuListContext.js.map +1 -1
  245. package/lib-commonjs/contexts/menuSplitGroupContext.js +1 -0
  246. package/lib-commonjs/contexts/menuSplitGroupContext.js.map +1 -1
  247. package/lib-commonjs/contexts/menuTriggerContext.js +1 -0
  248. package/lib-commonjs/contexts/menuTriggerContext.js.map +1 -1
  249. package/lib-commonjs/selectable/useCheckmarkStyles.styles.js +1 -0
  250. package/lib-commonjs/selectable/useCheckmarkStyles.styles.js.map +1 -1
  251. package/lib-commonjs/selectable/useCheckmarkStyles.styles.raw.js +1 -0
  252. package/lib-commonjs/selectable/useCheckmarkStyles.styles.raw.js.map +1 -1
  253. package/lib-commonjs/utils/index.js +4 -0
  254. package/lib-commonjs/utils/index.js.map +1 -1
  255. package/lib-commonjs/utils/useIsSubmenu.js +1 -0
  256. package/lib-commonjs/utils/useIsSubmenu.js.map +1 -1
  257. package/lib-commonjs/utils/useOnMenuEnter.js +1 -0
  258. package/lib-commonjs/utils/useOnMenuEnter.js.map +1 -1
  259. package/lib-commonjs/utils/useOnMenuSafeZoneTimeout.js +1 -0
  260. package/lib-commonjs/utils/useOnMenuSafeZoneTimeout.js.map +1 -1
  261. package/lib-commonjs/utils/useValidateNesting.js +91 -0
  262. package/lib-commonjs/utils/useValidateNesting.js.map +1 -0
  263. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/menuGroupContext.ts"],"sourcesContent":["import * as React from 'react';\n\nconst MenuGroupContext = React.createContext<MenuGroupContextValue | undefined>(\n undefined,\n) as React.Context<MenuGroupContextValue>;\n\nconst menuGroupContextDefaultValue: MenuGroupContextValue = {\n headerId: '',\n};\n\n/**\n * Context used to guarantee correct aria-relationship between header\n * and group information\n */\nexport type MenuGroupContextValue = {\n /**\n * Element id applied to the `MenuGroupHeader` component\n */\n headerId: string;\n};\n\nexport const MenuGroupContextProvider = MenuGroupContext.Provider;\nexport const useMenuGroupContext_unstable = () => React.useContext(MenuGroupContext) ?? menuGroupContextDefaultValue;\n"],"names":["React","MenuGroupContext","createContext","undefined","menuGroupContextDefaultValue","headerId","MenuGroupContextProvider","Provider","useMenuGroupContext_unstable","useContext"],"mappings":";;;;;;;;;;;4BAqBaM;;;gCACAE;;;;;iEAtBU,QAAQ;AAE/B,MAAMP,iCAAmBD,OAAME,aAAa,CAC1CC;AAGF,MAAMC,+BAAsD;IAC1DC,UAAU;AACZ;AAaO,MAAMC,2BAA2BL,iBAAiBM,QAAQ,CAAC;AAC3D,MAAMC,+BAA+B;QAAMR;WAAAA,CAAAA,oBAAAA,OAAMS,UAAU,CAACR,iBAAAA,MAAAA,QAAjBD,sBAAAA,KAAAA,IAAAA,oBAAsCI;EAA6B"}
1
+ {"version":3,"sources":["../src/contexts/menuGroupContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nconst MenuGroupContext = React.createContext<MenuGroupContextValue | undefined>(\n undefined,\n) as React.Context<MenuGroupContextValue>;\n\nconst menuGroupContextDefaultValue: MenuGroupContextValue = {\n headerId: '',\n};\n\n/**\n * Context used to guarantee correct aria-relationship between header\n * and group information\n */\nexport type MenuGroupContextValue = {\n /**\n * Element id applied to the `MenuGroupHeader` component\n */\n headerId: string;\n};\n\nexport const MenuGroupContextProvider = MenuGroupContext.Provider;\nexport const useMenuGroupContext_unstable = (): MenuGroupContextValue =>\n React.useContext(MenuGroupContext) ?? menuGroupContextDefaultValue;\n"],"names":["React","MenuGroupContext","createContext","undefined","menuGroupContextDefaultValue","headerId","MenuGroupContextProvider","Provider","useMenuGroupContext_unstable","useContext"],"mappings":"AAAA;;;;;;;;;;;;4BAuBaM;;;gCACAE;;;;;iEAtBU,QAAQ;AAE/B,MAAMP,iCAAmBD,OAAME,aAAa,CAC1CC;AAGF,MAAMC,+BAAsD;IAC1DC,UAAU;AACZ;AAaO,MAAMC,2BAA2BL,iBAAiBM,QAAQ,CAAC;AAC3D,MAAMC,+BAA+B;QAC1CR;WAAAA,CAAAA,oBAAAA,OAAMS,UAAU,CAACR,iBAAAA,MAAAA,QAAjBD,sBAAAA,KAAAA,IAAAA,oBAAsCI;EAA6B"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/menuListContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport type { ContextSelector, Context } from '@fluentui/react-context-selector';\nimport type { SelectableHandler } from '../selectable/index';\nimport type { MenuCheckedValueChangeData, MenuCheckedValueChangeEvent, MenuListProps } from '../components/index';\n\nexport const MenuListContext: Context<MenuListContextValue> = createContext<MenuListContextValue | undefined>(\n undefined,\n) as Context<MenuListContextValue>;\n\nconst menuListContextDefaultValue: MenuListContextValue = {\n checkedValues: {},\n setFocusByFirstCharacter: () => null,\n toggleCheckbox: () => null,\n selectRadio: () => null,\n hasIcons: false,\n hasCheckmarks: false,\n};\n\n/**\n * Context shared between MenuList and its children components\n */\nexport type MenuListContextValue = Pick<MenuListProps, 'checkedValues' | 'hasIcons' | 'hasCheckmarks'> & {\n setFocusByFirstCharacter?: (e: React.KeyboardEvent<HTMLElement>, itemEl: HTMLElement) => void;\n toggleCheckbox?: SelectableHandler;\n selectRadio?: SelectableHandler;\n /**\n * Callback when checked items change for value with a name\n *\n * @param event - React's original SyntheticEvent\n * @param data - A data object with relevant information\n *\n * @deprecated this property is not used internally anymore,\n * the signature remains just to avoid breaking changes\n */\n onCheckedValueChange?: (e: MenuCheckedValueChangeEvent, data: MenuCheckedValueChangeData) => void;\n};\n\nexport const MenuListProvider = MenuListContext.Provider;\n\nexport const useMenuListContext_unstable = <T,>(selector: ContextSelector<MenuListContextValue, T>) =>\n useContextSelector(MenuListContext, (ctx = menuListContextDefaultValue) => selector(ctx));\n"],"names":["React","createContext","useContextSelector","MenuListContext","undefined","menuListContextDefaultValue","checkedValues","setFocusByFirstCharacter","toggleCheckbox","selectRadio","hasIcons","hasCheckmarks","MenuListProvider","Provider","useMenuListContext_unstable","selector","ctx"],"mappings":";;;;;;;;;;;IAMaG,eAAAA;;;oBAgCAS;;;+BAEAE;;;;;iEAxCU,QAAQ;sCACmB,mCAAmC;AAK9E,4BAAuDb,mCAAAA,EAC5DG,WACiC;AAEnC,MAAMC,8BAAoD;IACxDC,eAAe,CAAC;IAChBC,0BAA0B,IAAM;IAChCC,gBAAgB,IAAM;IACtBC,aAAa,IAAM;IACnBC,UAAU;IACVC,eAAe;AACjB;AAqBO,MAAMC,mBAAmBT,gBAAgBU,QAAQ,CAAC;AAElD,MAAMC,8BAA8B,CAAKC,eAC9Cb,wCAAAA,EAAmBC,iBAAiB,CAACa,MAAMX,2BAA2B,GAAKU,SAASC,MAAM"}
1
+ {"version":3,"sources":["../src/contexts/menuListContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport type { ContextSelector, Context } from '@fluentui/react-context-selector';\nimport type { SelectableHandler } from '../selectable/index';\nimport type { MenuCheckedValueChangeData, MenuCheckedValueChangeEvent, MenuListProps } from '../components/index';\n\nexport const MenuListContext: Context<MenuListContextValue> = createContext<MenuListContextValue | undefined>(\n undefined,\n) as Context<MenuListContextValue>;\n\nconst menuListContextDefaultValue: MenuListContextValue = {\n checkedValues: {},\n setFocusByFirstCharacter: () => null,\n toggleCheckbox: () => null,\n selectRadio: () => null,\n hasIcons: false,\n hasCheckmarks: false,\n};\n\n/**\n * Context shared between MenuList and its children components\n */\nexport type MenuListContextValue = Pick<MenuListProps, 'checkedValues' | 'hasIcons' | 'hasCheckmarks'> & {\n setFocusByFirstCharacter?: (e: React.KeyboardEvent<HTMLElement>, itemEl: HTMLElement) => void;\n toggleCheckbox?: SelectableHandler;\n selectRadio?: SelectableHandler;\n /**\n * Callback when checked items change for value with a name\n *\n * @param event - React's original SyntheticEvent\n * @param data - A data object with relevant information\n *\n * @deprecated this property is not used internally anymore,\n * the signature remains just to avoid breaking changes\n */\n onCheckedValueChange?: (e: MenuCheckedValueChangeEvent, data: MenuCheckedValueChangeData) => void;\n};\n\nexport const MenuListProvider = MenuListContext.Provider;\n\nexport const useMenuListContext_unstable = <T,>(selector: ContextSelector<MenuListContextValue, T>): T =>\n useContextSelector(MenuListContext, (ctx = menuListContextDefaultValue) => selector(ctx));\n"],"names":["React","createContext","useContextSelector","MenuListContext","undefined","menuListContextDefaultValue","checkedValues","setFocusByFirstCharacter","toggleCheckbox","selectRadio","hasIcons","hasCheckmarks","MenuListProvider","Provider","useMenuListContext_unstable","selector","ctx"],"mappings":"AAAA;;;;;;;;;;;;mBAQaG;;;oBAgCAS;;;+BAEAE;;;;;iEAxCU,QAAQ;sCACmB,mCAAmC;AAK9E,MAAMX,sBAAiDF,mCAAAA,EAC5DG,WACiC;AAEnC,MAAMC,8BAAoD;IACxDC,eAAe,CAAC;IAChBC,0BAA0B,IAAM;IAChCC,gBAAgB,IAAM;IACtBC,aAAa,IAAM;IACnBC,UAAU;IACVC,eAAe;AACjB;AAqBO,MAAMC,mBAAmBT,gBAAgBU,QAAQ,CAAC;AAElD,MAAMC,8BAA8B,CAAKC,eAC9Cb,wCAAAA,EAAmBC,iBAAiB,CAACa,MAAMX,2BAA2B,GAAKU,SAASC,MAAM"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/menuSplitGroupContext.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type MenuSplitGroupContextValue = {\n setMultiline: (multiline: boolean) => void;\n};\n\n/**\n * Context used communicate with a child menu item that it is a trigger for a submenu\n */\nconst MenuSplitGroupContext = React.createContext<MenuSplitGroupContextValue | undefined>(\n undefined,\n) as React.Context<MenuSplitGroupContextValue>;\n\nexport const menuSplitGroupContextDefaultValue = {\n setMultiline: () => null,\n};\n\nexport const MenuSplitGroupContextProvider = MenuSplitGroupContext.Provider;\nexport const useMenuSplitGroupContext_unstable = () =>\n React.useContext(MenuSplitGroupContext) ?? menuSplitGroupContextDefaultValue;\n\nexport const useIsInMenuSplitGroup = () => {\n const context = useMenuSplitGroupContext_unstable();\n return context !== menuSplitGroupContextDefaultValue;\n};\n"],"names":["React","MenuSplitGroupContext","createContext","undefined","menuSplitGroupContextDefaultValue","setMultiline","MenuSplitGroupContextProvider","Provider","useMenuSplitGroupContext_unstable","useContext","useIsInMenuSplitGroup","context"],"mappings":";;;;;;;;;;;IAiBaM,6BAAAA;;;qCAJAF;;;yBAQAM;;;IAHAF,iCAAAA;;;;;iEAlBU,QAAQ;AAM/B;;CAEC,GACD,MAAMP,sCAAwBD,OAAME,aAAa,CAC/CC;AAGK,MAAMC,oCAAoC;IAC/CC,cAAc,IAAM;AACtB,EAAE;AAEK,sCAAsCJ,sBAAsBM,QAAQ,CAAC;AACrE,0CAA0C;QAC/CP;WAAAA,CAAAA,oBAAAA,OAAMS,UAAU,CAACR,sBAAAA,MAAAA,QAAjBD,sBAAAA,KAAAA,IAAAA,oBAA2CI;EAAkC;AAExE,MAAMM,wBAAwB;IACnC,MAAMC,UAAUH;IAChB,OAAOG,YAAYP;AACrB,EAAE"}
1
+ {"version":3,"sources":["../src/contexts/menuSplitGroupContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nexport type MenuSplitGroupContextValue = {\n setMultiline: (multiline: boolean) => void;\n};\n\n/**\n * Context used communicate with a child menu item that it is a trigger for a submenu\n */\nconst MenuSplitGroupContext = React.createContext<MenuSplitGroupContextValue | undefined>(\n undefined,\n) as React.Context<MenuSplitGroupContextValue>;\n\nexport const menuSplitGroupContextDefaultValue = {\n setMultiline: (): null => null,\n};\n\nexport const MenuSplitGroupContextProvider = MenuSplitGroupContext.Provider;\nexport const useMenuSplitGroupContext_unstable = (): MenuSplitGroupContextValue =>\n React.useContext(MenuSplitGroupContext) ?? menuSplitGroupContextDefaultValue;\n\nexport const useIsInMenuSplitGroup = (): boolean => {\n const context = useMenuSplitGroupContext_unstable();\n return context !== menuSplitGroupContextDefaultValue;\n};\n"],"names":["React","MenuSplitGroupContext","createContext","undefined","menuSplitGroupContextDefaultValue","setMultiline","MenuSplitGroupContextProvider","Provider","useMenuSplitGroupContext_unstable","useContext","useIsInMenuSplitGroup","context"],"mappings":"AAAA;;;;;;;;;;;;iCAmBaM;;;qCAJAF;;;yBAQAM;;;IAHAF,iCAAAA;;;;;iEAlBU,QAAQ;AAM/B;;CAEC,GACD,MAAMP,sCAAwBD,OAAME,aAAa,CAC/CC;AAGK,MAAMC,oCAAoC;IAC/CC,cAAc,IAAY;AAC5B,EAAE;AAEK,MAAMC,gCAAgCL,sBAAsBM,QAAQ,CAAC;AACrE,0CAA0C;QAC/CP;WAAAA,CAAAA,oBAAAA,OAAMS,UAAU,CAACR,sBAAAA,MAAAA,QAAjBD,sBAAAA,KAAAA,IAAAA,oBAA2CI;EAAkC;AAExE,MAAMM,wBAAwB;IACnC,MAAMC,UAAUH;IAChB,OAAOG,YAAYP;AACrB,EAAE"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/menuTriggerContext.ts"],"sourcesContent":["import * as React from 'react';\n\n/**\n * Context used communicate with a child menu item that it is a trigger for a submenu\n */\nconst MenuTriggerContext = React.createContext<boolean | undefined>(undefined) as React.Context<boolean>;\n\nconst menuTriggerContextDefaultValue = false;\n\nexport const MenuTriggerContextProvider = MenuTriggerContext.Provider;\nexport const useMenuTriggerContext_unstable = () =>\n React.useContext(MenuTriggerContext) ?? menuTriggerContextDefaultValue;\n"],"names":["React","MenuTriggerContext","createContext","undefined","menuTriggerContextDefaultValue","MenuTriggerContextProvider","Provider","useMenuTriggerContext_unstable","useContext"],"mappings":";;;;;;;;;;;IASaK,0BAAAA;;;kCACAE;;;;;iEAVU,QAAQ;AAE/B;;CAEC,GACD,MAAMN,mCAAqBD,OAAME,aAAa,CAAsBC;AAEpE,MAAMC,iCAAiC;AAEhC,mCAAmCH,mBAAmBK,QAAQ,CAAC;AAC/D,MAAMC,iCAAiC;QAC5CP;WAAAA,CAAAA,oBAAAA,OAAMQ,UAAU,CAACP,mBAAAA,MAAAA,QAAjBD,sBAAAA,KAAAA,IAAAA,oBAAwCI;EAA+B"}
1
+ {"version":3,"sources":["../src/contexts/menuTriggerContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * Context used communicate with a child menu item that it is a trigger for a submenu\n */\nconst MenuTriggerContext = React.createContext<boolean | undefined>(undefined) as React.Context<boolean>;\n\nconst menuTriggerContextDefaultValue = false;\n\nexport const MenuTriggerContextProvider = MenuTriggerContext.Provider;\nexport const useMenuTriggerContext_unstable = (): boolean =>\n React.useContext(MenuTriggerContext) ?? menuTriggerContextDefaultValue;\n"],"names":["React","MenuTriggerContext","createContext","undefined","menuTriggerContextDefaultValue","MenuTriggerContextProvider","Provider","useMenuTriggerContext_unstable","useContext"],"mappings":"AAAA;;;;;;;;;;;;8BAWaK;eAAAA;;kCACAE;;;;;iEAVU,QAAQ;AAE/B;;CAEC,GACD,MAAMN,mCAAqBD,OAAME,aAAa,CAAsBC;AAEpE,MAAMC,iCAAiC;AAEhC,mCAAmCH,mBAAmBK,QAAQ,CAAC;AAC/D,MAAMC,iCAAiC;QAC5CP;WAAAA,CAAAA,oBAAAA,OAAMQ,UAAU,CAACP,mBAAAA,MAAAA,QAAjBD,sBAAAA,KAAAA,IAAAA,oBAAwCI;EAA+B"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["useCheckmarkStyles.styles.js"],"sourcesContent":["import { mergeClasses, makeStyles } from '@griffel/react';\nconst useStyles = makeStyles({\n root: {\n width: '16px',\n height: '16px',\n visibility: 'hidden',\n flexShrink: 0\n },\n rootChecked: {\n visibility: 'visible',\n flexShrink: 0\n }\n});\n/**\n * Applies styles to a checkmark slot for selectable menu items\n *\n * @param state - should contain a `checkmark` slot\n */ export const useCheckmarkStyles_unstable = (state)=>{\n 'use no memo';\n const styles = useStyles();\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(styles.root, state.checked && styles.rootChecked, state.checkmark.className);\n }\n};\n"],"names":["mergeClasses","__styles","useStyles","root","a9b677","Bqenvij","Bcdw1i0","Bnnss6s","rootChecked","d","useCheckmarkStyles_unstable","state","styles","checkmark","className","checked"],"mappings":";;;;;;;eAiBiBU,2BAA2B;;;uBAjBH,gBAAgB;AACzD,MAAMR,SAAS,GAAA,WAAA,OAAGD,eAAA,EAAA;IAAAE,IAAA,EAAA;QAAAC,MAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;IAAAC,WAAA,EAAA;QAAAF,OAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;AAAA,GAAA;IAAAE,CAAA,EAAA;QAAA;QAAA;QAAA;QAAA;QAAA;KAAA;AAAA,CAWjB,CAAC;AAKS,qCAAqCE,KAAK,IAAG;IACpD,aAAa;IACb,MAAMC,MAAM,GAAGV,SAAS,CAAC,CAAC;IAC1B,IAAIS,KAAK,CAACE,SAAS,EAAE;QACjBF,KAAK,CAACE,SAAS,CAACC,SAAS,OAAGd,mBAAY,EAACY,MAAM,CAACT,IAAI,EAAEQ,KAAK,CAACI,OAAO,IAAIH,MAAM,CAACJ,WAAW,EAAEG,KAAK,CAACE,SAAS,CAACC,SAAS,CAAC;IACzH;AACJ,CAAC"}
1
+ {"version":3,"sources":["useCheckmarkStyles.styles.js"],"sourcesContent":["'use client';\nimport { mergeClasses, makeStyles } from '@griffel/react';\nconst useStyles = makeStyles({\n root: {\n width: '16px',\n height: '16px',\n visibility: 'hidden',\n flexShrink: 0\n },\n rootChecked: {\n visibility: 'visible',\n flexShrink: 0\n }\n});\n/**\n * Applies styles to a checkmark slot for selectable menu items\n *\n * @param state - should contain a `checkmark` slot\n */ export const useCheckmarkStyles_unstable = (state)=>{\n 'use no memo';\n const styles = useStyles();\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(styles.root, state.checked && styles.rootChecked, state.checkmark.className);\n }\n};\n"],"names":["mergeClasses","__styles","useStyles","root","a9b677","Bqenvij","Bcdw1i0","Bnnss6s","rootChecked","d","useCheckmarkStyles_unstable","state","styles","checkmark","className","checked"],"mappings":"AAAA,YAAY;;;;;+BAkBKU,2BAA2B;;;;;;uBAjBH,gBAAgB;AACzD,MAAMR,SAAS,GAAA,WAAA,OAAGD,eAAA,EAAA;IAAAE,IAAA,EAAA;QAAAC,MAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;IAAAC,WAAA,EAAA;QAAAF,OAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;AAAA,GAAA;IAAAE,CAAA,EAAA;QAAA;QAAA;QAAA;QAAA;QAAA;KAAA;AAAA,CAWjB,CAAC;AAKS,qCAAqCE,KAAK,IAAG;IACpD,aAAa;IACb,MAAMC,MAAM,GAAGV,SAAS,CAAC,CAAC;IAC1B,IAAIS,KAAK,CAACE,SAAS,EAAE;QACjBF,KAAK,CAACE,SAAS,CAACC,SAAS,OAAGd,mBAAY,EAACY,MAAM,CAACT,IAAI,EAAEQ,KAAK,CAACI,OAAO,IAAIH,MAAM,CAACJ,WAAW,EAAEG,KAAK,CAACE,SAAS,CAACC,SAAS,CAAC;IACzH;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/selectable/useCheckmarkStyles.styles.ts"],"sourcesContent":["import { mergeClasses, makeStyles } from '@griffel/react';\nimport type { MenuItemSelectableState } from './types';\nimport type { MenuItemState } from '../components/MenuItem/MenuItem.types';\n\nconst useStyles = makeStyles({\n root: {\n width: '16px',\n height: '16px',\n visibility: 'hidden',\n flexShrink: 0,\n },\n rootChecked: {\n visibility: 'visible',\n flexShrink: 0,\n },\n});\n\n/**\n * Applies styles to a checkmark slot for selectable menu items\n *\n * @param state - should contain a `checkmark` slot\n */\nexport const useCheckmarkStyles_unstable = (state: MenuItemSelectableState & Pick<MenuItemState, 'checkmark'>) => {\n 'use no memo';\n\n const styles = useStyles();\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(\n styles.root,\n state.checked && styles.rootChecked,\n state.checkmark.className,\n );\n }\n};\n"],"names":["mergeClasses","makeStyles","useStyles","root","width","height","visibility","flexShrink","rootChecked","useCheckmarkStyles_unstable","state","styles","checkmark","className","checked"],"mappings":";;;;+BAsBaS;;;;;;uBAtB4B,iBAAiB;AAI1D,MAAMP,gBAAYD,iBAAAA,EAAW;IAC3BE,MAAM;QACJC,OAAO;QACPC,QAAQ;QACRC,YAAY;QACZC,YAAY;IACd;IACAC,aAAa;QACXF,YAAY;QACZC,YAAY;IACd;AACF;AAOO,oCAAoC,CAACG;IAC1C;IAEA,MAAMC,SAAST;IACf,IAAIQ,MAAME,SAAS,EAAE;QACnBF,MAAME,SAAS,CAACC,SAAS,OAAGb,mBAAAA,EAC1BW,OAAOR,IAAI,EACXO,MAAMI,OAAO,IAAIH,OAAOH,WAAW,EACnCE,MAAME,SAAS,CAACC,SAAS;IAE7B;AACF,EAAE"}
1
+ {"version":3,"sources":["../src/selectable/useCheckmarkStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport type { MenuItemSelectableState } from './types';\nimport type { MenuItemState } from '../components/MenuItem/MenuItem.types';\n\nconst useStyles = makeStyles({\n root: {\n width: '16px',\n height: '16px',\n visibility: 'hidden',\n flexShrink: 0,\n },\n rootChecked: {\n visibility: 'visible',\n flexShrink: 0,\n },\n});\n\n/**\n * Applies styles to a checkmark slot for selectable menu items\n *\n * @param state - should contain a `checkmark` slot\n */\nexport const useCheckmarkStyles_unstable = (\n state: MenuItemSelectableState & Pick<MenuItemState, 'checkmark'>,\n): void => {\n 'use no memo';\n\n const styles = useStyles();\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(\n styles.root,\n state.checked && styles.rootChecked,\n state.checkmark.className,\n );\n }\n};\n"],"names":["mergeClasses","makeStyles","useStyles","root","width","height","visibility","flexShrink","rootChecked","useCheckmarkStyles_unstable","state","styles","checkmark","className","checked"],"mappings":"AAAA;;;;;+BAwBaS;;;;;;uBAtB4B,iBAAiB;AAI1D,MAAMP,gBAAYD,iBAAAA,EAAW;IAC3BE,MAAM;QACJC,OAAO;QACPC,QAAQ;QACRC,YAAY;QACZC,YAAY;IACd;IACAC,aAAa;QACXF,YAAY;QACZC,YAAY;IACd;AACF;AAOO,oCAAoC,CACzCG;IAEA;IAEA,MAAMC,SAAST;IACf,IAAIQ,MAAME,SAAS,EAAE;QACnBF,MAAME,SAAS,CAACC,SAAS,OAAGb,mBAAAA,EAC1BW,OAAOR,IAAI,EACXO,MAAMI,OAAO,IAAIH,OAAOH,WAAW,EACnCE,MAAME,SAAS,CAACC,SAAS;IAE7B;AACF,EAAE"}
@@ -26,8 +26,12 @@ _export(exports, {
26
26
  },
27
27
  useOnMenuSafeZoneTimeout: function() {
28
28
  return _useOnMenuSafeZoneTimeout.useOnMenuSafeZoneTimeout;
29
+ },
30
+ useValidateNesting: function() {
31
+ return _useValidateNesting.useValidateNesting;
29
32
  }
30
33
  });
31
34
  const _useOnMenuEnter = require("./useOnMenuEnter");
32
35
  const _useIsSubmenu = require("./useIsSubmenu");
36
+ const _useValidateNesting = require("./useValidateNesting");
33
37
  const _useOnMenuSafeZoneTimeout = require("./useOnMenuSafeZoneTimeout");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/index.ts"],"sourcesContent":["export { MENU_ENTER_EVENT, dispatchMenuEnterEvent, useOnMenuMouseEnter } from './useOnMenuEnter';\nexport { useIsSubmenu } from './useIsSubmenu';\nexport { MENU_SAFEZONE_TIMEOUT_EVENT, useOnMenuSafeZoneTimeout } from './useOnMenuSafeZoneTimeout';\n"],"names":["MENU_ENTER_EVENT","dispatchMenuEnterEvent","useOnMenuMouseEnter","useIsSubmenu","MENU_SAFEZONE_TIMEOUT_EVENT","useOnMenuSafeZoneTimeout"],"mappings":";;;;;;;;;;;;eAASA,gCAAgB;;;eAEhBI,qDAA2B;;;eAFTH,sCAAsB;;;eACxCE,0BAAY;;;eAD8BD,mCAAmB;;;eAEhCG,kDAAwB;;;gCAFgB,mBAAmB;8BACpE,iBAAiB;0CACwB,6BAA6B"}
1
+ {"version":3,"sources":["../src/utils/index.ts"],"sourcesContent":["export { MENU_ENTER_EVENT, dispatchMenuEnterEvent, useOnMenuMouseEnter } from './useOnMenuEnter';\nexport { useIsSubmenu } from './useIsSubmenu';\nexport { useValidateNesting } from './useValidateNesting';\nexport { MENU_SAFEZONE_TIMEOUT_EVENT, useOnMenuSafeZoneTimeout } from './useOnMenuSafeZoneTimeout';\n"],"names":["MENU_ENTER_EVENT","dispatchMenuEnterEvent","useOnMenuMouseEnter","useIsSubmenu","useValidateNesting","MENU_SAFEZONE_TIMEOUT_EVENT","useOnMenuSafeZoneTimeout"],"mappings":";;;;;;;;;;;;eAASA,gCAAgB;;;eAGhBK,qDAA2B;;;eAHTJ,sCAAsB;;;eACxCE,0BAAY;;;eAD8BD,mCAAmB;;;eAGhCI,kDAAwB;;;eADrDF,sCAAkB;;;gCAFmD,mBAAmB;8BACpE,iBAAiB;oCACX,uBAAuB;0CACY,6BAA6B"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/useIsSubmenu.ts"],"sourcesContent":["import { useHasParentContext } from '@fluentui/react-context-selector';\nimport { useMenuContext_unstable } from '../contexts/menuContext';\nimport { MenuListContext } from '../contexts/menuListContext';\n\n/**\n * A component can be a part of a submenu whether its menu context `isSubmenu` flag is true\n * or whether it is a part of a `MenuList`\n *\n * A simple hook to check box contexts easily\n *\n * @returns whether the component is part of a submenu\n */\nexport function useIsSubmenu() {\n const menuContextValue = useMenuContext_unstable(context => context.isSubmenu);\n const hasMenuListContext = useHasParentContext(MenuListContext);\n\n return menuContextValue || hasMenuListContext;\n}\n"],"names":["useHasParentContext","useMenuContext_unstable","MenuListContext","useIsSubmenu","menuContextValue","context","isSubmenu","hasMenuListContext"],"mappings":";;;;;;;;;;sCAAoC,mCAAmC;6BAC/B,0BAA0B;iCAClC,8BAA8B;AAUvD,SAASG;IACd,MAAMC,uBAAmBH,oCAAAA,EAAwBI,CAAAA,UAAWA,QAAQC,SAAS;IAC7E,MAAMC,yBAAqBP,yCAAAA,EAAoBE,gCAAAA;IAE/C,OAAOE,oBAAoBG;AAC7B"}
1
+ {"version":3,"sources":["../src/utils/useIsSubmenu.ts"],"sourcesContent":["'use client';\n\nimport { useHasParentContext } from '@fluentui/react-context-selector';\nimport { useMenuContext_unstable } from '../contexts/menuContext';\nimport { MenuListContext } from '../contexts/menuListContext';\n\n/**\n * A component can be a part of a submenu whether its menu context `isSubmenu` flag is true\n * or whether it is a part of a `MenuList`\n *\n * A simple hook to check box contexts easily\n *\n * @returns whether the component is part of a submenu\n */\nexport function useIsSubmenu(): boolean {\n const menuContextValue = useMenuContext_unstable(context => context.isSubmenu);\n const hasMenuListContext = useHasParentContext(MenuListContext);\n\n return menuContextValue || hasMenuListContext;\n}\n"],"names":["useHasParentContext","useMenuContext_unstable","MenuListContext","useIsSubmenu","menuContextValue","context","isSubmenu","hasMenuListContext"],"mappings":"AAAA;;;;;;;;;;;sCAEoC,mCAAmC;6BAC/B,0BAA0B;iCAClC,8BAA8B;AAUvD,SAASG;IACd,MAAMC,uBAAmBH,oCAAAA,EAAwBI,CAAAA,UAAWA,QAAQC,SAAS;IAC7E,MAAMC,yBAAqBP,yCAAAA,EAAoBE,gCAAAA;IAE/C,OAAOE,oBAAoBG;AAC7B"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/useOnMenuEnter.ts"],"sourcesContent":["import * as React from 'react';\nimport { useEventCallback, elementContains } from '@fluentui/react-utilities';\nimport type { UseOnClickOrScrollOutsideOptions } from '@fluentui/react-utilities';\n\n/**\n * Name of the custom event\n */\nexport const MENU_ENTER_EVENT = 'fuimenuenter';\n\n/**\n * This hook works similarly to @see useOnClickOutside\n *\n * Problem: Trying to behave the same as system menus:\n * When the mouse leaves a stack of nested menus the stack should not dismiss.\n * However if the mouse leaves a stack of menus and enters a parent menu all its children menu should dismiss.\n *\n * We don't use the native mouseenter event because it would trigger too many times in the document\n * Instead, dispatch custom DOM event from the menu so that it can bubble\n * Each nested menu can use the listener to check if the event is from a child or parent menu\n */\nexport const useOnMenuMouseEnter = (options: UseOnClickOrScrollOutsideOptions) => {\n const { refs, callback, element, disabled } = options;\n\n // Keep mouse event here because this is essentially a custom 'mouseenter' event\n const listener = useEventCallback((ev: MouseEvent) => {\n const popoverRef = refs[0];\n const someMenuPopover = ev.target as HTMLElement;\n\n // someMenu is a child -> will always be contained because of vParents\n // someMenu is a parent -> will always not be contained because no vParent\n // someMenu is the current popover -> it will contain itself\n const isOutsidePopover = !elementContains(popoverRef.current ?? null, someMenuPopover);\n\n if (isOutsidePopover && !disabled) {\n callback(ev);\n }\n });\n\n React.useEffect(() => {\n // eslint-disable-next-line eqeqeq\n if (element == null) {\n return;\n }\n\n /**\n * Because `addEventListener` type override falls back to 2nd definition (evt name is unknown string literal)\n * evt is being typed as a base class of MouseEvent -> `Event`.\n * This type is used to override `listener` calls to make TS happy\n */\n\n type ListenerOverride = (evt: Event) => void;\n\n if (!disabled) {\n element.addEventListener(MENU_ENTER_EVENT, listener as ListenerOverride);\n }\n\n return () => {\n element.removeEventListener(MENU_ENTER_EVENT, listener as ListenerOverride);\n };\n }, [listener, element, disabled]);\n};\n\n/**\n * Dispatches the custom MouseEvent enter event. Similar to calling `el.click()`\n * @param el - element for the event target\n * @param nativeEvent - the native mouse event this is mapped to\n */\nexport const dispatchMenuEnterEvent = (el: HTMLElement, nativeEvent: MouseEvent) => {\n el.dispatchEvent(new CustomEvent(MENU_ENTER_EVENT, { bubbles: true, detail: { nativeEvent } }));\n};\n"],"names":["React","useEventCallback","elementContains","MENU_ENTER_EVENT","useOnMenuMouseEnter","options","refs","callback","element","disabled","listener","ev","popoverRef","someMenuPopover","target","isOutsidePopover","current","useEffect","addEventListener","removeEventListener","dispatchMenuEnterEvent","el","nativeEvent","dispatchEvent","CustomEvent","bubbles","detail"],"mappings":";;;;;;;;;;;IAOaG,gBAAAA;;;0BA4DAiB;;;uBA/CAhB;;;;;iEApBU,QAAQ;gCACmB,4BAA4B;AAMvE,yBAAyB,eAAe;AAaxC,MAAMA,sBAAsB,CAACC;IAClC,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGJ;IAE9C,gFAAgF;IAChF,MAAMK,eAAWT,gCAAAA,EAAiB,CAACU;QACjC,MAAMC,aAAaN,IAAI,CAAC,EAAE;QAC1B,MAAMO,kBAAkBF,GAAGG,MAAM;YAKSF;QAH1C,sEAAsE;QACtE,0EAA0E;QAC1E,4DAA4D;QAC5D,MAAMG,mBAAmB,CAACb,mCAAAA,EAAgBU,CAAAA,sBAAAA,WAAWI,OAAAA,AAAO,MAAA,QAAlBJ,wBAAAA,KAAAA,IAAAA,sBAAsB,MAAMC;QAEtE,IAAIE,oBAAoB,CAACN,UAAU;YACjCF,SAASI;QACX;IACF;IAEAX,OAAMiB,SAAS,CAAC;QACd,kCAAkC;QAClC,IAAIT,WAAW,MAAM;YACnB;QACF;QAUA,IAAI,CAACC,UAAU;YACbD,QAAQU,gBAAgB,CAACf,kBAAkBO;QAC7C;QAEA,OAAO;YACLF,QAAQW,mBAAmB,CAAChB,kBAAkBO;QAChD;IACF,GAAG;QAACA;QAAUF;QAASC;KAAS;AAClC,EAAE;AAOK,MAAMW,yBAAyB,CAACC,IAAiBC;IACtDD,GAAGE,aAAa,CAAC,IAAIC,YAAYrB,kBAAkB;QAAEsB,SAAS;QAAMC,QAAQ;YAAEJ;QAAY;IAAE;AAC9F,EAAE"}
1
+ {"version":3,"sources":["../src/utils/useOnMenuEnter.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useEventCallback, elementContains } from '@fluentui/react-utilities';\nimport type { UseOnClickOrScrollOutsideOptions } from '@fluentui/react-utilities';\n\n/**\n * Name of the custom event\n */\nexport const MENU_ENTER_EVENT = 'fuimenuenter';\n\n/**\n * This hook works similarly to @see useOnClickOutside\n *\n * Problem: Trying to behave the same as system menus:\n * When the mouse leaves a stack of nested menus the stack should not dismiss.\n * However if the mouse leaves a stack of menus and enters a parent menu all its children menu should dismiss.\n *\n * We don't use the native mouseenter event because it would trigger too many times in the document\n * Instead, dispatch custom DOM event from the menu so that it can bubble\n * Each nested menu can use the listener to check if the event is from a child or parent menu\n */\nexport const useOnMenuMouseEnter = (options: UseOnClickOrScrollOutsideOptions): void => {\n const { refs, callback, element, disabled } = options;\n\n // Keep mouse event here because this is essentially a custom 'mouseenter' event\n const listener = useEventCallback((ev: MouseEvent) => {\n const popoverRef = refs[0];\n const someMenuPopover = ev.target as HTMLElement;\n\n // someMenu is a child -> will always be contained because of vParents\n // someMenu is a parent -> will always not be contained because no vParent\n // someMenu is the current popover -> it will contain itself\n const isOutsidePopover = !elementContains(popoverRef.current ?? null, someMenuPopover);\n\n if (isOutsidePopover && !disabled) {\n callback(ev);\n }\n });\n\n React.useEffect(() => {\n // eslint-disable-next-line eqeqeq\n if (element == null) {\n return;\n }\n\n /**\n * Because `addEventListener` type override falls back to 2nd definition (evt name is unknown string literal)\n * evt is being typed as a base class of MouseEvent -> `Event`.\n * This type is used to override `listener` calls to make TS happy\n */\n\n type ListenerOverride = (evt: Event) => void;\n\n if (!disabled) {\n element.addEventListener(MENU_ENTER_EVENT, listener as ListenerOverride);\n }\n\n return () => {\n element.removeEventListener(MENU_ENTER_EVENT, listener as ListenerOverride);\n };\n }, [listener, element, disabled]);\n};\n\n/**\n * Dispatches the custom MouseEvent enter event. Similar to calling `el.click()`\n * @param el - element for the event target\n * @param nativeEvent - the native mouse event this is mapped to\n */\nexport const dispatchMenuEnterEvent = (el: HTMLElement, nativeEvent: MouseEvent): void => {\n el.dispatchEvent(new CustomEvent(MENU_ENTER_EVENT, { bubbles: true, detail: { nativeEvent } }));\n};\n"],"names":["React","useEventCallback","elementContains","MENU_ENTER_EVENT","useOnMenuMouseEnter","options","refs","callback","element","disabled","listener","ev","popoverRef","someMenuPopover","target","isOutsidePopover","current","useEffect","addEventListener","removeEventListener","dispatchMenuEnterEvent","el","nativeEvent","dispatchEvent","CustomEvent","bubbles","detail"],"mappings":"AAAA;;;;;;;;;;;;IASaG,gBAAAA;;;IA4DAiB,sBAAAA;;;uBA/CAhB;;;;;iEApBU,QAAQ;gCACmB,4BAA4B;AAMvE,yBAAyB,eAAe;AAaxC,MAAMA,sBAAsB,CAACC;IAClC,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGJ;IAE9C,gFAAgF;IAChF,MAAMK,eAAWT,gCAAAA,EAAiB,CAACU;QACjC,MAAMC,aAAaN,IAAI,CAAC,EAAE;QAC1B,MAAMO,kBAAkBF,GAAGG,MAAM;YAKSF;QAH1C,sEAAsE;QACtE,0EAA0E;QAC1E,4DAA4D;QAC5D,MAAMG,mBAAmB,KAACb,+BAAAA,EAAgBU,CAAAA,sBAAAA,WAAWI,OAAAA,AAAO,MAAA,QAAlBJ,wBAAAA,KAAAA,IAAAA,sBAAsB,MAAMC;QAEtE,IAAIE,oBAAoB,CAACN,UAAU;YACjCF,SAASI;QACX;IACF;IAEAX,OAAMiB,SAAS,CAAC;QACd,kCAAkC;QAClC,IAAIT,WAAW,MAAM;YACnB;QACF;QAUA,IAAI,CAACC,UAAU;YACbD,QAAQU,gBAAgB,CAACf,kBAAkBO;QAC7C;QAEA,OAAO;YACLF,QAAQW,mBAAmB,CAAChB,kBAAkBO;QAChD;IACF,GAAG;QAACA;QAAUF;QAASC;KAAS;AAClC,EAAE;AAOK,+BAA+B,CAACY,IAAiBC;IACtDD,GAAGE,aAAa,CAAC,IAAIC,YAAYrB,kBAAkB;QAAEsB,SAAS;QAAMC,QAAQ;YAAEJ;QAAY;IAAE;AAC9F,EAAE"}
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  "use strict";
2
3
  Object.defineProperty(exports, "__esModule", {
3
4
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/useOnMenuSafeZoneTimeout.ts"],"sourcesContent":["import * as React from 'react';\n\n/**\n * Name of the custom event\n */\nexport const MENU_SAFEZONE_TIMEOUT_EVENT = 'fuimenusafezonetimeout';\n\n/**\n * This hook listeners on a menu trigger for a custom event for an indication that a safe zone was closed over the\n * matching item.\n */\nexport const useOnMenuSafeZoneTimeout = (listener: () => void) => {\n const elementRef = React.useRef<HTMLElement | null>(null);\n\n return React.useCallback(\n (element: HTMLElement | null) => {\n elementRef.current?.removeEventListener(MENU_SAFEZONE_TIMEOUT_EVENT, listener);\n element?.addEventListener(MENU_SAFEZONE_TIMEOUT_EVENT, listener);\n\n elementRef.current = element;\n },\n [listener],\n );\n};\n"],"names":["React","MENU_SAFEZONE_TIMEOUT_EVENT","useOnMenuSafeZoneTimeout","listener","elementRef","useRef","useCallback","element","current","removeEventListener","addEventListener"],"mappings":";;;;;;;;;;;IAKaC,2BAAAA;;;4BAMAC;;;;;iEAXU,QAAQ;AAKxB,oCAAoC,yBAAyB;AAM7D,MAAMA,2BAA2B,CAACC;IACvC,MAAMC,aAAaJ,OAAMK,MAAM,CAAqB;IAEpD,OAAOL,OAAMM,WAAW,CACtB,CAACC;YACCH;SAAAA,sBAAAA,WAAWI,OAAAA,AAAO,MAAA,QAAlBJ,wBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,oBAAoBK,mBAAmB,CAACR,6BAA6BE;QACrEI,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASG,gBAAgB,CAACT,6BAA6BE;QAEvDC,WAAWI,OAAO,GAAGD;IACvB,GACA;QAACJ;KAAS;AAEd,EAAE"}
1
+ {"version":3,"sources":["../src/utils/useOnMenuSafeZoneTimeout.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\n/**\n * Name of the custom event\n */\nexport const MENU_SAFEZONE_TIMEOUT_EVENT = 'fuimenusafezonetimeout';\n\n/**\n * This hook listeners on a menu trigger for a custom event for an indication that a safe zone was closed over the\n * matching item.\n */\nexport const useOnMenuSafeZoneTimeout = (listener: () => void): ((element: HTMLElement | null) => void) => {\n const elementRef = React.useRef<HTMLElement | null>(null);\n\n return React.useCallback(\n (element: HTMLElement | null) => {\n elementRef.current?.removeEventListener(MENU_SAFEZONE_TIMEOUT_EVENT, listener);\n element?.addEventListener(MENU_SAFEZONE_TIMEOUT_EVENT, listener);\n\n elementRef.current = element;\n },\n [listener],\n );\n};\n"],"names":["React","MENU_SAFEZONE_TIMEOUT_EVENT","useOnMenuSafeZoneTimeout","listener","elementRef","useRef","useCallback","element","current","removeEventListener","addEventListener"],"mappings":"AAAA;;;;;;;;;;;;IAOaC,2BAAAA;;;4BAMAC;;;;;iEAXU,QAAQ;AAKxB,oCAAoC,yBAAyB;AAM7D,MAAMA,2BAA2B,CAACC;IACvC,MAAMC,aAAaJ,OAAMK,MAAM,CAAqB;IAEpD,OAAOL,OAAMM,WAAW,CACtB,CAACC;YACCH;SAAAA,sBAAAA,WAAWI,OAAAA,AAAO,MAAA,QAAlBJ,wBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,oBAAoBK,mBAAmB,CAACR,6BAA6BE;QACrEI,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASG,gBAAgB,CAACT,6BAA6BE;QAEvDC,WAAWI,OAAO,GAAGD;IACvB,GACA;QAACJ;KAAS;AAEd,EAAE"}
@@ -0,0 +1,91 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useValidateNesting", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return useValidateNesting;
10
+ }
11
+ });
12
+ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
+ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
+ const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
15
+ const _menuContext = require("../contexts/menuContext");
16
+ const useValidateNesting = (componentName)=>{
17
+ 'use no memo';
18
+ const { targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
19
+ const triggerRef = (0, _menuContext.useMenuContext_unstable)((context)=>context.triggerRef);
20
+ const inline = (0, _menuContext.useMenuContext_unstable)((context)=>context.inline);
21
+ const ref = _react.useRef(null);
22
+ if (process.env.NODE_ENV !== 'production') {
23
+ // This check should run only in development mode
24
+ // It's okay to disable the ESLint rule because we ar checking env variable statically (not at runtime)
25
+ // eslint-disable-next-line react-hooks/rules-of-hooks
26
+ _react.useEffect(()=>{
27
+ let ancestor = ref.current;
28
+ let ancestorComponentName = '';
29
+ do {
30
+ var _ancestor_parentElement;
31
+ ancestor = (_ancestor_parentElement = ancestor === null || ancestor === void 0 ? void 0 : ancestor.parentElement) !== null && _ancestor_parentElement !== void 0 ? _ancestor_parentElement : null;
32
+ if (ancestor === null || ancestor === void 0 ? void 0 : ancestor.classList.contains('fui-MenuList')) {
33
+ break;
34
+ } else if (ancestor === null || ancestor === void 0 ? void 0 : ancestor.classList.contains('fui-MenuGrid')) {
35
+ ancestorComponentName = 'MenuGrid';
36
+ } else if (ancestor === null || ancestor === void 0 ? void 0 : ancestor.classList.contains('fui-MenuGridItem')) {
37
+ ancestorComponentName = 'MenuGridItem';
38
+ } else if (ancestor === null || ancestor === void 0 ? void 0 : ancestor.classList.contains('fui-MenuGridRow')) {
39
+ ancestorComponentName = 'MenuGridRow';
40
+ } else if (ancestor === null || ancestor === void 0 ? void 0 : ancestor.classList.contains('fui-MenuGridCell')) {
41
+ ancestorComponentName = 'MenuGridCell';
42
+ }
43
+ if ([
44
+ 'MenuItem',
45
+ 'MenuItemCheckbox',
46
+ 'MenuItemRadio'
47
+ ].includes(componentName)) {
48
+ if ([
49
+ 'MenuGrid',
50
+ 'MenuGridItem',
51
+ 'MenuGridRow',
52
+ 'MenuGridCell'
53
+ ].includes(ancestorComponentName)) {
54
+ throw new Error(`${componentName} is incorrectly nested within ${ancestorComponentName}. You probably want to wrap it in a MenuList instead.`);
55
+ }
56
+ } else if (componentName === 'MenuList') {
57
+ if (ancestorComponentName === 'MenuGridCell') {
58
+ if (inline && getCellOfTrigger(triggerRef.current, targetDocument) === ancestor) {
59
+ break;
60
+ }
61
+ throw new Error(`MenuList is incorrectly nested within MenuGridCell.`);
62
+ } else if ([
63
+ 'MenuGrid',
64
+ 'MenuGridItem',
65
+ 'MenuGridRow'
66
+ ].includes(ancestorComponentName)) {
67
+ throw new Error(`MenuList is incorrectly nested within ${ancestorComponentName}.`);
68
+ }
69
+ }
70
+ }while (ancestor && ancestor !== (targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.body))
71
+ }, [
72
+ componentName,
73
+ ref,
74
+ triggerRef,
75
+ inline,
76
+ targetDocument
77
+ ]);
78
+ }
79
+ return ref;
80
+ };
81
+ const getCellOfTrigger = (trigger, targetDocument)=>{
82
+ let ancestor = trigger === null || trigger === void 0 ? void 0 : trigger.parentElement;
83
+ while(ancestor && ancestor !== (targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.body)){
84
+ if (ancestor === null || ancestor === void 0 ? void 0 : ancestor.classList.contains('fui-MenuGridCell')) {
85
+ return ancestor;
86
+ }
87
+ var _ancestor_parentElement;
88
+ ancestor = (_ancestor_parentElement = ancestor === null || ancestor === void 0 ? void 0 : ancestor.parentElement) !== null && _ancestor_parentElement !== void 0 ? _ancestor_parentElement : null;
89
+ }
90
+ return null;
91
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/useValidateNesting.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\n\nimport type { MenuContextValue } from '../contexts/menuContext';\nimport { useMenuContext_unstable } from '../contexts/menuContext';\n\ntype NestingComponentName = 'MenuList' | 'MenuItem' | 'MenuItemCheckbox' | 'MenuItemRadio';\n\nexport const useValidateNesting = (componentName: NestingComponentName): React.RefObject<HTMLElement | null> => {\n 'use no memo';\n\n const { targetDocument } = useFluent();\n const triggerRef = useMenuContext_unstable((context: MenuContextValue) => context.triggerRef);\n const inline = useMenuContext_unstable((context: MenuContextValue) => context.inline);\n const ref = React.useRef<HTMLElement | null>(null);\n\n if (process.env.NODE_ENV !== 'production') {\n // This check should run only in development mode\n // It's okay to disable the ESLint rule because we ar checking env variable statically (not at runtime)\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n let ancestor = ref.current;\n let ancestorComponentName = '';\n do {\n ancestor = ancestor?.parentElement ?? null;\n if (ancestor?.classList.contains('fui-MenuList')) {\n break;\n } else if (ancestor?.classList.contains('fui-MenuGrid')) {\n ancestorComponentName = 'MenuGrid';\n } else if (ancestor?.classList.contains('fui-MenuGridItem')) {\n ancestorComponentName = 'MenuGridItem';\n } else if (ancestor?.classList.contains('fui-MenuGridRow')) {\n ancestorComponentName = 'MenuGridRow';\n } else if (ancestor?.classList.contains('fui-MenuGridCell')) {\n ancestorComponentName = 'MenuGridCell';\n }\n if (['MenuItem', 'MenuItemCheckbox', 'MenuItemRadio'].includes(componentName)) {\n if (['MenuGrid', 'MenuGridItem', 'MenuGridRow', 'MenuGridCell'].includes(ancestorComponentName)) {\n throw new Error(\n `${componentName} is incorrectly nested within ${ancestorComponentName}. You probably want to wrap it in a MenuList instead.`,\n );\n }\n } else if (componentName === 'MenuList') {\n if (ancestorComponentName === 'MenuGridCell') {\n if (inline && getCellOfTrigger(triggerRef.current, targetDocument) === ancestor) {\n break;\n }\n throw new Error(`MenuList is incorrectly nested within MenuGridCell.`);\n } else if (['MenuGrid', 'MenuGridItem', 'MenuGridRow'].includes(ancestorComponentName)) {\n throw new Error(`MenuList is incorrectly nested within ${ancestorComponentName}.`);\n }\n }\n } while (ancestor && ancestor !== targetDocument?.body);\n }, [componentName, ref, triggerRef, inline, targetDocument]);\n }\n return ref;\n};\n\nconst getCellOfTrigger = (trigger: HTMLElement | null, targetDocument?: Document): HTMLElement | null => {\n let ancestor = trigger?.parentElement;\n while (ancestor && ancestor !== targetDocument?.body) {\n if (ancestor?.classList.contains('fui-MenuGridCell')) {\n return ancestor;\n }\n ancestor = ancestor?.parentElement ?? null;\n }\n return null;\n};\n"],"names":["React","useFluent_unstable","useFluent","useMenuContext_unstable","useValidateNesting","componentName","targetDocument","triggerRef","context","inline","ref","useRef","process","env","NODE_ENV","useEffect","ancestor","current","ancestorComponentName","parentElement","classList","contains","includes","Error","getCellOfTrigger","body","trigger"],"mappings":"AAAA;;;;;+BAUaI;;;;;;;iEARU,QAAQ;qCACiB,kCAAkC;6BAG1C,0BAA0B;AAI3D,2BAA2B,CAACC;IACjC;IAEA,MAAM,EAAEC,cAAc,EAAE,OAAGJ,uCAAAA;IAC3B,MAAMK,iBAAaJ,oCAAAA,EAAwB,CAACK,UAA8BA,QAAQD,UAAU;IAC5F,MAAME,aAASN,oCAAAA,EAAwB,CAACK,UAA8BA,QAAQC,MAAM;IACpF,MAAMC,MAAMV,OAAMW,MAAM,CAAqB;IAE7C,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;QACzC,iDAAiD;QACjD,uGAAuG;QACvG,sDAAsD;QACtDd,OAAMe,SAAS,CAAC;YACd,IAAIC,WAAWN,IAAIO,OAAO;YAC1B,IAAIC,wBAAwB;YAC5B,GAAG;oBACUF;gBAAXA,WAAWA,CAAAA,0BAAAA,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUG,aAAAA,AAAa,MAAA,QAAvBH,4BAAAA,KAAAA,IAAAA,0BAA2B;gBACtC,IAAIA,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUI,SAAS,CAACC,QAAQ,CAAC,iBAAiB;oBAChD;gBACF,OAAO,IAAIL,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUI,SAAS,CAACC,QAAQ,CAAC,iBAAiB;oBACvDH,wBAAwB;gBAC1B,OAAO,IAAIF,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUI,SAAS,CAACC,QAAQ,CAAC,qBAAqB;oBAC3DH,wBAAwB;gBAC1B,OAAO,IAAIF,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUI,SAAS,CAACC,QAAQ,CAAC,oBAAoB;oBAC1DH,wBAAwB;gBAC1B,OAAO,IAAIF,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUI,SAAS,CAACC,QAAQ,CAAC,qBAAqB;oBAC3DH,wBAAwB;gBAC1B;gBACA,IAAI;oBAAC;oBAAY;oBAAoB;iBAAgB,CAACI,QAAQ,CAACjB,gBAAgB;oBAC7E,IAAI;wBAAC;wBAAY;wBAAgB;wBAAe;qBAAe,CAACiB,QAAQ,CAACJ,wBAAwB;wBAC/F,MAAM,IAAIK,MACR,GAAGlB,cAAc,8BAA8B,EAAEa,sBAAsB,qDAAqD,CAAC;oBAEjI;gBACF,OAAO,IAAIb,kBAAkB,YAAY;oBACvC,IAAIa,0BAA0B,gBAAgB;wBAC5C,IAAIT,UAAUe,iBAAiBjB,WAAWU,OAAO,EAAEX,oBAAoBU,UAAU;4BAC/E;wBACF;wBACA,MAAM,IAAIO,MAAM,CAAC,mDAAmD,CAAC;oBACvE,OAAO,IAAI;wBAAC;wBAAY;wBAAgB;qBAAc,CAACD,QAAQ,CAACJ,wBAAwB;wBACtF,MAAM,IAAIK,MAAM,CAAC,sCAAsC,EAAEL,sBAAsB,CAAC,CAAC;oBACnF;gBACF;YACF,QAASF,YAAYA,cAAaV,mBAAAA,QAAAA,mBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,eAAgBmB,IAAAA,AAAI,EAAE;QAC1D,GAAG;YAACpB;YAAeK;YAAKH;YAAYE;YAAQH;SAAe;IAC7D;IACA,OAAOI;AACT,EAAE;AAEF,MAAMc,mBAAmB,CAACE,SAA6BpB;IACrD,IAAIU,WAAWU,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASP,aAAa;IACrC,MAAOH,YAAYA,cAAaV,mBAAAA,QAAAA,mBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,eAAgBmB,IAAAA,AAAI,EAAE;QACpD,IAAIT,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUI,SAAS,CAACC,QAAQ,CAAC,qBAAqB;YACpD,OAAOL;QACT;YACWA;QAAXA,WAAWA,CAAAA,0BAAAA,aAAAA,QAAAA,aAAAA,KAAAA,IAAAA,KAAAA,IAAAA,SAAUG,aAAAA,AAAa,MAAA,QAAvBH,4BAAAA,KAAAA,IAAAA,0BAA2B;IACxC;IACA,OAAO;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/react-menu",
3
- "version": "9.19.5",
3
+ "version": "9.20.0",
4
4
  "description": "Fluent UI menu component",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -21,24 +21,24 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@fluentui/keyboard-keys": "^9.0.8",
24
- "@fluentui/react-aria": "^9.16.4",
25
- "@fluentui/react-context-selector": "^9.2.6",
24
+ "@fluentui/react-aria": "^9.17.1",
25
+ "@fluentui/react-context-selector": "^9.2.8",
26
26
  "@fluentui/react-icons": "^2.0.245",
27
- "@fluentui/react-portal": "^9.8.1",
28
- "@fluentui/react-positioning": "^9.20.4",
29
- "@fluentui/react-shared-contexts": "^9.25.0",
30
- "@fluentui/react-tabster": "^9.26.4",
27
+ "@fluentui/react-portal": "^9.8.3",
28
+ "@fluentui/react-positioning": "^9.20.6",
29
+ "@fluentui/react-shared-contexts": "^9.25.2",
30
+ "@fluentui/react-tabster": "^9.26.6",
31
31
  "@fluentui/react-theme": "^9.2.0",
32
- "@fluentui/react-utilities": "^9.24.0",
33
- "@fluentui/react-jsx-runtime": "^9.1.6",
32
+ "@fluentui/react-utilities": "^9.25.0",
33
+ "@fluentui/react-jsx-runtime": "^9.2.1",
34
34
  "@griffel/react": "^1.5.22",
35
35
  "@swc/helpers": "^0.5.1"
36
36
  },
37
37
  "peerDependencies": {
38
- "@types/react": ">=16.14.0 <19.0.0",
39
- "@types/react-dom": ">=16.9.0 <19.0.0",
40
- "react": ">=16.14.0 <19.0.0",
41
- "react-dom": ">=16.14.0 <19.0.0"
38
+ "@types/react": ">=16.14.0 <20.0.0",
39
+ "@types/react-dom": ">=16.9.0 <20.0.0",
40
+ "react": ">=16.14.0 <20.0.0",
41
+ "react-dom": ">=16.14.0 <20.0.0"
42
42
  },
43
43
  "beachball": {
44
44
  "disallowedChangeTypes": [