@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,17 +1,76 @@
1
- import type { UseSlots } from '@fluentui-react-native/framework';
1
+ /** @jsx withSlots */
2
+ import React from 'react';
3
+ import { Image, Platform, Pressable, View } from 'react-native';
2
4
 
3
- import { useMenuItemRadio } from './useMenuItemRadio';
4
- import { MenuItemCheckbox, menuItemFinalRender } from '../MenuItemCheckbox/MenuItemCheckbox';
5
- import type { MenuItemCheckboxProps, MenuItemCheckboxType } from '../MenuItemCheckbox/MenuItemCheckbox.types';
5
+ import type { Slots, UseSlots } from '@fluentui-react-native/framework';
6
+ import { compose, mergeProps, withSlots } from '@fluentui-react-native/framework';
7
+ import { IconV1 as Icon } from '@fluentui-react-native/icon';
8
+ import { TextV1 as Text } from '@fluentui-react-native/text';
9
+ import { SvgXml } from 'react-native-svg';
6
10
 
7
- export const menuItemRadioName = 'MenuItemRadio';
11
+ import { stylingSettings } from './MenuItemRadio.styling';
12
+ import type { MenuItemRadioInfo, MenuItemRadioProps, MenuItemRadioSlotProps, MenuItemRadioType } from './MenuItemRadio.types';
13
+ import { menuItemRadioName } from './MenuItemRadio.types';
14
+ import { useMenuItemRadio } from './useMenuItemRadio';
15
+ import { getAccessibilityLabel, getTooltip } from '../MenuItem/MenuItem';
8
16
 
9
- export const MenuItemRadio = MenuItemCheckbox.compose({
17
+ export const MenuItemRadio = compose<MenuItemRadioType>({
10
18
  displayName: menuItemRadioName,
11
- useRender: (userProps: MenuItemCheckboxProps, useSlots: UseSlots<MenuItemCheckboxType>) => {
19
+ ...stylingSettings,
20
+ slots: {
21
+ root: Pressable,
22
+ radioInnerCircle: View,
23
+ radioButton: Pressable,
24
+ checkmark: SvgXml,
25
+ content: Text,
26
+ iconPlaceholder: View,
27
+ imgIcon: Image,
28
+ fontOrSvgIcon: Icon,
29
+ },
30
+ useRender: (userProps: MenuItemRadioProps, useSlots: UseSlots<MenuItemRadioType>) => {
12
31
  const menuItem = useMenuItemRadio(userProps);
13
- const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer]);
32
+ const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer] || userProps[layer]);
14
33
 
15
- return menuItemFinalRender(menuItem, Slots);
34
+ return menuItemRadioFinalRender(menuItem, Slots);
16
35
  },
17
36
  });
