@cdx-ui/primitives 0.0.1-alpha.9 → 0.0.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +35 -0
  2. package/lib/commonjs/avatar/context.js +11 -0
  3. package/lib/commonjs/avatar/context.js.map +1 -0
  4. package/lib/commonjs/avatar/createAvatarBadge.js +20 -0
  5. package/lib/commonjs/avatar/createAvatarBadge.js.map +1 -0
  6. package/lib/commonjs/avatar/createAvatarIcon.js +30 -0
  7. package/lib/commonjs/avatar/createAvatarIcon.js.map +1 -0
  8. package/lib/commonjs/avatar/createAvatarImage.js +51 -0
  9. package/lib/commonjs/avatar/createAvatarImage.js.map +1 -0
  10. package/lib/commonjs/avatar/createAvatarRoot.js +34 -0
  11. package/lib/commonjs/avatar/createAvatarRoot.js.map +1 -0
  12. package/lib/commonjs/avatar/createAvatarText.js +42 -0
  13. package/lib/commonjs/avatar/createAvatarText.js.map +1 -0
  14. package/lib/commonjs/avatar/index.js +30 -0
  15. package/lib/commonjs/avatar/index.js.map +1 -0
  16. package/lib/commonjs/avatar/types.js +6 -0
  17. package/lib/commonjs/avatar/types.js.map +1 -0
  18. package/lib/commonjs/button/index.js +25 -19
  19. package/lib/commonjs/button/index.js.map +1 -1
  20. package/lib/commonjs/checkbox/createCheckboxIcon.js +3 -2
  21. package/lib/commonjs/checkbox/createCheckboxIcon.js.map +1 -1
  22. package/lib/commonjs/checkbox/createCheckboxRoot.web.js +2 -0
  23. package/lib/commonjs/checkbox/createCheckboxRoot.web.js.map +1 -1
  24. package/lib/commonjs/checkbox/index.js +19 -21
  25. package/lib/commonjs/checkbox/index.js.map +1 -1
  26. package/lib/commonjs/dialog/context.js +11 -0
  27. package/lib/commonjs/dialog/context.js.map +1 -0
  28. package/lib/commonjs/dialog/createDialogBody.js +21 -0
  29. package/lib/commonjs/dialog/createDialogBody.js.map +1 -0
  30. package/lib/commonjs/dialog/createDialogClose.js +37 -0
  31. package/lib/commonjs/dialog/createDialogClose.js.map +1 -0
  32. package/lib/commonjs/dialog/createDialogContent.js +141 -0
  33. package/lib/commonjs/dialog/createDialogContent.js.map +1 -0
  34. package/lib/commonjs/dialog/createDialogDescription.js +30 -0
  35. package/lib/commonjs/dialog/createDialogDescription.js.map +1 -0
  36. package/lib/commonjs/dialog/createDialogFooter.js +21 -0
  37. package/lib/commonjs/dialog/createDialogFooter.js.map +1 -0
  38. package/lib/commonjs/dialog/createDialogHeader.js +21 -0
  39. package/lib/commonjs/dialog/createDialogHeader.js.map +1 -0
  40. package/lib/commonjs/dialog/createDialogRoot.js +54 -0
  41. package/lib/commonjs/dialog/createDialogRoot.js.map +1 -0
  42. package/lib/commonjs/dialog/createDialogTitle.js +21 -0
  43. package/lib/commonjs/dialog/createDialogTitle.js.map +1 -0
  44. package/lib/commonjs/dialog/createDialogTrigger.js +37 -0
  45. package/lib/commonjs/dialog/createDialogTrigger.js.map +1 -0
  46. package/lib/commonjs/dialog/index.js +60 -0
  47. package/lib/commonjs/dialog/index.js.map +1 -0
  48. package/lib/commonjs/dialog/types.js +6 -0
  49. package/lib/commonjs/dialog/types.js.map +1 -0
  50. package/lib/commonjs/field/createFieldError.js +41 -0
  51. package/lib/commonjs/field/createFieldError.js.map +1 -0
  52. package/lib/commonjs/field/createFieldErrorIcon.js +18 -0
  53. package/lib/commonjs/field/createFieldErrorIcon.js.map +1 -0
  54. package/lib/commonjs/field/createFieldErrorText.js +18 -0
  55. package/lib/commonjs/field/createFieldErrorText.js.map +1 -0
  56. package/lib/commonjs/field/createFieldHelper.js +41 -0
  57. package/lib/commonjs/field/createFieldHelper.js.map +1 -0
  58. package/lib/commonjs/field/createFieldHelperText.js +18 -0
  59. package/lib/commonjs/field/createFieldHelperText.js.map +1 -0
  60. package/lib/commonjs/field/createFieldLabel.js +36 -0
  61. package/lib/commonjs/field/createFieldLabel.js.map +1 -0
  62. package/lib/commonjs/field/createFieldRoot.js +35 -0
  63. package/lib/commonjs/field/createFieldRoot.js.map +1 -0
  64. package/lib/commonjs/field/index.js +46 -0
  65. package/lib/commonjs/field/index.js.map +1 -0
  66. package/lib/commonjs/field/types.js +6 -0
  67. package/lib/commonjs/field/types.js.map +1 -0
  68. package/lib/commonjs/form/createFormRoot.js +21 -0
  69. package/lib/commonjs/form/createFormRoot.js.map +1 -0
  70. package/lib/commonjs/form/index.js +15 -0
  71. package/lib/commonjs/form/index.js.map +1 -0
  72. package/lib/commonjs/form/types.js +6 -0
  73. package/lib/commonjs/form/types.js.map +1 -0
  74. package/lib/commonjs/index.js +93 -1
  75. package/lib/commonjs/index.js.map +1 -1
  76. package/lib/commonjs/input/createInputField.js +7 -2
  77. package/lib/commonjs/input/createInputField.js.map +1 -1
  78. package/lib/commonjs/input/index.js +13 -19
  79. package/lib/commonjs/input/index.js.map +1 -1
  80. package/lib/commonjs/link/LinkProvider.js +28 -0
  81. package/lib/commonjs/link/LinkProvider.js.map +1 -0
  82. package/lib/commonjs/link/createLink.js +74 -0
  83. package/lib/commonjs/link/createLink.js.map +1 -0
  84. package/lib/commonjs/link/index.js +27 -0
  85. package/lib/commonjs/link/index.js.map +1 -0
  86. package/lib/commonjs/link/types.js +6 -0
  87. package/lib/commonjs/link/types.js.map +1 -0
  88. package/lib/commonjs/link/useLink.js +56 -0
  89. package/lib/commonjs/link/useLink.js.map +1 -0
  90. package/lib/commonjs/otp-input/context.js +14 -0
  91. package/lib/commonjs/otp-input/context.js.map +1 -0
  92. package/lib/commonjs/otp-input/createOtpInputCell.js +29 -0
  93. package/lib/commonjs/otp-input/createOtpInputCell.js.map +1 -0
  94. package/lib/commonjs/otp-input/createOtpInputField.js +104 -0
  95. package/lib/commonjs/otp-input/createOtpInputField.js.map +1 -0
  96. package/lib/commonjs/otp-input/createOtpInputRoot.js +136 -0
  97. package/lib/commonjs/otp-input/createOtpInputRoot.js.map +1 -0
  98. package/lib/commonjs/otp-input/index.js +48 -0
  99. package/lib/commonjs/otp-input/index.js.map +1 -0
  100. package/lib/commonjs/otp-input/types.js +6 -0
  101. package/lib/commonjs/otp-input/types.js.map +1 -0
  102. package/lib/commonjs/otp-input/utils/applyValueChange.js +73 -0
  103. package/lib/commonjs/otp-input/utils/applyValueChange.js.map +1 -0
  104. package/lib/commonjs/otp-input/utils/filterValue.js +46 -0
  105. package/lib/commonjs/otp-input/utils/filterValue.js.map +1 -0
  106. package/lib/commonjs/overlay/OverlayContainer.js +8 -11
  107. package/lib/commonjs/overlay/OverlayContainer.js.map +1 -1
  108. package/lib/commonjs/overlay/index.js +7 -0
  109. package/lib/commonjs/overlay/index.js.map +1 -1
  110. package/lib/commonjs/overlay/useEscapeKey.js +14 -0
  111. package/lib/commonjs/overlay/useEscapeKey.js.map +1 -0
  112. package/lib/commonjs/overlay/useEscapeKey.web.js +30 -0
  113. package/lib/commonjs/overlay/useEscapeKey.web.js.map +1 -0
  114. package/lib/commonjs/progress/context.js +11 -0
  115. package/lib/commonjs/progress/context.js.map +1 -0
  116. package/lib/commonjs/progress/createProgressIndicator.js +42 -0
  117. package/lib/commonjs/progress/createProgressIndicator.js.map +1 -0
  118. package/lib/commonjs/progress/createProgressRoot.js +96 -0
  119. package/lib/commonjs/progress/createProgressRoot.js.map +1 -0
  120. package/lib/commonjs/progress/index.js +25 -0
  121. package/lib/commonjs/progress/index.js.map +1 -0
  122. package/lib/commonjs/progress/types.js +6 -0
  123. package/lib/commonjs/progress/types.js.map +1 -0
  124. package/lib/commonjs/select/context.js +8 -43
  125. package/lib/commonjs/select/context.js.map +1 -1
  126. package/lib/commonjs/select/createSelectItem.js +1 -1
  127. package/lib/commonjs/select/createSelectItem.js.map +1 -1
  128. package/lib/commonjs/select/createSelectRoot.js +9 -6
  129. package/lib/commonjs/select/createSelectRoot.js.map +1 -1
  130. package/lib/commonjs/select/createSelectTrigger.js +53 -12
  131. package/lib/commonjs/select/createSelectTrigger.js.map +1 -1
  132. package/lib/commonjs/utils/createPortal.js +23 -0
  133. package/lib/commonjs/utils/createPortal.js.map +1 -0
  134. package/lib/commonjs/utils/dataAttributes.web.js +1 -4
  135. package/lib/commonjs/utils/dataAttributes.web.js.map +1 -1
  136. package/lib/module/avatar/context.js +5 -0
  137. package/lib/module/avatar/context.js.map +1 -0
  138. package/lib/module/{input/createInputIcon.js → avatar/createAvatarBadge.js} +3 -3
  139. package/lib/module/avatar/createAvatarBadge.js.map +1 -0
  140. package/lib/module/avatar/createAvatarIcon.js +25 -0
  141. package/lib/module/avatar/createAvatarIcon.js.map +1 -0
  142. package/lib/module/avatar/createAvatarImage.js +46 -0
  143. package/lib/module/avatar/createAvatarImage.js.map +1 -0
  144. package/lib/module/avatar/createAvatarRoot.js +29 -0
  145. package/lib/module/avatar/createAvatarRoot.js.map +1 -0
  146. package/lib/module/avatar/createAvatarText.js +37 -0
  147. package/lib/module/avatar/createAvatarText.js.map +1 -0
  148. package/lib/module/avatar/index.js +26 -0
  149. package/lib/module/avatar/index.js.map +1 -0
  150. package/lib/module/avatar/types.js +4 -0
  151. package/lib/module/avatar/types.js.map +1 -0
  152. package/lib/module/button/index.js +19 -19
  153. package/lib/module/button/index.js.map +1 -1
  154. package/lib/module/checkbox/createCheckboxIcon.js +3 -2
  155. package/lib/module/checkbox/createCheckboxIcon.js.map +1 -1
  156. package/lib/module/checkbox/createCheckboxRoot.web.js +2 -0
  157. package/lib/module/checkbox/createCheckboxRoot.web.js.map +1 -1
  158. package/lib/module/checkbox/index.js +18 -19
  159. package/lib/module/checkbox/index.js.map +1 -1
  160. package/lib/module/dialog/context.js +5 -0
  161. package/lib/module/dialog/context.js.map +1 -0
  162. package/lib/module/dialog/createDialogBody.js +15 -0
  163. package/lib/module/dialog/createDialogBody.js.map +1 -0
  164. package/lib/module/dialog/createDialogClose.js +31 -0
  165. package/lib/module/dialog/createDialogClose.js.map +1 -0
  166. package/lib/module/dialog/createDialogContent.js +136 -0
  167. package/lib/module/dialog/createDialogContent.js.map +1 -0
  168. package/lib/module/dialog/createDialogDescription.js +24 -0
  169. package/lib/module/dialog/createDialogDescription.js.map +1 -0
  170. package/lib/module/dialog/createDialogFooter.js +15 -0
  171. package/lib/module/dialog/createDialogFooter.js.map +1 -0
  172. package/lib/module/dialog/createDialogHeader.js +15 -0
  173. package/lib/module/dialog/createDialogHeader.js.map +1 -0
  174. package/lib/module/dialog/createDialogRoot.js +49 -0
  175. package/lib/module/dialog/createDialogRoot.js.map +1 -0
  176. package/lib/module/dialog/createDialogTitle.js +15 -0
  177. package/lib/module/dialog/createDialogTitle.js.map +1 -0
  178. package/lib/module/dialog/createDialogTrigger.js +31 -0
  179. package/lib/module/dialog/createDialogTrigger.js.map +1 -0
  180. package/lib/module/dialog/index.js +45 -0
  181. package/lib/module/dialog/index.js.map +1 -0
  182. package/lib/module/dialog/types.js +4 -0
  183. package/lib/module/dialog/types.js.map +1 -0
  184. package/lib/module/field/createFieldError.js +35 -0
  185. package/lib/module/field/createFieldError.js.map +1 -0
  186. package/lib/module/field/createFieldErrorIcon.js +13 -0
  187. package/lib/module/field/createFieldErrorIcon.js.map +1 -0
  188. package/lib/module/field/createFieldErrorText.js +13 -0
  189. package/lib/module/field/createFieldErrorText.js.map +1 -0
  190. package/lib/module/field/createFieldHelper.js +35 -0
  191. package/lib/module/field/createFieldHelper.js.map +1 -0
  192. package/lib/module/field/createFieldHelperText.js +13 -0
  193. package/lib/module/field/createFieldHelperText.js.map +1 -0
  194. package/lib/module/field/createFieldLabel.js +31 -0
  195. package/lib/module/field/createFieldLabel.js.map +1 -0
  196. package/lib/module/field/createFieldRoot.js +29 -0
  197. package/lib/module/field/createFieldRoot.js.map +1 -0
  198. package/lib/module/field/index.js +42 -0
  199. package/lib/module/field/index.js.map +1 -0
  200. package/lib/module/field/types.js +4 -0
  201. package/lib/module/field/types.js.map +1 -0
  202. package/lib/module/form/createFormRoot.js +15 -0
  203. package/lib/module/form/createFormRoot.js.map +1 -0
  204. package/lib/module/form/index.js +11 -0
  205. package/lib/module/form/index.js.map +1 -0
  206. package/lib/module/form/types.js +4 -0
  207. package/lib/module/form/types.js.map +1 -0
  208. package/lib/module/index.js +8 -0
  209. package/lib/module/index.js.map +1 -1
  210. package/lib/module/input/createInputField.js +8 -3
  211. package/lib/module/input/createInputField.js.map +1 -1
  212. package/lib/module/input/index.js +12 -17
  213. package/lib/module/input/index.js.map +1 -1
  214. package/lib/module/link/LinkProvider.js +23 -0
  215. package/lib/module/link/LinkProvider.js.map +1 -0
  216. package/lib/module/link/createLink.js +68 -0
  217. package/lib/module/link/createLink.js.map +1 -0
  218. package/lib/module/link/index.js +6 -0
  219. package/lib/module/link/index.js.map +1 -0
  220. package/lib/module/link/types.js +4 -0
  221. package/lib/module/link/types.js.map +1 -0
  222. package/lib/module/link/useLink.js +52 -0
  223. package/lib/module/link/useLink.js.map +1 -0
  224. package/lib/module/otp-input/context.js +6 -0
  225. package/lib/module/otp-input/context.js.map +1 -0
  226. package/lib/module/otp-input/createOtpInputCell.js +24 -0
  227. package/lib/module/otp-input/createOtpInputCell.js.map +1 -0
  228. package/lib/module/otp-input/createOtpInputField.js +99 -0
  229. package/lib/module/otp-input/createOtpInputField.js.map +1 -0
  230. package/lib/module/otp-input/createOtpInputRoot.js +131 -0
  231. package/lib/module/otp-input/createOtpInputRoot.js.map +1 -0
  232. package/lib/module/otp-input/index.js +20 -0
  233. package/lib/module/otp-input/index.js.map +1 -0
  234. package/lib/module/otp-input/types.js +4 -0
  235. package/lib/module/otp-input/types.js.map +1 -0
  236. package/lib/module/otp-input/utils/applyValueChange.js +69 -0
  237. package/lib/module/otp-input/utils/applyValueChange.js.map +1 -0
  238. package/lib/module/otp-input/utils/filterValue.js +40 -0
  239. package/lib/module/otp-input/utils/filterValue.js.map +1 -0
  240. package/lib/module/overlay/OverlayContainer.js +8 -11
  241. package/lib/module/overlay/OverlayContainer.js.map +1 -1
  242. package/lib/module/overlay/index.js +1 -0
  243. package/lib/module/overlay/index.js.map +1 -1
  244. package/lib/module/overlay/useEscapeKey.js +10 -0
  245. package/lib/module/overlay/useEscapeKey.js.map +1 -0
  246. package/lib/module/overlay/useEscapeKey.web.js +27 -0
  247. package/lib/module/overlay/useEscapeKey.web.js.map +1 -0
  248. package/lib/module/progress/context.js +5 -0
  249. package/lib/module/progress/context.js.map +1 -0
  250. package/lib/module/progress/createProgressIndicator.js +37 -0
  251. package/lib/module/progress/createProgressIndicator.js.map +1 -0
  252. package/lib/module/progress/createProgressRoot.js +91 -0
  253. package/lib/module/progress/createProgressRoot.js.map +1 -0
  254. package/lib/module/progress/index.js +15 -0
  255. package/lib/module/progress/index.js.map +1 -0
  256. package/lib/module/progress/types.js +4 -0
  257. package/lib/module/progress/types.js.map +1 -0
  258. package/lib/module/select/context.js +4 -42
  259. package/lib/module/select/context.js.map +1 -1
  260. package/lib/module/select/createSelectItem.js +2 -2
  261. package/lib/module/select/createSelectItem.js.map +1 -1
  262. package/lib/module/select/createSelectRoot.js +10 -7
  263. package/lib/module/select/createSelectRoot.js.map +1 -1
  264. package/lib/module/select/createSelectTrigger.js +56 -15
  265. package/lib/module/select/createSelectTrigger.js.map +1 -1
  266. package/lib/module/utils/createPortal.js +19 -0
  267. package/lib/module/utils/createPortal.js.map +1 -0
  268. package/lib/module/utils/dataAttributes.web.js +1 -4
  269. package/lib/module/utils/dataAttributes.web.js.map +1 -1
  270. package/lib/typescript/avatar/context.d.ts +6 -0
  271. package/lib/typescript/avatar/context.d.ts.map +1 -0
  272. package/lib/typescript/avatar/createAvatarBadge.d.ts +4 -0
  273. package/lib/typescript/avatar/createAvatarBadge.d.ts.map +1 -0
  274. package/lib/typescript/avatar/createAvatarIcon.d.ts +4 -0
  275. package/lib/typescript/avatar/createAvatarIcon.d.ts.map +1 -0
  276. package/lib/typescript/avatar/createAvatarImage.d.ts +4 -0
  277. package/lib/typescript/avatar/createAvatarImage.d.ts.map +1 -0
  278. package/lib/typescript/avatar/createAvatarRoot.d.ts +4 -0
  279. package/lib/typescript/avatar/createAvatarRoot.d.ts.map +1 -0
  280. package/lib/typescript/avatar/createAvatarText.d.ts +4 -0
  281. package/lib/typescript/avatar/createAvatarText.d.ts.map +1 -0
  282. package/lib/typescript/avatar/index.d.ts +11 -0
  283. package/lib/typescript/avatar/index.d.ts.map +1 -0
  284. package/lib/typescript/avatar/types.d.ts +33 -0
  285. package/lib/typescript/avatar/types.d.ts.map +1 -0
  286. package/lib/typescript/button/index.d.ts +2 -1
  287. package/lib/typescript/button/index.d.ts.map +1 -1
  288. package/lib/typescript/checkbox/context.d.ts +2 -2
  289. package/lib/typescript/checkbox/createCheckboxRoot.web.d.ts.map +1 -1
  290. package/lib/typescript/checkbox/index.d.ts +3 -2
  291. package/lib/typescript/checkbox/index.d.ts.map +1 -1
  292. package/lib/typescript/checkbox/useCheckboxRoot.d.ts +8 -3
  293. package/lib/typescript/checkbox/useCheckboxRoot.d.ts.map +1 -1
  294. package/lib/typescript/dialog/context.d.ts +6 -0
  295. package/lib/typescript/dialog/context.d.ts.map +1 -0
  296. package/lib/typescript/dialog/createDialogBody.d.ts +4 -0
  297. package/lib/typescript/dialog/createDialogBody.d.ts.map +1 -0
  298. package/lib/typescript/dialog/createDialogClose.d.ts +4 -0
  299. package/lib/typescript/dialog/createDialogClose.d.ts.map +1 -0
  300. package/lib/typescript/dialog/createDialogContent.d.ts +4 -0
  301. package/lib/typescript/dialog/createDialogContent.d.ts.map +1 -0
  302. package/lib/typescript/dialog/createDialogDescription.d.ts +4 -0
  303. package/lib/typescript/dialog/createDialogDescription.d.ts.map +1 -0
  304. package/lib/typescript/dialog/createDialogFooter.d.ts +4 -0
  305. package/lib/typescript/dialog/createDialogFooter.d.ts.map +1 -0
  306. package/lib/typescript/dialog/createDialogHeader.d.ts +4 -0
  307. package/lib/typescript/dialog/createDialogHeader.d.ts.map +1 -0
  308. package/lib/typescript/dialog/createDialogRoot.d.ts +4 -0
  309. package/lib/typescript/dialog/createDialogRoot.d.ts.map +1 -0
  310. package/lib/typescript/dialog/createDialogTitle.d.ts +4 -0
  311. package/lib/typescript/dialog/createDialogTitle.d.ts.map +1 -0
  312. package/lib/typescript/dialog/createDialogTrigger.d.ts +4 -0
  313. package/lib/typescript/dialog/createDialogTrigger.d.ts.map +1 -0
  314. package/lib/typescript/dialog/index.d.ts +18 -0
  315. package/lib/typescript/dialog/index.d.ts.map +1 -0
  316. package/lib/typescript/dialog/types.d.ts +52 -0
  317. package/lib/typescript/dialog/types.d.ts.map +1 -0
  318. package/lib/typescript/field/createFieldError.d.ts +5 -0
  319. package/lib/typescript/field/createFieldError.d.ts.map +1 -0
  320. package/lib/typescript/field/createFieldErrorIcon.d.ts +5 -0
  321. package/lib/typescript/field/createFieldErrorIcon.d.ts.map +1 -0
  322. package/lib/typescript/field/createFieldErrorText.d.ts +5 -0
  323. package/lib/typescript/field/createFieldErrorText.d.ts.map +1 -0
  324. package/lib/typescript/field/createFieldHelper.d.ts +5 -0
  325. package/lib/typescript/field/createFieldHelper.d.ts.map +1 -0
  326. package/lib/typescript/field/createFieldHelperText.d.ts +5 -0
  327. package/lib/typescript/field/createFieldHelperText.d.ts.map +1 -0
  328. package/lib/typescript/field/createFieldLabel.d.ts +6 -0
  329. package/lib/typescript/field/createFieldLabel.d.ts.map +1 -0
  330. package/lib/typescript/field/createFieldRoot.d.ts +6 -0
  331. package/lib/typescript/field/createFieldRoot.d.ts.map +1 -0
  332. package/lib/typescript/field/index.d.ts +13 -0
  333. package/lib/typescript/field/index.d.ts.map +1 -0
  334. package/lib/typescript/field/types.d.ts +63 -0
  335. package/lib/typescript/field/types.d.ts.map +1 -0
  336. package/lib/typescript/form/createFormRoot.d.ts +4 -0
  337. package/lib/typescript/form/createFormRoot.d.ts.map +1 -0
  338. package/lib/typescript/form/index.d.ts +6 -0
  339. package/lib/typescript/form/index.d.ts.map +1 -0
  340. package/lib/typescript/form/types.d.ts +14 -0
  341. package/lib/typescript/form/types.d.ts.map +1 -0
  342. package/lib/typescript/index.d.ts +8 -0
  343. package/lib/typescript/index.d.ts.map +1 -1
  344. package/lib/typescript/input/createInputField.d.ts.map +1 -1
  345. package/lib/typescript/input/index.d.ts +3 -3
  346. package/lib/typescript/input/index.d.ts.map +1 -1
  347. package/lib/typescript/input/types.d.ts +1 -2
  348. package/lib/typescript/input/types.d.ts.map +1 -1
  349. package/lib/typescript/link/LinkProvider.d.ts +36 -0
  350. package/lib/typescript/link/LinkProvider.d.ts.map +1 -0
  351. package/lib/typescript/link/createLink.d.ts +6 -0
  352. package/lib/typescript/link/createLink.d.ts.map +1 -0
  353. package/lib/typescript/link/index.d.ts +6 -0
  354. package/lib/typescript/link/index.d.ts.map +1 -0
  355. package/lib/typescript/link/types.d.ts +45 -0
  356. package/lib/typescript/link/types.d.ts.map +1 -0
  357. package/lib/typescript/link/useLink.d.ts +9 -0
  358. package/lib/typescript/link/useLink.d.ts.map +1 -0
  359. package/lib/typescript/otp-input/context.d.ts +10 -0
  360. package/lib/typescript/otp-input/context.d.ts.map +1 -0
  361. package/lib/typescript/otp-input/createOtpInputCell.d.ts +4 -0
  362. package/lib/typescript/otp-input/createOtpInputCell.d.ts.map +1 -0
  363. package/lib/typescript/otp-input/createOtpInputField.d.ts +4 -0
  364. package/lib/typescript/otp-input/createOtpInputField.d.ts.map +1 -0
  365. package/lib/typescript/otp-input/createOtpInputRoot.d.ts +4 -0
  366. package/lib/typescript/otp-input/createOtpInputRoot.d.ts.map +1 -0
  367. package/lib/typescript/otp-input/index.d.ts +11 -0
  368. package/lib/typescript/otp-input/index.d.ts.map +1 -0
  369. package/lib/typescript/otp-input/types.d.ts +75 -0
  370. package/lib/typescript/otp-input/types.d.ts.map +1 -0
  371. package/lib/typescript/otp-input/utils/applyValueChange.d.ts +10 -0
  372. package/lib/typescript/otp-input/utils/applyValueChange.d.ts.map +1 -0
  373. package/lib/typescript/otp-input/utils/filterValue.d.ts +7 -0
  374. package/lib/typescript/otp-input/utils/filterValue.d.ts.map +1 -0
  375. package/lib/typescript/overlay/OverlayContainer.d.ts +5 -1
  376. package/lib/typescript/overlay/OverlayContainer.d.ts.map +1 -1
  377. package/lib/typescript/overlay/index.d.ts +1 -0
  378. package/lib/typescript/overlay/index.d.ts.map +1 -1
  379. package/lib/typescript/overlay/useEscapeKey.d.ts +6 -0
  380. package/lib/typescript/overlay/useEscapeKey.d.ts.map +1 -0
  381. package/lib/typescript/overlay/useEscapeKey.web.d.ts +6 -0
  382. package/lib/typescript/overlay/useEscapeKey.web.d.ts.map +1 -0
  383. package/lib/typescript/progress/context.d.ts +13 -0
  384. package/lib/typescript/progress/context.d.ts.map +1 -0
  385. package/lib/typescript/progress/createProgressIndicator.d.ts +3 -0
  386. package/lib/typescript/progress/createProgressIndicator.d.ts.map +1 -0
  387. package/lib/typescript/progress/createProgressRoot.d.ts +4 -0
  388. package/lib/typescript/progress/createProgressRoot.d.ts.map +1 -0
  389. package/lib/typescript/progress/index.d.ts +10 -0
  390. package/lib/typescript/progress/index.d.ts.map +1 -0
  391. package/lib/typescript/progress/types.d.ts +25 -0
  392. package/lib/typescript/progress/types.d.ts.map +1 -0
  393. package/lib/typescript/select/context.d.ts +14 -7
  394. package/lib/typescript/select/context.d.ts.map +1 -1
  395. package/lib/typescript/select/createSelectRoot.d.ts.map +1 -1
  396. package/lib/typescript/select/createSelectTrigger.d.ts +2 -7
  397. package/lib/typescript/select/createSelectTrigger.d.ts.map +1 -1
  398. package/lib/typescript/select/types.d.ts +4 -1
  399. package/lib/typescript/select/types.d.ts.map +1 -1
  400. package/lib/typescript/utils/createPortal.d.ts +11 -0
  401. package/lib/typescript/utils/createPortal.d.ts.map +1 -0
  402. package/lib/typescript/utils/dataAttributes.web.d.ts.map +1 -1
  403. package/package.json +8 -3
  404. package/src/avatar/context.tsx +5 -0
  405. package/src/avatar/createAvatarBadge.tsx +12 -0
  406. package/src/avatar/createAvatarIcon.tsx +16 -0
  407. package/src/avatar/createAvatarImage.tsx +40 -0
  408. package/src/avatar/createAvatarRoot.tsx +23 -0
  409. package/src/avatar/createAvatarText.tsx +30 -0
  410. package/src/avatar/index.ts +43 -0
  411. package/src/avatar/types.ts +77 -0
  412. package/src/button/index.tsx +19 -19
  413. package/src/checkbox/createCheckboxIcon.tsx +2 -2
  414. package/src/checkbox/createCheckboxRoot.web.tsx +2 -0
  415. package/src/checkbox/index.ts +20 -20
  416. package/src/dialog/context.tsx +4 -0
  417. package/src/dialog/createDialogBody.tsx +11 -0
  418. package/src/dialog/createDialogClose.tsx +27 -0
  419. package/src/dialog/createDialogContent.tsx +122 -0
  420. package/src/dialog/createDialogDescription.tsx +20 -0
  421. package/src/dialog/createDialogFooter.tsx +11 -0
  422. package/src/dialog/createDialogHeader.tsx +11 -0
  423. package/src/dialog/createDialogRoot.tsx +66 -0
  424. package/src/dialog/createDialogTitle.tsx +11 -0
  425. package/src/dialog/createDialogTrigger.tsx +27 -0
  426. package/src/dialog/index.tsx +93 -0
  427. package/src/dialog/types.ts +88 -0
  428. package/src/field/createFieldError.tsx +32 -0
  429. package/src/field/createFieldErrorIcon.tsx +9 -0
  430. package/src/field/createFieldErrorText.tsx +9 -0
  431. package/src/field/createFieldHelper.tsx +28 -0
  432. package/src/field/createFieldHelperText.tsx +9 -0
  433. package/src/field/createFieldLabel.tsx +30 -0
  434. package/src/field/createFieldRoot.tsx +27 -0
  435. package/src/field/index.tsx +68 -0
  436. package/src/field/types.tsx +78 -0
  437. package/src/form/createFormRoot.tsx +13 -0
  438. package/src/form/index.tsx +12 -0
  439. package/src/form/types.tsx +16 -0
  440. package/src/index.ts +8 -0
  441. package/src/input/createInputField.tsx +13 -3
  442. package/src/input/index.tsx +15 -28
  443. package/src/input/types.ts +0 -4
  444. package/src/link/LinkProvider.tsx +50 -0
  445. package/src/link/createLink.tsx +71 -0
  446. package/src/link/index.tsx +5 -0
  447. package/src/link/types.ts +47 -0
  448. package/src/link/useLink.ts +54 -0
  449. package/src/otp-input/context.tsx +8 -0
  450. package/src/otp-input/createOtpInputCell.tsx +22 -0
  451. package/src/otp-input/createOtpInputField.tsx +98 -0
  452. package/src/otp-input/createOtpInputRoot.tsx +179 -0
  453. package/src/otp-input/index.tsx +34 -0
  454. package/src/otp-input/types.ts +92 -0
  455. package/src/otp-input/utils/applyValueChange.ts +56 -0
  456. package/src/otp-input/utils/filterValue.ts +37 -0
  457. package/src/overlay/OverlayContainer.tsx +9 -18
  458. package/src/overlay/index.ts +1 -0
  459. package/src/overlay/useEscapeKey.ts +7 -0
  460. package/src/overlay/useEscapeKey.web.ts +27 -0
  461. package/src/progress/context.tsx +13 -0
  462. package/src/progress/createProgressIndicator.tsx +35 -0
  463. package/src/progress/createProgressRoot.tsx +109 -0
  464. package/src/progress/index.ts +28 -0
  465. package/src/progress/types.ts +37 -0
  466. package/src/select/context.tsx +9 -44
  467. package/src/select/createSelectItem.tsx +3 -3
  468. package/src/select/createSelectRoot.tsx +10 -6
  469. package/src/select/createSelectTrigger.tsx +62 -36
  470. package/src/select/types.ts +4 -1
  471. package/src/utils/createPortal.ts +20 -0
  472. package/src/utils/dataAttributes.web.ts +2 -4
  473. package/lib/commonjs/input/createInputIcon.js +0 -20
  474. package/lib/commonjs/input/createInputIcon.js.map +0 -1
  475. package/lib/module/input/createInputIcon.js.map +0 -1
  476. package/lib/typescript/input/createInputIcon.d.ts +0 -4
  477. package/lib/typescript/input/createInputIcon.d.ts.map +0 -1
  478. package/src/input/createInputIcon.tsx +0 -12
