@soroush.tech/design-system 2.0.0-rc.2 → 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 (457) hide show
  1. package/README.md +66 -40
  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 +14 -4
  121. package/dist/FormControl.d.cts +9 -1
  122. package/dist/FormControl.d.mts +9 -1
  123. package/dist/FormControl.mjs +14 -4
  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 +13 -2
  129. package/dist/FormLabel.d.cts +2 -2
  130. package/dist/FormLabel.d.mts +2 -2
  131. package/dist/FormLabel.mjs +14 -3
  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-DlheCTJb.mjs → Icon-0hPpk-WZ.mjs} +71 -1
  139. package/dist/{Icon-Cvuhp9ek.cjs → Icon-BE7bRsqR.cjs} +71 -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-tECbAEFj.mjs → Menu-CnG4ikZd.mjs} +7 -4
  171. package/dist/{Menu-BkKPTOfh.cjs → Menu-DXLjR9ga.cjs} +8 -5
  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-BR7ingQx.mjs → MenuItem-C21eR7d6.mjs} +42 -86
  177. package/dist/{MenuItem-CfdN4axw.cjs → MenuItem-EJ4u73f0.cjs} +42 -92
  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-Dml16k0X.d.mts → MenuListContext-BWL5fM_L.d.mts} +2 -2
  185. package/dist/{MenuListContext-vujGcRk9.d.cts → 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 +15 -18
  193. package/dist/NativeSelect.d.cts +3 -3
  194. package/dist/NativeSelect.d.mts +3 -3
  195. package/dist/NativeSelect.mjs +15 -18
  196. package/dist/NumberInput.cjs +502 -0
  197. package/dist/NumberInput.d.cts +79 -0
  198. package/dist/NumberInput.d.mts +79 -0
  199. package/dist/NumberInput.mjs +500 -0
  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/RangeInput.cjs +677 -0
  229. package/dist/RangeInput.d.cts +79 -0
  230. package/dist/RangeInput.d.mts +79 -0
  231. package/dist/RangeInput.mjs +675 -0
  232. package/dist/Rating.cjs +373 -0
  233. package/dist/Rating.d.cts +57 -0
  234. package/dist/Rating.d.mts +57 -0
  235. package/dist/Rating.mjs +371 -0
  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 +11 -13
  241. package/dist/Select.d.cts +3 -3
  242. package/dist/Select.d.mts +3 -3
  243. package/dist/Select.mjs +13 -15
  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 +4 -4
  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 +35 -18
  261. package/dist/Switch.d.cts +4 -2
  262. package/dist/Switch.d.mts +4 -2
  263. package/dist/Switch.mjs +37 -20
  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/TableControl.mjs +2 -2
  275. package/dist/Table/TableFooter.d.cts +1 -1
  276. package/dist/Table/TableFooter.d.mts +1 -1
  277. package/dist/Table/TableHead.d.cts +1 -1
  278. package/dist/Table/TableHead.d.mts +1 -1
  279. package/dist/Table/TablePagination.cjs +1 -0
  280. package/dist/Table/TablePagination.d.cts +2 -2
  281. package/dist/Table/TablePagination.d.mts +2 -2
  282. package/dist/Table/TablePagination.mjs +1 -0
  283. package/dist/Table/TablePaginationActions.cjs +1 -1
  284. package/dist/Table/TablePaginationActions.d.cts +1 -1
  285. package/dist/Table/TablePaginationActions.d.mts +1 -1
  286. package/dist/Table/TablePaginationActions.mjs +1 -1
  287. package/dist/Table/TableRow.d.cts +1 -1
  288. package/dist/Table/TableRow.d.mts +1 -1
  289. package/dist/Table/TableSortLabel.cjs +1 -1
  290. package/dist/Table/TableSortLabel.d.cts +1 -1
  291. package/dist/Table/TableSortLabel.d.mts +1 -1
  292. package/dist/Table/TableSortLabel.mjs +1 -1
  293. package/dist/Table/hooks.d.cts +1 -1
  294. package/dist/Table/hooks.d.mts +1 -1
  295. package/dist/Table.d.cts +5 -5
  296. package/dist/Table.d.mts +5 -5
  297. package/dist/{TableContext-6PgGpUzM.d.mts → TableContext-Be8tluYZ.d.cts} +1 -1
  298. package/dist/{TableContext-CBGk-Lh8.d.cts → TableContext-DUPqls5k.d.mts} +1 -1
  299. package/dist/Tabs/Tab.cjs +16 -7
  300. package/dist/Tabs/Tab.d.cts +2 -2
  301. package/dist/Tabs/Tab.d.mts +2 -2
  302. package/dist/Tabs/Tab.mjs +16 -7
  303. package/dist/Tabs/TabContext.d.cts +1 -1
  304. package/dist/Tabs/TabContext.d.mts +1 -1
  305. package/dist/Tabs/TabList.cjs +1 -1
  306. package/dist/Tabs/TabList.d.cts +1 -1
  307. package/dist/Tabs/TabList.d.mts +1 -1
  308. package/dist/Tabs/TabList.mjs +1 -1
  309. package/dist/Tabs/TabPanel.cjs +1 -1
  310. package/dist/Tabs/TabPanel.d.cts +2 -2
  311. package/dist/Tabs/TabPanel.d.mts +2 -2
  312. package/dist/Tabs/TabPanel.mjs +1 -1
  313. package/dist/Tabs/TabScrollButton.cjs +2 -2
  314. package/dist/Tabs/TabScrollButton.d.cts +1 -1
  315. package/dist/Tabs/TabScrollButton.d.mts +1 -1
  316. package/dist/Tabs/TabScrollButton.mjs +2 -2
  317. package/dist/Tabs/Tabs.cjs +1 -1
  318. package/dist/Tabs/Tabs.d.cts +2 -2
  319. package/dist/Tabs/Tabs.d.mts +2 -2
  320. package/dist/Tabs/Tabs.mjs +1 -1
  321. package/dist/{Tabs-D_wkX-Jb.cjs → Tabs-Croeq9s2.cjs} +15 -10
  322. package/dist/{Tabs-YfCUbkQV.mjs → Tabs-DMMP5aDj.mjs} +12 -7
  323. package/dist/Tabs.cjs +1 -1
  324. package/dist/Tabs.d.cts +3 -3
  325. package/dist/Tabs.d.mts +3 -3
  326. package/dist/Tabs.mjs +1 -1
  327. package/dist/{TabsContext-C2agsLBN.d.cts → TabsContext-BYeGjSZK.d.cts} +1 -1
  328. package/dist/{TabsContext-DqyxdmGW.d.mts → TabsContext-D4YumTfD.d.mts} +1 -1
  329. package/dist/TextInput.cjs +14 -14
  330. package/dist/TextInput.d.cts +2 -2
  331. package/dist/TextInput.d.mts +2 -2
  332. package/dist/TextInput.mjs +14 -14
  333. package/dist/ToggleButton/ToggleButton.cjs +2 -2
  334. package/dist/ToggleButton/ToggleButton.d.cts +1 -1
  335. package/dist/ToggleButton/ToggleButton.d.mts +1 -1
  336. package/dist/ToggleButton/ToggleButton.mjs +2 -2
  337. package/dist/ToggleButton/ToggleButtonGroup.cjs +1 -1
  338. package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
  339. package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
  340. package/dist/ToggleButton/ToggleButtonGroup.mjs +1 -1
  341. package/dist/Tooltip.cjs +270 -0
  342. package/dist/Tooltip.d.cts +78 -0
  343. package/dist/Tooltip.d.mts +78 -0
  344. package/dist/Tooltip.mjs +268 -0
  345. package/dist/TransferList.cjs +363 -0
  346. package/dist/TransferList.d.cts +69 -0
  347. package/dist/TransferList.d.mts +69 -0
  348. package/dist/TransferList.mjs +361 -0
  349. package/dist/Typography.cjs +1 -1
  350. package/dist/Typography.d.cts +2 -2
  351. package/dist/Typography.d.mts +2 -2
  352. package/dist/Typography.mjs +1 -1
  353. package/dist/View.d.cts +1 -1
  354. package/dist/View.d.mts +1 -1
  355. package/dist/Zoom.cjs +16 -0
  356. package/dist/Zoom.d.cts +10 -0
  357. package/dist/Zoom.d.mts +10 -0
  358. package/dist/Zoom.mjs +15 -0
  359. package/dist/catalog.cjs +1405 -45
  360. package/dist/catalog.d.cts +1 -1
  361. package/dist/catalog.d.mts +1 -1
  362. package/dist/catalog.mjs +1405 -45
  363. package/dist/engine.d.cts +2 -2
  364. package/dist/engine.d.mts +1 -1
  365. package/dist/getAnchorRel-CySI28HJ.mjs +8 -0
  366. package/dist/getAnchorRel-_vtAXC-4.cjs +13 -0
  367. package/dist/getShapeRadius-B9ytqDSk.d.cts +5 -0
  368. package/dist/getShapeRadius-B9ytqDSk.d.mts +5 -0
  369. package/dist/getShapeRadius-sY6-AGP4.mjs +12 -0
  370. package/dist/getShapeRadius-vXmXGV3f.cjs +17 -0
  371. package/dist/getSurfaceRadius-BTUV1E8H.cjs +11 -0
  372. package/dist/getSurfaceRadius-DTgqIzll.mjs +6 -0
  373. package/dist/getTooltipOrigins-B_7XXtQq.cjs +104 -0
  374. package/dist/getTooltipOrigins-CyyIMCF1.mjs +87 -0
  375. package/dist/{index-qlfNErNd.d.cts → index-05VGk0y_.d.cts} +30 -2
  376. package/dist/{index-CrIxI8Na.d.mts → index-2x01drCL.d.mts} +2 -2
  377. package/dist/{index-Cj5Rhh_9.d.mts → index-46mhlgP6.d.mts} +7 -3
  378. package/dist/{index-BiVvxOvj.d.cts → index-BCzI2Iqo.d.cts} +2 -2
  379. package/dist/{index-IdMqR82e.d.cts → index-BDqIc6Gx.d.cts} +1 -1
  380. package/dist/{index-BSA6SKao.d.mts → index-BPh60KDs.d.mts} +1 -1
  381. package/dist/{index-Bxd9NOWb.d.mts → index-BQge4W7L.d.cts} +3 -3
  382. package/dist/{index-DCmH5f9I.d.cts → index-BSGu9rPv.d.cts} +7 -3
  383. package/dist/{index-Bhdn4KTy.d.cts → index-BThHG5QU.d.mts} +3 -3
  384. package/dist/{index-DrVYWt-X.d.mts → index-BUeqNHjb.d.cts} +3 -3
  385. package/dist/{index-DIC7HKpP.d.mts → index-BeqpkGV-.d.mts} +1 -1
  386. package/dist/{index-DqjXDutI.d.mts → index-Bfyz3MDc.d.mts} +1 -1
  387. package/dist/{index-BlLH6rlE.d.cts → index-BgLqA52S.d.cts} +2 -2
  388. package/dist/{index-DDJuUfL5.d.cts → index-BhnLFsBv.d.cts} +1 -1
  389. package/dist/{index-gnh-Oe0n.d.cts → index-BitQk7Hx.d.cts} +1 -1
  390. package/dist/index-BvgX5eyV.d.mts +36 -0
  391. package/dist/index-CERyXFjz.d.cts +32 -0
  392. package/dist/index-CLvlNnjM.d.mts +32 -0
  393. package/dist/{index-C3KrFPCj.d.mts → index-CO-XxjiZ.d.cts} +2 -2
  394. package/dist/{index-DXhMkjQ6.d.cts → index-CR0akDlJ.d.cts} +2 -2
  395. package/dist/{index-CVNJEUwJ.d.mts → index-CRQ7XLri.d.mts} +234 -6
  396. package/dist/{index-DQcnJ5H4.d.cts → index-CRn4fWwA.d.mts} +2 -2
  397. package/dist/{index-BCnKYNlZ.d.cts → index-CWPvdEjP.d.mts} +3 -3
  398. package/dist/{index-DuVNRXP4.d.cts → index-CrQDxJ1D.d.cts} +1 -1
  399. package/dist/index-Ctx-DKV3.d.cts +18 -0
  400. package/dist/index-Ctx-DKV3.d.mts +18 -0
  401. package/dist/{index-BjPX49XA.d.mts → index-CyLhEXYB.d.mts} +1 -1
  402. package/dist/{index-DeDxYlSQ.d.mts → index-D05fSuF1.d.mts} +2 -2
  403. package/dist/{index-XxydXX8l.d.cts → index-DK3zgGPe.d.mts} +3 -3
  404. package/dist/{index-BqpS_Huq.d.mts → index-DNj5P2NH.d.mts} +30 -2
  405. package/dist/{index-BFruxTHv.d.cts → index-DOH1xY0L.d.cts} +1 -1
  406. package/dist/{index-B3LIhqHR.d.cts → index-D_-DAAE7.d.mts} +14 -6
  407. package/dist/{index-BbgFYfX_.d.mts → index-D_LT3QiH.d.mts} +2 -2
  408. package/dist/index-Db4L2hwa.d.cts +36 -0
  409. package/dist/{index-BjfPEP_5.d.cts → index-Dk4KuTPB.d.cts} +2 -2
  410. package/dist/{index-CoEqjFYn.d.mts → index-Ebjbrbsk.d.cts} +14 -6
  411. package/dist/{index-B8DNxyEw.d.mts → index-MWUGpG-Y.d.mts} +2 -2
  412. package/dist/{index-DmJ7yWWi.d.cts → index-XN4-ZqTB.d.cts} +236 -8
  413. package/dist/index-fPRELf0V.d.mts +1 -0
  414. package/dist/{index-CWnbCxgw.d.cts → index-fi-W3MOz.d.cts} +7 -5
  415. package/dist/{index-DJCpnTH3.d.mts → index-iTquH69S.d.cts} +3 -3
  416. package/dist/{index-DckSub2J.d.mts → index-lGpLM144.d.mts} +7 -5
  417. package/dist/{index-BVPrG1L0.d.mts → index-vBCN6iAz.d.mts} +1 -1
  418. package/dist/index-x3WC9ViD.d.cts +1 -0
  419. package/dist/index.d.cts +1 -1
  420. package/dist/index.d.mts +1 -1
  421. package/dist/inputVariantStyles-BUK_62Ra.cjs +61 -0
  422. package/dist/inputVariantStyles-q_cZsCJg.mjs +44 -0
  423. package/dist/isRtl-BJDtm86G.mjs +7 -0
  424. package/dist/isRtl-DTkYHRPo.cjs +12 -0
  425. package/dist/precision-B1lhxnnO.mjs +25 -0
  426. package/dist/precision-B58cTPB2.cjs +48 -0
  427. package/dist/style.cjs +1 -1
  428. package/dist/style.d.cts +2 -2
  429. package/dist/style.d.mts +2 -2
  430. package/dist/style.mjs +1 -1
  431. package/dist/{theme-BxXuXRgQ.cjs → theme-DzfwuzMZ.cjs} +1 -1
  432. package/dist/{theme-Z9_QludW.mjs → theme-oBfFhJm9.mjs} +1 -1
  433. package/dist/theme.cjs +3 -2
  434. package/dist/theme.d.cts +3 -3
  435. package/dist/theme.d.mts +3 -3
  436. package/dist/theme.mjs +3 -3
  437. package/dist/{themes-gd6tcmqS.cjs → themes--4eci3M1.cjs} +25 -2
  438. package/dist/{themes-L-dE7_ck.mjs → themes-BwEsdVox.mjs} +20 -3
  439. package/dist/useAnchoredPlacement-B1FyGoZV.cjs +111 -0
  440. package/dist/useAnchoredPlacement-Pe7sY41E.mjs +106 -0
  441. package/dist/useControlled-C666KpQ0.cjs +18 -0
  442. package/dist/useControlled-CBRLsO-H.mjs +13 -0
  443. package/dist/useMergedRefs-2zTDXgPO.cjs +27 -0
  444. package/dist/useMergedRefs-BfBckwRY.mjs +22 -0
  445. package/dist/{useTablePagination-C5VKtqDp.d.cts → useTablePagination-CFb_FYA9.d.cts} +1 -1
  446. package/dist/{useTablePagination-C6LSlt3w.d.mts → useTablePagination-_-bzuXJO.d.mts} +1 -1
  447. package/dist/useTransition-C1F7MuHO.d.mts +42 -0
  448. package/dist/useTransition-DAQd1PX3.cjs +83 -0
  449. package/dist/useTransition-DP1k0irI.mjs +78 -0
  450. package/dist/useTransition-l9dv83-Y.d.cts +42 -0
  451. package/dist/useTransitionChild-CikpU0Yh.cjs +54 -0
  452. package/dist/useTransitionChild-Dvg9hO-F.mjs +49 -0
  453. package/package.json +194 -4
  454. package/dist/index-DBteSahY.d.cts +0 -1
  455. package/dist/index-_G1osn09.d.mts +0 -1
  456. package/dist/inputVariantStyles-BBkkYQtE.cjs +0 -32
  457. package/dist/inputVariantStyles-CcqpGfuP.mjs +0 -28
@@ -0,0 +1,371 @@
1
+ import { a as src_exports, i as props, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
2
+ import { clamp } from "./utils.mjs";
3
+ import { n as useDefaultProps } from "./theme-oBfFhJm9.mjs";
4
+ import { t as useControlled } from "./useControlled-CBRLsO-H.mjs";
5
+ import { t as Icon } from "./Icon-0hPpk-WZ.mjs";
6
+ import { t as FormControlContext } from "./FormControlContext-CC2kToms.mjs";
7
+ import { useFormControl } from "./FormControl.mjs";
8
+ import { t as isRtl } from "./isRtl-BJDtm86G.mjs";
9
+ import { r as roundToPrecision } from "./precision-B1lhxnnO.mjs";
10
+ import { useContext, useId, useRef, useState } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ //#region src/Rating/utils/precision.ts
13
+ /** The value under the pointer: along the width, rounded to a step, between one step and `max`. */
14
+ function getHoverValue({ offset, width, max, precision }) {
15
+ const raw = max * (offset / width) + precision / 2;
16
+ return clamp(roundToPrecision(raw, precision), precision, max);
17
+ }
18
+ //#endregion
19
+ //#region src/Rating/hooks/useRating.ts
20
+ const NONE = -1;
21
+ const parseRating = (raw) => raw === "" ? null : Number.parseFloat(raw);
22
+ const getDisplayValue = (focus, rounded) => focus === NONE ? rounded : focus;
23
+ /**
24
+ * A rating's state: the rating itself (controlled or not, rounded to its precision), what the
25
+ * pointer and the focus are on, and the handlers that move them. The pointer takes priority over
26
+ * the keys when both change at once, and pressing the chosen item again clears it.
27
+ */
28
+ function useRating({ value: valueProp, defaultValue, precision, max, rootRef, onChange, onChangeActive }) {
29
+ const [value, setValue] = useControlled({
30
+ controlled: valueProp,
31
+ default: defaultValue ?? null
32
+ });
33
+ const rounded = roundToPrecision(value, precision);
34
+ const [{ hover, focus }, setActive] = useState({
35
+ hover: NONE,
36
+ focus: NONE
37
+ });
38
+ const handleMouseMove = (event) => {
39
+ const { left, right, width } = rootRef.current.getBoundingClientRect();
40
+ if (width === 0) return;
41
+ const next = getHoverValue({
42
+ offset: isRtl(rootRef.current) ? right - event.clientX : event.clientX - left,
43
+ width,
44
+ max,
45
+ precision
46
+ });
47
+ setActive({
48
+ hover: next,
49
+ focus: next
50
+ });
51
+ if (hover !== next) onChangeActive?.(event, next);
52
+ };
53
+ const handleMouseLeave = (event) => {
54
+ setActive({
55
+ hover: NONE,
56
+ focus: NONE
57
+ });
58
+ if (hover !== NONE) onChangeActive?.(event, NONE);
59
+ };
60
+ const handleChange = (event) => {
61
+ const next = hover === NONE ? parseRating(event.currentTarget.value) : hover;
62
+ setValue(next);
63
+ onChange?.(event, next);
64
+ };
65
+ const handleClear = (event) => {
66
+ if (event.clientX === 0 && event.clientY === 0) return;
67
+ setActive({
68
+ hover: NONE,
69
+ focus: NONE
70
+ });
71
+ setValue(null);
72
+ if (Number.parseFloat(event.currentTarget.value) === rounded) onChange?.(event, null);
73
+ };
74
+ const handleFocus = (event) => {
75
+ const next = Number.parseFloat(event.currentTarget.value);
76
+ setActive((previous) => ({
77
+ hover: previous.hover,
78
+ focus: next
79
+ }));
80
+ };
81
+ const handleBlur = () => {
82
+ if (hover !== NONE) return;
83
+ setActive((previous) => ({
84
+ hover: previous.hover,
85
+ focus: NONE
86
+ }));
87
+ };
88
+ return {
89
+ rounded,
90
+ displayValue: getDisplayValue(focus, rounded),
91
+ isActive: hover !== NONE || focus !== NONE,
92
+ handleMouseMove,
93
+ handleMouseLeave,
94
+ handleChange,
95
+ handleClear,
96
+ handleFocus,
97
+ handleBlur
98
+ };
99
+ }
100
+ //#endregion
101
+ //#region src/Rating/Rating.tsx
102
+ const visuallyHidden = {
103
+ position: "absolute",
104
+ width: 1,
105
+ height: 1,
106
+ margin: -1,
107
+ padding: 0,
108
+ border: 0,
109
+ overflow: "hidden",
110
+ clip: "rect(0 0 0 0)",
111
+ whiteSpace: "nowrap"
112
+ };
113
+ const RatingRoot = styled("span", {
114
+ name: "Rating",
115
+ label: "Rating",
116
+ shouldForwardProp: createShouldForwardProp([
117
+ ...props,
118
+ "size",
119
+ "color",
120
+ "isDisabled",
121
+ "isReadOnly",
122
+ "isInField"
123
+ ]),
124
+ systemProps: [src_exports.space]
125
+ })(({ theme, size, isDisabled, isReadOnly, isInField }) => ({
126
+ display: isInField ? "flex" : "inline-flex",
127
+ position: "relative",
128
+ width: "min-content",
129
+ fontSize: theme.icon[size],
130
+ lineHeight: 1,
131
+ cursor: isReadOnly ? "default" : "pointer",
132
+ ...isDisabled && {
133
+ opacity: .5,
134
+ cursor: "not-allowed"
135
+ },
136
+ ...(isDisabled || isReadOnly) && { pointerEvents: "none" }
137
+ }));
138
+ const focusRing = (theme, color) => {
139
+ const main = (0, src_exports.get)(theme, `palette.${color}.main`);
140
+ return {
141
+ outline: `${theme.borderWidths.base} solid ${main}`,
142
+ outlineOffset: theme.borderWidths.thin
143
+ };
144
+ };
145
+ const RatingItem = styled("label", {
146
+ name: "Rating",
147
+ slot: "item",
148
+ label: "RatingItem",
149
+ shouldForwardProp: createShouldForwardProp(["color"])
150
+ })(({ theme, color }) => ({
151
+ display: "block",
152
+ position: "relative",
153
+ cursor: "inherit",
154
+ "&:has(input:focus-visible)": focusRing(theme, color)
155
+ }));
156
+ const RatingEmptyLabel = styled("label", {
157
+ name: "Rating",
158
+ slot: "emptyLabel",
159
+ label: "RatingEmptyLabel",
160
+ shouldForwardProp: createShouldForwardProp(["color"])
161
+ })(({ theme, color }) => ({
162
+ position: "absolute",
163
+ inset: 0,
164
+ pointerEvents: "none",
165
+ "&:has(input:focus-visible)": focusRing(theme, color)
166
+ }));
167
+ const RatingInput = styled("input", {
168
+ name: "Rating",
169
+ slot: "input",
170
+ label: "RatingInput"
171
+ })(visuallyHidden);
172
+ const RatingText = styled("span", {
173
+ name: "Rating",
174
+ slot: "text",
175
+ label: "RatingText"
176
+ })(visuallyHidden);
177
+ const getIconColor = (theme, { color, isFilled, isError }) => {
178
+ if (isFilled) return (0, src_exports.get)(theme, `palette.${color}.main`);
179
+ if (isError) return (0, src_exports.get)(theme, "palette.error.main");
180
+ return (0, src_exports.get)(theme, "text.disabled");
181
+ };
182
+ const activeTransform = (isActive) => isActive ? "scale(1.2)" : "none";
183
+ const RatingIcon = styled("span", {
184
+ name: "Rating",
185
+ slot: "icon",
186
+ label: "RatingIcon",
187
+ shouldForwardProp: createShouldForwardProp([
188
+ "color",
189
+ "isFilled",
190
+ "isActive",
191
+ "isError"
192
+ ])
193
+ })(({ theme, ...style }) => ({
194
+ display: "flex",
195
+ flexShrink: 0,
196
+ width: "max-content",
197
+ pointerEvents: "none",
198
+ color: getIconColor(theme, style),
199
+ transition: "transform 0.2s",
200
+ transform: activeTransform(style.isActive),
201
+ "@media (prefers-reduced-motion: reduce)": { transition: "none" }
202
+ }));
203
+ const RatingDecimal = styled("span", {
204
+ name: "Rating",
205
+ slot: "decimal",
206
+ label: "RatingDecimal",
207
+ shouldForwardProp: createShouldForwardProp(["isActive"])
208
+ })(({ isActive }) => ({
209
+ position: "relative",
210
+ display: "flex",
211
+ transition: "transform 0.2s",
212
+ transform: activeTransform(isActive),
213
+ "@media (prefers-reduced-motion: reduce)": { transition: "none" }
214
+ }));
215
+ function Item({ itemValue, isFilled, isActive, isChecked, isInteractive, label, labelStyle, icon, emptyIcon, name, required, disabled, color, isError, state }) {
216
+ const glyph = /* @__PURE__ */ jsx(RatingIcon, {
217
+ color,
218
+ isFilled,
219
+ isActive,
220
+ isError,
221
+ children: isFilled ? icon : emptyIcon
222
+ });
223
+ if (!isInteractive) return /* @__PURE__ */ jsx(RatingItem, {
224
+ as: "span",
225
+ color,
226
+ style: labelStyle,
227
+ children: glyph
228
+ });
229
+ return /* @__PURE__ */ jsxs(RatingItem, {
230
+ color,
231
+ style: labelStyle,
232
+ children: [
233
+ glyph,
234
+ /* @__PURE__ */ jsx(RatingText, { children: label }),
235
+ /* @__PURE__ */ jsx(RatingInput, {
236
+ type: "radio",
237
+ name,
238
+ value: itemValue,
239
+ checked: isChecked,
240
+ required,
241
+ disabled,
242
+ onChange: state.handleChange,
243
+ onClick: state.handleClear,
244
+ onFocus: state.handleFocus,
245
+ onBlur: state.handleBlur
246
+ })
247
+ ]
248
+ });
249
+ }
250
+ /**
251
+ * @description A rating: a row of icons the user sets - or, `readOnly`, shows. A group of visually
252
+ * hidden native radio inputs, so keys (Tab to the rating, the arrows to change it), assistive
253
+ * technology and forms work as the platform's; hovering previews the value, and pressing the
254
+ * chosen item clears it. In a `FormControl` it takes the field's size, color, error and
255
+ * disabled state, and its `FormLabel` names it.
256
+ */
257
+ function Rating({ value, defaultValue, onChange, onChangeActive, max: maxProp, precision: precisionProp, highlightSelectedOnly: highlightSelectedOnlyProp, icon: iconProp, emptyIcon: emptyIconProp, getLabelText = String, emptyLabelText, readOnly = false, size: sizeProp, color: colorProp, disabled: disabledProp, required: requiredProp, error: errorProp, name: nameProp, id: idProp, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, "aria-describedby": ariaDescribedby, "data-testid": dataTestid, ...spaceProps }) {
258
+ const dp = useDefaultProps("Rating");
259
+ const isInField = useContext(FormControlContext) !== null;
260
+ const fc = useFormControl({
261
+ id: idProp,
262
+ error: errorProp,
263
+ disabled: disabledProp,
264
+ required: requiredProp,
265
+ size: sizeProp ?? dp.size,
266
+ color: colorProp ?? dp.color
267
+ });
268
+ const color = fc.color ?? "warning";
269
+ const max = maxProp ?? dp.max ?? 5;
270
+ const precision = precisionProp ?? dp.precision ?? 1;
271
+ const highlightSelectedOnly = highlightSelectedOnlyProp ?? dp.highlightSelectedOnly ?? false;
272
+ const icon = iconProp ?? /* @__PURE__ */ jsx(Icon, {
273
+ name: "star",
274
+ size: "1em",
275
+ color: "inherit"
276
+ });
277
+ const emptyIcon = emptyIconProp ?? /* @__PURE__ */ jsx(Icon, {
278
+ name: "star_border",
279
+ size: "1em",
280
+ color: "inherit"
281
+ });
282
+ const generatedName = useId();
283
+ const name = nameProp ?? generatedName;
284
+ const isInput = !readOnly;
285
+ const rootRef = useRef(null);
286
+ const state = useRating({
287
+ value,
288
+ defaultValue,
289
+ precision,
290
+ max,
291
+ rootRef,
292
+ onChange,
293
+ onChangeActive
294
+ });
295
+ const shown = state.displayValue ?? 0;
296
+ const renderItem = (itemValue, labelStyle, isActive = false) => /* @__PURE__ */ jsx(Item, {
297
+ itemValue,
298
+ isFilled: highlightSelectedOnly ? itemValue === shown : itemValue <= shown,
299
+ isActive,
300
+ isChecked: itemValue === state.rounded,
301
+ isInteractive: isInput,
302
+ label: getLabelText(itemValue),
303
+ labelStyle,
304
+ icon,
305
+ emptyIcon,
306
+ name,
307
+ required: fc.required,
308
+ disabled: fc.disabled,
309
+ color,
310
+ isError: fc.error,
311
+ state
312
+ }, itemValue);
313
+ const items = Array.from({ length: max }, (_, index) => {
314
+ const itemValue = index + 1;
315
+ const isActive = state.isActive && itemValue === Math.ceil(shown);
316
+ if (precision >= 1) return renderItem(itemValue, void 0, isActive);
317
+ const steps = Math.round(1 / precision);
318
+ return /* @__PURE__ */ jsx(RatingDecimal, {
319
+ isActive,
320
+ children: Array.from({ length: steps }, (__, step) => {
321
+ const stepValue = roundToPrecision(itemValue - 1 + (step + 1) * precision, precision);
322
+ const isLast = step === steps - 1;
323
+ const width = stepValue === state.displayValue ? `${(step + 1) * precision * 100}%` : "0%";
324
+ return renderItem(stepValue, isLast ? void 0 : {
325
+ width,
326
+ overflow: "hidden",
327
+ position: "absolute"
328
+ });
329
+ })
330
+ }, itemValue);
331
+ });
332
+ const displayLabel = isInput ? void 0 : getLabelText(state.rounded ?? 0);
333
+ const groupProps = isInput ? {
334
+ role: "radiogroup",
335
+ "aria-labelledby": ariaLabelledby ?? fc.labelId,
336
+ "aria-describedby": ariaDescribedby ?? fc["aria-describedby"],
337
+ "aria-required": fc.required || void 0,
338
+ "aria-invalid": fc.error || void 0,
339
+ onMouseMove: state.handleMouseMove,
340
+ onMouseLeave: state.handleMouseLeave
341
+ } : {
342
+ role: "img",
343
+ "aria-labelledby": ariaLabelledby
344
+ };
345
+ return /* @__PURE__ */ jsxs(RatingRoot, {
346
+ ref: rootRef,
347
+ id: fc.id,
348
+ size: fc.size,
349
+ color,
350
+ isDisabled: fc.disabled,
351
+ isReadOnly: readOnly,
352
+ isInField,
353
+ className,
354
+ "data-testid": dataTestid,
355
+ "aria-label": ariaLabel ?? displayLabel,
356
+ ...groupProps,
357
+ ...spaceProps,
358
+ children: [items, isInput && !fc.disabled && emptyLabelText !== void 0 && /* @__PURE__ */ jsxs(RatingEmptyLabel, {
359
+ color,
360
+ children: [/* @__PURE__ */ jsx(RatingInput, {
361
+ type: "radio",
362
+ name,
363
+ value: "",
364
+ checked: state.rounded === null,
365
+ onChange: state.handleChange
366
+ }), /* @__PURE__ */ jsx(RatingText, { children: emptyLabelText })]
367
+ })]
368
+ });
369
+ }
370
+ //#endregion
371
+ export { Rating };
@@ -0,0 +1,268 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_src = require("./src-DU81aGy9.cjs");
3
+ const require_theme = require("./theme-DzfwuzMZ.cjs");
4
+ const require_useMergedRefs = require("./useMergedRefs-2zTDXgPO.cjs");
5
+ let react = require("react");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ let _soroush_tech_styled_system_should_forward_prop = require("@soroush.tech/styled-system/should-forward-prop");
8
+ /**
9
+ * The thumb for a box scrolled to `offset`, or `null` when nothing overflows. Its size is the
10
+ * share of the content in view, never under `MIN_THUMB_PX`; it travels the rest of the track as
11
+ * the box travels its scroll range, so the thumb end meets the track end at the end.
12
+ */
13
+ const getThumb = ({ offset, content, view }) => {
14
+ const range = content - view;
15
+ if (range <= 0 || view <= 0) return null;
16
+ const size = Math.min(100, Math.max(view / content, 24 / view) * 100);
17
+ return {
18
+ start: Math.min(1, Math.max(0, offset / range)) * (100 - size),
19
+ size
20
+ };
21
+ };
22
+ /**
23
+ * The scroll offset a thumb dragged `by` pixels from `from` asks for: the drag covers the thumb
24
+ * travel, which maps onto the whole scroll range of the box.
25
+ */
26
+ const getScrollForDrag = (from, by, metrics) => {
27
+ const thumb = getThumb(metrics);
28
+ if (thumb === null) return from;
29
+ const travel = metrics.view * (1 - thumb.size / 100);
30
+ const range = metrics.content - metrics.view;
31
+ return Math.min(range, Math.max(0, from + by * range / travel));
32
+ };
33
+ //#endregion
34
+ //#region src/ScrollArea/hooks/useScrollThumb.ts
35
+ const getMetrics = (box, axis) => axis === "y" ? {
36
+ offset: box.scrollTop,
37
+ content: box.scrollHeight,
38
+ view: box.clientHeight
39
+ } : {
40
+ offset: box.scrollLeft,
41
+ content: box.scrollWidth,
42
+ view: box.clientWidth
43
+ };
44
+ const scrollTo = (box, axis, offset) => {
45
+ if (axis === "y") box.scrollTop = offset;
46
+ else box.scrollLeft = offset;
47
+ };
48
+ /**
49
+ * Follows the box `ref` holds along `axis`: its thumb is measured again when it scrolls and when
50
+ * it or its content changes size. A press on the thumb drags it, with the pointer captured so the
51
+ * drag goes on wherever the pointer goes; a press on the track pages toward it, as a native track.
52
+ */
53
+ function useScrollThumb(ref, axis) {
54
+ const [thumb, setThumb] = (0, react.useState)(null);
55
+ const [isDragging, setIsDragging] = (0, react.useState)(false);
56
+ (0, react.useEffect)(() => {
57
+ const box = ref.current;
58
+ const measure = () => setThumb(getThumb(getMetrics(box, axis)));
59
+ measure();
60
+ box.addEventListener("scroll", measure, { passive: true });
61
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
62
+ observer?.observe(box);
63
+ for (const child of box.children) observer?.observe(child);
64
+ return () => {
65
+ box.removeEventListener("scroll", measure);
66
+ observer?.disconnect();
67
+ };
68
+ }, [ref, axis]);
69
+ const stopDrag = (0, react.useRef)(null);
70
+ (0, react.useEffect)(() => () => stopDrag.current?.(), []);
71
+ const startDrag = (event, box) => {
72
+ const target = event.currentTarget;
73
+ const origin = axis === "y" ? event.clientY : event.clientX;
74
+ const from = getMetrics(box, axis).offset;
75
+ const handleMove = (moved) => {
76
+ const by = (axis === "y" ? moved.clientY : moved.clientX) - origin;
77
+ scrollTo(box, axis, getScrollForDrag(from, by, getMetrics(box, axis)));
78
+ };
79
+ const end = () => {
80
+ target.removeEventListener("pointermove", handleMove);
81
+ target.removeEventListener("pointerup", end);
82
+ target.removeEventListener("pointercancel", end);
83
+ stopDrag.current = null;
84
+ setIsDragging(false);
85
+ };
86
+ target.setPointerCapture(event.pointerId);
87
+ target.addEventListener("pointermove", handleMove);
88
+ target.addEventListener("pointerup", end);
89
+ target.addEventListener("pointercancel", end);
90
+ stopDrag.current = end;
91
+ setIsDragging(true);
92
+ };
93
+ const onTrackPointerDown = (event) => {
94
+ const box = ref.current;
95
+ if (thumb === null || event.button !== 0) return;
96
+ event.preventDefault();
97
+ const track = event.currentTarget.getBoundingClientRect();
98
+ const at = axis === "y" ? (event.clientY - track.top) / track.height * 100 : (event.clientX - track.left) / track.width * 100;
99
+ if (at >= thumb.start && at <= thumb.start + thumb.size) {
100
+ startDrag(event, box);
101
+ return;
102
+ }
103
+ const page = getMetrics(box, axis).view * (at < thumb.start ? -1 : 1);
104
+ box.scrollBy(axis === "y" ? { top: page } : { left: page });
105
+ };
106
+ return {
107
+ thumb,
108
+ onTrackPointerDown,
109
+ isDragging
110
+ };
111
+ }
112
+ //#endregion
113
+ //#region src/ScrollArea/ScrollArea.tsx
114
+ const layoutSystem = (0, require_src.src_exports.system)({
115
+ width: true,
116
+ minWidth: true,
117
+ maxWidth: true,
118
+ height: true,
119
+ minHeight: true,
120
+ maxHeight: true
121
+ });
122
+ const ScrollAreaRoot = require_src.styled("div", {
123
+ name: "ScrollArea",
124
+ label: "ScrollArea",
125
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([..._soroush_tech_styled_system_should_forward_prop.props]),
126
+ systemProps: [require_src.src_exports.space, layoutSystem]
127
+ })({
128
+ position: "relative",
129
+ display: "flex",
130
+ flex: "1 1 auto",
131
+ minWidth: 0,
132
+ minHeight: 0,
133
+ "&:hover > [data-scroll-track] > [data-scroll-thumb], &:focus-within > [data-scroll-track] > [data-scroll-thumb]": { opacity: 1 }
134
+ });
135
+ const ScrollAreaViewport = require_src.styled("div", {
136
+ name: "ScrollArea",
137
+ slot: "viewport",
138
+ label: "ScrollAreaViewport",
139
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)(["axes"])
140
+ })(({ axes }) => ({
141
+ flex: 1,
142
+ minWidth: 0,
143
+ minHeight: 0,
144
+ overflowX: axes === "y" ? "hidden" : "auto",
145
+ overflowY: axes === "x" ? "hidden" : "auto",
146
+ overscrollBehaviorX: axes === "y" ? "auto" : "none",
147
+ overscrollBehaviorY: axes === "x" ? "auto" : "none",
148
+ scrollbarWidth: "none",
149
+ "&::-webkit-scrollbar": { display: "none" }
150
+ }));
151
+ const ScrollAreaTrack = require_src.styled("div", {
152
+ name: "ScrollArea",
153
+ slot: "track",
154
+ label: "ScrollAreaTrack",
155
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)(["isDragging", "axis"])
156
+ })(({ theme, isDragging, axis }) => {
157
+ const line = `${theme.borderWidths.thin} solid ${isDragging ? (0, require_src.src_exports.get)(theme, "border.default") : "transparent"}`;
158
+ return {
159
+ position: "absolute",
160
+ ...axis === "y" ? {
161
+ top: 0,
162
+ right: 0,
163
+ bottom: 0,
164
+ width: theme.space[1.25],
165
+ borderLeft: line
166
+ } : {
167
+ left: 0,
168
+ right: 0,
169
+ bottom: 0,
170
+ height: theme.space[1.25],
171
+ borderTop: line
172
+ },
173
+ backgroundColor: isDragging ? (0, require_src.src_exports.get)(theme, "background.scrollbarTrack") : "transparent",
174
+ "&:hover": {
175
+ borderColor: (0, require_src.src_exports.get)(theme, "border.default"),
176
+ backgroundColor: (0, require_src.src_exports.get)(theme, "background.scrollbarTrack")
177
+ }
178
+ };
179
+ });
180
+ const ScrollAreaThumb = require_src.styled("div", {
181
+ name: "ScrollArea",
182
+ slot: "thumb",
183
+ label: "ScrollAreaThumb",
184
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)(["isShown", "axis"])
185
+ })(({ theme, isShown, axis }) => {
186
+ const inset = `calc((${theme.space[1.25]} - ${theme.space[.75]}) / 2 - ${theme.borderWidths.thin})`;
187
+ return {
188
+ position: "absolute",
189
+ ...axis === "y" ? {
190
+ left: inset,
191
+ width: theme.space[.75]
192
+ } : {
193
+ top: inset,
194
+ height: theme.space[.75]
195
+ },
196
+ borderRadius: "9999px",
197
+ backgroundColor: (0, require_src.src_exports.get)(theme, "background.scrollbar"),
198
+ opacity: isShown ? 1 : 0,
199
+ transition: `opacity ${theme.transitions.duration.short}ms`,
200
+ "@media (prefers-reduced-motion: reduce)": { transition: "none" }
201
+ };
202
+ });
203
+ function ScrollBar({ box, axis }) {
204
+ const { thumb, onTrackPointerDown, isDragging } = useScrollThumb(box, axis);
205
+ if (thumb === null) return null;
206
+ const place = axis === "y" ? {
207
+ top: `${thumb.start}%`,
208
+ height: `${thumb.size}%`
209
+ } : {
210
+ left: `${thumb.start}%`,
211
+ width: `${thumb.size}%`
212
+ };
213
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaTrack, {
214
+ "aria-hidden": true,
215
+ "data-scroll-track": axis,
216
+ axis,
217
+ isDragging,
218
+ onPointerDown: onTrackPointerDown,
219
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaThumb, {
220
+ "data-scroll-thumb": true,
221
+ axis,
222
+ isShown: isDragging,
223
+ style: place
224
+ })
225
+ });
226
+ }
227
+ /**
228
+ * @description A scrolling area whose scrollbars are drawn over its content rather than beside
229
+ * it - so a rounded panel keeps its corner clean - and show only while the pointer is over it or
230
+ * focus is inside. Scrolling itself stays native: the wheel, the keyboard and touch work as they
231
+ * do anywhere. Each axis that overflows gets a track, down the right edge or along the bottom,
232
+ * whose thumb drags and whose track pages. It grows to its content and no further than its
233
+ * container, or `maxHeight`, allows. Colors come from `theme.background.scrollbar` and
234
+ * `scrollbarTrack`, its size from `theme.space`.
235
+ */
236
+ function ScrollArea({ children, axes: axesProp, viewportRef, tabIndex, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, className, "data-testid": dataTestid, ...rest }) {
237
+ const dp = require_theme.useDefaultProps("ScrollArea");
238
+ const axes = axesProp ?? dp.axes ?? "y";
239
+ const box = (0, react.useRef)(null);
240
+ const mergedRef = require_useMergedRefs.useMergedRefs(box, viewportRef);
241
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ScrollAreaRoot, {
242
+ className,
243
+ "data-testid": dataTestid,
244
+ ...rest,
245
+ children: [
246
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaViewport, {
247
+ ref: mergedRef,
248
+ axes,
249
+ "data-scroll-viewport": true,
250
+ tabIndex,
251
+ role: ariaLabel || ariaLabelledby ? "region" : void 0,
252
+ "aria-label": ariaLabel,
253
+ "aria-labelledby": ariaLabelledby,
254
+ children
255
+ }),
256
+ axes !== "x" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollBar, {
257
+ box,
258
+ axis: "y"
259
+ }),
260
+ axes !== "y" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollBar, {
261
+ box,
262
+ axis: "x"
263
+ })
264
+ ]
265
+ });
266
+ }
267
+ //#endregion
268
+ exports.ScrollArea = ScrollArea;
@@ -0,0 +1,40 @@
1
+ import { nt as Theme } from "./index-XN4-ZqTB.cjs";
2
+ import { ReactNode, Ref } from "react";
3
+ import { LayoutProps, SpaceProps } from "@soroush.tech/styled-system";
4
+ //#region src/ScrollArea/hooks/useScrollThumb.d.ts
5
+ /** Which way a thumb runs: down the right edge, or along the bottom. */
6
+ type ScrollAxis = 'y' | 'x';
7
+ //#endregion
8
+ //#region src/ScrollArea/ScrollArea.d.ts
9
+ /** Which ways it scrolls. */
10
+ type ScrollAxes = ScrollAxis | 'both';
11
+ interface ScrollAreaProps extends SpaceProps<Theme>, Pick<LayoutProps<Theme>, 'width' | 'minWidth' | 'maxWidth' | 'height' | 'minHeight' | 'maxHeight'> {
12
+ /** What scrolls. */
13
+ children: ReactNode;
14
+ /** Which ways it scrolls. Default: `'y'`. */
15
+ axes?: ScrollAxes;
16
+ /** The scrolling element - for code that reads or sets its scroll. */
17
+ viewportRef?: Ref<HTMLDivElement>;
18
+ /**
19
+ * `0` puts the scrolling box in the tab order, so the keys scroll it - for content with nothing
20
+ * focusable in it. Default: none.
21
+ */
22
+ tabIndex?: 0;
23
+ /** Names the scrolling box, as a `region`. */
24
+ 'aria-label'?: string;
25
+ 'aria-labelledby'?: string;
26
+ className?: string;
27
+ 'data-testid'?: string;
28
+ }
29
+ /**
30
+ * @description A scrolling area whose scrollbars are drawn over its content rather than beside
31
+ * it - so a rounded panel keeps its corner clean - and show only while the pointer is over it or
32
+ * focus is inside. Scrolling itself stays native: the wheel, the keyboard and touch work as they
33
+ * do anywhere. Each axis that overflows gets a track, down the right edge or along the bottom,
34
+ * whose thumb drags and whose track pages. It grows to its content and no further than its
35
+ * container, or `maxHeight`, allows. Colors come from `theme.background.scrollbar` and
36
+ * `scrollbarTrack`, its size from `theme.space`.
37
+ */
38
+ declare function ScrollArea({ children, axes: axesProp, viewportRef, tabIndex, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, className, 'data-testid': dataTestid, ...rest }: Readonly<ScrollAreaProps>): import("react").JSX.Element;
39
+ //#endregion
40
+ export { ScrollArea, ScrollAreaProps, ScrollAxes };