@soroush.tech/design-system 2.0.0-rc.0 → 2.0.0-rc.2

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 (299) hide show
  1. package/README.md +17 -1
  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 +1 -1
  35. package/dist/FormControl.d.cts +1 -2
  36. package/dist/FormControl.d.mts +1 -2
  37. package/dist/FormControl.mjs +1 -1
  38. package/dist/FormHelperText.d.cts +1 -1
  39. package/dist/FormHelperText.d.mts +1 -1
  40. package/dist/FormLabel.d.cts +1 -1
  41. package/dist/FormLabel.d.mts +1 -1
  42. package/dist/Grid.d.cts +1 -3
  43. package/dist/Grid.d.mts +1 -3
  44. package/dist/{Icon-CI6q2Eyi.cjs → Icon-Cvuhp9ek.cjs} +12 -2
  45. package/dist/{Icon-CH3asUJu.mjs → Icon-DlheCTJb.mjs} +12 -2
  46. package/dist/Icon.cjs +1 -1
  47. package/dist/Icon.d.cts +1 -1
  48. package/dist/Icon.d.mts +1 -1
  49. package/dist/Icon.mjs +1 -1
  50. package/dist/Image.d.cts +1 -2
  51. package/dist/Image.d.mts +1 -2
  52. package/dist/LinearProgress.d.cts +2 -3
  53. package/dist/LinearProgress.d.mts +2 -3
  54. package/dist/Link.cjs +1 -1
  55. package/dist/Link.d.cts +1 -1
  56. package/dist/Link.d.mts +1 -1
  57. package/dist/Link.mjs +1 -1
  58. package/dist/Menu/ContextMenu.cjs +146 -0
  59. package/dist/Menu/ContextMenu.d.cts +52 -0
  60. package/dist/Menu/ContextMenu.d.mts +52 -0
  61. package/dist/Menu/ContextMenu.mjs +145 -0
  62. package/dist/Menu/Menu.cjs +3 -0
  63. package/dist/Menu/Menu.d.cts +2 -0
  64. package/dist/Menu/Menu.d.mts +2 -0
  65. package/dist/Menu/Menu.mjs +2 -0
  66. package/dist/Menu/MenuDivider.cjs +29 -0
  67. package/dist/Menu/MenuDivider.d.cts +12 -0
  68. package/dist/Menu/MenuDivider.d.mts +12 -0
  69. package/dist/Menu/MenuDivider.mjs +28 -0
  70. package/dist/Menu/MenuItems.cjs +29 -0
  71. package/dist/Menu/MenuItems.d.cts +2 -0
  72. package/dist/Menu/MenuItems.d.mts +2 -0
  73. package/dist/Menu/MenuItems.mjs +28 -0
  74. package/dist/Menu/MenuList.cjs +3 -0
  75. package/dist/Menu/MenuList.d.cts +38 -0
  76. package/dist/Menu/MenuList.d.mts +38 -0
  77. package/dist/Menu/MenuList.mjs +2 -0
  78. package/dist/Menu-BkKPTOfh.cjs +172 -0
  79. package/dist/Menu-tECbAEFj.mjs +167 -0
  80. package/dist/Menu.cjs +13 -0
  81. package/dist/Menu.d.cts +7 -0
  82. package/dist/Menu.d.mts +7 -0
  83. package/dist/Menu.mjs +6 -0
  84. package/dist/MenuItem-BR7ingQx.mjs +654 -0
  85. package/dist/MenuItem-CfdN4axw.cjs +684 -0
  86. package/dist/MenuItem.cjs +2 -148
  87. package/dist/MenuItem.d.cts +2 -52
  88. package/dist/MenuItem.d.mts +2 -52
  89. package/dist/MenuItem.mjs +1 -147
  90. package/dist/MenuList-B7msJ1IG.mjs +187 -0
  91. package/dist/MenuList-D4imLXAa.cjs +223 -0
  92. package/dist/MenuListContext-Dml16k0X.d.mts +21 -0
  93. package/dist/MenuListContext-vujGcRk9.d.cts +21 -0
  94. package/dist/Modal.d.cts +1 -1
  95. package/dist/Modal.d.mts +1 -1
  96. package/dist/NativeSelect.cjs +2 -2
  97. package/dist/NativeSelect.d.cts +2 -3
  98. package/dist/NativeSelect.d.mts +2 -3
  99. package/dist/NativeSelect.mjs +2 -2
  100. package/dist/Pagination/PaginationItem.cjs +1 -1
  101. package/dist/Pagination/PaginationItem.d.cts +1 -1
  102. package/dist/Pagination/PaginationItem.d.mts +1 -1
  103. package/dist/Pagination/PaginationItem.mjs +1 -1
  104. package/dist/Pagination.d.cts +2 -2
  105. package/dist/Pagination.d.mts +2 -2
  106. package/dist/Paper.cjs +1 -1
  107. package/dist/Paper.d.cts +2 -1
  108. package/dist/Paper.d.mts +2 -1
  109. package/dist/Paper.mjs +1 -1
  110. package/dist/{Popover-TpwRSORC.cjs → Popover-CiZfgiKE.cjs} +5 -125
  111. package/dist/Popover-QjM5Z1CR.mjs +133 -0
  112. package/dist/Popover.cjs +1 -1
  113. package/dist/Popover.d.cts +6 -7
  114. package/dist/Popover.d.mts +6 -7
  115. package/dist/Popover.mjs +1 -1
  116. package/dist/Pressable.cjs +1 -1
  117. package/dist/Pressable.d.cts +1 -1
  118. package/dist/Pressable.d.mts +1 -1
  119. package/dist/Pressable.mjs +1 -1
  120. package/dist/Quote.d.cts +2 -3
  121. package/dist/Quote.d.mts +2 -3
  122. package/dist/Radio.d.cts +1 -2
  123. package/dist/Radio.d.mts +1 -2
  124. package/dist/Select.cjs +3 -3
  125. package/dist/Select.d.cts +2 -3
  126. package/dist/Select.d.mts +2 -3
  127. package/dist/Select.mjs +3 -3
  128. package/dist/Sidebar/Sidebar.d.cts +1 -1
  129. package/dist/Sidebar/Sidebar.d.mts +1 -1
  130. package/dist/Sidebar/SidebarItem.cjs +1 -1
  131. package/dist/Sidebar/SidebarItem.d.cts +3 -4
  132. package/dist/Sidebar/SidebarItem.d.mts +3 -4
  133. package/dist/Sidebar/SidebarItem.mjs +1 -1
  134. package/dist/Skeleton.d.cts +1 -2
  135. package/dist/Skeleton.d.mts +1 -2
  136. package/dist/Switch.cjs +1 -1
  137. package/dist/Switch.d.cts +1 -2
  138. package/dist/Switch.d.mts +1 -2
  139. package/dist/Switch.mjs +1 -1
  140. package/dist/Table/Table.d.cts +2 -3
  141. package/dist/Table/Table.d.mts +2 -3
  142. package/dist/Table/TableBody.d.cts +1 -2
  143. package/dist/Table/TableBody.d.mts +1 -2
  144. package/dist/Table/TableCell.d.cts +1 -1
  145. package/dist/Table/TableCell.d.mts +1 -1
  146. package/dist/Table/TableContainer.d.cts +1 -3
  147. package/dist/Table/TableContainer.d.mts +1 -3
  148. package/dist/Table/TableControl.d.cts +1 -1
  149. package/dist/Table/TableControl.d.mts +1 -1
  150. package/dist/Table/TableFooter.d.cts +1 -2
  151. package/dist/Table/TableFooter.d.mts +1 -2
  152. package/dist/Table/TableHead.d.cts +1 -2
  153. package/dist/Table/TableHead.d.mts +1 -2
  154. package/dist/Table/TablePagination.d.cts +2 -2
  155. package/dist/Table/TablePagination.d.mts +2 -2
  156. package/dist/Table/TablePaginationActions.cjs +1 -1
  157. package/dist/Table/TablePaginationActions.d.cts +1 -1
  158. package/dist/Table/TablePaginationActions.d.mts +1 -1
  159. package/dist/Table/TablePaginationActions.mjs +1 -1
  160. package/dist/Table/TableRow.d.cts +1 -2
  161. package/dist/Table/TableRow.d.mts +1 -2
  162. package/dist/Table/TableSortLabel.cjs +1 -1
  163. package/dist/Table/TableSortLabel.d.cts +1 -1
  164. package/dist/Table/TableSortLabel.d.mts +1 -1
  165. package/dist/Table/TableSortLabel.mjs +1 -1
  166. package/dist/Table/hooks.d.cts +1 -1
  167. package/dist/Table/hooks.d.mts +1 -1
  168. package/dist/Table.d.cts +5 -5
  169. package/dist/Table.d.mts +5 -5
  170. package/dist/{TableContext-BeCxbtHH.d.cts → TableContext-6PgGpUzM.d.mts} +1 -1
  171. package/dist/{TableContext-BiRiYkVZ.d.mts → TableContext-CBGk-Lh8.d.cts} +1 -1
  172. package/dist/Tabs/Tab.cjs +306 -0
  173. package/dist/Tabs/Tab.d.cts +62 -0
  174. package/dist/Tabs/Tab.d.mts +62 -0
  175. package/dist/Tabs/Tab.mjs +305 -0
  176. package/dist/Tabs/TabContext.cjs +34 -0
  177. package/dist/Tabs/TabContext.d.cts +20 -0
  178. package/dist/Tabs/TabContext.d.mts +20 -0
  179. package/dist/Tabs/TabContext.mjs +33 -0
  180. package/dist/Tabs/TabList.cjs +31 -0
  181. package/dist/Tabs/TabList.d.cts +11 -0
  182. package/dist/Tabs/TabList.d.mts +11 -0
  183. package/dist/Tabs/TabList.mjs +30 -0
  184. package/dist/Tabs/TabPanel.cjs +40 -0
  185. package/dist/Tabs/TabPanel.d.cts +27 -0
  186. package/dist/Tabs/TabPanel.d.mts +27 -0
  187. package/dist/Tabs/TabPanel.mjs +38 -0
  188. package/dist/Tabs/TabScrollButton.cjs +93 -0
  189. package/dist/Tabs/TabScrollButton.d.cts +2 -0
  190. package/dist/Tabs/TabScrollButton.d.mts +2 -0
  191. package/dist/Tabs/TabScrollButton.mjs +91 -0
  192. package/dist/Tabs/Tabs.cjs +3 -0
  193. package/dist/Tabs/Tabs.d.cts +3 -0
  194. package/dist/Tabs/Tabs.d.mts +3 -0
  195. package/dist/Tabs/Tabs.mjs +2 -0
  196. package/dist/Tabs-D_wkX-Jb.cjs +645 -0
  197. package/dist/Tabs-YfCUbkQV.mjs +633 -0
  198. package/dist/Tabs.cjs +13 -0
  199. package/dist/Tabs.d.cts +8 -0
  200. package/dist/Tabs.d.mts +8 -0
  201. package/dist/Tabs.mjs +7 -0
  202. package/dist/TabsContext-C2agsLBN.d.cts +6 -0
  203. package/dist/TabsContext-DqyxdmGW.d.mts +6 -0
  204. package/dist/TabsValueContext-D40zGCpE.cjs +19 -0
  205. package/dist/TabsValueContext-DvL3inf7.mjs +8 -0
  206. package/dist/TextInput.cjs +1 -1
  207. package/dist/TextInput.d.cts +1 -2
  208. package/dist/TextInput.d.mts +1 -2
  209. package/dist/TextInput.mjs +1 -1
  210. package/dist/ToggleButton/ToggleButton.cjs +1 -1
  211. package/dist/ToggleButton/ToggleButton.d.cts +1 -1
  212. package/dist/ToggleButton/ToggleButton.d.mts +1 -1
  213. package/dist/ToggleButton/ToggleButton.mjs +1 -1
  214. package/dist/ToggleButton/ToggleButtonGroup.cjs +1 -1
  215. package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
  216. package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
  217. package/dist/ToggleButton/ToggleButtonGroup.mjs +1 -1
  218. package/dist/Typography.cjs +1 -1
  219. package/dist/Typography.d.cts +2 -2
  220. package/dist/Typography.d.mts +2 -2
  221. package/dist/Typography.mjs +1 -1
  222. package/dist/View.d.cts +1 -1
  223. package/dist/View.d.mts +1 -1
  224. package/dist/catalog.cjs +4110 -0
  225. package/dist/catalog.d.cts +90 -0
  226. package/dist/catalog.d.mts +90 -0
  227. package/dist/catalog.mjs +4109 -0
  228. package/dist/computePopoverPosition-BIprs_xo.mjs +123 -0
  229. package/dist/computePopoverPosition-DiyEOHnU.cjs +128 -0
  230. package/dist/dividerLine-BNljcGlv.cjs +66 -0
  231. package/dist/dividerLine-FahY-M6_.mjs +31 -0
  232. package/dist/engine.d.cts +1 -1
  233. package/dist/engine.d.mts +1 -1
  234. package/dist/index-B3LIhqHR.d.cts +98 -0
  235. package/dist/{index-DbEnSf2m.d.cts → index-B8DNxyEw.d.mts} +3 -4
  236. package/dist/{index-CxUsrlg1.d.cts → index-BCnKYNlZ.d.cts} +1 -2
  237. package/dist/{index-BUoVTCqX.d.mts → index-BFruxTHv.d.cts} +2 -3
  238. package/dist/{index-BSqet8aO.d.cts → index-BSA6SKao.d.mts} +2 -3
  239. package/dist/{index-CrN4MSUF.d.cts → index-BVPrG1L0.d.mts} +1 -1
  240. package/dist/{index-Celm-8iN.d.cts → index-BbgFYfX_.d.mts} +3 -4
  241. package/dist/{index-B78VkB0-.d.cts → index-Bhdn4KTy.d.cts} +2 -3
  242. package/dist/{index-Chg6pSrr.d.mts → index-BiVvxOvj.d.cts} +3 -4
  243. package/dist/index-BjPX49XA.d.mts +34 -0
  244. package/dist/{index-BB-dLv5V.d.mts → index-BjfPEP_5.d.cts} +3 -4
  245. package/dist/{index-Bid71KeF.d.cts → index-BlLH6rlE.d.cts} +2 -2
  246. package/dist/{index-Ctqajtac.d.cts → index-BqpS_Huq.d.mts} +12 -4
  247. package/dist/{index-BhibLnZ0.d.cts → index-Bxd9NOWb.d.mts} +2 -3
  248. package/dist/index-C3KrFPCj.d.mts +35 -0
  249. package/dist/{themes-RX2UX5gD.d.mts → index-CVNJEUwJ.d.mts} +217 -8
  250. package/dist/index-CWnbCxgw.d.cts +72 -0
  251. package/dist/index-Cj5Rhh_9.d.mts +72 -0
  252. package/dist/index-CoEqjFYn.d.mts +98 -0
  253. package/dist/{index-S-ClM6WM.d.mts → index-CrIxI8Na.d.mts} +2 -2
  254. package/dist/index-DBteSahY.d.cts +1 -0
  255. package/dist/index-DCmH5f9I.d.cts +72 -0
  256. package/dist/{index-VOsBSWEu.d.mts → index-DDJuUfL5.d.cts} +1 -1
  257. package/dist/{index-DdqdSOct.d.cts → index-DIC7HKpP.d.mts} +2 -3
  258. package/dist/{index-BfZuh9c2.d.mts → index-DJCpnTH3.d.mts} +2 -3
  259. package/dist/index-DQcnJ5H4.d.cts +35 -0
  260. package/dist/{index-DNwF3DUX.d.cts → index-DXhMkjQ6.d.cts} +2 -3
  261. package/dist/index-DckSub2J.d.mts +72 -0
  262. package/dist/{index-nc4Sxiy9.d.mts → index-DeDxYlSQ.d.mts} +2 -3
  263. package/dist/{themes-Kbk9h5cN.d.cts → index-DmJ7yWWi.d.cts} +214 -5
  264. package/dist/{index-Wnv6jCR3.d.mts → index-DqjXDutI.d.mts} +1 -2
  265. package/dist/{index-GpnmW6vu.d.mts → index-DrVYWt-X.d.mts} +1 -2
  266. package/dist/{index-Belxmt1X.d.cts → index-DuVNRXP4.d.cts} +1 -2
  267. package/dist/{index-smqjMLAZ.d.mts → index-IdMqR82e.d.cts} +2 -3
  268. package/dist/{index-DXvQ-JVZ.d.mts → index-XxydXX8l.d.cts} +2 -3
  269. package/dist/index-_G1osn09.d.mts +1 -0
  270. package/dist/index-gnh-Oe0n.d.cts +34 -0
  271. package/dist/{index-DO9J-Fla.d.mts → index-qlfNErNd.d.cts} +12 -4
  272. package/dist/index.d.cts +1 -2
  273. package/dist/index.d.mts +1 -2
  274. package/dist/style.cjs +1 -1
  275. package/dist/style.d.cts +2 -2
  276. package/dist/style.d.mts +2 -2
  277. package/dist/style.mjs +1 -1
  278. package/dist/surfaceSystem-BGQBoXv_.cjs +38 -0
  279. package/dist/surfaceSystem-D8TbmKy3.mjs +21 -0
  280. package/dist/theme-BxXuXRgQ.cjs +137 -0
  281. package/dist/theme-Z9_QludW.mjs +102 -0
  282. package/dist/theme.cjs +25 -24
  283. package/dist/theme.d.cts +3 -3
  284. package/dist/theme.d.mts +3 -3
  285. package/dist/theme.mjs +2 -1
  286. package/dist/{theme-CDVxig_g.mjs → themes-L-dE7_ck.mjs} +10 -110
  287. package/dist/{theme-BXlAP3xf.cjs → themes-gd6tcmqS.cjs} +0 -136
  288. package/dist/{useTablePagination-COTiNH_8.d.mts → useTablePagination-C5VKtqDp.d.cts} +1 -1
  289. package/dist/{useTablePagination-WFkaUZu8.d.cts → useTablePagination-C6LSlt3w.d.mts} +1 -1
  290. package/package.json +43 -2
  291. package/dist/Popover-DwnSLpp1.mjs +0 -253
  292. package/dist/index-B_dKjEDR.d.mts +0 -23
  293. package/dist/index-C1WqEDtQ.d.mts +0 -69
  294. package/dist/index-CA7HnbtH.d.cts +0 -21
  295. package/dist/index-CKZaErxJ.d.mts +0 -21
  296. package/dist/index-DBUwu65Z.d.cts +0 -69
  297. package/dist/index-DzQJSYIh.d.cts +0 -23
  298. package/dist/index-cuv3o-L7.d.mts +0 -34
  299. package/dist/index-nB94D7UM.d.cts +0 -34