@@ -0,0 +1,88 @@
1
+ import type { PropsWithoutRef, RefAttributes } from 'react';
2
+ import type { PressableProps, TextProps, ViewProps } from 'react-native';
3
+
4
+ export interface IDialogContextType {
5
+ readonly open: boolean;
6
+ readonly onOpenChange: (open: boolean) => void;
7
+ readonly closeOnBackdropPress: boolean;
8
+ readonly closeOnEscKey: boolean;
9
+ readonly nativeID: string;
10
+ readonly role: 'dialog' | 'alertdialog';
11
+ }
12
+
13
+ export interface IDialogRootProps {
14
+ readonly open?: boolean;
15
+ readonly onOpenChange?: (open: boolean) => void;
16
+ readonly defaultOpen?: boolean;
17
+ readonly closeOnBackdropPress?: boolean;
18
+ readonly closeOnEscKey?: boolean;
19
+ readonly role?: 'dialog' | 'alertdialog';
20
+ readonly children: React.ReactNode;
21
+ }
22
+
23
+ export interface IDialogTriggerProps extends PressableProps {
24
+ readonly asChild?: boolean;
25
+ }
26
+
27
+ export interface IDialogContentProps extends ViewProps {
28
+ readonly forceMount?: boolean;
29
+ }
30
+
31
+ export interface IDialogOverlayProps extends PressableProps {}
32
+
33
+ export interface IDialogHeaderProps extends ViewProps {}
34
+
35
+ export interface IDialogTitleProps extends TextProps {}
36
+
37
+ export interface IDialogDescriptionProps extends TextProps {}
38
+
39
+ export interface IDialogBodyProps extends ViewProps {}
40
+
41
+ export interface IDialogFooterProps extends ViewProps {}
42
+
43
+ export interface IDialogCloseProps extends PressableProps {
44
+ readonly asChild?: boolean;
45
+ readonly accessibilityLabel?: string;
46
+ }
47
+
48
+ export type IDialogComponentType<
49
+ RootProps,
50
+ TriggerProps,
51
+ ContentProps,
52
+ HeaderProps,
53
+ TitleProps,
54
+ DescriptionProps,
55
+ BodyProps,
56
+ FooterProps,
57
+ CloseProps,
58
+ ContentRef = unknown,
59
+ TriggerRef = unknown,
60
+ CloseRef = unknown,
61
+ > = React.ForwardRefExoticComponent<
62
+ PropsWithoutRef<RootProps & IDialogRootProps> & RefAttributes<unknown>
63
+ > & {
64
+ Trigger: React.ForwardRefExoticComponent<
65
+ PropsWithoutRef<TriggerProps & IDialogTriggerProps> & RefAttributes<TriggerRef>
66
+ >;
67
+ Content: React.ForwardRefExoticComponent<
68
+ PropsWithoutRef<ContentProps & IDialogContentProps> & RefAttributes<ContentRef>
69
+ >;
70
+ Header: React.ForwardRefExoticComponent<
71
+ PropsWithoutRef<HeaderProps & IDialogHeaderProps> & RefAttributes<unknown>
72
+ >;
73
+ Title: React.ForwardRefExoticComponent<
74
+ PropsWithoutRef<TitleProps & IDialogTitleProps> & RefAttributes<unknown>
75
+ >;
76
+ Description: React.ForwardRefExoticComponent<
77
+ PropsWithoutRef<DescriptionProps & IDialogDescriptionProps> & RefAttributes<unknown>
78
+ >;
79
+ Body: React.ForwardRefExoticComponent<
80
+ PropsWithoutRef<BodyProps & IDialogBodyProps> & RefAttributes<unknown>
81
+ >;
82
+ Footer: React.ForwardRefExoticComponent<
83
+ PropsWithoutRef<FooterProps & IDialogFooterProps> & RefAttributes<unknown>
84
+ >;
85
+ Close: React.ForwardRefExoticComponent<
86
+ PropsWithoutRef<CloseProps & IDialogCloseProps> & RefAttributes<CloseRef>
87
+ >;
88
+ };
@@ -0,0 +1,32 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { useFormControlContext } from '@cdx-ui/utils';
3
+
4
+ export const createFieldError = <T,>(BaseFormError: React.ComponentType<T>) =>
5
+ forwardRef<unknown, { children?: React.ReactNode }>(({ children, ...props }, ref) => {
6
+ const { isInvalid, feedbackId, setHasFeedbackText } = useFormControlContext();
7
+
8
+ const visible = Boolean(isInvalid && children);
9
+
10
+ React.useEffect(() => {
11
+ if (!visible) {
12
+ setHasFeedbackText?.(false);
13
+ return undefined;
14
+ }
15
+ setHasFeedbackText?.(true);
16
+ return () => {
17
+ setHasFeedbackText?.(false);
18
+ };
19
+ }, [setHasFeedbackText, visible]);
20
+
21
+ return visible ? (
22
+ <BaseFormError
23
+ ref={ref}
24
+ {...(props as T)}
25
+ id={feedbackId}
26
+ accessibilityRole="alert"
27
+ accessibilityLiveRegion="assertive"
28
+ >
29
+ {children}
30
+ </BaseFormError>
31
+ ) : null;
32
+ });
@@ -0,0 +1,9 @@
1
+ import type React from 'react';
2
+ import { forwardRef } from 'react';
3
+
4
+ export const createFieldErrorIcon = <T,>(BaseFormErrorIcon: React.ComponentType<T>) =>
5
+ forwardRef<unknown, { children?: React.ReactNode }>(({ children, ...props }, ref) => (
6
+ <BaseFormErrorIcon ref={ref} {...(props as T)}>
7
+ {children}
8
+ </BaseFormErrorIcon>
9
+ ));
@@ -0,0 +1,9 @@
1
+ import type React from 'react';
2
+ import { forwardRef } from 'react';
3
+
4
+ export const createFieldErrorText = <T,>(BaseFormErrorText: React.ComponentType<T>) =>
5
+ forwardRef<unknown, { children?: React.ReactNode }>(({ children, ...props }, ref) => (
6
+ <BaseFormErrorText ref={ref} {...(props as T)}>
7
+ {children}
8
+ </BaseFormErrorText>
9
+ ));
@@ -0,0 +1,28 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { useFormControlContext } from '@cdx-ui/utils';
3
+
4
+ export const createFieldHelper = <T,>(BaseFormHelper: React.ComponentType<T>) =>
5
+ forwardRef<unknown, { children?: React.ReactNode }>(({ children, ...props }, ref) => {
6
+ const { helpTextId, setHasHelpText, isInvalid } = useFormControlContext();
7
+
8
+ React.useEffect(() => {
9
+ if (isInvalid) {
10
+ setHasHelpText?.(false);
11
+ return undefined;
12
+ }
13
+ setHasHelpText?.(true);
14
+ return () => {
15
+ setHasHelpText?.(false);
16
+ };
17
+ }, [setHasHelpText, isInvalid]);
18
+
19
+ if (isInvalid) {
20
+ return null;
21
+ }
22
+
23
+ return (
24
+ <BaseFormHelper ref={ref} {...(props as T)} id={helpTextId}>
25
+ {children}
26
+ </BaseFormHelper>
27
+ );
28
+ });
@@ -0,0 +1,9 @@
1
+ import type React from 'react';
2
+ import { forwardRef } from 'react';
3
+
4
+ export const createFieldHelperText = <T,>(BaseFormHelperText: React.ComponentType<T>) =>
5
+ forwardRef<unknown, { children?: React.ReactNode }>(({ children, ...props }, ref) => (
6
+ <BaseFormHelperText ref={ref} {...(props as T)}>
7
+ {children}
8
+ </BaseFormHelperText>
9
+ ));
@@ -0,0 +1,30 @@
1
+ import type React from 'react';
2
+ import { forwardRef } from 'react';
3
+ import { useFormControlContext } from '@cdx-ui/utils';
4
+ import { dataAttributes } from '../utils/dataAttributes';
5
+ import type { IFieldLabelProps } from './types';
6
+
7
+ export const createFieldLabel = <T,>(BaseFormLabel: React.ComponentType<T>) =>
8
+ forwardRef<unknown, IFieldLabelProps & { children?: React.ReactNode }>(
9
+ ({ children, htmlFor: htmlForProp, requiredIndicator, ...props }, ref) => {
10
+ const field = useFormControlContext();
11
+ const fieldId = field.id;
12
+ const labelId = field.labelId;
13
+
14
+ /** Must match `useFormControl` default: `props.id ?? \`${field.id}-input\``. */
15
+ const htmlFor = htmlForProp ?? (fieldId ? `${fieldId}-input` : undefined);
16
+
17
+ return (
18
+ <BaseFormLabel
19
+ ref={ref}
20
+ {...(props as T)}
21
+ id={labelId}
22
+ htmlFor={htmlFor}
23
+ {...dataAttributes({ invalid: field.isInvalid, required: field.isRequired })}
24
+ >
25
+ {children}
26
+ {field.isRequired ? requiredIndicator : null}
27
+ </BaseFormLabel>
28
+ );
29
+ },
30
+ );
@@ -0,0 +1,27 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { useFormControlRoot, FormControlContext } from '@cdx-ui/utils';
3
+ import { dataAttributes } from '../utils/dataAttributes';
4
+ import type { IFieldRootProps } from './types';
5
+
6
+ export const createFieldRoot = <T,>(BaseFormField: React.ComponentType<T>) =>
7
+ forwardRef(
8
+ ({ children, ...props }: IFieldRootProps & { children?: React.ReactNode }, ref?: unknown) => {
9
+ const { htmlProps, ...context } = useFormControlRoot(props);
10
+
11
+ return (
12
+ <FormControlContext.Provider value={context}>
13
+ <BaseFormField
14
+ ref={ref}
15
+ {...(htmlProps as T)}
16
+ {...dataAttributes({
17
+ disabled: context.isDisabled,
18
+ invalid: context.isInvalid,
19
+ required: context.isRequired,
20
+ })}
21
+ >
22
+ {children}
23
+ </BaseFormField>
24
+ </FormControlContext.Provider>
25
+ );
26
+ },
27
+ );
@@ -0,0 +1,68 @@
1
+ import type React from 'react';
2
+ import { createFieldError } from './createFieldError';
3
+ import { createFieldErrorIcon } from './createFieldErrorIcon';
4
+ import { createFieldErrorText } from './createFieldErrorText';
5
+ import { createFieldRoot } from './createFieldRoot';
6
+ import { createFieldHelper } from './createFieldHelper';
7
+ import { createFieldHelperText } from './createFieldHelperText';
8
+ import { createFieldLabel } from './createFieldLabel';
9
+ import type { IFieldComponentType } from './types';
10
+
11
+ export type {
12
+ IFieldRootProps,
13
+ IFieldLabelProps,
14
+ IFieldHelperProps,
15
+ IFieldHelperTextProps,
16
+ IFieldErrorProps,
17
+ IFieldErrorTextProps,
18
+ IFieldErrorIconProps,
19
+ IFieldComponentType,
20
+ } from './types';
21
+
22
+ export function createField<Root, Label, Helper, HelperText, Error, ErrorText, ErrorIcon>({
23
+ Root,
24
+ Label,
25
+ Helper,
26
+ HelperText,
27
+ Error,
28
+ ErrorText,
29
+ ErrorIcon,
30
+ }: {
31
+ Root: React.ComponentType<Root>;
32
+ Label: React.ComponentType<Label>;
33
+ Helper: React.ComponentType<Helper>;
34
+ HelperText: React.ComponentType<HelperText>;
35
+ Error: React.ComponentType<Error>;
36
+ ErrorText: React.ComponentType<ErrorText>;
37
+ ErrorIcon: React.ComponentType<ErrorIcon>;
38
+ }) {
39
+ const FieldRoot = createFieldRoot(Root);
40
+ FieldRoot.displayName = 'FieldPrimitive';
41
+
42
+ const FieldLabel = createFieldLabel(Label);
43
+ FieldLabel.displayName = 'FieldPrimitive.Label';
44
+
45
+ const FieldHelper = createFieldHelper(Helper);
46
+ FieldHelper.displayName = 'FieldPrimitive.Helper';
47
+
48
+ const FieldHelperText = createFieldHelperText(HelperText);
49
+ FieldHelperText.displayName = 'FieldPrimitive.HelperText';
50
+
51
+ const FieldError = createFieldError(Error);
52
+ FieldError.displayName = 'FieldPrimitive.Error';
53
+
54
+ const FieldErrorText = createFieldErrorText(ErrorText);
55
+ FieldErrorText.displayName = 'FieldPrimitive.ErrorText';
56
+
57
+ const FieldErrorIcon = createFieldErrorIcon(ErrorIcon);
58
+ FieldErrorIcon.displayName = 'FieldPrimitive.ErrorIcon';
59
+
60
+ return Object.assign(FieldRoot, {
61
+ Label: FieldLabel,
62
+ Helper: FieldHelper,
63
+ HelperText: FieldHelperText,
64
+ Error: FieldError,
65
+ ErrorText: FieldErrorText,
66
+ ErrorIcon: FieldErrorIcon,
67
+ }) as IFieldComponentType<Root, Label, Helper, HelperText, Error, ErrorText, ErrorIcon>;
68
+ }
@@ -0,0 +1,78 @@
1
+ import type React from 'react';
2
+ import type { TextProps, ViewProps } from 'react-native';
3
+
4
+ /**
5
+ * Props for a single form field (`Form.Field`).
6
+ * Provides field-level context (name, validation state, ids) to children.
7
+ *
8
+ * **Initial focus:** use `autoFocus` on `Input.Field` (or your control). `TextInput` / DOM
9
+ * inputs support it natively. Do not rely on `Form.Field` for autofocus — it does not forward
10
+ * to a single child.
11
+ *
12
+ * **Submit UX:** "focus first invalid on error" needs form-level validation state; not built in yet.
13
+ */
14
+ export interface IFieldRootProps extends ViewProps {
15
+ /** Unique id for this field. Auto-generated if not provided. */
16
+ readonly id?: string;
17
+ /**
18
+ * Field name for form submission. Passed through context so child inputs
19
+ * automatically receive it as their `name` attribute for `FormData` support.
20
+ */
21
+ readonly name?: string;
22
+ /** If true, the field is marked as invalid. Controls error visibility. */
23
+ readonly isInvalid?: boolean;
24
+ /** If true, the field is marked as required. Shows asterisk on label. */
25
+ readonly isRequired?: boolean;
26
+ /** If true, the field is disabled. */
27
+ readonly isDisabled?: boolean;
28
+ /** If true, the field is read-only. */
29
+ readonly isReadOnly?: boolean;
30
+ }
31
+
32
+ export interface IFieldLabelProps extends TextProps {
33
+ /**
34
+ * Associates the label with a control `id` on web (`<label htmlFor>`).
35
+ * If omitted, defaults to the same id `Input.Field` gets from form context: `fieldId + "-input"`.
36
+ */
37
+ readonly htmlFor?: string;
38
+ /**
39
+ * Element to render after the label text when the field is required.
40
+ * Rendered by the primitive (which owns the form-control context) so the
41
+ * styled layer never needs to read `FormControlContext` across packages.
42
+ */
43
+ readonly requiredIndicator?: React.ReactNode;
44
+ }
45
+
46
+ export interface IFieldHelperProps extends ViewProps {}
47
+
48
+ export interface IFieldHelperTextProps extends TextProps {}
49
+
50
+ export interface IFieldErrorProps extends ViewProps {}
51
+
52
+ export interface IFieldErrorTextProps extends TextProps {}
53
+
54
+ export interface IFieldErrorIconProps extends ViewProps {}
55
+
56
+ export type IFieldComponentType<Root, Label, Helper, HelperText, Error, ErrorText, ErrorIcon> =
57
+ React.ForwardRefExoticComponent<InnerForwardRefExoticComponent<Root> & IFieldRootProps> & {
58
+ Label: React.ForwardRefExoticComponent<
59
+ InnerForwardRefExoticComponent<Label> & IFieldLabelProps
60
+ >;
61
+ Helper: React.ForwardRefExoticComponent<
62
+ InnerForwardRefExoticComponent<Helper> & IFieldHelperProps
63
+ >;
64
+ HelperText: React.ForwardRefExoticComponent<
65
+ InnerForwardRefExoticComponent<HelperText> & IFieldHelperTextProps
66
+ >;
67
+ Error: React.ForwardRefExoticComponent<
68
+ InnerForwardRefExoticComponent<Error> & IFieldErrorProps
69
+ >;
70
+ ErrorText: React.ForwardRefExoticComponent<
71
+ InnerForwardRefExoticComponent<ErrorText> & IFieldErrorTextProps
72
+ >;
73
+ ErrorIcon: React.ForwardRefExoticComponent<
74
+ InnerForwardRefExoticComponent<ErrorIcon> & IFieldErrorIconProps
75
+ >;
76
+ };
77
+
78
+ type InnerForwardRefExoticComponent<T> = React.PropsWithoutRef<T> & React.RefAttributes<unknown>;
@@ -0,0 +1,13 @@
1
+ import React, { forwardRef } from 'react';
2
+ import type { IFormRootProps, IFormComponentType } from './types';
3
+
4
+ // TODO: Handle web submission (button type submit)
5
+
6
+ export const createFormRoot = <T,>(BaseFormRoot: React.ComponentType<T>): IFormComponentType<T> =>
7
+ forwardRef(
8
+ ({ children, ...props }: IFormRootProps & { children?: React.ReactNode }, ref?: unknown) => (
9
+ <BaseFormRoot ref={ref} {...(props as T)}>
10
+ {children}
11
+ </BaseFormRoot>
12
+ ),
13
+ );
@@ -0,0 +1,12 @@
1
+ import type React from 'react';
2
+ import { createFormRoot } from './createFormRoot';
3
+
4
+ export type { IFormRootProps, IFormComponentType } from './types';
5
+
6
+ export function createForm<Root>({ Root }: { Root: React.ComponentType<Root> }) {
7
+ const FormRoot = createFormRoot(Root);
8
+
9
+ FormRoot.displayName = 'FormPrimitive';
10
+
11
+ return FormRoot;
12
+ }
@@ -0,0 +1,16 @@
1
+ import type React from 'react';
2
+
3
+ /**
4
+ * Props for the Form container (`<form>` on web, `<View>` on RN).
5
+ * Does NOT provide field-level context — use `Form.Field` for that.
6
+ *
7
+ * Web-only submit props (`onSubmit`, `action`, `method`) belong in the
8
+ * platform-specific base component (`FormRoot.web.tsx`), not here.
9
+ */
10
+ export interface IFormRootProps {}
11
+
12
+ export type IFormComponentType<Root> = React.ForwardRefExoticComponent<
13
+ InnerForwardRefExoticComponent<Root> & IFormRootProps
14
+ >;
15
+
16
+ type InnerForwardRefExoticComponent<T> = React.PropsWithoutRef<T> & React.RefAttributes<unknown>;
package/src/index.ts CHANGED
@@ -1,7 +1,15 @@
1
+ export * from './avatar';
1
2
  export * from './button';
