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

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 (450) hide show
  1. package/README.md +54 -32
  2. package/dist/Accordion/Accordion.cjs +100 -0
  3. package/dist/Accordion/Accordion.d.cts +41 -0
  4. package/dist/Accordion/Accordion.d.mts +41 -0
  5. package/dist/Accordion/Accordion.mjs +98 -0
  6. package/dist/Accordion/AccordionActions.cjs +29 -0
  7. package/dist/Accordion/AccordionActions.d.cts +12 -0
  8. package/dist/Accordion/AccordionActions.d.mts +12 -0
  9. package/dist/Accordion/AccordionActions.mjs +27 -0
  10. package/dist/Accordion/AccordionDetails.cjs +23 -0
  11. package/dist/Accordion/AccordionDetails.d.cts +12 -0
  12. package/dist/Accordion/AccordionDetails.d.mts +12 -0
  13. package/dist/Accordion/AccordionDetails.mjs +21 -0
  14. package/dist/Accordion/AccordionGroup.cjs +79 -0
  15. package/dist/Accordion/AccordionGroup.d.cts +24 -0
  16. package/dist/Accordion/AccordionGroup.d.mts +24 -0
  17. package/dist/Accordion/AccordionGroup.mjs +77 -0
  18. package/dist/Accordion/AccordionSummary.cjs +99 -0
  19. package/dist/Accordion/AccordionSummary.d.cts +21 -0
  20. package/dist/Accordion/AccordionSummary.d.mts +21 -0
  21. package/dist/Accordion/AccordionSummary.mjs +97 -0
  22. package/dist/Accordion.cjs +11 -0
  23. package/dist/Accordion.d.cts +6 -0
  24. package/dist/Accordion.d.mts +6 -0
  25. package/dist/Accordion.mjs +6 -0
  26. package/dist/AccordionContext-B2TCl9Os.cjs +44 -0
  27. package/dist/AccordionContext-DDk_i9Dx.mjs +15 -0
  28. package/dist/Alert/Alert.cjs +154 -0
  29. package/dist/Alert/Alert.d.cts +37 -0
  30. package/dist/Alert/Alert.d.mts +37 -0
  31. package/dist/Alert/Alert.mjs +152 -0
  32. package/dist/Alert/AlertTitle.cjs +21 -0
  33. package/dist/Alert/AlertTitle.d.cts +12 -0
  34. package/dist/Alert/AlertTitle.d.mts +12 -0
  35. package/dist/Alert/AlertTitle.mjs +20 -0
  36. package/dist/Alert.cjs +5 -0
  37. package/dist/Alert.d.cts +3 -0
  38. package/dist/Alert.d.mts +3 -0
  39. package/dist/Alert.mjs +3 -0
  40. package/dist/AppBar.cjs +1 -1
  41. package/dist/AppBar.d.cts +1 -1
  42. package/dist/AppBar.d.mts +1 -1
  43. package/dist/AppBar.mjs +1 -1
  44. package/dist/Autocomplete.cjs +666 -0
  45. package/dist/Autocomplete.d.cts +97 -0
  46. package/dist/Autocomplete.d.mts +97 -0
  47. package/dist/Autocomplete.mjs +664 -0
  48. package/dist/Avatar.cjs +2 -2
  49. package/dist/Avatar.d.cts +1 -1
  50. package/dist/Avatar.d.mts +1 -1
  51. package/dist/Avatar.mjs +2 -2
  52. package/dist/Backdrop.d.cts +1 -1
  53. package/dist/Backdrop.d.mts +1 -1
  54. package/dist/Badge.cjs +130 -0
  55. package/dist/Badge.d.cts +45 -0
  56. package/dist/Badge.d.mts +45 -0
  57. package/dist/Badge.mjs +128 -0
  58. package/dist/Breadcrumbs.cjs +2 -2
  59. package/dist/Breadcrumbs.d.cts +3 -3
  60. package/dist/Breadcrumbs.d.mts +3 -3
  61. package/dist/Breadcrumbs.mjs +2 -2
  62. package/dist/Button.cjs +6 -3
  63. package/dist/Button.d.cts +1 -1
  64. package/dist/Button.d.mts +1 -1
  65. package/dist/Button.mjs +6 -3
  66. package/dist/ButtonGroup.cjs +1 -1
  67. package/dist/ButtonGroup.d.cts +1 -1
  68. package/dist/ButtonGroup.d.mts +1 -1
  69. package/dist/ButtonGroup.mjs +1 -1
  70. package/dist/Card.cjs +2 -2
  71. package/dist/Card.d.cts +4 -4
  72. package/dist/Card.d.mts +4 -4
  73. package/dist/Card.mjs +2 -2
  74. package/dist/Checkbox.cjs +13 -3
  75. package/dist/Checkbox.d.cts +4 -2
  76. package/dist/Checkbox.d.mts +4 -2
  77. package/dist/Checkbox.mjs +13 -3
  78. package/dist/Chip.cjs +194 -0
  79. package/dist/Chip.d.cts +49 -0
  80. package/dist/Chip.d.mts +49 -0
  81. package/dist/Chip.mjs +192 -0
  82. package/dist/CircularProgress.cjs +1 -1
  83. package/dist/CircularProgress.d.cts +2 -2
  84. package/dist/CircularProgress.d.mts +2 -2
  85. package/dist/CircularProgress.mjs +1 -1
  86. package/dist/Collapse.cjs +126 -0
  87. package/dist/Collapse.d.cts +2 -0
  88. package/dist/Collapse.d.mts +2 -0
  89. package/dist/Collapse.mjs +124 -0
  90. package/dist/Drawer.d.cts +3 -3
  91. package/dist/Drawer.d.mts +3 -3
  92. package/dist/Fab.cjs +114 -0
  93. package/dist/Fab.d.cts +2 -0
  94. package/dist/Fab.d.mts +2 -0
  95. package/dist/Fab.mjs +113 -0
  96. package/dist/FabMenu/FabMenu.cjs +3 -0
  97. package/dist/FabMenu/FabMenu.d.cts +53 -0
  98. package/dist/FabMenu/FabMenu.d.mts +53 -0
  99. package/dist/FabMenu/FabMenu.mjs +2 -0
  100. package/dist/FabMenu/FabMenuItem.cjs +28 -0
  101. package/dist/FabMenu/FabMenuItem.d.cts +19 -0
  102. package/dist/FabMenu/FabMenuItem.d.mts +19 -0
  103. package/dist/FabMenu/FabMenuItem.mjs +27 -0
  104. package/dist/FabMenu-BDfkT_zt.mjs +273 -0
  105. package/dist/FabMenu-RiVtzrKe.cjs +279 -0
  106. package/dist/FabMenu.cjs +5 -0
  107. package/dist/FabMenu.d.cts +3 -0
  108. package/dist/FabMenu.d.mts +3 -0
  109. package/dist/FabMenu.mjs +3 -0
  110. package/dist/FabMenuContext-BZslb0lL.cjs +22 -0
  111. package/dist/FabMenuContext-D-XlDbLl.mjs +11 -0
  112. package/dist/Fade.cjs +17 -0
  113. package/dist/Fade.d.cts +11 -0
  114. package/dist/Fade.d.mts +11 -0
  115. package/dist/Fade.mjs +16 -0
  116. package/dist/Flex.d.cts +1 -1
  117. package/dist/Flex.d.mts +1 -1
  118. package/dist/Form.d.cts +1 -1
  119. package/dist/Form.d.mts +1 -1
  120. package/dist/FormControl.cjs +5 -3
  121. package/dist/FormControl.d.cts +1 -1
  122. package/dist/FormControl.d.mts +1 -1
  123. package/dist/FormControl.mjs +5 -3
  124. package/dist/FormHelperText.cjs +1 -1
  125. package/dist/FormHelperText.d.cts +1 -1
  126. package/dist/FormHelperText.d.mts +1 -1
  127. package/dist/FormHelperText.mjs +1 -1
  128. package/dist/FormLabel.cjs +4 -1
  129. package/dist/FormLabel.d.cts +1 -1
  130. package/dist/FormLabel.d.mts +1 -1
  131. package/dist/FormLabel.mjs +4 -1
  132. package/dist/Grid.d.cts +1 -1
  133. package/dist/Grid.d.mts +1 -1
  134. package/dist/Grow.cjs +21 -0
  135. package/dist/Grow.d.cts +11 -0
  136. package/dist/Grow.d.mts +11 -0
  137. package/dist/Grow.mjs +20 -0
  138. package/dist/{Icon-BihOAP4u.mjs → Icon-0hPpk-WZ.mjs} +31 -1
  139. package/dist/{Icon-D-EWsBVg.cjs → Icon-BE7bRsqR.cjs} +31 -1
  140. package/dist/Icon.cjs +1 -1
  141. package/dist/Icon.d.cts +1 -1
  142. package/dist/Icon.d.mts +1 -1
  143. package/dist/Icon.mjs +1 -1
  144. package/dist/Image.d.cts +1 -1
  145. package/dist/Image.d.mts +1 -1
  146. package/dist/LinearProgress.cjs +1 -1
  147. package/dist/LinearProgress.d.cts +2 -2
  148. package/dist/LinearProgress.d.mts +2 -2
  149. package/dist/LinearProgress.mjs +1 -1
  150. package/dist/Link.cjs +3 -3
  151. package/dist/Link.d.cts +1 -1
  152. package/dist/Link.d.mts +1 -1
  153. package/dist/Link.mjs +3 -3
  154. package/dist/Menu/ContextMenu.cjs +6 -4
  155. package/dist/Menu/ContextMenu.d.cts +8 -6
  156. package/dist/Menu/ContextMenu.d.mts +8 -6
  157. package/dist/Menu/ContextMenu.mjs +6 -4
  158. package/dist/Menu/Menu.cjs +1 -1
  159. package/dist/Menu/Menu.d.cts +1 -1
  160. package/dist/Menu/Menu.d.mts +1 -1
  161. package/dist/Menu/Menu.mjs +1 -1
  162. package/dist/Menu/MenuItems.cjs +1 -1
  163. package/dist/Menu/MenuItems.d.cts +1 -1
  164. package/dist/Menu/MenuItems.d.mts +1 -1
  165. package/dist/Menu/MenuItems.mjs +1 -1
  166. package/dist/Menu/MenuList.cjs +1 -1
  167. package/dist/Menu/MenuList.d.cts +2 -2
  168. package/dist/Menu/MenuList.d.mts +2 -2
  169. package/dist/Menu/MenuList.mjs +1 -1
  170. package/dist/{Menu-CrzHc_cn.mjs → Menu-CnG4ikZd.mjs} +6 -4
  171. package/dist/{Menu-Cgg-sX4W.cjs → Menu-DXLjR9ga.cjs} +6 -4
  172. package/dist/Menu.cjs +2 -2
  173. package/dist/Menu.d.cts +3 -3
  174. package/dist/Menu.d.mts +3 -3
  175. package/dist/Menu.mjs +2 -2
  176. package/dist/{MenuItem-DUn4IZKK.mjs → MenuItem-C21eR7d6.mjs} +40 -79
  177. package/dist/{MenuItem-BTP7Ijwi.cjs → MenuItem-EJ4u73f0.cjs} +39 -78
  178. package/dist/MenuItem.cjs +1 -1
  179. package/dist/MenuItem.d.cts +1 -1
  180. package/dist/MenuItem.d.mts +1 -1
  181. package/dist/MenuItem.mjs +1 -1
  182. package/dist/{MenuList-D4imLXAa.cjs → MenuList-BBAYeUvD.cjs} +1 -1
  183. package/dist/{MenuList-B7msJ1IG.mjs → MenuList-Cz3cupC3.mjs} +1 -1
  184. package/dist/{MenuListContext-DKUOhNyw.d.cts → MenuListContext-BWL5fM_L.d.mts} +2 -2
  185. package/dist/{MenuListContext-x-7lH4CH.d.mts → MenuListContext-BrCKLgKZ.d.cts} +2 -2
  186. package/dist/{Modal-BcsyrrpH.mjs → Modal-CEHDej-v.mjs} +3 -22
  187. package/dist/{Modal-CM3osOqj.cjs → Modal-DBw4j0YA.cjs} +3 -22
  188. package/dist/Modal.cjs +1 -1
  189. package/dist/Modal.d.cts +1 -1
  190. package/dist/Modal.d.mts +1 -1
  191. package/dist/Modal.mjs +1 -1
  192. package/dist/NativeSelect.cjs +8 -12
  193. package/dist/NativeSelect.d.cts +2 -2
  194. package/dist/NativeSelect.d.mts +2 -2
  195. package/dist/NativeSelect.mjs +8 -12
  196. package/dist/{NumberField.cjs → NumberInput.cjs} +69 -43
  197. package/dist/{NumberField.d.cts → NumberInput.d.cts} +14 -9
  198. package/dist/{NumberField.d.mts → NumberInput.d.mts} +14 -9
  199. package/dist/{NumberField.mjs → NumberInput.mjs} +69 -43
  200. package/dist/Pagination/PaginationItem.cjs +2 -2
  201. package/dist/Pagination/PaginationItem.d.cts +1 -1
  202. package/dist/Pagination/PaginationItem.d.mts +1 -1
  203. package/dist/Pagination/PaginationItem.mjs +2 -2
  204. package/dist/Pagination.d.cts +2 -2
  205. package/dist/Pagination.d.mts +2 -2
  206. package/dist/Paper.cjs +2 -2
  207. package/dist/Paper.d.cts +2 -2
  208. package/dist/Paper.d.mts +2 -2
  209. package/dist/Paper.mjs +2 -2
  210. package/dist/{Popover-QjM5Z1CR.mjs → Popover-Neeqs_7l.mjs} +3 -3
  211. package/dist/{Popover-CiZfgiKE.cjs → Popover-xyJTSjZy.cjs} +3 -3
  212. package/dist/Popover.cjs +1 -1
  213. package/dist/Popover.d.cts +3 -3
  214. package/dist/Popover.d.mts +3 -3
  215. package/dist/Popover.mjs +1 -1
  216. package/dist/Portal.d.cts +1 -17
  217. package/dist/Portal.d.mts +1 -17
  218. package/dist/Pressable.cjs +17 -13
  219. package/dist/Pressable.d.cts +1 -1
  220. package/dist/Pressable.d.mts +1 -1
  221. package/dist/Pressable.mjs +17 -13
  222. package/dist/Quote.d.cts +2 -2
  223. package/dist/Quote.d.mts +2 -2
  224. package/dist/Radio.cjs +13 -3
  225. package/dist/Radio.d.cts +4 -2
  226. package/dist/Radio.d.mts +4 -2
  227. package/dist/Radio.mjs +13 -3
  228. package/dist/{InputRange.cjs → RangeInput.cjs} +45 -43
  229. package/dist/{InputRange.d.mts → RangeInput.d.cts} +15 -15
  230. package/dist/{InputRange.d.cts → RangeInput.d.mts} +15 -15
  231. package/dist/{InputRange.mjs → RangeInput.mjs} +45 -43
  232. package/dist/Rating.cjs +3 -3
  233. package/dist/Rating.d.cts +1 -1
  234. package/dist/Rating.d.mts +1 -1
  235. package/dist/Rating.mjs +3 -3
  236. package/dist/ScrollArea.cjs +268 -0
  237. package/dist/ScrollArea.d.cts +40 -0
  238. package/dist/ScrollArea.d.mts +40 -0
  239. package/dist/ScrollArea.mjs +266 -0
  240. package/dist/Select.cjs +9 -12
  241. package/dist/Select.d.cts +2 -2
  242. package/dist/Select.d.mts +2 -2
  243. package/dist/Select.mjs +9 -12
  244. package/dist/Sidebar/Sidebar.d.cts +1 -1
  245. package/dist/Sidebar/Sidebar.d.mts +1 -1
  246. package/dist/Sidebar/SidebarItem.cjs +2 -2
  247. package/dist/Sidebar/SidebarItem.d.cts +3 -3
  248. package/dist/Sidebar/SidebarItem.d.mts +3 -3
  249. package/dist/Sidebar/SidebarItem.mjs +2 -2
  250. package/dist/Skeleton.d.cts +1 -1
  251. package/dist/Skeleton.d.mts +1 -1
  252. package/dist/Slide.cjs +51 -0
  253. package/dist/Slide.d.cts +17 -0
  254. package/dist/Slide.d.mts +17 -0
  255. package/dist/Slide.mjs +50 -0
  256. package/dist/Snackbar.cjs +205 -0
  257. package/dist/Snackbar.d.cts +62 -0
  258. package/dist/Snackbar.d.mts +62 -0
  259. package/dist/Snackbar.mjs +203 -0
  260. package/dist/Switch.cjs +15 -5
  261. package/dist/Switch.d.cts +4 -2
  262. package/dist/Switch.d.mts +4 -2
  263. package/dist/Switch.mjs +15 -5
  264. package/dist/Table/Table.d.cts +2 -2
  265. package/dist/Table/Table.d.mts +2 -2
  266. package/dist/Table/TableBody.d.cts +1 -1
  267. package/dist/Table/TableBody.d.mts +1 -1
  268. package/dist/Table/TableCell.d.cts +1 -1
  269. package/dist/Table/TableCell.d.mts +1 -1
  270. package/dist/Table/TableContainer.d.cts +1 -1
  271. package/dist/Table/TableContainer.d.mts +1 -1
  272. package/dist/Table/TableControl.d.cts +1 -1
  273. package/dist/Table/TableControl.d.mts +1 -1
  274. package/dist/Table/TableFooter.d.cts +1 -1
  275. package/dist/Table/TableFooter.d.mts +1 -1
  276. package/dist/Table/TableHead.d.cts +1 -1
  277. package/dist/Table/TableHead.d.mts +1 -1
  278. package/dist/Table/TablePagination.cjs +1 -0
  279. package/dist/Table/TablePagination.d.cts +2 -2
  280. package/dist/Table/TablePagination.d.mts +2 -2
  281. package/dist/Table/TablePagination.mjs +1 -0
  282. package/dist/Table/TablePaginationActions.cjs +1 -1
  283. package/dist/Table/TablePaginationActions.d.cts +1 -1
  284. package/dist/Table/TablePaginationActions.d.mts +1 -1
  285. package/dist/Table/TablePaginationActions.mjs +1 -1
  286. package/dist/Table/TableRow.d.cts +1 -1
  287. package/dist/Table/TableRow.d.mts +1 -1
  288. package/dist/Table/TableSortLabel.cjs +1 -1
  289. package/dist/Table/TableSortLabel.d.cts +1 -1
  290. package/dist/Table/TableSortLabel.d.mts +1 -1
  291. package/dist/Table/TableSortLabel.mjs +1 -1
  292. package/dist/Table/hooks.d.cts +1 -1
  293. package/dist/Table/hooks.d.mts +1 -1
  294. package/dist/Table.d.cts +5 -5
  295. package/dist/Table.d.mts +5 -5
  296. package/dist/{TableContext-DhuRf6Wy.d.mts → TableContext-Be8tluYZ.d.cts} +1 -1
  297. package/dist/{TableContext-Duj1nVG7.d.cts → TableContext-DUPqls5k.d.mts} +1 -1
  298. package/dist/Tabs/Tab.cjs +16 -7
  299. package/dist/Tabs/Tab.d.cts +2 -2
  300. package/dist/Tabs/Tab.d.mts +2 -2
  301. package/dist/Tabs/Tab.mjs +16 -7
  302. package/dist/Tabs/TabContext.d.cts +1 -1
  303. package/dist/Tabs/TabContext.d.mts +1 -1
  304. package/dist/Tabs/TabList.cjs +1 -1
  305. package/dist/Tabs/TabList.d.cts +1 -1
  306. package/dist/Tabs/TabList.d.mts +1 -1
  307. package/dist/Tabs/TabList.mjs +1 -1
  308. package/dist/Tabs/TabPanel.cjs +1 -1
  309. package/dist/Tabs/TabPanel.d.cts +2 -2
  310. package/dist/Tabs/TabPanel.d.mts +2 -2
  311. package/dist/Tabs/TabPanel.mjs +1 -1
  312. package/dist/Tabs/TabScrollButton.cjs +2 -2
  313. package/dist/Tabs/TabScrollButton.d.cts +1 -1
  314. package/dist/Tabs/TabScrollButton.d.mts +1 -1
  315. package/dist/Tabs/TabScrollButton.mjs +2 -2
  316. package/dist/Tabs/Tabs.cjs +1 -1
  317. package/dist/Tabs/Tabs.d.cts +2 -2
  318. package/dist/Tabs/Tabs.d.mts +2 -2
  319. package/dist/Tabs/Tabs.mjs +1 -1
  320. package/dist/{Tabs-D4tWCq78.cjs → Tabs-Croeq9s2.cjs} +11 -7
  321. package/dist/{Tabs-BTNOJx5v.mjs → Tabs-DMMP5aDj.mjs} +11 -7
  322. package/dist/Tabs.cjs +1 -1
  323. package/dist/Tabs.d.cts +3 -3
  324. package/dist/Tabs.d.mts +3 -3
  325. package/dist/Tabs.mjs +1 -1
  326. package/dist/{TabsContext-B_XHbjcS.d.cts → TabsContext-BYeGjSZK.d.cts} +1 -1
  327. package/dist/{TabsContext-Dn2kqUwr.d.mts → TabsContext-D4YumTfD.d.mts} +1 -1
  328. package/dist/TextInput.cjs +11 -11
  329. package/dist/TextInput.d.cts +1 -1
  330. package/dist/TextInput.d.mts +1 -1
  331. package/dist/TextInput.mjs +11 -11
  332. package/dist/ToggleButton/ToggleButton.cjs +2 -2
  333. package/dist/ToggleButton/ToggleButton.d.cts +1 -1
  334. package/dist/ToggleButton/ToggleButton.d.mts +1 -1
  335. package/dist/ToggleButton/ToggleButton.mjs +2 -2
  336. package/dist/ToggleButton/ToggleButtonGroup.cjs +1 -1
  337. package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
  338. package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
  339. package/dist/ToggleButton/ToggleButtonGroup.mjs +1 -1
  340. package/dist/Tooltip.cjs +270 -0
  341. package/dist/Tooltip.d.cts +78 -0
  342. package/dist/Tooltip.d.mts +78 -0
  343. package/dist/Tooltip.mjs +268 -0
  344. package/dist/TransferList.cjs +14 -7
  345. package/dist/TransferList.d.cts +4 -2
  346. package/dist/TransferList.d.mts +4 -2
  347. package/dist/TransferList.mjs +14 -7
  348. package/dist/Typography.cjs +1 -1
  349. package/dist/Typography.d.cts +2 -2
  350. package/dist/Typography.d.mts +2 -2
  351. package/dist/Typography.mjs +1 -1
  352. package/dist/View.d.cts +1 -1
  353. package/dist/View.d.mts +1 -1
  354. package/dist/Zoom.cjs +16 -0
  355. package/dist/Zoom.d.cts +10 -0
  356. package/dist/Zoom.d.mts +10 -0
  357. package/dist/Zoom.mjs +15 -0
  358. package/dist/catalog.cjs +932 -30
  359. package/dist/catalog.d.cts +1 -1
  360. package/dist/catalog.d.mts +1 -1
  361. package/dist/catalog.mjs +932 -30
  362. package/dist/engine.d.cts +2 -2
  363. package/dist/engine.d.mts +1 -1
  364. package/dist/getAnchorRel-CySI28HJ.mjs +8 -0
  365. package/dist/getAnchorRel-_vtAXC-4.cjs +13 -0
  366. package/dist/getShapeRadius-B9ytqDSk.d.cts +5 -0
  367. package/dist/getShapeRadius-B9ytqDSk.d.mts +5 -0
  368. package/dist/getShapeRadius-sY6-AGP4.mjs +12 -0
  369. package/dist/getShapeRadius-vXmXGV3f.cjs +17 -0
  370. package/dist/getSurfaceRadius-BTUV1E8H.cjs +11 -0
  371. package/dist/getSurfaceRadius-DTgqIzll.mjs +6 -0
  372. package/dist/getTooltipOrigins-B_7XXtQq.cjs +104 -0
  373. package/dist/getTooltipOrigins-CyyIMCF1.mjs +87 -0
  374. package/dist/{index-Dv_fk1_F.d.cts → index-05VGk0y_.d.cts} +14 -2
  375. package/dist/{index-DtYjdBvO.d.cts → index-2x01drCL.d.mts} +2 -2
  376. package/dist/{index-B1RFybA_.d.mts → index-46mhlgP6.d.mts} +7 -3
  377. package/dist/{index-BQWjh4rK.d.mts → index-BCzI2Iqo.d.cts} +3 -3
  378. package/dist/{index-ClZyaZrR.d.mts → index-BDqIc6Gx.d.cts} +2 -2
  379. package/dist/{index-K5exjvnX.d.cts → index-BPh60KDs.d.mts} +2 -2
  380. package/dist/{index-DAwcmIjN.d.cts → index-BQge4W7L.d.cts} +2 -2
  381. package/dist/{index-B4TeaB7b.d.cts → index-BSGu9rPv.d.cts} +7 -3
  382. package/dist/{index-BelFIizY.d.cts → index-BThHG5QU.d.mts} +3 -3
  383. package/dist/{index-YKrfFC_I.d.cts → index-BUeqNHjb.d.cts} +2 -2
  384. package/dist/{index-BGbTuHP9.d.mts → index-BeqpkGV-.d.mts} +1 -1
  385. package/dist/{index-Bx0-6yeX.d.mts → index-Bfyz3MDc.d.mts} +1 -1
  386. package/dist/{index-CbFaWtjK.d.mts → index-BgLqA52S.d.cts} +2 -2
  387. package/dist/{index-DchHf5cF.d.cts → index-BhnLFsBv.d.cts} +1 -1
  388. package/dist/{index-KnXhlKMr.d.cts → index-BitQk7Hx.d.cts} +1 -1
  389. package/dist/index-BvgX5eyV.d.mts +36 -0
  390. package/dist/index-CERyXFjz.d.cts +32 -0
  391. package/dist/index-CLvlNnjM.d.mts +32 -0
  392. package/dist/{index-BkzZxHVj.d.mts → index-CO-XxjiZ.d.cts} +2 -2
  393. package/dist/{index-DYF8sRE-.d.cts → index-CR0akDlJ.d.cts} +2 -2
  394. package/dist/{index-CJhK7JND.d.mts → index-CRQ7XLri.d.mts} +193 -13
  395. package/dist/{index-CknoXDLQ.d.cts → index-CRn4fWwA.d.mts} +2 -2
  396. package/dist/{index-CUz2h5xY.d.mts → index-CWPvdEjP.d.mts} +2 -2
  397. package/dist/{index-nqUA_6J_.d.cts → index-CrQDxJ1D.d.cts} +1 -1
  398. package/dist/index-Ctx-DKV3.d.cts +18 -0
  399. package/dist/index-Ctx-DKV3.d.mts +18 -0
  400. package/dist/{index-CE5JG1us.d.mts → index-CyLhEXYB.d.mts} +1 -1
  401. package/dist/{index-pTNq3iQn.d.mts → index-D05fSuF1.d.mts} +2 -2
  402. package/dist/{index-CG_1uPrD.d.mts → index-DK3zgGPe.d.mts} +2 -2
  403. package/dist/{index-ha1WjSZ5.d.mts → index-DNj5P2NH.d.mts} +14 -2
  404. package/dist/{index-ChXeKJCk.d.cts → index-DOH1xY0L.d.cts} +1 -1
  405. package/dist/{index-WHFhjfgy.d.cts → index-D_-DAAE7.d.mts} +14 -6
  406. package/dist/{index-BHKgEOZJ.d.cts → index-D_LT3QiH.d.mts} +3 -3
  407. package/dist/index-Db4L2hwa.d.cts +36 -0
  408. package/dist/{index-BrgwkY6z.d.mts → index-Dk4KuTPB.d.cts} +3 -3
  409. package/dist/{index-bpnLB_4K.d.mts → index-Ebjbrbsk.d.cts} +14 -6
  410. package/dist/{index-CQfJZADG.d.cts → index-MWUGpG-Y.d.mts} +3 -3
  411. package/dist/{index-DJ0f69wh.d.cts → index-XN4-ZqTB.d.cts} +195 -15
  412. package/dist/index-fPRELf0V.d.mts +1 -0
  413. package/dist/{index-DGnXJwLj.d.mts → index-fi-W3MOz.d.cts} +7 -5
  414. package/dist/{index-ByYxVl9O.d.mts → index-iTquH69S.d.cts} +3 -3
  415. package/dist/{index-DWjz5ZzG.d.cts → index-lGpLM144.d.mts} +7 -5
  416. package/dist/{index-h4dYtVrp.d.mts → index-vBCN6iAz.d.mts} +1 -1
  417. package/dist/index-x3WC9ViD.d.cts +1 -0
  418. package/dist/index.d.cts +1 -1
  419. package/dist/index.d.mts +1 -1
  420. package/dist/inputVariantStyles-BUK_62Ra.cjs +61 -0
  421. package/dist/inputVariantStyles-q_cZsCJg.mjs +44 -0
  422. package/dist/style.cjs +1 -1
  423. package/dist/style.d.cts +2 -2
  424. package/dist/style.d.mts +2 -2
  425. package/dist/style.mjs +1 -1
  426. package/dist/{theme-BxXuXRgQ.cjs → theme-DzfwuzMZ.cjs} +1 -1
  427. package/dist/{theme-Z9_QludW.mjs → theme-oBfFhJm9.mjs} +1 -1
  428. package/dist/theme.cjs +3 -2
  429. package/dist/theme.d.cts +3 -3
  430. package/dist/theme.d.mts +3 -3
  431. package/dist/theme.mjs +3 -3
  432. package/dist/{themes-gd6tcmqS.cjs → themes--4eci3M1.cjs} +25 -2
  433. package/dist/{themes-L-dE7_ck.mjs → themes-BwEsdVox.mjs} +20 -3
  434. package/dist/useAnchoredPlacement-B1FyGoZV.cjs +111 -0
  435. package/dist/useAnchoredPlacement-Pe7sY41E.mjs +106 -0
  436. package/dist/useMergedRefs-2zTDXgPO.cjs +27 -0
  437. package/dist/useMergedRefs-BfBckwRY.mjs +22 -0
  438. package/dist/{useTablePagination-C-u3ru4N.d.cts → useTablePagination-CFb_FYA9.d.cts} +1 -1
  439. package/dist/{useTablePagination-D-39ZmQh.d.mts → useTablePagination-_-bzuXJO.d.mts} +1 -1
  440. package/dist/useTransition-C1F7MuHO.d.mts +42 -0
  441. package/dist/useTransition-DAQd1PX3.cjs +83 -0
  442. package/dist/useTransition-DP1k0irI.mjs +78 -0
  443. package/dist/useTransition-l9dv83-Y.d.cts +42 -0
  444. package/dist/useTransitionChild-CikpU0Yh.cjs +54 -0
  445. package/dist/useTransitionChild-Dvg9hO-F.mjs +49 -0
  446. package/package.json +164 -14
  447. package/dist/index-BxVTIMnB.d.cts +0 -1
  448. package/dist/index-DaIIo5QU.d.mts +0 -1
  449. package/dist/inputVariantStyles-BBkkYQtE.cjs +0 -32
  450. package/dist/inputVariantStyles-CcqpGfuP.mjs +0 -28