package/dist/MenuItem.cjs CHANGED
@@ -1,149 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_src = require("./src-DU81aGy9.cjs");
3
- const require_themeDefault = require("./themeDefault-Cebi08Cv.cjs");
4
- const require_theme = require("./theme-BXlAP3xf.cjs");
5
- const require_Icon = require("./Icon-CI6q2Eyi.cjs");
6
- let react = require("react");
7
- let react_jsx_runtime = require("react/jsx-runtime");
8
- //#region src/MenuItem/MenuItem.tsx
9
- const shouldForwardProp = (0, require("@soroush.tech/styled-system/should-forward-prop").createShouldForwardProp)([
10
- "color",
11
- "textColor",
12
- "sizeToken",
13
- "selected",
14
- "highlighted",
15
- "disabled",
16
- "dense",
17
- "disableGutters",
18
- "divider"
19
- ]);
20
- const baseStyle = ({ theme }) => ({
21
- display: "flex",
22
- alignItems: "center",
23
- gap: theme.space[1],
24
- cursor: "pointer",
25
- fontFamily: theme.fonts.body,
26
- lineHeight: theme.lineHeights.base,
27
- listStyle: "none",
28
- userSelect: "none",
29
- whiteSpace: "nowrap",
30
- transition: "background-color 0.12s ease",
31
- outline: "none"
32
- });
33
- const sizeVariants = ({ theme, sizeToken, dense, disableGutters }) => {
34
- const s = theme.sizes[sizeToken];
35
- const verticalPadding = dense ? theme.space[.5] : void 0;
36
- return {
37
- paddingTop: verticalPadding ?? theme.space[s.paddingTop],
38
- paddingBottom: verticalPadding ?? theme.space[s.paddingBottom],
39
- paddingLeft: disableGutters ? 0 : theme.space[s.paddingLeft],
40
- paddingRight: disableGutters ? 0 : theme.space[s.paddingRight],
41
- fontSize: theme.fontSizes[s.fontSize]
42
- };
43
- };
44
- const dividerStyle = ({ theme, divider }) => divider ? {
45
- borderBottomWidth: theme.borderWidths.thin,
46
- borderBottomStyle: "solid",
47
- borderBottomColor: (0, require_src.src_exports.get)(theme, "border.light")
48
- } : {};
49
- const interactionStyles = ({ theme, color, textColor, selected, highlighted, disabled }) => {
50
- const main = (0, require_src.src_exports.get)(theme, `palette.${color}.main`);
51
- const hoverBg = `${main}1F`;
52
- const selectedBg = `${main}29`;
53
- const activeSelectedBg = `${main}3D`;
54
- if (disabled) return {
55
- color: (0, require_src.src_exports.get)(theme, "text.disabled"),
56
- cursor: "not-allowed",
57
- pointerEvents: "none"
58
- };
59
- const baseColor = textColor ? (0, require_src.src_exports.get)(theme, `text.${textColor}`) : main;
60
- return {
61
- color: selected ? main : baseColor,
62
- backgroundColor: selected ? highlighted ? activeSelectedBg : selectedBg : highlighted ? hoverBg : "transparent",
63
- "&:hover": { backgroundColor: selected ? activeSelectedBg : hoverBg }
64
- };
65
- };
66
- const MenuItemRoot = require_src.styled("li", {
67
- name: "MenuItem",
68
- label: "MenuItem",
69
- shouldForwardProp
70
- })(baseStyle, sizeVariants, dividerStyle, interactionStyles);
71
- const CheckSlot = require_src.styled("span", {
72
- name: "MenuItem",
73
- slot: "check",
74
- label: "MenuItemCheck"
75
- })({
76
- display: "inline-flex",
77
- width: "1.125rem",
78
- flexShrink: 0
79
- });
80
- function isKeyboardFocus(element) {
81
- try {
82
- return element.matches(":focus-visible");
83
- } catch {
84
- return false;
85
- }
86
- }
87
- /**
88
- * @description A single option row for `Select`'s listbox. Rendered as a semantic
89
- * `<li role="option">` (override via `as`). Selection/highlight/density props are
90
- * injected by `Select`; used on its own it renders a static, styled row.
91
- */
92
- function MenuItem({ value, children, as, disabled = false, selected = false, highlighted = false, multiple = false, color: colorProp, textColor, size: sizeProp, dense = false, disableGutters = false, divider = false, autoFocus = false, focusVisibleClassName, onSelect, id, className, "data-testid": dataTestid }) {
93
- const theme = require_theme.useTheme();
94
- const color = colorProp ?? require_themeDefault.themeDefault(theme, "color", "primary");
95
- const size = sizeProp ?? require_themeDefault.themeDefault(theme, "size", "md");
96
- const rootRef = (0, react.useRef)(null);
97
- const [isFocusVisible, setIsFocusVisible] = (0, react.useState)(false);
98
- (0, react.useEffect)(() => {
99
- if (autoFocus) rootRef.current?.focus();
100
- }, [autoFocus]);
101
- const handleClick = () => {
102
- if (!disabled) onSelect?.(value);
103
- };
104
- const handleMouseDown = (event) => {
105
- event.preventDefault();
106
- };
107
- const handleFocus = (event) => {
108
- if (focusVisibleClassName && isKeyboardFocus(event.currentTarget)) setIsFocusVisible(true);
109
- };
110
- const handleBlur = () => {
111
- setIsFocusVisible(false);
112
- };
113
- const rootClassName = [className, isFocusVisible ? focusVisibleClassName : void 0].filter(Boolean).join(" ") || void 0;
114
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(MenuItemRoot, {
115
- as,
116
- ref: rootRef,
117
- id,
118
- role: "option",
119
- tabIndex: -1,
120
- "aria-selected": selected,
121
- "aria-disabled": disabled || void 0,
122
- "data-value": value,
123
- color,
124
- textColor,
125
- sizeToken: size,
126
- selected,
127
- highlighted,
128
- disabled,
129
- dense,
130
- disableGutters,
131
- divider,
132
- className: rootClassName,
133
- "data-testid": dataTestid,
134
- onMouseDown: handleMouseDown,
135
- onClick: handleClick,
136
- onFocus: handleFocus,
137
- onBlur: handleBlur,
138
- children: [multiple && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CheckSlot, {
139
- "aria-hidden": true,
140
- children: selected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
141
- name: "check",
142
- size: "1.125rem",
143
- color: "inherit"
144
- })
145
- }), children]
146
- });
147
- }
148
- //#endregion
149
- exports.MenuItem = MenuItem;
2
+ const require_MenuItem = require("./MenuItem-CfdN4axw.cjs");
3
+ exports.MenuItem = require_MenuItem.MenuItem;
@@ -1,52 +1,2 @@
1
- import { T as Theme } from "./themes-Kbk9h5cN.cjs";
2
- import "./index-DBUwu65Z.cjs";
3
- import { ElementType, ReactNode } from "react";
4
- //#region src/MenuItem/MenuItem.d.ts
5
- type MenuItemColor = keyof Theme['palette'];
6
- type MenuItemSize = keyof Theme['sizes'];
7
- type MenuItemTextColor = keyof Theme['text'];
8
- interface MenuItemProps {
9
- /** The value this option represents - reported to `Select`'s `onChange`. */
10
- value: string | number;
11
- /** The option label. */
12
- children: ReactNode;
13
- /** The element used for the root node - a tag name or a component. Default: `'li'`. */
14
- as?: ElementType;
15
- /** Disables the option - it cannot be highlighted or selected. */
16
- disabled?: boolean;
17
- /** Marks the option as the current selection. Injected by `Select`. */
18
- selected?: boolean;
19
- /** Marks the option as the keyboard-highlighted row. Injected by `Select`. */
20
- highlighted?: boolean;
21
- /** Reserves a leading checkmark slot for multi-select menus. Injected by `Select`. */
22
- multiple?: boolean;
23
- /** Accent color - resolves to `theme.palette[color]`. Injected by `Select`; the item's own value wins. Default: 'primary', overridable via `theme.defaults.color`. */
24
- color?: MenuItemColor;
25
- /** Base text color of the row - resolves against `theme.text`. When unset, falls back to the accent color's `main`. Injected by `Select`; the item's own value wins. */
26
- textColor?: MenuItemTextColor;
27
- /** Density token - resolves against `theme.sizes`. Injected by `Select`. Default: 'md', overridable via `theme.defaults.size`. */
28
- size?: MenuItemSize;
29
- /** Compact vertical padding, independent of `size`. Default: `false`. */
30
- dense?: boolean;
31
- /** Remove the left and right padding. Default: `false`. */
32
- disableGutters?: boolean;
33
- /** Add a 1px bottom border to separate the row. Default: `false`. */
34
- divider?: boolean;
35
- /** Focus the row on first mount, and whenever `autoFocus` flips from `false` to `true`. Default: `false`. */
36
- autoFocus?: boolean;
37
- /** Class applied only while the row has keyboard focus - a `:focus-visible` hook. */
38
- focusVisibleClassName?: string;
39
- /** Fired with `value` when the option is chosen. Injected by `Select`. */
40
- onSelect?: (value: string | number) => void;
41
- id?: string;
42
- className?: string;
43
- 'data-testid'?: string;
44
- }
45
- /**
46
- * @description A single option row for `Select`'s listbox. Rendered as a semantic
47
- * `<li role="option">` (override via `as`). Selection/highlight/density props are
48
- * injected by `Select`; used on its own it renders a static, styled row.
49
- */
50
- declare function MenuItem({ value, children, as, disabled, selected, highlighted, multiple, color: colorProp, textColor, size: sizeProp, dense, disableGutters, divider, autoFocus, focusVisibleClassName, onSelect, id, className, 'data-testid': dataTestid }: Readonly<MenuItemProps>): import("react").JSX.Element;
51
- //#endregion
52
- export { MenuItem, MenuItemColor, MenuItemProps, MenuItemSize, MenuItemTextColor };
1
+ import { a as MenuItemSize, i as MenuItemRole, n as MenuItemColor, o as MenuItemTextColor, r as MenuItemProps, t as MenuItem } from "./index-DCmH5f9I.cjs";
2
+ export { MenuItem, MenuItemColor, MenuItemProps, MenuItemRole, MenuItemSize, MenuItemTextColor };
@@ -1,52 +1,2 @@
1
- import { T as Theme } from "./themes-RX2UX5gD.mjs";
2
- import "./index-C1WqEDtQ.mjs";
3
- import { ElementType, ReactNode } from "react";
4
- //#region src/MenuItem/MenuItem.d.ts
5
- type MenuItemColor = keyof Theme['palette'];
6
- type MenuItemSize = keyof Theme['sizes'];
7
- type MenuItemTextColor = keyof Theme['text'];
8
- interface MenuItemProps {
9
- /** The value this option represents - reported to `Select`'s `onChange`. */
10
- value: string | number;
11
- /** The option label. */
12
- children: ReactNode;
13
- /** The element used for the root node - a tag name or a component. Default: `'li'`. */
14
- as?: ElementType;
15
- /** Disables the option - it cannot be highlighted or selected. */
16
- disabled?: boolean;
17
- /** Marks the option as the current selection. Injected by `Select`. */
18
- selected?: boolean;
19
- /** Marks the option as the keyboard-highlighted row. Injected by `Select`. */
20
- highlighted?: boolean;
21
- /** Reserves a leading checkmark slot for multi-select menus. Injected by `Select`. */
22
- multiple?: boolean;
23
- /** Accent color - resolves to `theme.palette[color]`. Injected by `Select`; the item's own value wins. Default: 'primary', overridable via `theme.defaults.color`. */
24
- color?: MenuItemColor;
25
- /** Base text color of the row - resolves against `theme.text`. When unset, falls back to the accent color's `main`. Injected by `Select`; the item's own value wins. */
26
- textColor?: MenuItemTextColor;
27
- /** Density token - resolves against `theme.sizes`. Injected by `Select`. Default: 'md', overridable via `theme.defaults.size`. */
28
- size?: MenuItemSize;
29
- /** Compact vertical padding, independent of `size`. Default: `false`. */
30
- dense?: boolean;
31
- /** Remove the left and right padding. Default: `false`. */
32
- disableGutters?: boolean;
33
- /** Add a 1px bottom border to separate the row. Default: `false`. */
34
- divider?: boolean;
35
- /** Focus the row on first mount, and whenever `autoFocus` flips from `false` to `true`. Default: `false`. */
36
- autoFocus?: boolean;
37
- /** Class applied only while the row has keyboard focus - a `:focus-visible` hook. */
38
- focusVisibleClassName?: string;
39
- /** Fired with `value` when the option is chosen. Injected by `Select`. */
40
- onSelect?: (value: string | number) => void;
41
- id?: string;
42
- className?: string;
43
- 'data-testid'?: string;
44
- }
45
- /**
46
- * @description A single option row for `Select`'s listbox. Rendered as a semantic
47
- * `<li role="option">` (override via `as`). Selection/highlight/density props are
48
- * injected by `Select`; used on its own it renders a static, styled row.
49
- */
50
- declare function MenuItem({ value, children, as, disabled, selected, highlighted, multiple, color: colorProp, textColor, size: sizeProp, dense, disableGutters, divider, autoFocus, focusVisibleClassName, onSelect, id, className, 'data-testid': dataTestid }: Readonly<MenuItemProps>): import("react").JSX.Element;
51
- //#endregion
52
- export { MenuItem, MenuItemColor, MenuItemProps, MenuItemSize, MenuItemTextColor };
1
+ import { a as MenuItemSize, i as MenuItemRole, n as MenuItemColor, o as MenuItemTextColor, r as MenuItemProps, t as MenuItem } from "./index-Cj5Rhh_9.mjs";
2
+ export { MenuItem, MenuItemColor, MenuItemProps, MenuItemRole, MenuItemSize, MenuItemTextColor };
package/dist/MenuItem.mjs CHANGED
@@ -1,148 +1,2 @@
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 { r as useTheme } from "./theme-CDVxig_g.mjs";
4
- import { t as Icon } from "./Icon-CH3asUJu.mjs";
5
- import { useEffect, useRef, useState } from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- //#region src/MenuItem/MenuItem.tsx
8
- const shouldForwardProp = createShouldForwardProp([
9
- "color",
10
- "textColor",
11
- "sizeToken",
12
- "selected",
13
- "highlighted",
14
- "disabled",
15
- "dense",
16
- "disableGutters",
17
- "divider"
18
- ]);
19
- const baseStyle = ({ theme }) => ({
20
- display: "flex",
21
- alignItems: "center",
22
- gap: theme.space[1],
23
- cursor: "pointer",
24
- fontFamily: theme.fonts.body,
25
- lineHeight: theme.lineHeights.base,
26
- listStyle: "none",
27
- userSelect: "none",
28
- whiteSpace: "nowrap",
29
- transition: "background-color 0.12s ease",
30
- outline: "none"
31
- });
32
- const sizeVariants = ({ theme, sizeToken, dense, disableGutters }) => {
33
- const s = theme.sizes[sizeToken];
34
- const verticalPadding = dense ? theme.space[.5] : void 0;
35
- return {
36
- paddingTop: verticalPadding ?? theme.space[s.paddingTop],
37
- paddingBottom: verticalPadding ?? theme.space[s.paddingBottom],
38
- paddingLeft: disableGutters ? 0 : theme.space[s.paddingLeft],
39
- paddingRight: disableGutters ? 0 : theme.space[s.paddingRight],
40
- fontSize: theme.fontSizes[s.fontSize]
41
- };
42
- };
43
- const dividerStyle = ({ theme, divider }) => divider ? {
44
- borderBottomWidth: theme.borderWidths.thin,
45
- borderBottomStyle: "solid",
46
- borderBottomColor: (0, src_exports.get)(theme, "border.light")
47
- } : {};
48
- const interactionStyles = ({ theme, color, textColor, selected, highlighted, disabled }) => {
49
- const main = (0, src_exports.get)(theme, `palette.${color}.main`);
50
- const hoverBg = `${main}1F`;
51
- const selectedBg = `${main}29`;
52
- const activeSelectedBg = `${main}3D`;
53
- if (disabled) return {
54
- color: (0, src_exports.get)(theme, "text.disabled"),
55
- cursor: "not-allowed",
56
- pointerEvents: "none"
57
- };
58
- const baseColor = textColor ? (0, src_exports.get)(theme, `text.${textColor}`) : main;
59
- return {
60
- color: selected ? main : baseColor,
61
- backgroundColor: selected ? highlighted ? activeSelectedBg : selectedBg : highlighted ? hoverBg : "transparent",
62
- "&:hover": { backgroundColor: selected ? activeSelectedBg : hoverBg }
63
- };
64
- };
65
- const MenuItemRoot = styled("li", {
66
- name: "MenuItem",
67
- label: "MenuItem",
68
- shouldForwardProp
69
- })(baseStyle, sizeVariants, dividerStyle, interactionStyles);
70
- const CheckSlot = styled("span", {
71
- name: "MenuItem",
72
- slot: "check",
73
- label: "MenuItemCheck"
74
- })({
75
- display: "inline-flex",
76
- width: "1.125rem",
77
- flexShrink: 0
78
- });
79
- function isKeyboardFocus(element) {
80
- try {
81
- return element.matches(":focus-visible");
82
- } catch {
83
- return false;
84
- }
85
- }
86
- /**
87
- * @description A single option row for `Select`'s listbox. Rendered as a semantic
88
- * `<li role="option">` (override via `as`). Selection/highlight/density props are
89
- * injected by `Select`; used on its own it renders a static, styled row.
90
- */
91
- function MenuItem({ value, children, as, disabled = false, selected = false, highlighted = false, multiple = false, color: colorProp, textColor, size: sizeProp, dense = false, disableGutters = false, divider = false, autoFocus = false, focusVisibleClassName, onSelect, id, className, "data-testid": dataTestid }) {
92
- const theme = useTheme();
93
- const color = colorProp ?? themeDefault(theme, "color", "primary");
94
- const size = sizeProp ?? themeDefault(theme, "size", "md");
95
- const rootRef = useRef(null);
96
- const [isFocusVisible, setIsFocusVisible] = useState(false);
97
- useEffect(() => {
98
- if (autoFocus) rootRef.current?.focus();
99
- }, [autoFocus]);
100
- const handleClick = () => {
101
- if (!disabled) onSelect?.(value);
102
- };
103
- const handleMouseDown = (event) => {
104
- event.preventDefault();
105
- };
106
- const handleFocus = (event) => {
107
- if (focusVisibleClassName && isKeyboardFocus(event.currentTarget)) setIsFocusVisible(true);
108
- };
109
- const handleBlur = () => {
110
- setIsFocusVisible(false);
111
- };
112
- const rootClassName = [className, isFocusVisible ? focusVisibleClassName : void 0].filter(Boolean).join(" ") || void 0;
113
- return /* @__PURE__ */ jsxs(MenuItemRoot, {
114
- as,
115
- ref: rootRef,
116
- id,
117
- role: "option",
118
- tabIndex: -1,
119
- "aria-selected": selected,
120
- "aria-disabled": disabled || void 0,
121
- "data-value": value,
122
- color,
123
- textColor,
124
- sizeToken: size,
125
- selected,
126
- highlighted,
127
- disabled,
128
- dense,
129
- disableGutters,
130
- divider,
131
- className: rootClassName,
132
- "data-testid": dataTestid,
133
- onMouseDown: handleMouseDown,
134
- onClick: handleClick,
135
- onFocus: handleFocus,
136
- onBlur: handleBlur,
137
- children: [multiple && /* @__PURE__ */ jsx(CheckSlot, {
138
- "aria-hidden": true,
139
- children: selected && /* @__PURE__ */ jsx(Icon, {
140
- name: "check",
141
- size: "1.125rem",
142
- color: "inherit"
143
- })
144
- }), children]
145
- });
146
- }
147
- //#endregion
1
+ import { t as MenuItem } from "./MenuItem-BR7ingQx.mjs";
148
2
  export { MenuItem };
