@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
package/dist/Rating.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_src = require("./src-DU81aGy9.cjs");
3
3
  const require_utils = require("./utils.cjs");
4
- const require_theme = require("./theme-BxXuXRgQ.cjs");
5
- const require_Icon = require("./Icon-D-EWsBVg.cjs");
4
+ const require_theme = require("./theme-DzfwuzMZ.cjs");
5
+ const require_useControlled = require("./useControlled-C666KpQ0.cjs");
6
+ const require_Icon = require("./Icon-BE7bRsqR.cjs");
6
7
  const require_FormControlContext = require("./FormControlContext-74gvPGFk.cjs");
7
8
  const require_FormControl = require("./FormControl.cjs");
8
9
  const require_isRtl = require("./isRtl-DTkYHRPo.cjs");
9
- const require_useControlled = require("./useControlled-C666KpQ0.cjs");
10
10
  const require_precision = require("./precision-B58cTPB2.cjs");
11
11
  let react = require("react");
12
12
  let react_jsx_runtime = require("react/jsx-runtime");
package/dist/Rating.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { W as Theme } from "./index-DJ0f69wh.cjs";
1
+ import { nt as Theme } from "./index-XN4-ZqTB.cjs";
2
2
  import { MouseEvent, ReactNode, SyntheticEvent } from "react";
3
3
  import { SpaceProps } from "@soroush.tech/styled-system";
4
4
  //#region src/Rating/Rating.d.ts
package/dist/Rating.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { W as Theme } from "./index-CJhK7JND.mjs";
1
+ import { nt as Theme } from "./index-CRQ7XLri.mjs";
2
2
  import { SpaceProps } from "@soroush.tech/styled-system";
3
3
  import { MouseEvent, ReactNode, SyntheticEvent } from "react";
4
4
  //#region src/Rating/Rating.d.ts
package/dist/Rating.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  import { a as src_exports, i as props, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
2
2
  import { clamp } from "./utils.mjs";
3
- import { n as useDefaultProps } from "./theme-Z9_QludW.mjs";
4
- import { t as Icon } from "./Icon-BihOAP4u.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";
5
6
  import { t as FormControlContext } from "./FormControlContext-CC2kToms.mjs";
6
7
  import { useFormControl } from "./FormControl.mjs";
7
8
  import { t as isRtl } from "./isRtl-BJDtm86G.mjs";
8
- import { t as useControlled } from "./useControlled-CBRLsO-H.mjs";
9
9
  import { r as roundToPrecision } from "./precision-B1lhxnnO.mjs";
10
10
  import { useContext, useId, useRef, useState } from "react";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -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 };