37
+
38
+ export const menuItemRadioFinalRender = (
39
+ menuItem: MenuItemRadioInfo,
40
+ Slots: Slots<MenuItemRadioSlotProps>,
41
+ ): React.FunctionComponent<MenuItemRadioProps> => {
42
+ return (final: MenuItemRadioProps, children: React.ReactNode) => {
43
+ const { accessibilityLabel, icon, tooltip, ...mergedProps } = mergeProps(menuItem.props, final);
44
+
45
+ const checkmarkXml = `
46
+ <svg>
47
+ <path fill='currentColor' d='M9.85355 3.14645C10.0488 3.34171 10.0488 3.65829 9.85355 3.85355L5.35355 8.35355C5.15829 8.54882 4.84171 8.54882 4.64645 8.35355L2.64645 6.35355C2.45118 6.15829 2.45118 5.84171 2.64645 5.64645C2.84171 5.45118 3.15829 5.45118 3.35355 5.64645L5 7.29289L9.14645 3.14645C9.34171 2.95118 9.65829 2.95118 9.85355 3.14645Z' />
48
+ </svg>`;
49
+
50
+ const label = getAccessibilityLabel(accessibilityLabel, children[0]);
51
+ const tooltipResult = getTooltip(tooltip, menuItem.state.hasTooltips, children[0]);
52
+
53
+ return (
54
+ <Slots.root {...mergedProps} accessibilityLabel={label}>
55
+ {Platform.OS === 'android' ? (
56
+ <Slots.radioButton onPress={mergedProps.onPress} accessible={false} focusable={false}>
57
+ <Slots.radioInnerCircle />
58
+ </Slots.radioButton>
59
+ ) : (
60
+ <Slots.checkmark accessible={false} xml={checkmarkXml} />
61
+ )}
62
+ {(icon || menuItem.state.hasIcons) && (
63
+ <Slots.iconPlaceholder accessible={false}>
64
+ {icon && icon.source && <Slots.imgIcon accessible={false} {...icon} />}
65
+ {icon && (icon.svgSource || icon.fontSource) && <Slots.fontOrSvgIcon accessible={false} {...icon} />}
66
+ </Slots.iconPlaceholder>
67
+ )}
68
+ {children && (
69
+ <Slots.content accessible={false} tooltip={tooltipResult}>
70
+ {children}
71
+ </Slots.content>
72
+ )}
73
+ </Slots.root>
74
+ );
75
+ };
76
+ };
@@ -0,0 +1,160 @@
1
+ import type * as React from 'react';
2
+ import type { ColorValue, ImageProps, ViewStyle } from 'react-native';
3
+
4
+ import type { IViewProps } from '@fluentui-react-native/adapters';
5
+ import type { IconPropsV1 as IconProps } from '@fluentui-react-native/icon';
6
+ import type { PressablePropsExtended, PressableState } from '@fluentui-react-native/interactive-hooks';
7
+ import type { TextProps } from '@fluentui-react-native/text';
8
+ import type { XmlProps } from 'react-native-svg';
9
+
10
+ import type { MenuItemProps, MenuItemTokens } from '../MenuItem/MenuItem.types';
11
+
12
+ export const menuItemRadioName = 'MenuItemRadio';
13
+
14
+ export interface MenuItemRadioTokens
15
+ extends Omit<MenuItemTokens, 'submenuIndicatorPadding' | 'submenuIndicatorSize' | 'disabled' | 'focused' | 'hovered' | 'pressed'> {
16
+ /**
17
+ * Color of the checkmark icon
18
+ */
19
+ checkmarkColor?: ColorValue;
20
+
21
+ /**
22
+ * Amount of space in pixels around the checkmark icon
23
+ */
24
+ checkmarkPadding?: number;
25
+
26
+ /**
27
+ * Visibility of the checkmark icon from 0 to 1
28
+ */
29
+ checkmarkVisibility?: number;
30
+
31
+ /**
32
+ * Color of the icon
33
+ */
34
+ iconColor?: ColorValue;
35
+
36
+ /**
37
+ * Size of the icon. Pixels for SVG and points for font icon.
38
+ */
39
+ iconSize?: number;
40
+
41
+ /**
42
+ * Ripple color for Android.
43
+ *
44
+ * A ripple animation is shown on click for Android. This sets the color of the ripple.
45
+ * @platform android
46
+ */
47
+ rippleColor?: ColorValue;
48
+
49
+ /**
50
+ * Color of the background of the box containing the radio.
51
+ * @platform android
52
+ */
53
+ radioBackgroundColor?: ColorValue;
54
+
55
+ /**
56
+ * Color of the border of the box containing the radio.
57
+ * @platform android
58
+ */
59
+ radioBorderColor?: ColorValue;
60
+
61
+ /**
62
+ * Border radius of the box containing the radio.
63
+ * @platform android
64
+ */
65
+ radioBorderRadius?: number;
66
+
67
+ /**
68
+ * Height and width of the box containing the radio.
69
+ * @platform android
70
+ */
71
+ radioSize?: number;
72
+
73
+ /**
74
+ * Indicator radio border color
75
+ * @platform android
76
+ */
77
+ radioBorder?: ColorValue;
78
+
79
+ /**
80
+ * Indicator radio border style
81
+ * @platform android
82
+ */
83
+ radioBorderStyle?: ViewStyle['borderStyle'];
84
+
85
+ /**
86
+ * Inner circle color when selected
87
+ * @platform android
88
+ */
89
+ radioFill?: ColorValue;
90
+
91
+ /**
92
+ * Visibility of the radio inner circle from 0 to 1
93
+ * @platform android
94
+ */
95
+ radioVisibility?: number;
96
+
97
+ /**
98
+ * Diameter size of the outer indicator
99
+ * @platform android
100
+ */
101
+ radioOuterCircleSize?: number;
102
+
103
+ /**
104
+ * Diameter size of the inner circle indicator
105
+ * @platform android
106
+ */
107
+ radioInnerCircleSize?: number;
108
+
109
+ /**
110
+ * Border width of Radio
111
+ * @platform android
112
+ */
113
+ radioBorderWidth?: number;
114
+
115
+ /**
116
+ * Ripple radius for circular radio on Android.
117
+ *
118
+ * A ripple animation is shown on click for Android. This sets the radius of the circular ripple shown on the radio button.
119
+ * @platform android
120
+ */
121
+ rippleRadius?: number;
122
+
123
+ /**
124
+ * States of the item control
125
+ */
126
+ checked?: MenuItemRadioTokens;
127
+ disabled?: MenuItemRadioTokens;
128
+ focused?: MenuItemRadioTokens;
129
+ hovered?: MenuItemRadioTokens;
130
+ pressed?: MenuItemRadioTokens;
131
+ }
132
+
133
+ export interface MenuItemRadioProps extends MenuItemProps {
134
+ /**
135
+ * Identifier for the control
136
+ */
137
+ name: string;
138
+ }
139
+
140
+ export interface MenuItemRadioInfo {
141
+ props: MenuItemRadioProps & React.ComponentPropsWithRef<any>;
142
+ state: PressableState & { hasIcons: boolean; hasTooltips: boolean };
143
+ }
144
+
145
+ export interface MenuItemRadioSlotProps {
146
+ root: React.PropsWithRef<PressablePropsExtended>;
147
+ content?: TextProps;
148
+ checkmark?: XmlProps;
149
+ radioButton?: PressablePropsExtended;
150
+ radioInnerCircle?: React.PropsWithRef<IViewProps>;
151
+ iconPlaceholder?: React.PropsWithRef<IViewProps>;
152
+ imgIcon?: ImageProps;
153
+ fontOrSvgIcon?: IconProps;
154
+ }
155
+
156
+ export interface MenuItemRadioType {
157
+ props: MenuItemRadioProps;
158
+ tokens: MenuItemRadioTokens;
159
+ slotProps: MenuItemRadioSlotProps;
160
+ }
@@ -0,0 +1,51 @@
1
+ import type { Theme } from '@fluentui-react-native/framework';
2
+ import { globalTokens } from '@fluentui-react-native/theme-tokens';
3
+ import type { TokenSettings } from '@fluentui-react-native/use-styling';
4
+
5
+ import type { MenuItemRadioTokens } from './MenuItemRadio.types';
6
+
7
+ export const defaultMenuItemRadioTokens: TokenSettings<MenuItemRadioTokens, Theme> = (t: Theme): MenuItemRadioTokens => ({
8
+ checkmarkSize: globalTokens.size120,
9
+ color: t.colors.neutralForeground1,
10
+ variant: 'body1',
11
+ gap: globalTokens.size160,
12
+ iconColor: t.colors.neutralForeground2,
13
+ iconSize: globalTokens.size200,
14
+ maxWidth: 300,
15
+ paddingVertical: globalTokens.size60,
16
+ paddingHorizontal: globalTokens.size160,
17
+
18
+ radioOuterCircleSize: globalTokens.size200,
19
+ radioInnerCircleSize: globalTokens.size100,
20
+ radioBorderStyle: 'solid',
21
+ radioBorderWidth: globalTokens.stroke.width15,
22
+ rippleRadius: globalTokens.size160,
23
+
24
+ // Unselected, Rest
25
+ radioBorder: t.colors.neutralStrokeAccessible,
26
+ radioVisibility: 0,
27
+
28
+ rippleColor: '#D4D4D4',
29
+ pressed: {
30
+ backgroundColor: t.colors.neutralBackground1Pressed,
31
+ },
32
+ disabled: {
33
+ backgroundColor: t.colors.neutralBackground1,
34
+ color: t.colors.neutralForegroundDisabled1,
35
+ iconColor: t.colors.neutralForegroundDisabled,
36
+ // Unselected, Disabled
37
+ rippleColor: '#D4D4D4',
38
+ radioBorder: t.colors.neutralStrokeDisabled,
39
+ radioVisibility: 0,
40
+ checked: {
41
+ radioBorder: t.colors.brandBackgroundDisabled,
42
+ radioFill: t.colors.brandForegroundDisabled2,
43
+ radioVisibility: 1,
44
+ },
45
+ },
46
+ checked: {
47
+ radioBorder: t.colors.brandBackground,
48
+ radioFill: t.colors.brandForeground1,
49
+ radioVisibility: 1,
50
+ },
51
+ });
@@ -0,0 +1,56 @@
1
+ import type { FontWeightValue, Theme } from '@fluentui-react-native/framework';
2
+ import { globalTokens } from '@fluentui-react-native/theme-tokens';
3
+ import type { TokenSettings } from '@fluentui-react-native/use-styling';
4
+
5
+ import type { MenuItemRadioTokens } from './MenuItemRadio.types';
6
+
7
+ export const defaultMenuItemRadioTokens: TokenSettings<MenuItemRadioTokens, Theme> = (t: Theme): MenuItemRadioTokens => ({
8
+ backgroundColor: t.colors.neutralBackground1,
9
+ borderRadius: globalTokens.corner.radiusNone,
10
+ checkmarkPadding: globalTokens.size20,
11
+ checkmarkSize: 16,
12
+ checkmarkVisibility: 0,
13
+ color: t.colors.neutralForeground1,
14
+ fontFamily: t.typography.families.primary,
15
+ fontSize: globalTokens.font.size200,
16
+ fontWeight: globalTokens.font.weight.regular as FontWeightValue,
17
+ gap: globalTokens.size40,
18
+ iconColor: t.colors.neutralForeground1,
19
+ iconSize: 16,
20
+ minHeight: 24,
21
+ minWidth: 160,
22
+ maxWidth: 300,
23
+ padding: globalTokens.size40,
24
+ paddingHorizontal: globalTokens.size80,
25
+ pressed: {
26
+ backgroundColor: t.colors.neutralBackground1Pressed,
27
+ color: t.colors.neutralForeground1Pressed,
28
+ iconColor: t.colors.neutralForeground1Pressed,
29
+ checked: {
30
+ checkmarkColor: t.colors.neutralForeground1Pressed,
31
+ checkmarkVisibility: 1,
32
+ },
33
+ },
34
+ disabled: {
35
+ backgroundColor: t.colors.neutralBackground1,
36
+ color: t.colors.neutralForegroundDisabled,
37
+ iconColor: t.colors.neutralForegroundDisabled,
38
+ checked: {
39
+ checkmarkColor: t.colors.neutralForegroundDisabled,
40
+ checkmarkVisibility: 1,
41
+ },
42
+ },
43
+ focused: {
44
+ backgroundColor: t.colors.neutralBackground1Hover,
45
+ color: t.colors.neutralForeground1Hover,
46
+ iconColor: t.colors.neutralForeground1Hover,
47
+ checked: {
48
+ checkmarkColor: t.colors.neutralForeground1Hover,
49
+ checkmarkVisibility: 1,
50
+ },
51
+ },
52
+ checked: {
53
+ checkmarkColor: t.colors.neutralForeground1,
54
+ checkmarkVisibility: 1,
55
+ },
56
+ });
@@ -1,2 +1,10 @@
1
- export { MenuItemRadio, menuItemRadioName } from './MenuItemRadio';
1
+ export { MenuItemRadio } from './MenuItemRadio';
2
2
  export { useMenuItemRadio } from './useMenuItemRadio';
