@fluentui-react-native/menu 1.4.34 → 1.6.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 (300) hide show
  1. package/CHANGELOG.json +37 -1
  2. package/CHANGELOG.md +19 -2
  3. package/SPEC.md +254 -39
  4. package/assets/Menu_android.png +0 -0
  5. package/assets/checkbox_android.png +0 -0
  6. package/lib/Menu/Menu.d.ts.map +1 -1
  7. package/lib/Menu/Menu.js +2 -6
  8. package/lib/Menu/Menu.js.map +1 -1
  9. package/lib/Menu/Menu.types.d.ts +21 -1
  10. package/lib/Menu/Menu.types.d.ts.map +1 -1
  11. package/lib/Menu/Menu.types.js +6 -0
  12. package/lib/Menu/Menu.types.js.map +1 -1
  13. package/lib/Menu/renderMenu.android.d.ts +5 -0
  14. package/lib/Menu/renderMenu.android.d.ts.map +1 -0
  15. package/lib/Menu/renderMenu.android.js +14 -0
  16. package/lib/Menu/renderMenu.android.js.map +1 -0
  17. package/lib/Menu/renderMenu.d.ts +5 -0
  18. package/lib/Menu/renderMenu.d.ts.map +1 -0
  19. package/lib/Menu/renderMenu.js +10 -0
  20. package/lib/Menu/renderMenu.js.map +1 -0
  21. package/lib/Menu/useMenu.android.d.ts +3 -0
  22. package/lib/Menu/useMenu.android.d.ts.map +1 -0
  23. package/lib/Menu/useMenu.android.js +257 -0
  24. package/lib/Menu/useMenu.android.js.map +1 -0
  25. package/lib/MenuCallout/MenuCallout.android.d.ts +4 -0
  26. package/lib/MenuCallout/MenuCallout.android.d.ts.map +1 -0
  27. package/lib/MenuCallout/MenuCallout.android.js +33 -0
  28. package/lib/MenuCallout/MenuCallout.android.js.map +1 -0
  29. package/lib/MenuCallout/MenuCallout.d.ts +4 -0
  30. package/lib/MenuCallout/MenuCallout.d.ts.map +1 -0
  31. package/lib/MenuCallout/MenuCallout.js +15 -0
  32. package/lib/MenuCallout/MenuCallout.js.map +1 -0
  33. package/lib/MenuCallout/MenuCallout.types.d.ts +18 -0
  34. package/lib/MenuCallout/MenuCallout.types.d.ts.map +1 -0
  35. package/lib/MenuCallout/MenuCallout.types.js +2 -0
  36. package/lib/MenuCallout/MenuCallout.types.js.map +1 -0
  37. package/lib/MenuCallout/index.d.ts +4 -0
  38. package/lib/MenuCallout/index.d.ts.map +1 -0
  39. package/lib/MenuCallout/index.js +3 -0
  40. package/lib/MenuCallout/index.js.map +1 -0
  41. package/lib/MenuDivider/MenuDivider.d.ts +2 -1
  42. package/lib/MenuDivider/MenuDivider.d.ts.map +1 -1
  43. package/lib/MenuDivider/MenuDivider.styling.d.ts.map +1 -1
  44. package/lib/MenuDivider/MenuDivider.styling.js +4 -8
  45. package/lib/MenuDivider/MenuDivider.styling.js.map +1 -1
  46. package/lib/MenuDivider/MenuDivider.types.d.ts +6 -1
  47. package/lib/MenuDivider/MenuDivider.types.d.ts.map +1 -1
  48. package/lib/MenuDivider/MenuDivider.types.js +1 -0
  49. package/lib/MenuDivider/MenuDivider.types.js.map +1 -1
  50. package/lib/MenuDivider/MenuDividerTokens.android.d.ts +5 -0
  51. package/lib/MenuDivider/MenuDividerTokens.android.d.ts.map +1 -0
  52. package/lib/MenuDivider/MenuDividerTokens.android.js +7 -0
  53. package/lib/MenuDivider/MenuDividerTokens.android.js.map +1 -0
  54. package/lib/MenuDivider/index.d.ts +1 -1
  55. package/lib/MenuDivider/index.d.ts.map +1 -1
  56. package/lib/MenuItem/MenuItem.styling.d.ts.map +1 -1
  57. package/lib/MenuItem/MenuItem.styling.js +2 -1
  58. package/lib/MenuItem/MenuItem.styling.js.map +1 -1
  59. package/lib/MenuItem/MenuItem.types.d.ts +5 -0
  60. package/lib/MenuItem/MenuItem.types.d.ts.map +1 -1
  61. package/lib/MenuItem/MenuItemTokens.android.d.ts +5 -0
  62. package/lib/MenuItem/MenuItemTokens.android.d.ts.map +1 -0
  63. package/lib/MenuItem/MenuItemTokens.android.js +20 -0
  64. package/lib/MenuItem/MenuItemTokens.android.js.map +1 -0
  65. package/lib/MenuItem/useMenuItem.d.ts.map +1 -1
  66. package/lib/MenuItem/useMenuItem.js.map +1 -1
  67. package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
  68. package/lib/MenuItemCheckbox/MenuItemCheckbox.js +5 -10
  69. package/lib/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
  70. package/lib/MenuItemCheckbox/MenuItemCheckbox.styling.d.ts.map +1 -1
  71. package/lib/MenuItemCheckbox/MenuItemCheckbox.styling.js +25 -20
  72. package/lib/MenuItemCheckbox/MenuItemCheckbox.styling.js.map +1 -1
  73. package/lib/MenuItemCheckbox/MenuItemCheckbox.types.d.ts +40 -0
  74. package/lib/MenuItemCheckbox/MenuItemCheckbox.types.d.ts.map +1 -1
  75. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.android.d.ts +5 -0
  76. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.android.d.ts.map +1 -0
  77. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.android.js +41 -0
  78. package/lib/MenuItemCheckbox/MenuItemCheckboxTokens.android.js.map +1 -0
  79. package/lib/MenuItemRadio/MenuItemRadio.d.ts +6 -3
  80. package/lib/MenuItemRadio/MenuItemRadio.d.ts.map +1 -1
  81. package/lib/MenuItemRadio/MenuItemRadio.js +37 -9
  82. package/lib/MenuItemRadio/MenuItemRadio.js.map +1 -1
  83. package/lib/MenuItemRadio/MenuItemRadio.styling.android.d.ts +6 -0
  84. package/lib/MenuItemRadio/MenuItemRadio.styling.android.d.ts.map +1 -0
  85. package/lib/MenuItemRadio/MenuItemRadio.styling.android.js +57 -0
  86. package/lib/MenuItemRadio/MenuItemRadio.styling.android.js.map +1 -0
  87. package/lib/MenuItemRadio/MenuItemRadio.styling.d.ts +5 -0
  88. package/lib/MenuItemRadio/MenuItemRadio.styling.d.ts.map +1 -0
  89. package/lib/MenuItemRadio/MenuItemRadio.styling.js +37 -0
  90. package/lib/MenuItemRadio/MenuItemRadio.styling.js.map +1 -0
  91. package/lib/MenuItemRadio/MenuItemRadio.types.d.ts +137 -0
  92. package/lib/MenuItemRadio/MenuItemRadio.types.d.ts.map +1 -0
  93. package/lib/MenuItemRadio/MenuItemRadio.types.js +2 -0
  94. package/lib/MenuItemRadio/MenuItemRadio.types.js.map +1 -0
  95. package/lib/MenuItemRadio/MenuItemRadioTokens.android.d.ts +5 -0
  96. package/lib/MenuItemRadio/MenuItemRadioTokens.android.d.ts.map +1 -0
  97. package/lib/MenuItemRadio/MenuItemRadioTokens.android.js +44 -0
  98. package/lib/MenuItemRadio/MenuItemRadioTokens.android.js.map +1 -0
  99. package/lib/MenuItemRadio/MenuItemRadioTokens.d.ts +5 -0
  100. package/lib/MenuItemRadio/MenuItemRadioTokens.d.ts.map +1 -0
  101. package/lib/MenuItemRadio/MenuItemRadioTokens.js +52 -0
  102. package/lib/MenuItemRadio/MenuItemRadioTokens.js.map +1 -0
  103. package/lib/MenuItemRadio/index.d.ts +2 -1
  104. package/lib/MenuItemRadio/index.d.ts.map +1 -1
  105. package/lib/MenuItemRadio/index.js +1 -1
  106. package/lib/MenuItemRadio/index.js.map +1 -1
  107. package/lib/MenuItemRadio/useMenuItemRadio.d.ts +2 -2
  108. package/lib/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -1
  109. package/lib/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  110. package/lib/MenuList/MenuList.styling.d.ts.map +1 -1
  111. package/lib/MenuList/MenuList.styling.js +2 -1
  112. package/lib/MenuList/MenuList.styling.js.map +1 -1
  113. package/lib/MenuList/MenuList.types.d.ts +6 -0
  114. package/lib/MenuList/MenuList.types.d.ts.map +1 -1
  115. package/lib/MenuList/MenuListTokens.android.d.ts +5 -0
  116. package/lib/MenuList/MenuListTokens.android.d.ts.map +1 -0
  117. package/lib/MenuList/MenuListTokens.android.js +7 -0
  118. package/lib/MenuList/MenuListTokens.android.js.map +1 -0
  119. package/lib/MenuPopover/MenuPopover.d.ts +4 -2
  120. package/lib/MenuPopover/MenuPopover.d.ts.map +1 -1
  121. package/lib/MenuPopover/MenuPopover.js +2 -2
  122. package/lib/MenuPopover/MenuPopover.js.map +1 -1
  123. package/lib/MenuPopover/MenuPopover.types.d.ts +12 -1
  124. package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  125. package/lib/MenuPopover/MenuPopoverTokens.android.d.ts +5 -0
  126. package/lib/MenuPopover/MenuPopoverTokens.android.d.ts.map +1 -0
  127. package/lib/MenuPopover/MenuPopoverTokens.android.js +14 -0
  128. package/lib/MenuPopover/MenuPopoverTokens.android.js.map +1 -0
  129. package/lib/MenuPopover/MenuPopoverTokens.d.ts +4 -2
  130. package/lib/MenuPopover/MenuPopoverTokens.d.ts.map +1 -1
  131. package/lib/index.d.ts +1 -1
  132. package/lib/index.d.ts.map +1 -1
  133. package/lib/index.js +1 -1
  134. package/lib/index.js.map +1 -1
  135. package/lib-commonjs/Menu/Menu.d.ts.map +1 -1
  136. package/lib-commonjs/Menu/Menu.js +2 -6
  137. package/lib-commonjs/Menu/Menu.js.map +1 -1
  138. package/lib-commonjs/Menu/Menu.types.d.ts +21 -1
  139. package/lib-commonjs/Menu/Menu.types.d.ts.map +1 -1
  140. package/lib-commonjs/Menu/Menu.types.js +7 -1
  141. package/lib-commonjs/Menu/Menu.types.js.map +1 -1
  142. package/lib-commonjs/Menu/renderMenu.android.d.ts +5 -0
  143. package/lib-commonjs/Menu/renderMenu.android.d.ts.map +1 -0
  144. package/lib-commonjs/Menu/renderMenu.android.js +19 -0
  145. package/lib-commonjs/Menu/renderMenu.android.js.map +1 -0
  146. package/lib-commonjs/Menu/renderMenu.d.ts +5 -0
  147. package/lib-commonjs/Menu/renderMenu.d.ts.map +1 -0
  148. package/lib-commonjs/Menu/renderMenu.js +15 -0
  149. package/lib-commonjs/Menu/renderMenu.js.map +1 -0
  150. package/lib-commonjs/Menu/useMenu.android.d.ts +3 -0
  151. package/lib-commonjs/Menu/useMenu.android.d.ts.map +1 -0
  152. package/lib-commonjs/Menu/useMenu.android.js +261 -0
  153. package/lib-commonjs/Menu/useMenu.android.js.map +1 -0
  154. package/lib-commonjs/MenuCallout/MenuCallout.android.d.ts +4 -0
  155. package/lib-commonjs/MenuCallout/MenuCallout.android.d.ts.map +1 -0
  156. package/lib-commonjs/MenuCallout/MenuCallout.android.js +36 -0
  157. package/lib-commonjs/MenuCallout/MenuCallout.android.js.map +1 -0
  158. package/lib-commonjs/MenuCallout/MenuCallout.d.ts +4 -0
  159. package/lib-commonjs/MenuCallout/MenuCallout.d.ts.map +1 -0
  160. package/lib-commonjs/MenuCallout/MenuCallout.js +18 -0
  161. package/lib-commonjs/MenuCallout/MenuCallout.js.map +1 -0
  162. package/lib-commonjs/MenuCallout/MenuCallout.types.d.ts +18 -0
  163. package/lib-commonjs/MenuCallout/MenuCallout.types.d.ts.map +1 -0
  164. package/lib-commonjs/MenuCallout/MenuCallout.types.js +5 -0
  165. package/lib-commonjs/MenuCallout/MenuCallout.types.js.map +1 -0
  166. package/lib-commonjs/MenuCallout/index.d.ts +4 -0
  167. package/lib-commonjs/MenuCallout/index.d.ts.map +1 -0
  168. package/lib-commonjs/MenuCallout/index.js +8 -0
  169. package/lib-commonjs/MenuCallout/index.js.map +1 -0
  170. package/lib-commonjs/MenuDivider/MenuDivider.d.ts +2 -1
  171. package/lib-commonjs/MenuDivider/MenuDivider.d.ts.map +1 -1
  172. package/lib-commonjs/MenuDivider/MenuDivider.styling.d.ts.map +1 -1
  173. package/lib-commonjs/MenuDivider/MenuDivider.styling.js +4 -8
  174. package/lib-commonjs/MenuDivider/MenuDivider.styling.js.map +1 -1
  175. package/lib-commonjs/MenuDivider/MenuDivider.types.d.ts +6 -1
  176. package/lib-commonjs/MenuDivider/MenuDivider.types.d.ts.map +1 -1
  177. package/lib-commonjs/MenuDivider/MenuDivider.types.js +2 -1
  178. package/lib-commonjs/MenuDivider/MenuDivider.types.js.map +1 -1
  179. package/lib-commonjs/MenuDivider/MenuDividerTokens.android.d.ts +5 -0
  180. package/lib-commonjs/MenuDivider/MenuDividerTokens.android.d.ts.map +1 -0
  181. package/lib-commonjs/MenuDivider/MenuDividerTokens.android.js +11 -0
  182. package/lib-commonjs/MenuDivider/MenuDividerTokens.android.js.map +1 -0
  183. package/lib-commonjs/MenuDivider/index.d.ts +1 -1
  184. package/lib-commonjs/MenuDivider/index.d.ts.map +1 -1
  185. package/lib-commonjs/MenuItem/MenuItem.styling.d.ts.map +1 -1
  186. package/lib-commonjs/MenuItem/MenuItem.styling.js +2 -1
  187. package/lib-commonjs/MenuItem/MenuItem.styling.js.map +1 -1
  188. package/lib-commonjs/MenuItem/MenuItem.types.d.ts +5 -0
  189. package/lib-commonjs/MenuItem/MenuItem.types.d.ts.map +1 -1
  190. package/lib-commonjs/MenuItem/MenuItemTokens.android.d.ts +5 -0
  191. package/lib-commonjs/MenuItem/MenuItemTokens.android.d.ts.map +1 -0
  192. package/lib-commonjs/MenuItem/MenuItemTokens.android.js +24 -0
  193. package/lib-commonjs/MenuItem/MenuItemTokens.android.js.map +1 -0
  194. package/lib-commonjs/MenuItem/useMenuItem.d.ts.map +1 -1
  195. package/lib-commonjs/MenuItem/useMenuItem.js.map +1 -1
  196. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
  197. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js +4 -9
  198. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
  199. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.styling.d.ts.map +1 -1
  200. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.styling.js +25 -20
  201. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.styling.js.map +1 -1
  202. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.types.d.ts +40 -0
  203. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.types.d.ts.map +1 -1
  204. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.android.d.ts +5 -0
  205. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.android.d.ts.map +1 -0
  206. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.android.js +45 -0
  207. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckboxTokens.android.js.map +1 -0
  208. package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts +6 -3
  209. package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts.map +1 -1
  210. package/lib-commonjs/MenuItemRadio/MenuItemRadio.js +39 -10
  211. package/lib-commonjs/MenuItemRadio/MenuItemRadio.js.map +1 -1
  212. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.android.d.ts +6 -0
  213. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.android.d.ts.map +1 -0
  214. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.android.js +60 -0
  215. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.android.js.map +1 -0
  216. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.d.ts +5 -0
  217. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.d.ts.map +1 -0
  218. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.js +40 -0
  219. package/lib-commonjs/MenuItemRadio/MenuItemRadio.styling.js.map +1 -0
  220. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.d.ts +137 -0
  221. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.d.ts.map +1 -0
  222. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.js +5 -0
  223. package/lib-commonjs/MenuItemRadio/MenuItemRadio.types.js.map +1 -0
  224. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.android.d.ts +5 -0
  225. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.android.d.ts.map +1 -0
  226. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.android.js +48 -0
  227. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.android.js.map +1 -0
  228. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.d.ts +5 -0
  229. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.d.ts.map +1 -0
  230. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.js +56 -0
  231. package/lib-commonjs/MenuItemRadio/MenuItemRadioTokens.js.map +1 -0
  232. package/lib-commonjs/MenuItemRadio/index.d.ts +2 -1
  233. package/lib-commonjs/MenuItemRadio/index.d.ts.map +1 -1
  234. package/lib-commonjs/MenuItemRadio/index.js +1 -2
  235. package/lib-commonjs/MenuItemRadio/index.js.map +1 -1
  236. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts +2 -2
  237. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -1
  238. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  239. package/lib-commonjs/MenuList/MenuList.styling.d.ts.map +1 -1
  240. package/lib-commonjs/MenuList/MenuList.styling.js +2 -1
  241. package/lib-commonjs/MenuList/MenuList.styling.js.map +1 -1
  242. package/lib-commonjs/MenuList/MenuList.types.d.ts +6 -0
  243. package/lib-commonjs/MenuList/MenuList.types.d.ts.map +1 -1
  244. package/lib-commonjs/MenuList/MenuListTokens.android.d.ts +5 -0
  245. package/lib-commonjs/MenuList/MenuListTokens.android.d.ts.map +1 -0
  246. package/lib-commonjs/MenuList/MenuListTokens.android.js +11 -0
  247. package/lib-commonjs/MenuList/MenuListTokens.android.js.map +1 -0
  248. package/lib-commonjs/MenuPopover/MenuPopover.d.ts +4 -2
  249. package/lib-commonjs/MenuPopover/MenuPopover.d.ts.map +1 -1
  250. package/lib-commonjs/MenuPopover/MenuPopover.js +2 -2
  251. package/lib-commonjs/MenuPopover/MenuPopover.js.map +1 -1
  252. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts +12 -1
  253. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  254. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.d.ts +5 -0
  255. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.d.ts.map +1 -0
  256. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.js +17 -0
  257. package/lib-commonjs/MenuPopover/MenuPopoverTokens.android.js.map +1 -0
  258. package/lib-commonjs/MenuPopover/MenuPopoverTokens.d.ts +4 -2
  259. package/lib-commonjs/MenuPopover/MenuPopoverTokens.d.ts.map +1 -1
  260. package/lib-commonjs/index.d.ts +1 -1
  261. package/lib-commonjs/index.d.ts.map +1 -1
  262. package/lib-commonjs/index.js +1 -2
  263. package/lib-commonjs/index.js.map +1 -1
  264. package/package.json +2 -2
  265. package/src/Menu/Menu.tsx +3 -13
  266. package/src/Menu/Menu.types.ts +24 -1
  267. package/src/Menu/renderMenu.android.tsx +26 -0
  268. package/src/Menu/renderMenu.tsx +18 -0
  269. package/src/Menu/useMenu.android.ts +325 -0
  270. package/src/MenuCallout/MenuCallout.android.tsx +60 -0
  271. package/src/MenuCallout/MenuCallout.tsx +20 -0
  272. package/src/MenuCallout/MenuCallout.types.ts +22 -0
  273. package/src/MenuCallout/index.ts +3 -0
  274. package/src/MenuDivider/MenuDivider.styling.ts +4 -0
  275. package/src/MenuDivider/MenuDivider.types.ts +7 -1
  276. package/src/MenuDivider/MenuDividerTokens.android.ts +11 -0
  277. package/src/MenuDivider/index.ts +1 -1
  278. package/src/MenuItem/MenuItem.styling.ts +3 -1
  279. package/src/MenuItem/MenuItem.types.ts +6 -0
  280. package/src/MenuItem/MenuItemTokens.android.ts +24 -0
  281. package/src/MenuItem/useMenuItem.ts +0 -1
  282. package/src/MenuItemCheckbox/MenuItemCheckbox.styling.ts +29 -2
  283. package/src/MenuItemCheckbox/MenuItemCheckbox.tsx +15 -2
  284. package/src/MenuItemCheckbox/MenuItemCheckbox.types.ts +47 -0
  285. package/src/MenuItemCheckbox/MenuItemCheckboxTokens.android.ts +46 -0
  286. package/src/MenuItemRadio/MenuItemRadio.styling.android.ts +98 -0
  287. package/src/MenuItemRadio/MenuItemRadio.styling.ts +75 -0
  288. package/src/MenuItemRadio/MenuItemRadio.tsx +68 -9
  289. package/src/MenuItemRadio/MenuItemRadio.types.ts +160 -0
  290. package/src/MenuItemRadio/MenuItemRadioTokens.android.ts +51 -0
  291. package/src/MenuItemRadio/MenuItemRadioTokens.ts +56 -0
  292. package/src/MenuItemRadio/index.ts +9 -1
  293. package/src/MenuItemRadio/useMenuItemRadio.ts +2 -2
  294. package/src/MenuList/MenuList.styling.ts +3 -0
  295. package/src/MenuList/MenuList.types.ts +7 -0
  296. package/src/MenuList/MenuListTokens.android.ts +11 -0
  297. package/src/MenuPopover/MenuPopover.tsx +6 -2
  298. package/src/MenuPopover/MenuPopover.types.ts +14 -1
  299. package/src/MenuPopover/MenuPopoverTokens.android.ts +21 -0
  300. package/src/index.ts +10 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":";;;;AAAA,wDAA0B;AAC1B,6CAA8C;AAE9C,0DAAyD;AAEzD,8DAAyG;AAGzG,yDAAsD;AACtD,yDAA2D;AAC3D,mDAAkD;AAClD,sCAA4C;AAE/B,QAAA,WAAW,GAAG,IAAA,wBAAY,EACrC,UAAC,KAAuB,EAAE,SAAuC;;IACvD,IAAA,eAAe,GAAqG,KAAK,gBAA1G,EAAE,QAAQ,GAA2F,KAAK,SAAhG,EAAE,SAAS,GAAgF,KAAK,UAArF,EAAE,QAAQ,GAAsE,KAAK,SAA3E,EAAE,QAAQ,GAA4D,KAAK,SAAjE,EAAE,UAAU,GAAgD,KAAK,WAArD,EAAE,WAAW,GAAmC,KAAK,YAAxC,EAAE,WAAW,GAAsB,KAAK,YAA3B,EAAE,eAAe,GAAK,KAAK,gBAAV,CAAW;IAClI,IAAM,KAAK,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,IAAA,0BAAc,GAAE,CAAC;IAC/B,IAAM,OAAO,GAAG,IAAA,wBAAc,GAAE,CAAC;IAC7B,IAAA,KAAkB,SAAS,CAAC,KAAK,CAAC,EAAjC,MAAM,QAAA,EAAE,KAAK,QAAoB,CAAC;IAEvC,OAAO,CAAC,YAAY,GAAG,SAAS,IAAI,SAAS,CAAC;IAC9C,OAAO,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,OAAO,CAAC,QAAQ,CAAC;IAEhD,KAAkB,IAAA,uBAAW,EAAC,MAAM,EAAE,KAAK,EAAE;QAC3C,eAAe,iBAAA;QACf,QAAQ,UAAA;QACR,SAAS,WAAA;QACT,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,UAAU,YAAA;QACV,WAAW,aAAA;QACX,WAAW,aAAA;QACX,eAAe,iBAAA;KAChB,CAAC,EAVD,MAAM,QAAA,EAAE,KAAK,QAAA,CAUX;IAEH,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,IAAM,WAAW,GAAG,IAAA,sBAAU,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAM,cAAc;QAClB,uJAAuJ;QACvJ,uBAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,uBAAQ,CAAC,EAAE,KAAM,OAAe;YAC3D,CAAC,uCACM,KAAK,CAAC,SAAS,KAClB,KAAK,EAAE;oBACL,SAAS,EAAE,WAAW,CAAC,SAAS;iBACjC,IAEL,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACtB,IAAM,OAAO,GAAG,eAAK,CAAC,aAAa,CAAC,mBAAI,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,8BAAC,iBAAO,uBAAK,WAAW,GAAG,OAAO,CAAW,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC,EACD,wCAAoB,CACrB,CAAC;AACF,mBAAW,CAAC,WAAW,GAAG,mCAAe,CAAC;AAE1C,kBAAe,mBAAW,CAAC"}
