@cdx-ui/primitives 0.0.1-alpha.8 → 0.0.1-beta.1

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 (499) 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 +105 -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/switch/createSwitchRoot.js +73 -0
  133. package/lib/commonjs/switch/createSwitchRoot.js.map +1 -0
  134. package/lib/commonjs/switch/index.js +15 -0
  135. package/lib/commonjs/switch/index.js.map +1 -0
  136. package/lib/commonjs/switch/types.js +6 -0
  137. package/lib/commonjs/switch/types.js.map +1 -0
  138. package/lib/commonjs/utils/createPortal.js +23 -0
  139. package/lib/commonjs/utils/createPortal.js.map +1 -0
  140. package/lib/commonjs/utils/dataAttributes.web.js +1 -4
  141. package/lib/commonjs/utils/dataAttributes.web.js.map +1 -1
  142. package/lib/module/avatar/context.js +5 -0
  143. package/lib/module/avatar/context.js.map +1 -0
  144. package/lib/module/{input/createInputIcon.js → avatar/createAvatarBadge.js} +3 -3
  145. package/lib/module/avatar/createAvatarBadge.js.map +1 -0
  146. package/lib/module/avatar/createAvatarIcon.js +25 -0
  147. package/lib/module/avatar/createAvatarIcon.js.map +1 -0
  148. package/lib/module/avatar/createAvatarImage.js +46 -0
  149. package/lib/module/avatar/createAvatarImage.js.map +1 -0
  150. package/lib/module/avatar/createAvatarRoot.js +29 -0
  151. package/lib/module/avatar/createAvatarRoot.js.map +1 -0
  152. package/lib/module/avatar/createAvatarText.js +37 -0
  153. package/lib/module/avatar/createAvatarText.js.map +1 -0
  154. package/lib/module/avatar/index.js +26 -0
  155. package/lib/module/avatar/index.js.map +1 -0
  156. package/lib/module/avatar/types.js +4 -0
  157. package/lib/module/avatar/types.js.map +1 -0
  158. package/lib/module/button/index.js +19 -19
  159. package/lib/module/button/index.js.map +1 -1
  160. package/lib/module/checkbox/createCheckboxIcon.js +3 -2
  161. package/lib/module/checkbox/createCheckboxIcon.js.map +1 -1
  162. package/lib/module/checkbox/createCheckboxRoot.web.js +2 -0
  163. package/lib/module/checkbox/createCheckboxRoot.web.js.map +1 -1
  164. package/lib/module/checkbox/index.js +18 -19
  165. package/lib/module/checkbox/index.js.map +1 -1
  166. package/lib/module/dialog/context.js +5 -0
  167. package/lib/module/dialog/context.js.map +1 -0
  168. package/lib/module/dialog/createDialogBody.js +15 -0
  169. package/lib/module/dialog/createDialogBody.js.map +1 -0
  170. package/lib/module/dialog/createDialogClose.js +31 -0
  171. package/lib/module/dialog/createDialogClose.js.map +1 -0
  172. package/lib/module/dialog/createDialogContent.js +136 -0
  173. package/lib/module/dialog/createDialogContent.js.map +1 -0
  174. package/lib/module/dialog/createDialogDescription.js +24 -0
  175. package/lib/module/dialog/createDialogDescription.js.map +1 -0
  176. package/lib/module/dialog/createDialogFooter.js +15 -0
  177. package/lib/module/dialog/createDialogFooter.js.map +1 -0
  178. package/lib/module/dialog/createDialogHeader.js +15 -0
  179. package/lib/module/dialog/createDialogHeader.js.map +1 -0
  180. package/lib/module/dialog/createDialogRoot.js +49 -0
  181. package/lib/module/dialog/createDialogRoot.js.map +1 -0
  182. package/lib/module/dialog/createDialogTitle.js +15 -0
  183. package/lib/module/dialog/createDialogTitle.js.map +1 -0
  184. package/lib/module/dialog/createDialogTrigger.js +31 -0
  185. package/lib/module/dialog/createDialogTrigger.js.map +1 -0
  186. package/lib/module/dialog/index.js +45 -0
  187. package/lib/module/dialog/index.js.map +1 -0
  188. package/lib/module/dialog/types.js +4 -0
  189. package/lib/module/dialog/types.js.map +1 -0
  190. package/lib/module/field/createFieldError.js +35 -0
  191. package/lib/module/field/createFieldError.js.map +1 -0
  192. package/lib/module/field/createFieldErrorIcon.js +13 -0
  193. package/lib/module/field/createFieldErrorIcon.js.map +1 -0
  194. package/lib/module/field/createFieldErrorText.js +13 -0
  195. package/lib/module/field/createFieldErrorText.js.map +1 -0
  196. package/lib/module/field/createFieldHelper.js +35 -0
  197. package/lib/module/field/createFieldHelper.js.map +1 -0
  198. package/lib/module/field/createFieldHelperText.js +13 -0
  199. package/lib/module/field/createFieldHelperText.js.map +1 -0
  200. package/lib/module/field/createFieldLabel.js +31 -0
  201. package/lib/module/field/createFieldLabel.js.map +1 -0
  202. package/lib/module/field/createFieldRoot.js +29 -0
  203. package/lib/module/field/createFieldRoot.js.map +1 -0
  204. package/lib/module/field/index.js +42 -0
  205. package/lib/module/field/index.js.map +1 -0
  206. package/lib/module/field/types.js +4 -0
  207. package/lib/module/field/types.js.map +1 -0
  208. package/lib/module/form/createFormRoot.js +15 -0
  209. package/lib/module/form/createFormRoot.js.map +1 -0
  210. package/lib/module/form/index.js +11 -0
  211. package/lib/module/form/index.js.map +1 -0
  212. package/lib/module/form/types.js +4 -0
  213. package/lib/module/form/types.js.map +1 -0
  214. package/lib/module/index.js +9 -0
  215. package/lib/module/index.js.map +1 -1
  216. package/lib/module/input/createInputField.js +8 -3
  217. package/lib/module/input/createInputField.js.map +1 -1
  218. package/lib/module/input/index.js +12 -17
  219. package/lib/module/input/index.js.map +1 -1
  220. package/lib/module/link/LinkProvider.js +23 -0
  221. package/lib/module/link/LinkProvider.js.map +1 -0
  222. package/lib/module/link/createLink.js +68 -0
  223. package/lib/module/link/createLink.js.map +1 -0
  224. package/lib/module/link/index.js +6 -0
  225. package/lib/module/link/index.js.map +1 -0
  226. package/lib/module/link/types.js +4 -0
  227. package/lib/module/link/types.js.map +1 -0
  228. package/lib/module/link/useLink.js +52 -0
  229. package/lib/module/link/useLink.js.map +1 -0
  230. package/lib/module/otp-input/context.js +6 -0
  231. package/lib/module/otp-input/context.js.map +1 -0
  232. package/lib/module/otp-input/createOtpInputCell.js +24 -0
  233. package/lib/module/otp-input/createOtpInputCell.js.map +1 -0
  234. package/lib/module/otp-input/createOtpInputField.js +99 -0
  235. package/lib/module/otp-input/createOtpInputField.js.map +1 -0
  236. package/lib/module/otp-input/createOtpInputRoot.js +131 -0
  237. package/lib/module/otp-input/createOtpInputRoot.js.map +1 -0
  238. package/lib/module/otp-input/index.js +20 -0
  239. package/lib/module/otp-input/index.js.map +1 -0
  240. package/lib/module/otp-input/types.js +4 -0
  241. package/lib/module/otp-input/types.js.map +1 -0
  242. package/lib/module/otp-input/utils/applyValueChange.js +69 -0
  243. package/lib/module/otp-input/utils/applyValueChange.js.map +1 -0
  244. package/lib/module/otp-input/utils/filterValue.js +40 -0
  245. package/lib/module/otp-input/utils/filterValue.js.map +1 -0
  246. package/lib/module/overlay/OverlayContainer.js +8 -11
  247. package/lib/module/overlay/OverlayContainer.js.map +1 -1
  248. package/lib/module/overlay/index.js +1 -0
  249. package/lib/module/overlay/index.js.map +1 -1
  250. package/lib/module/overlay/useEscapeKey.js +10 -0
  251. package/lib/module/overlay/useEscapeKey.js.map +1 -0
  252. package/lib/module/overlay/useEscapeKey.web.js +27 -0
  253. package/lib/module/overlay/useEscapeKey.web.js.map +1 -0
  254. package/lib/module/progress/context.js +5 -0
  255. package/lib/module/progress/context.js.map +1 -0
  256. package/lib/module/progress/createProgressIndicator.js +37 -0
  257. package/lib/module/progress/createProgressIndicator.js.map +1 -0
  258. package/lib/module/progress/createProgressRoot.js +91 -0
  259. package/lib/module/progress/createProgressRoot.js.map +1 -0
  260. package/lib/module/progress/index.js +15 -0
  261. package/lib/module/progress/index.js.map +1 -0
  262. package/lib/module/progress/types.js +4 -0
  263. package/lib/module/progress/types.js.map +1 -0
  264. package/lib/module/select/context.js +4 -42
  265. package/lib/module/select/context.js.map +1 -1
  266. package/lib/module/select/createSelectItem.js +2 -2
  267. package/lib/module/select/createSelectItem.js.map +1 -1
  268. package/lib/module/select/createSelectRoot.js +10 -7
  269. package/lib/module/select/createSelectRoot.js.map +1 -1
  270. package/lib/module/select/createSelectTrigger.js +56 -15
  271. package/lib/module/select/createSelectTrigger.js.map +1 -1
  272. package/lib/module/switch/createSwitchRoot.js +67 -0
  273. package/lib/module/switch/createSwitchRoot.js.map +1 -0
  274. package/lib/module/switch/index.js +11 -0
  275. package/lib/module/switch/index.js.map +1 -0
  276. package/lib/module/switch/types.js +4 -0
  277. package/lib/module/switch/types.js.map +1 -0
  278. package/lib/module/utils/createPortal.js +19 -0
  279. package/lib/module/utils/createPortal.js.map +1 -0
  280. package/lib/module/utils/dataAttributes.web.js +1 -4
  281. package/lib/module/utils/dataAttributes.web.js.map +1 -1
  282. package/lib/typescript/avatar/context.d.ts +6 -0
  283. package/lib/typescript/avatar/context.d.ts.map +1 -0
  284. package/lib/typescript/avatar/createAvatarBadge.d.ts +4 -0
  285. package/lib/typescript/avatar/createAvatarBadge.d.ts.map +1 -0
  286. package/lib/typescript/avatar/createAvatarIcon.d.ts +4 -0
  287. package/lib/typescript/avatar/createAvatarIcon.d.ts.map +1 -0
  288. package/lib/typescript/avatar/createAvatarImage.d.ts +4 -0
  289. package/lib/typescript/avatar/createAvatarImage.d.ts.map +1 -0
  290. package/lib/typescript/avatar/createAvatarRoot.d.ts +4 -0
  291. package/lib/typescript/avatar/createAvatarRoot.d.ts.map +1 -0
  292. package/lib/typescript/avatar/createAvatarText.d.ts +4 -0
  293. package/lib/typescript/avatar/createAvatarText.d.ts.map +1 -0
  294. package/lib/typescript/avatar/index.d.ts +11 -0
  295. package/lib/typescript/avatar/index.d.ts.map +1 -0
  296. package/lib/typescript/avatar/types.d.ts +33 -0
  297. package/lib/typescript/avatar/types.d.ts.map +1 -0
  298. package/lib/typescript/button/index.d.ts +2 -1
  299. package/lib/typescript/button/index.d.ts.map +1 -1
  300. package/lib/typescript/checkbox/context.d.ts +2 -2
  301. package/lib/typescript/checkbox/createCheckboxRoot.web.d.ts.map +1 -1
  302. package/lib/typescript/checkbox/index.d.ts +3 -2
  303. package/lib/typescript/checkbox/index.d.ts.map +1 -1
  304. package/lib/typescript/checkbox/useCheckboxRoot.d.ts +8 -3
  305. package/lib/typescript/checkbox/useCheckboxRoot.d.ts.map +1 -1
  306. package/lib/typescript/dialog/context.d.ts +6 -0
  307. package/lib/typescript/dialog/context.d.ts.map +1 -0
  308. package/lib/typescript/dialog/createDialogBody.d.ts +4 -0
  309. package/lib/typescript/dialog/createDialogBody.d.ts.map +1 -0
  310. package/lib/typescript/dialog/createDialogClose.d.ts +4 -0
  311. package/lib/typescript/dialog/createDialogClose.d.ts.map +1 -0
  312. package/lib/typescript/dialog/createDialogContent.d.ts +4 -0
  313. package/lib/typescript/dialog/createDialogContent.d.ts.map +1 -0
  314. package/lib/typescript/dialog/createDialogDescription.d.ts +4 -0
  315. package/lib/typescript/dialog/createDialogDescription.d.ts.map +1 -0
  316. package/lib/typescript/dialog/createDialogFooter.d.ts +4 -0
  317. package/lib/typescript/dialog/createDialogFooter.d.ts.map +1 -0
  318. package/lib/typescript/dialog/createDialogHeader.d.ts +4 -0
  319. package/lib/typescript/dialog/createDialogHeader.d.ts.map +1 -0
  320. package/lib/typescript/dialog/createDialogRoot.d.ts +4 -0
  321. package/lib/typescript/dialog/createDialogRoot.d.ts.map +1 -0
  322. package/lib/typescript/dialog/createDialogTitle.d.ts +4 -0
  323. package/lib/typescript/dialog/createDialogTitle.d.ts.map +1 -0
  324. package/lib/typescript/dialog/createDialogTrigger.d.ts +4 -0
  325. package/lib/typescript/dialog/createDialogTrigger.d.ts.map +1 -0
  326. package/lib/typescript/dialog/index.d.ts +18 -0
  327. package/lib/typescript/dialog/index.d.ts.map +1 -0
  328. package/lib/typescript/dialog/types.d.ts +52 -0
  329. package/lib/typescript/dialog/types.d.ts.map +1 -0
  330. package/lib/typescript/field/createFieldError.d.ts +5 -0
  331. package/lib/typescript/field/createFieldError.d.ts.map +1 -0
  332. package/lib/typescript/field/createFieldErrorIcon.d.ts +5 -0
  333. package/lib/typescript/field/createFieldErrorIcon.d.ts.map +1 -0
  334. package/lib/typescript/field/createFieldErrorText.d.ts +5 -0
  335. package/lib/typescript/field/createFieldErrorText.d.ts.map +1 -0
  336. package/lib/typescript/field/createFieldHelper.d.ts +5 -0
  337. package/lib/typescript/field/createFieldHelper.d.ts.map +1 -0
  338. package/lib/typescript/field/createFieldHelperText.d.ts +5 -0
  339. package/lib/typescript/field/createFieldHelperText.d.ts.map +1 -0
  340. package/lib/typescript/field/createFieldLabel.d.ts +6 -0
  341. package/lib/typescript/field/createFieldLabel.d.ts.map +1 -0
  342. package/lib/typescript/field/createFieldRoot.d.ts +6 -0
  343. package/lib/typescript/field/createFieldRoot.d.ts.map +1 -0
  344. package/lib/typescript/field/index.d.ts +13 -0
  345. package/lib/typescript/field/index.d.ts.map +1 -0
  346. package/lib/typescript/field/types.d.ts +63 -0
  347. package/lib/typescript/field/types.d.ts.map +1 -0
  348. package/lib/typescript/form/createFormRoot.d.ts +4 -0
  349. package/lib/typescript/form/createFormRoot.d.ts.map +1 -0
  350. package/lib/typescript/form/index.d.ts +6 -0
  351. package/lib/typescript/form/index.d.ts.map +1 -0
  352. package/lib/typescript/form/types.d.ts +14 -0
  353. package/lib/typescript/form/types.d.ts.map +1 -0
  354. package/lib/typescript/index.d.ts +9 -0
  355. package/lib/typescript/index.d.ts.map +1 -1
  356. package/lib/typescript/input/createInputField.d.ts.map +1 -1
  357. package/lib/typescript/input/index.d.ts +3 -3
  358. package/lib/typescript/input/index.d.ts.map +1 -1
  359. package/lib/typescript/input/types.d.ts +1 -2
  360. package/lib/typescript/input/types.d.ts.map +1 -1
  361. package/lib/typescript/link/LinkProvider.d.ts +36 -0
  362. package/lib/typescript/link/LinkProvider.d.ts.map +1 -0
  363. package/lib/typescript/link/createLink.d.ts +6 -0
  364. package/lib/typescript/link/createLink.d.ts.map +1 -0
  365. package/lib/typescript/link/index.d.ts +6 -0
  366. package/lib/typescript/link/index.d.ts.map +1 -0
  367. package/lib/typescript/link/types.d.ts +45 -0
  368. package/lib/typescript/link/types.d.ts.map +1 -0
  369. package/lib/typescript/link/useLink.d.ts +9 -0
  370. package/lib/typescript/link/useLink.d.ts.map +1 -0
  371. package/lib/typescript/otp-input/context.d.ts +10 -0
  372. package/lib/typescript/otp-input/context.d.ts.map +1 -0
  373. package/lib/typescript/otp-input/createOtpInputCell.d.ts +4 -0
  374. package/lib/typescript/otp-input/createOtpInputCell.d.ts.map +1 -0
  375. package/lib/typescript/otp-input/createOtpInputField.d.ts +4 -0
  376. package/lib/typescript/otp-input/createOtpInputField.d.ts.map +1 -0
  377. package/lib/typescript/otp-input/createOtpInputRoot.d.ts +4 -0
  378. package/lib/typescript/otp-input/createOtpInputRoot.d.ts.map +1 -0
  379. package/lib/typescript/otp-input/index.d.ts +11 -0
  380. package/lib/typescript/otp-input/index.d.ts.map +1 -0
  381. package/lib/typescript/otp-input/types.d.ts +75 -0
  382. package/lib/typescript/otp-input/types.d.ts.map +1 -0
  383. package/lib/typescript/otp-input/utils/applyValueChange.d.ts +10 -0
  384. package/lib/typescript/otp-input/utils/applyValueChange.d.ts.map +1 -0
  385. package/lib/typescript/otp-input/utils/filterValue.d.ts +7 -0
  386. package/lib/typescript/otp-input/utils/filterValue.d.ts.map +1 -0
  387. package/lib/typescript/overlay/OverlayContainer.d.ts +5 -1
  388. package/lib/typescript/overlay/OverlayContainer.d.ts.map +1 -1
  389. package/lib/typescript/overlay/index.d.ts +1 -0
  390. package/lib/typescript/overlay/index.d.ts.map +1 -1
  391. package/lib/typescript/overlay/useEscapeKey.d.ts +6 -0
  392. package/lib/typescript/overlay/useEscapeKey.d.ts.map +1 -0
  393. package/lib/typescript/overlay/useEscapeKey.web.d.ts +6 -0
  394. package/lib/typescript/overlay/useEscapeKey.web.d.ts.map +1 -0
  395. package/lib/typescript/progress/context.d.ts +13 -0
  396. package/lib/typescript/progress/context.d.ts.map +1 -0
  397. package/lib/typescript/progress/createProgressIndicator.d.ts +3 -0
  398. package/lib/typescript/progress/createProgressIndicator.d.ts.map +1 -0
  399. package/lib/typescript/progress/createProgressRoot.d.ts +4 -0
  400. package/lib/typescript/progress/createProgressRoot.d.ts.map +1 -0
  401. package/lib/typescript/progress/index.d.ts +10 -0
  402. package/lib/typescript/progress/index.d.ts.map +1 -0
  403. package/lib/typescript/progress/types.d.ts +25 -0
  404. package/lib/typescript/progress/types.d.ts.map +1 -0
  405. package/lib/typescript/select/context.d.ts +14 -7
  406. package/lib/typescript/select/context.d.ts.map +1 -1
  407. package/lib/typescript/select/createSelectRoot.d.ts.map +1 -1
  408. package/lib/typescript/select/createSelectTrigger.d.ts +2 -7
  409. package/lib/typescript/select/createSelectTrigger.d.ts.map +1 -1
  410. package/lib/typescript/select/types.d.ts +4 -1
  411. package/lib/typescript/select/types.d.ts.map +1 -1
  412. package/lib/typescript/switch/createSwitchRoot.d.ts +3 -0
  413. package/lib/typescript/switch/createSwitchRoot.d.ts.map +1 -0
  414. package/lib/typescript/switch/index.d.ts +7 -0
  415. package/lib/typescript/switch/index.d.ts.map +1 -0
  416. package/lib/typescript/switch/types.d.ts +38 -0
  417. package/lib/typescript/switch/types.d.ts.map +1 -0
  418. package/lib/typescript/utils/createPortal.d.ts +11 -0
  419. package/lib/typescript/utils/createPortal.d.ts.map +1 -0
  420. package/lib/typescript/utils/dataAttributes.web.d.ts.map +1 -1
  421. package/package.json +8 -3
  422. package/src/avatar/context.tsx +5 -0
  423. package/src/avatar/createAvatarBadge.tsx +12 -0
  424. package/src/avatar/createAvatarIcon.tsx +16 -0
  425. package/src/avatar/createAvatarImage.tsx +40 -0
  426. package/src/avatar/createAvatarRoot.tsx +23 -0
  427. package/src/avatar/createAvatarText.tsx +30 -0
  428. package/src/avatar/index.ts +43 -0
  429. package/src/avatar/types.ts +77 -0
  430. package/src/button/index.tsx +19 -19
  431. package/src/checkbox/createCheckboxIcon.tsx +2 -2
  432. package/src/checkbox/createCheckboxRoot.web.tsx +2 -0
  433. package/src/checkbox/index.ts +20 -20
  434. package/src/dialog/context.tsx +4 -0
  435. package/src/dialog/createDialogBody.tsx +11 -0
  436. package/src/dialog/createDialogClose.tsx +27 -0
  437. package/src/dialog/createDialogContent.tsx +122 -0
  438. package/src/dialog/createDialogDescription.tsx +20 -0
  439. package/src/dialog/createDialogFooter.tsx +11 -0
  440. package/src/dialog/createDialogHeader.tsx +11 -0
  441. package/src/dialog/createDialogRoot.tsx +66 -0
  442. package/src/dialog/createDialogTitle.tsx +11 -0
  443. package/src/dialog/createDialogTrigger.tsx +27 -0
  444. package/src/dialog/index.tsx +93 -0
  445. package/src/dialog/types.ts +88 -0
  446. package/src/field/createFieldError.tsx +32 -0
  447. package/src/field/createFieldErrorIcon.tsx +9 -0
  448. package/src/field/createFieldErrorText.tsx +9 -0
  449. package/src/field/createFieldHelper.tsx +28 -0
  450. package/src/field/createFieldHelperText.tsx +9 -0
  451. package/src/field/createFieldLabel.tsx +30 -0
  452. package/src/field/createFieldRoot.tsx +27 -0
  453. package/src/field/index.tsx +68 -0
  454. package/src/field/types.tsx +78 -0
  455. package/src/form/createFormRoot.tsx +13 -0
  456. package/src/form/index.tsx +12 -0
  457. package/src/form/types.tsx +16 -0
  458. package/src/index.ts +9 -0
  459. package/src/input/createInputField.tsx +13 -3
  460. package/src/input/index.tsx +15 -28
  461. package/src/input/types.ts +0 -4
  462. package/src/link/LinkProvider.tsx +50 -0
  463. package/src/link/createLink.tsx +71 -0
  464. package/src/link/index.tsx +5 -0
  465. package/src/link/types.ts +47 -0
  466. package/src/link/useLink.ts +54 -0
  467. package/src/otp-input/context.tsx +8 -0
  468. package/src/otp-input/createOtpInputCell.tsx +22 -0
  469. package/src/otp-input/createOtpInputField.tsx +98 -0
  470. package/src/otp-input/createOtpInputRoot.tsx +179 -0
  471. package/src/otp-input/index.tsx +34 -0
  472. package/src/otp-input/types.ts +92 -0
  473. package/src/otp-input/utils/applyValueChange.ts +56 -0
  474. package/src/otp-input/utils/filterValue.ts +37 -0
  475. package/src/overlay/OverlayContainer.tsx +9 -18
  476. package/src/overlay/index.ts +1 -0
  477. package/src/overlay/useEscapeKey.ts +7 -0
  478. package/src/overlay/useEscapeKey.web.ts +27 -0
  479. package/src/progress/context.tsx +13 -0
  480. package/src/progress/createProgressIndicator.tsx +35 -0
  481. package/src/progress/createProgressRoot.tsx +109 -0
  482. package/src/progress/index.ts +28 -0
  483. package/src/progress/types.ts +37 -0
  484. package/src/select/context.tsx +9 -44
  485. package/src/select/createSelectItem.tsx +3 -3
  486. package/src/select/createSelectRoot.tsx +10 -6
  487. package/src/select/createSelectTrigger.tsx +62 -36
  488. package/src/select/types.ts +4 -1
  489. package/src/switch/createSwitchRoot.tsx +72 -0
  490. package/src/switch/index.ts +16 -0
  491. package/src/switch/types.ts +42 -0
  492. package/src/utils/createPortal.ts +20 -0
  493. package/src/utils/dataAttributes.web.ts +2 -4
  494. package/lib/commonjs/input/createInputIcon.js +0 -20
  495. package/lib/commonjs/input/createInputIcon.js.map +0 -1
  496. package/lib/module/input/createInputIcon.js.map +0 -1
  497. package/lib/typescript/input/createInputIcon.d.ts +0 -4
  498. package/lib/typescript/input/createInputIcon.d.ts.map +0 -1
  499. package/src/input/createInputIcon.tsx +0 -12
