@customafk/lunas-ui 0.2.5 → 0.2.7

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 (757) hide show
  1. package/README.md +39 -9
  2. package/ai-docs.md +419 -0
  3. package/dist/alert-CA1RS1CG.d.cts +88 -0
  4. package/dist/alert-DDL82_U3.d.mts +88 -0
  5. package/dist/alert-DIC1_ymv.cjs +2 -0
  6. package/dist/alert-DIC1_ymv.cjs.map +1 -0
  7. package/dist/alert-VP3giy31.mjs +2 -0
  8. package/dist/alert-VP3giy31.mjs.map +1 -0
  9. package/dist/avatar-CTS9-raY.cjs +2 -0
  10. package/dist/avatar-CTS9-raY.cjs.map +1 -0
  11. package/dist/avatar-DbxqvCjT.mjs +2 -0
  12. package/dist/avatar-DbxqvCjT.mjs.map +1 -0
  13. package/dist/badge-B8bw2UEY.mjs +2 -0
  14. package/dist/badge-B8bw2UEY.mjs.map +1 -0
  15. package/dist/badge-BFTGDsBm.d.cts +42 -0
  16. package/dist/badge-Cg0e-djv.d.mts +42 -0
  17. package/dist/badge-uQ0pIZbQ.cjs +2 -0
  18. package/dist/badge-uQ0pIZbQ.cjs.map +1 -0
  19. package/dist/button-Bn54lPVz.d.cts +174 -0
  20. package/dist/button-C6ybzxxj.mjs +2 -0
  21. package/dist/button-C6ybzxxj.mjs.map +1 -0
  22. package/dist/button-C76drZpd.d.mts +174 -0
  23. package/dist/{button-Cd7YtPlT.cjs → button-CwDT3m4m.cjs} +2 -2
  24. package/dist/button-CwDT3m4m.cjs.map +1 -0
  25. package/dist/button.variants-DeCyas1F.mjs +2 -0
  26. package/dist/button.variants-DeCyas1F.mjs.map +1 -0
  27. package/dist/button.variants-tnhb123u.cjs +2 -0
  28. package/dist/button.variants-tnhb123u.cjs.map +1 -0
  29. package/dist/calendar-CyAPpT2m.cjs +2 -0
  30. package/dist/calendar-CyAPpT2m.cjs.map +1 -0
  31. package/dist/calendar-JKxWM6AF.mjs +2 -0
  32. package/dist/calendar-JKxWM6AF.mjs.map +1 -0
  33. package/dist/cards/grid-product-card.cjs +1 -1
  34. package/dist/cards/grid-product-card.cjs.map +1 -1
  35. package/dist/cards/grid-product-card.d.cts +23 -0
  36. package/dist/cards/grid-product-card.d.mts +23 -0
  37. package/dist/cards/grid-product-card.mjs +1 -1
  38. package/dist/cards/grid-product-card.mjs.map +1 -1
  39. package/dist/cards/product-card.cjs +1 -1
  40. package/dist/cards/product-card.cjs.map +1 -1
  41. package/dist/cards/product-card.d.cts +23 -0
  42. package/dist/cards/product-card.d.mts +23 -0
  43. package/dist/cards/product-card.mjs +1 -1
  44. package/dist/cards/product-card.mjs.map +1 -1
  45. package/dist/cards/simple-card.cjs +1 -1
  46. package/dist/cards/simple-card.cjs.map +1 -1
  47. package/dist/cards/simple-card.d.cts +16 -0
  48. package/dist/cards/simple-card.d.mts +18 -2
  49. package/dist/cards/simple-card.mjs +1 -1
  50. package/dist/cards/simple-card.mjs.map +1 -1
  51. package/dist/{checkbox-Bg2FiuQw.mjs → checkbox-DJEdYOjA.mjs} +2 -2
  52. package/dist/checkbox-DJEdYOjA.mjs.map +1 -0
  53. package/dist/{checkbox-C0fSWwmD.cjs → checkbox-RZrRNYP2.cjs} +2 -2
  54. package/dist/checkbox-RZrRNYP2.cjs.map +1 -0
  55. package/dist/close-BU0kWRVo.mjs +2 -0
  56. package/dist/{close-DfuHB7kq.mjs.map → close-BU0kWRVo.mjs.map} +1 -1
  57. package/dist/close-DXk_H3Gt.cjs +2 -0
  58. package/dist/{close-D_Ge7gnP.cjs.map → close-DXk_H3Gt.cjs.map} +1 -1
  59. package/dist/cms-layout-Dc4moos1.cjs +2 -0
  60. package/dist/cms-layout-Dc4moos1.cjs.map +1 -0
  61. package/dist/cms-layout-HfnOQS16.mjs +2 -0
  62. package/dist/cms-layout-HfnOQS16.mjs.map +1 -0
  63. package/dist/{command-IfPmQiyJ.cjs → command-SHd-d_o0.cjs} +2 -2
  64. package/dist/command-SHd-d_o0.cjs.map +1 -0
  65. package/dist/{command-Bma4ivZz.mjs → command-bpcnKEbR.mjs} +2 -2
  66. package/dist/command-bpcnKEbR.mjs.map +1 -0
  67. package/dist/data-display/country.cjs +1 -1
  68. package/dist/data-display/country.cjs.map +1 -1
  69. package/dist/data-display/country.d.cts +15 -3
  70. package/dist/data-display/country.d.mts +15 -3
  71. package/dist/data-display/country.mjs +1 -1
  72. package/dist/data-display/country.mjs.map +1 -1
  73. package/dist/data-display/data-list.cjs +1 -1
  74. package/dist/data-display/data-list.cjs.map +1 -1
  75. package/dist/data-display/data-list.d.cts +31 -2
  76. package/dist/data-display/data-list.d.mts +31 -2
  77. package/dist/data-display/data-list.mjs +1 -1
  78. package/dist/data-display/data-list.mjs.map +1 -1
  79. package/dist/data-display/date-tooltip.cjs +1 -1
  80. package/dist/data-display/date-tooltip.cjs.map +1 -1
  81. package/dist/data-display/date-tooltip.d.cts +13 -2
  82. package/dist/data-display/date-tooltip.d.mts +13 -2
  83. package/dist/data-display/date-tooltip.mjs +1 -1
  84. package/dist/data-display/date-tooltip.mjs.map +1 -1
  85. package/dist/data-display/date.cjs +1 -1
  86. package/dist/data-display/date.d.cts +28 -2
  87. package/dist/data-display/date.d.mts +28 -2
  88. package/dist/data-display/date.mjs +1 -1
  89. package/dist/data-display/empty.cjs +1 -1
  90. package/dist/data-display/empty.cjs.map +1 -1
  91. package/dist/data-display/empty.d.cts +17 -3
  92. package/dist/data-display/empty.d.mts +17 -3
  93. package/dist/data-display/empty.mjs +1 -1
  94. package/dist/data-display/empty.mjs.map +1 -1
  95. package/dist/data-display/name.cjs +1 -1
  96. package/dist/data-display/name.cjs.map +1 -1
  97. package/dist/data-display/name.d.cts +12 -1
  98. package/dist/data-display/name.d.mts +12 -1
  99. package/dist/data-display/name.mjs +1 -1
  100. package/dist/data-display/name.mjs.map +1 -1
  101. package/dist/data-display/phone-number.cjs +1 -1
  102. package/dist/data-display/phone-number.cjs.map +1 -1
  103. package/dist/data-display/phone-number.d.cts +14 -2
  104. package/dist/data-display/phone-number.d.mts +14 -2
  105. package/dist/data-display/phone-number.mjs +1 -1
  106. package/dist/data-display/phone-number.mjs.map +1 -1
  107. package/dist/data-display/role-badge.cjs +1 -1
  108. package/dist/data-display/role-badge.cjs.map +1 -1
  109. package/dist/data-display/role-badge.d.cts +15 -3
  110. package/dist/data-display/role-badge.d.mts +15 -3
  111. package/dist/data-display/role-badge.mjs +1 -1
  112. package/dist/data-display/role-badge.mjs.map +1 -1
  113. package/dist/data-display/statistic.cjs +1 -1
  114. package/dist/data-display/statistic.cjs.map +1 -1
  115. package/dist/data-display/statistic.d.cts +35 -6
  116. package/dist/data-display/statistic.d.mts +37 -8
  117. package/dist/data-display/statistic.mjs +1 -1
  118. package/dist/data-display/statistic.mjs.map +1 -1
  119. package/dist/data-display/user.cjs +1 -2
  120. package/dist/data-display/user.d.cts +14 -1
  121. package/dist/data-display/user.d.mts +14 -1
  122. package/dist/data-display/user.mjs +1 -2
  123. package/dist/date-CVz9xdCg.mjs +2 -0
  124. package/dist/date-CVz9xdCg.mjs.map +1 -0
  125. package/dist/date-a3RI5Pwo.cjs +2 -0
  126. package/dist/date-a3RI5Pwo.cjs.map +1 -0
  127. package/dist/dialog-BchwY6-N.mjs +2 -0
  128. package/dist/dialog-BchwY6-N.mjs.map +1 -0
  129. package/dist/dialog-CNhwBcEl.d.cts +90 -0
  130. package/dist/dialog-D6ygAOSV.d.mts +90 -0
  131. package/dist/dialog-o_68LQXd.cjs +2 -0
  132. package/dist/dialog-o_68LQXd.cjs.map +1 -0
  133. package/dist/dialogs/confirm-dialog.cjs +1 -1
  134. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  135. package/dist/dialogs/confirm-dialog.d.cts +129 -3
  136. package/dist/dialogs/confirm-dialog.d.mts +129 -3
  137. package/dist/dialogs/confirm-dialog.mjs +1 -1
  138. package/dist/dialogs/confirm-dialog.mjs.map +1 -1
  139. package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -2
  140. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +73 -26
  141. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +73 -26
  142. package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -2
  143. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  144. package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
  145. package/dist/dialogs/detail-dialog/index.d.cts +37 -8
  146. package/dist/dialogs/detail-dialog/index.d.mts +37 -8
  147. package/dist/dialogs/detail-dialog/index.mjs +1 -1
  148. package/dist/dialogs/detail-dialog/index.mjs.map +1 -1
  149. package/dist/dialogs/error-dialog.cjs +1 -1
  150. package/dist/dialogs/error-dialog.cjs.map +1 -1
  151. package/dist/dialogs/error-dialog.d.cts +18 -4
  152. package/dist/dialogs/error-dialog.d.mts +18 -4
  153. package/dist/dialogs/error-dialog.mjs +1 -1
  154. package/dist/dialogs/error-dialog.mjs.map +1 -1
  155. package/dist/dialogs/loading-dialog.cjs +1 -1
  156. package/dist/dialogs/loading-dialog.cjs.map +1 -1
  157. package/dist/dialogs/loading-dialog.d.cts +15 -3
  158. package/dist/dialogs/loading-dialog.d.mts +15 -3
  159. package/dist/dialogs/loading-dialog.mjs +1 -1
  160. package/dist/dialogs/loading-dialog.mjs.map +1 -1
  161. package/dist/dist-CIN9T2FB.mjs +2 -0
  162. package/dist/{dist-DP1ehOL8.mjs.map → dist-CIN9T2FB.mjs.map} +1 -1
  163. package/dist/dist-Dh8WwRa8.cjs +2 -0
  164. package/dist/{dist-Q1UyT_bc.cjs.map → dist-Dh8WwRa8.cjs.map} +1 -1
  165. package/dist/dropdown-menu-Ct9BLGfa.cjs +2 -0
  166. package/dist/dropdown-menu-Ct9BLGfa.cjs.map +1 -0
  167. package/dist/dropdown-menu-DWSfXhHo.mjs +2 -0
  168. package/dist/dropdown-menu-DWSfXhHo.mjs.map +1 -0
  169. package/dist/features/descriptions/index.cjs +1 -1
  170. package/dist/features/descriptions/index.cjs.map +1 -1
  171. package/dist/features/descriptions/index.d.cts +158 -19
  172. package/dist/features/descriptions/index.d.mts +158 -19
  173. package/dist/features/descriptions/index.mjs +1 -1
  174. package/dist/features/descriptions/index.mjs.map +1 -1
  175. package/dist/features/search-modal/index.cjs +1 -2
  176. package/dist/features/search-modal/index.d.cts +12 -2
  177. package/dist/features/search-modal/index.d.mts +12 -2
  178. package/dist/features/search-modal/index.mjs +1 -2
  179. package/dist/features/tables/index.cjs +1 -2
  180. package/dist/features/tables/index.d.cts +746 -24
  181. package/dist/features/tables/index.d.mts +746 -24
  182. package/dist/features/tables/index.mjs +1 -2
  183. package/dist/features/tanstack-form/index.cjs +1 -2
  184. package/dist/features/tanstack-form/index.d.cts +2 -1786
  185. package/dist/features/tanstack-form/index.d.mts +2 -1786
  186. package/dist/features/tanstack-form/index.mjs +1 -2
  187. package/dist/field-CXVnw75a.mjs +2 -0
  188. package/dist/field-CXVnw75a.mjs.map +1 -0
  189. package/dist/field-CppNvoxV.cjs +2 -0
  190. package/dist/field-CppNvoxV.cjs.map +1 -0
  191. package/dist/{flex-CeizYtXs.mjs → flex-BLMTj7Ev.mjs} +2 -2
  192. package/dist/flex-BLMTj7Ev.mjs.map +1 -0
  193. package/dist/{flex-BsoSgWFN.cjs → flex-BbbogTsZ.cjs} +2 -2
  194. package/dist/flex-BbbogTsZ.cjs.map +1 -0
  195. package/dist/heading-AKz5ewy-.cjs +2 -0
  196. package/dist/heading-AKz5ewy-.cjs.map +1 -0
  197. package/dist/heading-DN67djxs.mjs +2 -0
  198. package/dist/heading-DN67djxs.mjs.map +1 -0
  199. package/dist/image-B1Dm5LWk.cjs +2 -0
  200. package/dist/image-B1Dm5LWk.cjs.map +1 -0
  201. package/dist/image-BlzrSaoE.mjs +2 -0
  202. package/dist/image-BlzrSaoE.mjs.map +1 -0
  203. package/dist/index-75nSAiSe.d.mts +2030 -0
  204. package/dist/index-aTMCQQms.d.cts +2030 -0
  205. package/dist/index.cjs +1 -0
  206. package/dist/index.d.cts +90 -0
  207. package/dist/index.d.mts +90 -0
  208. package/dist/index.mjs +1 -0
  209. package/dist/{input-DMjPBcJO.mjs → input-Cd0G5y-9.mjs} +2 -2
  210. package/dist/input-Cd0G5y-9.mjs.map +1 -0
  211. package/dist/{input-BoMJaF_N.cjs → input-Cl5VkKQh.cjs} +2 -2
  212. package/dist/input-Cl5VkKQh.cjs.map +1 -0
  213. package/dist/input-D5dtkW6g.d.mts +44 -0
  214. package/dist/input-t2hpPP2K.d.cts +44 -0
  215. package/dist/{label-BzfsTrVt.cjs → label-DkMTQ3Ch.cjs} +2 -2
  216. package/dist/label-DkMTQ3Ch.cjs.map +1 -0
  217. package/dist/label-OmlGaZ5h.mjs +2 -0
  218. package/dist/label-OmlGaZ5h.mjs.map +1 -0
  219. package/dist/layouts/cms-layout/index.cjs +1 -2
  220. package/dist/layouts/cms-layout/index.d.cts +66 -13
  221. package/dist/layouts/cms-layout/index.d.mts +66 -13
  222. package/dist/layouts/cms-layout/index.mjs +1 -2
  223. package/dist/layouts/flex.cjs +1 -1
  224. package/dist/layouts/flex.d.cts +91 -7
  225. package/dist/layouts/flex.d.mts +93 -9
  226. package/dist/layouts/flex.mjs +1 -1
  227. package/dist/layouts/grid.cjs +1 -1
  228. package/dist/layouts/grid.cjs.map +1 -1
  229. package/dist/layouts/grid.d.cts +14 -0
  230. package/dist/layouts/grid.d.mts +14 -0
  231. package/dist/layouts/grid.mjs +1 -1
  232. package/dist/layouts/grid.mjs.map +1 -1
  233. package/dist/layouts/payment-layout/index.cjs +1 -2
  234. package/dist/layouts/payment-layout/index.d.cts +35 -0
  235. package/dist/layouts/payment-layout/index.d.mts +35 -0
  236. package/dist/layouts/payment-layout/index.mjs +1 -2
  237. package/dist/pages/FeatureDeveloping.cjs +1 -1
  238. package/dist/pages/FeatureDeveloping.cjs.map +1 -1
  239. package/dist/pages/FeatureDeveloping.d.cts +21 -3
  240. package/dist/pages/FeatureDeveloping.d.mts +21 -3
  241. package/dist/pages/FeatureDeveloping.mjs +1 -1
  242. package/dist/pages/FeatureDeveloping.mjs.map +1 -1
  243. package/dist/pages/FeatureFixing.cjs +1 -1
  244. package/dist/pages/FeatureFixing.cjs.map +1 -1
  245. package/dist/pages/FeatureFixing.d.cts +21 -3
  246. package/dist/pages/FeatureFixing.d.mts +21 -3
  247. package/dist/pages/FeatureFixing.mjs +1 -1
  248. package/dist/pages/FeatureFixing.mjs.map +1 -1
  249. package/dist/pages/NotAuthorized.cjs +1 -1
  250. package/dist/pages/NotAuthorized.cjs.map +1 -1
  251. package/dist/pages/NotAuthorized.d.cts +21 -3
  252. package/dist/pages/NotAuthorized.d.mts +21 -3
  253. package/dist/pages/NotAuthorized.mjs +1 -1
  254. package/dist/pages/NotAuthorized.mjs.map +1 -1
  255. package/dist/pages/NotFound.cjs +1 -1
  256. package/dist/pages/NotFound.cjs.map +1 -1
  257. package/dist/pages/NotFound.d.cts +21 -3
  258. package/dist/pages/NotFound.d.mts +21 -3
  259. package/dist/pages/NotFound.mjs +1 -1
  260. package/dist/pages/NotFound.mjs.map +1 -1
  261. package/dist/{paragraph-DmiXlAnE.mjs → paragraph-Ch5TvEqL.mjs} +2 -2
  262. package/dist/paragraph-Ch5TvEqL.mjs.map +1 -0
  263. package/dist/{paragraph-Co2e-y5c.cjs → paragraph-DN85Huc4.cjs} +2 -2
  264. package/dist/paragraph-DN85Huc4.cjs.map +1 -0
  265. package/dist/payment-layout-Da29dHJe.cjs +2 -0
  266. package/dist/payment-layout-Da29dHJe.cjs.map +1 -0
  267. package/dist/payment-layout-wN5c7MCM.mjs +2 -0
  268. package/dist/payment-layout-wN5c7MCM.mjs.map +1 -0
  269. package/dist/{popover-DzDrgttC.cjs → popover-AEt-aSy3.cjs} +2 -2
  270. package/dist/popover-AEt-aSy3.cjs.map +1 -0
  271. package/dist/popover-OJXFbqJi.mjs +2 -0
  272. package/dist/popover-OJXFbqJi.mjs.map +1 -0
  273. package/dist/{radio-group-CBhRsUjN.cjs → radio-group-BWLdQw7M.cjs} +2 -2
  274. package/dist/radio-group-BWLdQw7M.cjs.map +1 -0
  275. package/dist/{radio-group-Cem8O6BK.mjs → radio-group-CAgfOr7-.mjs} +2 -2
  276. package/dist/radio-group-CAgfOr7-.mjs.map +1 -0
  277. package/dist/{resizable-B8tRShQI.cjs → resizable-D6UKwvFa.cjs} +2 -2
  278. package/dist/resizable-D6UKwvFa.cjs.map +1 -0
  279. package/dist/{resizable-RPObV6jc.mjs → resizable-DWh_mp5P.mjs} +2 -2
  280. package/dist/resizable-DWh_mp5P.mjs.map +1 -0
  281. package/dist/search-modal-BxjKY8I7.mjs +2 -0
  282. package/dist/search-modal-BxjKY8I7.mjs.map +1 -0
  283. package/dist/search-modal-C-jNqQI1.cjs +2 -0
  284. package/dist/search-modal-C-jNqQI1.cjs.map +1 -0
  285. package/dist/{select-2CgwiefV.cjs → select-Py_t2nX1.cjs} +2 -2
  286. package/dist/select-Py_t2nX1.cjs.map +1 -0
  287. package/dist/{select-CivtMKTM.mjs → select-Ze8Fq88G.mjs} +2 -2
  288. package/dist/select-Ze8Fq88G.mjs.map +1 -0
  289. package/dist/separator-BMsbHAVt.mjs +2 -0
  290. package/dist/separator-BMsbHAVt.mjs.map +1 -0
  291. package/dist/{separator-C3ip6sbh.cjs → separator-BwZb12bh.cjs} +2 -2
  292. package/dist/separator-BwZb12bh.cjs.map +1 -0
  293. package/dist/{sheet-5MJRtrfG.cjs → sheet-CaDXTx7n.cjs} +2 -2
  294. package/dist/sheet-CaDXTx7n.cjs.map +1 -0
  295. package/dist/{sheet-oadGRiie.mjs → sheet-DMIqn1iv.mjs} +2 -2
  296. package/dist/sheet-DMIqn1iv.mjs.map +1 -0
  297. package/dist/sidebar-C27_pwLR.cjs +2 -0
  298. package/dist/sidebar-C27_pwLR.cjs.map +1 -0
  299. package/dist/sidebar-meLttL0V.mjs +2 -0
  300. package/dist/sidebar-meLttL0V.mjs.map +1 -0
  301. package/dist/skeleton-BPxcW2yu.mjs +2 -0
  302. package/dist/skeleton-BPxcW2yu.mjs.map +1 -0
  303. package/dist/skeleton-BfMCjXYM.cjs +2 -0
  304. package/dist/skeleton-BfMCjXYM.cjs.map +1 -0
  305. package/dist/spinner-EgMJOaQi.mjs +2 -0
  306. package/dist/spinner-EgMJOaQi.mjs.map +1 -0
  307. package/dist/spinner-MKXqwF9G.cjs +2 -0
  308. package/dist/spinner-MKXqwF9G.cjs.map +1 -0
  309. package/dist/systems/google.cjs +1 -1
  310. package/dist/systems/google.cjs.map +1 -1
  311. package/dist/systems/google.d.cts +36 -0
  312. package/dist/systems/google.d.mts +36 -0
  313. package/dist/systems/google.mjs +1 -1
  314. package/dist/systems/google.mjs.map +1 -1
  315. package/dist/tables-Cc3Wik4i.cjs +2 -0
  316. package/dist/tables-Cc3Wik4i.cjs.map +1 -0
  317. package/dist/tables-DrJKQPsT.mjs +2 -0
  318. package/dist/tables-DrJKQPsT.mjs.map +1 -0
  319. package/dist/tanstack-form-BmV2BXDz.cjs +2 -0
  320. package/dist/tanstack-form-BmV2BXDz.cjs.map +1 -0
  321. package/dist/tanstack-form-CJ43hVb_.mjs +2 -0
  322. package/dist/tanstack-form-CJ43hVb_.mjs.map +1 -0
  323. package/dist/{textarea-Dlwbg6TY.cjs → textarea-BsgmN4jy.cjs} +2 -2
  324. package/dist/textarea-BsgmN4jy.cjs.map +1 -0
  325. package/dist/{textarea-RjL2DtNf.mjs → textarea-CdGSEkZB.mjs} +2 -2
  326. package/dist/textarea-CdGSEkZB.mjs.map +1 -0
  327. package/dist/tooltip-Bj0iOG4s.mjs +2 -0
  328. package/dist/tooltip-Bj0iOG4s.mjs.map +1 -0
  329. package/dist/{tooltip-DC6i1A25.cjs → tooltip-itUmYz9k.cjs} +2 -2
  330. package/dist/tooltip-itUmYz9k.cjs.map +1 -0
  331. package/dist/{types-Bd0JePtp.d.cts → types-B_32Ieia.d.mts} +1 -1
  332. package/dist/{types-BpHcqlOI.d.mts → types-CDYHkcOk.d.cts} +1 -1
  333. package/dist/{types-DBD4LOem.mjs → types-DNphnTW-.mjs} +1 -1
  334. package/dist/{types-DBD4LOem.mjs.map → types-DNphnTW-.mjs.map} +1 -1
  335. package/dist/typography/paragraph.cjs +1 -1
  336. package/dist/typography/paragraph.d.cts +35 -5
  337. package/dist/typography/paragraph.d.mts +36 -6
  338. package/dist/typography/paragraph.mjs +1 -1
  339. package/dist/typography/title.cjs +1 -1
  340. package/dist/typography/title.cjs.map +1 -1
  341. package/dist/typography/title.d.cts +31 -4
  342. package/dist/typography/title.d.mts +31 -4
  343. package/dist/typography/title.mjs +1 -1
  344. package/dist/typography/title.mjs.map +1 -1
  345. package/dist/ui/alert-dialog.cjs +1 -1
  346. package/dist/ui/alert-dialog.cjs.map +1 -1
  347. package/dist/ui/alert-dialog.d.cts +54 -12
  348. package/dist/ui/alert-dialog.d.mts +54 -12
  349. package/dist/ui/alert-dialog.mjs +1 -1
  350. package/dist/ui/alert-dialog.mjs.map +1 -1
  351. package/dist/ui/alert.cjs +1 -2
  352. package/dist/ui/alert.d.cts +2 -69
  353. package/dist/ui/alert.d.mts +2 -69
  354. package/dist/ui/alert.mjs +1 -2
  355. package/dist/ui/aspect-ratio.cjs +1 -1
  356. package/dist/ui/aspect-ratio.cjs.map +1 -1
  357. package/dist/ui/aspect-ratio.d.cts +15 -2
  358. package/dist/ui/aspect-ratio.d.mts +15 -2
  359. package/dist/ui/aspect-ratio.mjs +1 -1
  360. package/dist/ui/aspect-ratio.mjs.map +1 -1
  361. package/dist/ui/avatar.cjs +1 -1
  362. package/dist/ui/avatar.d.cts +20 -4
  363. package/dist/ui/avatar.d.mts +20 -4
  364. package/dist/ui/avatar.mjs +1 -1
  365. package/dist/ui/badge.cjs +1 -1
  366. package/dist/ui/badge.d.cts +2 -21
  367. package/dist/ui/badge.d.mts +2 -21
  368. package/dist/ui/badge.mjs +1 -1
  369. package/dist/ui/breadcrumb.cjs +1 -1
  370. package/dist/ui/breadcrumb.cjs.map +1 -1
  371. package/dist/ui/breadcrumb.d.cts +38 -25
  372. package/dist/ui/breadcrumb.d.mts +38 -25
  373. package/dist/ui/breadcrumb.mjs +1 -1
  374. package/dist/ui/breadcrumb.mjs.map +1 -1
  375. package/dist/ui/button-group.cjs +1 -1
  376. package/dist/ui/button-group.cjs.map +1 -1
  377. package/dist/ui/button-group.d.cts +27 -6
  378. package/dist/ui/button-group.d.mts +27 -6
  379. package/dist/ui/button-group.mjs +1 -1
  380. package/dist/ui/button-group.mjs.map +1 -1
  381. package/dist/ui/button.cjs +1 -1
  382. package/dist/ui/button.d.cts +1 -1
  383. package/dist/ui/button.d.mts +1 -1
  384. package/dist/ui/button.mjs +1 -1
  385. package/dist/ui/buttons/add-new.cjs +1 -1
  386. package/dist/ui/buttons/add-new.cjs.map +1 -1
  387. package/dist/ui/buttons/add-new.d.cts +9 -0
  388. package/dist/ui/buttons/add-new.d.mts +9 -0
  389. package/dist/ui/buttons/add-new.mjs +1 -1
  390. package/dist/ui/buttons/add-new.mjs.map +1 -1
  391. package/dist/ui/buttons/edit.cjs +1 -1
  392. package/dist/ui/buttons/edit.cjs.map +1 -1
  393. package/dist/ui/buttons/edit.d.cts +9 -0
  394. package/dist/ui/buttons/edit.d.mts +9 -0
  395. package/dist/ui/buttons/edit.mjs +1 -1
  396. package/dist/ui/buttons/edit.mjs.map +1 -1
  397. package/dist/ui/buttons/refresh.cjs +1 -1
  398. package/dist/ui/buttons/refresh.cjs.map +1 -1
  399. package/dist/ui/buttons/refresh.d.cts +9 -0
  400. package/dist/ui/buttons/refresh.d.mts +9 -0
  401. package/dist/ui/buttons/refresh.mjs +1 -1
  402. package/dist/ui/buttons/refresh.mjs.map +1 -1
  403. package/dist/ui/buttons/trash.cjs +1 -1
  404. package/dist/ui/buttons/trash.cjs.map +1 -1
  405. package/dist/ui/buttons/trash.d.cts +9 -0
  406. package/dist/ui/buttons/trash.d.mts +9 -0
  407. package/dist/ui/buttons/trash.mjs +1 -1
  408. package/dist/ui/buttons/trash.mjs.map +1 -1
  409. package/dist/ui/buttons/upload-image.cjs +1 -1
  410. package/dist/ui/buttons/upload-image.cjs.map +1 -1
  411. package/dist/ui/buttons/upload-image.d.cts +13 -0
  412. package/dist/ui/buttons/upload-image.d.mts +13 -0
  413. package/dist/ui/buttons/upload-image.mjs +1 -1
  414. package/dist/ui/buttons/upload-image.mjs.map +1 -1
  415. package/dist/ui/calendar.cjs +1 -1
  416. package/dist/ui/calendar.d.cts +22 -4
  417. package/dist/ui/calendar.d.mts +22 -4
  418. package/dist/ui/calendar.mjs +1 -1
  419. package/dist/ui/card.cjs +1 -1
  420. package/dist/ui/card.cjs.map +1 -1
  421. package/dist/ui/card.d.cts +37 -8
  422. package/dist/ui/card.d.mts +37 -8
  423. package/dist/ui/card.mjs +1 -1
  424. package/dist/ui/card.mjs.map +1 -1
  425. package/dist/ui/carousel.cjs +1 -1
  426. package/dist/ui/carousel.cjs.map +1 -1
  427. package/dist/ui/carousel.d.cts +31 -7
  428. package/dist/ui/carousel.d.mts +31 -7
  429. package/dist/ui/carousel.mjs +1 -1
  430. package/dist/ui/carousel.mjs.map +1 -1
  431. package/dist/ui/checkbox.cjs +1 -1
  432. package/dist/ui/checkbox.d.cts +17 -2
  433. package/dist/ui/checkbox.d.mts +17 -2
  434. package/dist/ui/checkbox.mjs +1 -1
  435. package/dist/ui/collapsible.cjs.map +1 -1
  436. package/dist/ui/collapsible.d.cts +22 -4
  437. package/dist/ui/collapsible.d.mts +22 -4
  438. package/dist/ui/collapsible.mjs.map +1 -1
  439. package/dist/ui/command.cjs +1 -1
  440. package/dist/ui/command.d.cts +48 -11
  441. package/dist/ui/command.d.mts +48 -11
  442. package/dist/ui/command.mjs +1 -1
  443. package/dist/ui/context-menu.cjs +1 -1
  444. package/dist/ui/context-menu.cjs.map +1 -1
  445. package/dist/ui/context-menu.d.cts +65 -16
  446. package/dist/ui/context-menu.d.mts +65 -16
  447. package/dist/ui/context-menu.mjs +1 -1
  448. package/dist/ui/context-menu.mjs.map +1 -1
  449. package/dist/ui/dialog.cjs +1 -1
  450. package/dist/ui/dialog.d.cts +1 -1
  451. package/dist/ui/dialog.d.mts +1 -1
  452. package/dist/ui/dialog.mjs +1 -1
  453. package/dist/ui/drawer.cjs +1 -1
  454. package/dist/ui/drawer.cjs.map +1 -1
  455. package/dist/ui/drawer.d.cts +39 -11
  456. package/dist/ui/drawer.d.mts +39 -11
  457. package/dist/ui/drawer.mjs +1 -1
  458. package/dist/ui/drawer.mjs.map +1 -1
  459. package/dist/ui/dropdown-menu.cjs +1 -1
  460. package/dist/ui/dropdown-menu.d.cts +65 -16
  461. package/dist/ui/dropdown-menu.d.mts +65 -16
  462. package/dist/ui/dropdown-menu.mjs +1 -1
  463. package/dist/ui/empty.cjs +1 -1
  464. package/dist/ui/empty.cjs.map +1 -1
  465. package/dist/ui/empty.d.cts +41 -9
  466. package/dist/ui/empty.d.mts +39 -7
  467. package/dist/ui/empty.mjs +1 -1
  468. package/dist/ui/empty.mjs.map +1 -1
  469. package/dist/ui/field.cjs +1 -2
  470. package/dist/ui/field.d.cts +13 -13
  471. package/dist/ui/field.d.mts +22 -22
  472. package/dist/ui/field.mjs +1 -2
  473. package/dist/ui/file-uploader.cjs +2 -2
  474. package/dist/ui/file-uploader.cjs.map +1 -1
  475. package/dist/ui/file-uploader.d.cts +27 -2
  476. package/dist/ui/file-uploader.d.mts +27 -2
  477. package/dist/ui/file-uploader.mjs +2 -2
  478. package/dist/ui/file-uploader.mjs.map +1 -1
  479. package/dist/ui/form.cjs +1 -1
  480. package/dist/ui/form.cjs.map +1 -1
  481. package/dist/ui/form.d.cts +55 -11
  482. package/dist/ui/form.d.mts +55 -11
  483. package/dist/ui/form.mjs +1 -1
  484. package/dist/ui/form.mjs.map +1 -1
  485. package/dist/ui/hover-card.cjs +1 -1
  486. package/dist/ui/hover-card.cjs.map +1 -1
  487. package/dist/ui/hover-card.d.cts +22 -4
  488. package/dist/ui/hover-card.d.mts +22 -4
  489. package/dist/ui/hover-card.mjs +1 -1
  490. package/dist/ui/hover-card.mjs.map +1 -1
  491. package/dist/ui/image.cjs +1 -1
  492. package/dist/ui/image.d.cts +20 -0
  493. package/dist/ui/image.d.mts +20 -0
  494. package/dist/ui/image.mjs +1 -1
  495. package/dist/ui/input-otp.cjs +1 -1
  496. package/dist/ui/input-otp.cjs.map +1 -1
  497. package/dist/ui/input-otp.d.cts +36 -5
  498. package/dist/ui/input-otp.d.mts +36 -5
  499. package/dist/ui/input-otp.mjs +1 -1
  500. package/dist/ui/input-otp.mjs.map +1 -1
  501. package/dist/ui/input.cjs +1 -1
  502. package/dist/ui/input.d.cts +1 -1
  503. package/dist/ui/input.d.mts +1 -1
  504. package/dist/ui/input.mjs +1 -1
  505. package/dist/ui/inputs/search-input.cjs +1 -1
  506. package/dist/ui/inputs/search-input.cjs.map +1 -1
  507. package/dist/ui/inputs/search-input.d.cts +20 -3
  508. package/dist/ui/inputs/search-input.d.mts +20 -3
  509. package/dist/ui/inputs/search-input.mjs +1 -1
  510. package/dist/ui/inputs/search-input.mjs.map +1 -1
  511. package/dist/ui/item.cjs +1 -1
  512. package/dist/ui/item.cjs.map +1 -1
  513. package/dist/ui/item.d.cts +55 -15
  514. package/dist/ui/item.d.mts +55 -15
  515. package/dist/ui/item.mjs +1 -1
  516. package/dist/ui/item.mjs.map +1 -1
  517. package/dist/ui/label.cjs +1 -1
  518. package/dist/ui/label.d.cts +15 -2
  519. package/dist/ui/label.d.mts +15 -2
  520. package/dist/ui/label.mjs +1 -1
  521. package/dist/ui/menubar.cjs +1 -1
  522. package/dist/ui/menubar.cjs.map +1 -1
  523. package/dist/ui/menubar.d.cts +68 -17
  524. package/dist/ui/menubar.d.mts +68 -17
  525. package/dist/ui/menubar.mjs +1 -1
  526. package/dist/ui/menubar.mjs.map +1 -1
  527. package/dist/ui/multi-select.cjs +1 -1
  528. package/dist/ui/multi-select.cjs.map +1 -1
  529. package/dist/ui/multi-select.d.cts +39 -2
  530. package/dist/ui/multi-select.d.mts +40 -3
  531. package/dist/ui/multi-select.mjs +1 -1
  532. package/dist/ui/multi-select.mjs.map +1 -1
  533. package/dist/ui/navigation-menu.cjs +1 -1
  534. package/dist/ui/navigation-menu.cjs.map +1 -1
  535. package/dist/ui/navigation-menu.d.cts +42 -11
  536. package/dist/ui/navigation-menu.d.mts +42 -11
  537. package/dist/ui/navigation-menu.mjs +1 -1
  538. package/dist/ui/navigation-menu.mjs.map +1 -1
  539. package/dist/ui/pagination.cjs +1 -1
  540. package/dist/ui/pagination.cjs.map +1 -1
  541. package/dist/ui/pagination.d.cts +37 -9
  542. package/dist/ui/pagination.d.mts +37 -9
  543. package/dist/ui/pagination.mjs +1 -1
  544. package/dist/ui/pagination.mjs.map +1 -1
  545. package/dist/ui/popover.cjs +1 -1
  546. package/dist/ui/popover.d.cts +32 -6
  547. package/dist/ui/popover.d.mts +32 -6
  548. package/dist/ui/popover.mjs +1 -1
  549. package/dist/ui/progress.cjs +1 -1
  550. package/dist/ui/progress.cjs.map +1 -1
  551. package/dist/ui/progress.d.cts +13 -2
  552. package/dist/ui/progress.d.mts +13 -2
  553. package/dist/ui/progress.mjs +1 -1
  554. package/dist/ui/progress.mjs.map +1 -1
  555. package/dist/ui/radio-group.cjs +1 -1
  556. package/dist/ui/radio-group.d.cts +25 -3
  557. package/dist/ui/radio-group.d.mts +25 -3
  558. package/dist/ui/radio-group.mjs +1 -1
  559. package/dist/ui/resizable.cjs +1 -1
  560. package/dist/ui/resizable.d.cts +29 -9
  561. package/dist/ui/resizable.d.mts +29 -9
  562. package/dist/ui/resizable.mjs +1 -1
  563. package/dist/ui/scroll-area.cjs +1 -1
  564. package/dist/ui/scroll-area.cjs.map +1 -1
  565. package/dist/ui/scroll-area.d.cts +24 -6
  566. package/dist/ui/scroll-area.d.mts +24 -6
  567. package/dist/ui/scroll-area.mjs +1 -1
  568. package/dist/ui/scroll-area.mjs.map +1 -1
  569. package/dist/ui/select.cjs +1 -1
  570. package/dist/ui/select.d.cts +43 -9
  571. package/dist/ui/select.d.mts +43 -9
  572. package/dist/ui/select.mjs +1 -1
  573. package/dist/ui/separator.cjs +1 -1
  574. package/dist/ui/separator.d.cts +23 -2
  575. package/dist/ui/separator.d.mts +23 -2
  576. package/dist/ui/separator.mjs +1 -1
  577. package/dist/ui/sheet.cjs +1 -1
  578. package/dist/ui/sheet.d.cts +38 -9
  579. package/dist/ui/sheet.d.mts +38 -9
  580. package/dist/ui/sheet.mjs +1 -1
  581. package/dist/ui/sidebar.cjs +1 -1
  582. package/dist/ui/sidebar.cjs.map +1 -1
  583. package/dist/ui/sidebar.d.cts +125 -28
  584. package/dist/ui/sidebar.d.mts +125 -28
  585. package/dist/ui/sidebar.mjs +1 -1
  586. package/dist/ui/sidebar.mjs.map +1 -1
  587. package/dist/ui/skeleton.cjs +1 -1
  588. package/dist/ui/skeleton.d.cts +19 -2
  589. package/dist/ui/skeleton.d.mts +19 -2
  590. package/dist/ui/skeleton.mjs +1 -1
  591. package/dist/ui/slider.cjs +1 -1
  592. package/dist/ui/slider.cjs.map +1 -1
  593. package/dist/ui/slider.d.cts +13 -2
  594. package/dist/ui/slider.d.mts +13 -2
  595. package/dist/ui/slider.mjs +1 -1
  596. package/dist/ui/slider.mjs.map +1 -1
  597. package/dist/ui/sonner.cjs +1 -1
  598. package/dist/ui/sonner.cjs.map +1 -1
  599. package/dist/ui/sonner.d.cts +18 -2
  600. package/dist/ui/sonner.d.mts +18 -2
  601. package/dist/ui/sonner.mjs +1 -1
  602. package/dist/ui/sonner.mjs.map +1 -1
  603. package/dist/ui/spinner.cjs +1 -1
  604. package/dist/ui/spinner.d.cts +17 -2
  605. package/dist/ui/spinner.d.mts +17 -2
  606. package/dist/ui/spinner.mjs +1 -1
  607. package/dist/ui/switch.cjs +1 -1
  608. package/dist/ui/switch.cjs.map +1 -1
  609. package/dist/ui/switch.d.cts +17 -2
  610. package/dist/ui/switch.d.mts +17 -2
  611. package/dist/ui/switch.mjs +1 -1
  612. package/dist/ui/switch.mjs.map +1 -1
  613. package/dist/ui/table.cjs +1 -1
  614. package/dist/ui/table.cjs.map +1 -1
  615. package/dist/ui/table.d.cts +53 -18
  616. package/dist/ui/table.d.mts +53 -18
  617. package/dist/ui/table.mjs +1 -1
  618. package/dist/ui/table.mjs.map +1 -1
  619. package/dist/ui/tabs.cjs +1 -1
  620. package/dist/ui/tabs.cjs.map +1 -1
  621. package/dist/ui/tabs.d.cts +26 -5
  622. package/dist/ui/tabs.d.mts +26 -5
  623. package/dist/ui/tabs.mjs +1 -1
  624. package/dist/ui/tabs.mjs.map +1 -1
  625. package/dist/ui/textarea.cjs +1 -1
  626. package/dist/ui/textarea.d.cts +18 -2
  627. package/dist/ui/textarea.d.mts +18 -2
  628. package/dist/ui/textarea.mjs +1 -1
  629. package/dist/ui/toggle-group.cjs +1 -1
  630. package/dist/ui/toggle-group.cjs.map +1 -1
  631. package/dist/ui/toggle-group.d.cts +19 -3
  632. package/dist/ui/toggle-group.d.mts +19 -3
  633. package/dist/ui/toggle-group.mjs +1 -1
  634. package/dist/ui/toggle-group.mjs.map +1 -1
  635. package/dist/ui/toggle.cjs +1 -1
  636. package/dist/ui/toggle.cjs.map +1 -1
  637. package/dist/ui/toggle.d.cts +17 -4
  638. package/dist/ui/toggle.d.mts +17 -4
  639. package/dist/ui/toggle.mjs +1 -1
  640. package/dist/ui/toggle.mjs.map +1 -1
  641. package/dist/ui/tooltip.cjs +1 -1
  642. package/dist/ui/tooltip.d.cts +37 -5
  643. package/dist/ui/tooltip.d.mts +37 -5
  644. package/dist/ui/tooltip.mjs +1 -1
  645. package/dist/user-BEyYLDNK.cjs +2 -0
  646. package/dist/user-BEyYLDNK.cjs.map +1 -0
  647. package/dist/user-DONsffqr.mjs +2 -0
  648. package/dist/user-DONsffqr.mjs.map +1 -0
  649. package/package.json +11 -3
  650. package/styles/theme.css +27 -6
  651. package/dist/avatar-DReNH6rV.mjs +0 -2
  652. package/dist/avatar-DReNH6rV.mjs.map +0 -1
  653. package/dist/avatar-aVxo69zP.cjs +0 -2
  654. package/dist/avatar-aVxo69zP.cjs.map +0 -1
  655. package/dist/badge-B4Fa7-J3.mjs +0 -2
  656. package/dist/badge-B4Fa7-J3.mjs.map +0 -1
  657. package/dist/badge-cvLJyaCA.cjs +0 -2
  658. package/dist/badge-cvLJyaCA.cjs.map +0 -1
  659. package/dist/button-B5a1UlC_.d.mts +0 -59
  660. package/dist/button-Cd7YtPlT.cjs.map +0 -1
  661. package/dist/button-D8BUqpI2.mjs +0 -2
  662. package/dist/button-D8BUqpI2.mjs.map +0 -1
  663. package/dist/button-DYZCqN6A.d.cts +0 -59
  664. package/dist/button.variants-B_dFX3i2.mjs +0 -2
  665. package/dist/button.variants-B_dFX3i2.mjs.map +0 -1
  666. package/dist/button.variants-aqkTmzFu.cjs +0 -2
  667. package/dist/button.variants-aqkTmzFu.cjs.map +0 -1
  668. package/dist/calendar-B-PDpHK5.mjs +0 -2
  669. package/dist/calendar-B-PDpHK5.mjs.map +0 -1
  670. package/dist/calendar-Cq3_5u0k.cjs +0 -2
  671. package/dist/calendar-Cq3_5u0k.cjs.map +0 -1
  672. package/dist/checkbox-Bg2FiuQw.mjs.map +0 -1
  673. package/dist/checkbox-C0fSWwmD.cjs.map +0 -1
  674. package/dist/close-D_Ge7gnP.cjs +0 -2
  675. package/dist/close-DfuHB7kq.mjs +0 -2
  676. package/dist/command-Bma4ivZz.mjs.map +0 -1
  677. package/dist/command-IfPmQiyJ.cjs.map +0 -1
  678. package/dist/data-display/user.cjs.map +0 -1
  679. package/dist/data-display/user.mjs.map +0 -1
  680. package/dist/date-WraHGsbb.cjs +0 -2
  681. package/dist/date-WraHGsbb.cjs.map +0 -1
  682. package/dist/date-uVTm7J09.mjs +0 -2
  683. package/dist/date-uVTm7J09.mjs.map +0 -1
  684. package/dist/dialog-B50k7HnL.mjs +0 -2
  685. package/dist/dialog-B50k7HnL.mjs.map +0 -1
  686. package/dist/dialog-BoNhIQYJ.cjs +0 -2
  687. package/dist/dialog-BoNhIQYJ.cjs.map +0 -1
  688. package/dist/dialog-CuZxUWfc.d.cts +0 -47
  689. package/dist/dialog-D4LnpcNL.d.mts +0 -47
  690. package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +0 -1
  691. package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +0 -1
  692. package/dist/dist-DP1ehOL8.mjs +0 -2
  693. package/dist/dist-Q1UyT_bc.cjs +0 -2
  694. package/dist/dropdown-menu-B8GUTfTp.mjs +0 -2
  695. package/dist/dropdown-menu-B8GUTfTp.mjs.map +0 -1
  696. package/dist/dropdown-menu-BuyuU6uF.cjs +0 -2
  697. package/dist/dropdown-menu-BuyuU6uF.cjs.map +0 -1
  698. package/dist/features/search-modal/index.cjs.map +0 -1
  699. package/dist/features/search-modal/index.mjs.map +0 -1
  700. package/dist/features/tables/index.cjs.map +0 -1
  701. package/dist/features/tables/index.mjs.map +0 -1
  702. package/dist/features/tanstack-form/index.cjs.map +0 -1
  703. package/dist/features/tanstack-form/index.mjs.map +0 -1
  704. package/dist/flex-BsoSgWFN.cjs.map +0 -1
  705. package/dist/flex-CeizYtXs.mjs.map +0 -1
  706. package/dist/heading-BEbpIiLg.cjs +0 -2
  707. package/dist/heading-BEbpIiLg.cjs.map +0 -1
  708. package/dist/heading-CrF1CFWS.mjs +0 -2
  709. package/dist/heading-CrF1CFWS.mjs.map +0 -1
  710. package/dist/image-BBZUipoU.cjs +0 -2
  711. package/dist/image-BBZUipoU.cjs.map +0 -1
  712. package/dist/image-CZji4Q26.mjs +0 -2
  713. package/dist/image-CZji4Q26.mjs.map +0 -1
  714. package/dist/input-BoMJaF_N.cjs.map +0 -1
  715. package/dist/input-DMjPBcJO.mjs.map +0 -1
  716. package/dist/input-DszdZdbJ.d.cts +0 -25
  717. package/dist/input-Dv7UKl6Z.d.mts +0 -25
  718. package/dist/label-BzfsTrVt.cjs.map +0 -1
  719. package/dist/label-Dqr8nxWi.mjs +0 -2
  720. package/dist/label-Dqr8nxWi.mjs.map +0 -1
  721. package/dist/layouts/cms-layout/index.cjs.map +0 -1
  722. package/dist/layouts/cms-layout/index.mjs.map +0 -1
  723. package/dist/layouts/payment-layout/index.cjs.map +0 -1
  724. package/dist/layouts/payment-layout/index.mjs.map +0 -1
  725. package/dist/paragraph-Co2e-y5c.cjs.map +0 -1
  726. package/dist/paragraph-DmiXlAnE.mjs.map +0 -1
  727. package/dist/popover-BckwBuuD.mjs +0 -2
  728. package/dist/popover-BckwBuuD.mjs.map +0 -1
  729. package/dist/popover-DzDrgttC.cjs.map +0 -1
  730. package/dist/radio-group-CBhRsUjN.cjs.map +0 -1
  731. package/dist/radio-group-Cem8O6BK.mjs.map +0 -1
  732. package/dist/resizable-B8tRShQI.cjs.map +0 -1
  733. package/dist/resizable-RPObV6jc.mjs.map +0 -1
  734. package/dist/select-2CgwiefV.cjs.map +0 -1
  735. package/dist/select-CivtMKTM.mjs.map +0 -1
  736. package/dist/separator-Bf0gymN4.mjs +0 -2
  737. package/dist/separator-Bf0gymN4.mjs.map +0 -1
  738. package/dist/separator-C3ip6sbh.cjs.map +0 -1
  739. package/dist/sheet-5MJRtrfG.cjs.map +0 -1
  740. package/dist/sheet-oadGRiie.mjs.map +0 -1
  741. package/dist/skeleton-Ba6koCVf.mjs +0 -2
  742. package/dist/skeleton-Ba6koCVf.mjs.map +0 -1
  743. package/dist/skeleton-CHympz8k.cjs +0 -2
  744. package/dist/skeleton-CHympz8k.cjs.map +0 -1
  745. package/dist/spinner-Chm_2fLr.cjs +0 -2
  746. package/dist/spinner-Chm_2fLr.cjs.map +0 -1
  747. package/dist/spinner-D1v3Bard.mjs +0 -2
  748. package/dist/spinner-D1v3Bard.mjs.map +0 -1
  749. package/dist/textarea-Dlwbg6TY.cjs.map +0 -1
  750. package/dist/textarea-RjL2DtNf.mjs.map +0 -1
  751. package/dist/tooltip-B3dTcgcc.mjs +0 -2
  752. package/dist/tooltip-B3dTcgcc.mjs.map +0 -1
  753. package/dist/tooltip-DC6i1A25.cjs.map +0 -1
  754. package/dist/ui/alert.cjs.map +0 -1
  755. package/dist/ui/alert.mjs.map +0 -1
  756. package/dist/ui/field.cjs.map +0 -1
  757. package/dist/ui/field.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":["Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n>","LabelPrimitive","Separator","CheckboxField: React.FC<Props>","isSubmitting","Checkbox","DateField: React.FC<Props>","Popover","PopoverTrigger","Button","CalendarDaysIcon","PopoverContent","Calendar","EmailField: React.FC<Props>","isSubmitting","Input","AtSignIcon","XIcon","NumberInput: React.FC<TProps>","value","Input","NumberField: React.FC<NumberFieldProps>","isSubmitting","Loader2Icon","BanIcon","PasswordField: React.FC<Props>","isSubmitting","Input","EyeOffIcon","EyeIcon","RadioGroupField: React.FC<Props>","isSubmitting","RadioGroup","RadioGroupItem","SelectField: React.FC<Props>","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","PackagePlusIcon","SwitchPrimitive","SwitchField: React.FC<Props>","TextField: React.FC<Props>","isSubmitting","Input","XIcon","Loader2Icon","BanIcon","TextareaField: React.FC<Props>","isSubmitting","Textarea","Loader2Icon","BanIcon","TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}>","Button","TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n>","Button","PlusIcon","ArrowDownToLine","SeparatorPrimitive","TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n>","Button","Trash2Icon","TanStackContainerForm: React.FC<React.PropsWithChildren>","CancelButton: React.FC<React.ComponentProps<'button'>>","SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n>","Loader2","TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n>","open","Dialog","DialogPortal","DialogOverlay","DialogContent","DialogTitle","Separator","TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n>","TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n>","DialogPrimitive","CloseButton","SectionHeader: React.FC<React.PropsWithChildren>","SectionMain: React.FC<React.PropsWithChildren>","TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n>","TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}>"],"sources":["../../../packages/components/features/tanstack-form/components/ui/badge.tsx","../../../packages/components/features/tanstack-form/components/ui/label.tsx","../../../packages/components/features/tanstack-form/components/ui/field.tsx","../../../packages/components/features/tanstack-form/components/fields/checkbox-field.tsx","../../../packages/components/features/tanstack-form/components/fields/date-field.tsx","../../../packages/components/features/tanstack-form/components/fields/email-field.tsx","../../../packages/components/ui/inputs/number-input.tsx","../../../packages/components/features/tanstack-form/components/fields/number-field.tsx","../../../packages/components/features/tanstack-form/components/fields/password-field.tsx","../../../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx","../../../packages/components/features/tanstack-form/components/fields/select-field.tsx","../../../packages/components/features/tanstack-form/components/ui/switch.tsx","../../../packages/components/features/tanstack-form/components/fields/switch-field.tsx","../../../packages/components/features/tanstack-form/components/fields/text-field.tsx","../../../packages/components/features/tanstack-form/components/fields/textarea-field.tsx","../../../packages/components/features/tanstack-form/components/forms/action-submit.tsx","../../../packages/components/features/tanstack-form/components/forms/actions-form.tsx","../../../packages/components/features/tanstack-form/components/ui/separator.tsx","../../../packages/components/features/tanstack-form/components/forms/card-form.tsx","../../../packages/components/features/tanstack-form/components/forms/container-form.tsx","../../../packages/components/features/tanstack-form/components/ui/cancel-button.tsx","../../../packages/components/features/tanstack-form/components/ui/submit-button.tsx","../../../packages/components/features/tanstack-form/components/forms/dialog-form.tsx","../../../packages/components/features/tanstack-form/components/forms/group-field.tsx","../../../packages/components/features/tanstack-form/components/forms/popover-form.tsx","../../../packages/components/features/tanstack-form/components/forms/section-form.tsx","../../../packages/components/features/tanstack-form/components/forms/title-field.tsx","../../../packages/components/features/tanstack-form/tanstack-form.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nconst badgeVariants = cva(['flex w-fit items-center justify-center rounded-full font-bold text-text-negative-strong'], {\n variants: {\n color: {\n default: 'bg-primary-strong',\n secondary: 'bg-secondary-strong',\n success: 'bg-success-strong',\n info: 'bg-info-strong',\n warning: 'bg-warning-strong',\n danger: 'border border-danger-strong bg-linear-to-b from-danger-strong/90 via-danger-strong to-danger-strong/90',\n },\n size: {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-0.75 text-xs',\n md: 'px-2.5 py-0.75 text-sm',\n lg: 'px-3 py-1 text-sm',\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'sm',\n },\n});\n\nexport const Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n> = ({ label, color, size, className, children }) => {\n return (\n <div data-slot=\"required-indicator\" className={badgeVariants({ color, size, className })}>\n {label || children}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { Badge } from './badge';\n\nfunction Label({ className, children, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'text-text-positive',\n 'flex w-full items-center justify-between',\n 'select-none font-medium text-sm/6 leading-none',\n 'group-data-[disabled=true]:pointer-events-none',\n 'group-data-[disabled=true]:opacity-50',\n 'peer-disabled:cursor-not-allowed',\n 'peer-disabled:opacity-50',\n 'aria-required:*:data-[slot=required-indicator]:inline-block',\n className\n )}\n {...props}\n >\n {children}\n <Badge label=\"Required\" color=\"danger\" size=\"sm\" className=\"hidden\" />\n </LabelPrimitive.Root>\n );\n}\n\nexport { Label };\n","import { memo, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Label } from './label';\n\nconst fieldVariants = cva('group/field flex w-full gap-2 data-[invalid=true]:text-danger *:data-[slot=field-content]:gap-0', {\n variants: {\n orientation: {\n vertical: ['flex-col *:w-full [&>.sr-only]:w-auto'],\n horizontal: [\n 'flex-row items-center',\n '*:data-[slot=field-label]:flex-auto',\n 'has-[>[data-slot=field-content]]:items-start',\n 'has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col *:w-full [&>.sr-only]:w-auto',\n '@md/field-group:flex-row',\n '@md/field-group:items-center',\n '@md/field-group:gap-4',\n '@md/field-group:*:w-auto',\n '@md/field-group:*:data-[slot=field-content]:basis-1/2',\n '@md/field-group:*:data-[slot=field-content-main]:basis-1/2',\n '@md/field-group:*:data-[slot=field-label]:flex-auto',\n '@md/field-group:has-[>[data-slot=field-content]]:items-start',\n '@md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n});\n\nconst FieldSet = memo(({ className, ...props }: React.ComponentProps<'fieldset'>) => {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn('flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3', className)}\n {...props}\n />\n );\n});\nFieldSet.displayName = 'FieldSet';\n\nconst FieldLegend = memo(\n ({\n className,\n variant = 'legend',\n ...props\n }: React.ComponentProps<'legend'> & {\n variant?: 'legend' | 'label';\n }) => {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn('mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base', className)}\n {...props}\n />\n );\n }\n);\nFieldLegend.displayName = 'FieldLegend';\n\nconst FieldGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group',\n 'flex flex-col gap-7',\n 'data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4',\n className\n )}\n {...props}\n />\n );\n});\nFieldGroup.displayName = 'FieldGroup';\n\nconst Field = memo(({ className, orientation = 'vertical', ...props }: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) => {\n return <div data-slot=\"field\" data-orientation={orientation} className={cn(fieldVariants({ orientation }), className)} {...props} />;\n});\nField.displayName = 'Field';\n\nconst FieldContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content\" className={cn('group/field-content flex flex-col gap-1.5 leading-snug', className)} {...props} />;\n});\nFieldContent.displayName = 'FieldContent';\n\nconst FieldContentMain = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content-main\" className={cn('relative', className)} {...props} />;\n});\n\nconst FieldLabel = memo(({ className, ...props }: React.ComponentProps<typeof Label>) => {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex h-6 gap-1 font-medium leading-snug',\n 'has-[>[data-slot=field]]:w-full',\n 'has-[>[data-slot=field]]:flex-col',\n 'has-[>[data-slot=field]]:rounded-md',\n 'has-[>[data-slot=field]]:border',\n 'has-[>[data-slot=field]]:border-border',\n 'has-data-[state=checked]:border-primary',\n '*:data-[slot=field]:p-4 group-data-[disabled=true]/field:opacity-50',\n className\n )}\n {...props}\n />\n );\n});\nFieldLabel.displayName = 'FieldLabel';\n\nconst FieldTitle = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-label\"\n className={cn('flex w-fit items-center gap-2 font-medium text-sm leading-snug group-data-[disabled=true]/field:opacity-50', className)}\n {...props}\n />\n );\n});\nFieldTitle.displayName = 'FieldTitle';\n\nconst FieldDescription = memo(({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n // biome-ignore lint/security/noSecrets: true\n 'nth-last-2:-mt-1 font-normal text-text-positive-weak text-xs leading-normal last:mt-0 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4 [[data-variant=legend]+&]:-mt-1.5',\n className\n )}\n {...props}\n />\n );\n});\nFieldDescription.displayName = 'FieldDescription';\n\nconst FieldNote = memo(({ isShow = true, className, ...props }: React.ComponentProps<'div'> & { isShow?: boolean }) => {\n if (isShow === false) return null;\n return (\n <div\n data-slot=\"field-note\"\n className={cn('text-wrap rounded border border-primary-muted bg-primary-bg-subtle p-2 text-text-positive-weak text-xs', className)}\n {...props}\n />\n );\n});\nFieldNote.displayName = 'FieldNote';\n\nconst FieldSeparator = memo(({ children, className, ...props }: React.PropsWithChildren<React.ComponentProps<'div'>>) => {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span className=\"relative mx-auto block w-fit bg-background px-2 text-text-positive-weak\" data-slot=\"field-separator-content\">\n {children}\n </span>\n )}\n </div>\n );\n});\nFieldSeparator.displayName = 'FieldSeparator';\n\nconst FieldError = memo(\n ({\n className,\n children,\n errors,\n ...props\n }: React.ComponentProps<'div'> & {\n errors?: Array<{ code?: string; message?: string } | undefined>;\n }) => {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return (\n <div className=\"flex flex-row items-center justify-start gap-x-0.5\">\n <p>{errors[0]?.code === 'invalid_type' ? 'Không đúng định dạng' : errors[0].message}</p>\n </div>\n );\n }\n\n return (\n <ul className=\"flex list-none flex-col\">\n {errors.map(error => {\n if (typeof error === 'string') return <li key={error}>{error}</li>;\n if (!error?.message) return null;\n return <li key={error.message}>{error.message}</li>;\n })}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div role=\"alert\" data-slot=\"field-error\" className={cn('w-full font-semibold text-danger-strong text-xs', className)} {...props}>\n {content}\n </div>\n );\n }\n);\nFieldError.displayName = 'FieldError';\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldNote,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldContentMain,\n FieldTitle,\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport type { TanStackFormCheckboxGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Checkbox } from '@/components/ui/checkbox';\n\ntype Props = Pick<z.input<typeof TanStackFormCheckboxGroupFieldSchema>, 'label' | 'description' | 'orientation' | 'options' | 'helperText'>;\n\nexport const CheckboxField: React.FC<Props> = ({ label, description, options, helperText, orientation }) => {\n const field = useTanStackFieldContext<string[] | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n <FieldContentMain>\n <FieldGroup className=\"flex flex-col gap-y-2\">\n {options.map(option => {\n return (\n <Field key={option.value} orientation=\"horizontal\">\n <Checkbox\n id={`${field.name}-${option.value}`}\n name={field.name}\n checked={field.state.value?.includes(option.value) ?? false}\n disabled={isSubmitting}\n onCheckedChange={checked => {\n // Update the field value based on the checkbox state\n\n // If checked and field value is not null, push the option value\n if (checked && field.state.value !== null) {\n field.pushValue(option.value);\n // If the field value is null, initialize it with the selected option\n } else if (checked && field.state.value === null) {\n field.setValue([option.value]);\n // If unchecked and field value is not null, remove the option value\n } else if (!checked && field.state.value !== null) {\n const index = field.state.value.indexOf(option.value);\n if (index > -1) field.removeValue(index);\n // If unchecked and field value is null, do nothing\n } else if (!checked && field.state.value === null) {\n field.setValue(null);\n }\n }}\n />\n <FieldLabel htmlFor={`${field.name}-${option.value}`} className=\"text-text-positive\">\n {option.label}\n </FieldLabel>\n </Field>\n );\n })}\n </FieldGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { CalendarDaysIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { endOfToday, endOfTomorrow, endOfYesterday, format, lastDayOfMonth, startOfMonth, subDays } from '@customafk/react-toolkit/date-fns';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport type { TanStackFormDateFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { Calendar } from '@/components/ui/calendar';\n\ntype Props = Pick<\n z.input<typeof TanStackFormDateFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n minDate?: Date;\n maxDate?: Date;\n};\n\nexport const DateField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, minDate, maxDate, required }) => {\n const field = useTanStackFieldContext<Date | null>();\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} data-invalid={_isInvalid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain className=\"flex flex-col space-y-1\">\n <div className=\"flex w-full flex-col\">\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"lg\"\n className={cn(\n 'flex items-center justify-between rounded font-normal outline-border',\n 'hover:bg-transparent',\n 'focus:outline-1 focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n 'data-[state=open]:text-text-positive-muted',\n 'data-[state=open]:outline-1',\n 'data-[state=open]:outline-primary-strong',\n 'data-[state=open]:ring-4',\n 'data-[state=open]:ring-primary-weak',\n field.state.value === null && 'text-text-positive-muted'\n )}\n >\n <p>{field.state.value === null ? placeholder || 'Select date' : format(field.state.value, 'PPPP')}</p>\n <CalendarDaysIcon strokeWidth={1} />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent align=\"start\" side=\"bottom\" className=\"flex w-fit min-w-0 overflow-y-auto rounded p-0\" onBlur={field.handleBlur}>\n <div className=\"flex h-full flex-col space-y-2 border-r border-r-border p-2 [&>button]:justify-start [&>button]:text-sm\">\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfToday());\n }}\n >\n Today\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfTomorrow());\n }}\n >\n Tomorrow\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfYesterday());\n }}\n >\n Yesterday\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 3));\n }}\n >\n Last 3 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 7));\n }}\n >\n Last 7 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 30));\n }}\n >\n Last 30 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(startOfMonth(endOfToday()));\n }}\n >\n This Month\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(lastDayOfMonth(endOfToday()));\n }}\n >\n Last Month\n </Button>\n </div>\n <div className=\"flex flex-1 flex-col\">\n <div className=\"min-w-73 border-b border-b-border p-2\">\n <Calendar\n mode=\"single\"\n selected={field.state.value ?? undefined}\n hidden={{\n before: minDate ?? new Date(1900, 0, 1),\n after: maxDate ?? new Date(2100, 11, 31),\n }}\n onSelect={date => {\n if (!date) return;\n field.handleChange(date);\n }}\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { AtSignIcon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '@/components/features/tanstack-form/tanstack-form';\n\nimport type { TanStackFormEmailFieldSchema } from '../../schema';\n\ntype Props = Pick<\n z.input<typeof TanStackFormEmailFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n> & {\n maxLength?: number;\n};\nexport const EmailField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n helperText,\n orientation = 'responsive',\n showErrorMessage = true,\n maxLength,\n}) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _invalid = useMemo(() => {\n return state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isDirty, state.meta.isTouched, state.meta.isValid]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange(null);\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"email\"\n placeholder={placeholder}\n className={cn('pl-9', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n <div className=\"absolute top-0 left-0 flex size-9 items-center justify-center text-muted\">\n <AtSignIcon size={14} />\n </div>\n\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-strong\"\n onClick={onClear}\n >\n <XIcon size={14} aria-hidden=\"true\" />\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">\n {showErrorMessage && state.meta.isDirty && <FieldError errors={state.meta.errors} />}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\n\nconst createValidationRegex = (allowNegative: boolean): RegExp => {\n return allowNegative ? /^-?\\d*\\.?\\d*$/ : /^\\d*\\.?\\d*$/;\n};\n\nconst formatNumberWithCommas = (num: number | string): string => {\n return Number(num).toLocaleString();\n};\n\nconst customRoundedValue = (value: number, precision: number, roundingRule: 'up' | 'down' | 'nearest' | 'none') => {\n if (roundingRule === 'none') return value;\n\n const factor = 10 ** precision;\n const scaledValue = value * factor;\n\n switch (roundingRule) {\n case 'up':\n return Math.ceil(scaledValue) / factor;\n case 'down':\n return Math.floor(scaledValue) / factor;\n case 'nearest': {\n if (scaledValue % 1 < 0.1) return Math.floor(scaledValue) / factor;\n if (scaledValue % 1 >= 0.59) return Math.ceil(scaledValue) / factor;\n return (Math.floor(scaledValue) + 0.5) / factor;\n }\n default: {\n return value;\n }\n }\n};\n\ntype TProps = React.HTMLAttributes<HTMLInputElement> & {\n /**\n * Description: Value for the text field\n *\n * Default: ''\n *\n * Usage: Value for the text field\n */\n value?: number | null | undefined;\n /**\n * Description: Disabled state of the text field\n *\n * Default: `false`\n *\n * Usage: Disabled state of the text field\n *\n * Note: If true, the text field will be disabled\n */\n disabled?: boolean;\n /**\n * Description: Readonly state of the text field\n *\n * Default: `false`\n *\n * Usage: Readonly state of the text field\n */\n readOnly?: boolean;\n /**\n * Description: Allow negative value for the text field\n *\n * Default: `false`\n *\n * Usage: Allow negative value for the text field\n */\n allowNegative?: boolean;\n /**\n * Description: Decimal point for the text field\n *\n * Default: `undefined`\n *\n * Usage: Ex: [12,3] => console.log(2323.23) // True\n *\n * Note: IF use this prop, `numberAfterDecimalPoint` will be ignored\n */\n decimal?: [number, number];\n /**\n * Description: Rounding rule for the text field\n *\n * Default: `nearest`\n *\n * Usage: Rounding rule for the text field\n * - 'up': Round up\n * - 'down': Round down\n * - 'nearest': Round to nearest\n * - 'none': No rounding\n *\n * E.g.\n * - Value: 2.135, precision: 2\n * - 'up' => 2.14\n * - 'down' => 2.13\n * - 'nearest' => 2.13\n * - 'none' => 2.135\n */\n roundingRule?: 'up' | 'down' | 'nearest' | 'none';\n /**\n * Description: Number of digits after the decimal point\n *\n * Default: `2`\n *\n * Usage: Number of digits after the decimal point\n */\n numberAfterDecimalPoint?: number;\n /**\n * Description: Placeholder for the text field\n *\n * Default: ''\n *\n * Usage: Placeholder for the text field\n */\n placeholder?: string;\n /**\n * Description: Unit text for the text field\n *\n * Default: ''\n *\n * E.g. 'kg', 'm', 'USD'...\n */\n unitText?: string;\n /**\n * Description: Invalid state of the text field\n *\n * Default: `false`\n *\n * Usage: Invalid state of the text field\n */\n invalid?: boolean;\n /**\n * Description: Precision for the text field\n *\n * Default: `undefined`\n * E.g.\n * - 2.13 => 2.1 when precision is 1\n * - 2.134 => 2.13 when precision is 2\n */\n precision?: number;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n wrapperClassName?: string;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n onValueChange?: (value: number | null) => void;\n /**\n * Description: Callback function for the blur event\n * Usage: Callback function for the blur event\n */\n onBlur?: () => void;\n};\n/**\n * ## Unit Text Field Component\n *\n * **Description**: This component is to display common text field with unit\n *\n * **Usage**: Text field with unit example: 1000 (kg), 100 (m), 1000 (USD)...\n */\nexport const NumberInput: React.FC<TProps> = ({\n disabled = false,\n readOnly = false,\n allowNegative = false,\n numberAfterDecimalPoint = 2,\n roundingRule = 'none',\n value = null,\n unitText,\n decimal,\n placeholder,\n precision,\n wrapperClassName,\n className,\n onChange,\n onValueChange,\n onFocus,\n onBlur,\n ...props\n}) => {\n const _unitRef = useRef<HTMLSpanElement>(null);\n const _inputRef = useRef<HTMLInputElement>(null);\n\n const [_value, _setValue] = useState<string | null>(value?.toString() ?? null);\n\n // Memoized values for validation and formatting\n const maxDecimalPlaces = useMemo(() => decimal?.[1] ?? numberAfterDecimalPoint, [decimal, numberAfterDecimalPoint]);\n const maxIntegerLength = useMemo(() => decimal && decimal[0] - decimal[1], [decimal]);\n const validationRegex = useMemo(() => createValidationRegex(allowNegative), [allowNegative]);\n\n // Validate decimal point is less than or equal to the limit\n const validateDecimalPoint = useCallback(\n (value: string) => {\n if (!maxDecimalPlaces || value === '-') return true;\n\n const [integerPart, decimalPart = ''] = value.split('.') as [string, string];\n const integerPartLength = integerPart.startsWith('-') ? integerPart.length - 1 : integerPart.length;\n const decimalPartLength = decimalPart.length;\n\n return decimalPartLength <= maxDecimalPlaces && integerPartLength <= (maxIntegerLength ?? Infinity);\n },\n [maxDecimalPlaces, maxIntegerLength]\n );\n const formattedValue = useCallback(\n (val: string) => {\n if (val === '0') return '0';\n if (!Number(val)) return null;\n\n const numValue = parseFloat(val);\n const effectivePrecision = Math.min(maxDecimalPlaces - 1, precision || 0);\n const roundedValue = customRoundedValue(numValue, effectivePrecision, roundingRule).toString();\n const [integerPart, decimalPart = ''] = roundedValue.split('.');\n const formattedInteger = formatNumberWithCommas(integerPart);\n return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;\n },\n [maxDecimalPlaces, precision, roundingRule]\n );\n\n const handleZeroCase = useCallback(\n (value: string) => {\n // Check for zero\n const isZero = value === '0';\n // Check for negative zero patterns. E.g., '-0', '-0.0', '-0.000', '-0.'\n const isNegativeZero = value === '-' || /^-0+(\\.0+)?$/.test(value) || /^-0*\\.$/.test(value);\n if (isZero) {\n onValueChange?.(0);\n _setValue(value);\n return;\n }\n if (isNegativeZero) {\n _setValue(() => {\n onValueChange?.(0);\n return value;\n });\n return;\n }\n },\n [onValueChange]\n );\n const handleChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n e => {\n // Don't prevent default behavior of input change\n onChange?.(e);\n\n // Custom event handler for value change\n const { value: inputValue } = e.target;\n\n // Handle empty input\n if (inputValue === '' || inputValue === undefined) {\n onValueChange?.(null);\n _setValue(null);\n return;\n }\n\n // Handle zero and negative zero\n handleZeroCase(inputValue);\n\n // Validate input format\n if (!validationRegex.test(inputValue) || !validateDecimalPoint(inputValue)) return;\n\n const numericValue = parseFloat(inputValue) || 0;\n onValueChange?.(numericValue);\n _setValue(inputValue);\n },\n [validateDecimalPoint, onChange, onValueChange, handleZeroCase, validationRegex]\n );\n\n const handleFocus = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onFocus?.(e);\n _setValue(prev => (typeof prev === 'string' ? prev.replace(/,/g, '') : null)); // Remove commas for easier editing\n },\n [readOnly, onFocus]\n );\n\n const handleBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onBlur?.(e);\n _setValue(prev => {\n if (prev === null) return null;\n const isZero = prev === '0' || prev === '-' || /^-0+(\\.0+)?$/.test(prev) || /^-0*\\.$/.test(prev);\n if (isZero) return '0';\n return typeof prev === 'string' ? formattedValue(prev) : null;\n });\n },\n [readOnly, formattedValue, onBlur]\n );\n\n // Set initial value\n useEffect(() => {\n const isFocused = document.activeElement === _inputRef.current;\n\n if (value === undefined || value === null || !validationRegex.test(value.toString()) || !validateDecimalPoint(value.toString())) {\n _setValue(null);\n return;\n }\n\n _setValue(prev => (isFocused ? prev : formattedValue(value.toString())));\n }, [formattedValue, value, validateDecimalPoint, validationRegex]);\n\n // Set padding right for the input field\n useEffect(() => {\n if (!_unitRef.current || !_inputRef.current || !unitText) return;\n const unitWidth = _unitRef.current.offsetWidth;\n _inputRef.current.style.setProperty('padding-right', `${(unitWidth + 10) / 16}rem`);\n }, [unitText]);\n\n return (\n <div className={cn('relative', wrapperClassName)}>\n <Input\n {...props}\n ref={_inputRef}\n value={_value || (readOnly ? '0' : '')}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n className={cn('text-end font-number text-sm slashed-zero lining-nums tabular-nums', readOnly && 'bg-muted text-muted-foreground', className)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n {unitText && (\n <span ref={_unitRef} className=\"-translate-y-1/2 pointer-events-none absolute top-1/2 right-2 text-muted-foreground text-sm\">\n {unitText}\n </span>\n )}\n </div>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { NumberInput } from '@/components/ui/inputs/number-input';\n\nimport type { TanStackFormNumberFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype NumberFieldProps = Pick<\n z.input<typeof TanStackFormNumberFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'rounding' | 'decimalPlaces' | 'percision' | 'unit' | 'showErrorMessage'\n> & {\n required?: boolean;\n allowNegative?: boolean;\n};\n\nexport const NumberField: React.FC<NumberFieldProps> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n orientation = 'responsive',\n showErrorMessage = true,\n rounding,\n decimalPlaces,\n percision,\n unit,\n\n required,\n allowNegative,\n}) => {\n const field = useTanStackFieldContext<number | null>();\n\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const onValueChange = useCallback(\n (value: number | null) => {\n if (isSubmitting) return;\n field.handleChange(value);\n },\n [isSubmitting, field.handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain>\n <div className=\"relative w-full\">\n <NumberInput\n id={field.name}\n value={field.state.value}\n aria-invalid={field.state.meta.isTouched && !field.state.meta.isValid && field.state.meta.isDirty}\n placeholder={placeholder}\n roundingRule={rounding}\n numberAfterDecimalPoint={decimalPlaces}\n precision={percision}\n unitText={unit}\n allowNegative={allowNegative}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={field.handleBlur}\n onValueChange={onValueChange}\n />\n {isSubmitting && (\n <div className=\"absolute inset-s-2 inset-y-0 top-2.5 text-muted-weak [&>svg]:size-3.5\">\n <Loader2Icon className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {field.state.meta.isDirty && showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-s-2 inset-y-0 top-2.75 text-danger-strong [&>svg]:size-3.5\">\n <BanIcon />\n </div>\n )}\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n {field.state.meta.isDirty && showErrorMessage && <FieldError errors={_errors} />}\n </div>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { Input } from '@/components/ui/input';\n\nimport type { TanStackFormPasswordFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormPasswordFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n>;\nexport const PasswordField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, showErrorMessage = true }) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n const _invalid = useMemo(() => {\n return state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isDirty, state.meta.isTouched, state.meta.isValid]);\n\n const toggleVisibility = useCallback(() => setIsVisible(prevState => !prevState), []);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n handleChange(value || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n type={isVisible ? 'text' : 'password'}\n placeholder={placeholder}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"new-password\"\n onBlur={handleBlur}\n onChange={onChange}\n />\n\n <button\n className=\"absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isVisible}\n aria-controls=\"password\"\n >\n {isVisible ? <EyeOffIcon size={16} aria-hidden=\"true\" /> : <EyeIcon size={16} aria-hidden=\"true\" />}\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">\n {showErrorMessage && state.meta.isDirty && <FieldError errors={state.meta.errors} />}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n </FieldGroup>\n );\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormRadioGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\ntype Props = Pick<z.input<typeof TanStackFormRadioGroupFieldSchema>, 'label' | 'description' | 'options' | 'orientation' | 'helperText'>;\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup defaultValue={field.state.value ?? undefined} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"justify-between rounded p-2!\">\n <FieldContent className=\"gap-1!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n <RadioGroupItem value={option.value} />\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { PackagePlusIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport type { TanStackFormSelectFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\n\ntype Props = Pick<\n z.input<typeof TanStackFormSelectFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'defaultValue' | 'options' | 'tooltip' | 'helperText' | 'orientation' | 'clearable'\n> & {\n required?: boolean;\n};\n\nexport const SelectField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n orientation = 'responsive',\n\n options,\n helperText,\n required = false,\n}) => {\n const field = useTanStackFieldContext<string | null>();\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain className=\"flex flex-col\">\n <Select defaultValue={field.state.value || undefined} onValueChange={field.handleChange}>\n <SelectTrigger aria-invalid={_isInvalid ? 'true' : undefined} onBlur={field.handleBlur}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {!!options.length &&\n options.map(option => {\n return (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n );\n })}\n {!options.length && (\n <div className=\"flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n No options available\n </div>\n )}\n </SelectContent>\n </Select>\n\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n <FieldError errors={_errors} />\n </div>\n\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Switch as SwitchPrimitive } from 'radix-ui';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer',\n 'w-8 shrink-0 cursor-pointer items-center rounded-full shadow-xs transition-all',\n 'inline-flex h-5',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-primary-weak',\n 'focus-visible:ring-4',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n\n '-outline-offset-1 inset-shadow-2xs outline-1',\n\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:outline-primary-strong',\n\n 'data-[state=unchecked]:bg-muted-weak',\n 'data-[state=unchecked]:outline-border',\n\n 'data-[state=unchecked]:[&_span]:size-4',\n 'data-[state=unchecked]:[&_span]:translate-x-0.5',\n 'data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'block size-4 bg-card shadow-xs',\n 'pointer-events-none rounded-full ring-0 transition-transform',\n 'data-[state=checked]:translate-x-[calc(100%-3px)]',\n 'data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type z from 'zod';\n\nimport type { TanStackFormSwitchFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldDescription, FieldGroup, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { Switch } from '../ui/switch';\n\ntype Props = Pick<z.input<typeof TanStackFormSwitchFieldSchema>, 'label' | 'description' | 'helperText'>;\n\nexport const SwitchField: React.FC<Props> = ({ label, description, helperText }) => {\n const field = useTanStackFieldContext<boolean | null>();\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation=\"vertical\" className=\"relative justify-between gap-y-1\">\n <FieldContent>\n <FieldTitle className=\"cursor-pointer\">\n <label htmlFor={field.name}>{label}</label>\n </FieldTitle>\n <FieldDescription>{description}</FieldDescription>\n <Switch\n id={field.name}\n checked={field.state.value ?? false}\n className=\"absolute top-1 right-1\"\n onBlur={field.handleBlur}\n onCheckedChange={field.handleChange}\n />\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useId, useMemo, useRef } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '@/components/features/tanstack-form/tanstack-form';\n\nimport type { TanStackFormTextFieldSchema } from '../../schema';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'counter' | 'tooltip' | 'helperText' | 'showClearButton' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showClearButton = false,\n showErrorMessage = true,\n\n required = false,\n maxLength,\n}) => {\n // console.log('TextField is in early development stage, expect breaking changes in the future');\n const id = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _showClearButton = showClearButton && !isSubmitting && !!state.value && !state.meta.errors.length;\n\n const _count = state.value ? state.value.length : 0;\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} character${!_count ? '' : 's'}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n\n const _isEmpty = required ? state.value === null : false;\n\n // Tính toán % để đổi màu Counter\n const _isNearLimit = maxLength && _count >= maxLength * 0.8;\n const _isAtLimit = maxLength && _count >= maxLength;\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange(null);\n inputRef.current?.focus();\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={id}>\n <p>\n {label}\n {required && <span className=\"text-danger-strong\"> *</span>}\n </p>\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n ref={inputRef}\n id={id}\n name={name}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"off\"\n placeholder={placeholder}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n className={cn('pr-6', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n {_showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-intense [&>svg]:size-3.5\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {state.meta.isDirty && showErrorMessage && !!state.meta.errors.length && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon aria-hidden=\"true\" size={14} />\n </div>\n )}\n <div className=\"my-1 flex w-full items-start justify-between gap-x-2\">\n {state.meta.isDirty && showErrorMessage ? <FieldError className=\"flex-1\" errors={state.meta.errors} /> : <div />}\n {!!counter && (\n <p\n className={cn(\n 'h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors',\n _isAtLimit ? 'font-medium text-danger-strong' : _isNearLimit ? 'text-warning-strong' : 'text-text-positive-weak'\n )}\n >\n {_countText}\n </p>\n )}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { memo, useCallback, useId, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Textarea } from '@/components/ui/textarea';\n\nimport type { TanStackFormTextAreaFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextAreaFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'counter' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextareaField: React.FC<Props> = memo(\n ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showErrorMessage = true,\n\n required = false,\n maxLength,\n }) => {\n const id = useId();\n const { form, state, name, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _count = state.value ? state.value.length : 0;\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} character${!_count ? '' : 's'}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n\n const _isEmpty = required ? state.value === null : false;\n\n const _errors = state.meta.errors;\n\n const _isNearLimit = maxLength && _count >= maxLength * 0.8;\n\n const _isAtLimit = maxLength && _count >= maxLength;\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={id}>\n <p>\n {label}\n {required && <span className=\"text-danger-strong\"> *</span>}\n </p>\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Textarea\n id={id}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n placeholder={placeholder}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onChange={onChange}\n onBlur={handleBlur}\n />\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {state.meta.isDirty && showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"my-1 flex w-full items-start justify-between gap-x-2\">\n {state.meta.isDirty && showErrorMessage ? <FieldError className=\"flex-1\" errors={state.meta.errors} /> : <div />}\n {!!counter && (\n <p\n className={cn(\n 'h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors',\n _isAtLimit ? 'font-medium text-danger-strong' : _isNearLimit ? 'text-warning-strong' : 'text-text-positive-weak'\n )}\n >\n {_countText}\n </p>\n )}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n }\n);\n","import { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}> = ({ label, className }) => {\n const form = useTanStackFormContext();\n\n const onSubmit = useCallback(async () => {\n await form.handleSubmit({ submitAction: 'submit' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }, [form]);\n return (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button type=\"button\" size=\"md\" disabled={disabled} isLoading={isSubmitting} className={cn('min-h-8 min-w-32', className)} onClick={onSubmit}>\n {label ?? 'Submit'}\n </Button>\n );\n }}\n />\n );\n};\n","import { ArrowDownToLine, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n> = ({ type = 'create' }) => {\n const form = useTanStackFormContext();\n return (\n <div className=\"flex h-8 items-center justify-between\">\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || state.isSubmitting,\n })}\n children={({ disabled }) => {\n return (\n <Button color=\"muted\" variant=\"outline\" type=\"button\" size=\"md\" disabled={disabled} className=\"h-full min-w-32\" onClick={() => form.reset()}>\n Cancel\n </Button>\n );\n }}\n />\n {type === 'create' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'create' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <PlusIcon />\n Add New\n </Button>\n );\n }}\n />\n )}\n {type === 'update' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'update' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <ArrowDownToLine />\n Update\n </Button>\n );\n }}\n />\n )}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nfunction Separator({ className, orientation = 'horizontal', decorative = true, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border-weak',\n 'data-[orientation=horizontal]:h-px',\n 'data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full',\n 'data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { Separator } from '../ui/separator';\n\nexport const TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n> = ({ title, description, onDelete, children }) => {\n return (\n <section data-slot=\"card-form\" className=\"relative flex flex-col rounded-md bg-card pb-4 shadow-card ring-4 ring-border-weak\">\n <div data-slot=\"card-form-header\" className=\"flex flex-col space-y-1 p-4\">\n <p className=\"font-semibold text-lg\">{title}</p>\n {!!description && <p className=\"text-muted text-sm\">{description}</p>}\n </div>\n <Separator />\n <div data-slot=\"card-form-main\" className=\"flex flex-col space-y-4 py-4\">\n {children}\n </div>\n {!!onDelete && (\n <Button\n color=\"danger\"\n variant=\"outline\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={e => {\n onDelete?.();\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Trash2Icon />\n Remove\n </Button>\n )}\n </section>\n );\n};\n","export const TanStackContainerForm: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <div data-slot=\"section-form\" className=\"flex flex-col space-y-4\">\n {children}\n </div>\n );\n};\n","export const CancelButton: React.FC<React.ComponentProps<'button'>> = ({ ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n className=\"min-w-40 cursor-pointer rounded-sm border border-border bg-card px-4 py-2 font-semibold text-sm text-text-positive shadow-xs outline-none transition-all hover:opacity-90 focus:border-border focus:ring-3 focus:ring-border/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none\"\n >\n Hủy\n </button>\n );\n};\n","import { Loader2 } from 'lucide-react';\n\nexport const SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n> = ({ isSubmitting, submitText = 'Submit', ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n data-loading={isSubmitting ? 'true' : undefined}\n className=\"relative min-h-9.5 min-w-40 cursor-pointer rounded-sm border border-primary-strong bg-primary px-4 py-2 font-semibold text-sm text-text-negative shadow-card outline-none transition-all hover:opacity-90 focus:border-transparent focus:ring-3 focus:ring-primary/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none data-[loading=true]:pointer-events-none data-[loading=true]:opacity-80\"\n >\n {isSubmitting ? (\n <Loader2 size={16} strokeWidth={3} className=\"absolute top-1/2 left-1/2 z-10 -translate-x-1/2 -translate-y-1/2 animate-spin\" />\n ) : (\n submitText\n )}\n </button>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\nimport { Dialog, DialogContent, DialogOverlay, DialogPortal, DialogTitle } from '@/components/ui/dialog';\n\nexport const TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, submitText, open, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) form.reset();\n onOpenChange?.(open);\n },\n [form.reset, onOpenChange]\n );\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogContent className=\"flex size-full max-h-dvh max-w-dvw flex-col gap-0 overflow-y-auto p-0 shadow-dialog sm:h-auto sm:max-h-[85dvh] sm:max-w-2xl sm:rounded-sm\">\n <div data-slot=\"dialog-header\" className=\"flex flex-col items-center justify-center gap-2 px-4 py-6 text-center shadow-sm sm:text-left\">\n <DialogTitle data-slot=\"dialog-title\">{title}</DialogTitle>\n </div>\n <Separator />\n <div data-slot=\"dialog-content\" className=\"relative flex flex-col space-y-4 overflow-y-auto p-0 pt-6 max-sm:flex-1 sm:p-4\">\n {children}\n </div>\n <Separator />\n <div\n data-slot=\"dialog-footer\"\n className=\"flex flex-col-reverse items-center justify-between gap-2 px-6 py-4 shadow-sm sm:flex-row sm:justify-end max-sm:[&>button]:w-full\"\n >\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n onClick={() => {\n form.reset();\n handleOpenChange(false);\n }}\n />\n );\n }}\n />\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} submitText={submitText} onClick={() => form.handleSubmit()} />;\n }}\n />\n </div>\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n};\n","import {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\n\nexport const TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n> = ({\n label,\n description,\n helperText,\n\n orientation = 'responsive',\n children,\n}) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n {children}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { cn } from '@customafk/react-toolkit/utils';\n\nimport { CloseButton } from '@/components/ui/buttons/close';\n\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\n\nexport const TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, open, contentClassName, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n return (\n <DialogPrimitive.Root data-slot=\"dialog\" open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal data-slot=\"dialog-portal\">\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-40 bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in',\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out'\n )}\n />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed top-4 right-4 z-50 h-[calc(100dvh-2rem)] min-w-sm max-w-xl rounded-md bg-background drop-shadow-lg',\n 'duration-300',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:slide-in-from-right',\n 'data-[state=open]:fade-in',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:slide-out-to-right',\n 'data-[state=closed]:fade-out'\n )}\n >\n <section className=\"relative flex size-full flex-col\">\n <header className=\"flex h-14 items-center border-border border-b px-4\">\n <h2 className=\"font-semibold text-lg text-primary-strong\">{title}</h2>\n </header>\n\n <div className={cn('flex flex-1 flex-col overflow-y-auto py-4', contentClassName)}>{children}</div>\n\n <div className=\"flex flex-col space-y-4 border-border border-t px-4 py-2\">\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} className=\"w-full\" onClick={() => form.handleSubmit()} />;\n }}\n />\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isPristine || state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n className=\"w-full\"\n onClick={() => {\n form.reset();\n onOpenChange?.(false);\n }}\n />\n );\n }}\n />\n </div>\n\n <DialogPrimitive.Close asChild>\n <CloseButton className=\"absolute top-2 right-2\" />\n </DialogPrimitive.Close>\n </section>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","import { Separator } from '../ui/separator';\n\nconst SectionHeader: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <header data-slot=\"section-header\" className=\"px-4 pt-2.5 pb-2 font-medium text-base text-text-positive\">\n {children}\n </header>\n );\n};\n\nconst SectionMain: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <main data-slot=\"section-main\" className=\"relative flex flex-col space-y-4 py-4\">\n {children}\n </main>\n );\n};\n\nexport const TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n> = ({ title, children }) => {\n return (\n <section data-slot=\"section-form\" className=\"flex flex-col rounded-md bg-background shadow-card ring-4 ring-border-weak\">\n <SectionHeader>{title}</SectionHeader>\n <Separator />\n <SectionMain>{children}</SectionMain>\n </section>\n );\n};\n","import { Field, FieldContent, FieldDescription, FieldGroup, FieldLegend, FieldNote, FieldSeparator } from '../ui/field';\n\nexport const TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}> = ({ title, description, helperText }) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field className=\"gap-0\">\n <FieldContent>\n <FieldLegend className=\"mb-1\">{title}</FieldLegend>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { createFormHook, createFormHookContexts } from '@tanstack/react-form';\n\nimport { CheckboxField } from './components/fields/checkbox-field';\nimport { DateField } from './components/fields/date-field';\nimport { EmailField } from './components/fields/email-field';\nimport { NumberField } from './components/fields/number-field';\nimport { PasswordField } from './components/fields/password-field';\nimport { RadioGroupField } from './components/fields/radio-group-field';\nimport { SelectField } from './components/fields/select-field';\nimport { SwitchField } from './components/fields/switch-field';\nimport { TextField } from './components/fields/text-field';\nimport { TextareaField } from './components/fields/textarea-field';\nimport { TanStackActionSubmit } from './components/forms/action-submit';\nimport { TanStackActionsForm } from './components/forms/actions-form';\nimport { TanStackCardForm } from './components/forms/card-form';\nimport { TanStackContainerForm } from './components/forms/container-form';\nimport { TanStackDialogForm } from './components/forms/dialog-form';\nimport { TanStackFieldGroup } from './components/forms/group-field';\nimport { TanStackPopoverForm } from './components/forms/popover-form';\nimport { TanStackSectionForm } from './components/forms/section-form';\nimport { TanStackTitleField } from './components/forms/title-field';\nimport { Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldSeparator } from './components/ui/field';\n\nconst { fieldContext, formContext, useFieldContext: useTanStackFieldContext, useFormContext: useTanStackFormContext } = createFormHookContexts();\n\nconst {\n useAppForm: useTanStackForm,\n withForm: withTanStackForm,\n withFieldGroup: withTanStackFieldGroup,\n} = createFormHook({\n fieldContext,\n formContext,\n\n fieldComponents: {\n TextField,\n TextareaField,\n NumberField,\n EmailField,\n PasswordField,\n\n SelectField,\n DateField,\n SwitchField,\n RadioGroupField,\n CheckboxField,\n\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n },\n formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackFieldGroup,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n },\n});\n\nexport {\n useTanStackForm,\n withTanStackForm,\n withTanStackFieldGroup,\n useTanStackFieldContext,\n useTanStackFormContext,\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n>","Label","LabelPrimitive","Label","Separator","CheckboxField: React.FC<Props>","isSubmitting","Checkbox","DateField: React.FC<Props>","Popover","EmailField: React.FC<Props>","isSubmitting","NumberInput: React.FC<TProps>","value","NumberField: React.FC<NumberFieldProps>","isSubmitting","PasswordField: React.FC<Props>","isSubmitting","RadioGroupField: React.FC<Props>","isSubmitting","RadioGroup","SelectField: React.FC<Props>","Select","Switch","SwitchPrimitive","SwitchField: React.FC<Props>","Switch","TextField: React.FC<Props>","isSubmitting","TextareaField: React.FC<Props>","isSubmitting","TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}>","TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n>","Separator","SeparatorPrimitive","TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n>","Separator","TanStackContainerForm: React.FC<React.PropsWithChildren>","CancelButton: React.FC<React.ComponentProps<'button'>>","SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n>","TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n>","open","Dialog","Separator","TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n>","TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n>","DialogPrimitive","SectionHeader: React.FC<React.PropsWithChildren>","SectionMain: React.FC<React.PropsWithChildren>","TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n>","Separator","TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}>"],"sources":["../../../packages/components/features/tanstack-form/components/ui/badge.tsx","../../../packages/components/features/tanstack-form/components/ui/label.tsx","../../../packages/components/features/tanstack-form/components/ui/field.tsx","../../../packages/components/features/tanstack-form/components/fields/checkbox-field.tsx","../../../packages/components/features/tanstack-form/components/fields/date-field.tsx","../../../packages/components/features/tanstack-form/components/fields/email-field.tsx","../../../packages/components/ui/inputs/number-input.tsx","../../../packages/components/features/tanstack-form/components/fields/number-field.tsx","../../../packages/components/features/tanstack-form/components/fields/password-field.tsx","../../../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx","../../../packages/components/features/tanstack-form/components/fields/select-field.tsx","../../../packages/components/features/tanstack-form/components/ui/switch.tsx","../../../packages/components/features/tanstack-form/components/fields/switch-field.tsx","../../../packages/components/features/tanstack-form/components/fields/text-field.tsx","../../../packages/components/features/tanstack-form/components/fields/textarea-field.tsx","../../../packages/components/features/tanstack-form/components/forms/action-submit.tsx","../../../packages/components/features/tanstack-form/components/forms/actions-form.tsx","../../../packages/components/features/tanstack-form/components/ui/separator.tsx","../../../packages/components/features/tanstack-form/components/forms/card-form.tsx","../../../packages/components/features/tanstack-form/components/forms/container-form.tsx","../../../packages/components/features/tanstack-form/components/ui/cancel-button.tsx","../../../packages/components/features/tanstack-form/components/ui/submit-button.tsx","../../../packages/components/features/tanstack-form/components/forms/dialog-form.tsx","../../../packages/components/features/tanstack-form/components/forms/group-field.tsx","../../../packages/components/features/tanstack-form/components/forms/popover-form.tsx","../../../packages/components/features/tanstack-form/components/forms/section-form.tsx","../../../packages/components/features/tanstack-form/components/forms/title-field.tsx","../../../packages/components/features/tanstack-form/tanstack-form.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nconst badgeVariants = cva(['flex w-fit items-center justify-center rounded-full font-bold text-text-negative-strong'], {\n variants: {\n color: {\n default: 'bg-primary-strong',\n secondary: 'bg-secondary-strong',\n success: 'bg-success-strong',\n info: 'bg-info-strong',\n warning: 'bg-warning-strong',\n danger: 'border border-danger-strong bg-linear-to-b from-danger-strong/90 via-danger-strong to-danger-strong/90',\n },\n size: {\n xs: 'px-1.5 py-0.5 text-xs',\n sm: 'px-2 py-0.75 text-xs',\n md: 'px-2.5 py-0.75 text-sm',\n lg: 'px-3 py-1 text-sm',\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'sm',\n },\n});\n\nexport const Badge: React.FC<\n React.PropsWithChildren<{\n label: string;\n color?: VariantProps<typeof badgeVariants>['color'];\n size?: VariantProps<typeof badgeVariants>['size'];\n className?: string;\n }>\n> = ({ label, color, size, className, children }) => {\n return (\n <div data-slot=\"required-indicator\" className={badgeVariants({ color, size, className })}>\n {label || children}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { Badge } from './badge';\n\nfunction Label({ className, children, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'text-text-positive',\n 'flex w-full items-center justify-between',\n 'select-none font-medium text-sm/6 leading-none',\n 'group-data-[disabled=true]:pointer-events-none',\n 'group-data-[disabled=true]:opacity-50',\n 'peer-disabled:cursor-not-allowed',\n 'peer-disabled:opacity-50',\n 'aria-required:*:data-[slot=required-indicator]:inline-block',\n className\n )}\n {...props}\n >\n {children}\n <Badge label=\"Required\" color=\"danger\" size=\"sm\" className=\"hidden\" />\n </LabelPrimitive.Root>\n );\n}\n\nexport { Label };\n","import { memo, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Label } from './label';\n\nconst fieldVariants = cva('group/field flex w-full gap-2 data-[invalid=true]:text-danger *:data-[slot=field-content]:gap-0', {\n variants: {\n orientation: {\n vertical: ['flex-col *:w-full [&>.sr-only]:w-auto'],\n horizontal: [\n 'flex-row items-center',\n '*:data-[slot=field-label]:flex-auto',\n 'has-[>[data-slot=field-content]]:items-start',\n 'has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n responsive: [\n 'flex-col *:w-full [&>.sr-only]:w-auto',\n '@md/field-group:flex-row',\n '@md/field-group:items-center',\n '@md/field-group:gap-4',\n '@md/field-group:*:w-auto',\n '@md/field-group:*:data-[slot=field-content]:basis-1/2',\n '@md/field-group:*:data-[slot=field-content-main]:basis-1/2',\n '@md/field-group:*:data-[slot=field-label]:flex-auto',\n '@md/field-group:has-[>[data-slot=field-content]]:items-start',\n '@md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',\n ],\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n});\n\nconst FieldSet = memo(({ className, ...props }: React.ComponentProps<'fieldset'>) => {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn('flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3', className)}\n {...props}\n />\n );\n});\nFieldSet.displayName = 'FieldSet';\n\nconst FieldLegend = memo(\n ({\n className,\n variant = 'legend',\n ...props\n }: React.ComponentProps<'legend'> & {\n variant?: 'legend' | 'label';\n }) => {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn('mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base', className)}\n {...props}\n />\n );\n }\n);\nFieldLegend.displayName = 'FieldLegend';\n\nconst FieldGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n 'group/field-group @container/field-group',\n 'flex flex-col gap-7',\n 'data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4',\n className\n )}\n {...props}\n />\n );\n});\nFieldGroup.displayName = 'FieldGroup';\n\nconst Field = memo(({ className, orientation = 'vertical', ...props }: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) => {\n return <div data-slot=\"field\" data-orientation={orientation} className={cn(fieldVariants({ orientation }), className)} {...props} />;\n});\nField.displayName = 'Field';\n\nconst FieldContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content\" className={cn('group/field-content flex flex-col gap-1.5 leading-snug', className)} {...props} />;\n});\nFieldContent.displayName = 'FieldContent';\n\nconst FieldContentMain = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"field-content-main\" className={cn('relative', className)} {...props} />;\n});\n\nconst FieldLabel = memo(({ className, ...props }: React.ComponentProps<typeof Label>) => {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n 'group/field-label peer/field-label flex h-6 gap-1 font-medium leading-snug',\n 'has-[>[data-slot=field]]:w-full',\n 'has-[>[data-slot=field]]:flex-col',\n 'has-[>[data-slot=field]]:rounded-md',\n 'has-[>[data-slot=field]]:border',\n 'has-[>[data-slot=field]]:border-border',\n 'has-data-[state=checked]:border-primary',\n '*:data-[slot=field]:p-4 group-data-[disabled=true]/field:opacity-50',\n className\n )}\n {...props}\n />\n );\n});\nFieldLabel.displayName = 'FieldLabel';\n\nconst FieldTitle = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"field-label\"\n className={cn('flex w-fit items-center gap-2 font-medium text-sm leading-snug group-data-[disabled=true]/field:opacity-50', className)}\n {...props}\n />\n );\n});\nFieldTitle.displayName = 'FieldTitle';\n\nconst FieldDescription = memo(({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n // biome-ignore lint/security/noSecrets: true\n 'nth-last-2:-mt-1 font-normal text-text-positive-weak text-xs leading-normal last:mt-0 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4 [[data-variant=legend]+&]:-mt-1.5',\n className\n )}\n {...props}\n />\n );\n});\nFieldDescription.displayName = 'FieldDescription';\n\nconst FieldNote = memo(({ isShow = true, className, ...props }: React.ComponentProps<'div'> & { isShow?: boolean }) => {\n if (isShow === false) return null;\n return (\n <div\n data-slot=\"field-note\"\n className={cn('text-wrap rounded border border-primary-muted bg-primary-bg-subtle p-2 text-text-positive-weak text-xs', className)}\n {...props}\n />\n );\n});\nFieldNote.displayName = 'FieldNote';\n\nconst FieldSeparator = memo(({ children, className, ...props }: React.PropsWithChildren<React.ComponentProps<'div'>>) => {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span className=\"relative mx-auto block w-fit bg-background px-2 text-text-positive-weak\" data-slot=\"field-separator-content\">\n {children}\n </span>\n )}\n </div>\n );\n});\nFieldSeparator.displayName = 'FieldSeparator';\n\nconst FieldError = memo(\n ({\n className,\n children,\n errors,\n ...props\n }: React.ComponentProps<'div'> & {\n errors?: Array<{ code?: string; message?: string } | undefined>;\n }) => {\n const content = useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return (\n <div className=\"flex flex-row items-center justify-start gap-x-0.5\">\n <p>{errors[0]?.code === 'invalid_type' ? 'Không đúng định dạng' : errors[0].message}</p>\n </div>\n );\n }\n\n return (\n <ul className=\"flex list-none flex-col\">\n {errors.map(error => {\n if (typeof error === 'string') return <li key={error}>{error}</li>;\n if (!error?.message) return null;\n return <li key={error.message}>{error.message}</li>;\n })}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div role=\"alert\" data-slot=\"field-error\" className={cn('w-full font-semibold text-danger-strong text-xs', className)} {...props}>\n {content}\n </div>\n );\n }\n);\nFieldError.displayName = 'FieldError';\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldNote,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldContentMain,\n FieldTitle,\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport type { TanStackFormCheckboxGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Checkbox } from '@/components/ui/checkbox';\n\ntype Props = Pick<z.input<typeof TanStackFormCheckboxGroupFieldSchema>, 'label' | 'description' | 'orientation' | 'options' | 'helperText'>;\n\nexport const CheckboxField: React.FC<Props> = ({ label, description, options, helperText, orientation }) => {\n const field = useTanStackFieldContext<string[] | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n <FieldContentMain>\n <FieldGroup className=\"flex flex-col gap-y-2\">\n {options.map(option => {\n return (\n <Field key={option.value} orientation=\"horizontal\">\n <Checkbox\n id={`${field.name}-${option.value}`}\n name={field.name}\n checked={field.state.value?.includes(option.value) ?? false}\n disabled={isSubmitting}\n onCheckedChange={checked => {\n // Update the field value based on the checkbox state\n\n // If checked and field value is not null, push the option value\n if (checked && field.state.value !== null) {\n field.pushValue(option.value);\n // If the field value is null, initialize it with the selected option\n } else if (checked && field.state.value === null) {\n field.setValue([option.value]);\n // If unchecked and field value is not null, remove the option value\n } else if (!checked && field.state.value !== null) {\n const index = field.state.value.indexOf(option.value);\n if (index > -1) field.removeValue(index);\n // If unchecked and field value is null, do nothing\n } else if (!checked && field.state.value === null) {\n field.setValue(null);\n }\n }}\n />\n <FieldLabel htmlFor={`${field.name}-${option.value}`} className=\"text-text-positive\">\n {option.label}\n </FieldLabel>\n </Field>\n );\n })}\n </FieldGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { CalendarDaysIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { endOfToday, endOfTomorrow, endOfYesterday, format, lastDayOfMonth, startOfMonth, subDays } from '@customafk/react-toolkit/date-fns';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport type { TanStackFormDateFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { Calendar } from '@/components/ui/calendar';\n\ntype Props = Pick<\n z.input<typeof TanStackFormDateFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n minDate?: Date;\n maxDate?: Date;\n};\n\nexport const DateField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, minDate, maxDate, required }) => {\n const field = useTanStackFieldContext<Date | null>();\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} data-invalid={_isInvalid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain className=\"flex flex-col space-y-1\">\n <div className=\"flex w-full flex-col\">\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"lg\"\n className={cn(\n 'flex items-center justify-between rounded font-normal outline-border',\n 'hover:bg-transparent',\n 'focus:outline-1 focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak',\n 'data-[state=open]:text-text-positive-muted',\n 'data-[state=open]:outline-1',\n 'data-[state=open]:outline-primary-strong',\n 'data-[state=open]:ring-4',\n 'data-[state=open]:ring-primary-weak',\n field.state.value === null && 'text-text-positive-muted'\n )}\n >\n <p>{field.state.value === null ? placeholder || 'Select date' : format(field.state.value, 'PPPP')}</p>\n <CalendarDaysIcon strokeWidth={1} />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent align=\"start\" side=\"bottom\" className=\"flex w-fit min-w-0 overflow-y-auto rounded p-0\" onBlur={field.handleBlur}>\n <div className=\"flex h-full flex-col space-y-2 border-r border-r-border p-2 [&>button]:justify-start [&>button]:text-sm\">\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfToday());\n }}\n >\n Today\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfTomorrow());\n }}\n >\n Tomorrow\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(endOfYesterday());\n }}\n >\n Yesterday\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 3));\n }}\n >\n Last 3 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 7));\n }}\n >\n Last 7 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(subDays(endOfToday(), 30));\n }}\n >\n Last 30 Days\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(startOfMonth(endOfToday()));\n }}\n >\n This Month\n </Button>\n\n <Button\n variant=\"ghost\"\n color=\"muted\"\n className=\"w-32\"\n onClick={() => {\n field.handleChange(lastDayOfMonth(endOfToday()));\n }}\n >\n Last Month\n </Button>\n </div>\n <div className=\"flex flex-1 flex-col\">\n <div className=\"min-w-73 border-b border-b-border p-2\">\n <Calendar\n mode=\"single\"\n selected={field.state.value ?? undefined}\n hidden={{\n before: minDate ?? new Date(1900, 0, 1),\n after: maxDate ?? new Date(2100, 11, 31),\n }}\n onSelect={date => {\n if (!date) return;\n field.handleChange(date);\n }}\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { AtSignIcon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '@/components/features/tanstack-form/tanstack-form';\n\nimport type { TanStackFormEmailFieldSchema } from '../../schema';\n\ntype Props = Pick<\n z.input<typeof TanStackFormEmailFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n> & {\n maxLength?: number;\n};\nexport const EmailField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n helperText,\n orientation = 'responsive',\n showErrorMessage = true,\n maxLength,\n}) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _invalid = useMemo(() => {\n return state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isDirty, state.meta.isTouched, state.meta.isValid]);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange(null);\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoComplete=\"email\"\n placeholder={placeholder}\n className={cn('pl-9', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n <div className=\"absolute top-0 left-0 flex size-9 items-center justify-center text-muted\">\n <AtSignIcon size={14} />\n </div>\n\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-strong\"\n onClick={onClear}\n >\n <XIcon size={14} aria-hidden=\"true\" />\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">\n {showErrorMessage && state.meta.isDirty && <FieldError errors={state.meta.errors} />}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\n\nconst createValidationRegex = (allowNegative: boolean): RegExp => {\n return allowNegative ? /^-?\\d*\\.?\\d*$/ : /^\\d*\\.?\\d*$/;\n};\n\nconst formatNumberWithCommas = (num: number | string): string => {\n return Number(num).toLocaleString();\n};\n\nconst customRoundedValue = (value: number, precision: number, roundingRule: 'up' | 'down' | 'nearest' | 'none') => {\n if (roundingRule === 'none') return value;\n\n const factor = 10 ** precision;\n const scaledValue = value * factor;\n\n switch (roundingRule) {\n case 'up':\n return Math.ceil(scaledValue) / factor;\n case 'down':\n return Math.floor(scaledValue) / factor;\n case 'nearest': {\n if (scaledValue % 1 < 0.1) return Math.floor(scaledValue) / factor;\n if (scaledValue % 1 >= 0.59) return Math.ceil(scaledValue) / factor;\n return (Math.floor(scaledValue) + 0.5) / factor;\n }\n default: {\n return value;\n }\n }\n};\n\ntype TProps = React.HTMLAttributes<HTMLInputElement> & {\n /**\n * Description: Value for the text field\n *\n * Default: ''\n *\n * Usage: Value for the text field\n */\n value?: number | null | undefined;\n /**\n * Description: Disabled state of the text field\n *\n * Default: `false`\n *\n * Usage: Disabled state of the text field\n *\n * Note: If true, the text field will be disabled\n */\n disabled?: boolean;\n /**\n * Description: Readonly state of the text field\n *\n * Default: `false`\n *\n * Usage: Readonly state of the text field\n */\n readOnly?: boolean;\n /**\n * Description: Allow negative value for the text field\n *\n * Default: `false`\n *\n * Usage: Allow negative value for the text field\n */\n allowNegative?: boolean;\n /**\n * Description: Decimal point for the text field\n *\n * Default: `undefined`\n *\n * Usage: Ex: [12,3] => console.log(2323.23) // True\n *\n * Note: IF use this prop, `numberAfterDecimalPoint` will be ignored\n */\n decimal?: [number, number];\n /**\n * Description: Rounding rule for the text field\n *\n * Default: `nearest`\n *\n * Usage: Rounding rule for the text field\n * - 'up': Round up\n * - 'down': Round down\n * - 'nearest': Round to nearest\n * - 'none': No rounding\n *\n * E.g.\n * - Value: 2.135, precision: 2\n * - 'up' => 2.14\n * - 'down' => 2.13\n * - 'nearest' => 2.13\n * - 'none' => 2.135\n */\n roundingRule?: 'up' | 'down' | 'nearest' | 'none';\n /**\n * Description: Number of digits after the decimal point\n *\n * Default: `2`\n *\n * Usage: Number of digits after the decimal point\n */\n numberAfterDecimalPoint?: number;\n /**\n * Description: Placeholder for the text field\n *\n * Default: ''\n *\n * Usage: Placeholder for the text field\n */\n placeholder?: string;\n /**\n * Description: Unit text for the text field\n *\n * Default: ''\n *\n * E.g. 'kg', 'm', 'USD'...\n */\n unitText?: string;\n /**\n * Description: Invalid state of the text field\n *\n * Default: `false`\n *\n * Usage: Invalid state of the text field\n */\n invalid?: boolean;\n /**\n * Description: Precision for the text field\n *\n * Default: `undefined`\n * E.g.\n * - 2.13 => 2.1 when precision is 1\n * - 2.134 => 2.13 when precision is 2\n */\n precision?: number;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n wrapperClassName?: string;\n /**\n * Description: Callback function for the value change\n * Usage: Callback function for the value change\n */\n onValueChange?: (value: number | null) => void;\n /**\n * Description: Callback function for the blur event\n * Usage: Callback function for the blur event\n */\n onBlur?: () => void;\n};\n/**\n * ## Unit Text Field Component\n *\n * **Description**: This component is to display common text field with unit\n *\n * **Usage**: Text field with unit example: 1000 (kg), 100 (m), 1000 (USD)...\n */\nexport const NumberInput: React.FC<TProps> = ({\n disabled = false,\n readOnly = false,\n allowNegative = false,\n numberAfterDecimalPoint = 2,\n roundingRule = 'none',\n value = null,\n unitText,\n decimal,\n placeholder,\n precision,\n wrapperClassName,\n className,\n onChange,\n onValueChange,\n onFocus,\n onBlur,\n ...props\n}) => {\n const _unitRef = useRef<HTMLSpanElement>(null);\n const _inputRef = useRef<HTMLInputElement>(null);\n\n const [_value, _setValue] = useState<string | null>(value?.toString() ?? null);\n\n // Memoized values for validation and formatting\n const maxDecimalPlaces = useMemo(() => decimal?.[1] ?? numberAfterDecimalPoint, [decimal, numberAfterDecimalPoint]);\n const maxIntegerLength = useMemo(() => decimal && decimal[0] - decimal[1], [decimal]);\n const validationRegex = useMemo(() => createValidationRegex(allowNegative), [allowNegative]);\n\n // Validate decimal point is less than or equal to the limit\n const validateDecimalPoint = useCallback(\n (value: string) => {\n if (!maxDecimalPlaces || value === '-') return true;\n\n const [integerPart, decimalPart = ''] = value.split('.') as [string, string];\n const integerPartLength = integerPart.startsWith('-') ? integerPart.length - 1 : integerPart.length;\n const decimalPartLength = decimalPart.length;\n\n return decimalPartLength <= maxDecimalPlaces && integerPartLength <= (maxIntegerLength ?? Infinity);\n },\n [maxDecimalPlaces, maxIntegerLength]\n );\n const formattedValue = useCallback(\n (val: string) => {\n if (val === '0') return '0';\n if (!Number(val)) return null;\n\n const numValue = parseFloat(val);\n const effectivePrecision = Math.min(maxDecimalPlaces - 1, precision || 0);\n const roundedValue = customRoundedValue(numValue, effectivePrecision, roundingRule).toString();\n const [integerPart, decimalPart = ''] = roundedValue.split('.');\n const formattedInteger = formatNumberWithCommas(integerPart);\n return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;\n },\n [maxDecimalPlaces, precision, roundingRule]\n );\n\n const handleZeroCase = useCallback(\n (value: string) => {\n // Check for zero\n const isZero = value === '0';\n // Check for negative zero patterns. E.g., '-0', '-0.0', '-0.000', '-0.'\n const isNegativeZero = value === '-' || /^-0+(\\.0+)?$/.test(value) || /^-0*\\.$/.test(value);\n if (isZero) {\n onValueChange?.(0);\n _setValue(value);\n return;\n }\n if (isNegativeZero) {\n _setValue(() => {\n onValueChange?.(0);\n return value;\n });\n return;\n }\n },\n [onValueChange]\n );\n const handleChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n e => {\n // Don't prevent default behavior of input change\n onChange?.(e);\n\n // Custom event handler for value change\n const { value: inputValue } = e.target;\n\n // Handle empty input\n if (inputValue === '' || inputValue === undefined) {\n onValueChange?.(null);\n _setValue(null);\n return;\n }\n\n // Handle zero and negative zero\n handleZeroCase(inputValue);\n\n // Validate input format\n if (!validationRegex.test(inputValue) || !validateDecimalPoint(inputValue)) return;\n\n const numericValue = parseFloat(inputValue) || 0;\n onValueChange?.(numericValue);\n _setValue(inputValue);\n },\n [validateDecimalPoint, onChange, onValueChange, handleZeroCase, validationRegex]\n );\n\n const handleFocus = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onFocus?.(e);\n _setValue(prev => (typeof prev === 'string' ? prev.replace(/,/g, '') : null)); // Remove commas for easier editing\n },\n [readOnly, onFocus]\n );\n\n const handleBlur = useCallback<React.FocusEventHandler<HTMLInputElement>>(\n e => {\n if (readOnly) return;\n onBlur?.(e);\n _setValue(prev => {\n if (prev === null) return null;\n const isZero = prev === '0' || prev === '-' || /^-0+(\\.0+)?$/.test(prev) || /^-0*\\.$/.test(prev);\n if (isZero) return '0';\n return typeof prev === 'string' ? formattedValue(prev) : null;\n });\n },\n [readOnly, formattedValue, onBlur]\n );\n\n // Set initial value\n useEffect(() => {\n const isFocused = document.activeElement === _inputRef.current;\n\n if (value === undefined || value === null || !validationRegex.test(value.toString()) || !validateDecimalPoint(value.toString())) {\n _setValue(null);\n return;\n }\n\n _setValue(prev => (isFocused ? prev : formattedValue(value.toString())));\n }, [formattedValue, value, validateDecimalPoint, validationRegex]);\n\n // Set padding right for the input field\n useEffect(() => {\n if (!_unitRef.current || !_inputRef.current || !unitText) return;\n const unitWidth = _unitRef.current.offsetWidth;\n _inputRef.current.style.setProperty('padding-right', `${(unitWidth + 10) / 16}rem`);\n }, [unitText]);\n\n return (\n <div className={cn('relative', wrapperClassName)}>\n <Input\n {...props}\n ref={_inputRef}\n value={_value || (readOnly ? '0' : '')}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n className={cn('text-end font-number text-sm slashed-zero lining-nums tabular-nums', readOnly && 'bg-muted text-muted-foreground', className)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n {unitText && (\n <span ref={_unitRef} className=\"-translate-y-1/2 pointer-events-none absolute top-1/2 right-2 text-muted-foreground text-sm\">\n {unitText}\n </span>\n )}\n </div>\n );\n};\n","import { useCallback, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { NumberInput } from '@/components/ui/inputs/number-input';\n\nimport type { TanStackFormNumberFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype NumberFieldProps = Pick<\n z.input<typeof TanStackFormNumberFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'rounding' | 'decimalPlaces' | 'percision' | 'unit' | 'showErrorMessage'\n> & {\n required?: boolean;\n allowNegative?: boolean;\n};\n\nexport const NumberField: React.FC<NumberFieldProps> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n orientation = 'responsive',\n showErrorMessage = true,\n rounding,\n decimalPlaces,\n percision,\n unit,\n\n required,\n allowNegative,\n}) => {\n const field = useTanStackFieldContext<number | null>();\n\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const onValueChange = useCallback(\n (value: number | null) => {\n if (isSubmitting) return;\n field.handleChange(value);\n },\n [isSubmitting, field.handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n\n <FieldContentMain>\n <div className=\"relative w-full\">\n <NumberInput\n id={field.name}\n value={field.state.value}\n aria-invalid={field.state.meta.isTouched && !field.state.meta.isValid && field.state.meta.isDirty}\n placeholder={placeholder}\n roundingRule={rounding}\n numberAfterDecimalPoint={decimalPlaces}\n precision={percision}\n unitText={unit}\n allowNegative={allowNegative}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={field.handleBlur}\n onValueChange={onValueChange}\n />\n {isSubmitting && (\n <div className=\"absolute inset-s-2 inset-y-0 top-2.5 text-muted-weak [&>svg]:size-3.5\">\n <Loader2Icon className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {field.state.meta.isDirty && showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-s-2 inset-y-0 top-2.75 text-danger-strong [&>svg]:size-3.5\">\n <BanIcon />\n </div>\n )}\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n {field.state.meta.isDirty && showErrorMessage && <FieldError errors={_errors} />}\n </div>\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { Input } from '@/components/ui/input';\n\nimport type { TanStackFormPasswordFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormPasswordFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'tooltip' | 'helperText' | 'showErrorMessage'\n>;\nexport const PasswordField: React.FC<Props> = ({ label, description, placeholder, orientation = 'responsive', helperText, showErrorMessage = true }) => {\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n const _invalid = useMemo(() => {\n return state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n }, [state.meta.isDirty, state.meta.isTouched, state.meta.isValid]);\n\n const toggleVisibility = useCallback(() => setIsVisible(prevState => !prevState), []);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n handleChange(value || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={name}>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={name}\n type={isVisible ? 'text' : 'password'}\n placeholder={placeholder}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"new-password\"\n onBlur={handleBlur}\n onChange={onChange}\n />\n\n <button\n className=\"absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Hide password' : 'Show password'}\n aria-pressed={isVisible}\n aria-controls=\"password\"\n >\n {isVisible ? <EyeOffIcon size={16} aria-hidden=\"true\" /> : <EyeIcon size={16} aria-hidden=\"true\" />}\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">\n {showErrorMessage && state.meta.isDirty && <FieldError errors={state.meta.errors} />}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n </FieldGroup>\n );\n};\n","import { useStore } from '@tanstack/react-form';\n\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { TanStackFormRadioGroupFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldGroup, FieldLabel, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\ntype Props = Pick<z.input<typeof TanStackFormRadioGroupFieldSchema>, 'label' | 'description' | 'options' | 'orientation' | 'helperText'>;\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup defaultValue={field.state.value ?? undefined} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"justify-between rounded p-2!\">\n <FieldContent className=\"gap-1!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n <RadioGroupItem value={option.value} />\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useMemo } from 'react';\n\nimport { PackagePlusIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport type { TanStackFormSelectFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';\n\ntype Props = Pick<\n z.input<typeof TanStackFormSelectFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'defaultValue' | 'options' | 'tooltip' | 'helperText' | 'orientation' | 'clearable'\n> & {\n required?: boolean;\n};\n\nexport const SelectField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n orientation = 'responsive',\n\n options,\n helperText,\n required = false,\n}) => {\n const field = useTanStackFieldContext<string | null>();\n\n const _isInvalid = useMemo(() => {\n return field.state.meta.isTouched && !field.state.meta.isValid;\n }, [field.state.meta.isTouched, field.state.meta.isValid]);\n\n const _isEmpty = useMemo(() => {\n if (required) return field.state.value === null;\n return false;\n }, [required, field.state.value]);\n\n const _errors = useMemo(() => {\n return field.state.meta.errors;\n }, [field.state.meta.errors]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={field.state.meta.isTouched && !field.state.meta.isValid}>\n <FieldContent>\n <FieldLabel htmlFor={field.name} aria-required={_isEmpty}>\n {label}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain className=\"flex flex-col\">\n <Select defaultValue={field.state.value || undefined} onValueChange={field.handleChange}>\n <SelectTrigger aria-invalid={_isInvalid ? 'true' : undefined} onBlur={field.handleBlur}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {!!options.length &&\n options.map(option => {\n return (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n );\n })}\n {!options.length && (\n <div className=\"flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak\">\n <PackagePlusIcon strokeWidth={1} />\n No options available\n </div>\n )}\n </SelectContent>\n </Select>\n\n <div className=\"mt-1 flex w-full flex-col items-end justify-end\">\n <FieldError errors={_errors} />\n </div>\n\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Switch as SwitchPrimitive } from 'radix-ui';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer',\n 'w-8 shrink-0 cursor-pointer items-center rounded-full shadow-xs transition-all',\n 'inline-flex h-5',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-primary-weak',\n 'focus-visible:ring-4',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n\n '-outline-offset-1 inset-shadow-2xs outline-1',\n\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:outline-primary-strong',\n\n 'data-[state=unchecked]:bg-muted-weak',\n 'data-[state=unchecked]:outline-border',\n\n 'data-[state=unchecked]:[&_span]:size-4',\n 'data-[state=unchecked]:[&_span]:translate-x-0.5',\n 'data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'block size-4 bg-card shadow-xs',\n 'pointer-events-none rounded-full ring-0 transition-transform',\n 'data-[state=checked]:translate-x-[calc(100%-3px)]',\n 'data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type z from 'zod';\n\nimport type { TanStackFormSwitchFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldDescription, FieldGroup, FieldNote, FieldSeparator, FieldTitle } from '../ui/field';\nimport { Switch } from '../ui/switch';\n\ntype Props = Pick<z.input<typeof TanStackFormSwitchFieldSchema>, 'label' | 'description' | 'helperText'>;\n\nexport const SwitchField: React.FC<Props> = ({ label, description, helperText }) => {\n const field = useTanStackFieldContext<boolean | null>();\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation=\"vertical\" className=\"relative justify-between gap-y-1\">\n <FieldContent>\n <FieldTitle className=\"cursor-pointer\">\n <label htmlFor={field.name}>{label}</label>\n </FieldTitle>\n <FieldDescription>{description}</FieldDescription>\n <Switch\n id={field.name}\n checked={field.state.value ?? false}\n className=\"absolute top-1 right-1\"\n onBlur={field.handleBlur}\n onCheckedChange={field.handleChange}\n />\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { useCallback, useId, useMemo, useRef } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon, XIcon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '@/components/features/tanstack-form/tanstack-form';\n\nimport type { TanStackFormTextFieldSchema } from '../../schema';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'orientation' | 'counter' | 'tooltip' | 'helperText' | 'showClearButton' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showClearButton = false,\n showErrorMessage = true,\n\n required = false,\n maxLength,\n}) => {\n // console.log('TextField is in early development stage, expect breaking changes in the future');\n const id = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _showClearButton = showClearButton && !isSubmitting && !!state.value && !state.meta.errors.length;\n\n const _count = state.value ? state.value.length : 0;\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} character${!_count ? '' : 's'}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n\n const _isEmpty = required ? state.value === null : false;\n\n // Tính toán % để đổi màu Counter\n const _isNearLimit = maxLength && _count >= maxLength * 0.8;\n const _isAtLimit = maxLength && _count >= maxLength;\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n if (isSubmitting) return;\n handleChange(null);\n inputRef.current?.focus();\n }, [isSubmitting, handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={id}>\n <p>\n {label}\n {required && <span className=\"text-danger-strong\"> *</span>}\n </p>\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n ref={inputRef}\n id={id}\n name={name}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"off\"\n placeholder={placeholder}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n className={cn('pr-6', isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n />\n {_showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className=\"absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-intense [&>svg]:size-3.5\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {state.meta.isDirty && showErrorMessage && !!state.meta.errors.length && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon aria-hidden=\"true\" size={14} />\n </div>\n )}\n <div className=\"my-1 flex w-full items-start justify-between gap-x-2\">\n {state.meta.isDirty && showErrorMessage ? <FieldError className=\"flex-1\" errors={state.meta.errors} /> : <div />}\n {!!counter && (\n <p\n className={cn(\n 'h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors',\n _isAtLimit ? 'font-medium text-danger-strong' : _isNearLimit ? 'text-warning-strong' : 'text-text-positive-weak'\n )}\n >\n {_countText}\n </p>\n )}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { memo, useCallback, useId, useMemo } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon } from 'lucide-react';\nimport type z from 'zod';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Textarea } from '@/components/ui/textarea';\n\nimport type { TanStackFormTextAreaFieldSchema } from '../../schema';\nimport { useTanStackFieldContext } from '../../tanstack-form';\nimport { Field, FieldContent, FieldContentMain, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator } from '../ui/field';\n\ntype Props = Pick<\n z.input<typeof TanStackFormTextAreaFieldSchema>,\n 'label' | 'description' | 'placeholder' | 'counter' | 'tooltip' | 'helperText' | 'orientation' | 'showErrorMessage'\n> & {\n required?: boolean;\n maxLength?: number;\n};\n\nexport const TextareaField: React.FC<Props> = memo(\n ({\n label,\n description,\n placeholder,\n\n // tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showErrorMessage = true,\n\n required = false,\n maxLength,\n }) => {\n const id = useId();\n const { form, state, name, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _count = state.value ? state.value.length : 0;\n\n const _countText = useMemo(() => {\n if (!counter) return '';\n const unit = `character${[0, 1].includes(_count) ? '' : 's'}`;\n if (counter && maxLength) return `${_count} / ${maxLength} character${!_count ? '' : 's'}`;\n return `${_count} ${unit}`;\n }, [_count, counter, maxLength]);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n\n const _isEmpty = required ? state.value === null : false;\n\n const _errors = state.meta.errors;\n\n const _isNearLimit = maxLength && _count >= maxLength * 0.8;\n\n const _isAtLimit = maxLength && _count >= maxLength;\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [isSubmitting, counter, maxLength, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={id}>\n <p>\n {label}\n {required && <span className=\"text-danger-strong\"> *</span>}\n </p>\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Textarea\n id={id}\n name={name}\n value={state.value === null ? '' : state.value}\n aria-invalid={_invalid}\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n placeholder={placeholder}\n className={cn(isSubmitting && 'pointer-events-none bg-muted-muted opacity-60')}\n onChange={onChange}\n onBlur={handleBlur}\n />\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={14} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {state.meta.isDirty && showErrorMessage && !!_errors.length && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon size={14} />\n </div>\n )}\n <div className=\"my-1 flex w-full items-start justify-between gap-x-2\">\n {state.meta.isDirty && showErrorMessage ? <FieldError className=\"flex-1\" errors={state.meta.errors} /> : <div />}\n {!!counter && (\n <p\n className={cn(\n 'h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors',\n _isAtLimit ? 'font-medium text-danger-strong' : _isNearLimit ? 'text-warning-strong' : 'text-text-positive-weak'\n )}\n >\n {_countText}\n </p>\n )}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n }\n);\n","import { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionSubmit: React.FC<{\n label?: string;\n className?: string;\n}> = ({ label, className }) => {\n const form = useTanStackFormContext();\n\n const onSubmit = useCallback(async () => {\n await form.handleSubmit({ submitAction: 'submit' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }, [form]);\n return (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button type=\"button\" size=\"md\" disabled={disabled} isLoading={isSubmitting} className={cn('min-h-8 min-w-32', className)} onClick={onSubmit}>\n {label ?? 'Submit'}\n </Button>\n );\n }}\n />\n );\n};\n","import { ArrowDownToLine, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\n\nexport const TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n type?: 'create' | 'update';\n }>\n> = ({ type = 'create' }) => {\n const form = useTanStackFormContext();\n return (\n <div className=\"flex h-8 items-center justify-between\">\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || state.isSubmitting,\n })}\n children={({ disabled }) => {\n return (\n <Button color=\"muted\" variant=\"outline\" type=\"button\" size=\"md\" disabled={disabled} className=\"h-full min-w-32\" onClick={() => form.reset()}>\n Cancel\n </Button>\n );\n }}\n />\n {type === 'create' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'create' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <PlusIcon />\n Add New\n </Button>\n );\n }}\n />\n )}\n {type === 'update' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'update' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <ArrowDownToLine />\n Update\n </Button>\n );\n }}\n />\n )}\n </div>\n );\n};\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\n\nfunction Separator({ className, orientation = 'horizontal', decorative = true, ...props }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border-weak',\n 'data-[orientation=horizontal]:h-px',\n 'data-[orientation=horizontal]:w-full',\n 'data-[orientation=vertical]:h-full',\n 'data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { Separator } from '../ui/separator';\n\nexport const TanStackCardForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n description?: string;\n onDelete?: () => void | Promise<void>;\n }>\n> = ({ title, description, onDelete, children }) => {\n return (\n <section data-slot=\"card-form\" className=\"relative flex flex-col rounded-md bg-card pb-4 shadow-card ring-4 ring-border-weak\">\n <div data-slot=\"card-form-header\" className=\"flex flex-col space-y-1 p-4\">\n <p className=\"font-semibold text-lg\">{title}</p>\n {!!description && <p className=\"text-muted text-sm\">{description}</p>}\n </div>\n <Separator />\n <div data-slot=\"card-form-main\" className=\"flex flex-col space-y-4 py-4\">\n {children}\n </div>\n {!!onDelete && (\n <Button\n color=\"danger\"\n variant=\"outline\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={e => {\n onDelete?.();\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Trash2Icon />\n Remove\n </Button>\n )}\n </section>\n );\n};\n","export const TanStackContainerForm: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <div data-slot=\"section-form\" className=\"flex flex-col space-y-4\">\n {children}\n </div>\n );\n};\n","export const CancelButton: React.FC<React.ComponentProps<'button'>> = ({ ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n className=\"min-w-40 cursor-pointer rounded-sm border border-border bg-card px-4 py-2 font-semibold text-sm text-text-positive shadow-xs outline-none transition-all hover:opacity-90 focus:border-border focus:ring-3 focus:ring-border/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none\"\n >\n Hủy\n </button>\n );\n};\n","import { Loader2 } from 'lucide-react';\n\nexport const SubmitButton: React.FC<\n React.ComponentProps<'button'> & {\n isSubmitting?: boolean;\n submitText?: string;\n }\n> = ({ isSubmitting, submitText = 'Submit', ...props }) => {\n return (\n <button\n {...props}\n type=\"button\"\n data-loading={isSubmitting ? 'true' : undefined}\n className=\"relative min-h-9.5 min-w-40 cursor-pointer rounded-sm border border-primary-strong bg-primary px-4 py-2 font-semibold text-sm text-text-negative shadow-card outline-none transition-all hover:opacity-90 focus:border-transparent focus:ring-3 focus:ring-primary/80 focus:ring-offset-2 focus:drop-shadow-none disabled:pointer-events-none disabled:opacity-60 disabled:drop-shadow-none data-[loading=true]:pointer-events-none data-[loading=true]:opacity-80\"\n >\n {isSubmitting ? (\n <Loader2 size={16} strokeWidth={3} className=\"absolute top-1/2 left-1/2 z-10 -translate-x-1/2 -translate-y-1/2 animate-spin\" />\n ) : (\n submitText\n )}\n </button>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Separator } from '@/components/ui/separator';\n\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\nimport { Dialog, DialogContent, DialogOverlay, DialogPortal, DialogTitle } from '@/components/ui/dialog';\n\nexport const TanStackDialogForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n submitText?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, submitText, open, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!open) form.reset();\n onOpenChange?.(open);\n },\n [form.reset, onOpenChange]\n );\n return (\n <Dialog open={open} onOpenChange={handleOpenChange}>\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogContent className=\"flex size-full max-h-dvh max-w-dvw flex-col gap-0 overflow-y-auto p-0 shadow-dialog sm:h-auto sm:max-h-[85dvh] sm:max-w-2xl sm:rounded-sm\">\n <div data-slot=\"dialog-header\" className=\"flex flex-col items-center justify-center gap-2 px-4 py-6 text-center shadow-sm sm:text-left\">\n <DialogTitle data-slot=\"dialog-title\">{title}</DialogTitle>\n </div>\n <Separator />\n <div data-slot=\"dialog-content\" className=\"relative flex flex-col space-y-4 overflow-y-auto p-0 pt-6 max-sm:flex-1 sm:p-4\">\n {children}\n </div>\n <Separator />\n <div\n data-slot=\"dialog-footer\"\n className=\"flex flex-col-reverse items-center justify-between gap-2 px-6 py-4 shadow-sm sm:flex-row sm:justify-end max-sm:[&>button]:w-full\"\n >\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n onClick={() => {\n form.reset();\n handleOpenChange(false);\n }}\n />\n );\n }}\n />\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} submitText={submitText} onClick={() => form.handleSubmit()} />;\n }}\n />\n </div>\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n};\n","import {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n} from '@/components/features/tanstack-form/components/ui/field';\n\nexport const TanStackFieldGroup: React.FC<\n React.PropsWithChildren<{\n label: string;\n description?: string;\n helperText?: string;\n\n orientation?: 'horizontal' | 'vertical' | 'responsive';\n }>\n> = ({\n label,\n description,\n helperText,\n\n orientation = 'responsive',\n children,\n}) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation}>\n <FieldContent>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n {children}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { cn } from '@customafk/react-toolkit/utils';\n\nimport { CloseButton } from '@/components/ui/buttons/close';\n\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport { useTanStackFormContext } from '../../tanstack-form';\nimport { CancelButton } from '../ui/cancel-button';\nimport { SubmitButton } from '../ui/submit-button';\n\nexport const TanStackPopoverForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n open?: boolean;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n }>\n> = ({ title, open, contentClassName, onOpenChange, children }) => {\n const form = useTanStackFormContext();\n return (\n <DialogPrimitive.Root data-slot=\"dialog\" open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal data-slot=\"dialog-portal\">\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-40 bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in',\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out'\n )}\n />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'fixed top-4 right-4 z-50 h-[calc(100dvh-2rem)] min-w-sm max-w-xl rounded-md bg-background drop-shadow-lg',\n 'duration-300',\n\n 'data-[state=open]:animate-in',\n 'data-[state=open]:slide-in-from-right',\n 'data-[state=open]:fade-in',\n\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:slide-out-to-right',\n 'data-[state=closed]:fade-out'\n )}\n >\n <section className=\"relative flex size-full flex-col\">\n <header className=\"flex h-14 items-center border-border border-b px-4\">\n <h2 className=\"font-semibold text-lg text-primary-strong\">{title}</h2>\n </header>\n\n <div className={cn('flex flex-1 flex-col overflow-y-auto py-4', contentClassName)}>{children}</div>\n\n <div className=\"flex flex-col space-y-4 border-border border-t px-4 py-2\">\n <form.Subscribe\n selector={state => ({\n isSubmitting: state.isSubmitting,\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit,\n })}\n children={({ isSubmitting, disabled }) => {\n return <SubmitButton isSubmitting={isSubmitting} disabled={disabled} className=\"w-full\" onClick={() => form.handleSubmit()} />;\n }}\n />\n <form.Subscribe\n selector={state => {\n return {\n disabled: state.isPristine || state.isSubmitting,\n };\n }}\n children={({ disabled }) => {\n return (\n <CancelButton\n disabled={disabled}\n className=\"w-full\"\n onClick={() => {\n form.reset();\n onOpenChange?.(false);\n }}\n />\n );\n }}\n />\n </div>\n\n <DialogPrimitive.Close asChild>\n <CloseButton className=\"absolute top-2 right-2\" />\n </DialogPrimitive.Close>\n </section>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n};\n","import { Separator } from '../ui/separator';\n\nconst SectionHeader: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <header data-slot=\"section-header\" className=\"px-4 pt-2.5 pb-2 font-medium text-base text-text-positive\">\n {children}\n </header>\n );\n};\n\nconst SectionMain: React.FC<React.PropsWithChildren> = ({ children }) => {\n return (\n <main data-slot=\"section-main\" className=\"relative flex flex-col space-y-4 py-4\">\n {children}\n </main>\n );\n};\n\nexport const TanStackSectionForm: React.FC<\n React.PropsWithChildren<{\n title: string;\n }>\n> = ({ title, children }) => {\n return (\n <section data-slot=\"section-form\" className=\"flex flex-col rounded-md bg-background shadow-card ring-4 ring-border-weak\">\n <SectionHeader>{title}</SectionHeader>\n <Separator />\n <SectionMain>{children}</SectionMain>\n </section>\n );\n};\n","import { Field, FieldContent, FieldDescription, FieldGroup, FieldLegend, FieldNote, FieldSeparator } from '../ui/field';\n\nexport const TanStackTitleField: React.FC<{\n title: string;\n description?: string;\n helperText?: string;\n}> = ({ title, description, helperText }) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field className=\"gap-0\">\n <FieldContent>\n <FieldLegend className=\"mb-1\">{title}</FieldLegend>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n","import { createFormHook, createFormHookContexts } from '@tanstack/react-form';\n\nimport { CheckboxField } from './components/fields/checkbox-field';\nimport { DateField } from './components/fields/date-field';\nimport { EmailField } from './components/fields/email-field';\nimport { NumberField } from './components/fields/number-field';\nimport { PasswordField } from './components/fields/password-field';\nimport { RadioGroupField } from './components/fields/radio-group-field';\nimport { SelectField } from './components/fields/select-field';\nimport { SwitchField } from './components/fields/switch-field';\nimport { TextField } from './components/fields/text-field';\nimport { TextareaField } from './components/fields/textarea-field';\nimport { TanStackActionSubmit } from './components/forms/action-submit';\nimport { TanStackActionsForm } from './components/forms/actions-form';\nimport { TanStackCardForm } from './components/forms/card-form';\nimport { TanStackContainerForm } from './components/forms/container-form';\nimport { TanStackDialogForm } from './components/forms/dialog-form';\nimport { TanStackFieldGroup } from './components/forms/group-field';\nimport { TanStackPopoverForm } from './components/forms/popover-form';\nimport { TanStackSectionForm } from './components/forms/section-form';\nimport { TanStackTitleField } from './components/forms/title-field';\nimport { Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldSeparator } from './components/ui/field';\n\nconst { fieldContext, formContext, useFieldContext: useTanStackFieldContext, useFormContext: useTanStackFormContext } = createFormHookContexts();\n\nconst {\n useAppForm: useTanStackForm,\n withForm: withTanStackForm,\n withFieldGroup: withTanStackFieldGroup,\n} = createFormHook({\n fieldContext,\n formContext,\n\n fieldComponents: {\n TextField,\n TextareaField,\n NumberField,\n EmailField,\n PasswordField,\n\n SelectField,\n DateField,\n SwitchField,\n RadioGroupField,\n CheckboxField,\n\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n },\n formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackFieldGroup,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n },\n});\n\nexport {\n useTanStackForm,\n withTanStackForm,\n withTanStackFieldGroup,\n useTanStackFieldContext,\n useTanStackFormContext,\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n};\n"],"mappings":"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"}