3
+ export type {
4
+ MenuItemRadioInfo,
5
+ MenuItemRadioProps,
6
+ MenuItemRadioSlotProps,
7
+ MenuItemRadioTokens,
8
+ MenuItemRadioType,
9
+ menuItemRadioName,
10
+ } from './MenuItemRadio.types';
@@ -4,10 +4,10 @@ import type { InteractionEvent } from '@fluentui-react-native/interactive-hooks'
4
4
 
5
5
  import { useMenuContext } from '../context/menuContext';
6
6
  import { useMenuListContext } from '../context/menuListContext';
7
- import type { MenuItemCheckboxProps, MenuItemCheckboxInfo } from '../MenuItemCheckbox/MenuItemCheckbox.types';
8
7
  import { useMenuCheckboxInteraction } from '../MenuItemCheckbox/useMenuItemCheckbox';
8
+ import type { MenuItemRadioProps, MenuItemRadioInfo } from '../MenuItemRadio/MenuItemRadio.types';
9
9
 
10
- export const useMenuItemRadio = (props: MenuItemCheckboxProps): MenuItemCheckboxInfo => {
10
+ export const useMenuItemRadio = (props: MenuItemRadioProps): MenuItemRadioInfo => {
11
11
  const { disabled, name, persistOnClick } = props;
12
12
  const context = useMenuContext();
13
13
  const listContext = useMenuListContext();
@@ -1,3 +1,5 @@
1
+ import { Platform } from 'react-native';
2
+
1
3
  import type { Theme, UseStylingOptions } from '@fluentui-react-native/framework';
2
4
  import { buildProps } from '@fluentui-react-native/framework';
3
5
  import { layoutStyles } from '@fluentui-react-native/tokens';
@@ -18,6 +20,7 @@ export const stylingSettings: UseStylingOptions<MenuListProps, MenuListSlotProps
18
20
  backgroundColor: tokens.backgroundColor,
19
21
  display: 'flex',
20
22
  ...layoutStyles.from(tokens, theme),
23
+ ...(Platform.OS === 'android' && { borderRadius: tokens.cornerRadius }),
21
24
  },
22
25
  gap: tokens.gap,
23
26
  }),