@@ -0,0 +1,37 @@
1
+ import type { ForwardRefExoticComponent, PropsWithoutRef, ReactNode, RefAttributes } from 'react';
2
+ import type { ViewProps } from 'react-native';
3
+
4
+ export type ProgressDataState = 'complete' | 'indeterminate' | 'loading';
5
+
6
+ export interface InterfaceProgressProps extends Omit<ViewProps, 'children'> {
7
+ /**
8
+ * Current value in the range [0, max], or `null` for indeterminate progress.
9
+ * Omit or use a number for determinate progress; default is `0`.
10
+ */
11
+ readonly value?: number | null;
12
+ /**
13
+ * Maximum value (minimum is always 0).
14
+ * @default 100
15
+ */
16
+ readonly max?: number;
17
+ /**
18
+ * Optional label for `accessibilityValue.text` when determinate.
19
+ */
20
+ readonly getValueLabel?: (value: number, max: number) => string;
21
+ readonly children?: ReactNode;
22
+ }
23
+
24
+ export type IProgressComponentType<
25
+ RootProps,
26
+ IndicatorProps,
27
+ RootRef = unknown,
28
+ IndicatorRef = unknown,
29
+ > = ForwardRefExoticComponent<
30
+ PropsWithoutRef<RootProps & InterfaceProgressProps> & RefAttributes<RootRef>
31
+ > & {
32
+ Indicator: ForwardRefExoticComponent<
33
+ PropsWithoutRef<IndicatorProps> & RefAttributes<IndicatorRef>
34
+ >;
35
+ };
36
+
37
+ export type IProgressProps = InterfaceProgressProps;
@@ -1,56 +1,21 @@
1
- import { createContext, useContext } from 'react';
2
- import type { InteractionState, SelectContextValue, SelectItemInteractionState } from './types';
1
+ import { createContext } from '@cdx-ui/utils';
2
+ import type { InteractionState } from '../types';
3
+ import type { SelectContextValue, SelectItemInteractionState } from './types';
3
4
 