2
3
  export * from './checkbox';
4
+ export * from './dialog';
5
+ export * from './field';
6
+ export * from './form';
3
7
  export * from './input';
8
+ export * from './otp-input';
9
+ export * from './link';
4
10
  export { type EdgeInsets, OverlayInsetsProvider } from './overlay';
5
11
  export * from './select';
6
12
  export * from './switch';
13
+ export * from './progress';
7
14
  export type { InteractionState } from './types';
15
+ export { dataAttributes } from './utils/dataAttributes';
@@ -6,7 +6,7 @@ import {
6
6
  Platform,
7
7
  type TextInputKeyPressEvent,
8
8
  } from 'react-native';
9
- import { mergeRefs, useFormControl } from '@cdx-ui/utils';
9
+ import { mergeRefs, useFormControl, useFormControlContext } from '@cdx-ui/utils';
10
10
  import { dataAttributes } from '../utils/dataAttributes';
11
11
  import { useInputContext } from './context';
12
12
  import type { IInputProps } from './types';
@@ -18,7 +18,8 @@ export const createInputField = <T,>(BaseInputField: React.ComponentType<T>) =>
18
18
  children,
19
19
  onKeyPress,
20
20
  type = 'text',
21
- 'aria-label': ariaLabel = 'Input Field',
21
+ accessibilityLabel,
22
+ 'aria-label': ariaLabelProp,
22
23
  secureTextEntry,
