@tipp/ui 2.3.20 → 2.3.22

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 (340) hide show
  1. package/dist/app/index.cjs +5 -2
  2. package/dist/app/index.cjs.map +1 -1
  3. package/dist/app/index.js +45 -45
  4. package/dist/app/platform/coach-question-list.cjs +5 -2
  5. package/dist/app/platform/coach-question-list.cjs.map +1 -1
  6. package/dist/app/platform/coach-question-list.js +3 -3
  7. package/dist/app/platform/contents-card.cjs +5 -2
  8. package/dist/app/platform/contents-card.cjs.map +1 -1
  9. package/dist/app/platform/contents-card.js +4 -4
  10. package/dist/app/platform/curriculum-card.cjs.map +1 -1
  11. package/dist/app/platform/curriculum-card.js +2 -2
  12. package/dist/app/platform/edit-coaching-time.cjs +5 -2
  13. package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
  14. package/dist/app/platform/edit-coaching-time.js +32 -32
  15. package/dist/app/platform/edit-service-type.cjs +5 -2
  16. package/dist/app/platform/edit-service-type.cjs.map +1 -1
  17. package/dist/app/platform/edit-service-type.js +31 -31
  18. package/dist/app/platform/goal-manage-card-edit.cjs +5 -2
  19. package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
  20. package/dist/app/platform/goal-manage-card-edit.js +32 -32
  21. package/dist/app/platform/goal-manage-card-read.cjs +5 -2
  22. package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
  23. package/dist/app/platform/goal-manage-card-read.js +4 -4
  24. package/dist/app/platform/on-offline-radio-card.cjs +5 -2
  25. package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
  26. package/dist/app/platform/on-offline-radio-card.js +31 -31
  27. package/dist/app/platform/report-card.cjs +5 -2
  28. package/dist/app/platform/report-card.cjs.map +1 -1
  29. package/dist/app/platform/report-card.js +4 -4
  30. package/dist/app/platform/reservation-card.cjs +5 -2
  31. package/dist/app/platform/reservation-card.cjs.map +1 -1
  32. package/dist/app/platform/reservation-card.js +32 -32
  33. package/dist/app/platform/session-card.cjs +5 -2
  34. package/dist/app/platform/session-card.cjs.map +1 -1
  35. package/dist/app/platform/session-card.js +33 -33
  36. package/dist/app/platform/session-review-simple-read.cjs +5 -2
  37. package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
  38. package/dist/app/platform/session-review-simple-read.js +3 -3
  39. package/dist/app/platform/userInfos/coaching-customer-info/index.cjs +5 -2
  40. package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
  41. package/dist/app/platform/userInfos/coaching-customer-info/index.js +7 -7
  42. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs +5 -2
  43. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
  44. package/dist/app/platform/userInfos/coaching-customer-info/large.js +3 -3
  45. package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs +5 -2
  46. package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
  47. package/dist/app/platform/userInfos/coaching-customer-info/medium.js +3 -3
  48. package/dist/app/platform/userInfos/coaching-customer-info/small.cjs +5 -2
  49. package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
  50. package/dist/app/platform/userInfos/coaching-customer-info/small.js +3 -3
  51. package/dist/app/platform/userInfos/session-user-info-detail.cjs +5 -2
  52. package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
  53. package/dist/app/platform/userInfos/session-user-info-detail.js +3 -3
  54. package/dist/app/platform/userInfos/utils.cjs +5 -2
  55. package/dist/app/platform/userInfos/utils.cjs.map +1 -1
  56. package/dist/app/platform/userInfos/utils.js +3 -3
  57. package/dist/atoms/index.cjs +5 -2
  58. package/dist/atoms/index.cjs.map +1 -1
  59. package/dist/atoms/index.js +3 -3
  60. package/dist/atoms/pagination.cjs.map +1 -1
  61. package/dist/atoms/pagination.js +2 -2
  62. package/dist/chunk-3C6HB5HA.js +144 -0
  63. package/dist/chunk-3C6HB5HA.js.map +1 -0
  64. package/dist/chunk-3CJZYFG3.js +174 -0
  65. package/dist/chunk-3CJZYFG3.js.map +1 -0
  66. package/dist/chunk-45VET5EX.js +63 -0
  67. package/dist/chunk-45VET5EX.js.map +1 -0
  68. package/dist/chunk-4MA4T2XQ.js +222 -0
  69. package/dist/chunk-4MA4T2XQ.js.map +1 -0
  70. package/dist/chunk-4U6DFH7Z.js +50 -0
  71. package/dist/chunk-4U6DFH7Z.js.map +1 -0
  72. package/dist/chunk-5IIGHOLB.js +196 -0
  73. package/dist/chunk-5IIGHOLB.js.map +1 -0
  74. package/dist/chunk-62AHHT47.js +89 -0
  75. package/dist/chunk-62AHHT47.js.map +1 -0
  76. package/dist/chunk-6Q73GRZT.js +145 -0
  77. package/dist/chunk-6Q73GRZT.js.map +1 -0
  78. package/dist/chunk-6WGBQSQT.js +228 -0
  79. package/dist/chunk-6WGBQSQT.js.map +1 -0
  80. package/dist/chunk-7TOQOZH7.js +245 -0
  81. package/dist/chunk-7TOQOZH7.js.map +1 -0
  82. package/dist/chunk-7ZH2GXUS.js +174 -0
  83. package/dist/chunk-7ZH2GXUS.js.map +1 -0
  84. package/dist/chunk-AC6MUU6D.js +146 -0
  85. package/dist/chunk-AC6MUU6D.js.map +1 -0
  86. package/dist/chunk-AGTBJUYD.js +50 -0
  87. package/dist/chunk-AGTBJUYD.js.map +1 -0
  88. package/dist/chunk-B4NH4LIJ.js +99 -0
  89. package/dist/chunk-B4NH4LIJ.js.map +1 -0
  90. package/dist/chunk-BSRPUECS.js +144 -0
  91. package/dist/chunk-BSRPUECS.js.map +1 -0
  92. package/dist/chunk-C24L6Z2K.js +69 -0
  93. package/dist/chunk-C24L6Z2K.js.map +1 -0
  94. package/dist/chunk-CAYZTABQ.js +144 -0
  95. package/dist/chunk-CAYZTABQ.js.map +1 -0
  96. package/dist/chunk-CCLZRSGW.js +87 -0
  97. package/dist/chunk-CCLZRSGW.js.map +1 -0
  98. package/dist/chunk-CKQYG7TZ.js +245 -0
  99. package/dist/chunk-CKQYG7TZ.js.map +1 -0
  100. package/dist/chunk-CLLBSWGX.js +145 -0
  101. package/dist/chunk-CLLBSWGX.js.map +1 -0
  102. package/dist/chunk-CNJT7KEY.js +218 -0
  103. package/dist/chunk-CNJT7KEY.js.map +1 -0
  104. package/dist/chunk-DNIPGDRU.js +145 -0
  105. package/dist/chunk-DNIPGDRU.js.map +1 -0
  106. package/dist/chunk-DPPRU4D3.js +174 -0
  107. package/dist/chunk-DPPRU4D3.js.map +1 -0
  108. package/dist/chunk-DZ6LWD2X.js +174 -0
  109. package/dist/chunk-DZ6LWD2X.js.map +1 -0
  110. package/dist/chunk-DZCLAKSB.js +218 -0
  111. package/dist/chunk-DZCLAKSB.js.map +1 -0
  112. package/dist/chunk-EDJIZYNL.js +89 -0
  113. package/dist/chunk-EDJIZYNL.js.map +1 -0
  114. package/dist/chunk-EE4HLQGV.js +145 -0
  115. package/dist/chunk-EE4HLQGV.js.map +1 -0
  116. package/dist/chunk-ENFFYCHI.js +63 -0
  117. package/dist/chunk-ENFFYCHI.js.map +1 -0
  118. package/dist/chunk-EUUNWKHL.js +69 -0
  119. package/dist/chunk-EUUNWKHL.js.map +1 -0
  120. package/dist/chunk-FC4J5OA4.js +144 -0
  121. package/dist/chunk-FC4J5OA4.js.map +1 -0
  122. package/dist/chunk-GJ4GPOIC.js +144 -0
  123. package/dist/chunk-GJ4GPOIC.js.map +1 -0
  124. package/dist/chunk-GLZ66EYJ.js +146 -0
  125. package/dist/chunk-GLZ66EYJ.js.map +1 -0
  126. package/dist/chunk-GQFO7RV5.js +145 -0
  127. package/dist/chunk-GQFO7RV5.js.map +1 -0
  128. package/dist/chunk-H7IE4ZJG.js +174 -0
  129. package/dist/chunk-H7IE4ZJG.js.map +1 -0
  130. package/dist/chunk-HQAX6GAD.js +89 -0
  131. package/dist/chunk-HQAX6GAD.js.map +1 -0
  132. package/dist/chunk-I7E2IWC4.js +149 -0
  133. package/dist/chunk-I7E2IWC4.js.map +1 -0
  134. package/dist/chunk-IDY6K633.js +145 -0
  135. package/dist/chunk-IDY6K633.js.map +1 -0
  136. package/dist/chunk-IKJLNJ64.js +145 -0
  137. package/dist/chunk-IKJLNJ64.js.map +1 -0
  138. package/dist/chunk-IW7G7LMH.js +245 -0
  139. package/dist/chunk-IW7G7LMH.js.map +1 -0
  140. package/dist/chunk-JFM62CXW.js +50 -0
  141. package/dist/chunk-JFM62CXW.js.map +1 -0
  142. package/dist/chunk-JHKIEQKC.js +69 -0
  143. package/dist/chunk-JHKIEQKC.js.map +1 -0
  144. package/dist/chunk-JJSZK6KF.js +169 -0
  145. package/dist/chunk-JJSZK6KF.js.map +1 -0
  146. package/dist/chunk-JKWO3SGU.js +79 -0
  147. package/dist/chunk-JKWO3SGU.js.map +1 -0
  148. package/dist/chunk-JWDXPHJ3.js +117 -0
  149. package/dist/chunk-JWDXPHJ3.js.map +1 -0
  150. package/dist/chunk-KC6AEXYR.js +174 -0
  151. package/dist/chunk-KC6AEXYR.js.map +1 -0
  152. package/dist/chunk-KHQ3C5HB.js +125 -0
  153. package/dist/chunk-KHQ3C5HB.js.map +1 -0
  154. package/dist/chunk-KOMV6H3L.js +144 -0
  155. package/dist/chunk-KOMV6H3L.js.map +1 -0
  156. package/dist/chunk-KUKHQCFS.js +233 -0
  157. package/dist/chunk-KUKHQCFS.js.map +1 -0
  158. package/dist/chunk-KVO5ZNRN.js +50 -0
  159. package/dist/chunk-KVO5ZNRN.js.map +1 -0
  160. package/dist/chunk-KZVNK5NO.js +145 -0
  161. package/dist/chunk-KZVNK5NO.js.map +1 -0
  162. package/dist/chunk-L7ATTNZ2.js +174 -0
  163. package/dist/chunk-L7ATTNZ2.js.map +1 -0
  164. package/dist/chunk-LGDFJ7W6.js +174 -0
  165. package/dist/chunk-LGDFJ7W6.js.map +1 -0
  166. package/dist/chunk-LIHMBEQT.js +144 -0
  167. package/dist/chunk-LIHMBEQT.js.map +1 -0
  168. package/dist/chunk-LTEJYJUM.js +143 -0
  169. package/dist/chunk-LTEJYJUM.js.map +1 -0
  170. package/dist/chunk-LTJELIXX.js +149 -0
  171. package/dist/chunk-LTJELIXX.js.map +1 -0
  172. package/dist/chunk-LWVP3RG6.js +212 -0
  173. package/dist/chunk-LWVP3RG6.js.map +1 -0
  174. package/dist/chunk-M5RM57U5.js +69 -0
  175. package/dist/chunk-M5RM57U5.js.map +1 -0
  176. package/dist/chunk-MG3MDWHJ.js +245 -0
  177. package/dist/chunk-MG3MDWHJ.js.map +1 -0
  178. package/dist/chunk-MQXF7JLT.js +145 -0
  179. package/dist/chunk-MQXF7JLT.js.map +1 -0
  180. package/dist/chunk-N5B7ANSJ.js +145 -0
  181. package/dist/chunk-N5B7ANSJ.js.map +1 -0
  182. package/dist/chunk-OL4XCMRU.js +363 -0
  183. package/dist/chunk-OL4XCMRU.js.map +1 -0
  184. package/dist/chunk-OSEENHZJ.js +50 -0
  185. package/dist/chunk-OSEENHZJ.js.map +1 -0
  186. package/dist/chunk-P4HTQBD6.js +245 -0
  187. package/dist/chunk-P4HTQBD6.js.map +1 -0
  188. package/dist/chunk-P74G3XSY.js +50 -0
  189. package/dist/chunk-P74G3XSY.js.map +1 -0
  190. package/dist/chunk-PTYFKWCC.js +145 -0
  191. package/dist/chunk-PTYFKWCC.js.map +1 -0
  192. package/dist/chunk-PYQQZYJL.js +145 -0
  193. package/dist/chunk-PYQQZYJL.js.map +1 -0
  194. package/dist/chunk-Q267B6E6.js +146 -0
  195. package/dist/chunk-Q267B6E6.js.map +1 -0
  196. package/dist/chunk-QDC3LFHS.js +149 -0
  197. package/dist/chunk-QDC3LFHS.js.map +1 -0
  198. package/dist/chunk-QEGDJ4ZD.js +165 -0
  199. package/dist/chunk-QEGDJ4ZD.js.map +1 -0
  200. package/dist/chunk-QVHA4ANB.js +196 -0
  201. package/dist/chunk-QVHA4ANB.js.map +1 -0
  202. package/dist/chunk-RCTE4E7R.js +144 -0
  203. package/dist/chunk-RCTE4E7R.js.map +1 -0
  204. package/dist/chunk-RFJ5NMY4.js +54 -0
  205. package/dist/chunk-RFJ5NMY4.js.map +1 -0
  206. package/dist/chunk-RY7DDHZO.js +51 -0
  207. package/dist/chunk-RY7DDHZO.js.map +1 -0
  208. package/dist/chunk-S5M6VXKE.js +144 -0
  209. package/dist/chunk-S5M6VXKE.js.map +1 -0
  210. package/dist/chunk-SB2VNB4J.js +145 -0
  211. package/dist/chunk-SB2VNB4J.js.map +1 -0
  212. package/dist/chunk-SFBPPATA.js +37 -0
  213. package/dist/chunk-SFBPPATA.js.map +1 -0
  214. package/dist/chunk-SJ7MGKPR.js +245 -0
  215. package/dist/chunk-SJ7MGKPR.js.map +1 -0
  216. package/dist/chunk-SM22LXE7.js +145 -0
  217. package/dist/chunk-SM22LXE7.js.map +1 -0
  218. package/dist/chunk-SP4QJ7QT.js +69 -0
  219. package/dist/chunk-SP4QJ7QT.js.map +1 -0
  220. package/dist/chunk-UZ7AGDRK.js +98 -0
  221. package/dist/chunk-UZ7AGDRK.js.map +1 -0
  222. package/dist/chunk-V7IC4EAC.js +51 -0
  223. package/dist/chunk-V7IC4EAC.js.map +1 -0
  224. package/dist/chunk-VGHBEX6O.js +145 -0
  225. package/dist/chunk-VGHBEX6O.js.map +1 -0
  226. package/dist/chunk-VJ7AGB7Y.js +245 -0
  227. package/dist/chunk-VJ7AGB7Y.js.map +1 -0
  228. package/dist/chunk-VNJ3VOSY.js +50 -0
  229. package/dist/chunk-VNJ3VOSY.js.map +1 -0
  230. package/dist/chunk-W7NQ5NW6.js +100 -0
  231. package/dist/chunk-W7NQ5NW6.js.map +1 -0
  232. package/dist/chunk-WZLD5ZHV.js +245 -0
  233. package/dist/chunk-WZLD5ZHV.js.map +1 -0
  234. package/dist/chunk-X47BEKKF.js +68 -0
  235. package/dist/chunk-X47BEKKF.js.map +1 -0
  236. package/dist/chunk-XYDK5OWF.js +75 -0
  237. package/dist/chunk-XYDK5OWF.js.map +1 -0
  238. package/dist/chunk-Z4NCEYC6.js +70 -0
  239. package/dist/chunk-Z4NCEYC6.js.map +1 -0
  240. package/dist/chunk-Z4NLUDDL.js +145 -0
  241. package/dist/chunk-Z4NLUDDL.js.map +1 -0
  242. package/dist/chunk-ZI3TYUTO.js +196 -0
  243. package/dist/chunk-ZI3TYUTO.js.map +1 -0
  244. package/dist/chunk-ZOMXQCLY.js +245 -0
  245. package/dist/chunk-ZOMXQCLY.js.map +1 -0
  246. package/dist/chunk-ZVWUCJMB.js +146 -0
  247. package/dist/chunk-ZVWUCJMB.js.map +1 -0
  248. package/dist/context/dynamic-form-context.cjs +5 -2
  249. package/dist/context/dynamic-form-context.cjs.map +1 -1
  250. package/dist/context/dynamic-form-context.js +2 -2
  251. package/dist/context/index.cjs +5 -2
  252. package/dist/context/index.cjs.map +1 -1
  253. package/dist/context/index.js +2 -2
  254. package/dist/icon.cjs +2 -0
  255. package/dist/icon.cjs.map +1 -1
  256. package/dist/icon.d.cts +1 -1
  257. package/dist/icon.d.ts +1 -1
  258. package/dist/icon.js +3 -1
  259. package/dist/index.cjs +46 -14
  260. package/dist/index.cjs.map +1 -1
  261. package/dist/index.d.cts +1 -1
  262. package/dist/index.d.ts +1 -1
  263. package/dist/index.js +53 -51
  264. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs.map +1 -1
  265. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +5 -5
  266. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs.map +1 -1
  267. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +1 -1
  268. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs.map +1 -1
  269. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +3 -3
  270. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.cjs.map +1 -1
  271. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.js +2 -2
  272. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs.map +1 -1
  273. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +1 -1
  274. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs.map +1 -1
  275. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +1 -1
  276. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs.map +1 -1
  277. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +1 -1
  278. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs.map +1 -1
  279. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +2 -2
  280. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs.map +1 -1
  281. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +2 -2
  282. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs.map +1 -1
  283. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +7 -7
  284. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs.map +1 -1
  285. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +1 -1
  286. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs.map +1 -1
  287. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.js +2 -2
  288. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
  289. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +8 -8
  290. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
  291. package/dist/molecules/curriculumV2/CurriculumContents/index.js +10 -10
  292. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs.map +1 -1
  293. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +1 -1
  294. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
  295. package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +2 -2
  296. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs.map +1 -1
  297. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +2 -2
  298. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
  299. package/dist/molecules/curriculumV2/curriculum-sub-nav.js +2 -2
  300. package/dist/molecules/curriculumV2/index.cjs.map +1 -1
  301. package/dist/molecules/curriculumV2/index.js +19 -19
  302. package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
  303. package/dist/molecules/date-picker/date-picker-button.js +3 -3
  304. package/dist/molecules/date-picker/index.cjs.map +1 -1
  305. package/dist/molecules/date-picker/index.js +2 -2
  306. package/dist/molecules/description-json-render.cjs.map +1 -1
  307. package/dist/molecules/description-json-render.js +3 -3
  308. package/dist/molecules/dynamic-field.cjs +5 -2
  309. package/dist/molecules/dynamic-field.cjs.map +1 -1
  310. package/dist/molecules/dynamic-field.js +3 -3
  311. package/dist/molecules/dynamic-form.cjs +44 -14
  312. package/dist/molecules/dynamic-form.cjs.map +1 -1
  313. package/dist/molecules/dynamic-form.js +4 -4
  314. package/dist/molecules/expand-table/index.cjs.map +1 -1
  315. package/dist/molecules/expand-table/index.js +3 -3
  316. package/dist/molecules/form/form.cjs +5 -2
  317. package/dist/molecules/form/form.cjs.map +1 -1
  318. package/dist/molecules/form/form.js +1 -1
  319. package/dist/molecules/form/index.cjs +5 -2
  320. package/dist/molecules/form/index.cjs.map +1 -1
  321. package/dist/molecules/form/index.js +1 -1
  322. package/dist/molecules/index.cjs +44 -14
  323. package/dist/molecules/index.cjs.map +1 -1
  324. package/dist/molecules/index.js +37 -37
  325. package/dist/molecules/stepper.cjs.map +1 -1
  326. package/dist/molecules/stepper.js +2 -2
  327. package/dist/molecules/tag-selector.cjs.map +1 -1
  328. package/dist/molecules/tag-selector.js +2 -2
  329. package/dist/molecules/time-select.cjs.map +1 -1
  330. package/dist/molecules/time-select.js +2 -2
  331. package/dist/utils/curriculum.utils.cjs.map +1 -1
  332. package/dist/utils/curriculum.utils.js +1 -1
  333. package/dist/utils/getCalloutIconComponent.cjs.map +1 -1
  334. package/dist/utils/getCalloutIconComponent.js +2 -2
  335. package/dist/utils/index.cjs.map +1 -1
  336. package/dist/utils/index.js +2 -2
  337. package/package.json +1 -1
  338. package/src/icon.ts +2 -1
  339. package/src/molecules/dynamic-form.tsx +44 -15
  340. package/src/molecules/form/form.tsx +10 -2