4
- const defaultContextValue: SelectContextValue = {
5
- open: false,
6
- items: [],
7
- setOpen: () => {},
8
- value: undefined,
9
- onValueChange: () => {},
10
- disabled: false,
11
- required: false,
12
- invalid: false,
13
- readOnly: false,
14
- native: false,
15
- triggerRef: { current: null },
16
- contentId: '',
17
- triggerId: '',
18
- activeValue: undefined,
19
- setActiveValue: () => {}, // TODO: Is this needed? At the very least it could be moved to SelectContent
20
- accessibilityLabel: undefined,
21
- };
22
-
23
- export const SelectContext = createContext<SelectContextValue>(defaultContextValue);
24
-
25
- export const useSelectContext = () => useContext(SelectContext);
5
+ export const [SelectProvider, useSelectContext] =
6
+ createContext<SelectContextValue>('SelectContext');
26
7
 
27
8
  /**
28
9
  * Propagates the trigger's interaction state (hover, focus, active, etc.) to
29
10
  * child components like SelectValue and SelectIcon so they can apply matching
30
11
  * data-attribute styles.
31
12
  */
32
- export const SelectTriggerContext = createContext<InteractionState>({
33
- hover: false,
34
- focus: false,
35
- active: false,
36
- disabled: false,
37
- focusVisible: false,
38
- });
39
-
40
- export const useSelectTriggerContext = () => useContext(SelectTriggerContext);
13
+ export const [SelectTriggerProvider, useSelectTriggerContext] =
14
+ createContext<InteractionState>('SelectTriggerContext');
41
15
 
