@fuf-stack/uniform 1.18.3 → 1.19.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 (422) hide show
  1. package/dist/Checkboxes/index.cjs +7 -5
  2. package/dist/Checkboxes/index.d.cts +1 -1
  3. package/dist/Checkboxes/index.d.ts +1 -1
  4. package/dist/Checkboxes/index.js +2 -3
  5. package/dist/{Checkboxes-BGrK_mwQ.js → Checkboxes-D1hppxDE.js} +7 -10
  6. package/dist/Checkboxes-D1hppxDE.js.map +1 -0
  7. package/dist/{Checkboxes-Dk7yyRVR.cjs → Checkboxes-DegQ22uN.cjs} +18 -21
  8. package/dist/Checkboxes-DegQ22uN.cjs.map +1 -0
  9. package/dist/FieldArray/index.cjs +7 -5
  10. package/dist/FieldArray/index.d.cts +1 -1
  11. package/dist/FieldArray/index.d.ts +1 -1
  12. package/dist/FieldArray/index.js +2 -3
  13. package/dist/{FieldArray-Bs2ViU8m.js → FieldArray-BVL5Tz0Q.js} +51 -71
  14. package/dist/FieldArray-BVL5Tz0Q.js.map +1 -0
  15. package/dist/{FieldArray-C6RHZcKa.cjs → FieldArray-CeiNCobX.cjs} +66 -86
  16. package/dist/FieldArray-CeiNCobX.cjs.map +1 -0
  17. package/dist/FieldCard/index.cjs +4 -4
  18. package/dist/FieldCard/index.d.cts +1 -1
  19. package/dist/FieldCard/index.d.ts +1 -1
  20. package/dist/FieldCard/index.js +2 -3
  21. package/dist/{FieldCard-BxK_IJOR.cjs → FieldCard-C0kNSLj7.cjs} +20 -24
  22. package/dist/FieldCard-C0kNSLj7.cjs.map +1 -0
  23. package/dist/{FieldCard-16yCF83m.js → FieldCard-SjYNs4sL.js} +8 -12
  24. package/dist/FieldCard-SjYNs4sL.js.map +1 -0
  25. package/dist/{FieldCopyTestIdButton-BoEdlzLs.js → FieldCopyTestIdButton-Dpmo0uBV.js} +4 -7
  26. package/dist/FieldCopyTestIdButton-Dpmo0uBV.js.map +1 -0
  27. package/dist/{FieldCopyTestIdButton-4uupFq1U.cjs → FieldCopyTestIdButton-DrUzXwTo.cjs} +14 -17
  28. package/dist/FieldCopyTestIdButton-DrUzXwTo.cjs.map +1 -0
  29. package/dist/{FieldValidationError-Br6iopZj.cjs → FieldValidationError-8H8LxDjk.cjs} +14 -17
  30. package/dist/FieldValidationError-8H8LxDjk.cjs.map +1 -0
  31. package/dist/{FieldValidationError-XQaViV52.js → FieldValidationError-ktTyyyip.js} +4 -7
  32. package/dist/FieldValidationError-ktTyyyip.js.map +1 -0
  33. package/dist/Form/index.cjs +7 -5
  34. package/dist/Form/index.d.cts +1 -1
  35. package/dist/Form/index.d.ts +1 -2
  36. package/dist/Form/index.js +2 -3
  37. package/dist/{Form--SsSvsxl.cjs → Form-Dqa1b7Y7.cjs} +17 -22
  38. package/dist/Form-Dqa1b7Y7.cjs.map +1 -0
  39. package/dist/{Form-ccsEssie.js → Form-Wzy7pBVt.js} +8 -13
  40. package/dist/Form-Wzy7pBVt.js.map +1 -0
  41. package/dist/{FormContext-CCe8drkp.d.ts → FormContext-B4KQxdl7.d.ts} +1 -1
  42. package/dist/{FormContext-CCe8drkp.d.ts.map → FormContext-B4KQxdl7.d.ts.map} +1 -1
  43. package/dist/{FormContext-BSLO2-sO.cjs → FormContext-BrY1FQYR.cjs} +29 -37
  44. package/dist/{FormContext-BSLO2-sO.cjs.map → FormContext-BrY1FQYR.cjs.map} +1 -1
  45. package/dist/{FormContext-RSA21aDt.d.cts → FormContext-BuG3xZFe.d.cts} +1 -1
  46. package/dist/{FormContext-RSA21aDt.d.cts.map → FormContext-BuG3xZFe.d.cts.map} +1 -1
  47. package/dist/{FormContext-kE3YKhp_.js → FormContext-CLfMWHQM.js} +4 -7
  48. package/dist/{FormContext-kE3YKhp_.js.map → FormContext-CLfMWHQM.js.map} +1 -1
  49. package/dist/Grid/index.cjs +7 -5
  50. package/dist/Grid/index.d.cts +1 -1
  51. package/dist/Grid/index.d.ts +1 -1
  52. package/dist/Grid/index.js +2 -3
  53. package/dist/{Grid-BaqBa1ku.js → Grid-Bzyi97Cx.js} +4 -7
  54. package/dist/Grid-Bzyi97Cx.js.map +1 -0
  55. package/dist/{Grid-D5Yf0nD_.cjs → Grid-DdYQQ_UM.cjs} +14 -17
  56. package/dist/Grid-DdYQQ_UM.cjs.map +1 -0
  57. package/dist/Input/index.cjs +7 -5
  58. package/dist/Input/index.d.cts +1 -1
  59. package/dist/Input/index.d.ts +1 -1
  60. package/dist/Input/index.js +2 -3
  61. package/dist/{Input-BCs_eyJ9.js → Input-BDWP4hOr.js} +6 -9
  62. package/dist/{Input-BCs_eyJ9.js.map → Input-BDWP4hOr.js.map} +1 -1
  63. package/dist/{Input-B3p_4ntD.cjs → Input-BXJ4DSha.cjs} +18 -21
  64. package/dist/Input-BXJ4DSha.cjs.map +1 -0
  65. package/dist/RadioBoxes/index.cjs +7 -5
  66. package/dist/RadioBoxes/index.d.cts +1 -1
  67. package/dist/RadioBoxes/index.d.ts +1 -1
  68. package/dist/RadioBoxes/index.js +2 -3
  69. package/dist/{RadioBoxes-C3Cwrn2I.js → RadioBoxes-BR3X986V.js} +16 -23
  70. package/dist/RadioBoxes-BR3X986V.js.map +1 -0
  71. package/dist/{RadioBoxes-xRvNe5U8.cjs → RadioBoxes-Cim3InDW.cjs} +33 -40
  72. package/dist/RadioBoxes-Cim3InDW.cjs.map +1 -0
  73. package/dist/RadioTabs/index.cjs +7 -5
  74. package/dist/RadioTabs/index.d.cts +1 -1
  75. package/dist/RadioTabs/index.d.ts +1 -1
  76. package/dist/RadioTabs/index.js +2 -3
  77. package/dist/{RadioTabs-DfOGIsEf.js → RadioTabs-CsVqYCE9.js} +6 -9
  78. package/dist/RadioTabs-CsVqYCE9.js.map +1 -0
  79. package/dist/{RadioTabs-BaHvYcd-.cjs → RadioTabs-t-x2XnuI.cjs} +18 -21
  80. package/dist/RadioTabs-t-x2XnuI.cjs.map +1 -0
  81. package/dist/Radios/index.cjs +7 -5
  82. package/dist/Radios/index.d.cts +1 -1
  83. package/dist/Radios/index.d.ts +1 -1
  84. package/dist/Radios/index.js +2 -3
  85. package/dist/{Radios-xM-09vB5.js → Radios-CYwW3bZa.js} +13 -19
  86. package/dist/Radios-CYwW3bZa.js.map +1 -0
  87. package/dist/{Radios-BfA3uL35.cjs → Radios-CjEFdyD6.cjs} +25 -31
  88. package/dist/Radios-CjEFdyD6.cjs.map +1 -0
  89. package/dist/Select/index.cjs +7 -5
  90. package/dist/Select/index.d.cts +1 -1
  91. package/dist/Select/index.d.ts +1 -1
  92. package/dist/Select/index.js +2 -3
  93. package/dist/{Select-DH_YaruM.cjs → Select-BEed8xan.cjs} +23 -28
  94. package/dist/Select-BEed8xan.cjs.map +1 -0
  95. package/dist/{Select-DlEUzYl6.js → Select-BILyyM7Z.js} +9 -14
  96. package/dist/Select-BILyyM7Z.js.map +1 -0
  97. package/dist/Slider/index.cjs +7 -5
  98. package/dist/Slider/index.d.cts +1 -1
  99. package/dist/Slider/index.d.ts +1 -1
  100. package/dist/Slider/index.js +2 -3
  101. package/dist/{Slider-C-dMrJZ6.cjs → Slider-CFYP86ku.cjs} +16 -19
  102. package/dist/Slider-CFYP86ku.cjs.map +1 -0
  103. package/dist/{Slider-CTFuVrp2.js → Slider-DxRcLu-j.js} +5 -8
  104. package/dist/{Slider-CTFuVrp2.js.map → Slider-DxRcLu-j.js.map} +1 -1
  105. package/dist/SubmitButton/index.cjs +7 -5
  106. package/dist/SubmitButton/index.d.cts +1 -1
  107. package/dist/SubmitButton/index.d.ts +1 -1
  108. package/dist/SubmitButton/index.js +2 -3
  109. package/dist/{SubmitButton-Bh1RN0F1.js → SubmitButton-Bu3NNFyt.js} +5 -8
  110. package/dist/SubmitButton-Bu3NNFyt.js.map +1 -0
  111. package/dist/{SubmitButton-CJ6s1mZr.cjs → SubmitButton-D7xacDyS.cjs} +15 -18
  112. package/dist/SubmitButton-D7xacDyS.cjs.map +1 -0
  113. package/dist/Switch/index.cjs +7 -5
  114. package/dist/Switch/index.d.cts +1 -1
  115. package/dist/Switch/index.d.ts +1 -1
  116. package/dist/Switch/index.js +2 -3
  117. package/dist/{Switch-CXrz-M3V.js → Switch-CMpXZdLc.js} +5 -8
  118. package/dist/{Switch-CXrz-M3V.js.map → Switch-CMpXZdLc.js.map} +1 -1
  119. package/dist/{Switch-CeUMwheZ.cjs → Switch-Dt9TGQ8d.cjs} +16 -19
  120. package/dist/Switch-Dt9TGQ8d.cjs.map +1 -0
  121. package/dist/SwitchBox/index.cjs +7 -5
  122. package/dist/SwitchBox/index.d.cts +1 -1
  123. package/dist/SwitchBox/index.d.ts +1 -1
  124. package/dist/SwitchBox/index.js +2 -3
  125. package/dist/{SwitchBox-C-aLl2nX.js → SwitchBox-Cg7NPfp_.js} +5 -8
  126. package/dist/SwitchBox-Cg7NPfp_.js.map +1 -0
  127. package/dist/{SwitchBox-mGUPvJE0.cjs → SwitchBox-DMPp_Ed-.cjs} +21 -24
  128. package/dist/SwitchBox-DMPp_Ed-.cjs.map +1 -0
  129. package/dist/TextArea/index.cjs +7 -5
  130. package/dist/TextArea/index.d.cts +1 -1
  131. package/dist/TextArea/index.d.ts +1 -1
  132. package/dist/TextArea/index.js +2 -3
  133. package/dist/{TextArea-BLkVYmHZ.js → TextArea-Bxi2pXvY.js} +6 -9
  134. package/dist/TextArea-Bxi2pXvY.js.map +1 -0
  135. package/dist/{TextArea-BYEuk4Ng.cjs → TextArea-DDwzXW-y.cjs} +18 -21
  136. package/dist/TextArea-DDwzXW-y.cjs.map +1 -0
  137. package/dist/helpers/index.cjs +397 -10
  138. package/dist/helpers/index.cjs.map +1 -0
  139. package/dist/helpers/index.d.cts +224 -2
  140. package/dist/helpers/index.d.cts.map +1 -0
  141. package/dist/helpers/index.d.ts +224 -2
  142. package/dist/helpers/index.d.ts.map +1 -0
  143. package/dist/helpers/index.js +387 -2
  144. package/dist/helpers/index.js.map +1 -0
  145. package/dist/hooks/useClientValidation/index.cjs +3 -3
  146. package/dist/hooks/useClientValidation/index.d.cts +1 -1
  147. package/dist/hooks/useClientValidation/index.d.ts +1 -1
  148. package/dist/hooks/useClientValidation/index.js +2 -3
  149. package/dist/hooks/useController/index.cjs +3 -3
  150. package/dist/hooks/useController/index.d.cts +1 -1
  151. package/dist/hooks/useController/index.d.ts +1 -1
  152. package/dist/hooks/useController/index.js +2 -3
  153. package/dist/hooks/useFormContext/index.cjs +8 -3
  154. package/dist/hooks/useFormContext/index.cjs.map +1 -0
  155. package/dist/hooks/useFormContext/index.d.cts +1 -1
  156. package/dist/hooks/useFormContext/index.d.ts +1 -3
  157. package/dist/hooks/useFormContext/index.js +6 -2
  158. package/dist/hooks/useFormContext/index.js.map +1 -0
  159. package/dist/hooks/useInput/index.cjs +8 -8
  160. package/dist/hooks/useInput/index.d.cts +1 -1
  161. package/dist/hooks/useInput/index.d.ts +1 -1
  162. package/dist/hooks/useInput/index.js +2 -3
  163. package/dist/hooks/useInputValueDebounce/index.cjs +92 -2
  164. package/dist/hooks/useInputValueDebounce/index.cjs.map +1 -0
  165. package/dist/hooks/useInputValueDebounce/index.d.cts +1 -1
  166. package/dist/hooks/useInputValueDebounce/index.d.ts +1 -1
  167. package/dist/hooks/useInputValueDebounce/index.js +90 -2
  168. package/dist/hooks/useInputValueDebounce/index.js.map +1 -0
  169. package/dist/hooks/useInputValueTransform/index.cjs +3 -3
  170. package/dist/hooks/useInputValueTransform/index.d.cts +1 -1
  171. package/dist/hooks/useInputValueTransform/index.d.ts +1 -1
  172. package/dist/hooks/useInputValueTransform/index.js +2 -3
  173. package/dist/hooks/useUniformField/index.cjs +135 -2
  174. package/dist/hooks/useUniformField/index.cjs.map +1 -0
  175. package/dist/hooks/useUniformField/index.d.cts +1 -1
  176. package/dist/hooks/useUniformField/index.d.ts +1 -5
  177. package/dist/hooks/useUniformField/index.js +132 -2
  178. package/dist/hooks/useUniformField/index.js.map +1 -0
  179. package/dist/hooks/useUniformFieldArray/index.cjs +83 -2
  180. package/dist/hooks/useUniformFieldArray/index.cjs.map +1 -0
  181. package/dist/hooks/useUniformFieldArray/index.d.cts +1 -1
  182. package/dist/hooks/useUniformFieldArray/index.d.ts +1 -26
  183. package/dist/hooks/useUniformFieldArray/index.js +81 -2
  184. package/dist/hooks/useUniformFieldArray/index.js.map +1 -0
  185. package/dist/hooks/useWatchUserChange/index.cjs +3 -3
  186. package/dist/hooks/useWatchUserChange/index.d.cts +1 -1
  187. package/dist/hooks/useWatchUserChange/index.d.ts +1 -1
  188. package/dist/hooks/useWatchUserChange/index.js +2 -3
  189. package/dist/{index-TmijvCD0.d.ts → index-25CYKzg4.d.cts} +22 -22
  190. package/dist/index-25CYKzg4.d.cts.map +1 -0
  191. package/dist/{index-CeiIXmAI.d.cts → index-3e3711-8.d.cts} +36 -36
  192. package/dist/index-3e3711-8.d.cts.map +1 -0
  193. package/dist/{index-E6etS7_8.d.ts → index-6hu79Fof.d.ts} +34 -34
  194. package/dist/index-6hu79Fof.d.ts.map +1 -0
  195. package/dist/index-AmOFlE3L.d.cts +278 -0
  196. package/dist/index-AmOFlE3L.d.cts.map +1 -0
  197. package/dist/{index-wwmQClW-.d.cts → index-B-6CMF1H.d.ts} +21 -21
  198. package/dist/index-B-6CMF1H.d.ts.map +1 -0
  199. package/dist/{index-ahxY6Q0X.d.cts → index-B6WwxkLx2.d.ts} +3 -3
  200. package/dist/index-B6WwxkLx2.d.ts.map +1 -0
  201. package/dist/{index-BlJFGN_o.d.ts → index-B9lVf5LI.d.ts} +48 -48
  202. package/dist/index-B9lVf5LI.d.ts.map +1 -0
  203. package/dist/{index-ttNINAv3.d.ts → index-BV1VKQdy.d.cts} +3 -3
  204. package/dist/{index-qo0Ta_R3.d.cts.map → index-BV1VKQdy.d.cts.map} +1 -1
  205. package/dist/{index-C1-F9Ga-.d.cts → index-BdYKQ59a.d.cts} +7 -7
  206. package/dist/index-BdYKQ59a.d.cts.map +1 -0
  207. package/dist/{index-Bl1Adhfx.d.ts → index-BwAI1VFS.d.ts} +6 -6
  208. package/dist/index-BwAI1VFS.d.ts.map +1 -0
  209. package/dist/{index-BsCPUK2g.d.cts → index-BzIB-MQg.d.cts} +48 -48
  210. package/dist/index-BzIB-MQg.d.cts.map +1 -0
  211. package/dist/{index-DFzyOxvt.d.cts → index-C-DiLZRu.d.cts} +6 -6
  212. package/dist/index-C-DiLZRu.d.cts.map +1 -0
  213. package/dist/{index-BKQc5PQn.d.cts → index-C9up4f3f.d.cts} +34 -34
  214. package/dist/index-C9up4f3f.d.cts.map +1 -0
  215. package/dist/{index-Dty4h2eA.d.ts → index-CE0aQlFw.d.ts} +7 -7
  216. package/dist/index-CE0aQlFw.d.ts.map +1 -0
  217. package/dist/{index-BrMk3Wee.d.ts → index-CY2Mpaz3.d.cts} +4 -4
  218. package/dist/index-CY2Mpaz3.d.cts.map +1 -0
  219. package/dist/index-CuRn5Thx.d.ts +278 -0
  220. package/dist/index-CuRn5Thx.d.ts.map +1 -0
  221. package/dist/{index-qo0Ta_R3.d.cts → index-Cv4ERj3i.d.ts} +3 -3
  222. package/dist/{index-ttNINAv3.d.ts.map → index-Cv4ERj3i.d.ts.map} +1 -1
  223. package/dist/{index-ByyEP8UR.d.cts → index-D6XwSwTP.d.cts} +6 -6
  224. package/dist/{index-ByyEP8UR.d.cts.map → index-D6XwSwTP.d.cts.map} +1 -1
  225. package/dist/{index-Dr06SNZN.d.cts → index-DD_RPe91.d.ts} +4 -4
  226. package/dist/index-DD_RPe91.d.ts.map +1 -0
  227. package/dist/{index-DLR8z1lG.d.cts → index-DFWSHdua.d.ts} +3 -3
  228. package/dist/{index-CPkTYivq.d.ts.map → index-DFWSHdua.d.ts.map} +1 -1
  229. package/dist/{index-B0rp5NJy.d.cts → index-DMwNV_Br.d.cts} +35 -36
  230. package/dist/index-DMwNV_Br.d.cts.map +1 -0
  231. package/dist/index-DeEmP3Jc.d.cts +1 -0
  232. package/dist/{index-mmk9VKYu.d.ts → index-DiD7s23-.d.cts} +21 -21
  233. package/dist/index-DiD7s23-.d.cts.map +1 -0
  234. package/dist/{index--NM5Ctp6.d.ts → index-Dj3NDj0T.d.ts} +4 -4
  235. package/dist/{index--NM5Ctp6.d.ts.map → index-Dj3NDj0T.d.ts.map} +1 -1
  236. package/dist/{index-CPkTYivq.d.ts → index-DkiQkdCW.d.cts} +3 -3
  237. package/dist/{index-DLR8z1lG.d.cts.map → index-DkiQkdCW.d.cts.map} +1 -1
  238. package/dist/{index-CI0AWMsR.d.ts → index-DkxqHE_P2.d.ts} +3 -3
  239. package/dist/{index-B7Xz_OY2.d.cts.map → index-DkxqHE_P2.d.ts.map} +1 -1
  240. package/dist/{index-B7Xz_OY2.d.cts → index-Dld6NP_K.d.cts} +3 -3
  241. package/dist/index-Dld6NP_K.d.cts.map +1 -0
  242. package/dist/{index-CZq5eXSP.d.ts → index-DlebotZ4.d.ts} +36 -36
  243. package/dist/index-DlebotZ4.d.ts.map +1 -0
  244. package/dist/index-DsC0y6kU.d.cts +70 -0
  245. package/dist/index-DsC0y6kU.d.cts.map +1 -0
  246. package/dist/index-DwqOejxR.d.ts +70 -0
  247. package/dist/index-DwqOejxR.d.ts.map +1 -0
  248. package/dist/{index-BaxXDaOZ.d.ts → index-Gs3zrYoY.d.ts} +35 -37
  249. package/dist/index-Gs3zrYoY.d.ts.map +1 -0
  250. package/dist/{index-BlX_mF6D.d.cts → index-N5wvPOq3.d.ts} +22 -22
  251. package/dist/index-N5wvPOq3.d.ts.map +1 -0
  252. package/dist/{index-BNYtqtXt.d.cts → index-NjKV8LJD.d.cts} +4 -4
  253. package/dist/{index-BNYtqtXt.d.cts.map → index-NjKV8LJD.d.cts.map} +1 -1
  254. package/dist/{index-DVZCz730.d.ts → index-fgARdsoB.d.ts} +6 -6
  255. package/dist/{index-DVZCz730.d.ts.map → index-fgARdsoB.d.ts.map} +1 -1
  256. package/dist/{index-CMehV9mc.d.ts → index-jCfJAgDc.d.cts} +3 -3
  257. package/dist/index-jCfJAgDc.d.cts.map +1 -0
  258. package/dist/{index--KhDRPu3.d.cts → index-pwXVq8hR.d.cts} +6 -6
  259. package/dist/index-pwXVq8hR.d.cts.map +1 -0
  260. package/dist/index-sQecLSpR.d.cts +1 -0
  261. package/dist/{index-BgyvEfYZ.d.ts → index-wV1E_PkS.d.ts} +6 -6
  262. package/dist/index-wV1E_PkS.d.ts.map +1 -0
  263. package/dist/index.cjs +63 -63
  264. package/dist/index.d.cts +27 -27
  265. package/dist/index.d.ts +27 -29
  266. package/dist/index.js +29 -30
  267. package/dist/partials/FieldCopyTestIdButton/index.cjs +7 -5
  268. package/dist/partials/FieldCopyTestIdButton/index.d.cts +1 -1
  269. package/dist/partials/FieldCopyTestIdButton/index.d.ts +1 -1
  270. package/dist/partials/FieldCopyTestIdButton/index.js +2 -3
  271. package/dist/partials/FieldValidationError/index.cjs +7 -5
  272. package/dist/partials/FieldValidationError/index.d.cts +1 -1
  273. package/dist/partials/FieldValidationError/index.d.ts +1 -1
  274. package/dist/partials/FieldValidationError/index.js +2 -3
  275. package/dist/{useClientValidation-B4xrGBJZ.d.ts → useClientValidation-BWElhQ91.d.ts} +2 -3
  276. package/dist/useClientValidation-BWElhQ91.d.ts.map +1 -0
  277. package/dist/{useClientValidation-DksyV18M.js → useClientValidation-Dn_kJkE5.js} +5 -6
  278. package/dist/{useClientValidation-DksyV18M.js.map → useClientValidation-Dn_kJkE5.js.map} +1 -1
  279. package/dist/{useClientValidation-B_dYQB5o.d.cts → useClientValidation-DtnfCE5T.d.cts} +2 -3
  280. package/dist/{useClientValidation-B4xrGBJZ.d.ts.map → useClientValidation-DtnfCE5T.d.cts.map} +1 -1
  281. package/dist/{useClientValidation-Dnj_wuwf.cjs → useClientValidation-NKOuXuHV.cjs} +16 -17
  282. package/dist/useClientValidation-NKOuXuHV.cjs.map +1 -0
  283. package/dist/{useController-NjuthTyL.js → useController-B-6PzFna.js} +4 -5
  284. package/dist/{useController-NjuthTyL.js.map → useController-B-6PzFna.js.map} +1 -1
  285. package/dist/{useController-D8MEXnmB.d.cts → useController-CNiqy_2D.d.cts} +1 -1
  286. package/dist/{useController-D8MEXnmB.d.cts.map → useController-CNiqy_2D.d.cts.map} +1 -1
  287. package/dist/{useController-CHOpoCoz.d.ts → useController-Cc0UNQMm.d.ts} +1 -1
  288. package/dist/{useController-CHOpoCoz.d.ts.map → useController-Cc0UNQMm.d.ts.map} +1 -1
  289. package/dist/{useController-B_SSp5Z5.cjs → useController-DVRh86Zy.cjs} +11 -12
  290. package/dist/{useController-B_SSp5Z5.cjs.map → useController-DVRh86Zy.cjs.map} +1 -1
  291. package/dist/{useFormContext-vdeeDsAs.cjs → useFormContext-Bum4VP1o.cjs} +20 -21
  292. package/dist/{useFormContext-vdeeDsAs.cjs.map → useFormContext-Bum4VP1o.cjs.map} +1 -1
  293. package/dist/{useFormContext-Di67HIf7.js → useFormContext-Bzpyonu6.js} +5 -6
  294. package/dist/{useFormContext-Di67HIf7.js.map → useFormContext-Bzpyonu6.js.map} +1 -1
  295. package/dist/{useFormContext-C6OOtqZ5.d.ts → useFormContext-DEMm-bsc.d.ts} +22 -22
  296. package/dist/useFormContext-DEMm-bsc.d.ts.map +1 -0
  297. package/dist/{useFormContext-Dh97YG47.d.cts → useFormContext-Dey5DbWr.d.cts} +22 -22
  298. package/dist/useFormContext-Dey5DbWr.d.cts.map +1 -0
  299. package/dist/{useInput-BWzvIUpW.js → useInput-CVm3tP78.js} +1 -2
  300. package/dist/{useInputValueDebounce-ZLyAmuXV.d.cts → useInputValueDebounce-puGRVJ6t.d.cts} +1 -1
  301. package/dist/{useInputValueDebounce-ZLyAmuXV.d.cts.map → useInputValueDebounce-puGRVJ6t.d.cts.map} +1 -1
  302. package/dist/{useInputValueDebounce-Dhlv1NUY.d.ts → useInputValueDebounce-sFOlecIQ.d.ts} +1 -1
  303. package/dist/{useInputValueDebounce-Dhlv1NUY.d.ts.map → useInputValueDebounce-sFOlecIQ.d.ts.map} +1 -1
  304. package/dist/{useInputValueTransform-CNCBU7a9.d.cts → useInputValueTransform-BwAfw8Xb.d.cts} +1 -1
  305. package/dist/{useInputValueTransform-CNCBU7a9.d.cts.map → useInputValueTransform-BwAfw8Xb.d.cts.map} +1 -1
  306. package/dist/{useInputValueTransform-C-fmz3ke.js → useInputValueTransform-CXdmtc0Q.js} +2 -3
  307. package/dist/{useInputValueTransform-C-fmz3ke.js.map → useInputValueTransform-CXdmtc0Q.js.map} +1 -1
  308. package/dist/{useInputValueTransform-tsMNM7g_.d.ts → useInputValueTransform-CdoaxNyD.d.ts} +1 -1
  309. package/dist/{useInputValueTransform-tsMNM7g_.d.ts.map → useInputValueTransform-CdoaxNyD.d.ts.map} +1 -1
  310. package/dist/{useInputValueTransform-BBRvvhDe.cjs → useInputValueTransform-DKH-7F9D.cjs} +8 -9
  311. package/dist/{useInputValueTransform-BBRvvhDe.cjs.map → useInputValueTransform-DKH-7F9D.cjs.map} +1 -1
  312. package/dist/{useUniformField-Bd_oDkYE.d.cts → useUniformField-DB8jF52F.d.cts} +5 -5
  313. package/dist/{useUniformField-Bd_oDkYE.d.cts.map → useUniformField-DB8jF52F.d.cts.map} +1 -1
  314. package/dist/{useUniformField-BDKjYBKu.d.ts → useUniformField-iHk8xYXN.d.ts} +5 -5
  315. package/dist/{useUniformField-BDKjYBKu.d.ts.map → useUniformField-iHk8xYXN.d.ts.map} +1 -1
  316. package/dist/{useUniformFieldArray-lV3Nbum2.d.ts → useUniformFieldArray-B0SPtHeT.d.ts} +18 -18
  317. package/dist/useUniformFieldArray-B0SPtHeT.d.ts.map +1 -0
  318. package/dist/{useUniformFieldArray-CWiaXKO6.d.cts → useUniformFieldArray-okvikMJp.d.cts} +18 -18
  319. package/dist/useUniformFieldArray-okvikMJp.d.cts.map +1 -0
  320. package/dist/{useWatchUserChange-C1Kluht2.cjs → useWatchUserChange-CBuIa5kU.cjs} +9 -10
  321. package/dist/{useWatchUserChange-C1Kluht2.cjs.map → useWatchUserChange-CBuIa5kU.cjs.map} +1 -1
  322. package/dist/{useWatchUserChange-BnnrFjyq.d.ts → useWatchUserChange-CH4x16_r.d.ts} +1 -1
  323. package/dist/{useWatchUserChange-BnnrFjyq.d.ts.map → useWatchUserChange-CH4x16_r.d.ts.map} +1 -1
  324. package/dist/{useWatchUserChange-Dj9Imxfi.js → useWatchUserChange-CLgLc5W4.js} +3 -4
  325. package/dist/{useWatchUserChange-Dj9Imxfi.js.map → useWatchUserChange-CLgLc5W4.js.map} +1 -1
  326. package/dist/{useWatchUserChange-DalJOKBC.d.cts → useWatchUserChange-CZu_ZZ38.d.cts} +1 -1
  327. package/dist/{useWatchUserChange-DalJOKBC.d.cts.map → useWatchUserChange-CZu_ZZ38.d.cts.map} +1 -1
  328. package/package.json +74 -70
  329. package/dist/Checkboxes-BGrK_mwQ.js.map +0 -1
  330. package/dist/Checkboxes-Dk7yyRVR.cjs.map +0 -1
  331. package/dist/FieldArray-Bs2ViU8m.js.map +0 -1
  332. package/dist/FieldArray-C6RHZcKa.cjs.map +0 -1
  333. package/dist/FieldCard-16yCF83m.js.map +0 -1
  334. package/dist/FieldCard-BxK_IJOR.cjs.map +0 -1
  335. package/dist/FieldCopyTestIdButton-4uupFq1U.cjs.map +0 -1
  336. package/dist/FieldCopyTestIdButton-BoEdlzLs.js.map +0 -1
  337. package/dist/FieldValidationError-Br6iopZj.cjs.map +0 -1
  338. package/dist/FieldValidationError-XQaViV52.js.map +0 -1
  339. package/dist/Form--SsSvsxl.cjs.map +0 -1
  340. package/dist/Form-ccsEssie.js.map +0 -1
  341. package/dist/Grid-BaqBa1ku.js.map +0 -1
  342. package/dist/Grid-D5Yf0nD_.cjs.map +0 -1
  343. package/dist/Input-B3p_4ntD.cjs.map +0 -1
  344. package/dist/RadioBoxes-C3Cwrn2I.js.map +0 -1
  345. package/dist/RadioBoxes-xRvNe5U8.cjs.map +0 -1
  346. package/dist/RadioTabs-BaHvYcd-.cjs.map +0 -1
  347. package/dist/RadioTabs-DfOGIsEf.js.map +0 -1
  348. package/dist/Radios-BfA3uL35.cjs.map +0 -1
  349. package/dist/Radios-xM-09vB5.js.map +0 -1
  350. package/dist/Select-DH_YaruM.cjs.map +0 -1
  351. package/dist/Select-DlEUzYl6.js.map +0 -1
  352. package/dist/Slider-C-dMrJZ6.cjs.map +0 -1
  353. package/dist/SubmitButton-Bh1RN0F1.js.map +0 -1
  354. package/dist/SubmitButton-CJ6s1mZr.cjs.map +0 -1
  355. package/dist/Switch-CeUMwheZ.cjs.map +0 -1
  356. package/dist/SwitchBox-C-aLl2nX.js.map +0 -1
  357. package/dist/SwitchBox-mGUPvJE0.cjs.map +0 -1
  358. package/dist/TextArea-BLkVYmHZ.js.map +0 -1
  359. package/dist/TextArea-BYEuk4Ng.cjs.map +0 -1
  360. package/dist/helpers-33jajRcN.js +0 -390
  361. package/dist/helpers-33jajRcN.js.map +0 -1
  362. package/dist/helpers-Bd_QpqXg.cjs +0 -444
  363. package/dist/helpers-Bd_QpqXg.cjs.map +0 -1
  364. package/dist/index--KhDRPu3.d.cts.map +0 -1
  365. package/dist/index-B0rp5NJy.d.cts.map +0 -1
  366. package/dist/index-BBw9RSKy.d.ts +0 -278
  367. package/dist/index-BBw9RSKy.d.ts.map +0 -1
  368. package/dist/index-BKQc5PQn.d.cts.map +0 -1
  369. package/dist/index-BLgXFM85.d.cts +0 -224
  370. package/dist/index-BLgXFM85.d.cts.map +0 -1
  371. package/dist/index-BaxXDaOZ.d.ts.map +0 -1
  372. package/dist/index-BgyvEfYZ.d.ts.map +0 -1
  373. package/dist/index-BjHnNRSC.d.cts +0 -278
  374. package/dist/index-BjHnNRSC.d.cts.map +0 -1
  375. package/dist/index-Bl1Adhfx.d.ts.map +0 -1
  376. package/dist/index-BlJFGN_o.d.ts.map +0 -1
  377. package/dist/index-BlX_mF6D.d.cts.map +0 -1
  378. package/dist/index-BrMk3Wee.d.ts.map +0 -1
  379. package/dist/index-BsCPUK2g.d.cts.map +0 -1
  380. package/dist/index-C1-F9Ga-.d.cts.map +0 -1
  381. package/dist/index-CI0AWMsR.d.ts.map +0 -1
  382. package/dist/index-CMehV9mc.d.ts.map +0 -1
  383. package/dist/index-CZq5eXSP.d.ts.map +0 -1
  384. package/dist/index-CeiIXmAI.d.cts.map +0 -1
  385. package/dist/index-DFzyOxvt.d.cts.map +0 -1
  386. package/dist/index-Dr06SNZN.d.cts.map +0 -1
  387. package/dist/index-Dty4h2eA.d.ts.map +0 -1
  388. package/dist/index-E6etS7_8.d.ts.map +0 -1
  389. package/dist/index-TmijvCD0.d.ts.map +0 -1
  390. package/dist/index-ahxY6Q0X.d.cts.map +0 -1
  391. package/dist/index-mmk9VKYu.d.ts.map +0 -1
  392. package/dist/index-w8E8Koak.d.ts +0 -224
  393. package/dist/index-w8E8Koak.d.ts.map +0 -1
  394. package/dist/index-wwmQClW-.d.cts.map +0 -1
  395. package/dist/useClientValidation-B_dYQB5o.d.cts.map +0 -1
  396. package/dist/useClientValidation-Dnj_wuwf.cjs.map +0 -1
  397. package/dist/useFormContext-C6OOtqZ5.d.ts.map +0 -1
  398. package/dist/useFormContext-CLymm_7t.js +0 -6
  399. package/dist/useFormContext-CLymm_7t.js.map +0 -1
  400. package/dist/useFormContext-CkeSOfWD.cjs +0 -6
  401. package/dist/useFormContext-CkeSOfWD.cjs.map +0 -1
  402. package/dist/useFormContext-Dh97YG47.d.cts.map +0 -1
  403. package/dist/useInputValueDebounce-CRaM7HEM.cjs +0 -99
  404. package/dist/useInputValueDebounce-CRaM7HEM.cjs.map +0 -1
  405. package/dist/useInputValueDebounce-DJO5uzLb.js +0 -93
  406. package/dist/useInputValueDebounce-DJO5uzLb.js.map +0 -1
  407. package/dist/useUniformField-6c4OCAfb.cjs +0 -142
  408. package/dist/useUniformField-6c4OCAfb.cjs.map +0 -1
  409. package/dist/useUniformField-C-Xyu-8v.js +0 -135
  410. package/dist/useUniformField-C-Xyu-8v.js.map +0 -1
  411. package/dist/useUniformFieldArray-BKvA0FQW.js +0 -84
  412. package/dist/useUniformFieldArray-BKvA0FQW.js.map +0 -1
  413. package/dist/useUniformFieldArray-CRCbV1J2.cjs +0 -90
  414. package/dist/useUniformFieldArray-CRCbV1J2.cjs.map +0 -1
  415. package/dist/useUniformFieldArray-CWiaXKO6.d.cts.map +0 -1
  416. package/dist/useUniformFieldArray-lV3Nbum2.d.ts.map +0 -1
  417. /package/dist/{index-BMCcWGYS.d.ts → index--okzibnx.d.ts} +0 -0
  418. /package/dist/{index-C8k_zgEm.d.cts → index-B2TCFhpj.d.ts} +0 -0
  419. /package/dist/{index-DDRpa5CJ.d.cts → index-BtBZHVmz.d.cts} +0 -0
  420. /package/dist/{index-GGHuYh77.d.ts → index-CI4LJief.d.ts} +0 -0
  421. /package/dist/{useInput-BVZvtfNg.d.ts → useInput-93TCCrkB.d.cts} +0 -0
  422. /package/dist/{useInput-CKmKH9Ij.d.cts → useInput-C_fY--wx.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- import { n as RadioBoxes, r as RadioBoxesProps, t as radioBoxVariants } from "../index-B0rp5NJy.cjs";
1
+ import { n as RadioBoxes, r as RadioBoxesProps, t as radioBoxVariants } from "../index-DMwNV_Br.cjs";
2
2
  export { RadioBoxes, RadioBoxes as default, RadioBoxesProps, radioBoxVariants };
@@ -1,2 +1,2 @@
1
- import { n as RadioBoxes, r as RadioBoxesProps, t as radioBoxVariants } from "../index-BaxXDaOZ.js";
1
+ import { n as RadioBoxes, r as RadioBoxesProps, t as radioBoxVariants } from "../index-Gs3zrYoY.js";
2
2
  export { RadioBoxes, RadioBoxes as default, RadioBoxesProps, radioBoxVariants };
@@ -1,3 +1,2 @@
1
- import { n as RadioBoxes_default, r as radioBoxVariants, t as RadioBoxes_default$1 } from "../RadioBoxes-C3Cwrn2I.js";
2
-
3
- export { RadioBoxes_default as RadioBoxes, RadioBoxes_default$1 as default, radioBoxVariants };
1
+ import { n as RadioBoxes, r as radioBoxVariants, t as RadioBoxes_default } from "../RadioBoxes-BR3X986V.js";
2
+ export { RadioBoxes, RadioBoxes_default as default, radioBoxVariants };
@@ -1,10 +1,9 @@
1
- import { l as createOptionValueConverter } from "./helpers-33jajRcN.js";
2
- import { t as useUniformField } from "./useUniformField-C-Xyu-8v.js";
1
+ import { createOptionValueConverter } from "./helpers/index.js";
2
+ import { useUniformField } from "./hooks/useUniformField/index.js";
3
3
  import { cn, slugify, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { RadioGroup, useRadio } from "@heroui/radio";
6
6
  import { VisuallyHidden } from "@react-aria/visually-hidden";
7
-
8
7
  //#region src/RadioBoxes/RadioBox.tsx
9
8
  const radioBoxVariants = tv({
10
9
  slots: {
@@ -64,7 +63,6 @@ const RadioBox = ({ classNames: _classNames = void 0, icon = void 0, isInvalid =
64
63
  ]
65
64
  });
66
65
  };
67
-
68
66
  //#endregion
69
67
  //#region src/RadioBoxes/RadioBoxes.tsx
70
68
  const radioBoxesVariants = tv({ slots: {
@@ -114,29 +112,24 @@ const RadioBoxes = ({ className = void 0, inline = false, name, options, ...unif
114
112
  onChange(convertToOriginalType(newValue));
115
113
  },
116
114
  children: options.map((option) => {
117
- if ("value" in option) {
118
- const optionTestId = slugify(`${testId}_option_${option.testId ?? option.value}`, { replaceDots: true });
119
- return /* @__PURE__ */ jsx(RadioBox, {
120
- classNames: boxClassNames,
121
- "data-testid": optionTestId,
122
- description: option.description,
123
- icon: option.icon,
124
- isDisabled: !!disabled || option.disabled,
125
- isInvalid: invalid,
126
- value: String(option.value),
127
- children: option.label ?? option.value
128
- }, String(option.value));
129
- }
115
+ if ("value" in option) return /* @__PURE__ */ jsx(RadioBox, {
116
+ classNames: boxClassNames,
117
+ "data-testid": slugify(`${testId}_option_${option.testId ?? option.value}`, { replaceDots: true }),
118
+ description: option.description,
119
+ icon: option.icon,
120
+ isDisabled: !!disabled || option.disabled,
121
+ isInvalid: invalid,
122
+ value: String(option.value),
123
+ children: option.label ?? option.value
124
+ }, String(option.value));
130
125
  return null;
131
126
  })
132
127
  });
133
128
  };
134
- var RadioBoxes_default$1 = RadioBoxes;
135
-
136
129
  //#endregion
137
130
  //#region src/RadioBoxes/index.ts
138
- var RadioBoxes_default = RadioBoxes_default$1;
139
-
131
+ var RadioBoxes_default = RadioBoxes;
140
132
  //#endregion
141
- export { RadioBoxes_default$1 as n, radioBoxVariants as r, RadioBoxes_default as t };
142
- //# sourceMappingURL=RadioBoxes-C3Cwrn2I.js.map
133
+ export { RadioBoxes as n, radioBoxVariants as r, RadioBoxes_default as t };
134
+
135
+ //# sourceMappingURL=RadioBoxes-BR3X986V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioBoxes-BR3X986V.js","names":["HeroRadioGroup"],"sources":["../src/RadioBoxes/RadioBox.tsx","../src/RadioBoxes/RadioBoxes.tsx","../src/RadioBoxes/index.ts"],"sourcesContent":["import type { TVClassName } from '@fuf-stack/pixel-utils';\nimport type { RadioProps as HeroRadioProps } from '@heroui/radio';\nimport type { ReactNode } from 'react';\n\nimport { useRadio } from '@heroui/radio';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\n\nimport { cn, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nexport const radioBoxVariants = tv({\n slots: {\n base: 'group inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 border-default p-4 hover:bg-content2 data-[selected=true]:border-focus',\n control: '',\n description: 'text-foreground opacity-70 text-small',\n icon: '',\n label: '',\n labelWrapper: 'grow',\n },\n variants: {\n isDisabled: {\n true: {\n base: 'pointer-events-none opacity-disabled',\n },\n },\n isInvalid: {\n true: {\n base: '!border-danger',\n },\n },\n },\n});\n\ntype ClassName = TVClassName<typeof radioBoxVariants>;\n\nexport interface RadioBoxProps extends Omit<HeroRadioProps, 'className'> {\n /** CSS class name */\n className?: ClassName;\n /** icon for the option */\n icon?: ReactNode;\n /** whether the radio is invalid */\n isInvalid?: boolean;\n}\n\nexport const RadioBox = ({\n classNames: _classNames = undefined,\n icon = undefined,\n isInvalid = false,\n ...props\n}: RadioBoxProps) => {\n const {\n children,\n Component,\n description,\n getBaseProps,\n getControlProps,\n getInputProps,\n getLabelProps,\n getLabelWrapperProps,\n getWrapperProps,\n isDisabled,\n } = useRadio(props as HeroRadioProps);\n\n // classNames from slots\n const variants = radioBoxVariants({\n isDisabled,\n isInvalid,\n });\n const classNames = variantsToClassNames(\n variants,\n // @ts-expect-error not sure here, but it works\n _classNames,\n 'base',\n );\n\n return (\n <Component {...getBaseProps()} className={classNames.base}>\n <VisuallyHidden>\n <input {...getInputProps()} />\n </VisuallyHidden>\n {!icon ? (\n <span {...getWrapperProps()}>\n <span\n {...getControlProps()}\n className={cn(getControlProps().className, classNames.control)}\n />\n </span>\n ) : null}\n {icon ? <div className={classNames.icon}>{icon}</div> : null}\n <div\n {...getLabelWrapperProps()}\n className={cn(\n getLabelWrapperProps().className,\n classNames.labelWrapper,\n )}\n >\n {children ? (\n <span\n {...getLabelProps()}\n className={cn(getLabelProps().className, classNames.label)}\n >\n {children}\n </span>\n ) : null}\n {description ? (\n <div className={classNames.description}>{description}</div>\n ) : null}\n </div>\n {icon ? (\n <span {...getWrapperProps()}>\n <span\n {...getControlProps()}\n className={cn(getControlProps().className, classNames.control)}\n />\n </span>\n ) : null}\n </Component>\n );\n};\n\nexport default RadioBox;\n","import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactNode } from 'react';\n//\nimport type { RadioBoxProps } from './RadioBox';\n\nimport { RadioGroup as HeroRadioGroup } from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { createOptionValueConverter } from '../helpers';\nimport { useUniformField } from '../hooks/useUniformField';\nimport { RadioBox } from './RadioBox';\n\nexport const radioBoxesVariants = tv({\n slots: {\n base: 'group gap-0', // Needs group for group-data condition\n boxBase: '',\n boxControl: '',\n boxDescription: '',\n boxLabel: '',\n boxLabelWrapper: '',\n // see HeroUI styles for group-data condition,\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'mb-2 inline-flex text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radioBoxesVariants>;\ntype ClassName = TVClassName<typeof radioBoxesVariants>;\n\nexport interface RadioBoxesOption {\n /** Description of the value. Works with variant radioBox. */\n description?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string | number;\n}\n\nexport interface RadioBoxesProps extends VariantProps {\n /** Custom aria-label for accessibility. If not provided, falls back to field name when no visible label exists */\n ariaLabel?: string;\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioBoxesOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * RadioBoxes component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst RadioBoxes = ({\n className = undefined,\n inline = false,\n name,\n options,\n ...uniformFieldProps\n}: RadioBoxesProps) => {\n const {\n ariaLabel,\n errorMessage,\n invalid,\n disabled,\n label,\n field: { onBlur, onChange, ref, value },\n required,\n testId,\n } = useUniformField({\n name,\n ...uniformFieldProps,\n });\n\n // Create converter to preserve number types for option values\n const { convertToOriginalType } = createOptionValueConverter(options);\n\n // classNames from slots\n const variants = radioBoxesVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n const boxClassNames: RadioBoxProps['classNames'] = {\n base: classNames.boxBase,\n control: classNames.boxControl,\n description: classNames.boxDescription,\n label: classNames.boxLabel,\n labelWrapper: classNames.boxLabelWrapper,\n };\n\n return (\n <HeroRadioGroup\n ref={ref}\n aria-label={ariaLabel}\n classNames={classNames}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n errorMessage={errorMessage}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label ? <legend>{label}</legend> : null}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n value={value != null ? String(value) : ''}\n onValueChange={(newValue) => {\n onChange(convertToOriginalType(newValue));\n }}\n >\n {options.map((option) => {\n if ('value' in option) {\n const optionTestId = slugify(\n `${testId}_option_${option.testId ?? option.value}`,\n { replaceDots: true },\n );\n return (\n <RadioBox\n key={String(option.value)}\n classNames={boxClassNames}\n data-testid={optionTestId}\n description={option.description}\n icon={option.icon}\n isDisabled={!!disabled || option.disabled}\n isInvalid={invalid}\n value={String(option.value)}\n >\n {option.label ?? option.value}\n </RadioBox>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default RadioBoxes;\n","import RadioBoxes from './RadioBoxes';\n\nexport type { RadioBoxesProps } from './RadioBoxes';\nexport { radioBoxVariants } from './RadioBox';\n\nexport { RadioBoxes };\n\nexport default RadioBoxes;\n"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- const require_FormContext = require('./FormContext-BSLO2-sO.cjs');
2
- const require_helpers = require('./helpers-Bd_QpqXg.cjs');
3
- const require_useUniformField = require('./useUniformField-6c4OCAfb.cjs');
1
+ require("./FormContext-BrY1FQYR.cjs");
2
+ const require_helpers_index = require("./helpers/index.cjs");
3
+ const require_hooks_useUniformField_index = require("./hooks/useUniformField/index.cjs");
4
4
  let _fuf_stack_pixel_utils = require("@fuf-stack/pixel-utils");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
6
  let _heroui_radio = require("@heroui/radio");
7
7
  let _react_aria_visually_hidden = require("@react-aria/visually-hidden");
8
-
9
8
  //#region src/RadioBoxes/RadioBox.tsx
10
9
  const radioBoxVariants = (0, _fuf_stack_pixel_utils.tv)({
11
10
  slots: {
@@ -65,7 +64,6 @@ const RadioBox = ({ classNames: _classNames = void 0, icon = void 0, isInvalid =
65
64
  ]
66
65
  });
67
66
  };
68
-
69
67
  //#endregion
70
68
  //#region src/RadioBoxes/RadioBoxes.tsx
71
69
  const radioBoxesVariants = (0, _fuf_stack_pixel_utils.tv)({ slots: {
@@ -82,11 +80,11 @@ const radioBoxesVariants = (0, _fuf_stack_pixel_utils.tv)({ slots: {
82
80
  * RadioBoxes component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)
83
81
  */
84
82
  const RadioBoxes = ({ className = void 0, inline = false, name, options, ...uniformFieldProps }) => {
85
- const { ariaLabel, errorMessage, invalid, disabled, label, field: { onBlur, onChange, ref, value }, required, testId } = require_useUniformField.useUniformField({
83
+ const { ariaLabel, errorMessage, invalid, disabled, label, field: { onBlur, onChange, ref, value }, required, testId } = require_hooks_useUniformField_index.useUniformField({
86
84
  name,
87
85
  ...uniformFieldProps
88
86
  });
89
- const { convertToOriginalType } = require_helpers.createOptionValueConverter(options);
87
+ const { convertToOriginalType } = require_helpers_index.createOptionValueConverter(options);
90
88
  const classNames = (0, _fuf_stack_pixel_utils.variantsToClassNames)(radioBoxesVariants(), className, "base");
91
89
  const boxClassNames = {
92
90
  base: classNames.boxBase,
@@ -115,46 +113,41 @@ const RadioBoxes = ({ className = void 0, inline = false, name, options, ...unif
115
113
  onChange(convertToOriginalType(newValue));
116
114
  },
117
115
  children: options.map((option) => {
118
- if ("value" in option) {
119
- const optionTestId = (0, _fuf_stack_pixel_utils.slugify)(`${testId}_option_${option.testId ?? option.value}`, { replaceDots: true });
120
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RadioBox, {
121
- classNames: boxClassNames,
122
- "data-testid": optionTestId,
123
- description: option.description,
124
- icon: option.icon,
125
- isDisabled: !!disabled || option.disabled,
126
- isInvalid: invalid,
127
- value: String(option.value),
128
- children: option.label ?? option.value
129
- }, String(option.value));
130
- }
116
+ if ("value" in option) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RadioBox, {
117
+ classNames: boxClassNames,
118
+ "data-testid": (0, _fuf_stack_pixel_utils.slugify)(`${testId}_option_${option.testId ?? option.value}`, { replaceDots: true }),
119
+ description: option.description,
120
+ icon: option.icon,
121
+ isDisabled: !!disabled || option.disabled,
122
+ isInvalid: invalid,
123
+ value: String(option.value),
124
+ children: option.label ?? option.value
125
+ }, String(option.value));
131
126
  return null;
132
127
  })
133
128
  });
134
129
  };
135
- var RadioBoxes_default$1 = RadioBoxes;
136
-
137
130
  //#endregion
138
131
  //#region src/RadioBoxes/index.ts
139
- var RadioBoxes_default = RadioBoxes_default$1;
140
-
132
+ var RadioBoxes_default = RadioBoxes;
141
133
  //#endregion
142
- Object.defineProperty(exports, 'RadioBoxes_default', {
143
- enumerable: true,
144
- get: function () {
145
- return RadioBoxes_default;
146
- }
134
+ Object.defineProperty(exports, "RadioBoxes", {
135
+ enumerable: true,
136
+ get: function() {
137
+ return RadioBoxes;
138
+ }
147
139
  });
148
- Object.defineProperty(exports, 'RadioBoxes_default$1', {
149
- enumerable: true,
150
- get: function () {
151
- return RadioBoxes_default$1;
152
- }
140
+ Object.defineProperty(exports, "RadioBoxes_default", {
141
+ enumerable: true,
142
+ get: function() {
143
+ return RadioBoxes_default;
144
+ }
153
145
  });
154
- Object.defineProperty(exports, 'radioBoxVariants', {
155
- enumerable: true,
156
- get: function () {
157
- return radioBoxVariants;
158
- }
146
+ Object.defineProperty(exports, "radioBoxVariants", {
147
+ enumerable: true,
148
+ get: function() {
149
+ return radioBoxVariants;
150
+ }
159
151
  });
160
- //# sourceMappingURL=RadioBoxes-xRvNe5U8.cjs.map
152
+
153
+ //# sourceMappingURL=RadioBoxes-Cim3InDW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioBoxes-Cim3InDW.cjs","names":["VisuallyHidden","useUniformField","createOptionValueConverter","HeroRadioGroup"],"sources":["../src/RadioBoxes/RadioBox.tsx","../src/RadioBoxes/RadioBoxes.tsx","../src/RadioBoxes/index.ts"],"sourcesContent":["import type { TVClassName } from '@fuf-stack/pixel-utils';\nimport type { RadioProps as HeroRadioProps } from '@heroui/radio';\nimport type { ReactNode } from 'react';\n\nimport { useRadio } from '@heroui/radio';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\n\nimport { cn, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nexport const radioBoxVariants = tv({\n slots: {\n base: 'group inline-flex flex-auto cursor-pointer items-center justify-between gap-4 rounded-lg border-2 border-default p-4 hover:bg-content2 data-[selected=true]:border-focus',\n control: '',\n description: 'text-foreground opacity-70 text-small',\n icon: '',\n label: '',\n labelWrapper: 'grow',\n },\n variants: {\n isDisabled: {\n true: {\n base: 'pointer-events-none opacity-disabled',\n },\n },\n isInvalid: {\n true: {\n base: '!border-danger',\n },\n },\n },\n});\n\ntype ClassName = TVClassName<typeof radioBoxVariants>;\n\nexport interface RadioBoxProps extends Omit<HeroRadioProps, 'className'> {\n /** CSS class name */\n className?: ClassName;\n /** icon for the option */\n icon?: ReactNode;\n /** whether the radio is invalid */\n isInvalid?: boolean;\n}\n\nexport const RadioBox = ({\n classNames: _classNames = undefined,\n icon = undefined,\n isInvalid = false,\n ...props\n}: RadioBoxProps) => {\n const {\n children,\n Component,\n description,\n getBaseProps,\n getControlProps,\n getInputProps,\n getLabelProps,\n getLabelWrapperProps,\n getWrapperProps,\n isDisabled,\n } = useRadio(props as HeroRadioProps);\n\n // classNames from slots\n const variants = radioBoxVariants({\n isDisabled,\n isInvalid,\n });\n const classNames = variantsToClassNames(\n variants,\n // @ts-expect-error not sure here, but it works\n _classNames,\n 'base',\n );\n\n return (\n <Component {...getBaseProps()} className={classNames.base}>\n <VisuallyHidden>\n <input {...getInputProps()} />\n </VisuallyHidden>\n {!icon ? (\n <span {...getWrapperProps()}>\n <span\n {...getControlProps()}\n className={cn(getControlProps().className, classNames.control)}\n />\n </span>\n ) : null}\n {icon ? <div className={classNames.icon}>{icon}</div> : null}\n <div\n {...getLabelWrapperProps()}\n className={cn(\n getLabelWrapperProps().className,\n classNames.labelWrapper,\n )}\n >\n {children ? (\n <span\n {...getLabelProps()}\n className={cn(getLabelProps().className, classNames.label)}\n >\n {children}\n </span>\n ) : null}\n {description ? (\n <div className={classNames.description}>{description}</div>\n ) : null}\n </div>\n {icon ? (\n <span {...getWrapperProps()}>\n <span\n {...getControlProps()}\n className={cn(getControlProps().className, classNames.control)}\n />\n </span>\n ) : null}\n </Component>\n );\n};\n\nexport default RadioBox;\n","import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactNode } from 'react';\n//\nimport type { RadioBoxProps } from './RadioBox';\n\nimport { RadioGroup as HeroRadioGroup } from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { createOptionValueConverter } from '../helpers';\nimport { useUniformField } from '../hooks/useUniformField';\nimport { RadioBox } from './RadioBox';\n\nexport const radioBoxesVariants = tv({\n slots: {\n base: 'group gap-0', // Needs group for group-data condition\n boxBase: '',\n boxControl: '',\n boxDescription: '',\n boxLabel: '',\n boxLabelWrapper: '',\n // see HeroUI styles for group-data condition,\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'mb-2 inline-flex text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radioBoxesVariants>;\ntype ClassName = TVClassName<typeof radioBoxesVariants>;\n\nexport interface RadioBoxesOption {\n /** Description of the value. Works with variant radioBox. */\n description?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string | number;\n}\n\nexport interface RadioBoxesProps extends VariantProps {\n /** Custom aria-label for accessibility. If not provided, falls back to field name when no visible label exists */\n ariaLabel?: string;\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioBoxesOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * RadioBoxes component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst RadioBoxes = ({\n className = undefined,\n inline = false,\n name,\n options,\n ...uniformFieldProps\n}: RadioBoxesProps) => {\n const {\n ariaLabel,\n errorMessage,\n invalid,\n disabled,\n label,\n field: { onBlur, onChange, ref, value },\n required,\n testId,\n } = useUniformField({\n name,\n ...uniformFieldProps,\n });\n\n // Create converter to preserve number types for option values\n const { convertToOriginalType } = createOptionValueConverter(options);\n\n // classNames from slots\n const variants = radioBoxesVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n const boxClassNames: RadioBoxProps['classNames'] = {\n base: classNames.boxBase,\n control: classNames.boxControl,\n description: classNames.boxDescription,\n label: classNames.boxLabel,\n labelWrapper: classNames.boxLabelWrapper,\n };\n\n return (\n <HeroRadioGroup\n ref={ref}\n aria-label={ariaLabel}\n classNames={classNames}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n errorMessage={errorMessage}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label ? <legend>{label}</legend> : null}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n value={value != null ? String(value) : ''}\n onValueChange={(newValue) => {\n onChange(convertToOriginalType(newValue));\n }}\n >\n {options.map((option) => {\n if ('value' in option) {\n const optionTestId = slugify(\n `${testId}_option_${option.testId ?? option.value}`,\n { replaceDots: true },\n );\n return (\n <RadioBox\n key={String(option.value)}\n classNames={boxClassNames}\n data-testid={optionTestId}\n description={option.description}\n icon={option.icon}\n isDisabled={!!disabled || option.disabled}\n isInvalid={invalid}\n value={String(option.value)}\n >\n {option.label ?? option.value}\n </RadioBox>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default RadioBoxes;\n","import RadioBoxes from './RadioBoxes';\n\nexport type { RadioBoxesProps } from './RadioBoxes';\nexport { radioBoxVariants } from './RadioBox';\n\nexport { RadioBoxes };\n\nexport default RadioBoxes;\n"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
2
- const require_RadioTabs = require('../RadioTabs-BaHvYcd-.cjs');
3
-
4
- exports.RadioTabs = require_RadioTabs.RadioTabs_default$1;
5
- exports.default = require_RadioTabs.RadioTabs_default;
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_RadioTabs = require("../RadioTabs-t-x2XnuI.cjs");
6
+ exports.RadioTabs = require_RadioTabs.RadioTabs;
7
+ exports.default = require_RadioTabs.RadioTabs_default;
@@ -1,2 +1,2 @@
1
- import { n as RadioTabsProps, t as RadioTabs } from "../index-Dr06SNZN.cjs";
1
+ import { n as RadioTabsProps, t as RadioTabs } from "../index-CY2Mpaz3.cjs";
2
2
  export { RadioTabs, RadioTabs as default, RadioTabsProps };
@@ -1,2 +1,2 @@
1
- import { n as RadioTabsProps, t as RadioTabs } from "../index-BrMk3Wee.js";
1
+ import { n as RadioTabsProps, t as RadioTabs } from "../index-DD_RPe91.js";
2
2
  export { RadioTabs, RadioTabs as default, RadioTabsProps };
@@ -1,3 +1,2 @@
1
- import { n as RadioTabs_default, t as RadioTabs_default$1 } from "../RadioTabs-DfOGIsEf.js";
2
-
3
- export { RadioTabs_default as RadioTabs, RadioTabs_default$1 as default };
1
+ import { n as RadioTabs, t as RadioTabs_default } from "../RadioTabs-CsVqYCE9.js";
2
+ export { RadioTabs, RadioTabs_default as default };
@@ -1,12 +1,11 @@
1
- import { l as createOptionValueConverter } from "./helpers-33jajRcN.js";
2
- import { t as useUniformField } from "./useUniformField-C-Xyu-8v.js";
1
+ import { createOptionValueConverter } from "./helpers/index.js";
2
+ import { useUniformField } from "./hooks/useUniformField/index.js";
3
3
  import { slugify, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
4
4
  import { useRef } from "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { RadioGroup } from "@heroui/radio";
7
7
  import { VisuallyHidden } from "@react-aria/visually-hidden";
8
8
  import Tabs from "@fuf-stack/pixels/Tabs";
9
-
10
9
  //#region src/RadioTabs/RadioTabs.tsx
11
10
  const radioTabsVariants = tv({
12
11
  slots: {
@@ -112,12 +111,10 @@ const RadioTabs = ({ className = void 0, fullWidth = false, inline = false, name
112
111
  })
113
112
  })] });
114
113
  };
115
- var RadioTabs_default$1 = RadioTabs;
116
-
117
114
  //#endregion
118
115
  //#region src/RadioTabs/index.ts
119
- var RadioTabs_default = RadioTabs_default$1;
120
-
116
+ var RadioTabs_default = RadioTabs;
121
117
  //#endregion
122
- export { RadioTabs_default$1 as n, RadioTabs_default as t };
123
- //# sourceMappingURL=RadioTabs-DfOGIsEf.js.map
118
+ export { RadioTabs as n, RadioTabs_default as t };
119
+
120
+ //# sourceMappingURL=RadioTabs-CsVqYCE9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioTabs-CsVqYCE9.js","names":["HeroRadioGroup"],"sources":["../src/RadioTabs/RadioTabs.tsx","../src/RadioTabs/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { TabsProps } from '@fuf-stack/pixels';\nimport type { TabProps } from '@fuf-stack/pixels/Tabs';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { useRef } from 'react';\n\nimport { RadioGroup as HeroRadioGroup } from '@heroui/radio';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\nimport Tabs from '@fuf-stack/pixels/Tabs';\n\nimport { createOptionValueConverter } from '../helpers';\nimport { useUniformField } from '../hooks/useUniformField';\n\nexport const radioTabsVariants = tv({\n slots: {\n base: 'group gap-0', // Needs group for group-data condition\n cursor: '',\n label:\n 'mb-2 inline-flex text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n tab: '',\n tabBase: '',\n tabContent: '',\n tabList: '',\n tabPanel: 'p-3',\n tabWrapper: '',\n wrapper: '',\n },\n variants: {\n hasContent: {\n true: {\n base: '',\n tabBase: 'p-1',\n tabWrapper: [\n // border style\n 'rounded-medium border border-divider',\n // full width\n 'w-full',\n ],\n },\n },\n fullWidth: {\n true: {\n tabWrapper: 'w-full',\n },\n },\n isInvalid: {\n true: {\n tabWrapper: 'rounded-medium border-2 !border-danger',\n },\n },\n },\n});\n\ntype VariantProps = TVProps<typeof radioTabsVariants>;\ntype ClassName = TVClassName<typeof radioTabsVariants>;\n\nexport interface RadioTabsOption {\n /** Optional content inside of the tab */\n content?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string | number | boolean;\n}\n\nexport interface RadioTabsProps extends Omit<VariantProps, 'hasContent'> {\n /** Custom aria-label for accessibility. If not provided, falls back to field name when no visible label exists */\n ariaLabel?: string;\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** Whether tabs should take up full container width */\n fullWidth?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioTabsOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n /** How the RadioTabs should look like. */\n variant?: TabsProps['variant'];\n}\n\n/**\n * RadioTabs component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n * and [HeroUI Tabs](https://www.heroui.com//docs/components/tabs)\n */\nconst RadioTabs = ({\n className = undefined,\n fullWidth = false,\n inline = false,\n name,\n options,\n variant = undefined,\n ...uniformFieldProps\n}: RadioTabsProps): ReactElement => {\n const {\n ariaLabel,\n disabled,\n errorMessage,\n field: { onBlur, onChange, ref, value },\n invalid,\n label,\n required,\n testId,\n } = useUniformField({\n name,\n ...uniformFieldProps,\n });\n\n // Create a ref for the visual radio group to forward focus\n const visualRadioGroupRef = useRef<HTMLDivElement>(null);\n\n // Create converter to preserve number types for option values\n const { convertToOriginalType } = createOptionValueConverter(options);\n\n const tabOptions = options.map<TabProps>((option) => {\n return {\n content: option?.content,\n disabled: option?.disabled,\n // Tabs component uses string keys internally\n key: String(option.value),\n label: option?.label ?? option?.value,\n testId: slugify(`option_${option?.testId ?? option?.value}`, {\n replaceDots: true,\n }),\n };\n });\n\n const disabledAllKeys: string[] | undefined = tabOptions?.map((option) => {\n return option.key as string;\n });\n\n // check if any option has content\n // eslint-disable-next-line @typescript-eslint/no-misused-promises, @typescript-eslint/promise-function-async\n const hasContent = options.some((option) => {\n return option.content;\n });\n\n // classNames from slots\n const variants = radioTabsVariants({\n fullWidth,\n hasContent,\n isInvalid: invalid,\n });\n const classNames = variantsToClassNames(variants, className, 'base');\n\n return (\n <>\n {/* Visually hidden input for React Hook Form focus management */}\n <VisuallyHidden>\n <input\n ref={ref}\n aria-label={ariaLabel}\n name={name}\n onBlur={onBlur}\n value={value ?? ''}\n onChange={(e) => {\n onChange(convertToOriginalType(e.target.value));\n }}\n onFocus={() => {\n // Forward focus to the first tab when RHF focuses this input\n const firstTab = visualRadioGroupRef.current?.querySelector(\n '[role=\"tab\"]',\n ) as HTMLElement;\n firstTab?.focus();\n }}\n />\n </VisuallyHidden>\n\n <HeroRadioGroup\n ref={visualRadioGroupRef}\n aria-label={ariaLabel}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n errorMessage={errorMessage}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label ? <legend>{label}</legend> : null}\n name={`${name}_radiotabs`}\n orientation={inline ? 'horizontal' : 'vertical'}\n classNames={{\n base: classNames.base,\n label: classNames.label,\n wrapper: classNames.wrapper,\n }}\n >\n <Tabs\n disabledKeys={disabled ? disabledAllKeys : undefined}\n // make sure component is controlled (convert to string for Tabs)\n selectedKey={value != null ? String(value) : ''}\n tabs={tabOptions}\n testId={testId}\n variant={variant}\n className={{\n base: classNames.tabBase,\n cursor: classNames.cursor,\n panel: classNames.tabPanel,\n tab: classNames.tab,\n tabContent: classNames.tabContent,\n tabList: classNames.tabList,\n tabWrapper: classNames.tabWrapper,\n }}\n onSelectionChange={(key) => {\n if (key != null) {\n onChange(convertToOriginalType(key));\n }\n }}\n />\n </HeroRadioGroup>\n </>\n );\n};\n\nexport default RadioTabs;\n","import RadioTabs from './RadioTabs';\n\nexport type { RadioTabsProps } from './RadioTabs';\n\nexport { RadioTabs };\n\nexport default RadioTabs;\n"],"mappings":";;;;;;;;;AAgBA,MAAa,oBAAoB,GAAG;CAClC,OAAO;EACL,MAAM;EACN,QAAQ;EACR,OACE;EACF,KAAK;EACL,SAAS;EACT,YAAY;EACZ,SAAS;EACT,UAAU;EACV,YAAY;EACZ,SAAS;EACV;CACD,UAAU;EACR,YAAY,EACV,MAAM;GACJ,MAAM;GACN,SAAS;GACT,YAAY,CAEV,wCAEA,SACD;GACF,EACF;EACD,WAAW,EACT,MAAM,EACJ,YAAY,UACb,EACF;EACD,WAAW,EACT,MAAM,EACJ,YAAY,0CACb,EACF;EACF;CACF,CAAC;;;;;AA+CF,MAAM,aAAa,EACjB,YAAY,KAAA,GACZ,YAAY,OACZ,SAAS,OACT,MACA,SACA,UAAU,KAAA,GACV,GAAG,wBAC+B;CAClC,MAAM,EACJ,WACA,UACA,cACA,OAAO,EAAE,QAAQ,UAAU,KAAK,SAChC,SACA,OACA,UACA,WACE,gBAAgB;EAClB;EACA,GAAG;EACJ,CAAC;CAGF,MAAM,sBAAsB,OAAuB,KAAK;CAGxD,MAAM,EAAE,0BAA0B,2BAA2B,QAAQ;CAErE,MAAM,aAAa,QAAQ,KAAe,WAAW;AACnD,SAAO;GACL,SAAS,QAAQ;GACjB,UAAU,QAAQ;GAElB,KAAK,OAAO,OAAO,MAAM;GACzB,OAAO,QAAQ,SAAS,QAAQ;GAChC,QAAQ,QAAQ,UAAU,QAAQ,UAAU,QAAQ,SAAS,EAC3D,aAAa,MACd,CAAC;GACH;GACD;CAEF,MAAM,kBAAwC,YAAY,KAAK,WAAW;AACxE,SAAO,OAAO;GACd;CAcF,MAAM,aAAa,qBALF,kBAAkB;EACjC;EACA,YAPiB,QAAQ,MAAM,WAAW;AAC1C,UAAO,OAAO;IACd;EAMA,WAAW;EACZ,CAAC,EACgD,WAAW,OAAO;AAEpE,QACE,qBAAA,UAAA,EAAA,UAAA,CAEE,oBAAC,gBAAD,EAAA,UACE,oBAAC,SAAD;EACO;EACL,cAAY;EACN;EACE;EACR,OAAO,SAAS;EAChB,WAAW,MAAM;AACf,YAAS,sBAAsB,EAAE,OAAO,MAAM,CAAC;;EAEjD,eAAe;AAKb,IAHiB,oBAAoB,SAAS,cAC5C,iBACD,GACS,OAAO;;EAEnB,CAAA,EACa,CAAA,EAEjB,oBAACA,YAAD;EACE,KAAK;EACL,cAAY;EAGZ,gBAAc;EACd,iBAAe;EACf,eAAa;EACC;EACd,YAAY;EACZ,WAAW;EACX,YAAY;EACZ,OAAO,QAAQ,oBAAC,UAAD,EAAA,UAAS,OAAe,CAAA,GAAG;EAC1C,MAAM,GAAG,KAAK;EACd,aAAa,SAAS,eAAe;EACrC,YAAY;GACV,MAAM,WAAW;GACjB,OAAO,WAAW;GAClB,SAAS,WAAW;GACrB;YAED,oBAAC,MAAD;GACE,cAAc,WAAW,kBAAkB,KAAA;GAE3C,aAAa,SAAS,OAAO,OAAO,MAAM,GAAG;GAC7C,MAAM;GACE;GACC;GACT,WAAW;IACT,MAAM,WAAW;IACjB,QAAQ,WAAW;IACnB,OAAO,WAAW;IAClB,KAAK,WAAW;IAChB,YAAY,WAAW;IACvB,SAAS,WAAW;IACpB,YAAY,WAAW;IACxB;GACD,oBAAoB,QAAQ;AAC1B,QAAI,OAAO,KACT,UAAS,sBAAsB,IAAI,CAAC;;GAGxC,CAAA;EACa,CAAA,CAChB,EAAA,CAAA;;;;AC9NP,IAAA,oBAAe"}
@@ -1,6 +1,6 @@
1
- const require_FormContext = require('./FormContext-BSLO2-sO.cjs');
2
- const require_helpers = require('./helpers-Bd_QpqXg.cjs');
3
- const require_useUniformField = require('./useUniformField-6c4OCAfb.cjs');
1
+ const require_FormContext = require("./FormContext-BrY1FQYR.cjs");
2
+ const require_helpers_index = require("./helpers/index.cjs");
3
+ const require_hooks_useUniformField_index = require("./hooks/useUniformField/index.cjs");
4
4
  let _fuf_stack_pixel_utils = require("@fuf-stack/pixel-utils");
5
5
  let react = require("react");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -8,7 +8,6 @@ let _heroui_radio = require("@heroui/radio");
8
8
  let _react_aria_visually_hidden = require("@react-aria/visually-hidden");
9
9
  let _fuf_stack_pixels_Tabs = require("@fuf-stack/pixels/Tabs");
10
10
  _fuf_stack_pixels_Tabs = require_FormContext.__toESM(_fuf_stack_pixels_Tabs);
11
-
12
11
  //#region src/RadioTabs/RadioTabs.tsx
13
12
  const radioTabsVariants = (0, _fuf_stack_pixel_utils.tv)({
14
13
  slots: {
@@ -38,12 +37,12 @@ const radioTabsVariants = (0, _fuf_stack_pixel_utils.tv)({
38
37
  * and [HeroUI Tabs](https://www.heroui.com//docs/components/tabs)
39
38
  */
40
39
  const RadioTabs = ({ className = void 0, fullWidth = false, inline = false, name, options, variant = void 0, ...uniformFieldProps }) => {
41
- const { ariaLabel, disabled, errorMessage, field: { onBlur, onChange, ref, value }, invalid, label, required, testId } = require_useUniformField.useUniformField({
40
+ const { ariaLabel, disabled, errorMessage, field: { onBlur, onChange, ref, value }, invalid, label, required, testId } = require_hooks_useUniformField_index.useUniformField({
42
41
  name,
43
42
  ...uniformFieldProps
44
43
  });
45
44
  const visualRadioGroupRef = (0, react.useRef)(null);
46
- const { convertToOriginalType } = require_helpers.createOptionValueConverter(options);
45
+ const { convertToOriginalType } = require_helpers_index.createOptionValueConverter(options);
47
46
  const tabOptions = options.map((option) => {
48
47
  return {
49
48
  content: option?.content,
@@ -114,23 +113,21 @@ const RadioTabs = ({ className = void 0, fullWidth = false, inline = false, name
114
113
  })
115
114
  })] });
116
115
  };
117
- var RadioTabs_default$1 = RadioTabs;
118
-
119
116
  //#endregion
120
117
  //#region src/RadioTabs/index.ts
121
- var RadioTabs_default = RadioTabs_default$1;
122
-
118
+ var RadioTabs_default = RadioTabs;
123
119
  //#endregion
124
- Object.defineProperty(exports, 'RadioTabs_default', {
125
- enumerable: true,
126
- get: function () {
127
- return RadioTabs_default;
128
- }
120
+ Object.defineProperty(exports, "RadioTabs", {
121
+ enumerable: true,
122
+ get: function() {
123
+ return RadioTabs;
124
+ }
129
125
  });
130
- Object.defineProperty(exports, 'RadioTabs_default$1', {
131
- enumerable: true,
132
- get: function () {
133
- return RadioTabs_default$1;
134
- }
126
+ Object.defineProperty(exports, "RadioTabs_default", {
127
+ enumerable: true,
128
+ get: function() {
129
+ return RadioTabs_default;
130
+ }
135
131
  });
136
- //# sourceMappingURL=RadioTabs-BaHvYcd-.cjs.map
132
+
133
+ //# sourceMappingURL=RadioTabs-t-x2XnuI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioTabs-t-x2XnuI.cjs","names":["useUniformField","createOptionValueConverter","VisuallyHidden","HeroRadioGroup","Tabs"],"sources":["../src/RadioTabs/RadioTabs.tsx","../src/RadioTabs/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { TabsProps } from '@fuf-stack/pixels';\nimport type { TabProps } from '@fuf-stack/pixels/Tabs';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport { useRef } from 'react';\n\nimport { RadioGroup as HeroRadioGroup } from '@heroui/radio';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\nimport Tabs from '@fuf-stack/pixels/Tabs';\n\nimport { createOptionValueConverter } from '../helpers';\nimport { useUniformField } from '../hooks/useUniformField';\n\nexport const radioTabsVariants = tv({\n slots: {\n base: 'group gap-0', // Needs group for group-data condition\n cursor: '',\n label:\n 'mb-2 inline-flex text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n tab: '',\n tabBase: '',\n tabContent: '',\n tabList: '',\n tabPanel: 'p-3',\n tabWrapper: '',\n wrapper: '',\n },\n variants: {\n hasContent: {\n true: {\n base: '',\n tabBase: 'p-1',\n tabWrapper: [\n // border style\n 'rounded-medium border border-divider',\n // full width\n 'w-full',\n ],\n },\n },\n fullWidth: {\n true: {\n tabWrapper: 'w-full',\n },\n },\n isInvalid: {\n true: {\n tabWrapper: 'rounded-medium border-2 !border-danger',\n },\n },\n },\n});\n\ntype VariantProps = TVProps<typeof radioTabsVariants>;\ntype ClassName = TVClassName<typeof radioTabsVariants>;\n\nexport interface RadioTabsOption {\n /** Optional content inside of the tab */\n content?: ReactNode;\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string | number | boolean;\n}\n\nexport interface RadioTabsProps extends Omit<VariantProps, 'hasContent'> {\n /** Custom aria-label for accessibility. If not provided, falls back to field name when no visible label exists */\n ariaLabel?: string;\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** Whether tabs should take up full container width */\n fullWidth?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioTabsOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n /** How the RadioTabs should look like. */\n variant?: TabsProps['variant'];\n}\n\n/**\n * RadioTabs component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n * and [HeroUI Tabs](https://www.heroui.com//docs/components/tabs)\n */\nconst RadioTabs = ({\n className = undefined,\n fullWidth = false,\n inline = false,\n name,\n options,\n variant = undefined,\n ...uniformFieldProps\n}: RadioTabsProps): ReactElement => {\n const {\n ariaLabel,\n disabled,\n errorMessage,\n field: { onBlur, onChange, ref, value },\n invalid,\n label,\n required,\n testId,\n } = useUniformField({\n name,\n ...uniformFieldProps,\n });\n\n // Create a ref for the visual radio group to forward focus\n const visualRadioGroupRef = useRef<HTMLDivElement>(null);\n\n // Create converter to preserve number types for option values\n const { convertToOriginalType } = createOptionValueConverter(options);\n\n const tabOptions = options.map<TabProps>((option) => {\n return {\n content: option?.content,\n disabled: option?.disabled,\n // Tabs component uses string keys internally\n key: String(option.value),\n label: option?.label ?? option?.value,\n testId: slugify(`option_${option?.testId ?? option?.value}`, {\n replaceDots: true,\n }),\n };\n });\n\n const disabledAllKeys: string[] | undefined = tabOptions?.map((option) => {\n return option.key as string;\n });\n\n // check if any option has content\n // eslint-disable-next-line @typescript-eslint/no-misused-promises, @typescript-eslint/promise-function-async\n const hasContent = options.some((option) => {\n return option.content;\n });\n\n // classNames from slots\n const variants = radioTabsVariants({\n fullWidth,\n hasContent,\n isInvalid: invalid,\n });\n const classNames = variantsToClassNames(variants, className, 'base');\n\n return (\n <>\n {/* Visually hidden input for React Hook Form focus management */}\n <VisuallyHidden>\n <input\n ref={ref}\n aria-label={ariaLabel}\n name={name}\n onBlur={onBlur}\n value={value ?? ''}\n onChange={(e) => {\n onChange(convertToOriginalType(e.target.value));\n }}\n onFocus={() => {\n // Forward focus to the first tab when RHF focuses this input\n const firstTab = visualRadioGroupRef.current?.querySelector(\n '[role=\"tab\"]',\n ) as HTMLElement;\n firstTab?.focus();\n }}\n />\n </VisuallyHidden>\n\n <HeroRadioGroup\n ref={visualRadioGroupRef}\n aria-label={ariaLabel}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n errorMessage={errorMessage}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label ? <legend>{label}</legend> : null}\n name={`${name}_radiotabs`}\n orientation={inline ? 'horizontal' : 'vertical'}\n classNames={{\n base: classNames.base,\n label: classNames.label,\n wrapper: classNames.wrapper,\n }}\n >\n <Tabs\n disabledKeys={disabled ? disabledAllKeys : undefined}\n // make sure component is controlled (convert to string for Tabs)\n selectedKey={value != null ? String(value) : ''}\n tabs={tabOptions}\n testId={testId}\n variant={variant}\n className={{\n base: classNames.tabBase,\n cursor: classNames.cursor,\n panel: classNames.tabPanel,\n tab: classNames.tab,\n tabContent: classNames.tabContent,\n tabList: classNames.tabList,\n tabWrapper: classNames.tabWrapper,\n }}\n onSelectionChange={(key) => {\n if (key != null) {\n onChange(convertToOriginalType(key));\n }\n }}\n />\n </HeroRadioGroup>\n </>\n );\n};\n\nexport default RadioTabs;\n","import RadioTabs from './RadioTabs';\n\nexport type { RadioTabsProps } from './RadioTabs';\n\nexport { RadioTabs };\n\nexport default RadioTabs;\n"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- Object.defineProperty(exports, '__esModule', { value: true });
2
- const require_Radios = require('../Radios-BfA3uL35.cjs');
3
-
4
- exports.Radios = require_Radios.Radios_default$1;
5
- exports.default = require_Radios.Radios_default;
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_Radios = require("../Radios-CjEFdyD6.cjs");
6
+ exports.Radios = require_Radios.Radios;
7
+ exports.default = require_Radios.Radios_default;
@@ -1,2 +1,2 @@
1
- import { n as RadiosProps, t as Radios } from "../index-BKQc5PQn.cjs";
1
+ import { n as RadiosProps, t as Radios } from "../index-C9up4f3f.cjs";
2
2
  export { Radios, Radios as default, RadiosProps };
@@ -1,2 +1,2 @@
1
- import { n as RadiosProps, t as Radios } from "../index-E6etS7_8.js";
1
+ import { n as RadiosProps, t as Radios } from "../index-6hu79Fof.js";
2
2
  export { Radios, Radios as default, RadiosProps };
@@ -1,3 +1,2 @@
1
- import { n as Radios_default, t as Radios_default$1 } from "../Radios-xM-09vB5.js";
2
-
3
- export { Radios_default as Radios, Radios_default$1 as default };
1
+ import { n as Radios, t as Radios_default } from "../Radios-CYwW3bZa.js";
2
+ export { Radios, Radios_default as default };
@@ -1,9 +1,8 @@
1
- import { l as createOptionValueConverter } from "./helpers-33jajRcN.js";
2
- import { t as useUniformField } from "./useUniformField-C-Xyu-8v.js";
1
+ import { createOptionValueConverter } from "./helpers/index.js";
2
+ import { useUniformField } from "./hooks/useUniformField/index.js";
3
3
  import { slugify, tv, variantsToClassNames } from "@fuf-stack/pixel-utils";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { Radio, RadioGroup } from "@heroui/radio";
6
-
7
6
  //#region src/Radios/Radios.tsx
8
7
  const radiosVariants = tv({ slots: {
9
8
  base: "group gap-0",
@@ -54,26 +53,21 @@ const Radios = ({ className = void 0, inline = false, name, options, ...uniformF
54
53
  onChange(convertToOriginalType(newValue));
55
54
  },
56
55
  children: options.map((option) => {
57
- if ("value" in option) {
58
- const optionTestId = slugify(`${testId}_option_${option.testId ?? option.value}`, { replaceDots: true });
59
- return /* @__PURE__ */ jsx(Radio, {
60
- classNames: itemClassNames,
61
- "data-testid": optionTestId,
62
- isDisabled: !!disabled || option.disabled,
63
- value: String(option.value),
64
- children: option.label ?? option.value
65
- }, String(option.value));
66
- }
56
+ if ("value" in option) return /* @__PURE__ */ jsx(Radio, {
57
+ classNames: itemClassNames,
58
+ "data-testid": slugify(`${testId}_option_${option.testId ?? option.value}`, { replaceDots: true }),
59
+ isDisabled: !!disabled || option.disabled,
60
+ value: String(option.value),
61
+ children: option.label ?? option.value
62
+ }, String(option.value));
67
63
  return null;
68
64
  })
69
65
  });
70
66
  };
71
- var Radios_default$1 = Radios;
72
-
73
67
  //#endregion
74
68
  //#region src/Radios/index.ts
75
- var Radios_default = Radios_default$1;
76
-
69
+ var Radios_default = Radios;
77
70
  //#endregion
78
- export { Radios_default$1 as n, Radios_default as t };
79
- //# sourceMappingURL=Radios-xM-09vB5.js.map
71
+ export { Radios as n, Radios_default as t };
72
+
73
+ //# sourceMappingURL=Radios-CYwW3bZa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radios-CYwW3bZa.js","names":["HeroRadioGroup","HeroRadio"],"sources":["../src/Radios/Radios.tsx","../src/Radios/index.ts"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { ReactElement, ReactNode } from 'react';\n\nimport {\n Radio as HeroRadio,\n RadioGroup as HeroRadioGroup,\n} from '@heroui/radio';\n\nimport { slugify, tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport { createOptionValueConverter } from '../helpers';\nimport { useUniformField } from '../hooks/useUniformField';\n\nexport const radiosVariants = tv({\n slots: {\n // Needs group for group-data condition\n base: 'group gap-0',\n itemBase: '',\n itemControl: 'bg-focus group-data-[invalid=true]:bg-danger',\n itemDescription: '',\n itemLabel: 'text-sm',\n itemLabelWrapper: '',\n itemWrapper:\n 'group-data-[invalid=true]:border-danger! [&:not(group-data-[invalid=\"true\"]):not(group-data-[selected=\"false\"])]:border-focus',\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/core/theme/src/components/select.ts\n label:\n 'mb-2 inline-flex text-sm text-foreground subpixel-antialiased group-data-[invalid=true]:text-danger',\n wrapper: '',\n },\n});\n\ntype VariantProps = TVProps<typeof radiosVariants>;\ntype ClassName = TVClassName<typeof radiosVariants>;\n\nexport interface RadioOption {\n /** disables the option */\n disabled?: boolean;\n /** option label */\n label?: ReactNode;\n /** option icon */\n icon?: ReactNode;\n /** HTML data-testid attribute of the option */\n testId?: string;\n /** option value */\n value: string | number;\n}\n\nexport interface RadiosProps extends VariantProps {\n /** Custom aria-label for accessibility. If not provided, falls back to field name when no visible label exists */\n ariaLabel?: string;\n /** CSS class name */\n className?: ClassName;\n /** Determines if the Buttons are disabled or not. */\n disabled?: boolean;\n /** determines orientation of the Buttons. */\n inline?: boolean;\n /** Label displayed next to the RadioButton. */\n label?: ReactNode;\n /** Name the RadioButtons are registered at in HTML forms (react-hook-form). */\n name: string;\n /** Radio button configuration. */\n options: RadioOption[];\n /** Id to grab element in internal tests. */\n testId?: string;\n}\n\n/**\n * Radios component based on [HeroUI RadioGroup](https://www.heroui.com//docs/components/radio-group)\n */\nconst Radios = ({\n className = undefined,\n inline = false,\n name,\n options,\n ...uniformFieldProps\n}: RadiosProps): ReactElement => {\n const {\n ariaLabel,\n disabled,\n errorMessage,\n field: { onBlur, onChange, ref, value },\n invalid,\n label,\n required,\n testId,\n } = useUniformField({\n name,\n ...uniformFieldProps,\n });\n\n // Create converter to preserve number types for option values\n const { convertToOriginalType } = createOptionValueConverter(options);\n\n // classNames from slots\n const variants = radiosVariants();\n const classNames = variantsToClassNames(variants, className, 'base');\n\n const itemClassNames = {\n base: classNames.itemBase,\n control: classNames.itemControl,\n description: classNames.itemDescription,\n label: classNames.itemLabel,\n labelWrapper: classNames.itemLabelWrapper,\n wrapper: classNames.itemWrapper,\n };\n\n return (\n <HeroRadioGroup\n ref={ref}\n aria-label={ariaLabel}\n classNames={classNames}\n // see HeroUI styles for group-data condition (data-invalid),\n // e.g.: https://github.com/heroui-inc/heroui/blob/main/packages/components/select/src/use-select.ts\n data-invalid={invalid}\n data-required={required}\n data-testid={testId}\n errorMessage={errorMessage}\n isDisabled={disabled}\n isInvalid={invalid}\n isRequired={required}\n label={label ? <legend>{label}</legend> : null}\n name={name}\n onBlur={onBlur}\n orientation={inline ? 'horizontal' : 'vertical'}\n value={value != null ? String(value) : ''}\n onValueChange={(newValue) => {\n onChange(convertToOriginalType(newValue));\n }}\n >\n {options.map((option) => {\n if ('value' in option) {\n const optionTestId = slugify(\n `${testId}_option_${option.testId ?? option.value}`,\n { replaceDots: true },\n );\n return (\n <HeroRadio\n key={String(option.value)}\n classNames={itemClassNames}\n data-testid={optionTestId}\n isDisabled={!!disabled || option.disabled}\n value={String(option.value)}\n >\n {option.label ?? option.value}\n </HeroRadio>\n );\n }\n return null;\n })}\n </HeroRadioGroup>\n );\n};\n\nexport default Radios;\n","import Radios from './Radios';\n\nexport type { RadiosProps } from './Radios';\n\nexport { Radios };\n\nexport default Radios;\n"],"mappings":";;;;;;AAaA,MAAa,iBAAiB,GAAG,EAC/B,OAAO;CAEL,MAAM;CACN,UAAU;CACV,aAAa;CACb,iBAAiB;CACjB,WAAW;CACX,kBAAkB;CAClB,aACE;CAEF,OACE;CACF,SAAS;CACV,EACF,CAAC;;;;AAwCF,MAAM,UAAU,EACd,YAAY,KAAA,GACZ,SAAS,OACT,MACA,SACA,GAAG,wBAC4B;CAC/B,MAAM,EACJ,WACA,UACA,cACA,OAAO,EAAE,QAAQ,UAAU,KAAK,SAChC,SACA,OACA,UACA,WACE,gBAAgB;EAClB;EACA,GAAG;EACJ,CAAC;CAGF,MAAM,EAAE,0BAA0B,2BAA2B,QAAQ;CAIrE,MAAM,aAAa,qBADF,gBAAgB,EACiB,WAAW,OAAO;CAEpE,MAAM,iBAAiB;EACrB,MAAM,WAAW;EACjB,SAAS,WAAW;EACpB,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,cAAc,WAAW;EACzB,SAAS,WAAW;EACrB;AAED,QACE,oBAACA,YAAD;EACO;EACL,cAAY;EACA;EAGZ,gBAAc;EACd,iBAAe;EACf,eAAa;EACC;EACd,YAAY;EACZ,WAAW;EACX,YAAY;EACZ,OAAO,QAAQ,oBAAC,UAAD,EAAA,UAAS,OAAe,CAAA,GAAG;EACpC;EACE;EACR,aAAa,SAAS,eAAe;EACrC,OAAO,SAAS,OAAO,OAAO,MAAM,GAAG;EACvC,gBAAgB,aAAa;AAC3B,YAAS,sBAAsB,SAAS,CAAC;;YAG1C,QAAQ,KAAK,WAAW;AACvB,OAAI,WAAW,OAKb,QACE,oBAACC,OAAD;IAEE,YAAY;IACZ,eARiB,QACnB,GAAG,OAAO,UAAU,OAAO,UAAU,OAAO,SAC5C,EAAE,aAAa,MAAM,CACtB;IAMG,YAAY,CAAC,CAAC,YAAY,OAAO;IACjC,OAAO,OAAO,OAAO,MAAM;cAE1B,OAAO,SAAS,OAAO;IACd,EAPL,OAAO,OAAO,MAAM,CAOf;AAGhB,UAAO;IACP;EACa,CAAA;;;;AC/IrB,IAAA,iBAAe"}