@fluentui/react-menu 9.24.1 → 9.25.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 (194) hide show
  1. package/CHANGELOG.md +36 -11
  2. package/dist/index.d.ts +125 -3
  3. package/lib/Menu.js +1 -1
  4. package/lib/Menu.js.map +1 -1
  5. package/lib/MenuItemLink.js +1 -1
  6. package/lib/MenuItemLink.js.map +1 -1
  7. package/lib/MenuItemRadio.js +1 -1
  8. package/lib/MenuItemRadio.js.map +1 -1
  9. package/lib/MenuList.js +1 -1
  10. package/lib/MenuList.js.map +1 -1
  11. package/lib/MenuPopover.js +1 -1
  12. package/lib/MenuPopover.js.map +1 -1
  13. package/lib/MenuTrigger.js +1 -1
  14. package/lib/MenuTrigger.js.map +1 -1
  15. package/lib/components/Menu/Menu.types.js.map +1 -1
  16. package/lib/components/Menu/index.js +1 -1
  17. package/lib/components/Menu/index.js.map +1 -1
  18. package/lib/components/Menu/useMenu.js +24 -12
  19. package/lib/components/Menu/useMenu.js.map +1 -1
  20. package/lib/components/MenuDivider/useMenuDividerStyles.styles.js +1 -0
  21. package/lib/components/MenuDivider/useMenuDividerStyles.styles.js.map +1 -1
  22. package/lib/components/MenuDivider/useMenuDividerStyles.styles.raw.js +1 -0
  23. package/lib/components/MenuDivider/useMenuDividerStyles.styles.raw.js.map +1 -1
  24. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js +1 -0
  25. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js.map +1 -1
  26. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js +1 -0
  27. package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js.map +1 -1
  28. package/lib/components/MenuItem/MenuItem.types.js.map +1 -1
  29. package/lib/components/MenuItem/index.js +2 -1
  30. package/lib/components/MenuItem/index.js.map +1 -1
  31. package/lib/components/MenuItem/useCharacterSearch.js +1 -0
  32. package/lib/components/MenuItem/useCharacterSearch.js.map +1 -1
  33. package/lib/components/MenuItem/useMenuItem.js +1 -145
  34. package/lib/components/MenuItem/useMenuItem.js.map +1 -1
  35. package/lib/components/MenuItem/useMenuItemBase.js +147 -0
  36. package/lib/components/MenuItem/useMenuItemBase.js.map +1 -0
  37. package/lib/components/MenuItem/useMenuItemStyles.styles.js +27 -6
  38. package/lib/components/MenuItem/useMenuItemStyles.styles.js.map +1 -1
  39. package/lib/components/MenuItem/useMenuItemStyles.styles.raw.js +28 -1
  40. package/lib/components/MenuItem/useMenuItemStyles.styles.raw.js.map +1 -1
  41. package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js +1 -3
  42. package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
  43. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js +6 -0
  44. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js.map +1 -1
  45. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js +6 -0
  46. package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js.map +1 -1
  47. package/lib/components/MenuItemLink/index.js +1 -1
  48. package/lib/components/MenuItemLink/index.js.map +1 -1
  49. package/lib/components/MenuItemLink/useMenuItemLink.js +30 -0
  50. package/lib/components/MenuItemLink/useMenuItemLink.js.map +1 -1
  51. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.js +5 -0
  52. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.js.map +1 -1
  53. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js +5 -0
  54. package/lib/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js.map +1 -1
  55. package/lib/components/MenuItemRadio/useMenuItemRadio.js +1 -3
  56. package/lib/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  57. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.js +6 -0
  58. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.js.map +1 -1
  59. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js +6 -0
  60. package/lib/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js.map +1 -1
  61. package/lib/components/MenuItemSwitch/useMenuItemSwitch.js +0 -1
  62. package/lib/components/MenuItemSwitch/useMenuItemSwitch.js.map +1 -1
  63. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js +7 -0
  64. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js.map +1 -1
  65. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js +7 -0
  66. package/lib/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js.map +1 -1
  67. package/lib/components/MenuList/index.js +1 -1
  68. package/lib/components/MenuList/index.js.map +1 -1
  69. package/lib/components/MenuList/useMenuList.js +115 -65
  70. package/lib/components/MenuList/useMenuList.js.map +1 -1
  71. package/lib/components/MenuList/useMenuListStyles.styles.js +1 -0
  72. package/lib/components/MenuList/useMenuListStyles.styles.js.map +1 -1
  73. package/lib/components/MenuList/useMenuListStyles.styles.raw.js +1 -0
  74. package/lib/components/MenuList/useMenuListStyles.styles.raw.js.map +1 -1
  75. package/lib/components/MenuPopover/index.js +1 -1
  76. package/lib/components/MenuPopover/index.js.map +1 -1
  77. package/lib/components/MenuPopover/useMenuPopover.js +27 -7
  78. package/lib/components/MenuPopover/useMenuPopover.js.map +1 -1
  79. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.js +1 -0
  80. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.js.map +1 -1
  81. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.raw.js +1 -0
  82. package/lib/components/MenuPopover/useMenuPopoverStyles.styles.raw.js.map +1 -1
  83. package/lib/components/MenuSplitGroup/useMenuSplitGroup.js +2 -1
  84. package/lib/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
  85. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js +1 -0
  86. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js.map +1 -1
  87. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js +1 -0
  88. package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js.map +1 -1
  89. package/lib/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
  90. package/lib/components/MenuTrigger/index.js +1 -1
  91. package/lib/components/MenuTrigger/index.js.map +1 -1
  92. package/lib/components/MenuTrigger/useMenuTrigger.js +39 -12
  93. package/lib/components/MenuTrigger/useMenuTrigger.js.map +1 -1
  94. package/lib/index.js +9 -14
  95. package/lib/index.js.map +1 -1
  96. package/lib/selectable/useCheckmarkStyles.styles.js +1 -0
  97. package/lib/selectable/useCheckmarkStyles.styles.js.map +1 -1
  98. package/lib/selectable/useCheckmarkStyles.styles.raw.js +1 -0
  99. package/lib/selectable/useCheckmarkStyles.styles.raw.js.map +1 -1
  100. package/lib-commonjs/Menu.js +3 -0
  101. package/lib-commonjs/Menu.js.map +1 -1
  102. package/lib-commonjs/MenuItemLink.js +3 -0
  103. package/lib-commonjs/MenuItemLink.js.map +1 -1
  104. package/lib-commonjs/MenuItemRadio.js.map +1 -1
  105. package/lib-commonjs/MenuList.js +3 -0
  106. package/lib-commonjs/MenuList.js.map +1 -1
  107. package/lib-commonjs/MenuPopover.js +3 -0
  108. package/lib-commonjs/MenuPopover.js.map +1 -1
  109. package/lib-commonjs/MenuTrigger.js +3 -0
  110. package/lib-commonjs/MenuTrigger.js.map +1 -1
  111. package/lib-commonjs/components/Menu/Menu.types.js.map +1 -1
  112. package/lib-commonjs/components/Menu/index.js +3 -0
  113. package/lib-commonjs/components/Menu/index.js.map +1 -1
  114. package/lib-commonjs/components/Menu/useMenu.js +30 -15
  115. package/lib-commonjs/components/Menu/useMenu.js.map +1 -1
  116. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.js +1 -0
  117. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.js.map +1 -1
  118. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.raw.js +1 -0
  119. package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.styles.raw.js.map +1 -1
  120. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js +1 -0
  121. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.js.map +1 -1
  122. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js +1 -0
  123. package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.raw.js.map +1 -1
  124. package/lib-commonjs/components/MenuItem/MenuItem.types.js.map +1 -1
  125. package/lib-commonjs/components/MenuItem/index.js +2 -1
  126. package/lib-commonjs/components/MenuItem/index.js.map +1 -1
  127. package/lib-commonjs/components/MenuItem/useCharacterSearch.js +1 -0
  128. package/lib-commonjs/components/MenuItem/useCharacterSearch.js.map +1 -1
  129. package/lib-commonjs/components/MenuItem/useMenuItem.js +5 -152
  130. package/lib-commonjs/components/MenuItem/useMenuItem.js.map +1 -1
  131. package/lib-commonjs/components/MenuItem/useMenuItemBase.js +155 -0
  132. package/lib-commonjs/components/MenuItem/useMenuItemBase.js.map +1 -0
  133. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.js +51 -16
  134. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.js.map +1 -1
  135. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.raw.js +28 -1
  136. package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.raw.js.map +1 -1
  137. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js +2 -2
  138. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
  139. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js +6 -0
  140. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.js.map +1 -1
  141. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js +6 -0
  142. package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.styles.raw.js.map +1 -1
  143. package/lib-commonjs/components/MenuItemLink/index.js +3 -0
  144. package/lib-commonjs/components/MenuItemLink/index.js.map +1 -1
  145. package/lib-commonjs/components/MenuItemLink/useMenuItemLink.js +35 -3
  146. package/lib-commonjs/components/MenuItemLink/useMenuItemLink.js.map +1 -1
  147. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.js +5 -0
  148. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.js.map +1 -1
  149. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js +5 -0
  150. package/lib-commonjs/components/MenuItemLink/useMenuItemLinkStyles.styles.raw.js.map +1 -1
  151. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js +2 -2
  152. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  153. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.js +6 -0
  154. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.js.map +1 -1
  155. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js +6 -0
  156. package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.styles.raw.js.map +1 -1
  157. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitch.js.map +1 -1
  158. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js +7 -0
  159. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.js.map +1 -1
  160. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js +7 -0
  161. package/lib-commonjs/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.raw.js.map +1 -1
  162. package/lib-commonjs/components/MenuList/index.js +3 -0
  163. package/lib-commonjs/components/MenuList/index.js.map +1 -1
  164. package/lib-commonjs/components/MenuList/useMenuList.js +108 -67
  165. package/lib-commonjs/components/MenuList/useMenuList.js.map +1 -1
  166. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.js +1 -0
  167. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.js.map +1 -1
  168. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.raw.js +1 -0
  169. package/lib-commonjs/components/MenuList/useMenuListStyles.styles.raw.js.map +1 -1
  170. package/lib-commonjs/components/MenuPopover/index.js +3 -0
  171. package/lib-commonjs/components/MenuPopover/index.js.map +1 -1
  172. package/lib-commonjs/components/MenuPopover/useMenuPopover.js +26 -7
  173. package/lib-commonjs/components/MenuPopover/useMenuPopover.js.map +1 -1
  174. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.js +1 -0
  175. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.js.map +1 -1
  176. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.raw.js +1 -0
  177. package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.styles.raw.js.map +1 -1
  178. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
  179. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js +1 -0
  180. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.js.map +1 -1
  181. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js +1 -0
  182. package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.styles.raw.js.map +1 -1
  183. package/lib-commonjs/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
  184. package/lib-commonjs/components/MenuTrigger/index.js +3 -0
  185. package/lib-commonjs/components/MenuTrigger/index.js.map +1 -1
  186. package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js +32 -14
  187. package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js.map +1 -1
  188. package/lib-commonjs/index.js +27 -5
  189. package/lib-commonjs/index.js.map +1 -1
  190. package/lib-commonjs/selectable/useCheckmarkStyles.styles.js +1 -0
  191. package/lib-commonjs/selectable/useCheckmarkStyles.styles.js.map +1 -1
  192. package/lib-commonjs/selectable/useCheckmarkStyles.styles.raw.js +1 -0
  193. package/lib-commonjs/selectable/useCheckmarkStyles.styles.raw.js.map +1 -1
  194. package/package.json +10 -10
