@soroush.tech/design-system 0.1.0

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 (373) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +278 -0
  3. package/dist/AppBar.cjs +71 -0
  4. package/dist/AppBar.d.cts +23 -0
  5. package/dist/AppBar.d.mts +23 -0
  6. package/dist/AppBar.mjs +69 -0
  7. package/dist/Avatar.cjs +106 -0
  8. package/dist/Avatar.d.cts +28 -0
  9. package/dist/Avatar.d.mts +28 -0
  10. package/dist/Avatar.mjs +103 -0
  11. package/dist/Backdrop.cjs +26 -0
  12. package/dist/Backdrop.d.cts +10 -0
  13. package/dist/Backdrop.d.mts +10 -0
  14. package/dist/Backdrop.mjs +25 -0
  15. package/dist/Button.cjs +178 -0
  16. package/dist/Button.d.cts +2 -0
  17. package/dist/Button.d.mts +2 -0
  18. package/dist/Button.mjs +175 -0
  19. package/dist/ButtonGroup.cjs +110 -0
  20. package/dist/ButtonGroup.d.cts +2 -0
  21. package/dist/ButtonGroup.d.mts +2 -0
  22. package/dist/ButtonGroup.mjs +107 -0
  23. package/dist/ButtonGroupContext-DS-kl9lG.mjs +5 -0
  24. package/dist/ButtonGroupContext-NtkVeDVE.cjs +9 -0
  25. package/dist/Card.cjs +95 -0
  26. package/dist/Card.d.cts +18 -0
  27. package/dist/Card.d.mts +18 -0
  28. package/dist/Card.mjs +93 -0
  29. package/dist/Checkbox.cjs +192 -0
  30. package/dist/Checkbox.d.cts +2 -0
  31. package/dist/Checkbox.d.mts +2 -0
  32. package/dist/Checkbox.mjs +190 -0
  33. package/dist/CircularProgress.cjs +136 -0
  34. package/dist/CircularProgress.d.cts +34 -0
  35. package/dist/CircularProgress.d.mts +34 -0
  36. package/dist/CircularProgress.mjs +133 -0
  37. package/dist/CodeBlock.cjs +101 -0
  38. package/dist/CodeBlock.d.cts +2 -0
  39. package/dist/CodeBlock.d.mts +2 -0
  40. package/dist/CodeBlock.mjs +100 -0
  41. package/dist/Drawer.cjs +69 -0
  42. package/dist/Drawer.d.cts +22 -0
  43. package/dist/Drawer.d.mts +22 -0
  44. package/dist/Drawer.mjs +66 -0
  45. package/dist/Field.cjs +59 -0
  46. package/dist/Field.d.cts +36 -0
  47. package/dist/Field.d.mts +36 -0
  48. package/dist/Field.mjs +58 -0
  49. package/dist/Flex.cjs +21 -0
  50. package/dist/Flex.d.cts +2 -0
  51. package/dist/Flex.d.mts +2 -0
  52. package/dist/Flex.mjs +19 -0
  53. package/dist/FocusTrap.cjs +82 -0
  54. package/dist/FocusTrap.d.cts +24 -0
  55. package/dist/FocusTrap.d.mts +24 -0
  56. package/dist/FocusTrap.mjs +81 -0
  57. package/dist/Form.cjs +44 -0
  58. package/dist/Form.d.cts +41 -0
  59. package/dist/Form.d.mts +41 -0
  60. package/dist/Form.mjs +42 -0
  61. package/dist/FormContext-CRmRgDgu.cjs +10 -0
  62. package/dist/FormContext-_G3sxJyQ.mjs +6 -0
  63. package/dist/FormControl.cjs +84 -0
  64. package/dist/FormControl.d.cts +78 -0
  65. package/dist/FormControl.d.mts +78 -0
  66. package/dist/FormControl.mjs +81 -0
  67. package/dist/FormControlContext-CyxdOxdN.mjs +6 -0
  68. package/dist/FormControlContext-aeKTjRKY.cjs +10 -0
  69. package/dist/FormHelperText.cjs +40 -0
  70. package/dist/FormHelperText.d.cts +16 -0
  71. package/dist/FormHelperText.d.mts +16 -0
  72. package/dist/FormHelperText.mjs +39 -0
  73. package/dist/FormLabel.cjs +34 -0
  74. package/dist/FormLabel.d.cts +2 -0
  75. package/dist/FormLabel.d.mts +2 -0
  76. package/dist/FormLabel.mjs +33 -0
  77. package/dist/Grid.cjs +37 -0
  78. package/dist/Grid.d.cts +21 -0
  79. package/dist/Grid.d.mts +21 -0
  80. package/dist/Grid.mjs +32 -0
  81. package/dist/Icon-1YtNCUKo.cjs +755 -0
  82. package/dist/Icon-CAKRmFz3.mjs +742 -0
  83. package/dist/Icon.cjs +4 -0
  84. package/dist/Icon.d.cts +2 -0
  85. package/dist/Icon.d.mts +2 -0
  86. package/dist/Icon.mjs +2 -0
  87. package/dist/Image.cjs +82 -0
  88. package/dist/Image.d.cts +2 -0
  89. package/dist/Image.d.mts +2 -0
  90. package/dist/Image.mjs +80 -0
  91. package/dist/LinearProgress.cjs +217 -0
  92. package/dist/LinearProgress.d.cts +36 -0
  93. package/dist/LinearProgress.d.mts +36 -0
  94. package/dist/LinearProgress.mjs +214 -0
  95. package/dist/Link.cjs +64 -0
  96. package/dist/Link.d.cts +2 -0
  97. package/dist/Link.d.mts +2 -0
  98. package/dist/Link.mjs +62 -0
  99. package/dist/Markdown/Control.cjs +61 -0
  100. package/dist/Markdown/Control.d.cts +18 -0
  101. package/dist/Markdown/Control.d.mts +18 -0
  102. package/dist/Markdown/Control.mjs +60 -0
  103. package/dist/Markdown/Editor.cjs +130 -0
  104. package/dist/Markdown/Editor.d.cts +40 -0
  105. package/dist/Markdown/Editor.d.mts +40 -0
  106. package/dist/Markdown/Editor.mjs +128 -0
  107. package/dist/Markdown/Preview.cjs +241 -0
  108. package/dist/Markdown/Preview.d.cts +55 -0
  109. package/dist/Markdown/Preview.d.mts +55 -0
  110. package/dist/Markdown/Preview.mjs +236 -0
  111. package/dist/Markdown/Toolbar.cjs +4 -0
  112. package/dist/Markdown/Toolbar.d.cts +13 -0
  113. package/dist/Markdown/Toolbar.d.mts +13 -0
  114. package/dist/Markdown/Toolbar.mjs +2 -0
  115. package/dist/Markdown.cjs +13 -0
  116. package/dist/Markdown.d.cts +80 -0
  117. package/dist/Markdown.d.mts +80 -0
  118. package/dist/Markdown.mjs +6 -0
  119. package/dist/MarkdownContext-BN8A3W-J.mjs +11 -0
  120. package/dist/MarkdownContext-DSwjzpH8.cjs +22 -0
  121. package/dist/MenuItem.cjs +150 -0
  122. package/dist/MenuItem.d.cts +51 -0
  123. package/dist/MenuItem.d.mts +51 -0
  124. package/dist/MenuItem.mjs +147 -0
  125. package/dist/Modal-BDMPTSXv.cjs +351 -0
  126. package/dist/Modal-DR60peRg.mjs +327 -0
  127. package/dist/Modal.cjs +6 -0
  128. package/dist/Modal.d.cts +2 -0
  129. package/dist/Modal.d.mts +2 -0
  130. package/dist/Modal.mjs +2 -0
  131. package/dist/NativeSelect.cjs +189 -0
  132. package/dist/NativeSelect.d.cts +62 -0
  133. package/dist/NativeSelect.d.mts +62 -0
  134. package/dist/NativeSelect.mjs +186 -0
  135. package/dist/Pagination/PaginationItem.cjs +116 -0
  136. package/dist/Pagination/PaginationItem.d.cts +2 -0
  137. package/dist/Pagination/PaginationItem.d.mts +2 -0
  138. package/dist/Pagination/PaginationItem.mjs +114 -0
  139. package/dist/Pagination.cjs +134 -0
  140. package/dist/Pagination.d.cts +23 -0
  141. package/dist/Pagination.d.mts +23 -0
  142. package/dist/Pagination.mjs +130 -0
  143. package/dist/Paper.cjs +51 -0
  144. package/dist/Paper.d.cts +2 -0
  145. package/dist/Paper.d.mts +2 -0
  146. package/dist/Paper.mjs +48 -0
  147. package/dist/Popover-B61J7C79.mjs +252 -0
  148. package/dist/Popover-CRDLmywF.cjs +259 -0
  149. package/dist/Popover.cjs +3 -0
  150. package/dist/Popover.d.cts +84 -0
  151. package/dist/Popover.d.mts +84 -0
  152. package/dist/Popover.mjs +2 -0
  153. package/dist/Portal.cjs +20 -0
  154. package/dist/Portal.d.cts +18 -0
  155. package/dist/Portal.d.mts +18 -0
  156. package/dist/Portal.mjs +19 -0
  157. package/dist/Quote.cjs +11 -0
  158. package/dist/Quote.d.cts +2 -0
  159. package/dist/Quote.d.mts +2 -0
  160. package/dist/Quote.mjs +10 -0
  161. package/dist/Radio.cjs +143 -0
  162. package/dist/Radio.d.cts +38 -0
  163. package/dist/Radio.d.mts +38 -0
  164. package/dist/Radio.mjs +141 -0
  165. package/dist/Select.cjs +528 -0
  166. package/dist/Select.d.cts +68 -0
  167. package/dist/Select.d.mts +68 -0
  168. package/dist/Select.mjs +525 -0
  169. package/dist/Skeleton.cjs +82 -0
  170. package/dist/Skeleton.d.cts +21 -0
  171. package/dist/Skeleton.d.mts +21 -0
  172. package/dist/Skeleton.mjs +79 -0
  173. package/dist/Switch.cjs +332 -0
  174. package/dist/Switch.d.cts +40 -0
  175. package/dist/Switch.d.mts +40 -0
  176. package/dist/Switch.mjs +329 -0
  177. package/dist/Table/Table.cjs +65 -0
  178. package/dist/Table/Table.d.cts +2 -0
  179. package/dist/Table/Table.d.mts +2 -0
  180. package/dist/Table/Table.mjs +63 -0
  181. package/dist/Table/TableBody.cjs +42 -0
  182. package/dist/Table/TableBody.d.cts +2 -0
  183. package/dist/Table/TableBody.d.mts +2 -0
  184. package/dist/Table/TableBody.mjs +40 -0
  185. package/dist/Table/TableCell.cjs +93 -0
  186. package/dist/Table/TableCell.d.cts +2 -0
  187. package/dist/Table/TableCell.d.mts +2 -0
  188. package/dist/Table/TableCell.mjs +91 -0
  189. package/dist/Table/TableContainer.cjs +15 -0
  190. package/dist/Table/TableContainer.d.cts +2 -0
  191. package/dist/Table/TableContainer.d.mts +2 -0
  192. package/dist/Table/TableContainer.mjs +14 -0
  193. package/dist/Table/TableControl.cjs +42 -0
  194. package/dist/Table/TableControl.d.cts +2 -0
  195. package/dist/Table/TableControl.d.mts +2 -0
  196. package/dist/Table/TableControl.mjs +41 -0
  197. package/dist/Table/TableFooter.cjs +42 -0
  198. package/dist/Table/TableFooter.d.cts +2 -0
  199. package/dist/Table/TableFooter.d.mts +2 -0
  200. package/dist/Table/TableFooter.mjs +40 -0
  201. package/dist/Table/TableHead.cjs +42 -0
  202. package/dist/Table/TableHead.d.cts +2 -0
  203. package/dist/Table/TableHead.d.mts +2 -0
  204. package/dist/Table/TableHead.mjs +40 -0
  205. package/dist/Table/TablePagination.cjs +89 -0
  206. package/dist/Table/TablePagination.d.cts +2 -0
  207. package/dist/Table/TablePagination.d.mts +2 -0
  208. package/dist/Table/TablePagination.mjs +88 -0
  209. package/dist/Table/TablePaginationActions.cjs +65 -0
  210. package/dist/Table/TablePaginationActions.d.cts +2 -0
  211. package/dist/Table/TablePaginationActions.d.mts +2 -0
  212. package/dist/Table/TablePaginationActions.mjs +63 -0
  213. package/dist/Table/TableRow.cjs +56 -0
  214. package/dist/Table/TableRow.d.cts +2 -0
  215. package/dist/Table/TableRow.d.mts +2 -0
  216. package/dist/Table/TableRow.mjs +54 -0
  217. package/dist/Table/TableSortLabel.cjs +62 -0
  218. package/dist/Table/TableSortLabel.d.cts +2 -0
  219. package/dist/Table/TableSortLabel.d.mts +2 -0
  220. package/dist/Table/TableSortLabel.mjs +60 -0
  221. package/dist/Table/hooks.cjs +112 -0
  222. package/dist/Table/hooks.d.cts +3 -0
  223. package/dist/Table/hooks.d.mts +3 -0
  224. package/dist/Table/hooks.mjs +109 -0
  225. package/dist/Table.cjs +31 -0
  226. package/dist/Table.d.cts +16 -0
  227. package/dist/Table.d.mts +16 -0
  228. package/dist/Table.mjs +15 -0
  229. package/dist/TableContext-2qH7XYJB.d.cts +19 -0
  230. package/dist/TableContext-2qH7XYJB.d.mts +19 -0
  231. package/dist/TableContext-BRWPghAI.mjs +6 -0
  232. package/dist/TableContext-qqp35o8z.cjs +10 -0
  233. package/dist/TableSectionContext-meIG4lFZ.mjs +5 -0
  234. package/dist/TableSectionContext-pYlJ-duI.cjs +9 -0
  235. package/dist/TextInput-6o37Zddp.cjs +231 -0
  236. package/dist/TextInput-D_lHYJlL.mjs +224 -0
  237. package/dist/TextInput.cjs +3 -0
  238. package/dist/TextInput.d.cts +2 -0
  239. package/dist/TextInput.d.mts +2 -0
  240. package/dist/TextInput.mjs +2 -0
  241. package/dist/ThemeProvider.cjs +15 -0
  242. package/dist/ThemeProvider.d.cts +20 -0
  243. package/dist/ThemeProvider.d.mts +20 -0
  244. package/dist/ThemeProvider.mjs +14 -0
  245. package/dist/ToggleButton/ToggleButton.cjs +58 -0
  246. package/dist/ToggleButton/ToggleButton.d.cts +14 -0
  247. package/dist/ToggleButton/ToggleButton.d.mts +14 -0
  248. package/dist/ToggleButton/ToggleButton.mjs +56 -0
  249. package/dist/ToggleButton/ToggleButtonGroup.cjs +54 -0
  250. package/dist/ToggleButton/ToggleButtonGroup.d.cts +23 -0
  251. package/dist/ToggleButton/ToggleButtonGroup.d.mts +23 -0
  252. package/dist/ToggleButton/ToggleButtonGroup.mjs +52 -0
  253. package/dist/ToggleButton.cjs +7 -0
  254. package/dist/ToggleButton.d.cts +4 -0
  255. package/dist/ToggleButton.d.mts +4 -0
  256. package/dist/ToggleButton.mjs +4 -0
  257. package/dist/ToggleButtonGroupContext-CqD-Afho.d.cts +15 -0
  258. package/dist/ToggleButtonGroupContext-CqD-Afho.d.mts +15 -0
  259. package/dist/ToggleButtonGroupContext-DxIyy8ze.mjs +5 -0
  260. package/dist/ToggleButtonGroupContext-Ewc5Ixas.cjs +9 -0
  261. package/dist/Toolbar-B-W22Sk4.cjs +459 -0
  262. package/dist/Toolbar-KbR97iJS.mjs +448 -0
  263. package/dist/Typography.cjs +64 -0
  264. package/dist/Typography.d.cts +3 -0
  265. package/dist/Typography.d.mts +3 -0
  266. package/dist/Typography.mjs +61 -0
  267. package/dist/View.cjs +40 -0
  268. package/dist/View.d.cts +2 -0
  269. package/dist/View.d.mts +2 -0
  270. package/dist/View.mjs +38 -0
  271. package/dist/applyAction-B2B-hnP3.mjs +98 -0
  272. package/dist/applyAction-B2uVHxOE.cjs +103 -0
  273. package/dist/createTheme-Dts2F4R_.d.cts +21 -0
  274. package/dist/createTheme-Dts2F4R_.d.mts +21 -0
  275. package/dist/hooks/useCopyToClipboard.cjs +33 -0
  276. package/dist/hooks/useCopyToClipboard.d.cts +16 -0
  277. package/dist/hooks/useCopyToClipboard.d.mts +16 -0
  278. package/dist/hooks/useCopyToClipboard.mjs +31 -0
  279. package/dist/hooks.cjs +52 -0
  280. package/dist/hooks.d.cts +40 -0
  281. package/dist/hooks.d.mts +40 -0
  282. package/dist/hooks.mjs +41 -0
  283. package/dist/index-4rC2j7fR.d.cts +46 -0
  284. package/dist/index-8dzWTpFp.d.cts +24 -0
  285. package/dist/index-B1rCD6Oo.d.cts +17 -0
  286. package/dist/index-BH8jQOdF.d.mts +46 -0
  287. package/dist/index-BLRMuO_x.d.mts +24 -0
  288. package/dist/index-BLfFycfJ.d.mts +72 -0
  289. package/dist/index-BPrjvi7B.d.cts +13 -0
  290. package/dist/index-BX5-NfbX.d.cts +94 -0
  291. package/dist/index-Bihpwn75.d.cts +64 -0
  292. package/dist/index-BlfIbAMs.d.cts +45 -0
  293. package/dist/index-BnzUumAC2.d.mts +30 -0
  294. package/dist/index-BoqlPb3Z.d.mts +13 -0
  295. package/dist/index-BqVgv2B_.d.mts +42 -0
  296. package/dist/index-Bwi4kRpf.d.mts +79 -0
  297. package/dist/index-Bx24ZnOV.d.mts +43 -0
  298. package/dist/index-C-P_hipv.d.mts +21 -0
  299. package/dist/index-C0xMvDjL.d.mts +49 -0
  300. package/dist/index-C5_ciaeo.d.cts +79 -0
  301. package/dist/index-CDVnvjIE.d.cts +27 -0
  302. package/dist/index-CDcGTGR4.d.cts +21 -0
  303. package/dist/index-CEOZI-6L.d.mts +48 -0
  304. package/dist/index-CLU39rUS2.d.mts +30 -0
  305. package/dist/index-CM_KCTee.d.cts +48 -0
  306. package/dist/index-CT9uGKrs.d.cts +30 -0
  307. package/dist/index-CcYSvIJi.d.cts +21 -0
  308. package/dist/index-CdF_4ckE.d.mts +11 -0
  309. package/dist/index-CeYkEXU2.d.cts +68 -0
  310. package/dist/index-Cl_yBpzW2.d.mts +13 -0
  311. package/dist/index-Cv_UOfYx.d.mts +18 -0
  312. package/dist/index-CxSNNzBT2.d.mts +68 -0
  313. package/dist/index-CyZYXDn0.d.cts +42 -0
  314. package/dist/index-DASvoACZ.d.cts +49 -0
  315. package/dist/index-DBGE6yKw.d.mts +16 -0
  316. package/dist/index-DCQ2fsDu.d.mts +40 -0
  317. package/dist/index-DD2AVtiR.d.cts +16 -0
  318. package/dist/index-DE5PtzPn.d.mts +27 -0
  319. package/dist/index-DOPXpr2J.d.cts +43 -0
  320. package/dist/index-DSCMXFTn.d.cts +30 -0
  321. package/dist/index-DTkQSXQD.d.cts +11 -0
  322. package/dist/index-DeJWkpf9.d.cts +16 -0
  323. package/dist/index-DeiZHSwA.d.cts +12 -0
  324. package/dist/index-Des8BisQ.d.mts +12 -0
  325. package/dist/index-Dg8-CPOO.d.cts +18 -0
  326. package/dist/index-DgRS5Aqv.d.mts +16 -0
  327. package/dist/index-Dm9HfgV6.d.mts +63 -0
  328. package/dist/index-DmJIuQJj.d.mts +24 -0
  329. package/dist/index-Dp81rWM1.d.cts +72 -0
  330. package/dist/index-Dtzj8X58.d.cts +40 -0
  331. package/dist/index-DvW2eETV.d.mts +21 -0
  332. package/dist/index-Dy03o__A.d.mts +94 -0
  333. package/dist/index-FwTocqhP.d.cts +34 -0
  334. package/dist/index-GVsFY00r.d.cts +21 -0
  335. package/dist/index-Nqco3fsM.d.cts +13 -0
  336. package/dist/index-g-9DZ_KQ.d.cts +28 -0
  337. package/dist/index-g9EThkSg.d.mts +21 -0
  338. package/dist/index-kpk9e3xM2.d.mts +45 -0
  339. package/dist/index-pX7tBQdJ.d.mts +34 -0
  340. package/dist/index-u57CbuAU2.d.mts +28 -0
  341. package/dist/index-x80UG39F.d.cts +24 -0
  342. package/dist/index-z35LEYG8.d.mts +17 -0
  343. package/dist/index.cjs +68 -0
  344. package/dist/index.d.cts +4 -0
  345. package/dist/index.d.mts +4 -0
  346. package/dist/index.mjs +3 -0
  347. package/dist/inputVariantStyles-BBkkYQtE.cjs +32 -0
  348. package/dist/inputVariantStyles-CcqpGfuP.mjs +28 -0
  349. package/dist/rolldown-runtime-BBjsoOtd.mjs +27 -0
  350. package/dist/rolldown-runtime-DDXJien1.cjs +50 -0
  351. package/dist/src-BiocWFSR.cjs +60 -0
  352. package/dist/src-DcNT2aIK.mjs +49 -0
  353. package/dist/themeDefault-B-QjpGEO.cjs +16 -0
  354. package/dist/themeDefault-CjXaY3ok.mjs +11 -0
  355. package/dist/themes-D1SAp3SL.d.mts +500 -0
  356. package/dist/themes-D81JYbqm.d.cts +500 -0
  357. package/dist/themes.cjs +318 -0
  358. package/dist/themes.d.cts +3 -0
  359. package/dist/themes.d.mts +3 -0
  360. package/dist/themes.mjs +303 -0
  361. package/dist/useDefaultProps-Cb-5FNok.cjs +19 -0
  362. package/dist/useDefaultProps-CoApb4KT.mjs +14 -0
  363. package/dist/useTableSort--XMWjujs.d.cts +51 -0
  364. package/dist/useTableSort-CpDs4cGq.d.mts +51 -0
  365. package/dist/utils/styleCache.cjs +7 -0
  366. package/dist/utils/styleCache.d.cts +3 -0
  367. package/dist/utils/styleCache.d.mts +4 -0
  368. package/dist/utils/styleCache.mjs +5 -0
  369. package/dist/utils.cjs +65 -0
  370. package/dist/utils.d.cts +39 -0
  371. package/dist/utils.d.mts +39 -0
  372. package/dist/utils.mjs +58 -0
  373. package/package.json +125 -0