42
16
  /**
43
17
  * Propagates the item's interaction and selection state (hover, focus, active,
44
18
  * highlighted, checked, etc.) to child components like SelectItemLabel.
45
19
  */
46
- export const SelectItemContext = createContext<SelectItemInteractionState>({
47
- hover: false,
48
- focus: false,
49
- active: false,
50
- disabled: false,
51
- focusVisible: false,
52
- highlighted: false,
53
- checked: false,
54
- });
55
-
56
- export const useSelectItemContext = () => useContext(SelectItemContext);
20
+ export const [SelectItemProvider, useSelectItemContext] =
21
+ createContext<SelectItemInteractionState>('SelectItemContext');
@@ -4,7 +4,7 @@ import { composeEventHandlers } from '@cdx-ui/utils';
4
4
  import { useFocus, useFocusRing } from '@react-native-aria/focus';
5
5
  import { useHover, usePress } from '@react-native-aria/interactions';
6
6
  import { dataAttributes } from '../utils/dataAttributes';
7
- import { SelectItemContext, useSelectContext } from './context';
7
+ import { SelectItemProvider, useSelectContext } from './context';
8
8
  import type { ISelectItemProps } from './types';
9
9
 
10
10
  export const createSelectItem = <T,>(BaseItem: React.ComponentType<T>) =>
