From abfadf3b0d09df805c2b09d8f7f08c41bfc93e62 Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Wed, 29 Jan 2025 16:38:55 +0800 Subject: [PATCH] feat: add shadcn/originui label component and shadcn form component --- bun.lockb | Bin 171740 -> 172285 bytes package.json | 1 + src/components/ui/form.tsx | 178 ++++++++++++++++++++++++++++++++++++ src/components/ui/label.tsx | 22 +++++ 4 files changed, 201 insertions(+) create mode 100644 src/components/ui/form.tsx create mode 100644 src/components/ui/label.tsx diff --git a/bun.lockb b/bun.lockb index df381d8a6eb334f81f07cbe6b951453b1b91f70e..6e1bc50a1853eb6a087f1d02cf4166f0383897ba 100755 GIT binary patch delta 29780 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 UlZ$L5FLrR$E1c2Uk>2_L0sjaaIRF3v delta 29309 zcmeHwd017|_xITsu5wirXD$~+#8eyz1q4L7&J)h542p_KilV4En}In`shw(zrDbU*$l%;fpi|dfwKzZu#3tidG*whIlnv6=H8V7$+ z-TI(ZD-F(Zf_4UVfgS**JRGz-==k*PtjtO2T6k4W3j`kmN_AbJ)M7+xcGl!Enl=N2 z!+zexkfMH0ZbQ^&fwb)G^z1ZETZ0VpW3#d+K&G{aw^?BnX@ty4EPf8Xgham z>gY@km>WD5o~6nK`I_}6f@gb&z_b2Xjy^s+!B^8_wcH^nK!5a61v{$-M*Eo!4jrGG zhCtFTfoB8FVLlsNtOt424C(G~N+VP&jXnS)*# zuA=vALe5|rmN|*KX+ip0kHDM(wauPFg3Q=V9W!-w>V&irspE$mr7EK@)+&z~L5(y} zS~5O8HEjY)TnE_tIZ*2KVz5aIz_Z+#^eHT+o`q4sVBOT5ZrV z;MwsJ@O40w!B^9AwA>vKz`?ogAz(+V!NYaAp^DE{yq{44{!`^Ufx@M^4L})wxT|N#1 z&bvD?W`*#y%FQ#0pMN7LPfijHlPnU#ih95iEe#suwpCo{hSYEheooz2#; zU>Os~tBaZcXlCk!3F*VMqBf=$>Ddz}WMpP*>Dl8ZrjMVhb?<7{OV1uVK0RI2E}$H& z4$eJ@44RRemNlMsoFbT4T(Tr6 z2X!haqc&5?KkW6_{A9>kuRSO`>jlbSqn~Nzz&_@fjLdFgtah0HV^hax=cM;S1}i-K zh)EZKvg5`WJzBxdEEQ&lp+PEg2Xan>n&24>w_2NuDf4r4z*C+H${^^FXa>twP|kwJ z1I_uo7_^e+!8LHVSIwNw$!7M_BvbE5@Ki$#FumUvJk_~^e8$9SQ1X8w*r>h}lrec2 za{6Je%KvbPsm3VOXKV(inr4heK34=U3|pQftv9-y?dJldlozK@z6%>yMLfpwSlR)TVXmKjw4&f%AH15HyD z2oY8A0;Ns2QMDrIc~ExMccjVJLV4zUjxudJ0T(mB7F4DR=aJ8Pzk+AESxWT+#qS5D zN}E9axR2%`K_|@yr2^AI>4OwdI=vexJ7^9{=k3cfdF;yE@3TW7=b-t3vg6OuA?jol>5+I)HdIM9P^3orLr^NZLD4)=*6#=E z0&N9KgBrs#PEc#jwoV$=A!qx>ZkK~K=c&o2MqyJ-%e_#5n*N?(y6PM#EjtEE`EyfE z*LzGe!z@kZZv|!a+oqfKhGnHq7@sjFeGTNkkS_qO2|7;k{V`km(Zb#{OikN^vV(}n z%?eGyv%z3cDv&xQy$RNr^y-Q)4@yhgq9IPxb-8A_XuVB^nmLVUnr2BQoej#?hNTak zh#=F-v^M=U9P$9jQ$X2T5adCiZ_hR(>LpNWB|$l$tLK>ho(Gb!cX~)@iO; zJ_~Y~J2dyQ+cfL*dFE#NBq;sx3TR!>3Jc5z$AGU5{!5f6?Xb`shbEvb?*mE&pF%$U zHw~2XMtY2QeG$Al)q9J5bM2~A%8JH%o}XI`*7NcGmF{%8ZI^6%vMWwx>Ul1=*sbS7 zbjL&Y^N$lf^dx_`cwW!L_jh_ezI}CPfLjdGlkmMm&%<|wo{#U9y0aF`B;mWdo`>(z zdVVdpom+-&IQlEjt`{ao>&_sz?T>PLa!{P3Kc+Ueu3R*MN-GrSsTcZ3InILX zh&-EKI4D|As^b=u^}IT6$9otoHeFUmAgDP{&kJ^o&-8qJ zSJs_%-Ht~PZrzaYVf64GIQH&o)V-m&vU;H_$}tpkyE*b~hH)!OIOzEmIMYGU+WruN zrK6q_)Y1!ymPX@20a5l>!NutT0kPt=o>$K;9@F#jeMWcIcRN~E(X<|BNqA==I5sEr zpt@1wq@IrweGt(j4H>)G0j{-P;1_HAqpH5LL7bxlrbRTeP3;zfqo>dSnmY&%OAA~N z&K6x=PY#T;FT~0c4JBh8A0vfR0b!JL5(Vd}g$0R>9;1H(%QQ}=a53=7O zGh>6Qx5u(cQ|*R6&wwiqP;o-fd)V!$>aS@njK0=}MmZ9|v9`@HT!L#0t_&kUUsE%)AR8?MRzuHJHD)C#-gC39km0C2N@QR1lP{! zsSv(-16(t3DA_2=aT1*Ao3*GHSlbG!RQM)Caj-co%CYV*d4=F;E%GoET41STh#5Y$ z&j;61FK86&*ozeVvKw*zJ2)Ib!BNN9I#vtlOU%;qBi)WqAd5nYs+^&=KkDeo&Ep(t z!MMJ(gkqzf-`p)O=*}p&NY#^~-1ai{G%Z0-iHfzSAT_{9Z7r5ns*nA_kPSo1%-w}l zk|FbLplLmg)NrI8VM=_U=f$|~M;mHdFMU-^ti53)M4^#-45_Y6Ile`TgCdM@sHx|- zaND~#*0e;U+&ZL&>jh0??G>76+CW1#0;y4k>@ZSh%fX?VHrS9ofmC0k+;>Q&8M2s% zE!h&JOxZQ0jJl52VW?|pfI+pt04`NuHKL_wQ%y@Zs;47ms=WoN{%l`#Mht_L8}v4A7DLAW_CnvRGN)Agj*ZpTi@TB8QWF$(J*rVs0*1lGODy0eX2 zyrUu3{c#UtWF%+Z}~F}jd(AT>sw-4hF5jN$NBdOmVDf;Zjdh;vlMf=`W58)487oY@vMvM&YKRWFEW$xBp<&Cst37ql?KH32Czz_}?%a4{%V z&e$UI!EvZ?P(VaAiZ^{_m?{?QNxj{UJ&?hLP>v;hpeMa)9xQr*W2~CyzX%R-&OG@2 z2slh!4k?ymukKbJLc-Av9K!_%1hn}yI6BH`#dff}zVeYcN7Ejr*U=baAOjqWz%-b! z4jj8RzITT!py91{|H>1G0njrGSd7FK%HDoB8a2k@Wu)j|%&4YOj-QG-UNh7kVNMrg?mGtl zg?k#Dxh@nU488)#R?N|?m|@vXy@r7^!+|UOhu}IFmn<{VItDRsC^$2Zf%Do(J$ZPX z!*`UmT?AqM%LG^AfDgc#CZoFTk5PK^h&X$POpY(k5{?&;G9Ah3R6x1eGsZY-wB-*T zE$4y5pwq9RQMR+A^`jYaqMhy>>2|CfV>JS$97n*J<3_GdmZc4sqp{%3jkK^wlp|l| z8P@>z`eQM|3^kFa=Z|vRHjLH%GUMz&LyS1Wxu@$m#wTaSlSr`(ECTTC5pZh$!j}!l zn={?;v;8G-h)2}9fs`2}L5-umvMsHkqkTCzT%4ebLr5j+DQPV|C!hz;3P(0lSi86c z)`_z30f%D`=7@75Qz?NhJ&`a1#l9V>p+-9alhlL|Q}w*DZpRVu+{#?tIzaBpeai7BI5W-| z{$VPSnwzGu(Es`Ha7S8L{>uNa2)<)N4o$ zWy;~Zz>E&e7ewtqaLGoA_pOxU(S_Db#8JThGB~r1D@gTaSPETBNDVoAXFv zTYwq$7n=cAmA-O}2FHb=sxbl^!L{Jkm+kao-EU@`cvw%G8Oz5Rypd;oNCn^r)BwVO zvH%X*#-}v(fTRV$^0A5{+KkWrXc^?d^O_B4Ztblo8WDGFH8YvqZr1<+$DmFyr zld?RUWe39mP5*LfO~cM~a`=$4)ChpJM*{rZkFp$=ZR1m#vURM|MlV={jSnf?!(wWD zO3@r6152aPF_tppb3f{doM|e*G-bnBD~t~*%jE)8WG2ARKhvtFX0yz48mZ8Wmeq7n zFqdDt_wt&02&I1N=OQdLjRLqm)TmZxukg zTGJXDSx6WSuQ5100KX3vdI5gh!0umGxuoP@0XTtn0Q~%KDBJnkXyvbz>K^7zWhTC1 z0e!|(!?74%o>Mc4vg4HDQ<_q_69DNcfaMASen=_*kqkbh9>5tg_>c;H^xQyw_FP|m zvF??_+{*xKT?IIDzbbkQv?5RzU9em^P?oEpXhkKjtoW*+-pH@5!kX8WS7Bm<%9kdMSD3wo2MMi^CG)BoEL|G&YU#vGyl^-V%)BKbO z!04mrnR7iG#aMEJq7xOJL?J$;OisoZo1LooX%yn~Aj%@sRXI}n_i@F8<`@mGd0(A?S2K=!4lO#X-fH0)xk2APs-&X zPw}Kou2eiJ>pib{QYKgVE5WK#lrCCBUT^Yj{Tz zC`G?0IVtP^23ijEu9A~dF7QQ>jf|qy!fwL=QC3!EkkY~BL8$;%k8N zL(1}gpqz1mpe$EM(T7xi2q^y7_~RGSCW=06!vL{^FiI6=$IZcWip7C)D#nAdqn@Dn zU+c}U|ADey{$_{u`h${B0AxB-0#N*~Ey5S;@5-j+c%J@Rj1B!kPN(=Hq@xOKqUmTKi zWE5qC7r~QWQF2l$d{yzJ?B^FnZ-9Cr{d(RQ|)DEbj)z|5{sovAuR=?xkEH?wg_H)j$(aksSp! zUs`GS-%J>qtw9DgdNZ4aUREfY@qbhEcyc<(tnTh|J5=7-{ZUyIsYE#jfrC%^SQG8dz}CGIB#zE{~qW6 zJf69=1s6~dFLvn}1qu3y0&o3GaJzNqi3HvEgttE9M7-Fe ze+F(JxF#p##V7jIlL`8iliqp(xc}%OrxNrAr@Zwgr{ejOMQ}&JwJMAk`}GBd3Htm( zZ~Zd3FZGxo67=XFy!BN-#ES#^d2r{zb^kG59MbcCOwd>S=&culJFIv4DM9c2lehlH zPx0bg{T8^J;8IS-pf0fNOOrUR=}{T!MX~^4ddy|mcNz9wju%(;^We^b>wYC(T-Woiz`iT6 z58N+$m#eVvD(t%&FMiW+fx8JVMbb`>w&h>+#~2o^&1dU59<(?&yx6Vc*ZN z@8@_?q;CVa6aNS5@zF8wTEnfw$xF6Wv?jZh}j>6EAA&8}7isJ23E%c;VEO z{(ymhz(8;=-BAPsi(p_;ya>>@f!hi$;LmswsAv3%0sIs8feX@|cVXXM*mpNx1nZxH z+jrOdnIX{2yeMWKoBDHDL6twD;orjD7Z;M zN*M^EM1r&6WAr&BKPyvD^6(Hy$ z^C>t&K`U>DiG|XV1RT~g}|#S z1f#1$kRrEHu$6*Ja!=hhRo^2-4(d6zrp*Neu|n<T&7^OjB!E`?Sx>J6M`&x zo`Q1}boYZ`oXqosV1*w9MHFPqE-nZ$)`p7V!hYC=`{=Abz^E=W zn+Y#l-@03_M2SIWgVsM-@!nDxA@)#OUzT8OlkGppF z*|NH&_^NDm?`Gz|*Wld`>)*T>N`;H3w!GI~MA^jNEtflrMZL>iQ~xIVr#!iNg^0`f z^RD^fVc|(!^YOBew@mr5cs9!iSNvGdLwEzKi<0q~2$Q@s$_HKiELSq#D{P@;PbnGi zs zywf?In&ZO$J|m1*GV2Kr#+*M7H$HrbgZ~Xr%|kghyjsaBBOM2@ z{0mA}1?esTKWiYPNBOuXUfuN6UQ`8nlertf&r3>H9qI0d1o!+^W!|vq3$Wo=RJoc+ z_XJq}RVDL9x|fozS27>g&v;r8a3{8gJ8^GJZX5d}mIav8L@C+bCGSX9kY=DnirT}~d;{kXAcAyMU7VrXw0~x>=)V*dipAYf1 z5=nfVl8nS35b~*0UC@f4m4PZiRiGMB9jF1+1bhKLI=cj122KNKfV03Xbg&9|5?Bi4 z0_nh`z;K`?&Awd>ilquoL(Y z*ahqbJ^}s%>;n!0hk&nvZ-DQB?|~ygK5!g3$sjHSegJ*~P6KCvv%opvJa7SMh>rOP zbt%9*3@d=QfVY87z-%b}6tD~!0SpE@0Ud$1Knvg`z@IYkq4XYLFW?-9uQ5PPGQb=Z z(t*zM@*2F&;uMmtAm#&W7vK*Jfb0<<8E6B(9nc==0`NI8pFMX2x&u9cjVOmj)c8>W zACU3!UT0tvWX~dRA@Cuv0WxkA^8r5D!+nHUV~=Q$Orj6K<-9kL0B{-SvQ3_Oq^H;u zKF_};udEbx0)9c7E6WN%0^7iE1zH0hTO2QnEuJ}?E?mf;29^Pg|HlFT?1B!<1h~R+ zrQLsZK01U*2b z?*ROHsdfYS4WMPe0>1;dfSbT=pa@_k=5y2G5D;ABM*&>#GXSplT>q(H3t%YHtdj~l z1mL#GZ8RB30uq574}7t)NKj880pJGg3vkUW5A*~20^Fdh0zN<`fSY!2AROTDqbdTu z0B-7DKn)-UC<{=buAn>wlmj{gwfLK#PDlg-Q9u*G8|Vl$2RZ=lfwn*!pfwNxxPdsJ z70?oh1zG^nKwZEOumh!yaDb;$WdJHfC8`McpPE+zN?R5SZD|cFSlUyu$^b2=2Uv%c zWk^}aYKLuB2Wpneql{(g74~KH$2E{bCqP#R1MJWR)B%Ek+5kP|53mgL=>?|QG2CdR z*$%CvtC`32y_D^9SS@el(CzH}A(dgp0UM^J*0|O~nvHR+*>F=J40sp_1*imvuQ5R7 z>jNBuMnFR#1ZV)T4Yo-NoKubA}bTi$`m?=H(mX!=b z8cHKMge4xp_*KNTFs%eWUTAM@wWo4 z9nx%+6(ayP$V#+|k#99*DaOW_r(9{2wUnofb=elZ6tB`9L3;q*fo?#KWi<;klNtBQ z*a-93F@vmhKHVP%FgRI`?Qr<4Af&7_VAZ)NontIGw9Im))kqgriL|ukT%=frE@x*{ zh@R*QaGjtRv%mZdvo!&IiU>|WmT z8s!rJ8kRE>U)jKTU>q&JX!f|Q8njD zh?#8_Vb-7E*^~}E1yHse;2CE(z&Z;7tLeL{yw$ZOry8tJHCV@zKa2EG$OiIab^sE| z08fc4kdX&G2ONA0U-&#*Y0IZ?i)KPrc}LWUTnvd5Ls(`);_~i|zddCWgPMloKTTVQ z92}f-r_VTcV0g9vyjGI4O{Tmf!o?xEoTNa00usq1kb}j2V{d27>-#8+$ApH3h84d( zto8cPrq5kp6Na3q(8!3;W;mHP*({u{@=&ZIs=k>nD;6#JItT@tg*Hb`%_&niiw=%W zC{PszD$BPvi|!&w7Hvkyjbzhzg;PYx_;*G3NVm=Ge~N#`!NU22enunVFeDsH5OT_) z_QlbApG!R3dp~j_pcod2KJrVn;2MGgSR!&4jvu)*rR(`mjjGgK8zseiBHU%Y`YkN$ zK;H72Ga^x-X(SpC(`Lz@?+It*60|@Cd*0gf-VV>9D^(Y;a1C;3Thhkh3*K`k?LbcR z&}MA=O}Xkl7*k(fL<=HL+TVvwon*}WqPvS%iS+%2-f7c&Eo$&MYK5V{80@KX?fWR+ zTy7_6C%=7PG;%ES#FB#IW~R$}L7%fqmCU}umA*l3x&nO)*=h@_m6Hiu&{ zC|v#8Qx|Jg|9TDzM56%Quuir?0X%aUz;Xi-C_d2l=I!YtK2Cgkoeg7*^$wCuxfBI5 z7J;SLh9&L!cy*;UcAJ<4Np(o9w-)w0e5vlVET1H!3&XbeQNkM~nwGnMv0=w*o;L9! zB=n-d=yQB~JpA#C&d>K$LmdVH{1GE7Z-ZKyvJr^OdXr+Zc>Y+&8!wDSxk%H#qjE3` zL|U&_d_Ak_yO~$gR--_;*^u=z#(+A7!5=y5Y(owLn65c0-(cI;TNe){zIL$7uP>ao ziN`t5A~+_6)FDRRAu$~wy2*z>K!?_=7n441-seKsTbIx*+)2%?w>w@MmfWwP3U*@3z^bTzrrlrZ5C?F2V=N?opLUYNP4qNp=&S>jxjtrAp5CmbZ3c5UiIwuAaNS-TI=6 zuOK?OzF;&5$kdO}ZXfx~M=;;CpiDFB86t~5LJQ^^X6AHobP6`^apt}#b9Rdkts2+G z$s0j%@8awutQ_lof^V+>WnQ0^n?AD%V`amR`hpZ6qy3H2^|1)AYQ3K@{He5QyH~B5 zVG~c=8T9F((=A8Eb8adl#g?`(V0YIzp7W4+^XX47vcRBNOsmgIQKi|D~+y%e(Z zT&-*4R}=M;0#Pz>4`zXSjb!e!YwN%0IO&Vvk^}Rng@%W7M6sBnyvuq~WV`q86dc;|LN;{8h+~>-o#ZYSu-+{BpBMi; zIN;3bm(2nUiClT-Q}no67J|5}H&%Z8&WL3nK6gH@q@g3S%_qWXyB#72ejmD!OHnY=dgtZsMQwr~Kb$wQq(Cz6%5Z_4dB9fxky*AGB{^ec0jj#J z_iOsQZY??;Ug^7%0&8StD!WNGqO#WeI^!pcuDyRb?o(3kQ#trkObDf{Fm-=`ai;Zn zMn+#ez*)+h|Lksa-4&n98UH~;e_wu$bq8_aCpV#h7%TUK*owmCng57}!b?`(hu}7r zn`&i@y`sJBz7GW>M>)8+2{@Pujhz1F`Y z-+~Tu*%!r*DK_w*&9L4jdUl~}pcq`Q`u||ydO4kTDg(_Pm4Wi;e&HwA92AZJw}$-H zwW=?3$o`9_Rc*sn;f6kS|L1YOjt6fCg>Q!SUc3HzKjl{PU%kF$ZMNQgS4DI={_B?E zFB#itQ!GWA_0GI~Uwn1Juh*bZo7mts->zr9eecnH_dETXMB@Zv<&=@*4#AH>auJBD zZEJH;D0BMfs{K5wO+wqvLc@8)>MwV(KqdDSoOd!Yc2?ltU50X+g{VRwo#^R;AIz!ox5fQP>1c|p@+-us=KHCkvM+FY9|D<6hY zQZ@qd->AyP4YKX{=BgJqVq^Yeo7>t(4mm8ki5KJ>hef#m=Srm~*S^!QXvTqlhR(+P zKhZ}1aaj1;F0_%Yj|g8G`i(V3Q~T9Z8}2kC-IkeL0t9Q8rRdg{rx&0 z3cS7<+8do>@9rkMe+%Wx$#Hg^9TMeCa>M0w-(soU)K(t+Ry6b9j@mfD=6+Q1?1oO8 zhtYdD5pb*7+g8^44kfHt=}y`9Ta>*;myIaF;{}W|+wk?@i#F)L=x3We9kizkGz(A- z@8ODta>4gF(pYcM9UW3@=xa|8?P(J{R>F3zyS)BAJZ-%pcg54K_kOcA(HAX7hKBRZ zV|ut@a7Mg&-C?~mH}&J7Pdcq|{)UnfD2cv}rmEpQRGgOEkBC4a_#~wP@5u9Pv&FL%qVImJ02AyL@)W)QAB|n-GQ=*+ydG37*u*z#)J44>w zE&^TFOHKP8o7SL_e>AS+_a~TFYf7VY39@zp=E3g?^3Ad~Uu>0yWo!Nca@+~@Hdp5S2C`HZUIxjNyC7_Cy%_dj z^Gl+~{_0&-EwpF7I`-(S-M%%xx{gz=HA4?4$%-do<>@5pa|ZNElC14%^R*Qv$$^l& zte4PU9`@7u-{(*7X4EudvX)$W5`9O?roV|Ao|s5&<@KK+h?fPFr^*{A5e}ndrC-3! zlCjr87R$k>FeR*4;x_8D?S)?TrgbqI<;ttQoGjlw1vNG&%jd6xewZwOIE5v^dbzIe zoPBv8CT{pq8G!TVsbm>eh?3`%<(g|y*m|#UeoYx#CHK*vO4=53Mj>?Yk>hTH)RLRX zg~zxfcv210qY6!8re}FvrgYb>CUQb-DO=R1NA0OZ*!;!}A z9P35KGhg0Q<*4V9mMRA(mzM!QLJ8|7&etl`9693a+ue-pvehkA=~|BTnpWuIUEMewXMFP3z!{Ew5(?$c<=7-Xm7Z2u55>T*^XaS*P?8cP(t z?r*)i`klAR=-)K$xJY${*jF=*8Q7PtBYDmYe$TxJZ!B#_bw{Nsyk2ax>#%%rY}~X8hjz8sb^2?ec{t@{M=;s z;8(DoTU(sI znonxrlu)go%J0R)Xbes95F4Xly%YTz@rK7kKO~(q^fs2C(oGp&`)g}|**2_k5T3H= zS4_LytC(qO;=6)V%_Hl#{vREG|VU01Dd~03C zK@uTQqZV%M{=-s$@i5i9PxTre5z2K|Ko`eYgjuVG9XpT}SZYZr*(Hss@W5Q5RtKw) z8JorXp;{Uqu#DXk!j_(L*)N!E#eO&Dk{W$;g^(X#DlTA+h*jBKN^8jFzls3czAX9n zuUP8tS;ox4v-Vllv^h8r*vE<$VssUEYx&L8%o<`9Qz`__9*W%`t_ICoHB`2>WM24P z`1xCJzW1(iGx^%$Q|9Tzm}aV&+LK+@oA4(cShluX&u&=D+EJ;#_5>g*I-AS$3Kg?^%0GuhTs6G`@{d{%eme>yHZfbo-)z%kd2sls4QLLe;|q z3L2-&e^`Ty&wr*zoHm@p9=}tfhB}s&#PMIk##+al-+vv)%JPS?;o$7&bp7+$&pd-! zaqjx(s4?!d<9QA)&Uw-IPxsixQ*sn;wc~6zrwCW6)?Ya|w|-%z@4hR8ryjMZmWi00j+U>w5DF z)f1K=+-3bm3;&zB<=@@)`b-r9*!!BwtDd+=a#T9(ws70A1Q}=#DKTTXTnd59`uiUvM|8S5`Bdx&MjytV4AV}TU&ar&rRS>~D#KU>yY-_)n=vb7~D8`B}&-}(zJV_QGA z@uQsBimCwox-M6SdD$8|HlqpnF1N8v^Rjgp(Q=a)`n<1+oUyW*!`8!8=>eszW&WN4 z$G<-6T@FJyZ??H=jJW#l)jkmuLZB6%Vd2pko>}ujy}$MMLaJBnlAJc;`xYn=5z6a( z?WNiBn{u{hF6%Fh49foH^QBiF9*hz=y>TIED}&10oVM+=Wy|umZZ7Ljj?@b8n0jv7 zGj)^)U~(tg-anrwPkGyXWn2YYW83+8(g#Av?RloV zRatd=&#GFgil6$$fo$My^TVLE^F~J%qzjM#hZakVLxu#hG|M$AK9d$&FOFbnUk_TrcWLla;2?JM29vrZgDAPa8G4= zMf9!i8=5MF-g|%7NAy^TpFyI-zuz-bwg+3b-}g?fai8#hj%;Z8uAEh0IT-(P@oXi_ zDUGaB#l1ALnOAB}-7i1%*sRKayd`KnjK%%n`#wv(=ws_%H+YHp;|51o%TF)#Ub!9j zFq`uxa5L>xB{Yc78Xq~ZvaNOH38@*GlQYH)>onl&dRH24s=rrms%#4sd*vaJAilqf z7xl;bO@BFIV{PX_@chxl%$ofw-mMmK;<&6_#pd=ah%?2rqa(i%Q!4&>(8uhg{c1U~ aitSbTVZ5#UmZnv04dS+}>upQy`F{XY#DeDl diff --git a/package.json b/package.json index 0951bd6..d96c957 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@hookform/resolvers": "^3.10.0", + "@radix-ui/react-label": "^2.1.1", "@radix-ui/react-radio-group": "^1.2.2", "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", diff --git a/src/components/ui/form.tsx b/src/components/ui/form.tsx new file mode 100644 index 0000000..b6daa65 --- /dev/null +++ b/src/components/ui/form.tsx @@ -0,0 +1,178 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { Slot } from "@radix-ui/react-slot" +import { + Controller, + ControllerProps, + FieldPath, + FieldValues, + FormProvider, + useFormContext, +} from "react-hook-form" + +import { cn } from "@/lib/utils" +import { Label } from "@/components/ui/label" + +const Form = FormProvider + +type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +> = { + name: TName +} + +const FormFieldContext = React.createContext( + {} as FormFieldContextValue +) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error("useFormField should be used within ") + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} + +type FormItemContextValue = { + id: string +} + +const FormItemContext = React.createContext( + {} as FormItemContextValue +) + +const FormItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + const id = React.useId() + + return ( + +
+ + ) +}) +FormItem.displayName = "FormItem" + +const FormLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField() + + return ( +