23
24
  editable,
24
25
  disabled,
@@ -46,15 +47,22 @@ export const createInputField = <T,>(BaseInputField: React.ComponentType<T>) =>
46
47
  id: props.id,
47
48
  });
48
49
 
50
+ const field = useFormControlContext();
51
+
49
52
  const handleFocus = (focusState: boolean, callback: any) => {
50
53
  setIsFocused(focusState);
51
54
  callback();
52
55
  };
53
56
 
54
- const mergedRef = mergeRefs(ref, inputFieldRef);
57
+ const mergedRef =
58
+ Platform.OS === 'web'
59
+ ? mergeRefs(ref, inputFieldRef)
60
+ : mergeRefs(ref, inputFieldRef, field.inputRef);
55
61
 
56
62
  const isEffectivelyDisabled = isDisabled || inputProps.disabled;
57
63
 
64
+ const ariaLabel = accessibilityLabel ?? ariaLabelProp;
65
+
58
66
  const editableProp = useMemo(() => {
59
67
  if (editable !== undefined) {
60
68
  return editable;
@@ -64,6 +72,7 @@ export const createInputField = <T,>(BaseInputField: React.ComponentType<T>) =>
64
72
 
65
73
  return (
66
74
  <BaseInputField
75
+ {...inputProps}
67
76
  {...(props as T)}
68
77
  type={type}
69
78
  {...dataAttributes({
@@ -78,6 +87,7 @@ export const createInputField = <T,>(BaseInputField: React.ComponentType<T>) =>
78
87
  disabled={isEffectivelyDisabled}
79
88
  secureTextEntry={secureTextEntry || type === 'password'}
80
89
  accessible
90
+ accessibilityLabel={ariaLabel}
81
91
  aria-label={ariaLabel}
82
92
  aria-required={isRequired || inputProps.required}
83
93
  aria-invalid={isInvalid || inputProps['aria-invalid']}
@@ -1,5 +1,5 @@
1
+ import type React from 'react';
1
2
  import { createInputField } from './createInputField';
2
- import { createInputIcon } from './createInputIcon';
3
3
  import { createInputRoot } from './createInputRoot';
4
4
  import { createInputSlot } from './createInputSlot';
5
5
  import type { IInputComponentType } from './types';
@@ -12,40 +12,27 @@ export type {
12
12
  IInputSlotProps,
13
13
  } from './types';
14
14
 
15
- export const createInput = <
15
+ export function createInput<
16
16
  RootProps,
17
- IconProps,
18
17
  SlotProps,
19
18
  FieldProps,
20
19
  RootRef = unknown,
21
20
  FieldRef = unknown,
22
- >({
23
- Root,
24
- Icon,
25
- Slot,
26
- Field,
27
- }: {
21
+ >(BaseComponents: {
28
22
  Root: React.ComponentType<RootProps>;
29
- Icon: React.ComponentType<IconProps>;
30
23
  Slot: React.ComponentType<SlotProps>;
31
24
  Field: React.ComponentType<FieldProps>;
32
- }) => {
33
- const Input = createInputRoot(Root) as any;
34
- Input.Icon = createInputIcon(Icon);
35
- Input.Slot = createInputSlot(Slot);
36
- Input.Field = createInputField(Field);
25
+ }) {
26
+ const Input = createInputRoot(BaseComponents.Root);
27
+ const Slot = createInputSlot(BaseComponents.Slot);
28
+ const Field = createInputField(BaseComponents.Field);
37
29
 
38
- Input.displayName = 'Input';
39
- Input.Icon.displayName = 'Input.Icon';
40
- Input.Slot.displayName = 'Input.Slot';
41
- Input.Field.displayName = 'Input.Field';
30
+ Input.displayName = 'InputPrimitive';
31
+ Slot.displayName = 'InputPrimitive.Slot';
32
+ Field.displayName = 'InputPrimitive.Field';
42
33
 
43
- return Input as IInputComponentType<
44
- RootProps,
45
- IconProps,
46
- SlotProps,
47
- FieldProps,
48
- RootRef,
49
- FieldRef
50
- >;
51
- };
34
+ return Object.assign(Input, {
35
+ Slot,
36
+ Field,
37
+ }) as IInputComponentType<RootProps, SlotProps, FieldProps, RootRef, FieldRef>;
38
+ }
@@ -93,7 +93,6 @@ export interface IInputSlotProps extends ViewProps {
93
93
 
94
94
  export type IInputComponentType<
95
95
  RootProps,
96
- IconProps,
97
96
  SlotProps,
98
97
  FieldProps,
99
98
  RootRef = unknown,
@@ -101,9 +100,6 @@ export type IInputComponentType<
101
100
  > = React.ForwardRefExoticComponent<
102
101
  React.PropsWithoutRef<RootProps & IInputFieldProps> & React.RefAttributes<RootRef>
103
102
  > & {
104
- Icon: React.ForwardRefExoticComponent<
105
- React.PropsWithoutRef<IconProps> & React.RefAttributes<unknown>
106
- >;
107
103
  Slot: React.ForwardRefExoticComponent<
108
104
  React.PropsWithoutRef<SlotProps & IInputSlotProps> & React.RefAttributes<unknown>
109
105
  >;
@@ -0,0 +1,50 @@
1
+ import { createContext, useContext, type ReactNode } from 'react';
2
+ import type { LinkAction } from './types';
3
+
4
+ export interface LinkConfig {
5
+ /**
6
+ * Global navigation handler for `<Link>` instances whose `href` passes the
7
+ * `shouldNavigate` check. Called with the `href` and the per-instance `action`.
8
+ *
9
+ * @param href - The URL or path to navigate to.
10
+ * @param action - Navigation intent from the per-instance `action` prop:
11
+ * `'navigate'` (default) — smart navigation, avoids duplicates.
12
+ * `'push'` — always pushes a new entry onto the stack.
13
+ * `'replace'` — replaces the current entry without stacking.
14
+ */
15
+ navigate: (href: string, action: LinkAction) => void | Promise<void>;
16
+
17
+ /**
18
+ * Optional predicate evaluated at **render time** to decide whether the
19
+ * provider should handle a given `href`.
20
+ *
21
+ * - Returns `true` → the provider's `navigate` is called on press;
22
+ * on web the native `<a href>` is **removed** so the browser doesn't
23
+ * follow the link.
24
+ * - Returns `false` → the provider is bypassed; on web the `<a href>` is
25
+ * preserved (cmd-click, SEO, etc.); on native `Linking.openURL` is used.
26
+ *
27
+ * Defaults to `() => true` when omitted (all hrefs go through the provider).
28
+ */
29
+ shouldNavigate?: (href: string) => boolean;
30
+ }
31
+
32
+ const LinkConfigContext = createContext<LinkConfig | undefined>(undefined);
33
+
34
+ export function LinkProvider({
35
+ navigate,
36
+ shouldNavigate,
37
+ children,
38
+ }: LinkConfig & { children: ReactNode }) {
39
+ return (
40
+ <LinkConfigContext.Provider value={{ navigate, shouldNavigate }}>
41
+ {children}
42
+ </LinkConfigContext.Provider>
43
+ );
44
+ }
45
+
46
+ LinkProvider.displayName = 'LinkProvider';
47
+
48
+ export function useLinkConfig(): LinkConfig | undefined {
49
+ return useContext(LinkConfigContext);
50
+ }