@@ -0,0 +1,19 @@
1
+ import { n as FabProps } from "../index-CERyXFjz.cjs";
2
+ import { MouseEvent, ReactNode } from "react";
3
+ //#region src/FabMenu/FabMenuItem/FabMenuItem.d.ts
4
+ interface FabMenuItemProps extends Omit<FabProps, 'variant' | 'size' | 'isCollapsed' | 'startIcon' | 'children'> {
5
+ /** An icon before the label. */
6
+ icon?: ReactNode;
7
+ /** What the item says, and does: its name. */
8
+ children: ReactNode;
9
+ /** Fired when it is pressed - the menu closes after it. */
10
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
11
+ }
12
+ /**
13
+ * @description One action of a `FabMenu`: an extended `Fab` of the menu's size - a pill with an
14
+ * icon and a label. Pressing it runs `onClick` and closes the menu, and focus goes back to the
15
+ * trigger. It takes any `Fab` prop but its shape.
16
+ */
17
+ declare function FabMenuItem({ icon, children, color, onClick, ...rest }: Readonly<FabMenuItemProps>): import("react").JSX.Element;
18
+ //#endregion
19
+ export { FabMenuItem, FabMenuItemProps };
@@ -0,0 +1,19 @@
1
+ import { n as FabProps } from "../index-CLvlNnjM.mjs";
2
+ import { MouseEvent, ReactNode } from "react";
3
+ //#region src/FabMenu/FabMenuItem/FabMenuItem.d.ts
4
+ interface FabMenuItemProps extends Omit<FabProps, 'variant' | 'size' | 'isCollapsed' | 'startIcon' | 'children'> {
5
+ /** An icon before the label. */
6
+ icon?: ReactNode;
7
+ /** What the item says, and does: its name. */
8
+ children: ReactNode;
9
+ /** Fired when it is pressed - the menu closes after it. */
10
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
11
+ }
12
+ /**
13
+ * @description One action of a `FabMenu`: an extended `Fab` of the menu's size - a pill with an
14
+ * icon and a label. Pressing it runs `onClick` and closes the menu, and focus goes back to the
15
+ * trigger. It takes any `Fab` prop but its shape.
16
+ */
17
+ declare function FabMenuItem({ icon, children, color, onClick, ...rest }: Readonly<FabMenuItemProps>): import("react").JSX.Element;
18
+ //#endregion
19
+ export { FabMenuItem, FabMenuItemProps };
@@ -0,0 +1,27 @@
1
+ import { Fab } from "../Fab.mjs";
2
+ import { n as useFabMenu } from "../FabMenuContext-D-XlDbLl.mjs";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/FabMenu/FabMenuItem/FabMenuItem.tsx
5
+ /**
6
+ * @description One action of a `FabMenu`: an extended `Fab` of the menu's size - a pill with an
7
+ * icon and a label. Pressing it runs `onClick` and closes the menu, and focus goes back to the
8
+ * trigger. It takes any `Fab` prop but its shape.
9
+ */
10
+ function FabMenuItem({ icon, children, color, onClick, ...rest }) {
11
+ const menu = useFabMenu("FabMenuItem");
12
+ return /* @__PURE__ */ jsx(Fab, {
13
+ ...rest,
14
+ "data-fab-menu-item": "",
15
+ variant: "extended",
16
+ size: menu.size,
17
+ color: color ?? "secondary",
18
+ startIcon: icon,
19
+ onClick: (event) => {
20
+ onClick?.(event);
21
+ menu.close(event);
22
+ },
23
+ children
24
+ });
25
+ }
26
+ //#endregion
27
+ export { FabMenuItem };
@@ -0,0 +1,273 @@
1
+ import { a as src_exports, i as props, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
2
+ import { n as useDefaultProps, r as useTheme } from "./theme-oBfFhJm9.mjs";
3
+ import { t as useControlled } from "./useControlled-CBRLsO-H.mjs";
4
+ import { t as Icon } from "./Icon-0hPpk-WZ.mjs";
5
+ import { t as isRtl } from "./isRtl-BJDtm86G.mjs";
6
+ import { Fab } from "./Fab.mjs";
7
+ import { Zoom } from "./Zoom.mjs";
8
+ import { t as FabMenuContext } from "./FabMenuContext-D-XlDbLl.mjs";
9
+ import { Children, Fragment, cloneElement, isValidElement, useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/FabMenu/hooks/useFabMenuLayout.ts
12
+ const px = (length) => Number.parseFloat(String(length));
13
+ const isSame = (first, second) => first.direction === second.direction && first.maxWidth === second.maxWidth && first.maxHeight === second.maxHeight;
14
+ /**
15
+ * Measures the actions against the window as the menu opens, and as the window or the page
16
+ * moves under it: a row that is wider than the room beside the trigger becomes a column - above it
17
+ * where there is more room above, else below - and a column is no wider or taller than the room it
18
+ * has, so a long label is cut with an ellipsis and a long column scrolls. Nothing is measured while
19
+ * the menu is closed, and the layout is the one asked for until it opens. The room kept from the
20
+ * window's edge is `theme.space[2]`, the step between the actions `theme.space[1]`.
21
+ */
22
+ function useFabMenuLayout({ isOpen, direction, align, listRef, triggerRef, itemCount }) {
23
+ const theme = useTheme();
24
+ const margin = px(theme.space[2]);
25
+ const gap = px(theme.space[1]);
26
+ const [layout, setLayout] = useState({ direction });
27
+ useLayoutEffect(() => {
28
+ if (!isOpen) return void 0;
29
+ const asked = { direction };
30
+ const settle = (next) => setLayout((current) => isSame(current, next) ? current : next);
31
+ const measure = () => {
32
+ const list = listRef.current;
33
+ const trigger = triggerRef.current;
34
+ const rect = trigger.getBoundingClientRect();
35
+ const rtl = isRtl(trigger);
36
+ const room = {
37
+ top: rect.top - margin,
38
+ bottom: window.innerHeight - rect.bottom - margin,
39
+ left: rect.left - margin,
40
+ right: window.innerWidth - rect.right - margin
41
+ };
42
+ let column = direction;
43
+ if (direction === "left" || direction === "right") {
44
+ const items = [...list.querySelectorAll("[data-fab-menu-item]")];
45
+ if (items.reduce((sum, item) => {
46
+ const text = item.querySelector("[data-fab-label]");
47
+ return sum + item.offsetWidth + (text.scrollWidth - text.clientWidth);
48
+ }, 0) + gap * items.length <= (direction === "left" !== rtl ? room.left : room.right)) return settle(asked);
49
+ column = room.top >= room.bottom ? "up" : "down";
50
+ }
51
+ const height = (column === "up" ? room.top : room.bottom) - gap;
52
+ const width = align === "end" !== rtl ? rect.right - margin : window.innerWidth - rect.left - margin;
53
+ return settle({
54
+ direction: column,
55
+ maxWidth: Math.max(0, width),
56
+ maxHeight: list.scrollHeight > height ? Math.max(0, height) : void 0
57
+ });
58
+ };
59
+ measure();
60
+ window.addEventListener("resize", measure);
61
+ window.addEventListener("scroll", measure, { passive: true });
62
+ return () => {
63
+ window.removeEventListener("resize", measure);
64
+ window.removeEventListener("scroll", measure);
65
+ };
66
+ }, [
67
+ isOpen,
68
+ direction,
69
+ align,
70
+ itemCount,
71
+ margin,
72
+ gap,
73
+ listRef,
74
+ triggerRef
75
+ ]);
76
+ return isOpen ? layout : { direction };
77
+ }
78
+ //#endregion
79
+ //#region src/FabMenu/FabMenu/FabMenu.tsx
80
+ const FabMenuRoot = styled("div", {
81
+ name: "FabMenu",
82
+ label: "FabMenu",
83
+ shouldForwardProp: createShouldForwardProp([...props]),
84
+ systemProps: [src_exports.space]
85
+ })({
86
+ position: "relative",
87
+ display: "inline-flex"
88
+ });
89
+ const FabMenuList = styled("div", {
90
+ name: "FabMenu",
91
+ slot: "list",
92
+ label: "FabMenuList",
93
+ shouldForwardProp: createShouldForwardProp([
94
+ "direction",
95
+ "align",
96
+ "maxWidth",
97
+ "maxHeight"
98
+ ])
99
+ })(({ theme, direction, align, maxWidth, maxHeight }) => {
100
+ const clear = `calc(100% + ${theme.space[1]})`;
101
+ const base = {
102
+ position: "absolute",
103
+ display: "flex",
104
+ gap: theme.space[1],
105
+ width: "max-content"
106
+ };
107
+ if (direction === "left" || direction === "right") return {
108
+ ...base,
109
+ flexDirection: "row",
110
+ top: 0,
111
+ bottom: 0,
112
+ alignItems: "center",
113
+ [direction === "left" ? "insetInlineEnd" : "insetInlineStart"]: clear
114
+ };
115
+ return {
116
+ ...base,
117
+ flexDirection: "column",
118
+ ...maxWidth !== void 0 && { maxWidth },
119
+ ...maxHeight !== void 0 && {
120
+ maxHeight,
121
+ overflowY: "auto",
122
+ overscrollBehavior: "contain",
123
+ scrollbarWidth: "thin",
124
+ padding: theme.space[.5]
125
+ },
126
+ [direction === "up" ? "bottom" : "top"]: clear,
127
+ [align === "end" ? "insetInlineEnd" : "insetInlineStart"]: 0,
128
+ alignItems: align === "end" ? "flex-end" : "flex-start"
129
+ };
130
+ });
131
+ const getItems = (children) => Children.toArray(children).flatMap((child) => {
132
+ if (!isValidElement(child)) return [];
133
+ if (child.type !== Fragment) return [child];
134
+ return getItems(child.props.children).map((inner) => cloneElement(inner, { key: `${child.key}/${inner.key}` }));
135
+ });
136
+ const ITEMS = "[data-fab-menu-item]:not(:disabled)";
137
+ /**
138
+ * @description A `Fab` that opens a stack of actions - extended pills, each a `FabMenuItem` - from
139
+ * one corner of a page. The trigger is a disclosure button: `aria-expanded` and `aria-controls`,
140
+ * its icon turning to a close one while open. The actions zoom in over `theme.transitions` and are
141
+ * out of the tree while closed. Escape, a press away, or choosing an action closes it and, for
142
+ * Escape and an action, returns the focus to the trigger; the arrow keys, Home and End walk the
143
+ * actions and the trigger in the order they are drawn. Where it floats is the page's.
144
+ */
145
+ function FabMenu({ children, icon, closeIcon, label, "aria-label": ariaLabel, isOpen: isOpenProp, defaultOpen = false, onOpen, onClose, direction: directionProp, align: alignProp, color, size: sizeProp, className, "data-testid": dataTestid, ...spaceProps }) {
146
+ const dp = useDefaultProps("FabMenu");
147
+ const asked = directionProp ?? dp.direction ?? "up";
148
+ const align = alignProp ?? dp.align ?? "end";
149
+ const size = sizeProp ?? dp.size ?? "md";
150
+ const [isOpen, setIsOpen] = useControlled({
151
+ controlled: isOpenProp,
152
+ default: defaultOpen
153
+ });
154
+ const listId = useId();
155
+ const rootRef = useRef(null);
156
+ const listRef = useRef(null);
157
+ const triggerRef = useRef(null);
158
+ const open = (event) => {
159
+ setIsOpen(true);
160
+ onOpen?.(event);
161
+ };
162
+ const close = useCallback((event) => {
163
+ setIsOpen(false);
164
+ onClose?.(event);
165
+ if (event.type === "click" || event.type === "keydown") triggerRef.current.focus();
166
+ }, [setIsOpen, onClose]);
167
+ useEffect(() => {
168
+ if (!isOpen) return void 0;
169
+ const handlePointerDown = (event) => {
170
+ if (!rootRef.current?.contains(event.target)) close(event);
171
+ };
172
+ document.addEventListener("pointerdown", handlePointerDown);
173
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
174
+ }, [isOpen, close]);
175
+ const items = getItems(children);
176
+ const layout = useFabMenuLayout({
177
+ isOpen,
178
+ direction: asked,
179
+ align,
180
+ listRef,
181
+ triggerRef,
182
+ itemCount: items.length
183
+ });
184
+ const direction = layout.direction;
185
+ const isRow = direction === "left" || direction === "right";
186
+ const isBefore = direction === "up" || direction === "left";
187
+ const handleKeyDown = (event) => {
188
+ if (event.key === "Escape" && isOpen) {
189
+ event.preventDefault();
190
+ close(event);
191
+ return;
192
+ }
193
+ const [back, forward] = isRow ? ["ArrowLeft", "ArrowRight"] : ["ArrowUp", "ArrowDown"];
194
+ if (![
195
+ back,
196
+ forward,
197
+ "Home",
198
+ "End"
199
+ ].includes(event.key)) return;
200
+ if (!isOpen) {
201
+ if (event.key === back || event.key === forward) {
202
+ event.preventDefault();
203
+ open(event);
204
+ }
205
+ return;
206
+ }
207
+ const found = [...rootRef.current.querySelectorAll(ITEMS)];
208
+ const drawn = isBefore ? [...found, triggerRef.current] : [triggerRef.current, ...found];
209
+ const at = drawn.indexOf(document.activeElement);
210
+ if (at === -1) return;
211
+ event.preventDefault();
212
+ const last = drawn.length - 1;
213
+ const toward = isRow && isRtl(rootRef.current) ? back : forward;
214
+ const step = event.key === toward ? 1 : -1;
215
+ drawn[{
216
+ Home: 0,
217
+ End: last
218
+ }[event.key] ?? Math.min(last, Math.max(0, at + step))].focus();
219
+ };
220
+ const triggerIcon = isOpen ? closeIcon ?? /* @__PURE__ */ jsx(Icon, {
221
+ name: "close",
222
+ color: "inherit"
223
+ }) : icon ?? /* @__PURE__ */ jsx(Icon, {
224
+ name: "add",
225
+ color: "inherit"
226
+ });
227
+ const isExtended = label !== void 0;
228
+ const context = useMemo(() => ({
229
+ close,
230
+ size
231
+ }), [close, size]);
232
+ const unfolding = isBefore ? [...items].reverse() : items;
233
+ return /* @__PURE__ */ jsx(FabMenuContext.Provider, {
234
+ value: context,
235
+ children: /* @__PURE__ */ jsxs(FabMenuRoot, {
236
+ ref: rootRef,
237
+ className,
238
+ "data-testid": dataTestid,
239
+ onKeyDown: handleKeyDown,
240
+ ...spaceProps,
241
+ children: [/* @__PURE__ */ jsx(FabMenuList, {
242
+ ref: listRef,
243
+ id: listId,
244
+ direction,
245
+ align,
246
+ maxWidth: layout.maxWidth,
247
+ maxHeight: layout.maxHeight,
248
+ children: items.map((item) => /* @__PURE__ */ jsx(Zoom, {
249
+ isShown: isOpen,
250
+ shouldAppear: false,
251
+ timeout: {
252
+ enter: 225 + 40 * unfolding.indexOf(item),
253
+ exit: 150
254
+ },
255
+ children: item
256
+ }, item.key))
257
+ }), /* @__PURE__ */ jsx(Fab, {
258
+ ref: triggerRef,
259
+ variant: isExtended ? "extended" : "circular",
260
+ color: color ?? dp.color ?? "primary",
261
+ size,
262
+ startIcon: isExtended ? triggerIcon : void 0,
263
+ "aria-label": isExtended ? void 0 : ariaLabel,
264
+ "aria-expanded": isOpen,
265
+ "aria-controls": isOpen ? listId : void 0,
266
+ onClick: (event) => isOpen ? close(event) : open(event),
267
+ children: isExtended ? label : triggerIcon
268
+ })]
269
+ })
270
+ });
271
+ }
272
+ //#endregion
273
+ export { FabMenu as t };
@@ -0,0 +1,279 @@
1
+ const require_src = require("./src-DU81aGy9.cjs");
2
+ const require_theme = require("./theme-DzfwuzMZ.cjs");
3
+ const require_useControlled = require("./useControlled-C666KpQ0.cjs");
4
+ const require_Icon = require("./Icon-BE7bRsqR.cjs");
5
+ const require_isRtl = require("./isRtl-DTkYHRPo.cjs");
6
+ const require_Fab = require("./Fab.cjs");
7
+ const require_Zoom = require("./Zoom.cjs");
8
+ const require_FabMenuContext = require("./FabMenuContext-BZslb0lL.cjs");
9
+ let react = require("react");
10
+ let react_jsx_runtime = require("react/jsx-runtime");
11
+ let _soroush_tech_styled_system_should_forward_prop = require("@soroush.tech/styled-system/should-forward-prop");
12
+ //#region src/FabMenu/hooks/useFabMenuLayout.ts
13
+ const px = (length) => Number.parseFloat(String(length));
14
+ const isSame = (first, second) => first.direction === second.direction && first.maxWidth === second.maxWidth && first.maxHeight === second.maxHeight;
15
+ /**
16
+ * Measures the actions against the window as the menu opens, and as the window or the page
17
+ * moves under it: a row that is wider than the room beside the trigger becomes a column - above it
18
+ * where there is more room above, else below - and a column is no wider or taller than the room it
19
+ * has, so a long label is cut with an ellipsis and a long column scrolls. Nothing is measured while
20
+ * the menu is closed, and the layout is the one asked for until it opens. The room kept from the
21
+ * window's edge is `theme.space[2]`, the step between the actions `theme.space[1]`.
22
+ */
23
+ function useFabMenuLayout({ isOpen, direction, align, listRef, triggerRef, itemCount }) {
24
+ const theme = require_theme.useTheme();
25
+ const margin = px(theme.space[2]);
26
+ const gap = px(theme.space[1]);
27
+ const [layout, setLayout] = (0, react.useState)({ direction });
28
+ (0, react.useLayoutEffect)(() => {
29
+ if (!isOpen) return void 0;
30
+ const asked = { direction };
31
+ const settle = (next) => setLayout((current) => isSame(current, next) ? current : next);
32
+ const measure = () => {
33
+ const list = listRef.current;
34
+ const trigger = triggerRef.current;
35
+ const rect = trigger.getBoundingClientRect();
36
+ const rtl = require_isRtl.isRtl(trigger);
37
+ const room = {
38
+ top: rect.top - margin,
39
+ bottom: window.innerHeight - rect.bottom - margin,
40
+ left: rect.left - margin,
41
+ right: window.innerWidth - rect.right - margin
42
+ };
43
+ let column = direction;
44
+ if (direction === "left" || direction === "right") {
45
+ const items = [...list.querySelectorAll("[data-fab-menu-item]")];
46
+ if (items.reduce((sum, item) => {
47
+ const text = item.querySelector("[data-fab-label]");
48
+ return sum + item.offsetWidth + (text.scrollWidth - text.clientWidth);
49
+ }, 0) + gap * items.length <= (direction === "left" !== rtl ? room.left : room.right)) return settle(asked);
50
+ column = room.top >= room.bottom ? "up" : "down";
51
+ }
52
+ const height = (column === "up" ? room.top : room.bottom) - gap;
53
+ const width = align === "end" !== rtl ? rect.right - margin : window.innerWidth - rect.left - margin;
54
+ return settle({
55
+ direction: column,
56
+ maxWidth: Math.max(0, width),
57
+ maxHeight: list.scrollHeight > height ? Math.max(0, height) : void 0
58
+ });
59
+ };
60
+ measure();
61
+ window.addEventListener("resize", measure);
62
+ window.addEventListener("scroll", measure, { passive: true });
63
+ return () => {
64
+ window.removeEventListener("resize", measure);
65
+ window.removeEventListener("scroll", measure);
66
+ };
67
+ }, [
68
+ isOpen,
69
+ direction,
70
+ align,
71
+ itemCount,
72
+ margin,
73
+ gap,
74
+ listRef,
75
+ triggerRef
76
+ ]);
77
+ return isOpen ? layout : { direction };
78
+ }
79
+ //#endregion
80
+ //#region src/FabMenu/FabMenu/FabMenu.tsx
81
+ const FabMenuRoot = require_src.styled("div", {
82
+ name: "FabMenu",
83
+ label: "FabMenu",
84
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([..._soroush_tech_styled_system_should_forward_prop.props]),
85
+ systemProps: [require_src.src_exports.space]
86
+ })({
87
+ position: "relative",
88
+ display: "inline-flex"
89
+ });
90
+ const FabMenuList = require_src.styled("div", {
91
+ name: "FabMenu",
92
+ slot: "list",
93
+ label: "FabMenuList",
94
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([
95
+ "direction",
96
+ "align",
97
+ "maxWidth",
98
+ "maxHeight"
99
+ ])
100
+ })(({ theme, direction, align, maxWidth, maxHeight }) => {
101
+ const clear = `calc(100% + ${theme.space[1]})`;
102
+ const base = {
103
+ position: "absolute",
104
+ display: "flex",
105
+ gap: theme.space[1],
106
+ width: "max-content"
107
+ };
108
+ if (direction === "left" || direction === "right") return {
109
+ ...base,
110
+ flexDirection: "row",
111
+ top: 0,
112
+ bottom: 0,
113
+ alignItems: "center",
114
+ [direction === "left" ? "insetInlineEnd" : "insetInlineStart"]: clear
115
+ };
116
+ return {
117
+ ...base,
118
+ flexDirection: "column",
119
+ ...maxWidth !== void 0 && { maxWidth },
120
+ ...maxHeight !== void 0 && {
121
+ maxHeight,
122
+ overflowY: "auto",
123
+ overscrollBehavior: "contain",
124
+ scrollbarWidth: "thin",
125
+ padding: theme.space[.5]
126
+ },
127
+ [direction === "up" ? "bottom" : "top"]: clear,
128
+ [align === "end" ? "insetInlineEnd" : "insetInlineStart"]: 0,
129
+ alignItems: align === "end" ? "flex-end" : "flex-start"
130
+ };
131
+ });
132
+ const getItems = (children) => react.Children.toArray(children).flatMap((child) => {
133
+ if (!(0, react.isValidElement)(child)) return [];
134
+ if (child.type !== react.Fragment) return [child];
135
+ return getItems(child.props.children).map((inner) => (0, react.cloneElement)(inner, { key: `${child.key}/${inner.key}` }));
136
+ });
137
+ const ITEMS = "[data-fab-menu-item]:not(:disabled)";
138
+ /**
139
+ * @description A `Fab` that opens a stack of actions - extended pills, each a `FabMenuItem` - from
140
+ * one corner of a page. The trigger is a disclosure button: `aria-expanded` and `aria-controls`,
141
+ * its icon turning to a close one while open. The actions zoom in over `theme.transitions` and are
142
+ * out of the tree while closed. Escape, a press away, or choosing an action closes it and, for
143
+ * Escape and an action, returns the focus to the trigger; the arrow keys, Home and End walk the
144
+ * actions and the trigger in the order they are drawn. Where it floats is the page's.
145
+ */
146
+ function FabMenu({ children, icon, closeIcon, label, "aria-label": ariaLabel, isOpen: isOpenProp, defaultOpen = false, onOpen, onClose, direction: directionProp, align: alignProp, color, size: sizeProp, className, "data-testid": dataTestid, ...spaceProps }) {
147
+ const dp = require_theme.useDefaultProps("FabMenu");
148
+ const asked = directionProp ?? dp.direction ?? "up";
149
+ const align = alignProp ?? dp.align ?? "end";
150
+ const size = sizeProp ?? dp.size ?? "md";
151
+ const [isOpen, setIsOpen] = require_useControlled.useControlled({
152
+ controlled: isOpenProp,
153
+ default: defaultOpen
154
+ });
155
+ const listId = (0, react.useId)();
156
+ const rootRef = (0, react.useRef)(null);
157
+ const listRef = (0, react.useRef)(null);
158
+ const triggerRef = (0, react.useRef)(null);
159
+ const open = (event) => {
160
+ setIsOpen(true);
161
+ onOpen?.(event);
162
+ };
163
+ const close = (0, react.useCallback)((event) => {
164
+ setIsOpen(false);
165
+ onClose?.(event);
166
+ if (event.type === "click" || event.type === "keydown") triggerRef.current.focus();
167
+ }, [setIsOpen, onClose]);
168
+ (0, react.useEffect)(() => {
169
+ if (!isOpen) return void 0;
170
+ const handlePointerDown = (event) => {
171
+ if (!rootRef.current?.contains(event.target)) close(event);
172
+ };
173
+ document.addEventListener("pointerdown", handlePointerDown);
174
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
175
+ }, [isOpen, close]);
176
+ const items = getItems(children);
177
+ const layout = useFabMenuLayout({
178
+ isOpen,
179
+ direction: asked,
180
+ align,
181
+ listRef,
182
+ triggerRef,
183
+ itemCount: items.length
184
+ });
185
+ const direction = layout.direction;
186
+ const isRow = direction === "left" || direction === "right";
187
+ const isBefore = direction === "up" || direction === "left";
188
+ const handleKeyDown = (event) => {
189
+ if (event.key === "Escape" && isOpen) {
190
+ event.preventDefault();
191
+ close(event);
192
+ return;
193
+ }
194
+ const [back, forward] = isRow ? ["ArrowLeft", "ArrowRight"] : ["ArrowUp", "ArrowDown"];
195
+ if (![
196
+ back,
197
+ forward,
198
+ "Home",
199
+ "End"
200
+ ].includes(event.key)) return;
201
+ if (!isOpen) {
202
+ if (event.key === back || event.key === forward) {
203
+ event.preventDefault();
204
+ open(event);
205
+ }
206
+ return;
207
+ }
208
+ const found = [...rootRef.current.querySelectorAll(ITEMS)];
209
+ const drawn = isBefore ? [...found, triggerRef.current] : [triggerRef.current, ...found];
210
+ const at = drawn.indexOf(document.activeElement);
211
+ if (at === -1) return;
212
+ event.preventDefault();
213
+ const last = drawn.length - 1;
214
+ const toward = isRow && require_isRtl.isRtl(rootRef.current) ? back : forward;
215
+ const step = event.key === toward ? 1 : -1;
216
+ drawn[{
217
+ Home: 0,
218
+ End: last
219
+ }[event.key] ?? Math.min(last, Math.max(0, at + step))].focus();
220
+ };
221
+ const triggerIcon = isOpen ? closeIcon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
222
+ name: "close",
223
+ color: "inherit"
224
+ }) : icon ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
225
+ name: "add",
226
+ color: "inherit"
227
+ });
228
+ const isExtended = label !== void 0;
229
+ const context = (0, react.useMemo)(() => ({
230
+ close,
231
+ size
232
+ }), [close, size]);
233
+ const unfolding = isBefore ? [...items].reverse() : items;
234
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FabMenuContext.FabMenuContext.Provider, {
235
+ value: context,
236
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(FabMenuRoot, {
237
+ ref: rootRef,
238
+ className,
239
+ "data-testid": dataTestid,
240
+ onKeyDown: handleKeyDown,
241
+ ...spaceProps,
242
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(FabMenuList, {
243
+ ref: listRef,
244
+ id: listId,
245
+ direction,
246
+ align,
247
+ maxWidth: layout.maxWidth,
248
+ maxHeight: layout.maxHeight,
249
+ children: items.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Zoom.Zoom, {
250
+ isShown: isOpen,
251
+ shouldAppear: false,
252
+ timeout: {
253
+ enter: 225 + 40 * unfolding.indexOf(item),
254
+ exit: 150
255
+ },
256
+ children: item
257
+ }, item.key))
258
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Fab.Fab, {
259
+ ref: triggerRef,
260
+ variant: isExtended ? "extended" : "circular",
261
+ color: color ?? dp.color ?? "primary",
262
+ size,
263
+ startIcon: isExtended ? triggerIcon : void 0,
264
+ "aria-label": isExtended ? void 0 : ariaLabel,
265
+ "aria-expanded": isOpen,
266
+ "aria-controls": isOpen ? listId : void 0,
267
+ onClick: (event) => isOpen ? close(event) : open(event),
268
+ children: isExtended ? label : triggerIcon
269
+ })]
270
+ })
271
+ });
272
+ }
273
+ //#endregion
274
+ Object.defineProperty(exports, "FabMenu", {
275
+ enumerable: true,
276
+ get: function() {
277
+ return FabMenu;
278
+ }
279
+ });
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_FabMenu = require("./FabMenu-RiVtzrKe.cjs");
3
+ const require_FabMenu_FabMenuItem = require("./FabMenu/FabMenuItem.cjs");
4
+ exports.FabMenu = require_FabMenu.FabMenu;
5
+ exports.FabMenuItem = require_FabMenu_FabMenuItem.FabMenuItem;
@@ -0,0 +1,3 @@
1
+ import { FabMenu, FabMenuAlign, FabMenuDirection, FabMenuProps } from "./FabMenu/FabMenu.cjs";
2
+ import { FabMenuItem, FabMenuItemProps } from "./FabMenu/FabMenuItem.cjs";
3
+ export { FabMenu, FabMenuAlign, FabMenuDirection, FabMenuItem, FabMenuItemProps, FabMenuProps };
@@ -0,0 +1,3 @@
1
+ import { FabMenu, FabMenuAlign, FabMenuDirection, FabMenuProps } from "./FabMenu/FabMenu.mjs";
2
+ import { FabMenuItem, FabMenuItemProps } from "./FabMenu/FabMenuItem.mjs";
3
+ export { FabMenu, FabMenuAlign, FabMenuDirection, FabMenuItem, FabMenuItemProps, FabMenuProps };
@@ -0,0 +1,3 @@
1
+ import { t as FabMenu } from "./FabMenu-BDfkT_zt.mjs";
2
+ import { FabMenuItem } from "./FabMenu/FabMenuItem.mjs";
3
+ export { FabMenu, FabMenuItem };
@@ -0,0 +1,22 @@
1
+ let react = require("react");
2
+ //#region src/FabMenu/FabMenuContext.ts
3
+ const FabMenuContext = (0, react.createContext)(null);
4
+ /** The menu a part sits in - a part with none is a mistake, so it says so. */
5
+ function useFabMenu(part) {
6
+ const menu = (0, react.useContext)(FabMenuContext);
7
+ if (!menu) throw new Error(`A ${part} must be inside a FabMenu.`);
8
+ return menu;
9
+ }
10
+ //#endregion
11
+ Object.defineProperty(exports, "FabMenuContext", {
12
+ enumerable: true,
13
+ get: function() {
14
+ return FabMenuContext;
15
+ }
16
+ });
17
+ Object.defineProperty(exports, "useFabMenu", {
18
+ enumerable: true,
19
+ get: function() {
20
+ return useFabMenu;
21
+ }
22
+ });
@@ -0,0 +1,11 @@
1
+ import { createContext, useContext } from "react";
2
+ //#region src/FabMenu/FabMenuContext.ts
3
+ const FabMenuContext = createContext(null);
4
+ /** The menu a part sits in - a part with none is a mistake, so it says so. */
5
+ function useFabMenu(part) {
6
+ const menu = useContext(FabMenuContext);
7
+ if (!menu) throw new Error(`A ${part} must be inside a FabMenu.`);
8
+ return menu;
9
+ }
10
+ //#endregion
11
+ export { useFabMenu as n, FabMenuContext as t };