@@ -0,0 +1,81 @@
1
+ import { d as styled } from "./src-DcNT2aIK.mjs";
2
+ import { useEffect, useRef } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/FocusTrap/FocusTrap.tsx
5
+ const FocusTrapRoot = styled("div", {
6
+ name: "FocusTrap",
7
+ label: "FocusTrap"
8
+ })({ outline: "none" });
9
+ const FOCUSABLE_SELECTOR = [
10
+ "a[href]",
11
+ "button:not([disabled])",
12
+ "textarea:not([disabled])",
13
+ "input:not([disabled])",
14
+ "select:not([disabled])",
15
+ "[tabindex]:not([tabindex=\"-1\"])"
16
+ ].join(",");
17
+ function getFocusable(node) {
18
+ return Array.from(node.querySelectorAll(FOCUSABLE_SELECTOR)).filter((element) => element.tabIndex >= 0);
19
+ }
20
+ /** Move focus to the first focusable descendant, or the node itself when there is none. */
21
+ function focusFirst(node) {
22
+ const [first] = getFocusable(node);
23
+ (first ?? node).focus();
24
+ }
25
+ /**
26
+ * @description Keeps keyboard focus within its children while active. Moves focus
27
+ * in on activation, cycles Tab / Shift+Tab at the boundaries, pulls focus back when
28
+ * it escapes, and restores focus to the previously focused element on deactivation.
29
+ */
30
+ function FocusTrap({ children, isEnabled = true, shouldAutoFocus = true, shouldTrapFocus = true, shouldEnforceFocus = true, shouldRestoreFocus = true }) {
31
+ const rootRef = useRef(null);
32
+ const previouslyFocused = useRef(null);
33
+ useEffect(() => {
34
+ if (!isEnabled) return;
35
+ const node = rootRef.current;
36
+ const doc = node.ownerDocument;
37
+ previouslyFocused.current = doc.activeElement;
38
+ if (shouldAutoFocus) focusFirst(node);
39
+ const handleFocusIn = (event) => {
40
+ if (!node.contains(event.target)) focusFirst(node);
41
+ };
42
+ if (shouldEnforceFocus) doc.addEventListener("focusin", handleFocusIn);
43
+ const handleKeyDown = (event) => {
44
+ if (!shouldTrapFocus || event.key !== "Tab") return;
45
+ const focusable = getFocusable(node);
46
+ if (focusable.length === 0) {
47
+ event.preventDefault();
48
+ return;
49
+ }
50
+ const first = focusable[0];
51
+ const last = focusable.at(-1);
52
+ const active = doc.activeElement;
53
+ if (event.shiftKey && active === first) {
54
+ event.preventDefault();
55
+ last.focus();
56
+ } else if (!event.shiftKey && active === last) {
57
+ event.preventDefault();
58
+ first.focus();
59
+ }
60
+ };
61
+ node.addEventListener("keydown", handleKeyDown);
62
+ return () => {
63
+ doc.removeEventListener("focusin", handleFocusIn);
64
+ node.removeEventListener("keydown", handleKeyDown);
65
+ if (shouldRestoreFocus) previouslyFocused.current.focus();
66
+ };
67
+ }, [
68
+ isEnabled,
69
+ shouldAutoFocus,
70
+ shouldEnforceFocus,
71
+ shouldRestoreFocus,
72
+ shouldTrapFocus
73
+ ]);
74
+ return /* @__PURE__ */ jsx(FocusTrapRoot, {
75
+ ref: rootRef,
76
+ tabIndex: -1,
77
+ children
78
+ });
79
+ }
80
+ //#endregion
81
+ export { FocusTrap };
package/dist/Form.cjs ADDED
@@ -0,0 +1,44 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_src = require("./src-BiocWFSR.cjs");
3
+ const require_FormContext = require("./FormContext-CRmRgDgu.cjs");
4
+ require("@emotion/react");
5
+ let react = require("react");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ //#region src/Form/Form.tsx
8
+ const FormRoot = require_src.styled("form", {
9
+ name: "Form",
10
+ label: "Form"
11
+ })();
12
+ /**
13
+ * Renders a `<form>` and provides form-wide defaults via FormContext — the lowest
14
+ * priority in the override chain (FormControl and explicit control props win).
15
+ */
16
+ function Form({ children, onSubmit, size, color, textColor, disabled, fullWidth, id, className, noValidate, "data-testid": dataTestid }) {
17
+ const value = (0, react.useMemo)(() => ({
18
+ size,
19
+ color,
20
+ textColor,
21
+ disabled,
22
+ fullWidth
23
+ }), [
24
+ size,
25
+ color,
26
+ textColor,
27
+ disabled,
28
+ fullWidth
29
+ ]);
30
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FormContext.FormContext.Provider, {
31
+ value,
32
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormRoot, {
33
+ id,
34
+ className,
35
+ noValidate,
36
+ onSubmit,
37
+ "data-testid": dataTestid,
38
+ children
39
+ })
40
+ });
41
+ }
42
+ //#endregion
43
+ exports.Form = Form;
44
+ exports.FormContext = require_FormContext.FormContext;
@@ -0,0 +1,41 @@
1
+ import { Theme } from "@emotion/react";
2
+ import { ReactNode, SyntheticEvent } from "react";
3
+ //#region src/Form/Form.d.ts
4
+ interface FormProps {
5
+ children: ReactNode;
6
+ onSubmit?: (event: SyntheticEvent<HTMLFormElement>) => void;
7
+ /** Default control size for every field — overridable per FormControl/control. */
8
+ size?: keyof Theme['sizes'];
9
+ /** Default accent color for every field. */
10
+ color?: keyof Theme['palette'];
11
+ /** Default text color for every field's label/helper/input — resolves against `theme.text`. */
12
+ textColor?: keyof Theme['text'];
13
+ /** Disables every field. */
14
+ disabled?: boolean;
15
+ /** Stretches every field to fill its container. */
16
+ fullWidth?: boolean;
17
+ id?: string;
18
+ className?: string;
19
+ /** Skips native browser validation so field-level validation owns the UX. */
20
+ noValidate?: boolean;
21
+ 'data-testid'?: string;
22
+ }
23
+ /**
24
+ * Renders a `<form>` and provides form-wide defaults via FormContext — the lowest
25
+ * priority in the override chain (FormControl and explicit control props win).
26
+ */
27
+ declare function Form({ children, onSubmit, size, color, textColor, disabled, fullWidth, id, className, noValidate, 'data-testid': dataTestid }: Readonly<FormProps>): import("react").JSX.Element;
28
+ //#endregion
29
+ //#region src/Form/FormContext.d.ts
30
+ /** Form-wide defaults, lowest priority in the override chain (overridden by FormControl, then explicit props). */
31
+ interface FormContextValue {
32
+ size?: keyof Theme['sizes'];
33
+ color?: keyof Theme['palette'];
34
+ /** Text color for label/helper/input content — resolves against `theme.text`. */
35
+ textColor?: keyof Theme['text'];
36
+ disabled?: boolean;
37
+ fullWidth?: boolean;
38
+ }
39
+ declare const FormContext: import("react").Context<FormContextValue>;
40
+ //#endregion
41
+ export { Form, FormContext, FormContextValue, FormProps };
@@ -0,0 +1,41 @@
1
+ import { Theme } from "@emotion/react";
2
+ import { ReactNode, SyntheticEvent } from "react";
3
+ //#region src/Form/Form.d.ts
4
+ interface FormProps {
5
+ children: ReactNode;
6
+ onSubmit?: (event: SyntheticEvent<HTMLFormElement>) => void;
7
+ /** Default control size for every field — overridable per FormControl/control. */
8
+ size?: keyof Theme['sizes'];
9
+ /** Default accent color for every field. */
10
+ color?: keyof Theme['palette'];
11
+ /** Default text color for every field's label/helper/input — resolves against `theme.text`. */
12
+ textColor?: keyof Theme['text'];
13
+ /** Disables every field. */
14
+ disabled?: boolean;
15
+ /** Stretches every field to fill its container. */
16
+ fullWidth?: boolean;
17
+ id?: string;
18
+ className?: string;
19
+ /** Skips native browser validation so field-level validation owns the UX. */
20
+ noValidate?: boolean;
21
+ 'data-testid'?: string;
22
+ }
23
+ /**
24
+ * Renders a `<form>` and provides form-wide defaults via FormContext — the lowest
25
+ * priority in the override chain (FormControl and explicit control props win).
26
+ */
27
+ declare function Form({ children, onSubmit, size, color, textColor, disabled, fullWidth, id, className, noValidate, 'data-testid': dataTestid }: Readonly<FormProps>): import("react").JSX.Element;
28
+ //#endregion
29
+ //#region src/Form/FormContext.d.ts
30
+ /** Form-wide defaults, lowest priority in the override chain (overridden by FormControl, then explicit props). */
31
+ interface FormContextValue {
32
+ size?: keyof Theme['sizes'];
33
+ color?: keyof Theme['palette'];
34
+ /** Text color for label/helper/input content — resolves against `theme.text`. */
35
+ textColor?: keyof Theme['text'];
36
+ disabled?: boolean;
37
+ fullWidth?: boolean;
38
+ }
39
+ declare const FormContext: import("react").Context<FormContextValue>;
40
+ //#endregion
41
+ export { Form, FormContext, FormContextValue, FormProps };
package/dist/Form.mjs ADDED
@@ -0,0 +1,42 @@
1
+ import { d as styled } from "./src-DcNT2aIK.mjs";
2
+ import { t as FormContext } from "./FormContext-_G3sxJyQ.mjs";
3
+ import "@emotion/react";
4
+ import { useMemo } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/Form/Form.tsx
7
+ const FormRoot = styled("form", {
8
+ name: "Form",
9
+ label: "Form"
10
+ })();
11
+ /**
12
+ * Renders a `<form>` and provides form-wide defaults via FormContext — the lowest
13
+ * priority in the override chain (FormControl and explicit control props win).
14
+ */
15
+ function Form({ children, onSubmit, size, color, textColor, disabled, fullWidth, id, className, noValidate, "data-testid": dataTestid }) {
16
+ const value = useMemo(() => ({
17
+ size,
18
+ color,
19
+ textColor,
20
+ disabled,
21
+ fullWidth
22
+ }), [
23
+ size,
24
+ color,
25
+ textColor,
26
+ disabled,
27
+ fullWidth
28
+ ]);
29
+ return /* @__PURE__ */ jsx(FormContext.Provider, {
30
+ value,
31
+ children: /* @__PURE__ */ jsx(FormRoot, {
32
+ id,
33
+ className,
34
+ noValidate,
35
+ onSubmit,
36
+ "data-testid": dataTestid,
37
+ children
38
+ })
39
+ });
40
+ }
41
+ //#endregion
42
+ export { Form, FormContext };
@@ -0,0 +1,10 @@
1
+ require("@emotion/react");
2
+ //#region src/Form/FormContext.ts
3
+ const FormContext = (0, require("react").createContext)({});
4
+ //#endregion
5
+ Object.defineProperty(exports, "FormContext", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return FormContext;
9
+ }
10
+ });
@@ -0,0 +1,6 @@
1
+ import "@emotion/react";
2
+ import { createContext } from "react";
3
+ //#region src/Form/FormContext.ts
4
+ const FormContext = createContext({});
5
+ //#endregion
6
+ export { FormContext as t };
@@ -0,0 +1,84 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_src = require("./src-BiocWFSR.cjs");
3
+ const require_themeDefault = require("./themeDefault-B-QjpGEO.cjs");
4
+ const require_View = require("./View.cjs");
5
+ const require_FormControlContext = require("./FormControlContext-aeKTjRKY.cjs");
6
+ const require_FormContext = require("./FormContext-CRmRgDgu.cjs");
7
+ let _emotion_react = require("@emotion/react");
8
+ let react = require("react");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ //#region src/FormControl/FormControl.tsx
11
+ const FormControlRoot = require_src.styled(require_View.View, {
12
+ name: "FormControl",
13
+ label: "FormControl"
14
+ })();
15
+ /**
16
+ * Groups a label, control, and helper text and shares their state via context.
17
+ * Works standalone (no parent Form) and auto-generates the id wiring so
18
+ * `htmlFor` / `aria-describedby` link without manual coordination.
19
+ */
20
+ function FormControl({ children, id, error, disabled, required, size, fullWidth, color, textColor, ...viewProps }) {
21
+ const generatedId = (0, react.useId)();
22
+ const resolvedId = id ?? generatedId;
23
+ const helperId = `${resolvedId}-helper`;
24
+ const [hasHelperText, setHasHelperText] = (0, react.useState)(false);
25
+ const value = (0, react.useMemo)(() => ({
26
+ id: resolvedId,
27
+ helperId,
28
+ error,
29
+ disabled,
30
+ required,
31
+ size,
32
+ fullWidth,
33
+ color,
34
+ textColor,
35
+ hasHelperText,
36
+ setHasHelperText
37
+ }), [
38
+ resolvedId,
39
+ helperId,
40
+ error,
41
+ disabled,
42
+ required,
43
+ size,
44
+ fullWidth,
45
+ color,
46
+ textColor,
47
+ hasHelperText
48
+ ]);
49
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FormControlContext.FormControlContext.Provider, {
50
+ value,
51
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormControlRoot, {
52
+ width: fullWidth ? "100%" : void 0,
53
+ ...viewProps,
54
+ children
55
+ })
56
+ });
57
+ }
58
+ //#endregion
59
+ //#region src/FormControl/useFormControl.ts
60
+ /**
61
+ * Merges a control's explicit props with FormControl and Form context.
62
+ * Priority: explicit prop → FormControl → Form → default.
63
+ * `error` and `required` are field-only and never read from Form.
64
+ */
65
+ function useFormControl(overrides = {}) {
66
+ const form = (0, react.useContext)(require_FormContext.FormContext);
67
+ const control = (0, react.useContext)(require_FormControlContext.FormControlContext);
68
+ const theme = (0, _emotion_react.useTheme)();
69
+ return {
70
+ id: overrides.id ?? control?.id,
71
+ error: overrides.error ?? control?.error ?? false,
72
+ disabled: overrides.disabled ?? control?.disabled ?? form.disabled ?? false,
73
+ required: overrides.required ?? control?.required ?? false,
74
+ size: overrides.size ?? control?.size ?? form.size ?? require_themeDefault.themeDefault(theme, "size", "md"),
75
+ fullWidth: overrides.fullWidth ?? control?.fullWidth ?? form.fullWidth ?? false,
76
+ color: overrides.color ?? control?.color ?? form.color,
77
+ textColor: overrides.textColor ?? control?.textColor ?? form.textColor,
78
+ "aria-describedby": control?.hasHelperText ? control.helperId : void 0
79
+ };
80
+ }
81
+ //#endregion
82
+ exports.FormControl = FormControl;
83
+ exports.FormControlContext = require_FormControlContext.FormControlContext;
84
+ exports.useFormControl = useFormControl;
@@ -0,0 +1,78 @@
1
+ import { s as ViewProps } from "./index-FwTocqhP.cjs";
2
+ import { Theme } from "@emotion/react";
3
+ import { ReactNode } from "react";
4
+ //#region src/FormControl/FormControl.d.ts
5
+ interface FormControlProps extends Omit<ViewProps, 'color'> {
6
+ children: ReactNode;
7
+ /** Field id — auto-generated via `useId()` when omitted. Links FormLabel, control, and helper text. */
8
+ id?: string;
9
+ error?: boolean;
10
+ disabled?: boolean;
11
+ required?: boolean;
12
+ size?: keyof Theme['sizes'];
13
+ fullWidth?: boolean;
14
+ color?: keyof Theme['palette'];
15
+ textColor?: keyof Theme['text'];
16
+ }
17
+ /**
18
+ * Groups a label, control, and helper text and shares their state via context.
19
+ * Works standalone (no parent Form) and auto-generates the id wiring so
20
+ * `htmlFor` / `aria-describedby` link without manual coordination.
21
+ */
22
+ declare function FormControl({ children, id, error, disabled, required, size, fullWidth, color, textColor, ...viewProps }: Readonly<FormControlProps>): import("react").JSX.Element;
23
+ //#endregion
24
+ //#region src/FormControl/FormControlContext.d.ts
25
+ /** Per-field state, middle priority in the override chain (overrides Form, overridden by explicit props). */
26
+ interface FormControlContextValue {
27
+ /** Field id — links FormLabel `htmlFor` and the control. Auto-generated by FormControl when not provided. */
28
+ id: string;
29
+ /** Id of the helper/error text node, used for `aria-describedby`. */
30
+ helperId: string;
31
+ error?: boolean;
32
+ disabled?: boolean;
33
+ required?: boolean;
34
+ size?: keyof Theme['sizes'];
35
+ fullWidth?: boolean;
36
+ color?: keyof Theme['palette'];
37
+ /** Text color for label/helper/input content — resolves against `theme.text`. */
38
+ textColor?: keyof Theme['text'];
39
+ /** Whether a FormHelperText is currently rendered — drives `aria-describedby` on the control. */
40
+ hasHelperText: boolean;
41
+ /** Stable setter FormHelperText calls to register/unregister its presence. */
42
+ setHasHelperText: (present: boolean) => void;
43
+ }
44
+ declare const FormControlContext: import("react").Context<FormControlContextValue | null>;
45
+ //#endregion
46
+ //#region src/FormControl/useFormControl.d.ts
47
+ /** Explicit props a control passes in — always win over context when defined. */
48
+ interface FormControlOverrides {
49
+ id?: string;
50
+ error?: boolean;
51
+ disabled?: boolean;
52
+ required?: boolean;
53
+ size?: keyof Theme['sizes'];
54
+ fullWidth?: boolean;
55
+ color?: keyof Theme['palette'];
56
+ textColor?: keyof Theme['text'];
57
+ }
58
+ /** Resolved field state. Uniform defaults (`size`, the booleans) are applied here; `color`/`textColor` are left for each control to default since their domains differ. */
59
+ interface ResolvedFormControl {
60
+ id?: string;
61
+ error: boolean;
62
+ disabled: boolean;
63
+ required: boolean;
64
+ size: keyof Theme['sizes'];
65
+ fullWidth: boolean;
66
+ color?: keyof Theme['palette'];
67
+ textColor?: keyof Theme['text'];
68
+ /** Points at the helper text id only while one is rendered — avoids a dangling reference. */
69
+ 'aria-describedby'?: string;
70
+ }
71
+ /**
72
+ * Merges a control's explicit props with FormControl and Form context.
73
+ * Priority: explicit prop → FormControl → Form → default.
74
+ * `error` and `required` are field-only and never read from Form.
75
+ */
76
+ declare function useFormControl(overrides?: FormControlOverrides): ResolvedFormControl;
77
+ //#endregion
78
+ export { FormControl, FormControlContext, FormControlContextValue, FormControlOverrides, FormControlProps, ResolvedFormControl, useFormControl };
@@ -0,0 +1,78 @@
1
+ import { s as ViewProps } from "./index-pX7tBQdJ.mjs";
2
+ import { Theme } from "@emotion/react";
3
+ import { ReactNode } from "react";
4
+ //#region src/FormControl/FormControl.d.ts
5
+ interface FormControlProps extends Omit<ViewProps, 'color'> {
6
+ children: ReactNode;
7
+ /** Field id — auto-generated via `useId()` when omitted. Links FormLabel, control, and helper text. */
8
+ id?: string;
9
+ error?: boolean;
10
+ disabled?: boolean;
11
+ required?: boolean;
12
+ size?: keyof Theme['sizes'];
13
+ fullWidth?: boolean;
14
+ color?: keyof Theme['palette'];
15
+ textColor?: keyof Theme['text'];
16
+ }
17
+ /**
18
+ * Groups a label, control, and helper text and shares their state via context.
19
+ * Works standalone (no parent Form) and auto-generates the id wiring so
20
+ * `htmlFor` / `aria-describedby` link without manual coordination.
21
+ */
22
+ declare function FormControl({ children, id, error, disabled, required, size, fullWidth, color, textColor, ...viewProps }: Readonly<FormControlProps>): import("react").JSX.Element;
23
+ //#endregion
24
+ //#region src/FormControl/FormControlContext.d.ts
25
+ /** Per-field state, middle priority in the override chain (overrides Form, overridden by explicit props). */
26
+ interface FormControlContextValue {
27
+ /** Field id — links FormLabel `htmlFor` and the control. Auto-generated by FormControl when not provided. */
28
+ id: string;
29
+ /** Id of the helper/error text node, used for `aria-describedby`. */
30
+ helperId: string;
31
+ error?: boolean;
32
+ disabled?: boolean;
33
+ required?: boolean;
34
+ size?: keyof Theme['sizes'];
35
+ fullWidth?: boolean;
36
+ color?: keyof Theme['palette'];
37
+ /** Text color for label/helper/input content — resolves against `theme.text`. */
38
+ textColor?: keyof Theme['text'];
39
+ /** Whether a FormHelperText is currently rendered — drives `aria-describedby` on the control. */
40
+ hasHelperText: boolean;
41
+ /** Stable setter FormHelperText calls to register/unregister its presence. */
42
+ setHasHelperText: (present: boolean) => void;
43
+ }
44
+ declare const FormControlContext: import("react").Context<FormControlContextValue | null>;
45
+ //#endregion
46
+ //#region src/FormControl/useFormControl.d.ts
47
+ /** Explicit props a control passes in — always win over context when defined. */
48
+ interface FormControlOverrides {
49
+ id?: string;
50
+ error?: boolean;
51
+ disabled?: boolean;
52
+ required?: boolean;
53
+ size?: keyof Theme['sizes'];
54
+ fullWidth?: boolean;
55
+ color?: keyof Theme['palette'];
56
+ textColor?: keyof Theme['text'];
57
+ }
58
+ /** Resolved field state. Uniform defaults (`size`, the booleans) are applied here; `color`/`textColor` are left for each control to default since their domains differ. */
59
+ interface ResolvedFormControl {
60
+ id?: string;
61
+ error: boolean;
62
+ disabled: boolean;
63
+ required: boolean;
64
+ size: keyof Theme['sizes'];
65
+ fullWidth: boolean;
66
+ color?: keyof Theme['palette'];
67
+ textColor?: keyof Theme['text'];
68
+ /** Points at the helper text id only while one is rendered — avoids a dangling reference. */
69
+ 'aria-describedby'?: string;
70
+ }
71
+ /**
72
+ * Merges a control's explicit props with FormControl and Form context.
73
+ * Priority: explicit prop → FormControl → Form → default.
74
+ * `error` and `required` are field-only and never read from Form.
75
+ */
76
+ declare function useFormControl(overrides?: FormControlOverrides): ResolvedFormControl;
77
+ //#endregion
78
+ export { FormControl, FormControlContext, FormControlContextValue, FormControlOverrides, FormControlProps, ResolvedFormControl, useFormControl };
@@ -0,0 +1,81 @@
1
+ import { d as styled, u as useTheme } from "./src-DcNT2aIK.mjs";
2
+ import { t as themeDefault } from "./themeDefault-CjXaY3ok.mjs";
3
+ import { View } from "./View.mjs";
4
+ import { t as FormControlContext } from "./FormControlContext-CyxdOxdN.mjs";
5
+ import { t as FormContext } from "./FormContext-_G3sxJyQ.mjs";
6
+ import "@emotion/react";
7
+ import { useContext, useId, useMemo, useState } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ //#region src/FormControl/FormControl.tsx
10
+ const FormControlRoot = styled(View, {
11
+ name: "FormControl",
12
+ label: "FormControl"
13
+ })();
14
+ /**
15
+ * Groups a label, control, and helper text and shares their state via context.
16
+ * Works standalone (no parent Form) and auto-generates the id wiring so
17
+ * `htmlFor` / `aria-describedby` link without manual coordination.
18
+ */
19
+ function FormControl({ children, id, error, disabled, required, size, fullWidth, color, textColor, ...viewProps }) {
20
+ const generatedId = useId();
21
+ const resolvedId = id ?? generatedId;
22
+ const helperId = `${resolvedId}-helper`;
23
+ const [hasHelperText, setHasHelperText] = useState(false);
24
+ const value = useMemo(() => ({
25
+ id: resolvedId,
26
+ helperId,
27
+ error,
28
+ disabled,
29
+ required,
30
+ size,
31
+ fullWidth,
32
+ color,
33
+ textColor,
34
+ hasHelperText,
35
+ setHasHelperText
36
+ }), [
37
+ resolvedId,
38
+ helperId,
39
+ error,
40
+ disabled,
41
+ required,
42
+ size,
43
+ fullWidth,
44
+ color,
45
+ textColor,
46
+ hasHelperText
47
+ ]);
48
+ return /* @__PURE__ */ jsx(FormControlContext.Provider, {
49
+ value,
50
+ children: /* @__PURE__ */ jsx(FormControlRoot, {
51
+ width: fullWidth ? "100%" : void 0,
52
+ ...viewProps,
53
+ children
54
+ })
55
+ });
56
+ }
57
+ //#endregion
58
+ //#region src/FormControl/useFormControl.ts
59
+ /**
60
+ * Merges a control's explicit props with FormControl and Form context.
61
+ * Priority: explicit prop → FormControl → Form → default.
62
+ * `error` and `required` are field-only and never read from Form.
63
+ */
64
+ function useFormControl(overrides = {}) {
65
+ const form = useContext(FormContext);
66
+ const control = useContext(FormControlContext);
67
+ const theme = useTheme();
68
+ return {
69
+ id: overrides.id ?? control?.id,
70
+ error: overrides.error ?? control?.error ?? false,
71
+ disabled: overrides.disabled ?? control?.disabled ?? form.disabled ?? false,
72
+ required: overrides.required ?? control?.required ?? false,
73
+ size: overrides.size ?? control?.size ?? form.size ?? themeDefault(theme, "size", "md"),
74
+ fullWidth: overrides.fullWidth ?? control?.fullWidth ?? form.fullWidth ?? false,
75
+ color: overrides.color ?? control?.color ?? form.color,
76
+ textColor: overrides.textColor ?? control?.textColor ?? form.textColor,
77
+ "aria-describedby": control?.hasHelperText ? control.helperId : void 0
78
+ };
79
+ }
80
+ //#endregion
81
+ export { FormControl, FormControlContext, useFormControl };
@@ -0,0 +1,6 @@
1
+ import "@emotion/react";
2
+ import { createContext } from "react";
3
+ //#region src/FormControl/FormControlContext.ts
4
+ const FormControlContext = createContext(null);
5
+ //#endregion
6
+ export { FormControlContext as t };
@@ -0,0 +1,10 @@
1
+ require("@emotion/react");
2
+ //#region src/FormControl/FormControlContext.ts
3
+ const FormControlContext = (0, require("react").createContext)(null);
4
+ //#endregion
5
+ Object.defineProperty(exports, "FormControlContext", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return FormControlContext;
9
+ }
10
+ });
@@ -0,0 +1,40 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_src = require("./src-BiocWFSR.cjs");
3
+ const require_Typography = require("./Typography.cjs");
4
+ const require_FormControlContext = require("./FormControlContext-aeKTjRKY.cjs");
5
+ const require_FormContext = require("./FormContext-CRmRgDgu.cjs");
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ //#region src/FormHelperText/FormHelperText.tsx
9
+ const FormHelperTextRoot = require_src.styled(require_Typography.Typography, {
10
+ name: "FormHelperText",
11
+ label: "FormHelperText"
12
+ })();
13
+ /**
14
+ * Helper or error text for a field. Reads its id and error state from
15
+ * FormControl context and registers its presence so the control can point
16
+ * `aria-describedby` at it only while it is rendered.
17
+ */
18
+ function FormHelperText({ children, error, id, role, color, ...rest }) {
19
+ const control = (0, react.useContext)(require_FormControlContext.FormControlContext);
20
+ const form = (0, react.useContext)(require_FormContext.FormContext);
21
+ const isError = error ?? control?.error ?? false;
22
+ const resolvedId = id ?? control?.helperId;
23
+ const resolvedColor = isError ? "error" : color ?? control?.textColor ?? form.textColor ?? "secondary";
24
+ const setHasHelperText = control?.setHasHelperText;
25
+ (0, react.useEffect)(() => {
26
+ setHasHelperText?.(true);
27
+ return () => setHasHelperText?.(false);
28
+ }, [setHasHelperText]);
29
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormHelperTextRoot, {
30
+ as: "p",
31
+ id: resolvedId,
32
+ variant: "caption",
33
+ role: isError ? "alert" : role,
34
+ ...rest,
35
+ color: resolvedColor,
36
+ children
37
+ });
38
+ }
39
+ //#endregion
40
+ exports.FormHelperText = FormHelperText;
@@ -0,0 +1,16 @@
1
+ import { a as TypographyProps } from "./index-CDVnvjIE.cjs";
2
+ import { ReactNode } from "react";
3
+ //#region src/FormHelperText/FormHelperText.d.ts
4
+ interface FormHelperTextProps extends TypographyProps {
5
+ children: ReactNode;
6
+ /** Renders in the error color and announces via `role="alert"`. Falls back to the FormControl `error` value. */
7
+ error?: boolean;
8
+ }
9
+ /**
10
+ * Helper or error text for a field. Reads its id and error state from
11
+ * FormControl context and registers its presence so the control can point
12
+ * `aria-describedby` at it only while it is rendered.
13
+ */
14
+ declare function FormHelperText({ children, error, id, role, color, ...rest }: Readonly<FormHelperTextProps>): import("react").JSX.Element;
15
+ //#endregion
16
+ export { FormHelperText, FormHelperTextProps };