@soroush.tech/design-system 2.0.0-rc.1 → 2.0.0-rc.3

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 (324) hide show
  1. package/README.md +30 -10
  2. package/dist/AppBar.d.cts +1 -3
  3. package/dist/AppBar.d.mts +1 -3
  4. package/dist/Avatar.cjs +1 -1
  5. package/dist/Avatar.d.cts +1 -3
  6. package/dist/Avatar.d.mts +1 -3
  7. package/dist/Avatar.mjs +1 -1
  8. package/dist/Backdrop.d.cts +1 -1
  9. package/dist/Backdrop.d.mts +1 -1
  10. package/dist/Breadcrumbs.cjs +132 -0
  11. package/dist/Breadcrumbs.d.cts +40 -0
  12. package/dist/Breadcrumbs.d.mts +40 -0
  13. package/dist/Breadcrumbs.mjs +131 -0
  14. package/dist/Button.cjs +1 -1
  15. package/dist/Button.d.cts +1 -1
  16. package/dist/Button.d.mts +1 -1
  17. package/dist/Button.mjs +1 -1
  18. package/dist/ButtonGroup.d.cts +1 -1
  19. package/dist/ButtonGroup.d.mts +1 -1
  20. package/dist/Card.cjs +3 -3
  21. package/dist/Card.d.cts +4 -3
  22. package/dist/Card.d.mts +4 -3
  23. package/dist/Card.mjs +3 -3
  24. package/dist/Checkbox.d.cts +1 -2
  25. package/dist/Checkbox.d.mts +1 -2
  26. package/dist/CircularProgress.d.cts +2 -3
  27. package/dist/CircularProgress.d.mts +2 -3
  28. package/dist/Drawer.d.cts +3 -2
  29. package/dist/Drawer.d.mts +3 -2
  30. package/dist/Flex.d.cts +1 -1
  31. package/dist/Flex.d.mts +1 -1
  32. package/dist/Form.d.cts +1 -1
  33. package/dist/Form.d.mts +1 -1
  34. package/dist/FormControl.cjs +10 -2
  35. package/dist/FormControl.d.cts +9 -2
  36. package/dist/FormControl.d.mts +9 -2
  37. package/dist/FormControl.mjs +10 -2
  38. package/dist/FormHelperText.d.cts +1 -1
  39. package/dist/FormHelperText.d.mts +1 -1
  40. package/dist/FormLabel.cjs +9 -1
  41. package/dist/FormLabel.d.cts +2 -2
  42. package/dist/FormLabel.d.mts +2 -2
  43. package/dist/FormLabel.mjs +10 -2
  44. package/dist/Grid.d.cts +1 -3
  45. package/dist/Grid.d.mts +1 -3
  46. package/dist/{Icon-CH3asUJu.mjs → Icon-BihOAP4u.mjs} +52 -2
  47. package/dist/{Icon-CI6q2Eyi.cjs → Icon-D-EWsBVg.cjs} +52 -2
  48. package/dist/Icon.cjs +1 -1
  49. package/dist/Icon.d.cts +1 -1
  50. package/dist/Icon.d.mts +1 -1
  51. package/dist/Icon.mjs +1 -1
  52. package/dist/Image.d.cts +1 -2
  53. package/dist/Image.d.mts +1 -2
  54. package/dist/InputRange.cjs +675 -0
  55. package/dist/InputRange.d.cts +79 -0
  56. package/dist/InputRange.d.mts +79 -0
  57. package/dist/InputRange.mjs +673 -0
  58. package/dist/LinearProgress.d.cts +2 -3
  59. package/dist/LinearProgress.d.mts +2 -3
  60. package/dist/Link.cjs +1 -1
  61. package/dist/Link.d.cts +1 -1
  62. package/dist/Link.d.mts +1 -1
  63. package/dist/Link.mjs +1 -1
  64. package/dist/Menu/ContextMenu.cjs +146 -0
  65. package/dist/Menu/ContextMenu.d.cts +52 -0
  66. package/dist/Menu/ContextMenu.d.mts +52 -0
  67. package/dist/Menu/ContextMenu.mjs +145 -0
  68. package/dist/Menu/Menu.cjs +3 -0
  69. package/dist/Menu/Menu.d.cts +2 -0
  70. package/dist/Menu/Menu.d.mts +2 -0
  71. package/dist/Menu/Menu.mjs +2 -0
  72. package/dist/Menu/MenuDivider.cjs +29 -0
  73. package/dist/Menu/MenuDivider.d.cts +12 -0
  74. package/dist/Menu/MenuDivider.d.mts +12 -0
  75. package/dist/Menu/MenuDivider.mjs +28 -0
  76. package/dist/Menu/MenuItems.cjs +29 -0
  77. package/dist/Menu/MenuItems.d.cts +2 -0
  78. package/dist/Menu/MenuItems.d.mts +2 -0
  79. package/dist/Menu/MenuItems.mjs +28 -0
  80. package/dist/Menu/MenuList.cjs +3 -0
  81. package/dist/Menu/MenuList.d.cts +38 -0
  82. package/dist/Menu/MenuList.d.mts +38 -0
  83. package/dist/Menu/MenuList.mjs +2 -0
  84. package/dist/Menu-Cgg-sX4W.cjs +173 -0
  85. package/dist/Menu-CrzHc_cn.mjs +168 -0
  86. package/dist/Menu.cjs +13 -0
  87. package/dist/Menu.d.cts +7 -0
  88. package/dist/Menu.d.mts +7 -0
  89. package/dist/Menu.mjs +6 -0
  90. package/dist/MenuItem-BTP7Ijwi.cjs +673 -0
  91. package/dist/MenuItem-DUn4IZKK.mjs +649 -0
  92. package/dist/MenuItem.cjs +2 -148
  93. package/dist/MenuItem.d.cts +2 -52
  94. package/dist/MenuItem.d.mts +2 -52
  95. package/dist/MenuItem.mjs +1 -147
  96. package/dist/MenuList-B7msJ1IG.mjs +187 -0
  97. package/dist/MenuList-D4imLXAa.cjs +223 -0
  98. package/dist/MenuListContext-DKUOhNyw.d.cts +21 -0
  99. package/dist/MenuListContext-x-7lH4CH.d.mts +21 -0
  100. package/dist/Modal.d.cts +1 -1
  101. package/dist/Modal.d.mts +1 -1
  102. package/dist/NativeSelect.cjs +9 -8
  103. package/dist/NativeSelect.d.cts +3 -4
  104. package/dist/NativeSelect.d.mts +3 -4
  105. package/dist/NativeSelect.mjs +9 -8
  106. package/dist/NumberField.cjs +476 -0
  107. package/dist/NumberField.d.cts +74 -0
  108. package/dist/NumberField.d.mts +74 -0
  109. package/dist/NumberField.mjs +474 -0
  110. package/dist/Pagination/PaginationItem.cjs +1 -1
  111. package/dist/Pagination/PaginationItem.d.cts +1 -1
  112. package/dist/Pagination/PaginationItem.d.mts +1 -1
  113. package/dist/Pagination/PaginationItem.mjs +1 -1
  114. package/dist/Pagination.d.cts +2 -2
  115. package/dist/Pagination.d.mts +2 -2
  116. package/dist/Paper.cjs +1 -1
  117. package/dist/Paper.d.cts +2 -1
  118. package/dist/Paper.d.mts +2 -1
  119. package/dist/Paper.mjs +1 -1
  120. package/dist/{Popover-TpwRSORC.cjs → Popover-CiZfgiKE.cjs} +5 -125
  121. package/dist/Popover-QjM5Z1CR.mjs +133 -0
  122. package/dist/Popover.cjs +1 -1
  123. package/dist/Popover.d.cts +6 -7
  124. package/dist/Popover.d.mts +6 -7
  125. package/dist/Popover.mjs +1 -1
  126. package/dist/Pressable.cjs +1 -1
  127. package/dist/Pressable.d.cts +1 -1
  128. package/dist/Pressable.d.mts +1 -1
  129. package/dist/Pressable.mjs +1 -1
  130. package/dist/Quote.d.cts +2 -3
  131. package/dist/Quote.d.mts +2 -3
  132. package/dist/Radio.d.cts +1 -2
  133. package/dist/Radio.d.mts +1 -2
  134. package/dist/Rating.cjs +373 -0
  135. package/dist/Rating.d.cts +57 -0
  136. package/dist/Rating.d.mts +57 -0
  137. package/dist/Rating.mjs +371 -0
  138. package/dist/Select.cjs +5 -4
  139. package/dist/Select.d.cts +3 -4
  140. package/dist/Select.d.mts +3 -4
  141. package/dist/Select.mjs +7 -6
  142. package/dist/Sidebar/Sidebar.d.cts +1 -1
  143. package/dist/Sidebar/Sidebar.d.mts +1 -1
  144. package/dist/Sidebar/SidebarItem.cjs +1 -1
  145. package/dist/Sidebar/SidebarItem.d.cts +3 -4
  146. package/dist/Sidebar/SidebarItem.d.mts +3 -4
  147. package/dist/Sidebar/SidebarItem.mjs +3 -3
  148. package/dist/Skeleton.d.cts +1 -2
  149. package/dist/Skeleton.d.mts +1 -2
  150. package/dist/Switch.cjs +23 -16
  151. package/dist/Switch.d.cts +2 -3
  152. package/dist/Switch.d.mts +2 -3
  153. package/dist/Switch.mjs +25 -18
  154. package/dist/Table/Table.d.cts +2 -3
  155. package/dist/Table/Table.d.mts +2 -3
  156. package/dist/Table/TableBody.d.cts +1 -2
  157. package/dist/Table/TableBody.d.mts +1 -2
  158. package/dist/Table/TableCell.d.cts +1 -1
  159. package/dist/Table/TableCell.d.mts +1 -1
  160. package/dist/Table/TableContainer.d.cts +1 -3
  161. package/dist/Table/TableContainer.d.mts +1 -3
  162. package/dist/Table/TableControl.d.cts +1 -1
  163. package/dist/Table/TableControl.d.mts +1 -1
  164. package/dist/Table/TableControl.mjs +2 -2
  165. package/dist/Table/TableFooter.d.cts +1 -2
  166. package/dist/Table/TableFooter.d.mts +1 -2
  167. package/dist/Table/TableHead.d.cts +1 -2
  168. package/dist/Table/TableHead.d.mts +1 -2
  169. package/dist/Table/TablePagination.d.cts +2 -2
  170. package/dist/Table/TablePagination.d.mts +2 -2
  171. package/dist/Table/TablePaginationActions.cjs +1 -1
  172. package/dist/Table/TablePaginationActions.d.cts +1 -1
  173. package/dist/Table/TablePaginationActions.d.mts +1 -1
  174. package/dist/Table/TablePaginationActions.mjs +1 -1
  175. package/dist/Table/TableRow.d.cts +1 -2
  176. package/dist/Table/TableRow.d.mts +1 -2
  177. package/dist/Table/TableSortLabel.cjs +1 -1
  178. package/dist/Table/TableSortLabel.d.cts +1 -1
  179. package/dist/Table/TableSortLabel.d.mts +1 -1
  180. package/dist/Table/TableSortLabel.mjs +1 -1
  181. package/dist/Table/hooks.d.cts +1 -1
  182. package/dist/Table/hooks.d.mts +1 -1
  183. package/dist/Table.d.cts +5 -5
  184. package/dist/Table.d.mts +5 -5
  185. package/dist/{TableContext-BeCxbtHH.d.cts → TableContext-DhuRf6Wy.d.mts} +1 -1
  186. package/dist/{TableContext-BiRiYkVZ.d.mts → TableContext-Duj1nVG7.d.cts} +1 -1
  187. package/dist/Tabs/Tab.cjs +306 -0
  188. package/dist/Tabs/Tab.d.cts +62 -0
  189. package/dist/Tabs/Tab.d.mts +62 -0
  190. package/dist/Tabs/Tab.mjs +305 -0
  191. package/dist/Tabs/TabContext.cjs +34 -0
  192. package/dist/Tabs/TabContext.d.cts +20 -0
  193. package/dist/Tabs/TabContext.d.mts +20 -0
  194. package/dist/Tabs/TabContext.mjs +33 -0
  195. package/dist/Tabs/TabList.cjs +31 -0
  196. package/dist/Tabs/TabList.d.cts +11 -0
  197. package/dist/Tabs/TabList.d.mts +11 -0
  198. package/dist/Tabs/TabList.mjs +30 -0
  199. package/dist/Tabs/TabPanel.cjs +40 -0
  200. package/dist/Tabs/TabPanel.d.cts +27 -0
  201. package/dist/Tabs/TabPanel.d.mts +27 -0
  202. package/dist/Tabs/TabPanel.mjs +38 -0
  203. package/dist/Tabs/TabScrollButton.cjs +93 -0
  204. package/dist/Tabs/TabScrollButton.d.cts +2 -0
  205. package/dist/Tabs/TabScrollButton.d.mts +2 -0
  206. package/dist/Tabs/TabScrollButton.mjs +91 -0
  207. package/dist/Tabs/Tabs.cjs +3 -0
  208. package/dist/Tabs/Tabs.d.cts +3 -0
  209. package/dist/Tabs/Tabs.d.mts +3 -0
  210. package/dist/Tabs/Tabs.mjs +2 -0
  211. package/dist/Tabs-BTNOJx5v.mjs +634 -0
  212. package/dist/Tabs-D4tWCq78.cjs +646 -0
  213. package/dist/Tabs.cjs +13 -0
  214. package/dist/Tabs.d.cts +8 -0
  215. package/dist/Tabs.d.mts +8 -0
  216. package/dist/Tabs.mjs +7 -0
  217. package/dist/TabsContext-B_XHbjcS.d.cts +6 -0
  218. package/dist/TabsContext-Dn2kqUwr.d.mts +6 -0
  219. package/dist/TabsValueContext-D40zGCpE.cjs +19 -0
  220. package/dist/TabsValueContext-DvL3inf7.mjs +8 -0
  221. package/dist/TextInput.cjs +4 -4
  222. package/dist/TextInput.d.cts +2 -3
  223. package/dist/TextInput.d.mts +2 -3
  224. package/dist/TextInput.mjs +4 -4
  225. package/dist/ToggleButton/ToggleButton.cjs +1 -1
  226. package/dist/ToggleButton/ToggleButton.d.cts +1 -1
  227. package/dist/ToggleButton/ToggleButton.d.mts +1 -1
  228. package/dist/ToggleButton/ToggleButton.mjs +1 -1
  229. package/dist/ToggleButton/ToggleButtonGroup.cjs +1 -1
  230. package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
  231. package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
  232. package/dist/ToggleButton/ToggleButtonGroup.mjs +1 -1
  233. package/dist/TransferList.cjs +356 -0
  234. package/dist/TransferList.d.cts +67 -0
  235. package/dist/TransferList.d.mts +67 -0
  236. package/dist/TransferList.mjs +354 -0
  237. package/dist/Typography.cjs +1 -1
  238. package/dist/Typography.d.cts +2 -2
  239. package/dist/Typography.d.mts +2 -2
  240. package/dist/Typography.mjs +1 -1
  241. package/dist/View.d.cts +1 -1
  242. package/dist/View.d.mts +1 -1
  243. package/dist/catalog.cjs +4568 -0
  244. package/dist/catalog.d.cts +90 -0
  245. package/dist/catalog.d.mts +90 -0
  246. package/dist/catalog.mjs +4567 -0
  247. package/dist/computePopoverPosition-BIprs_xo.mjs +123 -0
  248. package/dist/computePopoverPosition-DiyEOHnU.cjs +128 -0
  249. package/dist/dividerLine-BNljcGlv.cjs +66 -0
  250. package/dist/dividerLine-FahY-M6_.mjs +31 -0
  251. package/dist/engine.d.cts +1 -1
  252. package/dist/engine.d.mts +1 -1
  253. package/dist/index-B1RFybA_.d.mts +72 -0
  254. package/dist/index-B4TeaB7b.d.cts +72 -0
  255. package/dist/{index-BUoVTCqX.d.mts → index-BGbTuHP9.d.mts} +1 -2
  256. package/dist/{index-Celm-8iN.d.cts → index-BHKgEOZJ.d.cts} +2 -3
  257. package/dist/{index-Chg6pSrr.d.mts → index-BQWjh4rK.d.mts} +2 -3
  258. package/dist/{index-B78VkB0-.d.cts → index-BelFIizY.d.cts} +2 -3
  259. package/dist/index-BkzZxHVj.d.mts +35 -0
  260. package/dist/{index-DbEnSf2m.d.cts → index-BrgwkY6z.d.mts} +3 -4
  261. package/dist/{index-Wnv6jCR3.d.mts → index-Bx0-6yeX.d.mts} +1 -2
  262. package/dist/index-BxVTIMnB.d.cts +1 -0
  263. package/dist/{index-BfZuh9c2.d.mts → index-ByYxVl9O.d.mts} +2 -3
  264. package/dist/index-CE5JG1us.d.mts +34 -0
  265. package/dist/{index-BhibLnZ0.d.cts → index-CG_1uPrD.d.mts} +2 -3
  266. package/dist/{themes-RX2UX5gD.d.mts → index-CJhK7JND.d.mts} +265 -8
  267. package/dist/{index-BB-dLv5V.d.mts → index-CQfJZADG.d.cts} +3 -4
  268. package/dist/{index-CxUsrlg1.d.cts → index-CUz2h5xY.d.mts} +2 -3
  269. package/dist/{index-Bid71KeF.d.cts → index-CbFaWtjK.d.mts} +2 -2
  270. package/dist/{index-DdqdSOct.d.cts → index-ChXeKJCk.d.cts} +1 -2
  271. package/dist/index-CknoXDLQ.d.cts +35 -0
  272. package/dist/{index-BSqet8aO.d.cts → index-ClZyaZrR.d.mts} +2 -3
  273. package/dist/{index-DXvQ-JVZ.d.mts → index-DAwcmIjN.d.cts} +2 -3
  274. package/dist/index-DGnXJwLj.d.mts +72 -0
  275. package/dist/{themes-Kbk9h5cN.d.cts → index-DJ0f69wh.d.cts} +262 -5
  276. package/dist/index-DWjz5ZzG.d.cts +72 -0
  277. package/dist/{index-DNwF3DUX.d.cts → index-DYF8sRE-.d.cts} +2 -3
  278. package/dist/index-DaIIo5QU.d.mts +1 -0
  279. package/dist/{index-CrN4MSUF.d.cts → index-DchHf5cF.d.cts} +1 -1
  280. package/dist/{index-S-ClM6WM.d.mts → index-DtYjdBvO.d.cts} +2 -2
  281. package/dist/{index-Ctqajtac.d.cts → index-Dv_fk1_F.d.cts} +27 -3
  282. package/dist/{index-smqjMLAZ.d.mts → index-K5exjvnX.d.cts} +2 -3
  283. package/dist/index-KnXhlKMr.d.cts +34 -0
  284. package/dist/index-WHFhjfgy.d.cts +98 -0
  285. package/dist/{index-GpnmW6vu.d.mts → index-YKrfFC_I.d.cts} +2 -3
  286. package/dist/index-bpnLB_4K.d.mts +98 -0
  287. package/dist/{index-VOsBSWEu.d.mts → index-h4dYtVrp.d.mts} +1 -1
  288. package/dist/{index-DO9J-Fla.d.mts → index-ha1WjSZ5.d.mts} +27 -3
  289. package/dist/{index-Belxmt1X.d.cts → index-nqUA_6J_.d.cts} +1 -2
  290. package/dist/{index-nc4Sxiy9.d.mts → index-pTNq3iQn.d.mts} +2 -3
  291. package/dist/index.d.cts +1 -2
  292. package/dist/index.d.mts +1 -2
  293. package/dist/isRtl-BJDtm86G.mjs +7 -0
  294. package/dist/isRtl-DTkYHRPo.cjs +12 -0
  295. package/dist/precision-B1lhxnnO.mjs +25 -0
  296. package/dist/precision-B58cTPB2.cjs +48 -0
  297. package/dist/style.cjs +1 -1
  298. package/dist/style.d.cts +2 -2
  299. package/dist/style.d.mts +2 -2
  300. package/dist/style.mjs +1 -1
  301. package/dist/surfaceSystem-BGQBoXv_.cjs +38 -0
  302. package/dist/surfaceSystem-D8TbmKy3.mjs +21 -0
  303. package/dist/theme-BxXuXRgQ.cjs +137 -0
  304. package/dist/theme-Z9_QludW.mjs +102 -0
  305. package/dist/theme.cjs +25 -24
  306. package/dist/theme.d.cts +3 -3
  307. package/dist/theme.d.mts +3 -3
  308. package/dist/theme.mjs +2 -1
  309. package/dist/{theme-CDVxig_g.mjs → themes-L-dE7_ck.mjs} +10 -110
  310. package/dist/{theme-BXlAP3xf.cjs → themes-gd6tcmqS.cjs} +0 -136
  311. package/dist/useControlled-C666KpQ0.cjs +18 -0
  312. package/dist/useControlled-CBRLsO-H.mjs +13 -0
  313. package/dist/{useTablePagination-COTiNH_8.d.mts → useTablePagination-C-u3ru4N.d.cts} +1 -1
  314. package/dist/{useTablePagination-WFkaUZu8.d.cts → useTablePagination-D-39ZmQh.d.mts} +1 -1
  315. package/package.json +83 -2
  316. package/dist/Popover-DwnSLpp1.mjs +0 -253
  317. package/dist/index-B_dKjEDR.d.mts +0 -23
  318. package/dist/index-C1WqEDtQ.d.mts +0 -69
  319. package/dist/index-CA7HnbtH.d.cts +0 -21
  320. package/dist/index-CKZaErxJ.d.mts +0 -21
  321. package/dist/index-DBUwu65Z.d.cts +0 -69
  322. package/dist/index-DzQJSYIh.d.cts +0 -23
  323. package/dist/index-cuv3o-L7.d.mts +0 -34
  324. package/dist/index-nB94D7UM.d.cts +0 -34