@@ -14,6 +14,7 @@ const useStyles = makeStyles({
14
14
  export const useMenuDividerStyles_unstable = (state)=>{
15
15
  'use no memo';
16
16
  const styles = useStyles();
17
+ // eslint-disable-next-line react-hooks/immutability
17
18
  state.root.className = mergeClasses(menuDividerClassNames.root, styles.root, state.root.className);
18
19
  return state;
19
20
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MenuDivider/useMenuDividerStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport type { MenuDividerSlots, MenuDividerState } from './MenuDivider.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\n\nexport const menuDividerClassNames: SlotClassNames<MenuDividerSlots> = {\n root: 'fui-MenuDivider',\n};\n\nconst useStyles = makeStyles({\n root: {\n margin: '4px -5px 4px -5px',\n width: 'auto',\n borderBottom: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStroke2}`,\n },\n});\n\nexport const useMenuDividerStyles_unstable = (state: MenuDividerState): MenuDividerState => {\n 'use no memo';\n\n const styles = useStyles();\n state.root.className = mergeClasses(menuDividerClassNames.root, styles.root, state.root.className);\n\n return state;\n};\n"],"names":["mergeClasses","makeStyles","tokens","menuDividerClassNames","root","useStyles","margin","width","borderBottom","strokeWidthThin","colorNeutralStroke2","useMenuDividerStyles_unstable","state","styles","className"],"mappings":"AAAA;AAEA,SAASA,YAAY,EAAEC,UAAU,QAAQ,iBAAiB;AAC1D,SAASC,MAAM,QAAQ,wBAAwB;AAI/C,OAAO,MAAMC,wBAA0D;IACrEC,MAAM;AACR,EAAE;AAEF,MAAMC,YAAYJ,WAAW;IAC3BG,MAAM;QACJE,QAAQ;QACRC,OAAO;QACPC,cAAc,GAAGN,OAAOO,eAAe,CAAC,OAAO,EAAEP,OAAOQ,mBAAmB,EAAE;IAC/E;AACF;AAEA,OAAO,MAAMC,gCAAgC,CAACC;IAC5C;IAEA,MAAMC,SAASR;IACfO,MAAMR,IAAI,CAACU,SAAS,GAAGd,aAAaG,sBAAsBC,IAAI,EAAES,OAAOT,IAAI,EAAEQ,MAAMR,IAAI,CAACU,SAAS;IAEjG,OAAOF;AACT,EAAE"}
1
+ {"version":3,"sources":["../src/components/MenuDivider/useMenuDividerStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport type { MenuDividerSlots, MenuDividerState } from './MenuDivider.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\n\nexport const menuDividerClassNames: SlotClassNames<MenuDividerSlots> = {\n root: 'fui-MenuDivider',\n};\n\nconst useStyles = makeStyles({\n root: {\n margin: '4px -5px 4px -5px',\n width: 'auto',\n borderBottom: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStroke2}`,\n },\n});\n\nexport const useMenuDividerStyles_unstable = (state: MenuDividerState): MenuDividerState => {\n 'use no memo';\n\n const styles = useStyles();\n // eslint-disable-next-line react-hooks/immutability\n state.root.className = mergeClasses(menuDividerClassNames.root, styles.root, state.root.className);\n\n return state;\n};\n"],"names":["mergeClasses","makeStyles","tokens","menuDividerClassNames","root","useStyles","margin","width","borderBottom","strokeWidthThin","colorNeutralStroke2","useMenuDividerStyles_unstable","state","styles","className"],"mappings":"AAAA;AAEA,SAASA,YAAY,EAAEC,UAAU,QAAQ,iBAAiB;AAC1D,SAASC,MAAM,QAAQ,wBAAwB;AAI/C,OAAO,MAAMC,wBAA0D;IACrEC,MAAM;AACR,EAAE;AAEF,MAAMC,YAAYJ,WAAW;IAC3BG,MAAM;QACJE,QAAQ;QACRC,OAAO;QACPC,cAAc,GAAGN,OAAOO,eAAe,CAAC,OAAO,EAAEP,OAAOQ,mBAAmB,EAAE;IAC/E;AACF;AAEA,OAAO,MAAMC,gCAAgC,CAACC;IAC5C;IAEA,MAAMC,SAASR;IACf,oDAAoD;IACpDO,MAAMR,IAAI,CAACU,SAAS,GAAGd,aAAaG,sBAAsBC,IAAI,EAAES,OAAOT,IAAI,EAAEQ,MAAMR,IAAI,CAACU,SAAS;IAEjG,OAAOF;AACT,EAAE"}
@@ -23,6 +23,7 @@ export const useMenuGroupHeaderStyles_unstable = state => {
23
23
  'use no memo';
24
24
 
25
25
  const styles = useStyles();
26
+ // eslint-disable-next-line react-hooks/immutability
26
27
  state.root.className = mergeClasses(menuGroupHeaderClassNames.root, styles.root, state.root.className);
27
28
  return state;
28
29
  };
@@ -1 +1 @@
1
- {"version":3,"names":["mergeClasses","__styles","tokens","menuGroupHeaderClassNames","root","useStyles","Be2twd7","sj55zd","uwmqm3","z189sj","Bhrd7zp","Bqenvij","mc9l5x","Bt984gj","d","useMenuGroupHeaderStyles_unstable","state","styles","className"],"sources":["useMenuGroupHeaderStyles.styles.js"],"sourcesContent":["'use client';\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nexport const menuGroupHeaderClassNames = {\n root: 'fui-MenuGroupHeader'\n};\nconst useStyles = makeStyles({\n root: {\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground3,\n paddingLeft: '8px',\n paddingRight: '8px',\n fontWeight: tokens.fontWeightSemibold,\n height: '32px',\n display: 'flex',\n alignItems: 'center'\n }\n});\nexport const useMenuGroupHeaderStyles_unstable = (state)=>{\n 'use no memo';\n const styles = useStyles();\n state.root.className = mergeClasses(menuGroupHeaderClassNames.root, styles.root, state.root.className);\n return state;\n};\n"],"mappings":"AAAA,YAAY;;AACZ,SAASA,YAAY,EAAAC,QAAA,QAAoB,gBAAgB;AACzD,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,OAAO,MAAMC,yBAAyB,GAAG;EACrCC,IAAI,EAAE;AACV,CAAC;AACD,MAAMC,SAAS,gBAAGJ,QAAA;EAAAG,IAAA;IAAAE,OAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;EAAA;AAAA;EAAAC,CAAA;AAAA,CAWjB,CAAC;AACF,OAAO,MAAMC,iCAAiC,GAAIC,KAAK,IAAG;EACtD,aAAa;;EACb,MAAMC,MAAM,GAAGZ,SAAS,CAAC,CAAC;EAC1BW,KAAK,CAACZ,IAAI,CAACc,SAAS,GAAGlB,YAAY,CAACG,yBAAyB,CAACC,IAAI,EAAEa,MAAM,CAACb,IAAI,EAAEY,KAAK,CAACZ,IAAI,CAACc,SAAS,CAAC;EACtG,OAAOF,KAAK;AAChB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["mergeClasses","__styles","tokens","menuGroupHeaderClassNames","root","useStyles","Be2twd7","sj55zd","uwmqm3","z189sj","Bhrd7zp","Bqenvij","mc9l5x","Bt984gj","d","useMenuGroupHeaderStyles_unstable","state","styles","className"],"sources":["useMenuGroupHeaderStyles.styles.js"],"sourcesContent":["'use client';\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nexport const menuGroupHeaderClassNames = {\n root: 'fui-MenuGroupHeader'\n};\nconst useStyles = makeStyles({\n root: {\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground3,\n paddingLeft: '8px',\n paddingRight: '8px',\n fontWeight: tokens.fontWeightSemibold,\n height: '32px',\n display: 'flex',\n alignItems: 'center'\n }\n});\nexport const useMenuGroupHeaderStyles_unstable = (state)=>{\n 'use no memo';\n const styles = useStyles();\n // eslint-disable-next-line react-hooks/immutability\n state.root.className = mergeClasses(menuGroupHeaderClassNames.root, styles.root, state.root.className);\n return state;\n};\n"],"mappings":"AAAA,YAAY;;AACZ,SAASA,YAAY,EAAAC,QAAA,QAAoB,gBAAgB;AACzD,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,OAAO,MAAMC,yBAAyB,GAAG;EACrCC,IAAI,EAAE;AACV,CAAC;AACD,MAAMC,SAAS,gBAAGJ,QAAA;EAAAG,IAAA;IAAAE,OAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,MAAA;IAAAC,OAAA;EAAA;AAAA;EAAAC,CAAA;AAAA,CAWjB,CAAC;AACF,OAAO,MAAMC,iCAAiC,GAAIC,KAAK,IAAG;EACtD,aAAa;;EACb,MAAMC,MAAM,GAAGZ,SAAS,CAAC,CAAC;EAC1B;EACAW,KAAK,CAACZ,IAAI,CAACc,SAAS,GAAGlB,YAAY,CAACG,yBAAyB,CAACC,IAAI,EAAEa,MAAM,CAACb,IAAI,EAAEY,KAAK,CAACZ,IAAI,CAACc,SAAS,CAAC;EACtG,OAAOF,KAAK;AAChB,CAAC","ignoreList":[]}
@@ -19,6 +19,7 @@ const useStyles = makeStyles({
19
19
  export const useMenuGroupHeaderStyles_unstable = (state)=>{
20
20
  'use no memo';
21
21
  const styles = useStyles();
22
+ // eslint-disable-next-line react-hooks/immutability
22
23
  state.root.className = mergeClasses(menuGroupHeaderClassNames.root, styles.root, state.root.className);
23
24
  return state;
24
25
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport type { MenuGroupHeaderSlots, MenuGroupHeaderState } from './MenuGroupHeader.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\n\nexport const menuGroupHeaderClassNames: SlotClassNames<MenuGroupHeaderSlots> = {\n root: 'fui-MenuGroupHeader',\n};\n\nconst useStyles = makeStyles({\n root: {\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground3,\n paddingLeft: '8px',\n paddingRight: '8px',\n fontWeight: tokens.fontWeightSemibold,\n height: '32px',\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport const useMenuGroupHeaderStyles_unstable = (state: MenuGroupHeaderState): MenuGroupHeaderState => {\n 'use no memo';\n\n const styles = useStyles();\n state.root.className = mergeClasses(menuGroupHeaderClassNames.root, styles.root, state.root.className);\n\n return state;\n};\n"],"names":["mergeClasses","makeStyles","tokens","menuGroupHeaderClassNames","root","useStyles","fontSize","fontSizeBase200","color","colorNeutralForeground3","paddingLeft","paddingRight","fontWeight","fontWeightSemibold","height","display","alignItems","useMenuGroupHeaderStyles_unstable","state","styles","className"],"mappings":"AAAA;AAEA,SAASA,YAAY,EAAEC,UAAU,QAAQ,iBAAiB;AAC1D,SAASC,MAAM,QAAQ,wBAAwB;AAI/C,OAAO,MAAMC,4BAAkE;IAC7EC,MAAM;AACR,EAAE;AAEF,MAAMC,YAAYJ,WAAW;IAC3BG,MAAM;QACJE,UAAUJ,OAAOK,eAAe;QAChCC,OAAON,OAAOO,uBAAuB;QACrCC,aAAa;QACbC,cAAc;QACdC,YAAYV,OAAOW,kBAAkB;QACrCC,QAAQ;QACRC,SAAS;QACTC,YAAY;IACd;AACF;AAEA,OAAO,MAAMC,oCAAoC,CAACC;IAChD;IAEA,MAAMC,SAASd;IACfa,MAAMd,IAAI,CAACgB,SAAS,GAAGpB,aAAaG,0BAA0BC,IAAI,EAAEe,OAAOf,IAAI,EAAEc,MAAMd,IAAI,CAACgB,SAAS;IAErG,OAAOF;AACT,EAAE"}
1
+ {"version":3,"sources":["../src/components/MenuGroupHeader/useMenuGroupHeaderStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { mergeClasses, makeStyles } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport type { MenuGroupHeaderSlots, MenuGroupHeaderState } from './MenuGroupHeader.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\n\nexport const menuGroupHeaderClassNames: SlotClassNames<MenuGroupHeaderSlots> = {\n root: 'fui-MenuGroupHeader',\n};\n\nconst useStyles = makeStyles({\n root: {\n fontSize: tokens.fontSizeBase200,\n color: tokens.colorNeutralForeground3,\n paddingLeft: '8px',\n paddingRight: '8px',\n fontWeight: tokens.fontWeightSemibold,\n height: '32px',\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport const useMenuGroupHeaderStyles_unstable = (state: MenuGroupHeaderState): MenuGroupHeaderState => {\n 'use no memo';\n\n const styles = useStyles();\n // eslint-disable-next-line react-hooks/immutability\n state.root.className = mergeClasses(menuGroupHeaderClassNames.root, styles.root, state.root.className);\n\n return state;\n};\n"],"names":["mergeClasses","makeStyles","tokens","menuGroupHeaderClassNames","root","useStyles","fontSize","fontSizeBase200","color","colorNeutralForeground3","paddingLeft","paddingRight","fontWeight","fontWeightSemibold","height","display","alignItems","useMenuGroupHeaderStyles_unstable","state","styles","className"],"mappings":"AAAA;AAEA,SAASA,YAAY,EAAEC,UAAU,QAAQ,iBAAiB;AAC1D,SAASC,MAAM,QAAQ,wBAAwB;AAI/C,OAAO,MAAMC,4BAAkE;IAC7EC,MAAM;AACR,EAAE;AAEF,MAAMC,YAAYJ,WAAW;IAC3BG,MAAM;QACJE,UAAUJ,OAAOK,eAAe;QAChCC,OAAON,OAAOO,uBAAuB;QACrCC,aAAa;QACbC,cAAc;QACdC,YAAYV,OAAOW,kBAAkB;QACrCC,QAAQ;QACRC,SAAS;QACTC,YAAY;IACd;AACF;AAEA,OAAO,MAAMC,oCAAoC,CAACC;IAChD;IAEA,MAAMC,SAASd;IACf,oDAAoD;IACpDa,MAAMd,IAAI,CAACgB,SAAS,GAAGpB,aAAaG,0BAA0BC,IAAI,EAAEe,OAAOf,IAAI,EAAEc,MAAMd,IAAI,CAACgB,SAAS;IAErG,OAAOF;AACT,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MenuItem/MenuItem.types.ts"],"sourcesContent":["import type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\n\nexport type MenuItemSlots = {\n root: Slot<'div'>;\n\n /**\n * Icon slot rendered before children content\n */\n icon?: Slot<'span'>;\n\n /**\n * A helper slot for alignment when a menu item is used with selectable menuitems\n * Avoid using this slot as a replacement for MenuItemCheckbox and MenuItemRadio components\n */\n checkmark?: Slot<'span'>;\n\n /**\n * Icon slot that shows the indicator for a submenu\n */\n submenuIndicator?: Slot<'span'>;\n\n /**\n * Component children are placed in this slot\n * Avoid using the `children` property in this slot in favour of Component children whenever possible\n */\n content?: Slot<'span'>;\n\n /**\n * Secondary content rendered opposite the primary content (e.g Shortcut text)\n */\n secondaryContent?: Slot<'span'>;\n\n /**\n * Additional descriptor to main content that creates a multiline layout\n */\n subText?: Slot<'span'>;\n};\n\nexport type MenuItemProps = Omit<ComponentProps<Partial<MenuItemSlots>>, 'content'> &\n Pick<Partial<MenuItemSlots>, 'content'> & {\n /**\n * If the menu item is a trigger for a submenu\n *\n * @default false\n */\n hasSubmenu?: boolean;\n\n /**\n * Clicking on the menu item will not dismiss an open menu\n *\n * @default false\n */\n persistOnClick?: boolean;\n\n disabled?: boolean;\n /**\n * @deprecated this property does nothing.\n * disabled focusable is by default by simply using `disabled` property\n */\n disabledFocusable?: boolean;\n };\n\nexport type MenuItemState = ComponentState<MenuItemSlots> &\n Required<Pick<MenuItemProps, 'disabled' | 'hasSubmenu' | 'persistOnClick'>>;\n"],"names":[],"mappings":"AA8DA,WAC8E"}
1
+ {"version":3,"sources":["../src/components/MenuItem/MenuItem.types.ts"],"sourcesContent":["import type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\n\nexport type MenuItemSlots = {\n root: Slot<'div'>;\n\n /**\n * Icon slot rendered before children content\n */\n icon?: Slot<'span'>;\n\n /**\n * A helper slot for alignment when a menu item is used with selectable menuitems\n * Avoid using this slot as a replacement for MenuItemCheckbox and MenuItemRadio components\n */\n checkmark?: Slot<'span'>;\n\n /**\n * Icon slot that shows the indicator for a submenu\n */\n submenuIndicator?: Slot<'span'>;\n\n /**\n * Component children are placed in this slot\n * Avoid using the `children` property in this slot in favour of Component children whenever possible\n */\n content?: Slot<'span'>;\n\n /**\n * Secondary content rendered opposite the primary content (e.g Shortcut text)\n */\n secondaryContent?: Slot<'span'>;\n\n /**\n * Additional descriptor to main content that creates a multiline layout\n */\n subText?: Slot<'span'>;\n};\n\nexport type MenuItemProps = Omit<ComponentProps<Partial<MenuItemSlots>>, 'content'> &\n Pick<Partial<MenuItemSlots>, 'content'> & {\n /**\n * If the menu item is a trigger for a submenu\n *\n * @default false\n */\n hasSubmenu?: boolean;\n\n /**\n * Clicking on the menu item will not dismiss an open menu\n *\n * @default false\n */\n persistOnClick?: boolean;\n\n disabled?: boolean;\n /**\n * @deprecated this property does nothing.\n * disabled focusable is by default by simply using `disabled` property\n */\n disabledFocusable?: boolean;\n };\n\nexport type MenuItemState = ComponentState<MenuItemSlots> &\n Required<Pick<MenuItemProps, 'disabled' | 'hasSubmenu' | 'persistOnClick'>> & {\n submenuOpen: boolean;\n };\n"],"names":[],"mappings":"AA8DA,WAGI"}
@@ -1,4 +1,5 @@
1
1
  export { MenuItem } from './MenuItem';
2
2
  export { renderMenuItem_unstable } from './renderMenuItem';
3
- export { useMenuItem_unstable, useMenuItemBase_unstable } from './useMenuItem';
3
+ export { useMenuItem_unstable } from './useMenuItem';
4
+ export { useMenuItemBase_unstable } from './useMenuItemBase';
4
5
  export { menuItemClassNames, useMenuItemStyles_unstable } from './useMenuItemStyles.styles';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MenuItem/index.ts"],"sourcesContent":["export { MenuItem } from './MenuItem';\nexport type { MenuItemProps, MenuItemSlots, MenuItemState } from './MenuItem.types';\nexport { renderMenuItem_unstable } from './renderMenuItem';\nexport { useMenuItem_unstable, useMenuItemBase_unstable } from './useMenuItem';\nexport { menuItemClassNames, useMenuItemStyles_unstable } from './useMenuItemStyles.styles';\n"],"names":["MenuItem","renderMenuItem_unstable","useMenuItem_unstable","useMenuItemBase_unstable","menuItemClassNames","useMenuItemStyles_unstable"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,aAAa;AAEtC,SAASC,uBAAuB,QAAQ,mBAAmB;AAC3D,SAASC,oBAAoB,EAAEC,wBAAwB,QAAQ,gBAAgB;AAC/E,SAASC,kBAAkB,EAAEC,0BAA0B,QAAQ,6BAA6B"}
1
+ {"version":3,"sources":["../src/components/MenuItem/index.ts"],"sourcesContent":["export { MenuItem } from './MenuItem';\nexport type { MenuItemProps, MenuItemSlots, MenuItemState } from './MenuItem.types';\nexport { renderMenuItem_unstable } from './renderMenuItem';\nexport { useMenuItem_unstable } from './useMenuItem';\nexport { useMenuItemBase_unstable } from './useMenuItemBase';\nexport { menuItemClassNames, useMenuItemStyles_unstable } from './useMenuItemStyles.styles';\n"],"names":["MenuItem","renderMenuItem_unstable","useMenuItem_unstable","useMenuItemBase_unstable","menuItemClassNames","useMenuItemStyles_unstable"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,aAAa;AAEtC,SAASC,uBAAuB,QAAQ,mBAAmB;AAC3D,SAASC,oBAAoB,QAAQ,gBAAgB;AACrD,SAASC,wBAAwB,QAAQ,oBAAoB;AAC7D,SAASC,kBAAkB,EAAEC,0BAA0B,QAAQ,6BAA6B"}
@@ -4,6 +4,7 @@ export const useCharacterSearch = (state, ref)=>{
4
4
  'use no memo';
5
5
  const setFocusByFirstCharacter = useMenuListContext_unstable((context)=>context.setFocusByFirstCharacter);
6
6
  const { onKeyDown: originalOnKeyDown } = state.root;
7
+ // eslint-disable-next-line react-hooks/immutability
7
8
  state.root.onKeyDown = (e)=>{
8
9
  var _e_key;
9
10
  originalOnKeyDown === null || originalOnKeyDown === void 0 ? void 0 : originalOnKeyDown(e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MenuItem/useCharacterSearch.ts"],"sourcesContent":["'use client';\n\nimport type * as React from 'react';\nimport { useMenuListContext_unstable } from '../../contexts/menuListContext';\nimport type { MenuItemState } from '../../components/index';\nimport type { ARIAButtonElementIntersection } from '@fluentui/react-aria';\n\nexport const useCharacterSearch = (state: MenuItemState, ref: React.RefObject<HTMLElement | null>): MenuItemState => {\n 'use no memo';\n\n const setFocusByFirstCharacter = useMenuListContext_unstable(context => context.setFocusByFirstCharacter);\n\n const { onKeyDown: originalOnKeyDown } = state.root;\n\n state.root.onKeyDown = (e: React.KeyboardEvent<ARIAButtonElementIntersection>) => {\n originalOnKeyDown?.(e);\n\n if (e.key?.length > 1) {\n return;\n }\n\n if (ref.current) {\n setFocusByFirstCharacter?.(e, ref.current);\n }\n };\n\n return state;\n};\n"],"names":["useMenuListContext_unstable","useCharacterSearch","state","ref","setFocusByFirstCharacter","context","onKeyDown","originalOnKeyDown","root","e","key","length","current"],"mappings":"AAAA;AAGA,SAASA,2BAA2B,QAAQ,iCAAiC;AAI7E,OAAO,MAAMC,qBAAqB,CAACC,OAAsBC;IACvD;IAEA,MAAMC,2BAA2BJ,4BAA4BK,CAAAA,UAAWA,QAAQD,wBAAwB;IAExG,MAAM,EAAEE,WAAWC,iBAAiB,EAAE,GAAGL,MAAMM,IAAI;IAEnDN,MAAMM,IAAI,CAACF,SAAS,GAAG,CAACG;YAGlBA;QAFJF,8BAAAA,wCAAAA,kBAAoBE;QAEpB,IAAIA,EAAAA,SAAAA,EAAEC,GAAG,cAALD,6BAAAA,OAAOE,MAAM,IAAG,GAAG;YACrB;QACF;QAEA,IAAIR,IAAIS,OAAO,EAAE;YACfR,qCAAAA,+CAAAA,yBAA2BK,GAAGN,IAAIS,OAAO;QAC3C;IACF;IAEA,OAAOV;AACT,EAAE"}
1
+ {"version":3,"sources":["../src/components/MenuItem/useCharacterSearch.ts"],"sourcesContent":["'use client';\n\nimport type * as React from 'react';\nimport { useMenuListContext_unstable } from '../../contexts/menuListContext';\nimport type { MenuItemState } from '../../components/index';\nimport type { ARIAButtonElementIntersection } from '@fluentui/react-aria';\n\nexport const useCharacterSearch = (state: MenuItemState, ref: React.RefObject<HTMLElement | null>): MenuItemState => {\n 'use no memo';\n\n const setFocusByFirstCharacter = useMenuListContext_unstable(context => context.setFocusByFirstCharacter);\n\n const { onKeyDown: originalOnKeyDown } = state.root;\n\n // eslint-disable-next-line react-hooks/immutability\n state.root.onKeyDown = (e: React.KeyboardEvent<ARIAButtonElementIntersection>) => {\n originalOnKeyDown?.(e);\n\n if (e.key?.length > 1) {\n return;\n }\n\n if (ref.current) {\n setFocusByFirstCharacter?.(e, ref.current);\n }\n };\n\n return state;\n};\n"],"names":["useMenuListContext_unstable","useCharacterSearch","state","ref","setFocusByFirstCharacter","context","onKeyDown","originalOnKeyDown","root","e","key","length","current"],"mappings":"AAAA;AAGA,SAASA,2BAA2B,QAAQ,iCAAiC;AAI7E,OAAO,MAAMC,qBAAqB,CAACC,OAAsBC;IACvD;IAEA,MAAMC,2BAA2BJ,4BAA4BK,CAAAA,UAAWA,QAAQD,wBAAwB;IAExG,MAAM,EAAEE,WAAWC,iBAAiB,EAAE,GAAGL,MAAMM,IAAI;IAEnD,oDAAoD;IACpDN,MAAMM,IAAI,CAACF,SAAS,GAAG,CAACG;YAGlBA;QAFJF,8BAAAA,wCAAAA,kBAAoBE;QAEpB,IAAIA,EAAAA,SAAAA,EAAEC,GAAG,cAALD,6BAAAA,OAAOE,MAAM,IAAG,GAAG;YACrB;QACF;QAEA,IAAIR,IAAIS,OAAO,EAAE;YACfR,qCAAAA,+CAAAA,yBAA2BK,GAAGN,IAAIS,OAAO;QAC3C;IACF;IAEA,OAAOV;AACT,EAAE"}
@@ -1,16 +1,8 @@
1
1
  'use client';
2
2
  import * as React from 'react';
3
- import { useEventCallback, useMergedRefs, getIntrinsicElementProps, slot, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';
4
3
  import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
5
- import { useCharacterSearch } from './useCharacterSearch';
6
- import { useMenuTriggerContext_unstable } from '../../contexts/menuTriggerContext';
7
4
  import { ChevronRightFilled, ChevronRightRegular, ChevronLeftFilled, ChevronLeftRegular, bundleIcon } from '@fluentui/react-icons';
8
- import { useMenuListContext_unstable } from '../../contexts/menuListContext';
9
- import { useMenuContext_unstable } from '../../contexts/menuContext';
10
- import { useARIAButtonProps } from '@fluentui/react-aria';
11
- import { Enter, Space } from '@fluentui/keyboard-keys';
12
- import { useIsInMenuSplitGroup, useMenuSplitGroupContext_unstable } from '../../contexts/menuSplitGroupContext';
13
- import { useValidateNesting } from '../../utils/useValidateNesting';
5
+ import { useMenuItemBase_unstable } from './useMenuItemBase';
14
6
  const ChevronRightIcon = bundleIcon(ChevronRightFilled, ChevronRightRegular);
15
7
  const ChevronLeftIcon = bundleIcon(ChevronLeftFilled, ChevronLeftRegular);
16
8
  /**
@@ -26,139 +18,3 @@ const ChevronLeftIcon = bundleIcon(ChevronLeftFilled, ChevronLeftRegular);
26
18
  }
27
19
  return state;
28
20
  };
29
- /**
30
- * Base hook for MenuItem component, produces state required to render the component.
31
- * It doesn't set any design-related props specific to MenuItem such as submenu indicator icon.
32
- *
33
- * @internal
34
- */ export const useMenuItemBase_unstable = (props, ref)=>{
35
- const isSubmenuTrigger = useMenuTriggerContext_unstable();
36
- const persistOnClickContext = useMenuContext_unstable((context)=>context.persistOnItemClick);
37
- const { as = 'div', disabled = false, hasSubmenu = isSubmenuTrigger, persistOnClick = persistOnClickContext, content: _content, ...rest } = props;
38
- const { hasIcons, hasCheckmarks } = useIconAndCheckmarkAlignment({
39
- hasSubmenu
40
- });
41
- const setOpen = useMenuContext_unstable((context)=>context.setOpen);
42
- useNotifySplitItemMultiline({
43
- multiline: !!props.subText,
44
- hasSubmenu
45
- });
46
- const innerRef = React.useRef(null);
47
- const dismissedWithKeyboardRef = React.useRef(false);
48
- const validateNestingRef = useValidateNesting(getValidateNestingComponentName(props.role));
49
- const state = {
50
- hasSubmenu,
51
- disabled,
52
- persistOnClick,
53
- components: {
54
- root: 'div',
55
- icon: 'span',
56
- checkmark: 'span',
57
- submenuIndicator: 'span',
58
- content: 'span',
59
- secondaryContent: 'span',
60
- subText: 'span'
61
- },
62
- root: slot.always(getIntrinsicElementProps(as, useARIAButtonProps(as, {
63
- role: 'menuitem',
64
- ...rest,
65
- disabled: false,
66
- disabledFocusable: disabled,
67
- ref: useMergedRefs(ref, innerRef, validateNestingRef),
68
- onKeyDown: useEventCallback((event)=>{
69
- var _props_onKeyDown;
70
- (_props_onKeyDown = props.onKeyDown) === null || _props_onKeyDown === void 0 ? void 0 : _props_onKeyDown.call(props, event);
71
- if (!event.isDefaultPrevented() && (event.key === Space || event.key === Enter)) {
72
- dismissedWithKeyboardRef.current = true;
73
- }
74
- }),
75
- onMouseMove: useEventCallback((event)=>{
76
- var _props_onMouseMove;
77
- if (event.currentTarget.ownerDocument.activeElement !== event.currentTarget) {
78
- var _innerRef_current;
79
- (_innerRef_current = innerRef.current) === null || _innerRef_current === void 0 ? void 0 : _innerRef_current.focus();
80
- }
81
- (_props_onMouseMove = props.onMouseMove) === null || _props_onMouseMove === void 0 ? void 0 : _props_onMouseMove.call(props, event);
82
- }),
83
- onClick: useEventCallback((event)=>{
84
- var _props_onClick;
85
- if (!hasSubmenu && !persistOnClick) {
86
- setOpen(event, {
87
- open: false,
88
- keyboard: dismissedWithKeyboardRef.current,
89
- bubble: true,
90
- type: 'menuItemClick',
91
- event
92
- });
93
- dismissedWithKeyboardRef.current = false;
94
- }
95
- (_props_onClick = props.onClick) === null || _props_onClick === void 0 ? void 0 : _props_onClick.call(props, event);
96
- })
97
- })), {
98
- elementType: 'div'
99
- }),
100
- icon: slot.optional(props.icon, {
101
- renderByDefault: hasIcons,
102
- elementType: 'span'
103
- }),
104
- checkmark: slot.optional(props.checkmark, {
105
- renderByDefault: hasCheckmarks,
106
- elementType: 'span'
107
- }),
108
- submenuIndicator: slot.optional(props.submenuIndicator, {
109
- renderByDefault: hasSubmenu,
110
- elementType: 'span'
111
- }),
112
- content: slot.optional(props.content, {
113
- renderByDefault: !!props.children,
114
- defaultProps: {
115
- children: props.children
116
- },
117
- elementType: 'span'
118
- }),
119
- secondaryContent: slot.optional(props.secondaryContent, {
120
- elementType: 'span'
121
- }),
122
- subText: slot.optional(props.subText, {
123
- elementType: 'span'
124
- })
125
- };
126
- useCharacterSearch(state, innerRef);
127
- return state;
128
- };
129
- /**
130
- * MenuSplitGroup needs to apply extra styles when its main item is in multiline layout mode
131
- * Notify the parent MenuSplitGroup so that it can handle this case
132
- */ const useNotifySplitItemMultiline = (options)=>{
133
- const { hasSubmenu, multiline } = options;
134
- const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;
135
- const { setMultiline } = useMenuSplitGroupContext_unstable();
136
- useIsomorphicLayoutEffect(()=>{
137
- if (!isSplitItemTrigger) {
138
- setMultiline(multiline);
139
- }
140
- }, [
141
- setMultiline,
142
- multiline,
143
- isSplitItemTrigger
144
- ]);
145
- };
146
- const useIconAndCheckmarkAlignment = (options)=>{
147
- const { hasSubmenu } = options;
148
- const hasIcons = useMenuListContext_unstable((context)=>context.hasIcons);
149
- const hasCheckmarks = useMenuListContext_unstable((context)=>context.hasCheckmarks);
150
- const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;
151
- return {
152
- hasIcons: hasIcons && !isSplitItemTrigger,
153
- hasCheckmarks: hasCheckmarks && !isSplitItemTrigger
154
- };
155
- };
156
- const getValidateNestingComponentName = (role)=>{
157
- switch(role){
158
- case 'menuitemcheckbox':
159
- return 'MenuItemCheckbox';
160
- case 'menuitemradio':
161
- return 'MenuItemRadio';
162
- }
163
- return 'MenuItem';
164
- };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MenuItem/useMenuItem.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n useEventCallback,\n useMergedRefs,\n getIntrinsicElementProps,\n slot,\n useIsomorphicLayoutEffect,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useCharacterSearch } from './useCharacterSearch';\nimport { useMenuTriggerContext_unstable } from '../../contexts/menuTriggerContext';\nimport {\n ChevronRightFilled,\n ChevronRightRegular,\n ChevronLeftFilled,\n ChevronLeftRegular,\n bundleIcon,\n} from '@fluentui/react-icons';\nimport { useMenuListContext_unstable } from '../../contexts/menuListContext';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport type { MenuItemProps, MenuItemState } from './MenuItem.types';\nimport type { ARIAButtonElement, ARIAButtonElementIntersection, ARIAButtonProps } from '@fluentui/react-aria';\nimport { useARIAButtonProps } from '@fluentui/react-aria';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useIsInMenuSplitGroup, useMenuSplitGroupContext_unstable } from '../../contexts/menuSplitGroupContext';\nimport { useValidateNesting } from '../../utils/useValidateNesting';\n\nconst ChevronRightIcon = bundleIcon(ChevronRightFilled, ChevronRightRegular);\nconst ChevronLeftIcon = bundleIcon(ChevronLeftFilled, ChevronLeftRegular);\n\n/**\n * Returns the props and state required to render the component\n */\nexport const useMenuItem_unstable = (props: MenuItemProps, ref: React.Ref<ARIAButtonElement<'div'>>): MenuItemState => {\n const { dir } = useFluent();\n const state = useMenuItemBase_unstable(props, ref);\n\n // Set default chevron icon\n if (state.submenuIndicator) {\n state.submenuIndicator.children ??= dir === 'rtl' ? <ChevronLeftIcon /> : <ChevronRightIcon />;\n }\n\n return state;\n};\n\n/**\n * Base hook for MenuItem component, produces state required to render the component.\n * It doesn't set any design-related props specific to MenuItem such as submenu indicator icon.\n *\n * @internal\n */\nexport const useMenuItemBase_unstable = (\n props: MenuItemProps,\n ref: React.Ref<ARIAButtonElement<'div'>>,\n): MenuItemState => {\n const isSubmenuTrigger = useMenuTriggerContext_unstable();\n const persistOnClickContext = useMenuContext_unstable(context => context.persistOnItemClick);\n const {\n as = 'div',\n disabled = false,\n hasSubmenu = isSubmenuTrigger,\n persistOnClick = persistOnClickContext,\n content: _content, // `content` is a slot and it's type clashes with the HTMLElement `content` attribute\n ...rest\n } = props;\n const { hasIcons, hasCheckmarks } = useIconAndCheckmarkAlignment({ hasSubmenu });\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n useNotifySplitItemMultiline({ multiline: !!props.subText, hasSubmenu });\n\n const innerRef = React.useRef<ARIAButtonElementIntersection<'div'>>(null);\n const dismissedWithKeyboardRef = React.useRef(false);\n\n const validateNestingRef = useValidateNesting(getValidateNestingComponentName(props.role));\n\n const state: MenuItemState = {\n hasSubmenu,\n disabled,\n persistOnClick,\n components: {\n root: 'div',\n icon: 'span',\n checkmark: 'span',\n submenuIndicator: 'span',\n content: 'span',\n secondaryContent: 'span',\n subText: 'span',\n },\n root: slot.always(\n getIntrinsicElementProps(\n as,\n useARIAButtonProps<'div', ARIAButtonProps<'div'>>(as, {\n role: 'menuitem',\n ...rest,\n disabled: false,\n disabledFocusable: disabled,\n ref: useMergedRefs(ref, innerRef, validateNestingRef) as React.Ref<ARIAButtonElementIntersection<'div'>>,\n onKeyDown: useEventCallback(event => {\n props.onKeyDown?.(event);\n if (!event.isDefaultPrevented() && (event.key === Space || event.key === Enter)) {\n dismissedWithKeyboardRef.current = true;\n }\n }),\n onMouseMove: useEventCallback(event => {\n if (event.currentTarget.ownerDocument.activeElement !== event.currentTarget) {\n innerRef.current?.focus();\n }\n\n props.onMouseMove?.(event);\n }),\n onClick: useEventCallback(event => {\n if (!hasSubmenu && !persistOnClick) {\n setOpen(event, {\n open: false,\n keyboard: dismissedWithKeyboardRef.current,\n bubble: true,\n type: 'menuItemClick',\n event,\n });\n dismissedWithKeyboardRef.current = false;\n }\n\n props.onClick?.(event);\n }),\n }),\n ),\n { elementType: 'div' },\n ),\n icon: slot.optional(props.icon, { renderByDefault: hasIcons, elementType: 'span' }),\n checkmark: slot.optional(props.checkmark, {\n renderByDefault: hasCheckmarks,\n elementType: 'span',\n }),\n submenuIndicator: slot.optional(props.submenuIndicator, {\n renderByDefault: hasSubmenu,\n elementType: 'span',\n }),\n content: slot.optional(props.content, {\n renderByDefault: !!props.children,\n defaultProps: { children: props.children },\n elementType: 'span',\n }),\n secondaryContent: slot.optional(props.secondaryContent, { elementType: 'span' }),\n subText: slot.optional(props.subText, { elementType: 'span' }),\n };\n useCharacterSearch(state, innerRef);\n return state;\n};\n\n/**\n * MenuSplitGroup needs to apply extra styles when its main item is in multiline layout mode\n * Notify the parent MenuSplitGroup so that it can handle this case\n */\nconst useNotifySplitItemMultiline = (options: { hasSubmenu: boolean; multiline: boolean }) => {\n const { hasSubmenu, multiline } = options;\n const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;\n\n const { setMultiline } = useMenuSplitGroupContext_unstable();\n\n useIsomorphicLayoutEffect(() => {\n if (!isSplitItemTrigger) {\n setMultiline(multiline);\n }\n }, [setMultiline, multiline, isSplitItemTrigger]);\n};\n\nconst useIconAndCheckmarkAlignment = (options: { hasSubmenu: boolean }) => {\n const { hasSubmenu } = options;\n const hasIcons = useMenuListContext_unstable(context => context.hasIcons);\n const hasCheckmarks = useMenuListContext_unstable(context => context.hasCheckmarks);\n const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;\n\n return {\n hasIcons: hasIcons && !isSplitItemTrigger,\n hasCheckmarks: hasCheckmarks && !isSplitItemTrigger,\n };\n};\n\nconst getValidateNestingComponentName = (role?: string) => {\n switch (role) {\n case 'menuitemcheckbox':\n return 'MenuItemCheckbox';\n case 'menuitemradio':\n return 'MenuItemRadio';\n }\n return 'MenuItem';\n};\n"],"names":["React","useEventCallback","useMergedRefs","getIntrinsicElementProps","slot","useIsomorphicLayoutEffect","useFluent_unstable","useFluent","useCharacterSearch","useMenuTriggerContext_unstable","ChevronRightFilled","ChevronRightRegular","ChevronLeftFilled","ChevronLeftRegular","bundleIcon","useMenuListContext_unstable","useMenuContext_unstable","useARIAButtonProps","Enter","Space","useIsInMenuSplitGroup","useMenuSplitGroupContext_unstable","useValidateNesting","ChevronRightIcon","ChevronLeftIcon","useMenuItem_unstable","props","ref","dir","state","useMenuItemBase_unstable","submenuIndicator","children","isSubmenuTrigger","persistOnClickContext","context","persistOnItemClick","as","disabled","hasSubmenu","persistOnClick","content","_content","rest","hasIcons","hasCheckmarks","useIconAndCheckmarkAlignment","setOpen","useNotifySplitItemMultiline","multiline","subText","innerRef","useRef","dismissedWithKeyboardRef","validateNestingRef","getValidateNestingComponentName","role","components","root","icon","checkmark","secondaryContent","always","disabledFocusable","onKeyDown","event","isDefaultPrevented","key","current","onMouseMove","currentTarget","ownerDocument","activeElement","focus","onClick","open","keyboard","bubble","type","elementType","optional","renderByDefault","defaultProps","options","isSplitItemTrigger","setMultiline"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/MenuItem/useMenuItem.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport {\n ChevronRightFilled,\n ChevronRightRegular,\n ChevronLeftFilled,\n ChevronLeftRegular,\n bundleIcon,\n} from '@fluentui/react-icons';\nimport { useMenuItemBase_unstable } from './useMenuItemBase';\nimport type { MenuItemProps, MenuItemState } from './MenuItem.types';\nimport type { ARIAButtonElement } from '@fluentui/react-aria';\n\nconst ChevronRightIcon = bundleIcon(ChevronRightFilled, ChevronRightRegular);\nconst ChevronLeftIcon = bundleIcon(ChevronLeftFilled, ChevronLeftRegular);\n\n/**\n * Returns the props and state required to render the component\n */\nexport const useMenuItem_unstable = (props: MenuItemProps, ref: React.Ref<ARIAButtonElement<'div'>>): MenuItemState => {\n const { dir } = useFluent();\n const state = useMenuItemBase_unstable(props, ref);\n\n // Set default chevron icon\n if (state.submenuIndicator) {\n state.submenuIndicator.children ??= dir === 'rtl' ? <ChevronLeftIcon /> : <ChevronRightIcon />;\n }\n\n return state;\n};\n"],"names":["React","useFluent_unstable","useFluent","ChevronRightFilled","ChevronRightRegular","ChevronLeftFilled","ChevronLeftRegular","bundleIcon","useMenuItemBase_unstable","ChevronRightIcon","ChevronLeftIcon","useMenuItem_unstable","props","ref","dir","state","submenuIndicator","children"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,sBAAsBC,SAAS,QAAQ,kCAAkC;AAClF,SACEC,kBAAkB,EAClBC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAkB,EAClBC,UAAU,QACL,wBAAwB;AAC/B,SAASC,wBAAwB,QAAQ,oBAAoB;AAI7D,MAAMC,mBAAmBF,WAAWJ,oBAAoBC;AACxD,MAAMM,kBAAkBH,WAAWF,mBAAmBC;AAEtD;;CAEC,GACD,OAAO,MAAMK,uBAAuB,CAACC,OAAsBC;IACzD,MAAM,EAAEC,GAAG,EAAE,GAAGZ;IAChB,MAAMa,QAAQP,yBAAyBI,OAAOC;IAE9C,2BAA2B;IAC3B,IAAIE,MAAMC,gBAAgB,EAAE;YAC1BD;;QAAAA,cAAAA,0BAAAA,MAAMC,gBAAgB,EAACC,yDAAvBF,wBAAuBE,WAAaH,QAAQ,sBAAQ,oBAACJ,uCAAqB,oBAACD;IAC7E;IAEA,OAAOM;AACT,EAAE"}
@@ -0,0 +1,147 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ import { useEventCallback, useMergedRefs, getIntrinsicElementProps, slot, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';
4
+ import { useCharacterSearch } from './useCharacterSearch';
5
+ import { useMenuTriggerContext_unstable } from '../../contexts/menuTriggerContext';
6
+ import { useMenuListContext_unstable } from '../../contexts/menuListContext';
7
+ import { useMenuContext_unstable } from '../../contexts/menuContext';
8
+ import { useARIAButtonProps } from '@fluentui/react-aria';
9
+ import { Enter, Space } from '@fluentui/keyboard-keys';
10
+ import { useIsInMenuSplitGroup, useMenuSplitGroupContext_unstable } from '../../contexts/menuSplitGroupContext';
11
+ import { useValidateNesting } from '../../utils/useValidateNesting';
12
+ /**
13
+ * Base hook for MenuItem component, produces state required to render the component.
14
+ * It doesn't set any design-related props specific to MenuItem such as submenu indicator icon.
15
+ */ export const useMenuItemBase_unstable = (props, ref)=>{
16
+ const isSubmenuTrigger = useMenuTriggerContext_unstable();
17
+ const persistOnClickContext = useMenuContext_unstable((context)=>context.persistOnItemClick);
18
+ const { as = 'div', disabled = false, hasSubmenu = isSubmenuTrigger, persistOnClick = persistOnClickContext, content: _content, ...rest } = props;
19
+ const { hasIcons, hasCheckmarks } = useIconAndCheckmarkAlignment({
20
+ hasSubmenu
21
+ });
22
+ const setOpen = useMenuContext_unstable((context)=>context.setOpen);
23
+ const open = useMenuContext_unstable((context)=>context.open);
24
+ useNotifySplitItemMultiline({
25
+ multiline: !!props.subText,
26
+ hasSubmenu
27
+ });
28
+ const innerRef = React.useRef(null);
29
+ const dismissedWithKeyboardRef = React.useRef(false);
30
+ const validateNestingRef = useValidateNesting(getValidateNestingComponentName(props.role));
31
+ const state = {
32
+ hasSubmenu,
33
+ submenuOpen: hasSubmenu && open,
34
+ disabled,
35
+ persistOnClick,
36
+ components: {
37
+ root: 'div',
38
+ icon: 'span',
39
+ checkmark: 'span',
40
+ submenuIndicator: 'span',
41
+ content: 'span',
42
+ secondaryContent: 'span',
43
+ subText: 'span'
44
+ },
45
+ root: slot.always(getIntrinsicElementProps(as, useARIAButtonProps(as, {
46
+ role: 'menuitem',
47
+ ...rest,
48
+ disabled: false,
49
+ disabledFocusable: disabled,
50
+ ref: useMergedRefs(ref, innerRef, validateNestingRef),
51
+ onKeyDown: useEventCallback((event)=>{
52
+ var _props_onKeyDown;
53
+ (_props_onKeyDown = props.onKeyDown) === null || _props_onKeyDown === void 0 ? void 0 : _props_onKeyDown.call(props, event);
54
+ if (!event.isDefaultPrevented() && (event.key === Space || event.key === Enter)) {
55
+ dismissedWithKeyboardRef.current = true;
56
+ }
57
+ }),
58
+ onMouseMove: useEventCallback((event)=>{
59
+ var _props_onMouseMove;
60
+ if (event.currentTarget.ownerDocument.activeElement !== event.currentTarget) {
61
+ var _innerRef_current;
62
+ (_innerRef_current = innerRef.current) === null || _innerRef_current === void 0 ? void 0 : _innerRef_current.focus();
63
+ }
64
+ (_props_onMouseMove = props.onMouseMove) === null || _props_onMouseMove === void 0 ? void 0 : _props_onMouseMove.call(props, event);
65
+ }),
66
+ onClick: useEventCallback((event)=>{
67
+ var _props_onClick;
68
+ if (!hasSubmenu && !persistOnClick) {
69
+ setOpen(event, {
70
+ open: false,
71
+ keyboard: dismissedWithKeyboardRef.current,
72
+ bubble: true,
73
+ type: 'menuItemClick',
74
+ event
75
+ });
76
+ dismissedWithKeyboardRef.current = false;
77
+ }
78
+ (_props_onClick = props.onClick) === null || _props_onClick === void 0 ? void 0 : _props_onClick.call(props, event);
79
+ })
80
+ })), {
81
+ elementType: 'div'
82
+ }),
83
+ icon: slot.optional(props.icon, {
84
+ renderByDefault: hasIcons,
85
+ elementType: 'span'
86
+ }),
87
+ checkmark: slot.optional(props.checkmark, {
88
+ renderByDefault: hasCheckmarks,
89
+ elementType: 'span'
90
+ }),
91
+ submenuIndicator: slot.optional(props.submenuIndicator, {
92
+ renderByDefault: hasSubmenu,
93
+ elementType: 'span'
94
+ }),
95
+ content: slot.optional(props.content, {
96
+ renderByDefault: !!props.children,
97
+ defaultProps: {
98
+ children: props.children
99
+ },
100
+ elementType: 'span'
101
+ }),
102
+ secondaryContent: slot.optional(props.secondaryContent, {
103
+ elementType: 'span'
104
+ }),
105
+ subText: slot.optional(props.subText, {
106
+ elementType: 'span'
107
+ })
108
+ };
109
+ useCharacterSearch(state, innerRef);
110
+ return state;
111
+ };
112
+ /**
113
+ * MenuSplitGroup needs to apply extra styles when its main item is in multiline layout mode
114
+ * Notify the parent MenuSplitGroup so that it can handle this case
115
+ */ const useNotifySplitItemMultiline = (options)=>{
116
+ const { hasSubmenu, multiline } = options;
117
+ const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;
118
+ const { setMultiline } = useMenuSplitGroupContext_unstable();
119
+ useIsomorphicLayoutEffect(()=>{
120
+ if (!isSplitItemTrigger) {
121
+ setMultiline(multiline);
122
+ }
123
+ }, [
124
+ setMultiline,
125
+ multiline,
126
+ isSplitItemTrigger
127
+ ]);
128
+ };
129
+ const useIconAndCheckmarkAlignment = (options)=>{
130
+ const { hasSubmenu } = options;
131
+ const hasIcons = useMenuListContext_unstable((context)=>context.hasIcons);
132
+ const hasCheckmarks = useMenuListContext_unstable((context)=>context.hasCheckmarks);
133
+ const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;
134
+ return {
135
+ hasIcons: hasIcons && !isSplitItemTrigger,
136
+ hasCheckmarks: hasCheckmarks && !isSplitItemTrigger
137
+ };
138
+ };
139
+ const getValidateNestingComponentName = (role)=>{
140
+ switch(role){
141
+ case 'menuitemcheckbox':
142
+ return 'MenuItemCheckbox';
143
+ case 'menuitemradio':
144
+ return 'MenuItemRadio';
145
+ }
146
+ return 'MenuItem';
147
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/MenuItem/useMenuItemBase.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n useEventCallback,\n useMergedRefs,\n getIntrinsicElementProps,\n slot,\n useIsomorphicLayoutEffect,\n} from '@fluentui/react-utilities';\nimport { useCharacterSearch } from './useCharacterSearch';\nimport { useMenuTriggerContext_unstable } from '../../contexts/menuTriggerContext';\nimport { useMenuListContext_unstable } from '../../contexts/menuListContext';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport type { MenuItemProps, MenuItemState } from './MenuItem.types';\nimport type { ARIAButtonElement, ARIAButtonElementIntersection, ARIAButtonProps } from '@fluentui/react-aria';\nimport { useARIAButtonProps } from '@fluentui/react-aria';\nimport { Enter, Space } from '@fluentui/keyboard-keys';\nimport { useIsInMenuSplitGroup, useMenuSplitGroupContext_unstable } from '../../contexts/menuSplitGroupContext';\nimport { useValidateNesting } from '../../utils/useValidateNesting';\n\n/**\n * Base hook for MenuItem component, produces state required to render the component.\n * It doesn't set any design-related props specific to MenuItem such as submenu indicator icon.\n */\nexport const useMenuItemBase_unstable = (\n props: MenuItemProps,\n ref: React.Ref<ARIAButtonElement<'div'>>,\n): MenuItemState => {\n const isSubmenuTrigger = useMenuTriggerContext_unstable();\n const persistOnClickContext = useMenuContext_unstable(context => context.persistOnItemClick);\n const {\n as = 'div',\n disabled = false,\n hasSubmenu = isSubmenuTrigger,\n persistOnClick = persistOnClickContext,\n content: _content, // `content` is a slot and it's type clashes with the HTMLElement `content` attribute\n ...rest\n } = props;\n const { hasIcons, hasCheckmarks } = useIconAndCheckmarkAlignment({ hasSubmenu });\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n const open = useMenuContext_unstable(context => context.open);\n useNotifySplitItemMultiline({ multiline: !!props.subText, hasSubmenu });\n\n const innerRef = React.useRef<ARIAButtonElementIntersection<'div'>>(null);\n const dismissedWithKeyboardRef = React.useRef(false);\n\n const validateNestingRef = useValidateNesting(getValidateNestingComponentName(props.role));\n\n const state: MenuItemState = {\n hasSubmenu,\n submenuOpen: hasSubmenu && open,\n disabled,\n persistOnClick,\n components: {\n root: 'div',\n icon: 'span',\n checkmark: 'span',\n submenuIndicator: 'span',\n content: 'span',\n secondaryContent: 'span',\n subText: 'span',\n },\n root: slot.always(\n getIntrinsicElementProps(\n as,\n useARIAButtonProps<'div', ARIAButtonProps<'div'>>(as, {\n role: 'menuitem',\n ...rest,\n disabled: false,\n disabledFocusable: disabled,\n ref: useMergedRefs(ref, innerRef, validateNestingRef) as React.Ref<ARIAButtonElementIntersection<'div'>>,\n onKeyDown: useEventCallback(event => {\n props.onKeyDown?.(event);\n if (!event.isDefaultPrevented() && (event.key === Space || event.key === Enter)) {\n dismissedWithKeyboardRef.current = true;\n }\n }),\n onMouseMove: useEventCallback(event => {\n if (event.currentTarget.ownerDocument.activeElement !== event.currentTarget) {\n innerRef.current?.focus();\n }\n\n props.onMouseMove?.(event);\n }),\n onClick: useEventCallback(event => {\n if (!hasSubmenu && !persistOnClick) {\n setOpen(event, {\n open: false,\n keyboard: dismissedWithKeyboardRef.current,\n bubble: true,\n type: 'menuItemClick',\n event,\n });\n dismissedWithKeyboardRef.current = false;\n }\n\n props.onClick?.(event);\n }),\n }),\n ),\n { elementType: 'div' },\n ),\n icon: slot.optional(props.icon, { renderByDefault: hasIcons, elementType: 'span' }),\n checkmark: slot.optional(props.checkmark, {\n renderByDefault: hasCheckmarks,\n elementType: 'span',\n }),\n submenuIndicator: slot.optional(props.submenuIndicator, {\n renderByDefault: hasSubmenu,\n elementType: 'span',\n }),\n content: slot.optional(props.content, {\n renderByDefault: !!props.children,\n defaultProps: { children: props.children },\n elementType: 'span',\n }),\n secondaryContent: slot.optional(props.secondaryContent, { elementType: 'span' }),\n subText: slot.optional(props.subText, { elementType: 'span' }),\n };\n useCharacterSearch(state, innerRef);\n return state;\n};\n\n/**\n * MenuSplitGroup needs to apply extra styles when its main item is in multiline layout mode\n * Notify the parent MenuSplitGroup so that it can handle this case\n */\nconst useNotifySplitItemMultiline = (options: { hasSubmenu: boolean; multiline: boolean }) => {\n const { hasSubmenu, multiline } = options;\n const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;\n\n const { setMultiline } = useMenuSplitGroupContext_unstable();\n\n useIsomorphicLayoutEffect(() => {\n if (!isSplitItemTrigger) {\n setMultiline(multiline);\n }\n }, [setMultiline, multiline, isSplitItemTrigger]);\n};\n\nconst useIconAndCheckmarkAlignment = (options: { hasSubmenu: boolean }) => {\n const { hasSubmenu } = options;\n const hasIcons = useMenuListContext_unstable(context => context.hasIcons);\n const hasCheckmarks = useMenuListContext_unstable(context => context.hasCheckmarks);\n const isSplitItemTrigger = useIsInMenuSplitGroup() && hasSubmenu;\n\n return {\n hasIcons: hasIcons && !isSplitItemTrigger,\n hasCheckmarks: hasCheckmarks && !isSplitItemTrigger,\n };\n};\n\nconst getValidateNestingComponentName = (role?: string) => {\n switch (role) {\n case 'menuitemcheckbox':\n return 'MenuItemCheckbox';\n case 'menuitemradio':\n return 'MenuItemRadio';\n }\n return 'MenuItem';\n};\n"],"names":["React","useEventCallback","useMergedRefs","getIntrinsicElementProps","slot","useIsomorphicLayoutEffect","useCharacterSearch","useMenuTriggerContext_unstable","useMenuListContext_unstable","useMenuContext_unstable","useARIAButtonProps","Enter","Space","useIsInMenuSplitGroup","useMenuSplitGroupContext_unstable","useValidateNesting","useMenuItemBase_unstable","props","ref","isSubmenuTrigger","persistOnClickContext","context","persistOnItemClick","as","disabled","hasSubmenu","persistOnClick","content","_content","rest","hasIcons","hasCheckmarks","useIconAndCheckmarkAlignment","setOpen","open","useNotifySplitItemMultiline","multiline","subText","innerRef","useRef","dismissedWithKeyboardRef","validateNestingRef","getValidateNestingComponentName","role","state","submenuOpen","components","root","icon","checkmark","submenuIndicator","secondaryContent","always","disabledFocusable","onKeyDown","event","isDefaultPrevented","key","current","onMouseMove","currentTarget","ownerDocument","activeElement","focus","onClick","keyboard","bubble","type","elementType","optional","renderByDefault","children","defaultProps","options","isSplitItemTrigger","setMultiline"],"mappings":"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"}
@@ -39,6 +39,16 @@ const useStyles = /*#__PURE__*/__styles({
39
39
  Baz25je: "f68mna0",
40
40
  cmx5o7: "f1p5zmk"
41
41
  },
42
+ submenuOpen: {
43
+ De3pzq: "f5gciec",
44
+ sj55zd: "fmh2wxz",
45
+ D0sxk3: "fxoiby5",
46
+ t6yez3: "f15q0o9g",
47
+ B3y4be1: "f17gqod3",
48
+ B2i6fwv: "f15ms52v",
49
+ By8wz76: "fix5gee",
50
+ B7iucu3: "f1gokeew"
51
+ },
42
52
  disabled: {
43
53
  sj55zd: "f1s2aq7o",
44
54
  Bi91k9c: "fvgxktp",
@@ -65,10 +75,12 @@ const useStyles = /*#__PURE__*/__styles({
65
75
  j9xr24: "f1hzwxd0"
66
76
  }
67
77
  }, {
68
- d: [".fmnzpld{margin-top:2px;}", ".fqerorx{flex-grow:1;}", ".f1ozlkrg{border-top-left-radius:0;}", ".f10ostut{border-top-right-radius:0;}", ".f1deotkl{border-bottom-left-radius:0;}", ".f1krrbdw{border-bottom-right-radius:0;}", ".f1cnd47f{padding-left:0;}", ".fhxju0i{padding-right:0;}", ".f1wl9k8s::before{content:\"\";}", ".f1yn80uh::before{width:var(--strokeWidthThin);}", ".f68mna0::before{height:24px;}", ".f1p5zmk::before{background-color:var(--colorNeutralStroke1);}", ".f1s2aq7o{color:var(--colorNeutralForegroundDisabled);}"],
69
- h: [".fvgxktp:hover{color:var(--colorNeutralForegroundDisabled);}", ".f1ijtazh:hover{background-color:var(--colorNeutralBackground1);}", ".fphbwmw:hover{cursor:not-allowed;}", ".f19vpps7:hover .fui-Icon-filled{display:none;}", ".fv5swzo:hover .fui-Icon-regular{display:inline;}", ".f1q1x1ba:hover .fui-MenuItem__icon{color:var(--colorNeutralForegroundDisabled);}", ".ff3wrqt:hover .fui-MenuItem__subText{color:var(--colorNeutralForegroundDisabled);}", ".fcvwxyo:hover:active{color:var(--colorNeutralForegroundDisabled);}", ".f1to34ca:hover:active{background-color:var(--colorNeutralBackground1);}", ".fszh5vc:hover:active .fui-MenuItem__subText{color:var(--colorNeutralForegroundDisabled);}"],
70
- f: [".ft33916:focus{color:var(--colorNeutralForegroundDisabled);}"],
71
- m: [["@media (forced-colors: active){.f1cyfu5x{color:GrayText;}}", {
78
+ d: [".fmnzpld{margin-top:2px;}", ".fqerorx{flex-grow:1;}", ".f1ozlkrg{border-top-left-radius:0;}", ".f10ostut{border-top-right-radius:0;}", ".f1deotkl{border-bottom-left-radius:0;}", ".f1krrbdw{border-bottom-right-radius:0;}", ".f1cnd47f{padding-left:0;}", ".fhxju0i{padding-right:0;}", ".f1wl9k8s::before{content:\"\";}", ".f1yn80uh::before{width:var(--strokeWidthThin);}", ".f68mna0::before{height:24px;}", ".f1p5zmk::before{background-color:var(--colorNeutralStroke1);}", ".f5gciec{background-color:var(--colorNeutralBackground1Hover);}", ".fmh2wxz{color:var(--colorNeutralForeground2Hover);}", ".fxoiby5 .fui-Icon-filled{display:inline;}", ".f15q0o9g .fui-Icon-regular{display:none;}", ".f17gqod3 .fui-MenuItem__icon{color:var(--colorNeutralForeground2BrandSelected);}", ".f15ms52v .fui-MenuItem__subText{color:var(--colorNeutralForeground3Hover);}", ".f1s2aq7o{color:var(--colorNeutralForegroundDisabled);}"],
79
+ m: [["@media (forced-colors: active){.fix5gee{background-color:Canvas;}}", {
80
+ m: "(forced-colors: active)"
81
+ }], ["@media (forced-colors: active){.f1gokeew{color:Highlight;}}", {
82
+ m: "(forced-colors: active)"
83
+ }], ["@media (forced-colors: active){.f1cyfu5x{color:GrayText;}}", {
72
84
  m: "(forced-colors: active)"
73
85
  }], ["@media (forced-colors: active){.fa9u7a5:hover{color:GrayText;}}", {
74
86
  m: "(forced-colors: active)"
@@ -90,7 +102,9 @@ const useStyles = /*#__PURE__*/__styles({
90
102
  m: "(forced-colors: active)"
91
103
  }], ["@media (forced-colors: active){.f1hzwxd0:focus{background-color:Canvas;}}", {
92
104
  m: "(forced-colors: active)"
93
- }]]
105
+ }]],
106
+ h: [".fvgxktp:hover{color:var(--colorNeutralForegroundDisabled);}", ".f1ijtazh:hover{background-color:var(--colorNeutralBackground1);}", ".fphbwmw:hover{cursor:not-allowed;}", ".f19vpps7:hover .fui-Icon-filled{display:none;}", ".fv5swzo:hover .fui-Icon-regular{display:inline;}", ".f1q1x1ba:hover .fui-MenuItem__icon{color:var(--colorNeutralForegroundDisabled);}", ".ff3wrqt:hover .fui-MenuItem__subText{color:var(--colorNeutralForegroundDisabled);}", ".fcvwxyo:hover:active{color:var(--colorNeutralForegroundDisabled);}", ".f1to34ca:hover:active{background-color:var(--colorNeutralBackground1);}", ".fszh5vc:hover:active .fui-MenuItem__subText{color:var(--colorNeutralForegroundDisabled);}"],
107
+ f: [".ft33916:focus{color:var(--colorNeutralForegroundDisabled);}"]
94
108
  });
95
109
  const useSubTextStyles = /*#__PURE__*/__styles({
96
110
  disabled: {
@@ -131,23 +145,30 @@ export const useMenuItemStyles_unstable = state => {
131
145
  const subtextBaseStyles = useSubtextBaseStyles();
132
146
  const subTextStyles = useSubTextStyles();
133
147
  const multiline = !!state.subText;
134
- state.root.className = mergeClasses(menuItemClassNames.root, rootBaseStyles, state.disabled && styles.disabled, state.root.className);
148
+ // eslint-disable-next-line react-hooks/immutability
149
+ state.root.className = mergeClasses(menuItemClassNames.root, rootBaseStyles, state.submenuOpen && styles.submenuOpen, state.disabled && styles.disabled, state.root.className);
135
150
  if (state.content) {
151
+ // eslint-disable-next-line react-hooks/immutability
136
152
  state.content.className = mergeClasses(menuItemClassNames.content, contentBaseStyles, state.content.className, multiline && multilineStyles.content);
137
153
  }
138
154
  if (state.checkmark) {
155
+ // eslint-disable-next-line react-hooks/immutability
139
156
  state.checkmark.className = mergeClasses(menuItemClassNames.checkmark, styles.checkmark, state.checkmark.className);
140
157
  }
141
158
  if (state.secondaryContent) {
159
+ // eslint-disable-next-line react-hooks/immutability
142
160
  state.secondaryContent.className = mergeClasses(menuItemClassNames.secondaryContent, secondaryContentBaseStyles, state.disabled && styles.disabled, state.secondaryContent.className, multiline && multilineStyles.secondaryContent);
143
161
  }
144
162
  if (state.icon) {
163
+ // eslint-disable-next-line react-hooks/immutability
145
164
  state.icon.className = mergeClasses(menuItemClassNames.icon, iconBaseStyles, state.icon.className);
146
165
  }
147
166
  if (state.submenuIndicator) {
167
+ // eslint-disable-next-line react-hooks/immutability
148
168
  state.submenuIndicator.className = mergeClasses(menuItemClassNames.submenuIndicator, submenuIndicatorBaseStyles, state.submenuIndicator.className, multiline && multilineStyles.submenuIndicator);
149
169
  }
150
170
  if (state.subText) {
171
+ // eslint-disable-next-line react-hooks/immutability
151
172
  state.subText.className = mergeClasses(menuItemClassNames.subText, state.disabled && subTextStyles.disabled, state.subText.className, subtextBaseStyles);
152
173
  }
153
174
  useCheckmarkStyles_unstable(state);