@@ -18,6 +18,12 @@ export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
18
18
  * States of the list control
19
19
  */
20
20
  hasMaxHeight?: MenuListTokens;
21
+
22
+ /**
23
+ * Corner radius of the menu list
24
+ * @platform android
25
+ */
26
+ cornerRadius?: number;
21
27
  }
22
28
 
23
29
  export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
@@ -46,6 +52,7 @@ export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
46
52
  *
47
53
  * This option is useful for programmatically generated items to provide
48
54
  * text for options that end up having tuncated text.
55
+ * @platform win32, macOS
49
56
  */
50
57
  hasTooltips?: boolean;
51
58
 
@@ -0,0 +1,11 @@
1
+ import type { Theme } from '@fluentui-react-native/framework';
2
+ import { globalTokens } from '@fluentui-react-native/theme-tokens';
3
+ import type { TokenSettings } from '@fluentui-react-native/use-styling';
4
+
5
+ import type { MenuListTokens } from './MenuList.types';
6
+
7
+ export const defaultMenuListTokens: TokenSettings<MenuListTokens, Theme> = (t: Theme): MenuListTokens => ({
8
+ backgroundColor: t.colors.neutralBackground1,
9
+ cornerRadius: globalTokens.corner.radius80,
10
+ paddingVertical: globalTokens.size80,
11
+ });
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Platform, View } from 'react-native';
3
3
 