@@ -74,7 +74,7 @@ export const createSelectItem = <T,>(BaseItem: React.ComponentType<T>) =>
74
74
  );
75
75
 
76
76
  return (
77
- <SelectItemContext.Provider value={interactionState}>
77
+ <SelectItemProvider value={interactionState}>
78
78
  <BaseItem
79
79
  ref={ref}
80
80
  role="option"
@@ -115,7 +115,7 @@ export const createSelectItem = <T,>(BaseItem: React.ComponentType<T>) =>
115
115
  >
116
116
  {children}
117
117
  </BaseItem>
118
- </SelectItemContext.Provider>
118
+ </SelectItemProvider>
119
119
  );
120
120
  },
121
121
  );
@@ -2,7 +2,7 @@ import type React from 'react';
2
2
  import { forwardRef, useCallback, useId, useMemo, useRef, useState } from 'react';
3
3
  import { useControllableState, useFormControl } from '@cdx-ui/utils';
4
4
  import { dataAttributes } from '../utils/dataAttributes';
5
- import { SelectContext } from './context';
5
+ import { SelectProvider } from './context';
6
6
  import type { ISelectProps } from './types';
7
7
 
8
8
  export const createSelectRoot = <T,>(BaseRoot: React.ComponentType<T>) =>
@@ -68,9 +68,11 @@ export const createSelectRoot = <T,>(BaseRoot: React.ComponentType<T>) =>
68
68
  const [activeValue, setActiveValue] = useState<string | undefined>(undefined);
69
69
 