@@ -0,0 +1,40 @@
1
+ import { nt as Theme } from "./index-CRQ7XLri.mjs";
2
+ import { LayoutProps, SpaceProps } from "@soroush.tech/styled-system";
3
+ import { ReactNode, Ref } from "react";
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 };
@@ -0,0 +1,266 @@
1
+ import { a as src_exports, i as props, o as styled, t as createShouldForwardProp } from "./src-DLGYOJMh.mjs";
2
+ import { n as useDefaultProps } from "./theme-oBfFhJm9.mjs";
3
+ import { t as useMergedRefs } from "./useMergedRefs-BfBckwRY.mjs";
4
+ import { useEffect, useRef, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ /**
7
+ * The thumb for a box scrolled to `offset`, or `null` when nothing overflows. Its size is the
8
+ * share of the content in view, never under `MIN_THUMB_PX`; it travels the rest of the track as
9
+ * the box travels its scroll range, so the thumb end meets the track end at the end.
10
+ */
11
+ const getThumb = ({ offset, content, view }) => {
12
+ const range = content - view;
13
+ if (range <= 0 || view <= 0) return null;
14
+ const size = Math.min(100, Math.max(view / content, 24 / view) * 100);
15
+ return {
16
+ start: Math.min(1, Math.max(0, offset / range)) * (100 - size),
17
+ size
18
+ };
19
+ };
20
+ /**
21
+ * The scroll offset a thumb dragged `by` pixels from `from` asks for: the drag covers the thumb
22
+ * travel, which maps onto the whole scroll range of the box.
23
+ */
24
+ const getScrollForDrag = (from, by, metrics) => {
25
+ const thumb = getThumb(metrics);
26
+ if (thumb === null) return from;
27
+ const travel = metrics.view * (1 - thumb.size / 100);
28
+ const range = metrics.content - metrics.view;
29
+ return Math.min(range, Math.max(0, from + by * range / travel));
30
+ };
31
+ //#endregion
32
+ //#region src/ScrollArea/hooks/useScrollThumb.ts
33
+ const getMetrics = (box, axis) => axis === "y" ? {
34
+ offset: box.scrollTop,
35
+ content: box.scrollHeight,
36
+ view: box.clientHeight
37
+ } : {
38
+ offset: box.scrollLeft,
39
+ content: box.scrollWidth,
40
+ view: box.clientWidth
41
+ };
42
+ const scrollTo = (box, axis, offset) => {
43
+ if (axis === "y") box.scrollTop = offset;
44
+ else box.scrollLeft = offset;
45
+ };
46
+ /**
47
+ * Follows the box `ref` holds along `axis`: its thumb is measured again when it scrolls and when
48
+ * it or its content changes size. A press on the thumb drags it, with the pointer captured so the
49
+ * drag goes on wherever the pointer goes; a press on the track pages toward it, as a native track.
50
+ */
51
+ function useScrollThumb(ref, axis) {
52
+ const [thumb, setThumb] = useState(null);
53
+ const [isDragging, setIsDragging] = useState(false);
54
+ useEffect(() => {
55
+ const box = ref.current;
56
+ const measure = () => setThumb(getThumb(getMetrics(box, axis)));
57
+ measure();
58
+ box.addEventListener("scroll", measure, { passive: true });
59
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
60
+ observer?.observe(box);
61
+ for (const child of box.children) observer?.observe(child);
62
+ return () => {
63
+ box.removeEventListener("scroll", measure);
64
+ observer?.disconnect();
65
+ };
66
+ }, [ref, axis]);
67
+ const stopDrag = useRef(null);
68
+ useEffect(() => () => stopDrag.current?.(), []);
69
+ const startDrag = (event, box) => {
70
+ const target = event.currentTarget;
71
+ const origin = axis === "y" ? event.clientY : event.clientX;
72
+ const from = getMetrics(box, axis).offset;
73
+ const handleMove = (moved) => {
74
+ const by = (axis === "y" ? moved.clientY : moved.clientX) - origin;
75
+ scrollTo(box, axis, getScrollForDrag(from, by, getMetrics(box, axis)));
76
+ };
77
+ const end = () => {
78
+ target.removeEventListener("pointermove", handleMove);
79
+ target.removeEventListener("pointerup", end);
80
+ target.removeEventListener("pointercancel", end);
81
+ stopDrag.current = null;
82
+ setIsDragging(false);
83
+ };
84
+ target.setPointerCapture(event.pointerId);
85
+ target.addEventListener("pointermove", handleMove);
86
+ target.addEventListener("pointerup", end);
87
+ target.addEventListener("pointercancel", end);
88
+ stopDrag.current = end;
89
+ setIsDragging(true);
90
+ };
91
+ const onTrackPointerDown = (event) => {
92
+ const box = ref.current;
93
+ if (thumb === null || event.button !== 0) return;
94
+ event.preventDefault();
95
+ const track = event.currentTarget.getBoundingClientRect();
96
+ const at = axis === "y" ? (event.clientY - track.top) / track.height * 100 : (event.clientX - track.left) / track.width * 100;
97
+ if (at >= thumb.start && at <= thumb.start + thumb.size) {
98
+ startDrag(event, box);
99
+ return;
100
+ }
101
+ const page = getMetrics(box, axis).view * (at < thumb.start ? -1 : 1);
102
+ box.scrollBy(axis === "y" ? { top: page } : { left: page });
103
+ };
104
+ return {
105
+ thumb,
106
+ onTrackPointerDown,
107
+ isDragging
108
+ };
109
+ }
110
+ //#endregion
111
+ //#region src/ScrollArea/ScrollArea.tsx
112
+ const layoutSystem = (0, src_exports.system)({
113
+ width: true,
114
+ minWidth: true,
115
+ maxWidth: true,
116
+ height: true,
117
+ minHeight: true,
118
+ maxHeight: true
119
+ });
120
+ const ScrollAreaRoot = styled("div", {
121
+ name: "ScrollArea",
122
+ label: "ScrollArea",
123
+ shouldForwardProp: createShouldForwardProp([...props]),
124
+ systemProps: [src_exports.space, layoutSystem]
125
+ })({
126
+ position: "relative",
127
+ display: "flex",
128
+ flex: "1 1 auto",
129
+ minWidth: 0,
130
+ minHeight: 0,
131
+ "&:hover > [data-scroll-track] > [data-scroll-thumb], &:focus-within > [data-scroll-track] > [data-scroll-thumb]": { opacity: 1 }
132
+ });
133
+ const ScrollAreaViewport = styled("div", {
134
+ name: "ScrollArea",
135
+ slot: "viewport",
136
+ label: "ScrollAreaViewport",
137
+ shouldForwardProp: createShouldForwardProp(["axes"])
138
+ })(({ axes }) => ({
139
+ flex: 1,
140
+ minWidth: 0,
141
+ minHeight: 0,
142
+ overflowX: axes === "y" ? "hidden" : "auto",
143
+ overflowY: axes === "x" ? "hidden" : "auto",
144
+ overscrollBehaviorX: axes === "y" ? "auto" : "none",
145
+ overscrollBehaviorY: axes === "x" ? "auto" : "none",
146
+ scrollbarWidth: "none",
147
+ "&::-webkit-scrollbar": { display: "none" }
148
+ }));
149
+ const ScrollAreaTrack = styled("div", {
150
+ name: "ScrollArea",
151
+ slot: "track",
152
+ label: "ScrollAreaTrack",
153
+ shouldForwardProp: createShouldForwardProp(["isDragging", "axis"])
154
+ })(({ theme, isDragging, axis }) => {
155
+ const line = `${theme.borderWidths.thin} solid ${isDragging ? (0, src_exports.get)(theme, "border.default") : "transparent"}`;
156
+ return {
157
+ position: "absolute",
158
+ ...axis === "y" ? {
159
+ top: 0,
160
+ right: 0,
161
+ bottom: 0,
162
+ width: theme.space[1.25],
163
+ borderLeft: line
164
+ } : {
165
+ left: 0,
166
+ right: 0,
167
+ bottom: 0,
168
+ height: theme.space[1.25],
169
+ borderTop: line
170
+ },
171
+ backgroundColor: isDragging ? (0, src_exports.get)(theme, "background.scrollbarTrack") : "transparent",
172
+ "&:hover": {
173
+ borderColor: (0, src_exports.get)(theme, "border.default"),
174
+ backgroundColor: (0, src_exports.get)(theme, "background.scrollbarTrack")
175
+ }
176
+ };
177
+ });
178
+ const ScrollAreaThumb = styled("div", {
179
+ name: "ScrollArea",
180
+ slot: "thumb",
181
+ label: "ScrollAreaThumb",
182
+ shouldForwardProp: createShouldForwardProp(["isShown", "axis"])
183
+ })(({ theme, isShown, axis }) => {
184
+ const inset = `calc((${theme.space[1.25]} - ${theme.space[.75]}) / 2 - ${theme.borderWidths.thin})`;
185
+ return {
186
+ position: "absolute",
187
+ ...axis === "y" ? {
188
+ left: inset,
189
+ width: theme.space[.75]
190
+ } : {
191
+ top: inset,
192
+ height: theme.space[.75]
193
+ },
194
+ borderRadius: "9999px",
195
+ backgroundColor: (0, src_exports.get)(theme, "background.scrollbar"),
196
+ opacity: isShown ? 1 : 0,
197
+ transition: `opacity ${theme.transitions.duration.short}ms`,
198
+ "@media (prefers-reduced-motion: reduce)": { transition: "none" }
199
+ };
200
+ });
201
+ function ScrollBar({ box, axis }) {
202
+ const { thumb, onTrackPointerDown, isDragging } = useScrollThumb(box, axis);
203
+ if (thumb === null) return null;
204
+ const place = axis === "y" ? {
205
+ top: `${thumb.start}%`,
206
+ height: `${thumb.size}%`
207
+ } : {
208
+ left: `${thumb.start}%`,
209
+ width: `${thumb.size}%`
210
+ };
211
+ return /* @__PURE__ */ jsx(ScrollAreaTrack, {
212
+ "aria-hidden": true,
213
+ "data-scroll-track": axis,
214
+ axis,
215
+ isDragging,
216
+ onPointerDown: onTrackPointerDown,
217
+ children: /* @__PURE__ */ jsx(ScrollAreaThumb, {
218
+ "data-scroll-thumb": true,
219
+ axis,
220
+ isShown: isDragging,
221
+ style: place
222
+ })
223
+ });
224
+ }
225
+ /**
226
+ * @description A scrolling area whose scrollbars are drawn over its content rather than beside
227
+ * it - so a rounded panel keeps its corner clean - and show only while the pointer is over it or
228
+ * focus is inside. Scrolling itself stays native: the wheel, the keyboard and touch work as they
229
+ * do anywhere. Each axis that overflows gets a track, down the right edge or along the bottom,
230
+ * whose thumb drags and whose track pages. It grows to its content and no further than its
231
+ * container, or `maxHeight`, allows. Colors come from `theme.background.scrollbar` and
232
+ * `scrollbarTrack`, its size from `theme.space`.
233
+ */
234
+ function ScrollArea({ children, axes: axesProp, viewportRef, tabIndex, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, className, "data-testid": dataTestid, ...rest }) {
235
+ const dp = useDefaultProps("ScrollArea");
236
+ const axes = axesProp ?? dp.axes ?? "y";
237
+ const box = useRef(null);
238
+ const mergedRef = useMergedRefs(box, viewportRef);
239
+ return /* @__PURE__ */ jsxs(ScrollAreaRoot, {
240
+ className,
241
+ "data-testid": dataTestid,
242
+ ...rest,
243
+ children: [
244
+ /* @__PURE__ */ jsx(ScrollAreaViewport, {
245
+ ref: mergedRef,
246
+ axes,
247
+ "data-scroll-viewport": true,
248
+ tabIndex,
249
+ role: ariaLabel || ariaLabelledby ? "region" : void 0,
250
+ "aria-label": ariaLabel,
251
+ "aria-labelledby": ariaLabelledby,
252
+ children
253
+ }),
254
+ axes !== "x" && /* @__PURE__ */ jsx(ScrollBar, {
255
+ box,
256
+ axis: "y"
257
+ }),
258
+ axes !== "y" && /* @__PURE__ */ jsx(ScrollBar, {
259
+ box,
260
+ axis: "x"
261
+ })
262
+ ]
263
+ });
264
+ }
265
+ //#endregion
266
+ export { ScrollArea };