4
- import { Callout } from '@fluentui-react-native/callout';
5
4
  import type { UseTokens } from '@fluentui-react-native/framework';
6
5
  import { compressible, mergeProps, patchTokens, useFluentTheme } from '@fluentui-react-native/framework';
7
6
 
@@ -10,6 +9,7 @@ import { menuPopoverName } from './MenuPopover.types';
10
9
  import { useMenuPopoverTokens } from './MenuPopoverTokens';
11
10
  import { useMenuPopover } from './useMenuPopover';
12
11
  import { useMenuContext } from '../context';
12
+ import { MenuCallout } from '../MenuCallout';
13
13
 
14
14
  export const MenuPopover = compressible<MenuPopoverProps, MenuPopoverTokens>(
15
15
  (props: MenuPopoverProps, useTokens: UseTokens<MenuPopoverTokens>) => {
@@ -47,7 +47,11 @@ export const MenuPopover = compressible<MenuPopoverProps, MenuPopoverTokens>(
47
47
  }
48
48
  : state.innerView;
49
49
  const content = React.createElement(View, innerViewProps, children);
50
- return <Callout {...mergedProps}>{content}</Callout>;
50
+ return (
51
+ <MenuCallout tokens={tokens} {...mergedProps}>
52
+ {content}
53
+ </MenuCallout>
54
+ );
51
55
  };
52
56
  },