70
70
  const triggerRef = useRef<any>(null);
71
- const id = useId();
72
- const triggerId = `select-trigger-${id}`;
73
- const contentId = `select-content-${id}`;
71
+ const reactId = useId();
72
+ /** Align with `useFormControl` default id (`${field.id}-input`) when inside `Form.Field`. */
73
+ const triggerId = formControlProps.id ?? `select-trigger-${reactId}`;
74
+ const contentId = `select-content-${reactId}`;
75
+ const ariaDescribedBy = formControlProps['aria-describedby'];
74
76
 
75
77
  const contextValue = useMemo(
76
78
  () => ({
@@ -90,6 +92,7 @@ export const createSelectRoot = <T,>(BaseRoot: React.ComponentType<T>) =>
90
92
  activeValue,
91
93
  setActiveValue,
92
94
  accessibilityLabel,
95
+ ariaDescribedBy,
93
96
  }),
94
97
  [
95
98
  open,
@@ -106,11 +109,12 @@ export const createSelectRoot = <T,>(BaseRoot: React.ComponentType<T>) =>
106
109
  triggerId,
107
110
  activeValue,
108
111
  accessibilityLabel,
112
+ ariaDescribedBy,
109
113
  ],
110
114
  );
111
115
 
112
116
  return (
113
- <SelectContext.Provider value={contextValue}>
117
+ <SelectProvider value={contextValue}>
114
118
  <BaseRoot
115
119
  ref={ref}
116
120
  {...(props as T)}
@@ -124,7 +128,7 @@ export const createSelectRoot = <T,>(BaseRoot: React.ComponentType<T>) =>
124
128
  >
125
129
  {children}
126
130
  </BaseRoot>
127
- </SelectContext.Provider>
131
+ </SelectProvider>
128
132
  );
129
133
  },
130
134
  );
@@ -1,11 +1,12 @@
1
1
  import type React from 'react';
2
- import { forwardRef, useCallback, useMemo } from 'react';
2
+ import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef } from 'react';
3
3
  import { type GestureResponderEvent, Platform } from 'react-native';
4
- import { composeEventHandlers, mergeRefs } from '@cdx-ui/utils';
4
+ import { composeEventHandlers, mergeRefs, useFormControlContext } from '@cdx-ui/utils';
5
5
  import { useFocus, useFocusRing } from '@react-native-aria/focus';
6
6
  import { useHover, usePress } from '@react-native-aria/interactions';
7
+ import type { InteractionState } from '../types';
7
8
  import { dataAttributes } from '../utils/dataAttributes';
8
- import { SelectTriggerContext, useSelectContext } from './context';
9
+ import { SelectTriggerProvider, useSelectContext } from './context';
9
10
  import type { ISelectTriggerProps } from './types';
10
11
 
11
12
  export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
@@ -18,23 +19,10 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
18
19
  isFocused: isFocusedProp,
19
20
  isFocusVisible: isFocusVisibleProp,
20
21
  isDisabled: isDisabledProp,
22
+ 'aria-describedby': ariaDescribedByProp,
21
23
  ...props
22
24
  }: Omit<ISelectTriggerProps, 'children'> & {
23
- children?:
24
- | (({
25
- hovered,
26
- pressed,
27
- focused,
28
- focusVisible,
29
- disabled,
30
- }: {
31
- hovered?: boolean;
32
- pressed?: boolean;
33
- focused?: boolean;
34
- focusVisible?: boolean;
35
- disabled?: boolean;
36
- }) => React.ReactNode)
37
- | React.ReactNode;
25
+ children?: ((state: InteractionState) => React.ReactNode) | React.ReactNode;
38
26
  },
39
27
  ref?: any,
40
28
  ) => {
@@ -50,8 +38,11 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
50
38
  triggerRef,
51
39
  activeValue,
52
40
  accessibilityLabel,
41
+ ariaDescribedBy: ariaDescribedByFromField,
53
42
  } = useSelectContext();
54
43
 
44
+ const field = useFormControlContext();
45
+
55
46
  const disabled = contextDisabled || !!isDisabledProp;
56
47
 
57
48
  const { isFocusVisible, focusProps: focusRingProps }: any = useFocusRing();
@@ -63,7 +54,7 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
63
54
 