@@ -0,0 +1,245 @@
1
+ import {
2
+ DynamicFormField
3
+ } from "./chunk-DXD774YC.js";
4
+ import {
5
+ DynamicFormProvider,
6
+ useDynamicForm
7
+ } from "./chunk-NCSMSA3X.js";
8
+ import {
9
+ Form
10
+ } from "./chunk-2OMSNCRH.js";
11
+ import {
12
+ Typo
13
+ } from "./chunk-PMJIFLDT.js";
14
+ import {
15
+ __async
16
+ } from "./chunk-CRTRMMJ7.js";
17
+
18
+ // src/molecules/dynamic-form.tsx
19
+ import { useMemo, useCallback, useEffect } from "react";
20
+ import { useFormik } from "formik";
21
+ import * as Yup from "yup";
22
+ import { Box } from "@radix-ui/themes";
23
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
24
+ function scrollToFirstError(errors, _fields) {
25
+ const firstErrorFieldName = Object.keys(errors)[0];
26
+ if (!firstErrorFieldName) return;
27
+ let fieldElement = document.querySelector(`[name="${firstErrorFieldName}"]`);
28
+ if (!fieldElement) {
29
+ fieldElement = document.querySelector(
30
+ `[data-field-name="${firstErrorFieldName}"]`
31
+ );
32
+ }
33
+ if (!fieldElement) {
34
+ fieldElement = document.querySelector(
35
+ `[data-error-field="${firstErrorFieldName}"]`
36
+ );
37
+ }
38
+ if (fieldElement) {
39
+ fieldElement.scrollIntoView({
40
+ behavior: "smooth",
41
+ block: "nearest"
42
+ });
43
+ }
44
+ }
45
+ function DynamicFormRoot({
46
+ fields,
47
+ initialValues = {},
48
+ onSubmit,
49
+ children,
50
+ readonly = false,
51
+ formStyle
52
+ }) {
53
+ const validationSchema = useMemo(() => {
54
+ const schema = {};
55
+ fields.forEach((field) => {
56
+ if (field.validation) {
57
+ const validation = createYupValidation(field, field.validation);
58
+ if (validation) {
59
+ schema[field.name] = validation;
60
+ }
61
+ } else if (field.required) {
62
+ if (field.type === "choices") {
63
+ schema[field.name] = Yup.array().min(1, `${field.label}\uC744(\uB97C) \uD558\uB098 \uC774\uC0C1 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`).required(`${field.label}\uC740(\uB294) \uD544\uC218\uC785\uB2C8\uB2E4`);
64
+ } else if (field.type === "yes_no") {
65
+ schema[field.name] = Yup.boolean().oneOf(
66
+ [true],
67
+ `${field.label}\uC5D0 \uB3D9\uC758\uD574\uC8FC\uC138\uC694`
68
+ );
69
+ } else {
70
+ schema[field.name] = Yup.string().required(
71
+ `${field.label}\uC740(\uB294) \uD544\uC218\uC785\uB2C8\uB2E4`
72
+ );
73
+ }
74
+ }
75
+ });
76
+ return Object.keys(schema).length > 0 ? Yup.object(schema) : void 0;
77
+ }, [fields]);
78
+ const handleSubmit = useCallback(
79
+ (values) => __async(null, null, function* () {
80
+ yield onSubmit(values);
81
+ }),
82
+ [onSubmit]
83
+ );
84
+ const formik = useFormik({
85
+ initialValues: fields.reduce((acc, field) => {
86
+ if (field.type === "choices") {
87
+ acc[field.name] = initialValues[field.name] || [];
88
+ } else if (field.type === "yes_no") {
89
+ acc[field.name] = initialValues[field.name] || false;
90
+ } else {
91
+ acc[field.name] = initialValues[field.name] || "";
92
+ }
93
+ return acc;
94
+ }, {}),
95
+ validationSchema,
96
+ validateOnBlur: true,
97
+ validateOnChange: true,
98
+ onSubmit: handleSubmit
99
+ });
100
+ useEffect(() => {
101
+ if (formik.submitCount > 0 && Object.keys(formik.errors).length > 0) {
102
+ const timeoutId = setTimeout(() => {
103
+ scrollToFirstError(formik.errors, fields);
104
+ }, 100);
105
+ return () => {
106
+ clearTimeout(timeoutId);
107
+ };
108
+ }
109
+ }, [formik.submitCount, formik.errors, fields]);
110
+ return /* @__PURE__ */ jsx(
111
+ DynamicFormProvider,
112
+ {
113
+ fields,
114
+ formStyle,
115
+ formik,
116
+ readonly,
117
+ children
118
+ }
119
+ );
120
+ }
121
+ function DynamicFormFieldList({
122
+ fields: fieldsProp,
123
+ labelVariant
124
+ }) {
125
+ const { formik, fields: fieldsFromContext, readonly } = useDynamicForm();
126
+ const fields = fieldsProp || fieldsFromContext;
127
+ return /* @__PURE__ */ jsx(Fragment, { children: fields.map((field) => {
128
+ const errorMessage = !readonly && formik.touched[field.name] && formik.errors[field.name] ? String(formik.errors[field.name]) : void 0;
129
+ return /* @__PURE__ */ jsx(
130
+ Box,
131
+ {
132
+ "data-error-field": errorMessage ? field.name : void 0,
133
+ "data-field-name": field.name,
134
+ mb: "2",
135
+ children: /* @__PURE__ */ jsxs(
136
+ Form.FormItem,
137
+ {
138
+ errorMessage,
139
+ label: field.label,
140
+ labelVariant,
141
+ name: field.name,
142
+ required: field.required,
143
+ children: [
144
+ field.description && field.type !== "yes_no" ? /* @__PURE__ */ jsx(Typo, { variant: "caption", children: field.description }) : null,
145
+ /* @__PURE__ */ jsx(DynamicFormField, { field })
146
+ ]
147
+ }
148
+ )
149
+ },
150
+ field.name
151
+ );
152
+ }) });
153
+ }
154
+ var DynamicForm = {
155
+ Root: DynamicFormRoot,
156
+ FieldList: DynamicFormFieldList
157
+ };
158
+ function createYupValidation(field, validation) {
159
+ if (!validation) return void 0;
160
+ let schema;
161
+ if (field.type === "number") {
162
+ schema = Yup.number();
163
+ } else if (field.type === "email") {
164
+ schema = Yup.string().email(
165
+ validation.message || "\uC62C\uBC14\uB978 \uC774\uBA54\uC77C \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4"
166
+ );
167
+ } else if (field.type === "choices") {
168
+ schema = Yup.array();
169
+ } else if (field.type === "yes_no") {
170
+ schema = Yup.boolean();
171
+ } else {
172
+ schema = Yup.string();
173
+ }
174
+ if (validation.min !== void 0) {
175
+ if (field.type === "number") {
176
+ schema = schema.min(
177
+ validation.min,
178
+ validation.message || `\uCD5C\uC18C ${validation.min}\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`
179
+ );
180
+ } else if (field.type === "choices") {
181
+ schema = schema.min(
182
+ validation.min,
183
+ validation.message || `\uCD5C\uC18C ${validation.min}\uAC1C \uC774\uC0C1 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`
184
+ );
185
+ } else if (field.type === "yes_no") {
186
+ } else {
187
+ schema = schema.min(
188
+ validation.min,
189
+ validation.message || `\uCD5C\uC18C ${validation.min}\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`
190
+ );
191
+ }
192
+ }
193
+ if (validation.max !== void 0) {
194
+ if (field.type === "number") {
195
+ schema = schema.max(
196
+ validation.max,
197
+ validation.message || `\uCD5C\uB300 ${validation.max}\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`
198
+ );
199
+ } else if (field.type === "choices") {
200
+ schema = schema.max(
201
+ validation.max,
202
+ validation.message || `\uCD5C\uB300 ${validation.max}\uAC1C\uAE4C\uC9C0 \uC120\uD0DD \uAC00\uB2A5\uD569\uB2C8\uB2E4`
203
+ );
204
+ } else if (field.type === "yes_no") {
205
+ } else {
206
+ schema = schema.max(
207
+ validation.max,
208
+ validation.message || `\uCD5C\uB300 ${validation.max}\uC790 \uC774\uD558\uC5EC\uC57C \uD569\uB2C8\uB2E4`
209
+ );
210
+ }
211
+ }
212
+ if (validation.pattern) {
213
+ if (field.type === "yes_no") {
214
+ } else {
215
+ schema = schema.matches(
216
+ new RegExp(validation.pattern),
217
+ validation.message || "\uC62C\uBC14\uB978 \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4"
218
+ );
219
+ }
220
+ }
221
+ if (field.required) {
222
+ if (field.type === "yes_no") {
223
+ schema = schema.oneOf(
224
+ [true],
225
+ validation.message || `${field.label}\uC5D0 \uB3D9\uC758\uD574\uC8FC\uC138\uC694`
226
+ );
227
+ } else if (field.type === "choices") {
228
+ schema = schema.min(
229
+ 1,
230
+ validation.message || `${field.label}\uC744(\uB97C) \uD558\uB098 \uC774\uC0C1 \uC120\uD0DD\uD574\uC8FC\uC138\uC694`
231
+ );
232
+ } else {
233
+ schema = schema.required(
234
+ validation.message || `${field.label}\uC740(\uB294) \uD544\uC218\uC785\uB2C8\uB2E4`
235
+ );
236
+ }
237
+ }
238
+ return schema;
239
+ }
240
+
241
+ export {
242
+ DynamicForm,
243
+ createYupValidation
244
+ };
245
+ //# sourceMappingURL=chunk-ZOMXQCLY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/molecules/dynamic-form.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect } from 'react';\nimport { useFormik, type FormikProps } from 'formik';\nimport * as Yup from 'yup';\nimport { Box } from '@radix-ui/themes';\nimport { Typo } from '@/atoms/typo';\nimport {\n DynamicFormProvider,\n useDynamicForm,\n} from '@/context/dynamic-form-context';\nimport type {\n DynamicFormFieldSchema,\n ValidationRule,\n} from '@/types/dynamic-form-schema-generated';\nimport { Form } from './form/form';\nimport { DynamicFormField } from './dynamic-field';\n\nexport interface DynamicFormProps {\n fields: DynamicFormFieldSchema[];\n initialValues?: Record<string, unknown>;\n onSubmit: (values: Record<string, unknown>) => void | Promise<void>;\n children: React.ReactNode;\n readonly?: boolean;\n formStyle?: React.CSSProperties;\n}\n\n/**\n * 첫 번째 에러 필드로 스크롤하는 함수\n */\nfunction scrollToFirstError(\n errors: Record<string, unknown>,\n _fields: DynamicFormFieldSchema[]\n): void {\n const firstErrorFieldName = Object.keys(errors)[0];\n if (!firstErrorFieldName) return;\n\n // 해당 필드의 DOM 요소를 찾기 (여러 선택자 시도)\n let fieldElement = document.querySelector(`[name=\"${firstErrorFieldName}\"]`);\n\n // input 요소를 찾지 못한 경우, 해당 필드의 컨테이너를 찾기\n if (!fieldElement) {\n fieldElement = document.querySelector(\n `[data-field-name=\"${firstErrorFieldName}\"]`\n );\n }\n\n // 여전히 찾지 못한 경우, FormItem의 에러 메시지 영역을 찾기\n if (!fieldElement) {\n fieldElement = document.querySelector(\n `[data-error-field=\"${firstErrorFieldName}\"]`\n );\n }\n\n if (fieldElement) {\n fieldElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n}\n\nfunction DynamicFormRoot({\n fields,\n initialValues = {},\n onSubmit,\n children,\n readonly = false,\n formStyle,\n}: DynamicFormProps): React.ReactElement {\n const validationSchema = useMemo(() => {\n const schema: Record<string, Yup.Schema<unknown>> = {};\n fields.forEach((field) => {\n if (field.validation) {\n const validation = createYupValidation(field, field.validation);\n if (validation) {\n schema[field.name] = validation;\n }\n } else if (field.required) {\n // choices 타입은 배열 스키마로 처리\n if (field.type === 'choices') {\n schema[field.name] = Yup.array()\n .min(1, `${field.label}을(를) 하나 이상 선택해주세요`)\n .required(`${field.label}은(는) 필수입니다`);\n } else if (field.type === 'yes_no') {\n // yes_no 타입은 boolean 스키마로 처리\n schema[field.name] = Yup.boolean().oneOf(\n [true],\n `${field.label}에 동의해주세요`\n );\n } else {\n // choice, dropdown, short_text, long_text, number, email 타입은 문자열 스키마로 처리\n schema[field.name] = Yup.string().required(\n `${field.label}은(는) 필수입니다`\n );\n }\n }\n });\n return Object.keys(schema).length > 0 ? Yup.object(schema) : undefined;\n }, [fields]);\n\n const handleSubmit = useCallback(\n async (values: Record<string, unknown>) => {\n await onSubmit(values);\n },\n [onSubmit]\n );\n\n const formik: FormikProps<Record<string, unknown>> = useFormik({\n initialValues: fields.reduce<Record<string, unknown>>((acc, field) => {\n if (field.type === 'choices') {\n acc[field.name] = initialValues[field.name] || [];\n } else if (field.type === 'yes_no') {\n acc[field.name] = initialValues[field.name] || false;\n } else {\n acc[field.name] = initialValues[field.name] || '';\n }\n return acc;\n }, {}),\n validationSchema,\n validateOnBlur: true,\n validateOnChange: true,\n onSubmit: handleSubmit,\n });\n\n // submit 시 validation 에러가 있으면 첫 번째 에러 필드로 스크롤\n useEffect(() => {\n if (formik.submitCount > 0 && Object.keys(formik.errors).length > 0) {\n // 약간의 지연을 두어 DOM 업데이트 후 스크롤 실행\n const timeoutId = setTimeout(() => {\n scrollToFirstError(formik.errors, fields);\n }, 100);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }\n }, [formik.submitCount, formik.errors, fields]);\n\n return (\n <DynamicFormProvider\n fields={fields}\n formStyle={formStyle}\n formik={formik}\n readonly={readonly}\n >\n {children}\n </DynamicFormProvider>\n );\n}\n\ninterface DynamicFormFieldListProps {\n fields?: DynamicFormFieldSchema[];\n labelVariant?: 'title' | 'body' | 'caption';\n}\nfunction DynamicFormFieldList({\n fields: fieldsProp,\n labelVariant,\n}: DynamicFormFieldListProps): React.ReactElement {\n const { formik, fields: fieldsFromContext, readonly } = useDynamicForm();\n const fields = fieldsProp || fieldsFromContext;\n\n return (\n <>\n {fields.map((field) => {\n const errorMessage =\n !readonly && formik.touched[field.name] && formik.errors[field.name]\n ? String(formik.errors[field.name])\n : undefined;\n\n return (\n <Box\n data-error-field={errorMessage ? field.name : undefined}\n data-field-name={field.name}\n key={field.name}\n mb=\"2\"\n >\n <Form.FormItem\n errorMessage={errorMessage}\n label={field.label}\n labelVariant={labelVariant}\n name={field.name}\n required={field.required}\n >\n {field.description && field.type !== 'yes_no' ? (\n <Typo variant=\"caption\">{field.description}</Typo>\n ) : null}\n <DynamicFormField field={field} />\n </Form.FormItem>\n </Box>\n );\n })}\n </>\n );\n}\n\nexport const DynamicForm = {\n Root: DynamicFormRoot,\n FieldList: DynamicFormFieldList,\n};\n\nexport function createYupValidation(\n field: DynamicFormFieldSchema,\n validation?: ValidationRule\n): Yup.Schema<unknown> | undefined {\n if (!validation) return undefined;\n\n let schema: Yup.Schema<unknown>;\n\n // field.type을 기준으로 기본 스키마 생성\n if (field.type === 'number') {\n schema = Yup.number();\n } else if (field.type === 'email') {\n schema = Yup.string().email(\n validation.message || '올바른 이메일 형식이 아닙니다'\n );\n } else if (field.type === 'choices') {\n schema = Yup.array();\n } else if (field.type === 'yes_no') {\n schema = Yup.boolean();\n } else {\n // choice, dropdown, short_text, long_text 타입은 문자열 스키마로 처리\n schema = Yup.string();\n }\n\n if (validation.min !== undefined) {\n if (field.type === 'number') {\n schema = (schema as Yup.NumberSchema).min(\n validation.min,\n validation.message || `최소 ${validation.min}이어야 합니다`\n );\n } else if (field.type === 'choices') {\n schema = (schema as ReturnType<typeof Yup.array>).min(\n validation.min,\n validation.message || `최소 ${validation.min}개 이상 선택해주세요`\n );\n } else if (field.type === 'yes_no') {\n // yes_no 타입은 boolean이므로 min/max 검증 불가\n // 대신 required 검증만 적용\n } else {\n schema = (schema as Yup.StringSchema).min(\n validation.min,\n validation.message || `최소 ${validation.min}자 이상이어야 합니다`\n );\n }\n }\n\n if (validation.max !== undefined) {\n if (field.type === 'number') {\n schema = (schema as Yup.NumberSchema).max(\n validation.max,\n validation.message || `최대 ${validation.max}이어야 합니다`\n );\n } else if (field.type === 'choices') {\n schema = (schema as ReturnType<typeof Yup.array>).max(\n validation.max,\n validation.message || `최대 ${validation.max}개까지 선택 가능합니다`\n );\n } else if (field.type === 'yes_no') {\n // yes_no 타입은 boolean이므로 min/max 검증 불가\n // 대신 required 검증만 적용\n } else {\n schema = (schema as Yup.StringSchema).max(\n validation.max,\n validation.message || `최대 ${validation.max}자 이하여야 합니다`\n );\n }\n }\n\n if (validation.pattern) {\n if (field.type === 'yes_no') {\n // yes_no 타입은 boolean이므로 pattern 검증 불가\n // 대신 required 검증만 적용\n } else {\n schema = (schema as Yup.StringSchema).matches(\n new RegExp(validation.pattern),\n validation.message || '올바른 형식이 아닙니다'\n );\n }\n }\n\n // field.required가 true인 경우 required 검증 추가\n if (field.required) {\n if (field.type === 'yes_no') {\n schema = (schema as Yup.BooleanSchema).oneOf(\n [true],\n validation.message || `${field.label}에 동의해주세요`\n );\n } else if (field.type === 'choices') {\n schema = (schema as ReturnType<typeof Yup.array>).min(\n 1,\n validation.message || `${field.label}을(를) 하나 이상 선택해주세요`\n );\n } else {\n schema = (schema as Yup.StringSchema).required(\n validation.message || `${field.label}은(는) 필수입니다`\n );\n }\n }\n\n return schema;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,146 @@
1
+ import {
2
+ Heading
3
+ } from "./chunk-BESTU2AY.js";
4
+ import {
5
+ Typo
6
+ } from "./chunk-PMJIFLDT.js";
7
+ import {
8
+ __objRest,
9
+ __spreadProps,
10
+ __spreadValues
11
+ } from "./chunk-CRTRMMJ7.js";
12
+
13
+ // src/molecules/form/form.tsx
14
+ import * as RadixForm from "@radix-ui/react-form";
15
+ import { createContext, forwardRef, useContext, useMemo } from "react";
16
+ import { jsx, jsxs } from "react/jsx-runtime";
17
+ var Root2 = forwardRef(
18
+ (_a, ref) => {
19
+ var _b = _a, { children, className } = _b, rest = __objRest(_b, ["children", "className"]);
20
+ return /* @__PURE__ */ jsx(
21
+ RadixForm.Root,
22
+ __spreadProps(__spreadValues({}, rest), {
23
+ className: `FormRoot ${className || ""}`,
24
+ ref,
25
+ children
26
+ })
27
+ );
28
+ }
29
+ );
30
+ Root2.displayName = "FORM_ROOT";
31
+ var FieldContext = createContext({
32
+ name: ""
33
+ });
34
+ var Field2 = forwardRef(
35
+ (_a, ref) => {
36
+ var _b = _a, { children, className } = _b, rest = __objRest(_b, ["children", "className"]);
37
+ return /* @__PURE__ */ jsx(
38
+ RadixForm.Field,
39
+ __spreadProps(__spreadValues({}, rest), {
40
+ className: `FormField ${className || ""}`,
41
+ ref,
42
+ children: /* @__PURE__ */ jsx(FieldContext.Provider, { value: rest, children })
43
+ })
44
+ );
45
+ }
46
+ );
47
+ Field2.displayName = "FORM_FIELD";
48
+ function HeadingLabel(props) {
49
+ return /* @__PURE__ */ jsx(Heading, __spreadProps(__spreadValues({ variant: "heading5" }, props), { children: props.children }));
50
+ }
51
+ function CaptionLabel(props) {
52
+ return /* @__PURE__ */ jsx(Typo, __spreadProps(__spreadValues({ color: "gray", variant: "caption", weight: "bold" }, props), { children: props.children }));
53
+ }
54
+ var Label2 = forwardRef(
55
+ (_a, ref) => {
56
+ var _b = _a, { children, className, variant } = _b, rest = __objRest(_b, ["children", "className", "variant"]);
57
+ const Comp = useMemo(() => {
58
+ switch (variant) {
59
+ case "title":
60
+ return HeadingLabel;
61
+ case "caption":
62
+ return CaptionLabel;
63
+ case "body":
64
+ default:
65
+ return Typo;
66
+ }
67
+ }, [variant]);
68
+ const fieldProps = useContext(FieldContext);
69
+ return /* @__PURE__ */ jsx(
70
+ RadixForm.Label,
71
+ __spreadProps(__spreadValues({}, rest), {
72
+ asChild: true,
73
+ className: `FormLabel ${className || ""}`,
74
+ ref,
75
+ children: /* @__PURE__ */ jsxs(Comp, { children: [
76
+ children,
77
+ fieldProps.required ? /* @__PURE__ */ jsx(Typo, { as: "span", color: "tomato", children: ` *` }) : null
78
+ ] })
79
+ })
80
+ );
81
+ }
82
+ );
83
+ Label2.displayName = "FORM_Label";
84
+ var Message2 = forwardRef(
85
+ (_a, ref) => {
86
+ var _b = _a, { children, className } = _b, rest = __objRest(_b, ["children", "className"]);
87
+ return /* @__PURE__ */ jsx(
88
+ RadixForm.Message,
89
+ __spreadProps(__spreadValues({}, rest), {
90
+ asChild: true,
91
+ className: `FormMessage ${className || ""}`,
92
+ ref,
93
+ children: /* @__PURE__ */ jsx(Typo, { color: "red", children })
94
+ })
95
+ );
96
+ }
97
+ );
98
+ Message2.displayName = "FORM_Message";
99
+ var Control2 = forwardRef(
100
+ (_a, ref) => {
101
+ var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
102
+ const fieldProps = useContext(FieldContext);
103
+ return /* @__PURE__ */ jsx(
104
+ RadixForm.Control,
105
+ __spreadProps(__spreadValues({}, rest), {
106
+ className: `FormControl ${className || ""}`,
107
+ ref,
108
+ required: fieldProps.required
109
+ })
110
+ );
111
+ }
112
+ );
113
+ Control2.displayName = "FORM_Control";
114
+ function FormItem(_a) {
115
+ var _b = _a, {
116
+ label,
117
+ labelVariant,
118
+ children,
119
+ errorMessage
120
+ } = _b, fieldProps = __objRest(_b, [
121
+ "label",
122
+ "labelVariant",
123
+ "children",
124
+ "errorMessage"
125
+ ]);
126
+ return /* @__PURE__ */ jsxs(Form.Field, __spreadProps(__spreadValues({}, fieldProps), { children: [
127
+ /* @__PURE__ */ jsx(Form.Label, { variant: labelVariant, children: /* @__PURE__ */ jsx(Typo, { weight: "bold", children: label }) }),
128
+ children,
129
+ /* @__PURE__ */ jsx(Form.Message, { forceMatch: Boolean(errorMessage), children: errorMessage })
130
+ ] }));
131
+ }
132
+ var Form = {
133
+ Root: Root2,
134
+ Field: Field2,
135
+ Label: Label2,
136
+ Message: Message2,
137
+ Control: RadixForm.Control,
138
+ Submit: RadixForm.Submit,
139
+ FormItem
140
+ };
141
+
142
+ export {
143
+ FormItem,
144
+ Form
145
+ };
146
+ //# sourceMappingURL=chunk-ZVWUCJMB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/molecules/form/form.tsx"],"sourcesContent":["import * as RadixForm from '@radix-ui/react-form';\nimport React, { createContext, forwardRef, useContext, useMemo } from 'react';\nimport type { HeadingProps } from '@radix-ui/themes';\nimport { Heading } from '../../atoms/heading';\nimport type { TypoProps } from '../../atoms/typo';\nimport { Typo } from '../../atoms/typo';\n\nconst Root = forwardRef<HTMLFormElement, RadixForm.FormProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Root\n {...rest}\n className={`FormRoot ${className || ''}`}\n ref={ref}\n >\n {children}\n </RadixForm.Root>\n );\n }\n);\n\nRoot.displayName = 'FORM_ROOT';\n\nexport type FormFieldProps = RadixForm.FormFieldProps & { required?: boolean };\n\nconst FieldContext = createContext<FormFieldProps>({\n name: '',\n});\n\nconst Field = forwardRef<HTMLDivElement, FormFieldProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Field\n {...rest}\n className={`FormField ${className || ''}`}\n ref={ref}\n >\n <FieldContext.Provider value={rest}>{children}</FieldContext.Provider>\n </RadixForm.Field>\n );\n }\n);\nField.displayName = 'FORM_FIELD';\n\nexport type FormLabelProps = RadixForm.FormLabelProps & {\n /** label의 타입을 지정 */\n variant?: 'title' | 'body' | 'caption';\n};\n\nfunction HeadingLabel(props: HeadingProps): React.ReactNode {\n return (\n <Heading variant=\"heading5\" {...props}>\n {props.children}\n </Heading>\n );\n}\n\nfunction CaptionLabel(props: TypoProps): React.ReactNode {\n return (\n <Typo color=\"gray\" variant=\"caption\" weight=\"bold\" {...props}>\n {props.children}\n </Typo>\n );\n}\n\nconst Label = forwardRef<HTMLLabelElement, FormLabelProps>(\n ({ children, className, variant, ...rest }, ref) => {\n const Comp = useMemo(() => {\n switch (variant) {\n case 'title':\n return HeadingLabel;\n case 'caption':\n return CaptionLabel;\n case 'body':\n default:\n return Typo;\n }\n }, [variant]);\n\n const fieldProps = useContext(FieldContext);\n return (\n <RadixForm.Label\n {...rest}\n asChild\n className={`FormLabel ${className || ''}`}\n ref={ref}\n >\n <Comp>\n {children}\n {fieldProps.required ? (\n <Typo as=\"span\" color=\"tomato\">\n {` *`}\n </Typo>\n ) : null}\n </Comp>\n </RadixForm.Label>\n );\n }\n);\nLabel.displayName = 'FORM_Label';\n\nconst Message = forwardRef<HTMLSpanElement, RadixForm.FormMessageProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Message\n {...rest}\n asChild\n className={`FormMessage ${className || ''}`}\n ref={ref}\n >\n <Typo color=\"red\">{children}</Typo>\n </RadixForm.Message>\n );\n }\n);\nMessage.displayName = 'FORM_Message';\n\ntype ControlProps = Omit<RadixForm.FormControlProps, 'required'>;\nconst Control = forwardRef<HTMLInputElement, ControlProps>(\n ({ className, ...rest }, ref) => {\n const fieldProps = useContext(FieldContext);\n return (\n <RadixForm.Control\n {...rest}\n className={`FormControl ${className || ''}`}\n ref={ref}\n required={fieldProps.required}\n />\n );\n }\n);\nControl.displayName = 'FORM_Control';\n\ninterface FormItemProps extends FormFieldProps {\n children: React.ReactNode;\n label: string;\n labelVariant?: FormLabelProps['variant'];\n errorMessage?: string;\n}\n\nexport function FormItem({\n label,\n labelVariant,\n children,\n errorMessage,\n ...fieldProps\n}: FormItemProps): React.ReactNode {\n return (\n <Form.Field {...fieldProps}>\n <Form.Label variant={labelVariant}>\n <Typo weight=\"bold\">{label}</Typo>\n </Form.Label>\n {children}\n <Form.Message forceMatch={Boolean(errorMessage)}>\n {errorMessage}\n </Form.Message>\n </Form.Field>\n );\n}\n\nexport const Form = {\n Root,\n Field,\n Label,\n Message,\n Control: RadixForm.Control,\n Submit: RadixForm.Submit,\n FormItem,\n};\n"],"mappings":"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","names":["Root","Field","Label","Message","Control"]}
@@ -208,7 +208,10 @@ function HeadingLabel(props) {
208
208
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Heading2, __spreadProps(__spreadValues({ variant: "heading5" }, props), { children: props.children }));
209
209
  }
