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