64
55
  const handlePress = useCallback(
65
56
  (e: GestureResponderEvent | KeyboardEvent) => {
66
- if (e.type === 'keyup' && (e as KeyboardEvent).key === 'Enter') {
57
+ if (e?.type === 'keyup' && (e as KeyboardEvent).key === 'Enter') {
67
58
  return;
68
59
  }
69
60
  if (!disabled) {
@@ -114,7 +105,53 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
114
105
  ],
115
106
  );
116
107
 
117
- const mergedRef = mergeRefs(ref, triggerRef);
108
+ /**
109
+ * Native: `Pressable` has no usable programmatic `.focus()` (unlike `TextInput`).
110
+ * `Form.Label` calls `focusInput()` → we register a bridge on `field.inputRef` that tries
111
+ * native focus, then opens the list (expected “tap label” behavior for a select).
112
+ */
113
+ const labelFocusGateRef = useRef({ disabled: false, readOnly: false });
114
+ labelFocusGateRef.current = {
115
+ disabled: !!disabled,
116
+ readOnly: !!contextReadOnly,
117
+ };
118
+
119
+ const labelFocusBridge = useMemo(
120
+ () => ({
121
+ focus() {
122
+ const { disabled: isOff, readOnly: isRO } = labelFocusGateRef.current;
123
+ if (isOff || isRO) {
124
+ return;
125
+ }
126
+ const node = triggerRef.current as { focus?: () => void } | null;
127
+ if (node != null && typeof node.focus === 'function') {
128
+ node.focus();
129
+ }
130
+ setOpen(true);
131
+ },
132
+ }),
133
+ [setOpen],
134
+ );
135
+
136
+ useLayoutEffect(() => {
137
+ if (Platform.OS === 'web' || !field.inputRef) {
138
+ return;
139
+ }
140
+ const r = field.inputRef;
141
+ r.current = labelFocusBridge as unknown as typeof r.current;
142
+ return () => {
143
+ if (r.current === labelFocusBridge) {
144
+ r.current = null;
145
+ }
146
+ };
147
+ }, [field.inputRef, labelFocusBridge]);
148
+
149
+ const mergedRef =
150
+ Platform.OS === 'web' ? mergeRefs(ref, triggerRef) : mergeRefs(ref, triggerRef);
151
+
152
+ const ariaDescribedBy = [ariaDescribedByFromField, ariaDescribedByProp]
153
+ .filter(Boolean)
154
+ .join(' ');
118
155
 
119
156
  const webKeyboardProps =
120
157
  Platform.OS === 'web'
@@ -122,7 +159,7 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
122
159
  : {};
123
160
 
124
161
  return (
125
- <SelectTriggerContext.Provider value={interactionState}>
162
+ <SelectTriggerProvider value={interactionState}>
126
163
  <BaseTrigger
127
164
  ref={mergedRef}
128
165
  role="combobox"
@@ -136,7 +173,7 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
136
173
  aria-required={contextRequired || undefined}
137
174
  aria-invalid={contextInvalid || undefined}
138
175
  aria-readonly={contextReadOnly || undefined}
139
- id={triggerId}
176
+ aria-describedby={ariaDescribedBy || undefined}
140
177
  {...dataAttributes({
141
178
  hover: interactionState.hover,
142
179
  focus: interactionState.focus,
@@ -151,6 +188,7 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
151
188
  })}
152
189
  disabled={disabled}
153
190
  {...(props as T)}
191
+ id={triggerId}
154
192
  onPress={composeEventHandlers(props?.onPress, handlePress)}
155
193
  onPressIn={composeEventHandlers(props?.onPressIn, pressProps.onPressIn)}
156
194
  onPressOut={composeEventHandlers(props?.onPressOut, pressProps.onPressOut)}
@@ -172,21 +210,9 @@ export const createSelectTrigger = <T,>(BaseTrigger: React.ComponentType<T>) =>
172
210
  )}
173
211
  {...webKeyboardProps}
174
212
  >
175
- {/* TODO: Align render-function children convention with Button — Button
176
- passes raw hook values (isHovered, isFocused, etc.) while this
177
- passes merged interaction state (isHoveredProp || isHovered). Pick
178
- one convention and apply to both. */}
179
- {typeof children === 'function'
180
- ? children({
181
- hovered: interactionState.hover,
182
- focused: interactionState.focus,
183
- pressed: interactionState.active,
184
- disabled: interactionState.disabled,
185
- focusVisible: interactionState.focusVisible,
186
- })
187
- : children}
213
+ {typeof children === 'function' ? children(interactionState) : children}
188
214
  </BaseTrigger>
189
- </SelectTriggerContext.Provider>
215
+ </SelectTriggerProvider>
190
216
  );
191
217
  },
192
218
  );
@@ -2,7 +2,6 @@ import type { PropsWithoutRef, ReactNode, RefAttributes, RefObject } from 'react
2
2
  import type { PressableProps, ViewProps } from 'react-native';
3
3
  import type { EntryOrExitLayoutType } from 'react-native-reanimated';
4
4
  import type { InteractionState } from '../types';
5
- export type { InteractionState };
6
5
 