53
57
  useMenuPopoverTokens,
@@ -5,7 +5,20 @@ export const menuPopoverName = 'MenuPopover';
5
5
 
6
6
  // Support for anchorRect and beakWidth will come at a later time.
7
7
  // Omitting dismissBehaviors as it doesn't seem to make sense as a token
8
- export type MenuPopoverTokens = Omit<ICalloutTokens, 'anchorRect' | 'beakWidth' | 'dismissBehaviors'>;
8
+ export type MenuPopoverTokens =
9
+ | Omit<ICalloutTokens, 'anchorRect' | 'beakWidth' | 'dismissBehaviors'> & {
10
+ /**
11
+ * The props for the corner radius for the Modal MenuPopover
12
+ * @platform android
13
+ */
14
+ cornerRadius?: number;
15
+
16
+ /**
17
+ * Shadown elevation for the Modal MenuPopover
18
+ * @platform android
19
+ */
20
+ elevation?: number;
21
+ };
9
22
 
10
23
  export type MenuPopoverProps = ICalloutProps;
11
24
 
@@ -0,0 +1,21 @@
1
+ import { Dimensions } from 'react-native';
2
+
3
+ import type { Theme } from '@fluentui-react-native/framework';
4
+ import { buildUseTokens } from '@fluentui-react-native/framework';
5
+ import { globalTokens } from '@fluentui-react-native/theme-tokens';
6
+
7
+ import type { MenuPopoverTokens } from './MenuPopover.types';
8
+ import { menuPopoverName } from './MenuPopover.types';
9
+
10
+ export const useMenuPopoverTokens = buildUseTokens<MenuPopoverTokens>(
11
+ (t: Theme) => ({
12
+ borderWidth: 1,
13
+ borderColor: t.colors.neutralStrokeAccessible,
14
+ maxHeight: Dimensions.get('window').height / 2 - globalTokens.size320, // Getting window height size and subtracting the padding considering on vertical
15
+ maxWidth: Dimensions.get('window').width - globalTokens.size160, // Getting window height size and subtracting the screen offset a/c design
16
+ cornerRadius: globalTokens.corner.radius80,
17
+ elevation: globalTokens.size160,
18
+ minPadding: globalTokens.size160,
19
+ }),
20
+ menuPopoverName,
21
+ );
package/src/index.ts CHANGED
@@ -36,7 +36,16 @@ export {
36
36
  useMenuCheckboxInteraction,
37
37
  useMenuItemCheckbox,
38
38
  } from './MenuItemCheckbox';
39
- export { MenuItemRadio, menuItemRadioName, useMenuItemRadio } from './MenuItemRadio';
39
+ export {
40
+ MenuItemRadio,
41
+ menuItemRadioName,
42
+ useMenuItemRadio,
43
+ MenuItemRadioInfo,
44
+ MenuItemRadioProps,
45
+ MenuItemRadioSlotProps,
46
+ MenuItemRadioTokens,
47
+ MenuItemRadioType,
48
+ } from './MenuItemRadio';
40
49
  export {
41
50
  MenuList,
42
51
  menuListName,