210
210
  function CaptionLabel(props) {
211
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Typo, __spreadProps(__spreadValues({ color: "gray", variant: "caption" }, props), { children: props.children }));
211
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Typo, __spreadProps(__spreadValues({ color: "gray", variant: "caption", weight: "bold" }, props), { children: props.children }));
212
+ }
213
+ function BodyLabel(props) {
214
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Typo, __spreadProps(__spreadValues({ variant: "body", weight: "bold" }, props), { children: props.children }));
212
215
  }
213
216
  var Label2 = (0, import_react3.forwardRef)(
214
217
  (_a, ref) => {
@@ -221,7 +224,7 @@ var Label2 = (0, import_react3.forwardRef)(
221
224
  return CaptionLabel;
222
225
  case "body":
223
226
  default:
224
- return Typo;
227
+ return BodyLabel;
225
228
  }
226
229
  }, [variant]);
227
230
  const fieldProps = (0, import_react3.useContext)(FieldContext);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context/dynamic-form-context.tsx","../../src/molecules/form/form.tsx","../../src/atoms/heading.tsx","../../src/utils/map-with-responsive.ts","../../src/atoms/typo.tsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\nimport type { FormikProps } from 'formik';\nimport { Form } from '@/molecules/form/form';\nimport type { DynamicFormFieldSchema } from '@/types/dynamic-form-schema-generated';\n\nexport interface DynamicFormContextValue {\n formik: FormikProps<Record<string, unknown>>;\n fields: DynamicFormFieldSchema[];\n readonly: boolean;\n getFieldValue: (name: string) => unknown;\n getFieldError: (name: string) => string | undefined;\n getFieldTouched: (name: string) => boolean;\n setFieldValue: (field: string, value: unknown) => Promise<void>;\n handleChange: (e: React.ChangeEvent<unknown>) => void;\n handleBlur: (e: React.FocusEvent<unknown>) => void;\n}\n\nconst DynamicFormContext = createContext<DynamicFormContextValue | null>(null);\n\ninterface DynamicFormProviderProps {\n children: React.ReactNode;\n fields: DynamicFormFieldSchema[];\n formik: FormikProps<Record<string, unknown>>;\n readonly?: boolean;\n formStyle?: React.CSSProperties;\n}\n\nexport function DynamicFormProvider({\n children,\n fields,\n formik,\n readonly = false,\n formStyle,\n}: DynamicFormProviderProps): React.ReactElement {\n const contextValue: DynamicFormContextValue = {\n formik,\n fields,\n readonly,\n getFieldValue: (name: string): unknown => formik.values[name],\n getFieldError: (name: string): string | undefined => {\n const error = formik.errors[name];\n const touched = formik.touched[name];\n return touched && error ? String(error) : undefined;\n },\n getFieldTouched: (name: string): boolean => Boolean(formik.touched[name]),\n setFieldValue: async (field: string, value: unknown): Promise<void> => {\n await formik.setFieldValue(field, value);\n },\n handleChange: formik.handleChange,\n handleBlur: formik.handleBlur, \n };\n\n return (\n <DynamicFormContext.Provider value={contextValue}>\n <Form.Root onSubmit={formik.handleSubmit} style={formStyle}>{children}</Form.Root>\n </DynamicFormContext.Provider>\n );\n}\n\nexport function useDynamicForm(): DynamicFormContextValue {\n const context = useContext(DynamicFormContext);\n\n if (!context) {\n throw new Error('useDynamicForm must be used within a DynamicFormProvider');\n }\n\n return context;\n}\n","import * as RadixForm from '@radix-ui/react-form';\nimport React, { createContext, forwardRef, useContext, useMemo } from 'react';\nimport type { HeadingProps } from '@radix-ui/themes';\nimport { Heading } from '../../atoms/heading';\nimport type { TypoProps } from '../../atoms/typo';\nimport { Typo } from '../../atoms/typo';\n\nconst Root = forwardRef<HTMLFormElement, RadixForm.FormProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Root\n {...rest}\n className={`FormRoot ${className || ''}`}\n ref={ref}\n >\n {children}\n </RadixForm.Root>\n );\n }\n);\n\nRoot.displayName = 'FORM_ROOT';\n\nexport type FormFieldProps = RadixForm.FormFieldProps & { required?: boolean };\n\nconst FieldContext = createContext<FormFieldProps>({\n name: '',\n});\n\nconst Field = forwardRef<HTMLDivElement, FormFieldProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Field\n {...rest}\n className={`FormField ${className || ''}`}\n ref={ref}\n >\n <FieldContext.Provider value={rest}>{children}</FieldContext.Provider>\n </RadixForm.Field>\n );\n }\n);\nField.displayName = 'FORM_FIELD';\n\nexport type FormLabelProps = RadixForm.FormLabelProps & {\n /** label의 타입을 지정 */\n variant?: 'title' | 'body' | 'caption';\n};\n\nfunction HeadingLabel(props: HeadingProps): React.ReactNode {\n return (\n <Heading variant=\"heading5\" {...props}>\n {props.children}\n </Heading>\n );\n}\n\nfunction CaptionLabel(props: TypoProps): React.ReactNode {\n return (\n <Typo color=\"gray\" variant=\"caption\" {...props}>\n {props.children}\n </Typo>\n );\n}\n\nconst Label = forwardRef<HTMLLabelElement, FormLabelProps>(\n ({ children, className, variant, ...rest }, ref) => {\n const Comp = useMemo(() => {\n switch (variant) {\n case 'title':\n return HeadingLabel;\n case 'caption':\n return CaptionLabel;\n case 'body':\n default:\n return Typo;\n }\n }, [variant]);\n\n const fieldProps = useContext(FieldContext);\n return (\n <RadixForm.Label\n {...rest}\n asChild\n className={`FormLabel ${className || ''}`}\n ref={ref}\n >\n <Comp>\n {children}\n {fieldProps.required ? (\n <Typo as=\"span\" color=\"tomato\">\n {` *`}\n </Typo>\n ) : null}\n </Comp>\n </RadixForm.Label>\n );\n }\n);\nLabel.displayName = 'FORM_Label';\n\nconst Message = forwardRef<HTMLSpanElement, RadixForm.FormMessageProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Message\n {...rest}\n asChild\n className={`FormMessage ${className || ''}`}\n ref={ref}\n >\n <Typo color=\"red\">{children}</Typo>\n </RadixForm.Message>\n );\n }\n);\nMessage.displayName = 'FORM_Message';\n\ntype ControlProps = Omit<RadixForm.FormControlProps, 'required'>;\nconst Control = forwardRef<HTMLInputElement, ControlProps>(\n ({ className, ...rest }, ref) => {\n const fieldProps = useContext(FieldContext);\n return (\n <RadixForm.Control\n {...rest}\n className={`FormControl ${className || ''}`}\n ref={ref}\n required={fieldProps.required}\n />\n );\n }\n);\nControl.displayName = 'FORM_Control';\n\ninterface FormItemProps extends FormFieldProps {\n children: React.ReactNode;\n label: string;\n labelVariant?: FormLabelProps['variant'];\n errorMessage?: string;\n}\n\nexport function FormItem({\n label,\n labelVariant,\n children,\n errorMessage,\n ...fieldProps\n}: FormItemProps): React.ReactNode {\n return (\n <Form.Field {...fieldProps}>\n <Form.Label variant={labelVariant}>{label}</Form.Label>\n {children}\n <Form.Message forceMatch={Boolean(errorMessage)}>\n {errorMessage}\n </Form.Message>\n </Form.Field>\n );\n}\n\nexport const Form = {\n Root,\n Field,\n Label,\n Message,\n Control: RadixForm.Control,\n Submit: RadixForm.Submit,\n FormItem,\n};\n","import {\n Heading as RadixHeading,\n type HeadingProps as RadixHeadingProps,\n} from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { useMemo } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport { Heading as RadixHeading } from '@radix-ui/themes';\ntype HeadingVariant =\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5';\nexport type HeadingProps = RadixHeadingProps & {\n variant?: Responsive<HeadingVariant>;\n};\n\ntype HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';\n\nconst mapVariant = (variant?: HeadingVariant): HeadingSize | undefined => {\n switch (variant) {\n case 'heading1':\n return '7';\n case 'heading2':\n return '6';\n case 'heading3':\n return '5';\n case 'heading4':\n return '4';\n case 'heading5':\n return '3';\n default:\n return undefined;\n }\n};\n\nexport function Heading(props: HeadingProps): React.ReactNode {\n const { size, children, variant, ...rest } = props;\n const radixSize = useMemo<RadixHeadingProps['size']>(() => {\n return variant\n ? mapWithResponsive({\n value: variant,\n mapFn: mapVariant,\n })\n : size;\n \n }, [size, variant]);\n\n return (\n <RadixHeading {...rest} size={radixSize}>\n {children}\n </RadixHeading>\n );\n}\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport type TypoProps = RadixTextProps & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, ...rest } = props;\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText {...rest} ref={ref} size={radixSize}>\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n"],"mappings":"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","names":["import_react","import_react","import_themes","Heading","RadixHeading","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime","Root","Field","Heading","Label","Message","Control","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/context/dynamic-form-context.tsx","../../src/molecules/form/form.tsx","../../src/atoms/heading.tsx","../../src/utils/map-with-responsive.ts","../../src/atoms/typo.tsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\nimport type { FormikProps } from 'formik';\nimport { Form } from '@/molecules/form/form';\nimport type { DynamicFormFieldSchema } from '@/types/dynamic-form-schema-generated';\n\nexport interface DynamicFormContextValue {\n formik: FormikProps<Record<string, unknown>>;\n fields: DynamicFormFieldSchema[];\n readonly: boolean;\n getFieldValue: (name: string) => unknown;\n getFieldError: (name: string) => string | undefined;\n getFieldTouched: (name: string) => boolean;\n setFieldValue: (field: string, value: unknown) => Promise<void>;\n handleChange: (e: React.ChangeEvent<unknown>) => void;\n handleBlur: (e: React.FocusEvent<unknown>) => void;\n}\n\nconst DynamicFormContext = createContext<DynamicFormContextValue | null>(null);\n\ninterface DynamicFormProviderProps {\n children: React.ReactNode;\n fields: DynamicFormFieldSchema[];\n formik: FormikProps<Record<string, unknown>>;\n readonly?: boolean;\n formStyle?: React.CSSProperties;\n}\n\nexport function DynamicFormProvider({\n children,\n fields,\n formik,\n readonly = false,\n formStyle,\n}: DynamicFormProviderProps): React.ReactElement {\n const contextValue: DynamicFormContextValue = {\n formik,\n fields,\n readonly,\n getFieldValue: (name: string): unknown => formik.values[name],\n getFieldError: (name: string): string | undefined => {\n const error = formik.errors[name];\n const touched = formik.touched[name];\n return touched && error ? String(error) : undefined;\n },\n getFieldTouched: (name: string): boolean => Boolean(formik.touched[name]),\n setFieldValue: async (field: string, value: unknown): Promise<void> => {\n await formik.setFieldValue(field, value);\n },\n handleChange: formik.handleChange,\n handleBlur: formik.handleBlur, \n };\n\n return (\n <DynamicFormContext.Provider value={contextValue}>\n <Form.Root onSubmit={formik.handleSubmit} style={formStyle}>{children}</Form.Root>\n </DynamicFormContext.Provider>\n );\n}\n\nexport function useDynamicForm(): DynamicFormContextValue {\n const context = useContext(DynamicFormContext);\n\n if (!context) {\n throw new Error('useDynamicForm must be used within a DynamicFormProvider');\n }\n\n return context;\n}\n","import * as RadixForm from '@radix-ui/react-form';\nimport React, { createContext, forwardRef, useContext, useMemo } from 'react';\nimport type { HeadingProps } from '@radix-ui/themes';\nimport { Heading } from '../../atoms/heading';\nimport type { TypoProps } from '../../atoms/typo';\nimport { Typo } from '../../atoms/typo';\n\nconst Root = forwardRef<HTMLFormElement, RadixForm.FormProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Root\n {...rest}\n className={`FormRoot ${className || ''}`}\n ref={ref}\n >\n {children}\n </RadixForm.Root>\n );\n }\n);\n\nRoot.displayName = 'FORM_ROOT';\n\nexport type FormFieldProps = RadixForm.FormFieldProps & { required?: boolean };\n\nconst FieldContext = createContext<FormFieldProps>({\n name: '',\n});\n\nconst Field = forwardRef<HTMLDivElement, FormFieldProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Field\n {...rest}\n className={`FormField ${className || ''}`}\n ref={ref}\n >\n <FieldContext.Provider value={rest}>{children}</FieldContext.Provider>\n </RadixForm.Field>\n );\n }\n);\nField.displayName = 'FORM_FIELD';\n\nexport type FormLabelProps = RadixForm.FormLabelProps & {\n /** label의 타입을 지정 */\n variant?: 'title' | 'body' | 'caption';\n};\n\nfunction HeadingLabel(props: HeadingProps): React.ReactNode {\n return (\n <Heading variant=\"heading5\" {...props}>\n {props.children}\n </Heading>\n );\n}\n\nfunction CaptionLabel(props: TypoProps): React.ReactNode {\n return (\n <Typo color=\"gray\" variant=\"caption\" weight=\"bold\" {...props}>\n {props.children}\n </Typo>\n );\n}\n\nfunction BodyLabel(props: TypoProps): React.ReactNode {\n return (\n <Typo variant=\"body\" weight=\"bold\" {...props}>\n {props.children}\n </Typo>\n );\n}\n\nconst Label = forwardRef<HTMLLabelElement, FormLabelProps>(\n ({ children, className, variant, ...rest }, ref) => {\n const Comp = useMemo(() => {\n switch (variant) {\n case 'title':\n return HeadingLabel;\n case 'caption':\n return CaptionLabel;\n case 'body':\n default:\n return BodyLabel;\n }\n }, [variant]);\n\n const fieldProps = useContext(FieldContext);\n return (\n <RadixForm.Label\n {...rest}\n asChild\n className={`FormLabel ${className || ''}`}\n ref={ref}\n >\n <Comp>\n {children}\n {fieldProps.required ? (\n <Typo as=\"span\" color=\"tomato\">\n {` *`}\n </Typo>\n ) : null}\n </Comp>\n </RadixForm.Label>\n );\n }\n);\nLabel.displayName = 'FORM_Label';\n\nconst Message = forwardRef<HTMLSpanElement, RadixForm.FormMessageProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <RadixForm.Message\n {...rest}\n asChild\n className={`FormMessage ${className || ''}`}\n ref={ref}\n >\n <Typo color=\"red\">{children}</Typo>\n </RadixForm.Message>\n );\n }\n);\nMessage.displayName = 'FORM_Message';\n\ntype ControlProps = Omit<RadixForm.FormControlProps, 'required'>;\nconst Control = forwardRef<HTMLInputElement, ControlProps>(\n ({ className, ...rest }, ref) => {\n const fieldProps = useContext(FieldContext);\n return (\n <RadixForm.Control\n {...rest}\n className={`FormControl ${className || ''}`}\n ref={ref}\n required={fieldProps.required}\n />\n );\n }\n);\nControl.displayName = 'FORM_Control';\n\ninterface FormItemProps extends FormFieldProps {\n children: React.ReactNode;\n label: string;\n labelVariant?: FormLabelProps['variant'];\n errorMessage?: string;\n}\n\nexport function FormItem({\n label,\n labelVariant,\n children,\n errorMessage,\n ...fieldProps\n}: FormItemProps): React.ReactNode {\n return (\n <Form.Field {...fieldProps}>\n <Form.Label variant={labelVariant}>{label}</Form.Label>\n {children}\n <Form.Message forceMatch={Boolean(errorMessage)}>\n {errorMessage}\n </Form.Message>\n </Form.Field>\n );\n}\n\nexport const Form = {\n Root,\n Field,\n Label,\n Message,\n Control: RadixForm.Control,\n Submit: RadixForm.Submit,\n FormItem,\n};\n","import {\n Heading as RadixHeading,\n type HeadingProps as RadixHeadingProps,\n} from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { useMemo } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport { Heading as RadixHeading } from '@radix-ui/themes';\ntype HeadingVariant =\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5';\nexport type HeadingProps = RadixHeadingProps & {\n variant?: Responsive<HeadingVariant>;\n};\n\ntype HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';\n\nconst mapVariant = (variant?: HeadingVariant): HeadingSize | undefined => {\n switch (variant) {\n case 'heading1':\n return '7';\n case 'heading2':\n return '6';\n case 'heading3':\n return '5';\n case 'heading4':\n return '4';\n case 'heading5':\n return '3';\n default:\n return undefined;\n }\n};\n\nexport function Heading(props: HeadingProps): React.ReactNode {\n const { size, children, variant, ...rest } = props;\n const radixSize = useMemo<RadixHeadingProps['size']>(() => {\n return variant\n ? mapWithResponsive({\n value: variant,\n mapFn: mapVariant,\n })\n : size;\n \n }, [size, variant]);\n\n return (\n <RadixHeading {...rest} size={radixSize}>\n {children}\n </RadixHeading>\n );\n}\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport type TypoProps = RadixTextProps & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, ...rest } = props;\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText {...rest} ref={ref} size={radixSize}>\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n"],"mappings":"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","names":["import_react","import_react","import_themes","Heading","RadixHeading","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime","Root","Field","Heading","Label","Message","Control","import_jsx_runtime"]}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  DynamicFormProvider,