7
6
  export interface SelectItemInteractionState extends InteractionState {
8
7
  highlighted: boolean;
@@ -32,6 +31,8 @@ export interface ISelectTriggerProps extends PressableProps {
32
31
  isFocused?: boolean;
33
32
  isFocusVisible?: boolean;
34
33
  isDisabled?: boolean;
34
+ /** @platform web — merged with form field helper/error ids */
35
+ 'aria-describedby'?: string;
35
36
  }
36
37
 
37
38
  export interface ISelectValueProps {
@@ -89,6 +90,8 @@ export interface SelectContextValue {
89
90
  activeValue: string | undefined;
90
91
  setActiveValue: (value: string | undefined) => void;
91
92
  accessibilityLabel: string | undefined;
93
+ /** From `Form.Field` via `useFormControl` on the select root (helper/error `aria-describedby`). */
94
+ ariaDescribedBy?: string;
92
95
  }
93
96
 
94
97
  export type ISelectComponentType<
@@ -0,0 +1,72 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { useFocusRing } from '@react-native-aria/focus';
3
+ import { useHover } from '@react-native-aria/interactions';
4
+ import { useToggleState } from '@react-stately/toggle';
5
+ import { useFormControlContext, mergeRefs } from '@cdx-ui/utils';
6
+ import type { ISwitchProps } from './types';
7
+
8
+ type MergeableRef = Parameters<typeof mergeRefs>[0];
9
+
10
+ export const createSwitchRoot = <T, R = unknown>(BaseSwitch: React.ComponentType<T>) =>
11
+ forwardRef<R, ISwitchProps>(
12
+ (
13
+ {
14
+ disabled,
15
+ isDisabled,
16
+ isChecked,
17
+ isInvalid,
18
+ defaultValue,
19
+ value,
20
+ onValueChange,
21
+ ...props
22
+ }: ISwitchProps,
23
+ ref: React.ForwardedRef<R>,
24
+ ) => {
25
+ const formControlContext = useFormControlContext();
26
+ const combinedProps = { ...formControlContext, ...props };
27
+ const controlledValue = value ?? isChecked;
28
+ const state = useToggleState({
29
+ defaultSelected: defaultValue ?? false,
30
+ isSelected: controlledValue,
31
+ onChange: onValueChange,
32
+ });
33
+
34
+ const checked = controlledValue ?? state.isSelected;
35
+
36
+ const _ref = React.useRef(null);
37
+ const { isHovered } = useHover({}, _ref);
38
+ const { isFocusVisible, focusProps } = useFocusRing();
39
+
40
+ const mergedRef = mergeRefs(ref as MergeableRef, _ref);
41
+
42
+ const isDisabledResolved = disabled || isDisabled || combinedProps.isDisabled;
43
+ const isInvalidResolved = isInvalid || combinedProps.isInvalid;
44
+
45
+ return (
46
+ <BaseSwitch
47
+ states={{
48
+ hover: isHovered,
49
+ disabled: isDisabledResolved,
50
+ invalid: isInvalidResolved,
51
+ checked,
52
+ focusVisible: isFocusVisible,
53
+ }}
54
+ dataSet={{
55
+ hover: isHovered ? 'true' : 'false',
56
+ disabled: isDisabledResolved ? 'true' : 'false',
57
+ invalid: isInvalidResolved ? 'true' : 'false',
58
+ checked: checked ? 'true' : 'false',
59
+ 'focus-visible': isFocusVisible ? 'true' : 'false',
60
+ }}
61
+ disabled={isDisabledResolved}
62
+ {...focusProps}
63
+ onValueChange={(val: boolean) => {
64
+ state.setSelected(val);
65
+ }}
66
+ value={checked}
67
+ {...(combinedProps as T)}
68
+ ref={mergedRef as React.Ref<R>}
69
+ />
70
+ );
71
+ },
72
+ );
@@ -0,0 +1,16 @@
1
+ import type React from 'react';
2
+ import { createSwitchRoot } from './createSwitchRoot';
3
+ import type { ISwitchComponentType } from './types';
4
+
5
+ export type { ISwitchProps, ISwitchComponentType, IInterfaceSwitchProps } from './types';
6
+
7
+ export function createSwitch<T, R = unknown>({
8
+ Root,
9
+ }: {
10
+ Root: React.ComponentType<T>;
11
+ }): ISwitchComponentType<T, R> {
12
+ const Switch = createSwitchRoot(Root);
13
+
14
+ Switch.displayName = 'Switch';
15
+ return Switch as ISwitchComponentType<T, R>;
16
+ }
@@ -0,0 +1,42 @@
1
+ import type React from 'react';
2
+
3
+ export interface IInterfaceSwitchProps {
4
+ /**
5
+ * Callback invoked when the switch value changes.
6
+ */
7
+ onValueChange?: (value: boolean) => void;
8
+ /**
9
+ * If true, set the Switch to the checked state.
10
+ */
11
+ isChecked?: boolean;
12
+ /**
13
+ * The current value of the switch.
14
+ */
15
+ value?: boolean;
16
+ /**
17
+ * If true, the switch will be disabled.
18
+ */
19
+ isDisabled?: boolean;
20
+ /**
21
+ * If true, the switch will be disabled.
22
+ */
23
+ disabled?: boolean;
24
+ /**
25
+ * If true, the checkbox will be initially checked.
26
+ */
27
+ defaultValue?: boolean;
28
+ /**
29
+ * If true, set the switch to the invalid state.
30
+ */
31
+ isInvalid?: boolean;
32
+ /**
33
+ * If true, the switch will be hovered.
34
+ */
35
+ isHovered?: boolean;
36
+ }
37
+
38
+ export type ISwitchComponentType<T, R = unknown> = React.ForwardRefExoticComponent<
39
+ React.PropsWithoutRef<T & IInterfaceSwitchProps> & React.RefAttributes<R>
40
+ >;
41
+
42
+ export type ISwitchProps = IInterfaceSwitchProps;
@@ -0,0 +1,20 @@
1
+ import type React from 'react';
2
+ import { Platform } from 'react-native';
3
+
4
+ type CreatePortalFn = (children: React.ReactNode, container: Element) => React.ReactPortal;
5
+
6
+ /**
7
+ * A reference to `ReactDOM.createPortal` on web, `undefined` on native.
8
+ *
9
+ * Loaded lazily via `require` so that native bundles never reference
10
+ * `react-dom`, which would cause a build error on native platforms.
11
+ */
12
+ export const createPortalFn: CreatePortalFn | undefined = (() => {
13
+ if (Platform.OS !== 'web') return undefined;
14
+ try {
15
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
16
+ return (require('react-dom') as { createPortal: CreatePortalFn }).createPortal;
17
+ } catch {
18
+ return undefined;
19
+ }
20
+ })();
@@ -17,10 +17,8 @@ export function dataAttributes(attrs: Record<string, DataAttributeValue>): {
17
17
  const dataSet: Record<string, boolean | string> = {};
18
18
  for (const key in attrs) {
19
19
  const value = attrs[key];
20
- if (value === undefined) {
21
- continue;
22
- }
23
- dataSet[key] = value;
20
+
21
+ dataSet[key] = value ?? false;
24
22
  }
25
23
  return { dataSet };
26
24
  }
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createInputIcon = void 0;
7
- var _react = require("react");
8
- var _jsxRuntime = require("react/jsx-runtime");
9
- const createInputIcon = BaseInputIcon => /*#__PURE__*/(0, _react.forwardRef)(({
10
- children,
11
- ...props
12
- }, ref) => {
13
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(BaseInputIcon, {
14
- ref: ref,
15
- ...props,
16
- children: children
17
- });
18
- });
19
- exports.createInputIcon = createInputIcon;
20
- //# sourceMappingURL=createInputIcon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_jsxRuntime","createInputIcon","BaseInputIcon","forwardRef","children","props","ref","jsx","exports"],"sourceRoot":"../../../src","sources":["input/createInputIcon.tsx"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAAmC,IAAAC,WAAA,GAAAD,OAAA;AAG5B,MAAME,eAAe,GAAQC,aAAqC,iBACvE,IAAAC,iBAAU,EAA2B,CAAC;EAAEC,QAAQ;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACpE,oBACE,IAAAN,WAAA,CAAAO,GAAA,EAACL,aAAa;IAACI,GAAG,EAAEA,GAAI;IAAA,GAAMD,KAAK;IAAAD,QAAA,EAChCA;EAAQ,CACI,CAAC;AAEpB,CAAC,CAAC;AAACI,OAAA,CAAAP,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["forwardRef","jsx","_jsx","createInputIcon","BaseInputIcon","children","props","ref"],"sourceRoot":"../../../src","sources":["input/createInputIcon.tsx"],"mappings":";;AACA,SAASA,UAAU,QAAQ,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGnC,OAAO,MAAMC,eAAe,GAAQC,aAAqC,iBACvEJ,UAAU,CAA2B,CAAC;EAAEK,QAAQ;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACpE,oBACEL,IAAA,CAACE,aAAa;IAACG,GAAG,EAAEA,GAAI;IAAA,GAAMD,KAAK;IAAAD,QAAA,EAChCA;EAAQ,CACI,CAAC;AAEpB,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- import type React from 'react';
2
- import type { IInputIconProps } from './types';
3
- export declare const createInputIcon: <T>(BaseInputIcon: React.ComponentType<T>) => React.ForwardRefExoticComponent<IInputIconProps & React.RefAttributes<unknown>>;
4
- //# sourceMappingURL=createInputIcon.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createInputIcon.d.ts","sourceRoot":"","sources":["../../../src/input/createInputIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,eAAe,GAAI,CAAC,EAAG,eAAe,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oFAOrE,CAAC"}
@@ -1,12 +0,0 @@
1
- import type React from 'react';
2
- import { forwardRef } from 'react';
3
- import type { IInputIconProps } from './types';
4
-
5
- export const createInputIcon = <T,>(BaseInputIcon: React.ComponentType<T>) =>
6
- forwardRef<unknown, IInputIconProps>(({ children, ...props }, ref) => {
7
- return (
8
- <BaseInputIcon ref={ref} {...(props as T)}>
9
- {children}
10
- </BaseInputIcon>
11
- );
12
- });