@@ -0,0 +1,187 @@
1
+ import { a as src_exports, i as props, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
2
+ import { t as themeDefault } from "./themeDefault-Z3KmyIbm.mjs";
3
+ import { n as useDefaultProps } from "./theme-Z9_QludW.mjs";
4
+ import { createContext, useContext, useEffect, useMemo, useRef } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/Menu/MenuActivationContext.ts
7
+ /**
8
+ * Set by a `Menu` around its lists: told when any row anywhere in the menu is chosen, with
9
+ * or without a `value`, so the whole menu can close. Internal - not exported from the
10
+ * subpath.
11
+ */
12
+ const MenuActivationContext = createContext(null);
13
+ //#endregion
14
+ //#region src/Menu/MenuListContext.ts
15
+ /**
16
+ * Present inside a `MenuList`. A `MenuItem` that finds it renders as a menu row
17
+ * (`menuitem`); without it, the row is `Select`'s `option`.
18
+ */
19
+ const MenuListContext = createContext(null);
20
+ const useMenuListContext = () => useContext(MenuListContext);
21
+ //#endregion
22
+ //#region src/Menu/MenuList/utils/getOwnRows.ts
23
+ const ROW_SELECTOR = "[role=\"menuitem\"], [role=\"menuitemradio\"], [role=\"menuitemcheckbox\"]";
24
+ /**
25
+ * The rows that belong to `list` itself, in document order. A nested submenu is a
26
+ * `role="menu"` of its own inside the list, so a row counts only when its nearest
27
+ * `role="menu"` is `list` - no per-list index state is kept anywhere.
28
+ */
29
+ function getOwnRows(list) {
30
+ return Array.from(list.querySelectorAll(ROW_SELECTOR)).filter((row) => row.closest("[role=\"menu\"]") === list);
31
+ }
32
+ /** Whether a row can take focus and be chosen. */
33
+ function isRowEnabled(row) {
34
+ return row.getAttribute("aria-disabled") !== "true";
35
+ }
36
+ //#endregion
37
+ //#region src/Menu/MenuList/utils/getNextRow.ts
38
+ /**
39
+ * The enabled row a key moves to from `current` (which may be absent from `rows`, as when
40
+ * focus is still on the list itself). Disabled rows are skipped; `shouldWrap` carries
41
+ * `next` past the last row to the first and `previous` before the first to the last.
42
+ */
43
+ function getNextRow(rows, current, step, shouldWrap) {
44
+ const enabled = rows.filter(isRowEnabled);
45
+ if (step === "first") return enabled[0];
46
+ if (step === "last") return enabled.at(-1);
47
+ const index = enabled.indexOf(current);
48
+ if (index === -1) return step === "next" ? enabled[0] : enabled.at(-1);
49
+ const target = index + (step === "next" ? 1 : -1);
50
+ if (target >= 0 && target < enabled.length) return enabled[target];
51
+ if (!shouldWrap) return void 0;
52
+ return target < 0 ? enabled.at(-1) : enabled[0];
53
+ }
54
+ //#endregion
55
+ //#region src/Menu/MenuList/utils/findRowByText.ts
56
+ /** A row's label text, without its icon, shortcut or note. */
57
+ function getRowText(row) {
58
+ return (row.querySelector("[data-menu-label]") ?? row).textContent.trim().toLowerCase();
59
+ }
60
+ /**
61
+ * The row type-ahead moves to. One key typed again and again (`r`, `r`, `r`) cycles
62
+ * through the rows starting with it; distinct keys typed together (`re`) build a prefix,
63
+ * matched from the current row onward so typing on stays where it is while it matches.
64
+ */
65
+ function findRowByText(rows, current, typed) {
66
+ const enabled = rows.filter(isRowEnabled);
67
+ const query = typed.toLowerCase();
68
+ const isRepeating = [...query].every((key) => key === query[0]);
69
+ const start = enabled.indexOf(current);
70
+ const from = isRepeating ? start + 1 : Math.max(start, 0);
71
+ const ordered = [...enabled.slice(from), ...enabled.slice(0, from)];
72
+ const prefix = isRepeating ? query[0] : query;
73
+ return ordered.find((row) => getRowText(row).startsWith(prefix));
74
+ }
75
+ //#endregion
76
+ //#region src/Menu/MenuList/MenuList.tsx
77
+ const STEP_BY_KEY = {
78
+ ArrowDown: "next",
79
+ ArrowUp: "previous",
80
+ Home: "first",
81
+ End: "last"
82
+ };
83
+ const TYPEAHEAD_TIMEOUT = 500;
84
+ const shouldForwardProp = createShouldForwardProp([...props]);
85
+ const layoutWithoutSize = (styleProps) => (0, src_exports.layout)({
86
+ ...styleProps,
87
+ size: void 0
88
+ });
89
+ const MenuListRoot = styled("ul", {
90
+ name: "MenuList",
91
+ label: "MenuList",
92
+ shouldForwardProp,
93
+ systemProps: [src_exports.space, layoutWithoutSize]
94
+ })(({ theme }) => ({
95
+ listStyle: "none",
96
+ margin: 0,
97
+ paddingLeft: 0,
98
+ paddingRight: 0,
99
+ paddingTop: theme.space[.5],
100
+ paddingBottom: theme.space[.5],
101
+ outline: "none",
102
+ "&:focus-visible": {
103
+ outline: `${theme.borderWidths.base} solid ${theme.palette[themeDefault(theme, "color", "primary")].main}`,
104
+ outlineOffset: `-${theme.borderWidths.base}`
105
+ }
106
+ }));
107
+ const isPrintableKey = (event) => event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;
108
+ /**
109
+ * @description A `role="menu"` list that owns the keyboard: the arrow keys, Home and End
110
+ * move focus between its own rows, skipping disabled ones; typing jumps to a row by its
111
+ * label. Rows are found in the DOM by their nearest `role="menu"`, so a nested submenu's
112
+ * rows are never this list's. Renders in place - `Menu` floats one next to a trigger.
113
+ */
114
+ function MenuList({ children, onSelect, shouldWrap: shouldWrapProp, shouldAutoFocus = false, color, textColor, size, dense, onKeyDown, ...rest }) {
115
+ const listRef = useRef(null);
116
+ const typed = useRef({
117
+ keys: "",
118
+ time: 0
119
+ });
120
+ const onMenuActivate = useContext(MenuActivationContext);
121
+ const parent = useMenuListContext();
122
+ const dp = useDefaultProps("MenuList");
123
+ const shouldWrap = shouldWrapProp ?? dp.shouldWrap ?? true;
124
+ const rowColor = color ?? parent?.color ?? dp.color;
125
+ const rowTextColor = textColor ?? parent?.textColor ?? dp.textColor;
126
+ const rowSize = size ?? parent?.size ?? dp.size;
127
+ const rowDense = dense ?? parent?.dense ?? dp.dense;
128
+ useEffect(() => {
129
+ const list = listRef.current;
130
+ if (!shouldAutoFocus || !list) return;
131
+ const rows = getOwnRows(list).filter(isRowEnabled);
132
+ (rows.find((row) => row.getAttribute("aria-checked") === "true") ?? rows[0] ?? list).focus();
133
+ }, [shouldAutoFocus]);
134
+ const context = useMemo(() => ({
135
+ onActivate: (value, event) => {
136
+ if (value !== void 0) onSelect?.(value);
137
+ if (parent) parent.onActivate(value, event);
138
+ else onMenuActivate?.(value, event);
139
+ },
140
+ color: rowColor,
141
+ textColor: rowTextColor,
142
+ size: rowSize,
143
+ dense: rowDense
144
+ }), [
145
+ onSelect,
146
+ onMenuActivate,
147
+ parent,
148
+ rowColor,
149
+ rowTextColor,
150
+ rowSize,
151
+ rowDense
152
+ ]);
153
+ const handleKeyDown = (event) => {
154
+ const list = event.currentTarget;
155
+ if (event.target.closest("[role=\"menu\"]") !== list) return;
156
+ const rows = getOwnRows(list);
157
+ const current = list.ownerDocument.activeElement;
158
+ const step = STEP_BY_KEY[event.key];
159
+ let target;
160
+ if (step) target = getNextRow(rows, current, step, shouldWrap);
161
+ else if (isPrintableKey(event)) {
162
+ const now = Date.now();
163
+ const isFresh = now - typed.current.time > TYPEAHEAD_TIMEOUT;
164
+ typed.current = {
165
+ keys: (isFresh ? "" : typed.current.keys) + event.key,
166
+ time: now
167
+ };
168
+ target = findRowByText(rows, current, typed.current.keys);
169
+ }
170
+ if (step || target) event.preventDefault();
171
+ target?.focus();
172
+ onKeyDown?.(event);
173
+ };
174
+ return /* @__PURE__ */ jsx(MenuListContext.Provider, {
175
+ value: context,
176
+ children: /* @__PURE__ */ jsx(MenuListRoot, {
177
+ ...rest,
178
+ ref: listRef,
179
+ role: "menu",
180
+ tabIndex: -1,
181
+ onKeyDown: handleKeyDown,
182
+ children
183
+ })
184
+ });
185
+ }
186
+ //#endregion
187
+ export { useMenuListContext as a, MenuListContext as i, getNextRow as n, MenuActivationContext as o, getOwnRows as r, MenuList as t };