3
3
  useDynamicForm
4
- } from "../chunk-NCSMSA3X.js";
5
- import "../chunk-2OMSNCRH.js";
4
+ } from "../chunk-4U6DFH7Z.js";
5
+ import "../chunk-QDC3LFHS.js";
6
6
  import "../chunk-BESTU2AY.js";
7
7
  import "../chunk-PMJIFLDT.js";
8
8
  import "../chunk-LDBWASUA.js";
@@ -213,7 +213,10 @@ function HeadingLabel(props) {
213
213
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Heading2, __spreadProps(__spreadValues({ variant: "heading5" }, props), { children: props.children }));
214
214
  }
215
215
  function CaptionLabel(props) {
216
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Typo, __spreadProps(__spreadValues({ color: "gray", variant: "caption" }, props), { children: props.children }));
216
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Typo, __spreadProps(__spreadValues({ color: "gray", variant: "caption", weight: "bold" }, props), { children: props.children }));
217
+ }
218
+ function BodyLabel(props) {
219
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Typo, __spreadProps(__spreadValues({ variant: "body", weight: "bold" }, props), { children: props.children }));
217
220
  }
218
221
  var Label2 = (0, import_react3.forwardRef)(
219
222
  (_a, ref) => {
@@ -226,7 +229,7 @@ var Label2 = (0, import_react3.forwardRef)(
226
229
  return CaptionLabel;
227
230
  case "body":
228
231
  default:
229
- return Typo;
232
+ return BodyLabel;
230
233
  }
231
234
  }, [variant]);
232
235
  const fieldProps = (0, import_react3.useContext)(FieldContext);