@@ -0,0 +1,649 @@
1
+ import { a as src_exports, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
2
+ import { t as themeDefault } from "./themeDefault-Z3KmyIbm.mjs";
3
+ import { n as useDefaultProps, r as useTheme } from "./theme-Z9_QludW.mjs";
4
+ import { t as Icon } from "./Icon-BihOAP4u.mjs";
5
+ import { t as isRtl } from "./isRtl-BJDtm86G.mjs";
6
+ import { a as useMenuListContext, n as getNextRow, r as getOwnRows, t as MenuList } from "./MenuList-B7msJ1IG.mjs";
7
+ import { t as computePopoverPosition } from "./computePopoverPosition-BIprs_xo.mjs";
8
+ import { Children, createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/Menu/MenuPaper.ts
11
+ const elevationSystem = (0, src_exports.system)({ elevation: {
12
+ property: "boxShadow",
13
+ scale: "shadows"
14
+ } });
15
+ const MenuPaper = styled("div", {
16
+ name: "Menu",
17
+ slot: "paper",
18
+ label: "MenuPaper",
19
+ shouldForwardProp: (prop) => ![
20
+ "elevation",
21
+ "layer",
22
+ "margin"
23
+ ].includes(prop)
24
+ })(({ theme, layer, margin }) => ({
25
+ position: "fixed",
26
+ top: 0,
27
+ left: 0,
28
+ zIndex: theme.zOrder[layer],
29
+ minWidth: "10rem",
30
+ maxHeight: `calc(100vh - ${2 * margin}px)`,
31
+ overflowY: "auto",
32
+ backgroundColor: (0, src_exports.get)(theme, `background.${themeDefault(theme, "surfaceBg", "paper")}`),
33
+ borderRadius: theme.radii.sm,
34
+ visibility: "hidden"
35
+ }), elevationSystem);
36
+ //#endregion
37
+ //#region src/Menu/MenuContext.ts
38
+ /** Set by a `Menu`. */
39
+ const MenuContext = createContext(null);
40
+ /** The surrounding menu's settings - or, for a `MenuList` on its own, `Menu`'s defaults. */
41
+ function useMenuContext() {
42
+ const theme = useTheme();
43
+ return useContext(MenuContext) ?? {
44
+ align: "start",
45
+ margin: Number.parseFloat(String(theme.space[2])),
46
+ elevation: 8,
47
+ layer: "modal"
48
+ };
49
+ }
50
+ //#endregion
51
+ //#region src/Menu/utils/getMenuOrigins.ts
52
+ /**
53
+ * The anchor and transform origins `computePopoverPosition` places a list with. `align`
54
+ * is logical - in a right-to-left page `start` is the right edge. Below its trigger, the
55
+ * list lines up with that edge; beside its row, it opens past the row's other edge (to
56
+ * the right for a start-aligned menu in a left-to-right page). The placement flips to the
57
+ * other side on its own where the window has no room.
58
+ */
59
+ function getMenuOrigins(placement, align, isRtl) {
60
+ const isStartLeft = align === "start" !== isRtl;
61
+ const edge = isStartLeft ? "left" : "right";
62
+ if (placement === "below") return {
63
+ anchorOrigin: {
64
+ vertical: "bottom",
65
+ horizontal: edge
66
+ },
67
+ transformOrigin: {
68
+ vertical: "top",
69
+ horizontal: edge
70
+ }
71
+ };
72
+ return {
73
+ anchorOrigin: {
74
+ vertical: "top",
75
+ horizontal: isStartLeft ? "right" : "left"
76
+ },
77
+ transformOrigin: {
78
+ vertical: "top",
79
+ horizontal: edge
80
+ }
81
+ };
82
+ }
83
+ //#endregion
84
+ //#region src/Menu/utils/hasRoomBeside.ts
85
+ /**
86
+ * Whether a list `width` wide fits on either side of its row and still keeps `margin` from
87
+ * the window's edges - so a submenu can open beside the row at all.
88
+ */
89
+ function hasRoomBeside(anchorRect, width, viewportWidth, margin) {
90
+ const roomBefore = anchorRect.left - margin;
91
+ const roomAfter = viewportWidth - margin - (anchorRect.left + anchorRect.width);
92
+ return width <= Math.max(roomBefore, roomAfter);
93
+ }
94
+ //#endregion
95
+ //#region src/Menu/hooks/useMenuPlacement.ts
96
+ /**
97
+ * Places a menu's `position: fixed` surface in the window, next to its anchor - so a
98
+ * scrolling panel's overflow never clips it, while it stays in the menu's own box in the
99
+ * DOM. Placed before paint on every render while open, and again on resize and on any
100
+ * scroll. The surface starts `visibility: hidden` and is shown here, as it is placed - in
101
+ * the same layout pass, so it is visible by the time anything inside it takes focus.
102
+ * Returns whether a list beside its row opened on the other side for want of room.
103
+ */
104
+ function useMenuPlacement({ isOpen, anchorRef, surfaceRef, placement, align, margin, anchorPosition = null }) {
105
+ const [isFlipped, setIsFlipped] = useState(false);
106
+ const pointTop = anchorPosition?.top;
107
+ const pointLeft = anchorPosition?.left ?? 0;
108
+ const place = useCallback(() => {
109
+ const anchor = anchorRef.current;
110
+ const surface = surfaceRef.current;
111
+ if (!anchor || !surface) return;
112
+ const isPoint = pointTop !== void 0;
113
+ const anchorRect = anchor.getBoundingClientRect();
114
+ const paperRect = {
115
+ width: surface.offsetWidth,
116
+ height: surface.offsetHeight
117
+ };
118
+ const viewport = {
119
+ width: window.innerWidth,
120
+ height: window.innerHeight
121
+ };
122
+ const isCramped = placement === "beside" && !hasRoomBeside(anchorRect, paperRect.width, viewport.width, margin);
123
+ const { top, left } = computePopoverPosition({
124
+ anchorReference: isPoint ? "anchorPosition" : "anchorEl",
125
+ anchorPosition: isPoint ? {
126
+ top: pointTop,
127
+ left: pointLeft
128
+ } : void 0,
129
+ anchorRect,
130
+ paperRect,
131
+ ...getMenuOrigins(isCramped ? "below" : placement, align, isRtl(anchor)),
132
+ viewport,
133
+ marginThreshold: margin
134
+ });
135
+ surface.style.top = `${top}px`;
136
+ surface.style.left = `${left}px`;
137
+ const landed = surface.getBoundingClientRect();
138
+ const isOwnBox = paperRect.width > 0 && Math.round(landed.width) === paperRect.width;
139
+ const shiftTop = Math.round(landed.top - top);
140
+ const shiftLeft = Math.round(landed.left - left);
141
+ if (isOwnBox && (shiftTop !== 0 || shiftLeft !== 0)) {
142
+ surface.style.top = `${top - shiftTop}px`;
143
+ surface.style.left = `${left - shiftLeft}px`;
144
+ }
145
+ surface.style.visibility = "visible";
146
+ if (placement === "beside") {
147
+ const isOpeningRight = left + paperRect.width / 2 > anchorRect.left + anchorRect.width / 2;
148
+ const isRightPreferred = align === "start" !== isRtl(anchor);
149
+ setIsFlipped(!isCramped && isOpeningRight !== isRightPreferred);
150
+ }
151
+ }, [
152
+ anchorRef,
153
+ surfaceRef,
154
+ placement,
155
+ align,
156
+ margin,
157
+ pointTop,
158
+ pointLeft
159
+ ]);
160
+ useLayoutEffect(() => {
161
+ if (isOpen) place();
162
+ });
163
+ useEffect(() => {
164
+ if (!isOpen) return void 0;
165
+ window.addEventListener("resize", place);
166
+ window.addEventListener("scroll", place, true);
167
+ return () => {
168
+ window.removeEventListener("resize", place);
169
+ window.removeEventListener("scroll", place, true);
170
+ };
171
+ }, [isOpen, place]);
172
+ return isFlipped;
173
+ }
174
+ //#endregion
175
+ //#region src/MenuItem/Submenu.tsx
176
+ /**
177
+ * A row's submenu: a `MenuList` on its own surface, placed beside the row the way its menu
178
+ * places its list (`align`, the window margin), and drawn on the menu's layer.
179
+ */
180
+ function Submenu({ anchorRef, listId, labelledBy, children }) {
181
+ const menu = useMenuContext();
182
+ const { align, margin, elevation, layer } = menu;
183
+ const surfaceRef = useRef(null);
184
+ const isFlipped = useMenuPlacement({
185
+ isOpen: true,
186
+ anchorRef,
187
+ surfaceRef,
188
+ placement: "beside",
189
+ align,
190
+ margin
191
+ });
192
+ const flippedAlign = align === "start" ? "end" : "start";
193
+ const context = useMemo(() => ({
194
+ ...menu,
195
+ align: isFlipped ? flippedAlign : align
196
+ }), [
197
+ menu,
198
+ isFlipped,
199
+ flippedAlign,
200
+ align
201
+ ]);
202
+ return /* @__PURE__ */ jsx(MenuPaper, {
203
+ ref: surfaceRef,
204
+ elevation,
205
+ layer,
206
+ margin,
207
+ children: /* @__PURE__ */ jsx(MenuContext.Provider, {
208
+ value: context,
209
+ children: /* @__PURE__ */ jsx(MenuList, {
210
+ id: listId,
211
+ "aria-labelledby": labelledBy,
212
+ width: "100%",
213
+ children
214
+ })
215
+ })
216
+ });
217
+ }
218
+ //#endregion
219
+ //#region src/MenuItem/useSubmenu.ts
220
+ /**
221
+ * A row's submenu, opened while the row or anything in its submenu has focus. The pointer
222
+ * moves focus as it goes, so hovering a row opens its submenu and hovering a sibling closes
223
+ * it - the pointer and the keys never disagree. Right goes in and Left comes back, swapped
224
+ * in a right-to-left page.
225
+ */
226
+ function useSubmenu(rowRef, isEnabled) {
227
+ const [isOpen, setIsOpen] = useState(false);
228
+ const entryRef = useRef(null);
229
+ const listId = useId();
230
+ const isEnteringRef = useRef(false);
231
+ const focusFirstRow = () => {
232
+ const list = document.getElementById(listId);
233
+ getNextRow(getOwnRows(list), null, "first", false)?.focus();
234
+ };
235
+ useEffect(() => {
236
+ if (isOpen && isEnteringRef.current) {
237
+ isEnteringRef.current = false;
238
+ focusFirstRow();
239
+ }
240
+ });
241
+ const handleRowFocus = () => {
242
+ if (isEnabled) setIsOpen(true);
243
+ };
244
+ const handleRowKeyDown = (event) => {
245
+ const inward = isRtl(event.currentTarget) ? "ArrowLeft" : "ArrowRight";
246
+ if (!isEnabled || ![
247
+ inward,
248
+ "Enter",
249
+ " "
250
+ ].includes(event.key)) return false;
251
+ event.preventDefault();
252
+ event.stopPropagation();
253
+ if (isOpen) focusFirstRow();
254
+ else {
255
+ isEnteringRef.current = true;
256
+ setIsOpen(true);
257
+ }
258
+ return true;
259
+ };
260
+ const handleEntryKeyDown = (event) => {
261
+ const list = document.getElementById(listId);
262
+ if (event.target.closest("[role=\"menu\"]") !== list) return;
263
+ const outward = isRtl(event.currentTarget) ? "ArrowRight" : "ArrowLeft";
264
+ if (event.key !== outward && event.key !== "Escape") return;
265
+ event.preventDefault();
266
+ event.stopPropagation();
267
+ rowRef.current.focus();
268
+ setIsOpen(false);
269
+ };
270
+ const handleEntryBlur = (event) => {
271
+ if (!event.currentTarget.contains(event.relatedTarget)) setIsOpen(false);
272
+ };
273
+ return {
274
+ isOpen,
275
+ entryRef,
276
+ listId,
277
+ handleRowFocus,
278
+ handleRowKeyDown,
279
+ handleEntryKeyDown,
280
+ handleEntryBlur
281
+ };
282
+ }
283
+ //#endregion
284
+ //#region src/MenuItem/MenuItem.tsx
285
+ const shouldForwardProp = createShouldForwardProp([
286
+ "color",
287
+ "textColor",
288
+ "sizeToken",
289
+ "selected",
290
+ "highlighted",
291
+ "disabled",
292
+ "dense",
293
+ "disableGutters",
294
+ "divider",
295
+ "isMenu"
296
+ ]);
297
+ const baseStyle = ({ theme }) => ({
298
+ display: "flex",
299
+ alignItems: "center",
300
+ gap: theme.space[1],
301
+ cursor: "pointer",
302
+ fontFamily: theme.fonts.body,
303
+ lineHeight: theme.lineHeights.base,
304
+ listStyle: "none",
305
+ userSelect: "none",
306
+ whiteSpace: "nowrap",
307
+ transition: "background-color 0.12s ease",
308
+ outline: "none"
309
+ });
310
+ const sizeVariants = ({ theme, sizeToken, dense, disableGutters }) => {
311
+ const s = theme.sizes[sizeToken];
312
+ const verticalPadding = dense ? theme.space[.5] : void 0;
313
+ return {
314
+ paddingTop: verticalPadding ?? theme.space[s.paddingTop],
315
+ paddingBottom: verticalPadding ?? theme.space[s.paddingBottom],
316
+ paddingLeft: disableGutters ? 0 : theme.space[s.paddingLeft],
317
+ paddingRight: disableGutters ? 0 : theme.space[s.paddingRight],
318
+ fontSize: theme.fontSizes[s.fontSize]
319
+ };
320
+ };
321
+ const dividerStyle = ({ theme, divider }) => divider ? {
322
+ borderBottomWidth: theme.borderWidths.thin,
323
+ borderBottomStyle: "solid",
324
+ borderBottomColor: (0, src_exports.get)(theme, "border.light")
325
+ } : {};
326
+ const menuStyles = ({ theme, color, textColor, disabled }) => {
327
+ if (disabled) return {
328
+ color: (0, src_exports.get)(theme, "text.disabled"),
329
+ cursor: "default"
330
+ };
331
+ const main = (0, src_exports.get)(theme, `palette.${color}.main`);
332
+ const highlight = { backgroundColor: `${main}1F` };
333
+ return {
334
+ color: textColor ? (0, src_exports.get)(theme, `text.${textColor}`) : main,
335
+ "&:focus": highlight,
336
+ "&:focus-visible": {
337
+ outline: `${theme.borderWidths.base} solid ${main}`,
338
+ outlineOffset: `-${theme.borderWidths.base}`
339
+ },
340
+ "&[aria-expanded=\"true\"]": highlight
341
+ };
342
+ };
343
+ const interactionStyles = (props) => {
344
+ const { theme, color, textColor, selected, highlighted, disabled, isMenu } = props;
345
+ if (isMenu) return menuStyles(props);
346
+ const main = (0, src_exports.get)(theme, `palette.${color}.main`);
347
+ const hoverBg = `${main}1F`;
348
+ const selectedBg = `${main}29`;
349
+ const activeSelectedBg = `${main}3D`;
350
+ if (disabled) return {
351
+ color: (0, src_exports.get)(theme, "text.disabled"),
352
+ cursor: "not-allowed",
353
+ pointerEvents: "none"
354
+ };
355
+ const baseColor = textColor ? (0, src_exports.get)(theme, `text.${textColor}`) : main;
356
+ return {
357
+ color: selected ? main : baseColor,
358
+ backgroundColor: selected ? highlighted ? activeSelectedBg : selectedBg : highlighted ? hoverBg : "transparent",
359
+ "&:hover": { backgroundColor: selected ? activeSelectedBg : hoverBg }
360
+ };
361
+ };
362
+ const MenuItemRoot = styled("li", {
363
+ name: "MenuItem",
364
+ label: "MenuItem",
365
+ shouldForwardProp
366
+ })(baseStyle, sizeVariants, dividerStyle, interactionStyles);
367
+ const CheckSlot = styled("span", {
368
+ name: "MenuItem",
369
+ slot: "check",
370
+ label: "MenuItemCheck"
371
+ })({
372
+ display: "inline-flex",
373
+ width: "1.125rem",
374
+ flexShrink: 0
375
+ });
376
+ const StartIconSlot = styled("span", {
377
+ name: "MenuItem",
378
+ slot: "startIcon",
379
+ label: "MenuItemStartIcon"
380
+ })(({ theme }) => ({
381
+ display: "inline-flex",
382
+ alignItems: "center",
383
+ justifyContent: "center",
384
+ width: theme.icon.sm,
385
+ height: theme.icon.sm,
386
+ flexShrink: 0
387
+ }));
388
+ const LabelSlot = styled("span", {
389
+ name: "MenuItem",
390
+ slot: "label",
391
+ label: "MenuItemLabel"
392
+ })({
393
+ flex: 1,
394
+ minWidth: 0
395
+ });
396
+ const ShortcutSlot = styled("span", {
397
+ name: "MenuItem",
398
+ slot: "shortcut",
399
+ label: "MenuItemShortcut"
400
+ })(({ theme }) => ({
401
+ marginLeft: theme.space[3],
402
+ color: (0, src_exports.get)(theme, "text.secondary"),
403
+ fontSize: "0.875em"
404
+ }));
405
+ const SubmenuIconSlot = styled("span", {
406
+ name: "MenuItem",
407
+ slot: "submenuIcon",
408
+ label: "MenuItemSubmenuIcon"
409
+ })(({ theme }) => ({
410
+ display: "inline-flex",
411
+ marginLeft: theme.space[2],
412
+ "[dir=\"rtl\"] &": { transform: "scaleX(-1)" }
413
+ }));
414
+ const EntrySlot = styled("li", {
415
+ name: "MenuItem",
416
+ slot: "entry",
417
+ label: "MenuItemEntry",
418
+ shouldForwardProp: createShouldForwardProp(["hasSecondaryAction"])
419
+ })(({ hasSecondaryAction }) => ({
420
+ listStyle: "none",
421
+ ...hasSecondaryAction && {
422
+ display: "flex",
423
+ alignItems: "center",
424
+ "& > [role^=\"menuitem\"]": {
425
+ flex: "1 1 auto",
426
+ minWidth: 0
427
+ }
428
+ }
429
+ }));
430
+ const SecondaryActionSlot = styled("span", {
431
+ name: "MenuItem",
432
+ slot: "secondaryAction",
433
+ label: "MenuItemSecondaryAction"
434
+ })(({ theme }) => ({
435
+ display: "inline-flex",
436
+ alignItems: "center",
437
+ flexShrink: 0,
438
+ paddingInlineEnd: theme.space[1]
439
+ }));
440
+ function isKeyboardFocus(element) {
441
+ try {
442
+ return element.matches(":focus-visible");
443
+ } catch {
444
+ return false;
445
+ }
446
+ }
447
+ function useRowLook(own, menu) {
448
+ const theme = useTheme();
449
+ const dp = useDefaultProps("MenuItem");
450
+ return {
451
+ color: own.color ?? menu?.color ?? dp.color ?? themeDefault(theme, "color", "primary"),
452
+ size: own.size ?? menu?.size ?? dp.size ?? themeDefault(theme, "size", "md"),
453
+ textColor: own.textColor ?? menu?.textColor ?? dp.textColor,
454
+ dense: own.dense ?? menu?.dense ?? dp.dense ?? false
455
+ };
456
+ }
457
+ const getRowAria = (state) => ({
458
+ "aria-haspopup": state.hasSubmenu ? "menu" : void 0,
459
+ "aria-expanded": state.hasSubmenu ? state.isSubmenuOpen : void 0,
460
+ "aria-controls": state.isSubmenuOpen ? state.submenuId : void 0,
461
+ "aria-checked": state.role === "menuitem" ? void 0 : state.selected,
462
+ "aria-keyshortcuts": typeof state.shortcut === "string" ? state.shortcut : void 0,
463
+ "aria-describedby": state.note ? state.noteId : void 0
464
+ });
465
+ const joinClassNames = (...names) => names.filter(Boolean).join(" ") || void 0;
466
+ /**
467
+ * @description A row of a list. Inside a `MenuList` it is a menu row - a `menuitem`
468
+ * (or `menuitemradio` / `menuitemcheckbox`) with a leading icon column, its label and a
469
+ * trailing shortcut, chosen by a click, Enter or Space. Anywhere else it is `Select`'s
470
+ * `<li role="option">` (override via `as`), whose selection, highlight and density props
471
+ * `Select` injects; used on its own it renders a static, styled row.
472
+ */
473
+ function MenuItem({ value, children, as, disabled = false, selected = false, highlighted = false, multiple = false, color: colorProp, textColor: textColorProp, size: sizeProp, dense: denseProp, disableGutters = false, divider = false, autoFocus = false, focusVisibleClassName, onSelect, role = "menuitem", startIcon, shortcut, note, onClick, submenu, emptyLabel, secondaryAction, id, className, "data-testid": dataTestid }) {
474
+ const menu = useMenuListContext();
475
+ const isMenu = menu !== null;
476
+ const { color, size, textColor, dense } = useRowLook({
477
+ color: colorProp,
478
+ size: sizeProp,
479
+ textColor: textColorProp,
480
+ dense: denseProp
481
+ }, menu);
482
+ const rootRef = useRef(null);
483
+ const [isFocusVisible, setIsFocusVisible] = useState(false);
484
+ const noteId = useId();
485
+ const fallbackId = useId();
486
+ const hasSubmenu = isMenu && submenu !== void 0;
487
+ const { isOpen: isSubmenuOpen, entryRef, listId: submenuId, handleRowFocus, handleRowKeyDown, handleEntryKeyDown, handleEntryBlur } = useSubmenu(rootRef, hasSubmenu && !disabled);
488
+ useEffect(() => {
489
+ if (autoFocus) rootRef.current?.focus();
490
+ }, [autoFocus]);
491
+ const choose = (event) => {
492
+ if (disabled || hasSubmenu) return;
493
+ if (menu) {
494
+ onClick?.(event);
495
+ menu.onActivate(value, event);
496
+ } else if (value !== void 0) onSelect?.(value);
497
+ };
498
+ const handleMouseDown = (event) => {
499
+ if (!isMenu) event.preventDefault();
500
+ };
501
+ const handleKeyDown = (event) => {
502
+ if (handleRowKeyDown(event)) return;
503
+ if (event.key === "Enter") {
504
+ event.preventDefault();
505
+ choose(event);
506
+ } else if (event.key === " ") event.preventDefault();
507
+ };
508
+ const handleKeyUp = (event) => {
509
+ if (event.key === " ") choose(event);
510
+ };
511
+ const handlePointerMove = (event) => {
512
+ const row = event.currentTarget;
513
+ if (!disabled && row.ownerDocument.activeElement !== row) row.focus();
514
+ };
515
+ const handleFocus = (event) => {
516
+ handleRowFocus();
517
+ if (focusVisibleClassName && isKeyboardFocus(event.currentTarget)) setIsFocusVisible(true);
518
+ };
519
+ const handleBlur = () => {
520
+ setIsFocusVisible(false);
521
+ };
522
+ const rootClassName = joinClassNames(className, isFocusVisible && focusVisibleClassName);
523
+ const rootProps = {
524
+ as,
525
+ ref: rootRef,
526
+ id,
527
+ tabIndex: -1,
528
+ "aria-disabled": disabled || void 0,
529
+ "data-value": value,
530
+ color,
531
+ textColor,
532
+ sizeToken: size,
533
+ selected,
534
+ highlighted,
535
+ disabled,
536
+ dense,
537
+ disableGutters,
538
+ divider,
539
+ isMenu,
540
+ className: rootClassName,
541
+ "data-testid": dataTestid,
542
+ onMouseDown: handleMouseDown,
543
+ onClick: choose,
544
+ onFocus: handleFocus,
545
+ onBlur: handleBlur
546
+ };
547
+ if (!isMenu) return /* @__PURE__ */ jsxs(MenuItemRoot, {
548
+ ...rootProps,
549
+ role: "option",
550
+ "aria-selected": selected,
551
+ children: [multiple && /* @__PURE__ */ jsx(CheckSlot, {
552
+ "aria-hidden": true,
553
+ children: selected && /* @__PURE__ */ jsx(Icon, {
554
+ name: "check",
555
+ size: "1.125rem",
556
+ color: "inherit"
557
+ })
558
+ }), children]
559
+ });
560
+ const tick = role !== "menuitem" && selected ? /* @__PURE__ */ jsx(Icon, {
561
+ name: "check",
562
+ size: "sm",
563
+ color: "inherit"
564
+ }) : null;
565
+ const rowId = id ?? fallbackId;
566
+ const hasSecondaryAction = secondaryAction != null;
567
+ const row = /* @__PURE__ */ jsxs(MenuItemRoot, {
568
+ ...rootProps,
569
+ as: hasSubmenu || hasSecondaryAction ? "div" : as,
570
+ id: rowId,
571
+ role,
572
+ ...getRowAria({
573
+ role,
574
+ selected,
575
+ hasSubmenu,
576
+ isSubmenuOpen,
577
+ submenuId,
578
+ shortcut,
579
+ note,
580
+ noteId
581
+ }),
582
+ title: note,
583
+ onKeyDown: handleKeyDown,
584
+ onKeyUp: handleKeyUp,
585
+ onPointerMove: handlePointerMove,
586
+ children: [
587
+ /* @__PURE__ */ jsx(StartIconSlot, {
588
+ "aria-hidden": true,
589
+ children: startIcon ?? tick
590
+ }),
591
+ /* @__PURE__ */ jsx(LabelSlot, {
592
+ "data-menu-label": true,
593
+ children
594
+ }),
595
+ shortcut != null && /* @__PURE__ */ jsx(ShortcutSlot, {
596
+ "aria-hidden": true,
597
+ children: shortcut
598
+ }),
599
+ hasSubmenu && /* @__PURE__ */ jsx(SubmenuIconSlot, {
600
+ "aria-hidden": true,
601
+ children: /* @__PURE__ */ jsx(Icon, {
602
+ name: "chevron_right",
603
+ size: "sm",
604
+ color: "inherit"
605
+ })
606
+ }),
607
+ note && /* @__PURE__ */ jsx("span", {
608
+ id: noteId,
609
+ hidden: true,
610
+ children: note
611
+ })
612
+ ]
613
+ });
614
+ if (!hasSubmenu && !hasSecondaryAction) return row;
615
+ if (!hasSubmenu) return /* @__PURE__ */ jsxs(EntrySlot, {
616
+ role: "none",
617
+ hasSecondaryAction: true,
618
+ children: [row, /* @__PURE__ */ jsx(SecondaryActionSlot, {
619
+ "aria-hidden": true,
620
+ children: secondaryAction
621
+ })]
622
+ });
623
+ const hasRows = Children.toArray(submenu).length > 0;
624
+ return /* @__PURE__ */ jsxs(EntrySlot, {
625
+ ref: entryRef,
626
+ role: "none",
627
+ hasSecondaryAction,
628
+ onKeyDown: handleEntryKeyDown,
629
+ onBlur: handleEntryBlur,
630
+ children: [
631
+ row,
632
+ hasSecondaryAction && /* @__PURE__ */ jsx(SecondaryActionSlot, {
633
+ "aria-hidden": true,
634
+ children: secondaryAction
635
+ }),
636
+ isSubmenuOpen && /* @__PURE__ */ jsx(Submenu, {
637
+ anchorRef: entryRef,
638
+ listId: submenuId,
639
+ labelledBy: rowId,
640
+ children: hasRows ? submenu : emptyLabel != null && /* @__PURE__ */ jsx(MenuItem, {
641
+ disabled: true,
642
+ children: emptyLabel
643
+ })
644
+ })
645
+ ]
646
+ });
647
+ }
648
+ //#endregion
649
+ export { MenuPaper as i, useMenuPlacement as n, MenuContext as r, MenuItem as t };