1
+ {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":";;;;AAAA,wDAA0B;AAC1B,6CAA8C;AAG9C,8DAAyG;AAGzG,yDAAsD;AACtD,yDAA2D;AAC3D,mDAAkD;AAClD,sCAA4C;AAC5C,8CAA6C;AAEhC,QAAA,WAAW,GAAG,IAAA,wBAAY,EACrC,UAAC,KAAuB,EAAE,SAAuC;;IACvD,IAAA,eAAe,GAAqG,KAAK,gBAA1G,EAAE,QAAQ,GAA2F,KAAK,SAAhG,EAAE,SAAS,GAAgF,KAAK,UAArF,EAAE,QAAQ,GAAsE,KAAK,SAA3E,EAAE,QAAQ,GAA4D,KAAK,SAAjE,EAAE,UAAU,GAAgD,KAAK,WAArD,EAAE,WAAW,GAAmC,KAAK,YAAxC,EAAE,WAAW,GAAsB,KAAK,YAA3B,EAAE,eAAe,GAAK,KAAK,gBAAV,CAAW;IAClI,IAAM,KAAK,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,IAAA,0BAAc,GAAE,CAAC;IAC/B,IAAM,OAAO,GAAG,IAAA,wBAAc,GAAE,CAAC;IAC7B,IAAA,KAAkB,SAAS,CAAC,KAAK,CAAC,EAAjC,MAAM,QAAA,EAAE,KAAK,QAAoB,CAAC;IAEvC,OAAO,CAAC,YAAY,GAAG,SAAS,IAAI,SAAS,CAAC;IAC9C,OAAO,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,OAAO,CAAC,QAAQ,CAAC;IAEhD,KAAkB,IAAA,uBAAW,EAAC,MAAM,EAAE,KAAK,EAAE;QAC3C,eAAe,iBAAA;QACf,QAAQ,UAAA;QACR,SAAS,WAAA;QACT,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,UAAU,YAAA;QACV,WAAW,aAAA;QACX,WAAW,aAAA;QACX,eAAe,iBAAA;KAChB,CAAC,EAVD,MAAM,QAAA,EAAE,KAAK,QAAA,CAUX;IAEH,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,IAAM,WAAW,GAAG,IAAA,sBAAU,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAM,cAAc;QAClB,uJAAuJ;QACvJ,uBAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,uBAAQ,CAAC,EAAE,KAAM,OAAe;YAC3D,CAAC,uCACM,KAAK,CAAC,SAAS,KAClB,KAAK,EAAE;oBACL,SAAS,EAAE,WAAW,CAAC,SAAS;iBACjC,IAEL,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACtB,IAAM,OAAO,GAAG,eAAK,CAAC,aAAa,CAAC,mBAAI,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,CACL,8BAAC,yBAAW,qBAAC,MAAM,EAAE,MAAM,IAAM,WAAW,GACzC,OAAO,CACI,CACf,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,EACD,wCAAoB,CACrB,CAAC;AACF,mBAAW,CAAC,WAAW,GAAG,mCAAe,CAAC;AAE1C,kBAAe,mBAAW,CAAC"}
@@ -1,7 +1,18 @@
1
1
  import type { IViewProps } from '@fluentui-react-native/adapters';
2
2
  import type { ICalloutProps, ICalloutTokens } from '@fluentui-react-native/callout';
3
3
  export declare const menuPopoverName = "MenuPopover";
4
- export type MenuPopoverTokens = Omit<ICalloutTokens, 'anchorRect' | 'beakWidth' | 'dismissBehaviors'>;
4
+ export type MenuPopoverTokens = Omit<ICalloutTokens, 'anchorRect' | 'beakWidth' | 'dismissBehaviors'> & {
5
+ /**
6
+ * The props for the corner radius for the Modal MenuPopover
7
+ * @platform android
8
+ */
9
+ cornerRadius?: number;
10
+ /**
11
+ * Shadown elevation for the Modal MenuPopover
12
+ * @platform android
13
+ */
14
+ elevation?: number;
15
+ };
5
16
  export type MenuPopoverProps = ICalloutProps;
6
17
  export interface MenuPopoverState {
7
18
  props: ICalloutProps;
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.types.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEpF,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAI7C,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,WAAW,GAAG,kBAAkB,CAAC,CAAC;AAEtG,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;CACvB"}
1
+ {"version":3,"file":"MenuPopover.types.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEpF,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAI7C,MAAM,MAAM,iBAAiB,GACzB,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,WAAW,GAAG,kBAAkB,CAAC,GAAG;IACtE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;CACvB"}
@@ -0,0 +1,5 @@
1
+ export declare const useMenuPopoverTokens: import("@fluentui-react-native/framework").UseTokens<Omit<import("@fluentui-react-native/callout").ICalloutTokens, "anchorRect" | "beakWidth" | "dismissBehaviors"> & {
2
+ cornerRadius?: number;
3
+ elevation?: number;
4
+ }>;
5
+ //# sourceMappingURL=MenuPopoverTokens.android.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuPopoverTokens.android.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopoverTokens.android.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oBAAoB;;;EAWhC,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMenuPopoverTokens = void 0;
4
+ var react_native_1 = require("react-native");
5
+ var framework_1 = require("@fluentui-react-native/framework");
6
+ var theme_tokens_1 = require("@fluentui-react-native/theme-tokens");
7
+ var MenuPopover_types_1 = require("./MenuPopover.types");
8
+ exports.useMenuPopoverTokens = (0, framework_1.buildUseTokens)(function (t) { return ({
9
+ borderWidth: 1,
10
+ borderColor: t.colors.neutralStrokeAccessible,
11
+ maxHeight: react_native_1.Dimensions.get('window').height / 2 - theme_tokens_1.globalTokens.size320,
12
+ maxWidth: react_native_1.Dimensions.get('window').width - theme_tokens_1.globalTokens.size160,
13
+ cornerRadius: theme_tokens_1.globalTokens.corner.radius80,
14
+ elevation: theme_tokens_1.globalTokens.size160,
15
+ minPadding: theme_tokens_1.globalTokens.size160,
16
+ }); }, MenuPopover_types_1.menuPopoverName);
17
+ //# sourceMappingURL=MenuPopoverTokens.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuPopoverTokens.android.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopoverTokens.android.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAG1C,8DAAkE;AAClE,oEAAmE;AAGnE,yDAAsD;AAEzC,QAAA,oBAAoB,GAAG,IAAA,0BAAc,EAChD,UAAC,CAAQ,IAAK,OAAA,CAAC;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,uBAAuB;IAC7C,SAAS,EAAE,yBAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,2BAAY,CAAC,OAAO;IACrE,QAAQ,EAAE,yBAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,2BAAY,CAAC,OAAO;IAC/D,YAAY,EAAE,2BAAY,CAAC,MAAM,CAAC,QAAQ;IAC1C,SAAS,EAAE,2BAAY,CAAC,OAAO;IAC/B,UAAU,EAAE,2BAAY,CAAC,OAAO;CACjC,CAAC,EARY,CAQZ,EACF,mCAAe,CAChB,CAAC"}
@@ -1,3 +1,5 @@
1
- import type { MenuPopoverTokens } from './MenuPopover.types';
2
- export declare const useMenuPopoverTokens: import("@fluentui-react-native/framework").UseTokens<MenuPopoverTokens>;
1
+ export declare const useMenuPopoverTokens: import("@fluentui-react-native/framework").UseTokens<Omit<import("@fluentui-react-native/callout").ICalloutTokens, "anchorRect" | "beakWidth" | "dismissBehaviors"> & {
2
+ cornerRadius?: number;
3
+ elevation?: number;
4
+ }>;
3
5
  //# sourceMappingURL=MenuPopoverTokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopoverTokens.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopoverTokens.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,eAAO,MAAM,oBAAoB,yEAGhC,CAAC"}
1
+ {"version":3,"file":"MenuPopoverTokens.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopoverTokens.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,oBAAoB;;;EAGhC,CAAC"}
@@ -4,7 +4,7 @@ export { MenuTrigger, menuTriggerName, MenuTriggerChildProps, MenuTriggerState,
4
4
  export { MenuPopover, menuPopoverName, MenuPopoverProps, MenuPopoverState, MenuPopoverTokens, useMenuPopover } from './MenuPopover';
5
5
  export { MenuItem, menuItemName, MenuItemProps, MenuItemState, MenuItemInfo, MenuItemSlotProps, MenuItemTokens, MenuItemType, useMenuItem, } from './MenuItem';
6
6
  export { MenuItemCheckbox, menuItemCheckboxName, MenuItemCheckboxProps, MenuItemCheckboxInfo, MenuItemCheckboxSlotProps, MenuItemCheckboxTokens, MenuItemCheckboxType, useMenuCheckboxInteraction, useMenuItemCheckbox, } from './MenuItemCheckbox';
7
- export { MenuItemRadio, menuItemRadioName, useMenuItemRadio } from './MenuItemRadio';
7
+ export { MenuItemRadio, menuItemRadioName, useMenuItemRadio, MenuItemRadioInfo, MenuItemRadioProps, MenuItemRadioSlotProps, MenuItemRadioTokens, MenuItemRadioType, } from './MenuItemRadio';
8
8
  export { MenuList, menuListName, MenuListProps, MenuListSlotProps, MenuListState, MenuListTokens, MenuListType, useMenuList, useMenuListContextValue, } from './MenuList';
9
9
  export { MenuDivider, menuDividerName, MenuDividerProps, MenuDividerSlotProps, MenuDividerTokens, MenuDividerType } from './MenuDivider';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpI,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpI,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.menuDividerName = exports.MenuDivider = exports.useMenuListContextValue = exports.useMenuList = exports.menuListName = exports.MenuList = exports.useMenuItemRadio = exports.menuItemRadioName = exports.MenuItemRadio = exports.useMenuItemCheckbox = exports.useMenuCheckboxInteraction = exports.menuItemCheckboxName = exports.MenuItemCheckbox = exports.useMenuItem = exports.menuItemName = exports.MenuItem = exports.useMenuPopover = exports.menuPopoverName = exports.MenuPopover = exports.useMenuTrigger = exports.menuTriggerName = exports.MenuTrigger = exports.useMenuContextValue = exports.useMenu = exports.menuName = exports.Menu = exports.MenuTriggerProvider = exports.MenuTriggerContext = exports.useMenuTriggerContext = exports.MenuListProvider = exports.MenuListContext = exports.useMenuListContext = exports.MenuProvider = exports.MenuContext = exports.useMenuContext = void 0;
3
+ exports.menuDividerName = exports.MenuDivider = exports.useMenuListContextValue = exports.useMenuList = exports.menuListName = exports.MenuList = exports.useMenuItemRadio = exports.MenuItemRadio = exports.useMenuItemCheckbox = exports.useMenuCheckboxInteraction = exports.menuItemCheckboxName = exports.MenuItemCheckbox = exports.useMenuItem = exports.menuItemName = exports.MenuItem = exports.useMenuPopover = exports.menuPopoverName = exports.MenuPopover = exports.useMenuTrigger = exports.menuTriggerName = exports.MenuTrigger = exports.useMenuContextValue = exports.useMenu = exports.menuName = exports.Menu = exports.MenuTriggerProvider = exports.MenuTriggerContext = exports.useMenuTriggerContext = exports.MenuListProvider = exports.MenuListContext = exports.useMenuListContext = exports.MenuProvider = exports.MenuContext = exports.useMenuContext = void 0;
4
4
  var context_1 = require("./context");
5
5
  Object.defineProperty(exports, "useMenuContext", { enumerable: true, get: function () { return context_1.useMenuContext; } });
6
6
  Object.defineProperty(exports, "MenuContext", { enumerable: true, get: function () { return context_1.MenuContext; } });
@@ -35,7 +35,6 @@ Object.defineProperty(exports, "useMenuCheckboxInteraction", { enumerable: true,
35
35
  Object.defineProperty(exports, "useMenuItemCheckbox", { enumerable: true, get: function () { return MenuItemCheckbox_1.useMenuItemCheckbox; } });
36
36
  var MenuItemRadio_1 = require("./MenuItemRadio");
37
37
  Object.defineProperty(exports, "MenuItemRadio", { enumerable: true, get: function () { return MenuItemRadio_1.MenuItemRadio; } });
38
- Object.defineProperty(exports, "menuItemRadioName", { enumerable: true, get: function () { return MenuItemRadio_1.menuItemRadioName; } });
39
38
  Object.defineProperty(exports, "useMenuItemRadio", { enumerable: true, get: function () { return MenuItemRadio_1.useMenuItemRadio; } });
40
39
  var MenuList_1 = require("./MenuList");
41
40
  Object.defineProperty(exports, "MenuList", { enumerable: true, get: function () { return MenuList_1.MenuList; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAYmB;AAXjB,yGAAA,cAAc,OAAA;AACd,sGAAA,WAAW,OAAA;AAEX,uGAAA,YAAY,OAAA;AACZ,6GAAA,kBAAkB,OAAA;AAClB,0GAAA,eAAe,OAAA;AAEf,2GAAA,gBAAgB,OAAA;AAChB,gHAAA,qBAAqB,OAAA;AACrB,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AAErB,+BAA4F;AAAnF,4FAAA,IAAI,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAwB,+FAAA,OAAO,OAAA;AAAE,2GAAA,mBAAmB,OAAA;AAC3E,6CAAsH;AAA7G,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA;AAA2C,6GAAA,cAAc,OAAA;AAC9F,6CAAoI;AAA3H,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAyD,6GAAA,cAAc,OAAA;AAC5G,uCAUoB;AATlB,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AAOZ,uGAAA,WAAW,OAAA;AAEb,uDAU4B;AAT1B,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AAMpB,8HAAA,0BAA0B,OAAA;AAC1B,uHAAA,mBAAmB,OAAA;AAErB,iDAAqF;AAA5E,8GAAA,aAAa,OAAA;AAAE,kHAAA,iBAAiB,OAAA;AAAE,iHAAA,gBAAgB,OAAA;AAC3D,uCAUoB;AATlB,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AAMZ,uGAAA,WAAW,OAAA;AACX,mHAAA,uBAAuB,OAAA;AAEzB,6CAAyI;AAAhI,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAYmB;AAXjB,yGAAA,cAAc,OAAA;AACd,sGAAA,WAAW,OAAA;AAEX,uGAAA,YAAY,OAAA;AACZ,6GAAA,kBAAkB,OAAA;AAClB,0GAAA,eAAe,OAAA;AAEf,2GAAA,gBAAgB,OAAA;AAChB,gHAAA,qBAAqB,OAAA;AACrB,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AAErB,+BAA4F;AAAnF,4FAAA,IAAI,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAwB,+FAAA,OAAO,OAAA;AAAE,2GAAA,mBAAmB,OAAA;AAC3E,6CAAsH;AAA7G,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA;AAA2C,6GAAA,cAAc,OAAA;AAC9F,6CAAoI;AAA3H,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAyD,6GAAA,cAAc,OAAA;AAC5G,uCAUoB;AATlB,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AAOZ,uGAAA,WAAW,OAAA;AAEb,uDAU4B;AAT1B,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AAMpB,8HAAA,0BAA0B,OAAA;AAC1B,uHAAA,mBAAmB,OAAA;AAErB,iDASyB;AARvB,8GAAA,aAAa,OAAA;AAEb,iHAAA,gBAAgB,OAAA;AAOlB,uCAUoB;AATlB,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AAMZ,uGAAA,WAAW,OAAA;AACX,mHAAA,uBAAuB,OAAA;AAEzB,6CAAyI;AAAhI,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui-react-native/menu",
3
- "version": "1.4.34",
3
+ "version": "1.6.0",
4
4
  "description": "A cross-platform Menu component using the Fluent Design System",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -35,7 +35,7 @@
35
35
  "tslib": "^2.3.1"
36
36
  },
37
37
  "devDependencies": {
38
- "@fluentui-react-native/button": ">=0.32.49 <1.0.0",
38
+ "@fluentui-react-native/button": ">=0.32.50 <1.0.0",
39
39
  "@fluentui-react-native/eslint-config-rules": "^0.1.1",
40
40
  "@fluentui-react-native/scripts": "^0.1.1",
41
41
  "@fluentui-react-native/test-tools": ">=0.1.1 <1.0.0",
package/src/Menu/Menu.tsx CHANGED
@@ -4,9 +4,9 @@ import { stagedComponent } from '@fluentui-react-native/framework';
4
4
 
5
5
  import type { MenuProps } from './Menu.types';
6
6
  import { menuName } from './Menu.types';
7
+ import { renderFinalMenu } from './renderMenu';
7
8
  import { useMenu } from './useMenu';
8
9
  import { useMenuContextValue } from './useMenuContextValue';
9
- import { MenuProvider } from '../context/menuContext';
10
10
 
11
11
  export const Menu = stagedComponent((props: MenuProps) => {
12
12
  const state = useMenu(props);
@@ -21,20 +21,10 @@ export const Menu = stagedComponent((props: MenuProps) => {
21
21
  console.warn('Menu must contain two children');
22
22
  }
23
23
  }
24
-
25
- const menuTrigger = childrenArray[0];
26
- const menuPopover = childrenArray[1];
27
-
28
- return (
29
- <MenuProvider value={contextValue}>
30
- {menuTrigger}
31
- {/* GH#2661: Make sure that shouldFocusOnContainer is defined before initializing
32
- the popover so that focus is put in the correct place */}
33
- {state.open && state.shouldFocusOnContainer !== undefined && menuPopover}
34
- </MenuProvider>
35
- );
24
+ return renderFinalMenu(childrenArray, contextValue, state);
36
25
  };
37
26
  });
27
+
38
28
  Menu.displayName = menuName;
39
29
 
40
30
  export default Menu;
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- import type { View } from 'react-native';
2
+ import type { Animated, LayoutChangeEvent, View } from 'react-native';
3
3
 
4
4
  import type { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
5
5
 
@@ -15,6 +15,7 @@ export interface MenuProps extends MenuListProps {
15
15
 
16
16
  /**
17
17
  * How much delay to have between hover in and showing the menu, in ms.
18
+ * @platform win32, macOS
18
19
  */
19
20
  hoverDelay?: number;
20
21
 
@@ -30,6 +31,7 @@ export interface MenuProps extends MenuListProps {
30
31
 
31
32
  /*
32
33
  * Opens the menu on hovering over the trigger
34
+ * @platform win32, macOS
33
35
  */
34
36
  openOnHover?: boolean;
35
37
 
@@ -39,6 +41,11 @@ export interface MenuProps extends MenuListProps {
39
41
  persistOnItemClick?: boolean;
40
42
  }
41
43
 
44
+ export type MenuSizeType = {
45
+ width: Animated.Value;
46
+ height: Animated.Value;
47
+ };
48
+
42
49
  export interface MenuState extends MenuProps {
43
50
  isControlled: boolean;
44
51
  isSubmenu: boolean;
@@ -48,4 +55,20 @@ export interface MenuState extends MenuProps {
48
55
  triggerRef: React.RefObject<View>;
49
56
  hasMaxHeight?: boolean;
50
57
  hasMaxWidth?: boolean;
58
+ setAnchorWidth?: (value: null | number | ((prevState: null | number) => null | number)) => void;
59
+ shadowMenuContainerStyle?: object;
60
+ _container?: React.MutableRefObject<View>;
61
+ onRequestClose?: (e: InteractionEvent) => void;
62
+ onMenuLayout?: (e: LayoutChangeEvent) => void;
63
+ menuHeight?: number;
64
+ maxMenuHeight?: number;
65
+ animationStarted?: boolean;
66
+ menuSize?: MenuSizeType;
67
+ testID?: string;
68
+ }
69
+
70
+ export enum AndroidMenuStates {
71
+ Hidden,
72
+ Animating,
73
+ Shown,
51
74
  }
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+
4
+ import type { MenuState } from './Menu.types';
5
+ import type { MenuContextValue } from '../context';
6
+ import { MenuProvider } from '../context';
7
+
8
+ export const renderFinalMenu = (childrenArray: React.ReactElement[], contextValue: MenuContextValue, state: MenuState) => {
9
+ const menuTrigger = childrenArray[0];
10
+ const menuPopover = childrenArray[1];
11
+ return (
12
+ <MenuProvider value={contextValue}>
13
+ <View
14
+ onLayout={(event) => {
15
+ const { width } = event.nativeEvent.layout;
16
+ state.setAnchorWidth(width);
17
+ }}
18
+ >
19
+ {menuTrigger}
20
+ </View>
21
+ <View ref={state._container} collapsable={false} testID={state.testID}>
22
+ {state.open && menuPopover}
23
+ </View>
24
+ </MenuProvider>
25
+ );
26
+ };
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+
3
+ import type { MenuState } from './Menu.types';
4
+ import type { MenuContextValue } from '../context';
5
+ import { MenuProvider } from '../context';
6
+
7
+ export const renderFinalMenu = (childrenArray: React.ReactElement[], contextValue: MenuContextValue, state: MenuState) => {
8
+ const menuTrigger = childrenArray[0];
9
+ const menuPopover = childrenArray[1];
10
+ return (
11
+ <MenuProvider value={contextValue}>
12
+ {menuTrigger}
13
+ {/* GH#2661: Make sure that shouldFocusOnContainer is defined before initializing
14
+ the popover so that focus is put in the correct place */}
15
+ {state.open && state.shouldFocusOnContainer !== undefined && menuPopover}
16
+ </MenuProvider>
17
+ );
18
+ };
@@ -0,0 +1,325 @@
1
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
2
+ import type { LayoutChangeEvent, View } from 'react-native';
3
+ import { Animated, Dimensions, Easing, I18nManager, StatusBar } from 'react-native';
4
+
5
+ import type { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
6
+
7
+ import type { MenuProps, MenuState } from './Menu.types';
8
+ import { AndroidMenuStates } from './Menu.types';
9
+ import { useMenuContext } from '../context/menuContext';
10
+
11
+ // Due to how events get fired we get double notifications
12
+ // for the same event causing us to immediately reopen
13
+ // a menu when we close it. Adding in a delay to prevent
14
+ // this behavior.
15
+ // This are use when show() function is called to show the Menu
16
+ const delayOpen = 150;
17
+ let lastCloseTimestamp = -1;
18
+
19
+ /**
20
+ * Values related to Screen Width and Animation Easing
21
+ */
22
+
23
+ // Animated easing value for Menu transitions(close and open)
24
+ const EASING = Easing.bezier(0.4, 0, 0.2, 1);
25
+
26
+ // Screen indent is the fixed value according to Android guidelines which depicts the minimum distance from screen edge Menu should have
27
+ const SCREEN_INDENT = 16;
28
+
29
+ export const useMenu = (props: MenuProps): MenuState => {
30
+ /**
31
+ * State , Ref and Context Values for Menu Container and Anchor
32
+ */
33
+
34
+ const triggerRef = React.useRef();
35
+ const context = useMenuContext();
36
+ const isSubmenu = context.triggerRef !== null;
37
+ const isOpenControlled = typeof props.open !== 'undefined';
38
+ const _container = useRef<View>(null);
39
+ const [menuState, setMenuState] = React.useState<AndroidMenuStates>(AndroidMenuStates.Hidden);
40
+
41
+ /**
42
+ * Call for useMenuCheckedState for identifying if any MenuItemCheckbox is checked or not
43
+ */
44
+ const [checked, onCheckedChange] = useMenuCheckedState(props);
45
+
46
+ /**
47
+ * State Variables related to Height,Width and Position of the Menu Popover
48
+ */
49
+ const [maxMenuHeight] = useState(250);
50
+ const [anchorWidth, setAnchorWidth] = React.useState<number>(0);
51
+ const [left, setLeft] = React.useState<number>(0);
52
+ const [menuHeight, setMenuHeight] = React.useState<number>(0);
53
+ const [menuWidth, setMenuWidth] = React.useState<number>(0);
54
+ const [top, setTop] = React.useState<number>(0);
55
+
56
+ /**
57
+ * Animation value for the Menu popover show,hide and opacity values
58
+ */
59
+ const [menuSizeAnimation, setMenuSizeAnimation] = React.useState<Animated.ValueXY>(new Animated.ValueXY({ x: 0, y: 0 }));
60
+ const [opacityAnimation, setOpacityAnimation] = React.useState<Animated.Value>(new Animated.Value(0));
61
+
62
+ /**
63
+ * RTL for the MenuItem needs to taken care as well.
64
+ */
65
+ const { isRTL } = I18nManager;
66
+
67
+ /**
68
+ * Calcualations related to Menu Popver position and dimensions
69
+ */
70
+ const dimensions = Dimensions.get('screen');
71
+ const { width: windowWidth } = dimensions;
72
+ const windowHeight = dimensions.height - (StatusBar.currentHeight || 0);
73
+ const menuSize = {
74
+ width: menuSizeAnimation.x,
75
+ height: menuSizeAnimation.y,
76
+ };
77
+
78
+ /**
79
+ * show function handles the opening of the Menu , it calcuates the position of the Anchor in the screen.
80
+ * It also sets the Anchor width and change the state of the Popover
81
+ */ /**
82
+ * show function handles the opening of the Menu , it calcuates the position of the Anchor in the screen.
83
+ * It also sets the Anchor width and change the state of the Popover
84
+ */
85
+
86
+ const show = React.useCallback(() => {
87
+ _container.current?.measureInWindow((left, top, buttonWidth, buttonHeight) => {
88
+ setAnchorWidth(buttonWidth);
89
+ setLeft(left);
90
+ setMenuState(AndroidMenuStates.Shown);
91
+ setTop(top + buttonHeight);
92
+ });
93
+ }, []);
94
+
95
+ /**
96
+ * hide function handles the hiding of the Menu when user clicks on the scrim outside Menu or MenuItems such as (MenuItemRadio, MenuItem)
97
+ */
98
+ const hide = React.useCallback(() => {
99
+ Animated.timing(opacityAnimation, {
100
+ toValue: 0,
101
+ duration: 250,
102
+ easing: EASING,
103
+ useNativeDriver: false,
104
+ }).start(() => {
105
+ // Reset state
106
+ setMenuState(AndroidMenuStates.Hidden);
107
+ setMenuSizeAnimation(new Animated.ValueXY({ x: 0, y: 0 }));
108
+ setOpacityAnimation(new Animated.Value(0));
109
+ });
110
+ }, [opacityAnimation]);
111
+
112
+ // Hook to maintain the state of the Menu for non controlled and controlled components.
113
+ const [open, shouldFocusOnContainer, setOpen] = useMenuOpenState(isOpenControlled, props, context.setOpen, hide, show);
114
+
115
+ /**
116
+ * Checks the value of the open props and show the menu accordingly
117
+ */
118
+ useEffect(() => {
119
+ if (props.open) {
120
+ show();
121
+ }
122
+ }, [props.open]);
123
+
124
+ /**
125
+ * onMenuLayout handles the start of the Animation when anchor is clicked
126
+ */
127
+ const onMenuLayout = React.useCallback(
128
+ (e: LayoutChangeEvent) => {
129
+ if (menuState === AndroidMenuStates.Animating) {
130
+ return;
131
+ }
132
+ const { width, height } = e.nativeEvent.layout;
133
+ setMenuHeight(height);
134
+ setMenuWidth(width);
135
+ setMenuState(AndroidMenuStates.Animating);
136
+ Animated.parallel([
137
+ Animated.timing(menuSizeAnimation, {
138
+ toValue: { x: width, y: height },
139
+ duration: 100,
140
+ easing: EASING,
141
+ useNativeDriver: false,
142
+ }),
143
+ Animated.timing(opacityAnimation, {
144
+ toValue: 1,
145
+ duration: 100,
146
+ easing: EASING,
147
+ useNativeDriver: false,
148
+ }),
149
+ ]).start();
150
+ },
151
+ [menuSizeAnimation, menuState, opacityAnimation],
152
+ );
153
+
154
+ /**
155
+ * onRequestClose handles the closing of the Menu when the MenuItem or scrim or outside is clicked
156
+ */
157
+ const onRequestClose = (e: InteractionEvent) => {
158
+ setOpen(e, false, false);
159
+ };
160
+
161
+ // Adjust position of menu
162
+ const transforms = [];
163
+
164
+ useMemo(() => {
165
+ /**
166
+ * If the Menu width and SCREEN_INDENT cross the screen width then the Menu will be adjusted to the oppostion left side of the screen
167
+ */
168
+ if ((isRTL && left + anchorWidth - menuWidth > SCREEN_INDENT) || (!isRTL && left + menuWidth > windowWidth - SCREEN_INDENT)) {
169
+ transforms.push({
170
+ translateX: Animated.multiply(menuSizeAnimation.x, -1),
171
+ });
172
+ } else if (left < SCREEN_INDENT) {
173
+ // Setting the left podition of the Menu if the left positon is less than screen indent
174
+ setLeft(SCREEN_INDENT);
175
+ }
176
+
177
+ // Flip by Y axis if menu hits bottom screen border
178
+ if (top + menuHeight + SCREEN_INDENT > windowHeight) {
179
+ if (menuHeight > maxMenuHeight) {
180
+ transforms.push({
181
+ translateY: Animated.multiply(menuSizeAnimation.y, -1),
182
+ });
183
+ } else {
184
+ transforms.push({
185
+ translateY: Animated.multiply(menuSizeAnimation.y, -1),
186
+ });
187
+ }
188
+ } else if (top < SCREEN_INDENT) {
189
+ setTop(SCREEN_INDENT);
190
+ }
191
+ }, [
192
+ anchorWidth,
193
+ isRTL,
194
+ left,
195
+ maxMenuHeight,
196
+ menuHeight,
197
+ menuSizeAnimation.x,
198
+ menuSizeAnimation.y,
199
+ menuWidth,
200
+ top,
201
+ transforms,
202
+ windowHeight,
203
+ windowWidth,
204
+ ]);
205
+
206
+ /**
207
+ * Styles to be applied on the Modal Popover Animated.View
208
+ */
209
+ const shadowMenuContainerStyle = useMemo(() => {
210
+ return {
211
+ opacity: opacityAnimation,
212
+ transform: transforms,
213
+ top,
214
+ // Switch left to right for rtl devices
215
+ ...(isRTL ? { right: left } : { left }),
216
+ };
217
+ }, [isRTL, left, opacityAnimation, top, transforms]);
218
+
219
+ /**
220
+ * handles the state when menu is opening or closing with Animation
221
+ */
222
+ const animationStarted = menuState === AndroidMenuStates.Animating;
223
+ const { testID } = props;
224
+
225
+ // Default behavior for submenu is to open on hover
226
+ // the ...props line below will override this behavior for a submenu
227
+ // or apply openOnHover if passed into a root Menu.
228
+ const openOnHover = isSubmenu;
229
+ // We need to be able to cancel the timer that gets set on
230
+ // hover out of the parent popover if the parent popover
231
+ // is also set to open/close on hover out. Otherwise
232
+ // the parent menu will close when the timeout passes.
233
+ const parentPopoverHoverOutTimer = isSubmenu ? context.popoverHoverOutTimer : undefined;
234
+ return {
235
+ openOnHover,
236
+ ...props,
237
+ open,
238
+ setOpen,
239
+ shouldFocusOnContainer,
240
+ triggerRef,
241
+ isSubmenu,
242
+ isControlled: isOpenControlled,
243
+ parentPopoverHoverOutTimer,
244
+ setAnchorWidth,
245
+ shadowMenuContainerStyle,
246
+ _container,
247
+ onRequestClose,
248
+ onMenuLayout,
249
+ checked,
250
+ onCheckedChange,
251
+ menuHeight,
252
+ maxMenuHeight,
253
+ animationStarted,
254
+ menuSize,
255
+ testID,
256
+ };
257
+ };
258
+
259
+ /**
260
+ * useMenuOpenState handles the open and closing of the Menu based on the click
261
+ * It also takes care of Controlled Menu component by checking open variable
262
+ *
263
+ */
264
+ const useMenuOpenState = (
265
+ isControlled: boolean,
266
+ props: MenuProps,
267
+ parentSetOpen: (e: InteractionEvent, isOpen: boolean, bubble?: boolean) => void,
268
+ hide: () => void,
269
+ show: () => void,
270
+ ): [boolean, boolean, (e: InteractionEvent, isOpen: boolean, bubble?: boolean) => void] => {
271
+ const { defaultOpen, onOpenChange, open } = props;
272
+ const initialState = typeof defaultOpen !== 'undefined' ? defaultOpen : !!open;
273
+ const [openInternal, setOpenInternal] = React.useState<boolean>(initialState);
274
+ const [shouldFocusOnContainer, setShouldFocusOnContainer] = React.useState<boolean | undefined>(undefined);
275
+ const state = isControlled ? open : openInternal;
276
+
277
+ /**
278
+ * setOpen handles the open of the Menu and setting focus on the Popover container
279
+ */
280
+ const setOpen = React.useCallback(
281
+ (e: InteractionEvent, isOpen: boolean, bubble?: boolean) => {
282
+ const openPrev = state;
283
+ if (!isControlled && (!isOpen || lastCloseTimestamp + delayOpen <= Date.now())) {
284
+ setOpenInternal(isOpen);
285
+ }
286
+ if (isOpen) {
287
+ show();
288
+ setShouldFocusOnContainer(true);
289
+ }
290
+ if (!isOpen) {
291
+ setShouldFocusOnContainer(undefined);
292
+ lastCloseTimestamp = Date.now();
293
+ hide();
294
+ }
295
+ if (onOpenChange && openPrev !== isOpen) {
296
+ onOpenChange(e, isOpen);
297
+ }
298
+ if (bubble && parentSetOpen && !isControlled) {
299
+ parentSetOpen(e, isOpen, bubble);
300
+ }
301
+ },
302
+ [state, onOpenChange, parentSetOpen, show, hide],
303
+ );
304
+ return [state, shouldFocusOnContainer, setOpen];
305
+ };
306
+
307
+ /**
308
+ * Call for useMenuCheckedState for identifying if any MenuItemCheckbox is checked or not
309
+ */
310
+ const useMenuCheckedState = (props: MenuProps): [string[], (e: InteractionEvent, checked: string[]) => void] => {
311
+ const { checked, defaultChecked, onCheckedChange: onCheckedChangeOriginal } = props;
312
+ const [checkedInternal, setCheckedInternal] = React.useState(defaultChecked ?? checked ?? []);
313
+ const isControlled = typeof checked !== 'undefined';
314
+ const state = isControlled ? checked : checkedInternal;
315
+ const onCheckedChange = React.useCallback(
316
+ (e: InteractionEvent, checked: string[]) => {
317
+ if (!isControlled) {
318
+ setCheckedInternal(checked);
319
+ }
320
+ onCheckedChangeOriginal?.(e, checked);
321
+ },
322
+ [isControlled, setCheckedInternal, onCheckedChangeOriginal],
323
+ );
324
+ return [state, onCheckedChange];
325
+ };