@tipp/ui 2.4.0 → 2.6.0

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 (727) hide show
  1. package/dist/app/index.cjs +1291 -837
  2. package/dist/app/index.cjs.map +1 -1
  3. package/dist/app/index.js +121 -120
  4. package/dist/app/platform/coach-question-list.cjs +822 -364
  5. package/dist/app/platform/coach-question-list.cjs.map +1 -1
  6. package/dist/app/platform/coach-question-list.js +48 -46
  7. package/dist/app/platform/contents-card.cjs +815 -357
  8. package/dist/app/platform/contents-card.cjs.map +1 -1
  9. package/dist/app/platform/contents-card.js +48 -46
  10. package/dist/app/platform/curriculum-card.cjs +65 -13
  11. package/dist/app/platform/curriculum-card.cjs.map +1 -1
  12. package/dist/app/platform/curriculum-card.js +6 -5
  13. package/dist/app/platform/edit-coaching-time.cjs +1012 -558
  14. package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
  15. package/dist/app/platform/edit-coaching-time.js +96 -95
  16. package/dist/app/platform/edit-service-type.cjs +995 -541
  17. package/dist/app/platform/edit-service-type.cjs.map +1 -1
  18. package/dist/app/platform/edit-service-type.js +97 -96
  19. package/dist/app/platform/goal-manage-card-edit.cjs +991 -537
  20. package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
  21. package/dist/app/platform/goal-manage-card-edit.js +96 -95
  22. package/dist/app/platform/goal-manage-card-read.cjs +865 -407
  23. package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
  24. package/dist/app/platform/goal-manage-card-read.js +48 -46
  25. package/dist/app/platform/on-offline-radio-card.cjs +785 -331
  26. package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
  27. package/dist/app/platform/on-offline-radio-card.js +96 -95
  28. package/dist/app/platform/report-card.cjs +828 -370
  29. package/dist/app/platform/report-card.cjs.map +1 -1
  30. package/dist/app/platform/report-card.js +48 -46
  31. package/dist/app/platform/reservation-card.cjs +1016 -562
  32. package/dist/app/platform/reservation-card.cjs.map +1 -1
  33. package/dist/app/platform/reservation-card.js +97 -96
  34. package/dist/app/platform/session-card.cjs +1069 -615
  35. package/dist/app/platform/session-card.cjs.map +1 -1
  36. package/dist/app/platform/session-card.js +99 -98
  37. package/dist/app/platform/session-review-simple-read.cjs +825 -367
  38. package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
  39. package/dist/app/platform/session-review-simple-read.js +48 -46
  40. package/dist/app/platform/userInfos/coaching-customer-info/index.cjs +857 -399
  41. package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
  42. package/dist/app/platform/userInfos/coaching-customer-info/index.js +54 -52
  43. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs +833 -375
  44. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
  45. package/dist/app/platform/userInfos/coaching-customer-info/large.js +49 -47
  46. package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs +836 -378
  47. package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
  48. package/dist/app/platform/userInfos/coaching-customer-info/medium.js +49 -47
  49. package/dist/app/platform/userInfos/coaching-customer-info/small.cjs +823 -365
  50. package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
  51. package/dist/app/platform/userInfos/coaching-customer-info/small.js +48 -46
  52. package/dist/app/platform/userInfos/session-user-info-detail.cjs +832 -374
  53. package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
  54. package/dist/app/platform/userInfos/session-user-info-detail.js +49 -47
  55. package/dist/app/platform/userInfos/utils.cjs +824 -366
  56. package/dist/app/platform/userInfos/utils.cjs.map +1 -1
  57. package/dist/app/platform/userInfos/utils.js +48 -46
  58. package/dist/atoms/alert-dialog.cjs +85 -1
  59. package/dist/atoms/alert-dialog.cjs.map +1 -1
  60. package/dist/atoms/alert-dialog.d.cts +18 -2
  61. package/dist/atoms/alert-dialog.d.ts +18 -2
  62. package/dist/atoms/alert-dialog.js +3 -1
  63. package/dist/atoms/aspect-ratio.d.cts +1 -0
  64. package/dist/atoms/aspect-ratio.d.ts +1 -0
  65. package/dist/atoms/avatar.cjs +39 -2
  66. package/dist/atoms/avatar.cjs.map +1 -1
  67. package/dist/atoms/avatar.d.cts +5 -2
  68. package/dist/atoms/avatar.d.ts +5 -2
  69. package/dist/atoms/avatar.js +2 -1
  70. package/dist/atoms/badge.cjs +34 -9
  71. package/dist/atoms/badge.cjs.map +1 -1
  72. package/dist/atoms/badge.d.cts +4 -5
  73. package/dist/atoms/badge.d.ts +4 -5
  74. package/dist/atoms/badge.js +2 -1
  75. package/dist/atoms/blockquote.cjs +71 -1
  76. package/dist/atoms/blockquote.cjs.map +1 -1
  77. package/dist/atoms/blockquote.d.cts +12 -1
  78. package/dist/atoms/blockquote.d.ts +12 -1
  79. package/dist/atoms/blockquote.js +2 -1
  80. package/dist/atoms/bullet-text.cjs +39 -2
  81. package/dist/atoms/bullet-text.cjs.map +1 -1
  82. package/dist/atoms/bullet-text.d.cts +1 -0
  83. package/dist/atoms/bullet-text.d.ts +1 -0
  84. package/dist/atoms/bullet-text.js +3 -2
  85. package/dist/atoms/button.cjs +33 -3
  86. package/dist/atoms/button.cjs.map +1 -1
  87. package/dist/atoms/button.d.cts +5 -3
  88. package/dist/atoms/button.d.ts +5 -3
  89. package/dist/atoms/button.js +2 -1
  90. package/dist/atoms/button.type.cjs.map +1 -1
  91. package/dist/atoms/button.type.d.cts +3 -1
  92. package/dist/atoms/button.type.d.ts +3 -1
  93. package/dist/atoms/call-out.cjs +78 -1
  94. package/dist/atoms/call-out.cjs.map +1 -1
  95. package/dist/atoms/call-out.d.cts +13 -1
  96. package/dist/atoms/call-out.d.ts +13 -1
  97. package/dist/atoms/call-out.js +2 -1
  98. package/dist/atoms/check-box-card.cjs +78 -1
  99. package/dist/atoms/check-box-card.cjs.map +1 -1
  100. package/dist/atoms/check-box-card.d.cts +12 -1
  101. package/dist/atoms/check-box-card.d.ts +12 -1
  102. package/dist/atoms/check-box-card.js +2 -1
  103. package/dist/atoms/check-box-group.cjs +40 -2
  104. package/dist/atoms/check-box-group.cjs.map +1 -1
  105. package/dist/atoms/check-box-group.d.cts +6 -0
  106. package/dist/atoms/check-box-group.d.ts +6 -0
  107. package/dist/atoms/check-box-group.js +2 -1
  108. package/dist/atoms/check-box.cjs +37 -2
  109. package/dist/atoms/check-box.cjs.map +1 -1
  110. package/dist/atoms/check-box.d.cts +5 -2
  111. package/dist/atoms/check-box.d.ts +5 -2
  112. package/dist/atoms/check-box.js +2 -1
  113. package/dist/atoms/code.cjs +73 -1
  114. package/dist/atoms/code.cjs.map +1 -1
  115. package/dist/atoms/code.d.cts +12 -1
  116. package/dist/atoms/code.d.ts +12 -1
  117. package/dist/atoms/code.js +2 -1
  118. package/dist/atoms/data-list.cjs +77 -1
  119. package/dist/atoms/data-list.cjs.map +1 -1
  120. package/dist/atoms/data-list.d.cts +14 -1
  121. package/dist/atoms/data-list.d.ts +14 -1
  122. package/dist/atoms/data-list.js +2 -1
  123. package/dist/atoms/dialog.cjs +49 -6
  124. package/dist/atoms/dialog.cjs.map +1 -1
  125. package/dist/atoms/dialog.js +4 -3
  126. package/dist/atoms/drawer.cjs +33 -3
  127. package/dist/atoms/drawer.cjs.map +1 -1
  128. package/dist/atoms/drawer.js +3 -2
  129. package/dist/atoms/dropdown-menu.cjs +63 -12
  130. package/dist/atoms/dropdown-menu.cjs.map +1 -1
  131. package/dist/atoms/dropdown-menu.d.cts +27 -17
  132. package/dist/atoms/dropdown-menu.d.ts +27 -17
  133. package/dist/atoms/dropdown-menu.js +3 -1
  134. package/dist/atoms/ellipsis-tooltip.cjs +73 -22
  135. package/dist/atoms/ellipsis-tooltip.cjs.map +1 -1
  136. package/dist/atoms/ellipsis-tooltip.d.cts +1 -0
  137. package/dist/atoms/ellipsis-tooltip.d.ts +1 -0
  138. package/dist/atoms/ellipsis-tooltip.js +5 -3
  139. package/dist/atoms/field-error-wrapper.cjs +39 -2
  140. package/dist/atoms/field-error-wrapper.cjs.map +1 -1
  141. package/dist/atoms/field-error-wrapper.js +3 -2
  142. package/dist/atoms/heading.cjs +38 -2
  143. package/dist/atoms/heading.cjs.map +1 -1
  144. package/dist/atoms/heading.d.cts +3 -1
  145. package/dist/atoms/heading.d.ts +3 -1
  146. package/dist/atoms/heading.js +2 -1
  147. package/dist/atoms/hover-card.cjs +85 -1
  148. package/dist/atoms/hover-card.cjs.map +1 -1
  149. package/dist/atoms/hover-card.d.cts +14 -1
  150. package/dist/atoms/hover-card.d.ts +14 -1
  151. package/dist/atoms/hover-card.js +3 -1
  152. package/dist/atoms/icon-button.cjs +33 -3
  153. package/dist/atoms/icon-button.cjs.map +1 -1
  154. package/dist/atoms/icon-button.d.cts +5 -3
  155. package/dist/atoms/icon-button.d.ts +5 -3
  156. package/dist/atoms/icon-button.js +2 -1
  157. package/dist/atoms/index.cjs +996 -506
  158. package/dist/atoms/index.cjs.map +1 -1
  159. package/dist/atoms/index.d.cts +18 -2
  160. package/dist/atoms/index.d.ts +18 -2
  161. package/dist/atoms/index.js +82 -80
  162. package/dist/atoms/link.cjs +40 -2
  163. package/dist/atoms/link.cjs.map +1 -1
  164. package/dist/atoms/link.d.cts +3 -1
  165. package/dist/atoms/link.d.ts +3 -1
  166. package/dist/atoms/link.js +2 -1
  167. package/dist/atoms/list.cjs +43 -4
  168. package/dist/atoms/list.cjs.map +1 -1
  169. package/dist/atoms/list.js +3 -2
  170. package/dist/atoms/pagination.cjs +100 -42
  171. package/dist/atoms/pagination.cjs.map +1 -1
  172. package/dist/atoms/pagination.d.cts +4 -0
  173. package/dist/atoms/pagination.d.ts +4 -0
  174. package/dist/atoms/pagination.js +5 -4
  175. package/dist/atoms/popover.cjs +85 -1
  176. package/dist/atoms/popover.cjs.map +1 -1
  177. package/dist/atoms/popover.d.cts +16 -1
  178. package/dist/atoms/popover.d.ts +16 -1
  179. package/dist/atoms/popover.js +3 -1
  180. package/dist/atoms/progress.cjs +71 -1
  181. package/dist/atoms/progress.cjs.map +1 -1
  182. package/dist/atoms/progress.d.cts +12 -1
  183. package/dist/atoms/progress.d.ts +12 -1
  184. package/dist/atoms/progress.js +2 -1
  185. package/dist/atoms/radio-cards.cjs +78 -1
  186. package/dist/atoms/radio-cards.cjs.map +1 -1
  187. package/dist/atoms/radio-cards.d.cts +12 -1
  188. package/dist/atoms/radio-cards.d.ts +12 -1
  189. package/dist/atoms/radio-cards.js +2 -1
  190. package/dist/atoms/radio-group.cjs +78 -1
  191. package/dist/atoms/radio-group.cjs.map +1 -1
  192. package/dist/atoms/radio-group.d.cts +12 -1
  193. package/dist/atoms/radio-group.d.ts +12 -1
  194. package/dist/atoms/radio-group.js +2 -1
  195. package/dist/atoms/radio.cjs +71 -1
  196. package/dist/atoms/radio.cjs.map +1 -1
  197. package/dist/atoms/radio.d.cts +12 -1
  198. package/dist/atoms/radio.d.ts +12 -1
  199. package/dist/atoms/radio.js +2 -1
  200. package/dist/atoms/segmented-control.cjs.map +1 -1
  201. package/dist/atoms/segmented-control.js +1 -1
  202. package/dist/atoms/select.cjs +78 -24
  203. package/dist/atoms/select.cjs.map +1 -1
  204. package/dist/atoms/select.d.cts +14 -4
  205. package/dist/atoms/select.d.ts +14 -4
  206. package/dist/atoms/select.js +3 -1
  207. package/dist/atoms/switch.cjs +71 -1
  208. package/dist/atoms/switch.cjs.map +1 -1
  209. package/dist/atoms/switch.d.cts +12 -1
  210. package/dist/atoms/switch.d.ts +12 -1
  211. package/dist/atoms/switch.js +2 -1
  212. package/dist/atoms/tab-nav.cjs +76 -1
  213. package/dist/atoms/tab-nav.cjs.map +1 -1
  214. package/dist/atoms/tab-nav.d.cts +16 -1
  215. package/dist/atoms/tab-nav.d.ts +16 -1
  216. package/dist/atoms/tab-nav.js +2 -1
  217. package/dist/atoms/tabs.cjs +76 -1
  218. package/dist/atoms/tabs.cjs.map +1 -1
  219. package/dist/atoms/tabs.d.cts +19 -1
  220. package/dist/atoms/tabs.d.ts +19 -1
  221. package/dist/atoms/tabs.js +2 -1
  222. package/dist/atoms/tooltip.cjs +46 -9
  223. package/dist/atoms/tooltip.cjs.map +1 -1
  224. package/dist/atoms/tooltip.js +3 -1
  225. package/dist/atoms/typo.cjs +39 -2
  226. package/dist/atoms/typo.cjs.map +1 -1
  227. package/dist/atoms/typo.d.cts +3 -1
  228. package/dist/atoms/typo.d.ts +3 -1
  229. package/dist/atoms/typo.js +2 -1
  230. package/dist/chunk-24PX34TH.js +42 -0
  231. package/dist/chunk-24PX34TH.js.map +1 -0
  232. package/dist/{chunk-EWFZXCMV.js → chunk-2FB75HU2.js} +3 -3
  233. package/dist/{chunk-HTNDVNLQ.js → chunk-2I37QLRA.js} +11 -11
  234. package/dist/{chunk-ZVDAEY5Q.js → chunk-2LCH3PDF.js} +14 -4
  235. package/dist/chunk-2LCH3PDF.js.map +1 -0
  236. package/dist/{chunk-3NUQAVE6.js → chunk-2M3UFZUD.js} +15 -2
  237. package/dist/chunk-2M3UFZUD.js.map +1 -0
  238. package/dist/{chunk-7R65MUL6.js → chunk-2O7NVLVP.js} +6 -6
  239. package/dist/{chunk-OE2AVQED.js → chunk-2SM37SB4.js} +7 -7
  240. package/dist/{chunk-FMAOB6BX.js → chunk-2WNLUQX5.js} +7 -7
  241. package/dist/chunk-3TOUVBIB.js +34 -0
  242. package/dist/chunk-3TOUVBIB.js.map +1 -0
  243. package/dist/{chunk-ADD4KFPG.js → chunk-447H6BVE.js} +7 -7
  244. package/dist/{chunk-W7TBPRHG.js → chunk-5OW76AER.js} +2 -2
  245. package/dist/chunk-6TU647KJ.js +37 -0
  246. package/dist/chunk-6TU647KJ.js.map +1 -0
  247. package/dist/{chunk-62HSZXVT.js → chunk-6YJGQWD6.js} +8 -8
  248. package/dist/{chunk-AA6OYHCE.js → chunk-7JW5Z2TL.js} +5 -5
  249. package/dist/{chunk-ZA4NYPSW.js → chunk-7PBLFV5L.js} +6 -6
  250. package/dist/{chunk-XK6VEVOK.js → chunk-7RJYF5L3.js} +14 -4
  251. package/dist/chunk-7RJYF5L3.js.map +1 -0
  252. package/dist/{chunk-HBQY4ELG.js → chunk-A26UWBVB.js} +4 -4
  253. package/dist/{chunk-BYFSYL7V.js → chunk-A4YOY75P.js} +4 -4
  254. package/dist/{chunk-LSDD4TAP.js → chunk-AJTGTGOC.js} +3 -3
  255. package/dist/{chunk-ADAQSPUA.js → chunk-BEKSO5JG.js} +2 -2
  256. package/dist/chunk-BI6TW3ZO.js +51 -0
  257. package/dist/chunk-BI6TW3ZO.js.map +1 -0
  258. package/dist/chunk-BK74U562.js +52 -0
  259. package/dist/chunk-BK74U562.js.map +1 -0
  260. package/dist/{chunk-JWAQUXGB.js → chunk-BZ3EXV6A.js} +3 -3
  261. package/dist/{chunk-Z34HR7RE.js → chunk-C2G3IB7G.js} +2 -2
  262. package/dist/chunk-CGDBUDY3.js +37 -0
  263. package/dist/chunk-CGDBUDY3.js.map +1 -0
  264. package/dist/chunk-DX3DLP5Z.js +39 -0
  265. package/dist/chunk-DX3DLP5Z.js.map +1 -0
  266. package/dist/{chunk-4U6DFH7Z.js → chunk-E6GCU5IQ.js} +2 -2
  267. package/dist/chunk-EIKFXUNC.js +39 -0
  268. package/dist/chunk-EIKFXUNC.js.map +1 -0
  269. package/dist/{chunk-CSKNBWPB.js → chunk-EZN5PMTC.js} +3 -3
  270. package/dist/chunk-EZN5PMTC.js.map +1 -0
  271. package/dist/{chunk-ZOPYFDLO.js → chunk-GAA3RTRW.js} +2 -2
  272. package/dist/{chunk-RSZDAY62.js → chunk-GE4M5GOQ.js} +3 -3
  273. package/dist/chunk-GI4AN2IZ.js +42 -0
  274. package/dist/chunk-GI4AN2IZ.js.map +1 -0
  275. package/dist/{chunk-RNRZ3LV7.js → chunk-GPULIICW.js} +8 -8
  276. package/dist/{chunk-K36TPMKL.js → chunk-GPZXD762.js} +18 -3
  277. package/dist/chunk-GPZXD762.js.map +1 -0
  278. package/dist/{chunk-PMJIFLDT.js → chunk-GR4PG6HY.js} +20 -3
  279. package/dist/chunk-GR4PG6HY.js.map +1 -0
  280. package/dist/{chunk-7PF6I4RN.js → chunk-GRDRXD53.js} +2 -2
  281. package/dist/{chunk-SH6FSA7T.js → chunk-GREYLAMY.js} +6 -6
  282. package/dist/{chunk-SAEPW5JF.js → chunk-GYSRHZRS.js} +4 -4
  283. package/dist/{chunk-UMUSNH2D.js → chunk-H3GQHGFA.js} +5 -5
  284. package/dist/{chunk-OILH5J7Q.js → chunk-HH6LML5K.js} +8 -8
  285. package/dist/{chunk-SE5TPTP2.js → chunk-IA74OBFY.js} +58 -41
  286. package/dist/chunk-IA74OBFY.js.map +1 -0
  287. package/dist/{chunk-KP4SGRJZ.js → chunk-IM6E52L2.js} +11 -11
  288. package/dist/{chunk-TVDKGMBI.js → chunk-IT7ZTP7F.js} +1 -1
  289. package/dist/chunk-IT7ZTP7F.js.map +1 -0
  290. package/dist/{chunk-6OKBTWEC.js → chunk-J7N2IZQW.js} +6 -6
  291. package/dist/{chunk-EEAHZCIK.js → chunk-JCUG2XKB.js} +2 -2
  292. package/dist/chunk-JETG3WEI.js +39 -0
  293. package/dist/chunk-JETG3WEI.js.map +1 -0
  294. package/dist/{chunk-REPTW53S.js → chunk-JNEGSY5N.js} +3 -3
  295. package/dist/chunk-KNIIDDYM.js +34 -0
  296. package/dist/chunk-KNIIDDYM.js.map +1 -0
  297. package/dist/{chunk-4TST4UK5.js → chunk-KO3V7KB6.js} +2 -2
  298. package/dist/{chunk-KTQREW2K.js → chunk-LIWQ47VQ.js} +9 -9
  299. package/dist/{chunk-B37MCN6F.js → chunk-LQ3WGFS7.js} +8 -8
  300. package/dist/{chunk-YADSNPMG.js → chunk-M77YPVQN.js} +3 -3
  301. package/dist/{chunk-GTO7GG2K.js → chunk-MCKWO7K4.js} +5 -5
  302. package/dist/{chunk-OHNBVT52.js → chunk-MGR37YQB.js} +4 -4
  303. package/dist/{chunk-QDC3LFHS.js → chunk-MMLVZWMD.js} +3 -3
  304. package/dist/{chunk-3G3RPU6Q.js → chunk-MP5KZULQ.js} +12 -12
  305. package/dist/{chunk-JRT6KTBG.js → chunk-MSLSD7F6.js} +3 -3
  306. package/dist/{chunk-FGLOHHYP.js → chunk-MSM2QG23.js} +10 -10
  307. package/dist/{chunk-V7IC4EAC.js → chunk-NFMEBYNY.js} +5 -5
  308. package/dist/{chunk-C6ZC7TXX.js → chunk-NIHOKIYW.js} +6 -6
  309. package/dist/{chunk-BESTU2AY.js → chunk-NLHVQJQ2.js} +19 -3
  310. package/dist/chunk-NLHVQJQ2.js.map +1 -0
  311. package/dist/{chunk-M2PVHXOE.js → chunk-NYG34MV6.js} +3 -3
  312. package/dist/{chunk-N7NDDJW5.js → chunk-OA3DGWVL.js} +16 -16
  313. package/dist/{chunk-XLKJYRFY.js → chunk-OBWQ3N5D.js} +4 -4
  314. package/dist/{chunk-IN6S7PPW.js → chunk-OEHVGPWL.js} +17 -17
  315. package/dist/chunk-OLJN3WXR.js +1 -0
  316. package/dist/{chunk-X4OCUESK.js → chunk-OPYRV6XJ.js} +2 -2
  317. package/dist/{chunk-6QVHJ5WW.js → chunk-OQN4E2QP.js} +4 -4
  318. package/dist/{chunk-LE6CNJWH.js → chunk-OWQUXTQ2.js} +4 -4
  319. package/dist/{chunk-NTJLECYY.js → chunk-OYXUWBKS.js} +6 -6
  320. package/dist/{chunk-B5CKZFDM.js → chunk-PE4EBBU4.js} +3 -3
  321. package/dist/{chunk-5TZNUXBT.js → chunk-PXMJK5D5.js} +6 -6
  322. package/dist/{chunk-Y4U24VXI.js → chunk-Q3M6GFHY.js} +3 -3
  323. package/dist/{chunk-ZFTQ2XBH.js → chunk-QPL7SJQM.js} +3 -3
  324. package/dist/{chunk-NX5ESRCX.js → chunk-RMVVV5NH.js} +7 -7
  325. package/dist/chunk-RMW3MQF5.js +42 -0
  326. package/dist/chunk-RMW3MQF5.js.map +1 -0
  327. package/dist/{chunk-Q7KT3UPO.js → chunk-RUJZ5PE7.js} +4 -4
  328. package/dist/chunk-SA7AYYQS.js +39 -0
  329. package/dist/chunk-SA7AYYQS.js.map +1 -0
  330. package/dist/{chunk-6SQZJN5Y.js → chunk-T2CGNUCP.js} +7 -7
  331. package/dist/chunk-T73HHR3I.js +67 -0
  332. package/dist/chunk-T73HHR3I.js.map +1 -0
  333. package/dist/chunk-TNNF5Q62.js +34 -0
  334. package/dist/chunk-TNNF5Q62.js.map +1 -0
  335. package/dist/{chunk-SLFUYRIC.js → chunk-TU6SGJ5Z.js} +6 -6
  336. package/dist/{chunk-AHXS2MBK.js → chunk-TYEGB5FQ.js} +4 -4
  337. package/dist/{chunk-DQ6EIA2T.js → chunk-UFM3EL52.js} +7 -7
  338. package/dist/chunk-UFRB2BVD.js +34 -0
  339. package/dist/chunk-UFRB2BVD.js.map +1 -0
  340. package/dist/chunk-UFWDQGOK.js +36 -0
  341. package/dist/chunk-UFWDQGOK.js.map +1 -0
  342. package/dist/{chunk-CNW3YEAK.js → chunk-VD5ZDFCM.js} +2 -2
  343. package/dist/chunk-VFQD57ZY.js +27 -0
  344. package/dist/chunk-VFQD57ZY.js.map +1 -0
  345. package/dist/chunk-VOME2TE7.js +641 -0
  346. package/dist/chunk-VOME2TE7.js.map +1 -0
  347. package/dist/{chunk-W7X7KSJP.js → chunk-WG5OK3YN.js} +19 -3
  348. package/dist/chunk-WG5OK3YN.js.map +1 -0
  349. package/dist/{chunk-64XYTE54.js → chunk-WY37V3W4.js} +7 -7
  350. package/dist/chunk-WYWM2HSZ.js +33 -0
  351. package/dist/chunk-WYWM2HSZ.js.map +1 -0
  352. package/dist/{chunk-MJMHPIYX.js → chunk-XOQXIPLL.js} +2 -2
  353. package/dist/{chunk-YDNVHAS4.js → chunk-YCLYKBWZ.js} +10 -10
  354. package/dist/{chunk-OOXXMKJS.js → chunk-YGNHAFBW.js} +5 -5
  355. package/dist/{chunk-6PFEG7GQ.js → chunk-YWWYA2JZ.js} +6 -6
  356. package/dist/chunk-YXMB4MCM.js +87 -0
  357. package/dist/chunk-YXMB4MCM.js.map +1 -0
  358. package/dist/{chunk-O5FEYLEG.js → chunk-Z5LPHG2D.js} +3 -3
  359. package/dist/{chunk-6HMQEUHX.js → chunk-ZAFLWQOV.js} +5 -5
  360. package/dist/{chunk-GVUXGWAM.js → chunk-ZC2JPF7B.js} +13 -13
  361. package/dist/{chunk-VYCYVN3L.js → chunk-ZCGH6TJ3.js} +16 -3
  362. package/dist/chunk-ZCGH6TJ3.js.map +1 -0
  363. package/dist/{chunk-5JQOU3IR.js → chunk-ZCQMCIT5.js} +6 -6
  364. package/dist/chunk-ZPUNTAVI.js +38 -0
  365. package/dist/chunk-ZPUNTAVI.js.map +1 -0
  366. package/dist/{chunk-LIV5LHHZ.js → chunk-ZUL3NYQ4.js} +2 -2
  367. package/dist/{chunk-O7DAGKLJ.js → chunk-ZWYQ44CB.js} +12 -12
  368. package/dist/context/dynamic-form-context.cjs +54 -4
  369. package/dist/context/dynamic-form-context.cjs.map +1 -1
  370. package/dist/context/dynamic-form-context.js +5 -4
  371. package/dist/context/index.cjs +54 -4
  372. package/dist/context/index.cjs.map +1 -1
  373. package/dist/context/index.js +5 -4
  374. package/dist/icon.cjs +492 -2
  375. package/dist/icon.cjs.map +1 -1
  376. package/dist/icon.d.cts +1 -1
  377. package/dist/icon.d.ts +1 -1
  378. package/dist/icon.js +493 -3
  379. package/dist/index.cjs +2621 -1631
  380. package/dist/index.cjs.map +1 -1
  381. package/dist/index.css +73 -0
  382. package/dist/index.d.cts +20 -4
  383. package/dist/index.d.ts +20 -4
  384. package/dist/index.js +664 -168
  385. package/dist/molecules/autocomplete-textfield.cjs +111 -46
  386. package/dist/molecules/autocomplete-textfield.cjs.map +1 -1
  387. package/dist/molecules/autocomplete-textfield.js +5 -3
  388. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs +367 -209
  389. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs.map +1 -1
  390. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +21 -20
  391. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs +39 -2
  392. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs.map +1 -1
  393. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +4 -3
  394. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs +293 -164
  395. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs.map +1 -1
  396. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +16 -15
  397. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.cjs +33 -3
  398. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.cjs.map +1 -1
  399. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.js +4 -3
  400. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs +85 -19
  401. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs.map +1 -1
  402. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.js +5 -4
  403. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs +217 -134
  404. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs.map +1 -1
  405. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +10 -9
  406. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs +172 -110
  407. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs.map +1 -1
  408. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +7 -6
  409. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs +39 -2
  410. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs.map +1 -1
  411. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +6 -5
  412. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs +80 -20
  413. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs.map +1 -1
  414. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +7 -6
  415. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs +64 -7
  416. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs.map +1 -1
  417. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +6 -5
  418. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs +275 -115
  419. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs.map +1 -1
  420. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +25 -24
  421. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs +76 -17
  422. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs.map +1 -1
  423. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +7 -6
  424. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs +49 -5
  425. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs.map +1 -1
  426. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.js +5 -4
  427. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs +49 -5
  428. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs.map +1 -1
  429. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.js +4 -3
  430. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs +318 -153
  431. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
  432. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +28 -27
  433. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs +346 -181
  434. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
  435. package/dist/molecules/curriculumV2/CurriculumContents/index.js +31 -30
  436. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs +39 -2
  437. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs.map +1 -1
  438. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.js +3 -2
  439. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs +39 -2
  440. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs.map +1 -1
  441. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +5 -4
  442. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs +39 -2
  443. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs.map +1 -1
  444. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.js +3 -2
  445. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs +195 -135
  446. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
  447. package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +9 -8
  448. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs +39 -2
  449. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs.map +1 -1
  450. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +7 -6
  451. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs +65 -8
  452. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
  453. package/dist/molecules/curriculumV2/curriculum-sub-nav.js +6 -5
  454. package/dist/molecules/curriculumV2/index.cjs +406 -220
  455. package/dist/molecules/curriculumV2/index.cjs.map +1 -1
  456. package/dist/molecules/curriculumV2/index.js +38 -37
  457. package/dist/molecules/date-picker/date-picker-button.cjs +160 -64
  458. package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
  459. package/dist/molecules/date-picker/date-picker-button.d.cts +1 -0
  460. package/dist/molecules/date-picker/date-picker-button.d.ts +1 -0
  461. package/dist/molecules/date-picker/date-picker-button.js +10 -8
  462. package/dist/molecules/date-picker/index.cjs +242 -146
  463. package/dist/molecules/date-picker/index.cjs.map +1 -1
  464. package/dist/molecules/date-picker/index.js +9 -7
  465. package/dist/molecules/description-json-render.cjs +182 -120
  466. package/dist/molecules/description-json-render.cjs.map +1 -1
  467. package/dist/molecules/description-json-render.js +7 -6
  468. package/dist/molecules/download-card.cjs +67 -8
  469. package/dist/molecules/download-card.cjs.map +1 -1
  470. package/dist/molecules/download-card.js +5 -4
  471. package/dist/molecules/dynamic-field.cjs +222 -72
  472. package/dist/molecules/dynamic-field.cjs.map +1 -1
  473. package/dist/molecules/dynamic-field.js +13 -11
  474. package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs +359 -267
  475. package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs.map +1 -1
  476. package/dist/molecules/dynamic-form-editor-field-editor-panel.js +10 -8
  477. package/dist/molecules/dynamic-form-editor-field-list-panel.cjs +115 -47
  478. package/dist/molecules/dynamic-form-editor-field-list-panel.cjs.map +1 -1
  479. package/dist/molecules/dynamic-form-editor-field-list-panel.js +6 -4
  480. package/dist/molecules/dynamic-form-editor-issues-panel.cjs +39 -2
  481. package/dist/molecules/dynamic-form-editor-issues-panel.cjs.map +1 -1
  482. package/dist/molecules/dynamic-form-editor-issues-panel.js +4 -3
  483. package/dist/molecules/dynamic-form-editor-preview-panel.cjs +239 -89
  484. package/dist/molecules/dynamic-form-editor-preview-panel.cjs.map +1 -1
  485. package/dist/molecules/dynamic-form-editor-preview-panel.js +16 -14
  486. package/dist/molecules/dynamic-form-editor.cjs +571 -407
  487. package/dist/molecules/dynamic-form-editor.cjs.map +1 -1
  488. package/dist/molecules/dynamic-form-editor.js +23 -21
  489. package/dist/molecules/dynamic-form.cjs +235 -85
  490. package/dist/molecules/dynamic-form.cjs.map +1 -1
  491. package/dist/molecules/dynamic-form.js +14 -12
  492. package/dist/molecules/expand-table/index.cjs +100 -42
  493. package/dist/molecules/expand-table/index.cjs.map +1 -1
  494. package/dist/molecules/expand-table/index.js +7 -6
  495. package/dist/molecules/force-refresh.cjs +79 -24
  496. package/dist/molecules/force-refresh.cjs.map +1 -1
  497. package/dist/molecules/force-refresh.js +4 -3
  498. package/dist/molecules/form/form.cjs +54 -4
  499. package/dist/molecules/form/form.cjs.map +1 -1
  500. package/dist/molecules/form/form.js +4 -3
  501. package/dist/molecules/form/index.cjs +54 -4
  502. package/dist/molecules/form/index.cjs.map +1 -1
  503. package/dist/molecules/form/index.js +4 -3
  504. package/dist/molecules/ghost-post.cjs +72 -14
  505. package/dist/molecules/ghost-post.cjs.map +1 -1
  506. package/dist/molecules/ghost-post.d.cts +1 -0
  507. package/dist/molecules/ghost-post.d.ts +1 -0
  508. package/dist/molecules/ghost-post.js +5 -4
  509. package/dist/molecules/index.cjs +1334 -989
  510. package/dist/molecules/index.cjs.map +1 -1
  511. package/dist/molecules/index.d.cts +1 -0
  512. package/dist/molecules/index.d.ts +1 -0
  513. package/dist/molecules/index.js +79 -78
  514. package/dist/molecules/learning-post.cjs +109 -37
  515. package/dist/molecules/learning-post.cjs.map +1 -1
  516. package/dist/molecules/learning-post.d.cts +1 -0
  517. package/dist/molecules/learning-post.d.ts +1 -0
  518. package/dist/molecules/learning-post.js +7 -6
  519. package/dist/molecules/navigation.cjs +49 -5
  520. package/dist/molecules/navigation.cjs.map +1 -1
  521. package/dist/molecules/navigation.js +4 -3
  522. package/dist/molecules/one-on-one-guide-list.cjs +56 -6
  523. package/dist/molecules/one-on-one-guide-list.cjs.map +1 -1
  524. package/dist/molecules/one-on-one-guide-list.js +5 -4
  525. package/dist/molecules/radio-button-card.cjs +77 -13
  526. package/dist/molecules/radio-button-card.cjs.map +1 -1
  527. package/dist/molecules/radio-button-card.js +4 -3
  528. package/dist/molecules/stepper.cjs +55 -4
  529. package/dist/molecules/stepper.cjs.map +1 -1
  530. package/dist/molecules/stepper.js +5 -4
  531. package/dist/molecules/tag-selector.cjs +256 -180
  532. package/dist/molecules/tag-selector.cjs.map +1 -1
  533. package/dist/molecules/tag-selector.js +9 -7
  534. package/dist/molecules/time-select.cjs +180 -126
  535. package/dist/molecules/time-select.cjs.map +1 -1
  536. package/dist/molecules/time-select.d.cts +1 -0
  537. package/dist/molecules/time-select.d.ts +1 -0
  538. package/dist/molecules/time-select.js +7 -5
  539. package/dist/molecules/training-info-guideline.cjs +75 -11
  540. package/dist/molecules/training-info-guideline.cjs.map +1 -1
  541. package/dist/molecules/training-info-guideline.js +7 -6
  542. package/dist/theme/theme-provider.cjs +53 -1
  543. package/dist/theme/theme-provider.cjs.map +1 -1
  544. package/dist/theme/theme-provider.d.cts +18 -2
  545. package/dist/theme/theme-provider.d.ts +18 -2
  546. package/dist/theme/theme-provider.js +4 -1
  547. package/dist/utils/convert-button-size.d.cts +1 -0
  548. package/dist/utils/convert-button-size.d.ts +1 -0
  549. package/dist/utils/convert-icon-button-size.d.cts +1 -0
  550. package/dist/utils/convert-icon-button-size.d.ts +1 -0
  551. package/dist/utils/curriculum.utils.cjs.map +1 -1
  552. package/dist/utils/curriculum.utils.js +1 -1
  553. package/dist/utils/get-callout-icon-component.cjs.map +1 -1
  554. package/dist/utils/get-callout-icon-component.js +2 -2
  555. package/dist/utils/index.cjs +25 -0
  556. package/dist/utils/index.cjs.map +1 -1
  557. package/dist/utils/index.d.cts +2 -0
  558. package/dist/utils/index.d.ts +2 -0
  559. package/dist/utils/index.js +7 -3
  560. package/dist/utils/resolve-color.cjs +51 -0
  561. package/dist/utils/resolve-color.cjs.map +1 -0
  562. package/dist/utils/resolve-color.d.cts +38 -0
  563. package/dist/utils/resolve-color.d.ts +38 -0
  564. package/dist/utils/resolve-color.js +8 -0
  565. package/dist/utils/resolve-color.js.map +1 -0
  566. package/package.json +1 -1
  567. package/src/atoms/alert-dialog.tsx +38 -1
  568. package/src/atoms/avatar.tsx +18 -3
  569. package/src/atoms/badge.tsx +15 -22
  570. package/src/atoms/blockquote.tsx +31 -1
  571. package/src/atoms/button.tsx +12 -3
  572. package/src/atoms/button.type.ts +6 -1
  573. package/src/atoms/call-out.tsx +48 -1
  574. package/src/atoms/check-box-card.tsx +51 -1
  575. package/src/atoms/check-box-group.tsx +19 -2
  576. package/src/atoms/check-box.tsx +17 -3
  577. package/src/atoms/code.tsx +31 -1
  578. package/src/atoms/data-list.tsx +47 -1
  579. package/src/atoms/dropdown-menu.tsx +53 -6
  580. package/src/atoms/heading.tsx +22 -4
  581. package/src/atoms/hover-card.tsx +37 -1
  582. package/src/atoms/icon-button.tsx +12 -3
  583. package/src/atoms/link.tsx +21 -3
  584. package/src/atoms/pagination.tsx +21 -2
  585. package/src/atoms/popover.tsx +37 -1
  586. package/src/atoms/progress.tsx +31 -1
  587. package/src/atoms/radio-cards.tsx +49 -1
  588. package/src/atoms/radio-group.tsx +49 -1
  589. package/src/atoms/radio.tsx +31 -1
  590. package/src/atoms/segmented-control.tsx +3 -0
  591. package/src/atoms/select.tsx +67 -19
  592. package/src/atoms/switch.tsx +31 -1
  593. package/src/atoms/tab-nav.tsx +42 -1
  594. package/src/atoms/tabs.tsx +40 -1
  595. package/src/atoms/tooltip.tsx +14 -1
  596. package/src/atoms/typo.tsx +21 -3
  597. package/src/icon.ts +303 -57
  598. package/src/molecules/radio-button-card.tsx +6 -4
  599. package/src/theme/theme-provider.tsx +38 -3
  600. package/src/utils/index.ts +2 -1
  601. package/src/utils/resolve-color.ts +86 -0
  602. package/dist/chunk-365QMK4D.js +0 -7
  603. package/dist/chunk-365QMK4D.js.map +0 -1
  604. package/dist/chunk-3NUQAVE6.js.map +0 -1
  605. package/dist/chunk-5AVBYDPB.js +0 -7
  606. package/dist/chunk-5AVBYDPB.js.map +0 -1
  607. package/dist/chunk-5ZITU5L7.js +0 -7
  608. package/dist/chunk-5ZITU5L7.js.map +0 -1
  609. package/dist/chunk-6DJOIRMF.js +0 -7
  610. package/dist/chunk-6DJOIRMF.js.map +0 -1
  611. package/dist/chunk-6IVCARWS.js +0 -7
  612. package/dist/chunk-6IVCARWS.js.map +0 -1
  613. package/dist/chunk-7FKRQQYK.js +0 -15
  614. package/dist/chunk-7FKRQQYK.js.map +0 -1
  615. package/dist/chunk-B6XJN6EC.js +0 -7
  616. package/dist/chunk-B6XJN6EC.js.map +0 -1
  617. package/dist/chunk-BESTU2AY.js.map +0 -1
  618. package/dist/chunk-CSKNBWPB.js.map +0 -1
  619. package/dist/chunk-DHZVOXFM.js +0 -35
  620. package/dist/chunk-DHZVOXFM.js.map +0 -1
  621. package/dist/chunk-FPD73OHW.js +0 -7
  622. package/dist/chunk-FPD73OHW.js.map +0 -1
  623. package/dist/chunk-HFVVQEOZ.js +0 -1
  624. package/dist/chunk-J242TTFH.js +0 -7
  625. package/dist/chunk-J242TTFH.js.map +0 -1
  626. package/dist/chunk-JU7GB6R2.js +0 -151
  627. package/dist/chunk-JU7GB6R2.js.map +0 -1
  628. package/dist/chunk-K36TPMKL.js.map +0 -1
  629. package/dist/chunk-KTSEZC6A.js +0 -49
  630. package/dist/chunk-KTSEZC6A.js.map +0 -1
  631. package/dist/chunk-MIMJ7LON.js +0 -7
  632. package/dist/chunk-MIMJ7LON.js.map +0 -1
  633. package/dist/chunk-O3T3TM3V.js +0 -7
  634. package/dist/chunk-O3T3TM3V.js.map +0 -1
  635. package/dist/chunk-OHMOP5PV.js +0 -7
  636. package/dist/chunk-OHMOP5PV.js.map +0 -1
  637. package/dist/chunk-OYM4XCHQ.js +0 -7
  638. package/dist/chunk-OYM4XCHQ.js.map +0 -1
  639. package/dist/chunk-PMJIFLDT.js.map +0 -1
  640. package/dist/chunk-SE5TPTP2.js.map +0 -1
  641. package/dist/chunk-SMLC2O3V.js +0 -42
  642. package/dist/chunk-SMLC2O3V.js.map +0 -1
  643. package/dist/chunk-TVDKGMBI.js.map +0 -1
  644. package/dist/chunk-VTJZMOSP.js +0 -7
  645. package/dist/chunk-VTJZMOSP.js.map +0 -1
  646. package/dist/chunk-VYCYVN3L.js.map +0 -1
  647. package/dist/chunk-W7X7KSJP.js.map +0 -1
  648. package/dist/chunk-X2GMDZ7M.js +0 -59
  649. package/dist/chunk-X2GMDZ7M.js.map +0 -1
  650. package/dist/chunk-XK6VEVOK.js.map +0 -1
  651. package/dist/chunk-YGL6SWKN.js +0 -7
  652. package/dist/chunk-YGL6SWKN.js.map +0 -1
  653. package/dist/chunk-YJ7ZFOYL.js +0 -7
  654. package/dist/chunk-YJ7ZFOYL.js.map +0 -1
  655. package/dist/chunk-ZVDAEY5Q.js.map +0 -1
  656. /package/dist/{chunk-EWFZXCMV.js.map → chunk-2FB75HU2.js.map} +0 -0
  657. /package/dist/{chunk-HTNDVNLQ.js.map → chunk-2I37QLRA.js.map} +0 -0
  658. /package/dist/{chunk-7R65MUL6.js.map → chunk-2O7NVLVP.js.map} +0 -0
  659. /package/dist/{chunk-OE2AVQED.js.map → chunk-2SM37SB4.js.map} +0 -0
  660. /package/dist/{chunk-FMAOB6BX.js.map → chunk-2WNLUQX5.js.map} +0 -0
  661. /package/dist/{chunk-ADD4KFPG.js.map → chunk-447H6BVE.js.map} +0 -0
  662. /package/dist/{chunk-W7TBPRHG.js.map → chunk-5OW76AER.js.map} +0 -0
  663. /package/dist/{chunk-62HSZXVT.js.map → chunk-6YJGQWD6.js.map} +0 -0
  664. /package/dist/{chunk-AA6OYHCE.js.map → chunk-7JW5Z2TL.js.map} +0 -0
  665. /package/dist/{chunk-ZA4NYPSW.js.map → chunk-7PBLFV5L.js.map} +0 -0
  666. /package/dist/{chunk-HBQY4ELG.js.map → chunk-A26UWBVB.js.map} +0 -0
  667. /package/dist/{chunk-BYFSYL7V.js.map → chunk-A4YOY75P.js.map} +0 -0
  668. /package/dist/{chunk-LSDD4TAP.js.map → chunk-AJTGTGOC.js.map} +0 -0
  669. /package/dist/{chunk-ADAQSPUA.js.map → chunk-BEKSO5JG.js.map} +0 -0
  670. /package/dist/{chunk-JWAQUXGB.js.map → chunk-BZ3EXV6A.js.map} +0 -0
  671. /package/dist/{chunk-Z34HR7RE.js.map → chunk-C2G3IB7G.js.map} +0 -0
  672. /package/dist/{chunk-4U6DFH7Z.js.map → chunk-E6GCU5IQ.js.map} +0 -0
  673. /package/dist/{chunk-ZOPYFDLO.js.map → chunk-GAA3RTRW.js.map} +0 -0
  674. /package/dist/{chunk-RSZDAY62.js.map → chunk-GE4M5GOQ.js.map} +0 -0
  675. /package/dist/{chunk-RNRZ3LV7.js.map → chunk-GPULIICW.js.map} +0 -0
  676. /package/dist/{chunk-7PF6I4RN.js.map → chunk-GRDRXD53.js.map} +0 -0
  677. /package/dist/{chunk-SH6FSA7T.js.map → chunk-GREYLAMY.js.map} +0 -0
  678. /package/dist/{chunk-SAEPW5JF.js.map → chunk-GYSRHZRS.js.map} +0 -0
  679. /package/dist/{chunk-UMUSNH2D.js.map → chunk-H3GQHGFA.js.map} +0 -0
  680. /package/dist/{chunk-OILH5J7Q.js.map → chunk-HH6LML5K.js.map} +0 -0
  681. /package/dist/{chunk-KP4SGRJZ.js.map → chunk-IM6E52L2.js.map} +0 -0
  682. /package/dist/{chunk-6OKBTWEC.js.map → chunk-J7N2IZQW.js.map} +0 -0
  683. /package/dist/{chunk-EEAHZCIK.js.map → chunk-JCUG2XKB.js.map} +0 -0
  684. /package/dist/{chunk-REPTW53S.js.map → chunk-JNEGSY5N.js.map} +0 -0
  685. /package/dist/{chunk-4TST4UK5.js.map → chunk-KO3V7KB6.js.map} +0 -0
  686. /package/dist/{chunk-KTQREW2K.js.map → chunk-LIWQ47VQ.js.map} +0 -0
  687. /package/dist/{chunk-B37MCN6F.js.map → chunk-LQ3WGFS7.js.map} +0 -0
  688. /package/dist/{chunk-YADSNPMG.js.map → chunk-M77YPVQN.js.map} +0 -0
  689. /package/dist/{chunk-GTO7GG2K.js.map → chunk-MCKWO7K4.js.map} +0 -0
  690. /package/dist/{chunk-OHNBVT52.js.map → chunk-MGR37YQB.js.map} +0 -0
  691. /package/dist/{chunk-QDC3LFHS.js.map → chunk-MMLVZWMD.js.map} +0 -0
  692. /package/dist/{chunk-3G3RPU6Q.js.map → chunk-MP5KZULQ.js.map} +0 -0
  693. /package/dist/{chunk-JRT6KTBG.js.map → chunk-MSLSD7F6.js.map} +0 -0
  694. /package/dist/{chunk-FGLOHHYP.js.map → chunk-MSM2QG23.js.map} +0 -0
  695. /package/dist/{chunk-V7IC4EAC.js.map → chunk-NFMEBYNY.js.map} +0 -0
  696. /package/dist/{chunk-C6ZC7TXX.js.map → chunk-NIHOKIYW.js.map} +0 -0
  697. /package/dist/{chunk-M2PVHXOE.js.map → chunk-NYG34MV6.js.map} +0 -0
  698. /package/dist/{chunk-N7NDDJW5.js.map → chunk-OA3DGWVL.js.map} +0 -0
  699. /package/dist/{chunk-XLKJYRFY.js.map → chunk-OBWQ3N5D.js.map} +0 -0
  700. /package/dist/{chunk-IN6S7PPW.js.map → chunk-OEHVGPWL.js.map} +0 -0
  701. /package/dist/{chunk-HFVVQEOZ.js.map → chunk-OLJN3WXR.js.map} +0 -0
  702. /package/dist/{chunk-X4OCUESK.js.map → chunk-OPYRV6XJ.js.map} +0 -0
  703. /package/dist/{chunk-6QVHJ5WW.js.map → chunk-OQN4E2QP.js.map} +0 -0
  704. /package/dist/{chunk-LE6CNJWH.js.map → chunk-OWQUXTQ2.js.map} +0 -0
  705. /package/dist/{chunk-NTJLECYY.js.map → chunk-OYXUWBKS.js.map} +0 -0
  706. /package/dist/{chunk-B5CKZFDM.js.map → chunk-PE4EBBU4.js.map} +0 -0
  707. /package/dist/{chunk-5TZNUXBT.js.map → chunk-PXMJK5D5.js.map} +0 -0
  708. /package/dist/{chunk-Y4U24VXI.js.map → chunk-Q3M6GFHY.js.map} +0 -0
  709. /package/dist/{chunk-ZFTQ2XBH.js.map → chunk-QPL7SJQM.js.map} +0 -0
  710. /package/dist/{chunk-NX5ESRCX.js.map → chunk-RMVVV5NH.js.map} +0 -0
  711. /package/dist/{chunk-Q7KT3UPO.js.map → chunk-RUJZ5PE7.js.map} +0 -0
  712. /package/dist/{chunk-6SQZJN5Y.js.map → chunk-T2CGNUCP.js.map} +0 -0
  713. /package/dist/{chunk-SLFUYRIC.js.map → chunk-TU6SGJ5Z.js.map} +0 -0
  714. /package/dist/{chunk-AHXS2MBK.js.map → chunk-TYEGB5FQ.js.map} +0 -0
  715. /package/dist/{chunk-DQ6EIA2T.js.map → chunk-UFM3EL52.js.map} +0 -0
  716. /package/dist/{chunk-CNW3YEAK.js.map → chunk-VD5ZDFCM.js.map} +0 -0
  717. /package/dist/{chunk-64XYTE54.js.map → chunk-WY37V3W4.js.map} +0 -0
  718. /package/dist/{chunk-MJMHPIYX.js.map → chunk-XOQXIPLL.js.map} +0 -0
  719. /package/dist/{chunk-YDNVHAS4.js.map → chunk-YCLYKBWZ.js.map} +0 -0
  720. /package/dist/{chunk-OOXXMKJS.js.map → chunk-YGNHAFBW.js.map} +0 -0
  721. /package/dist/{chunk-6PFEG7GQ.js.map → chunk-YWWYA2JZ.js.map} +0 -0
  722. /package/dist/{chunk-O5FEYLEG.js.map → chunk-Z5LPHG2D.js.map} +0 -0
  723. /package/dist/{chunk-6HMQEUHX.js.map → chunk-ZAFLWQOV.js.map} +0 -0
  724. /package/dist/{chunk-GVUXGWAM.js.map → chunk-ZC2JPF7B.js.map} +0 -0
  725. /package/dist/{chunk-5JQOU3IR.js.map → chunk-ZCQMCIT5.js.map} +0 -0
  726. /package/dist/{chunk-LIV5LHHZ.js.map → chunk-ZUL3NYQ4.js.map} +0 -0
  727. /package/dist/{chunk-O7DAGKLJ.js.map → chunk-ZWYQ44CB.js.map} +0 -0
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  DynamicFormEditorFieldEditorPanel
3
- } from "../chunk-3G3RPU6Q.js";
3
+ } from "../chunk-MP5KZULQ.js";
4
4
  import "../chunk-Z7WNKARH.js";
5
5
  import "../chunk-5XYPLDI5.js";
6
6
  import "../chunk-6NPTJBFE.js";
7
- import "../chunk-X2GMDZ7M.js";
8
- import "../chunk-XK6VEVOK.js";
7
+ import "../chunk-YXMB4MCM.js";
8
+ import "../chunk-ZCGH6TJ3.js";
9
+ import "../chunk-7RJYF5L3.js";
9
10
  import "../chunk-HF6GNDPV.js";
10
- import "../chunk-RP2RGCAW.js";
11
- import "../chunk-VYCYVN3L.js";
12
- import "../chunk-PMJIFLDT.js";
11
+ import "../chunk-GR4PG6HY.js";
13
12
  import "../chunk-LDBWASUA.js";
14
13
  import "../chunk-25HMMI7R.js";
15
- import "../chunk-ZVDAEY5Q.js";
14
+ import "../chunk-2LCH3PDF.js";
16
15
  import "../chunk-LQY4RKWI.js";
17
- import "../chunk-JU7GB6R2.js";
16
+ import "../chunk-RP2RGCAW.js";
17
+ import "../chunk-VOME2TE7.js";
18
18
  import "../chunk-JVXATVAC.js";
19
19
  import "../chunk-B3VSXNTH.js";
20
20
  import "../chunk-ZQE7SP6P.js";
@@ -31,6 +31,8 @@ import "../chunk-YSYJCYHY.js";
31
31
  import "../chunk-5OM2H6RI.js";
32
32
  import "../chunk-ZUYCXCPW.js";
33
33
  import "../chunk-YVFNJE4E.js";
34
+ import "../chunk-WYWM2HSZ.js";
35
+ import "../chunk-VFQD57ZY.js";
34
36
  import "../chunk-CRTRMMJ7.js";
35
37
  export {
36
38
  DynamicFormEditorFieldEditorPanel
@@ -52,8 +52,8 @@ __export(dynamic_form_editor_field_list_panel_exports, {
52
52
  DynamicFormEditorFieldListPanel: () => DynamicFormEditorFieldListPanel
53
53
  });
54
54
  module.exports = __toCommonJS(dynamic_form_editor_field_list_panel_exports);
55
- var import_react4 = require("react");
56
- var import_themes5 = require("@radix-ui/themes");
55
+ var import_react5 = require("react");
56
+ var import_themes6 = require("@radix-ui/themes");
57
57
 
58
58
  // src/atoms/card.tsx
59
59
  var import_react = require("react");
@@ -93,57 +93,112 @@ Card.displayName = "Card";
93
93
  var import_themes2 = require("@radix-ui/themes");
94
94
 
95
95
  // src/atoms/select.tsx
96
- var import_themes3 = require("@radix-ui/themes");
96
+ var import_themes4 = require("@radix-ui/themes");
97
+ var import_clsx2 = require("clsx");
98
+ var import_react3 = require("react");
99
+
100
+ // src/utils/resolve-color.ts
101
+ var SEMANTIC_COLOR_MAP = {
102
+ error: "red",
103
+ neutral: "gray",
104
+ success: "green",
105
+ accent: void 0
106
+ };
107
+ var CUSTOM_COLOR_MAP = {
108
+ black: { className: "tipp-accent-black", fallbackColor: "gray" }
109
+ };
110
+ var isSemanticColor = (color) => color !== void 0 && color in SEMANTIC_COLOR_MAP;
111
+ var isCustomColor = (color) => color !== void 0 && color in CUSTOM_COLOR_MAP;
112
+ var resolveColor = (color) => {
113
+ if (isCustomColor(color)) {
114
+ const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];
115
+ return { color: fallbackColor, className };
116
+ }
117
+ if (isSemanticColor(color)) {
118
+ return { color: SEMANTIC_COLOR_MAP[color] };
119
+ }
120
+ return { color };
121
+ };
122
+
123
+ // src/theme/theme-provider.tsx
97
124
  var import_react2 = require("react");
125
+ var import_themes3 = require("@radix-ui/themes");
126
+ var import_clsx = require("clsx");
98
127
  var import_jsx_runtime2 = require("react/jsx-runtime");
99
- var SelectContext = (0, import_react2.createContext)({
128
+ var ThemeAccentContext = (0, import_react2.createContext)(void 0);
129
+
130
+ // src/atoms/select.tsx
131
+ var import_jsx_runtime3 = require("react/jsx-runtime");
132
+ var SelectContext = (0, import_react3.createContext)({
100
133
  error: false
101
134
  });
102
- var Content = (0, import_react2.forwardRef)((props, ref) => {
103
- const _a = props, { className, isNavigation } = _a, rest = __objRest(_a, ["className", "isNavigation"]);
104
- const { error } = (0, import_react2.useContext)(SelectContext);
105
- const cls = (0, import_react2.useMemo)(() => {
135
+ var Content = (0, import_react3.forwardRef)((props, ref) => {
136
+ const _a = props, { className, isNavigation, color } = _a, rest = __objRest(_a, ["className", "isNavigation", "color"]);
137
+ const { error, color: contextColor } = (0, import_react3.useContext)(SelectContext);
138
+ const themeAccent = (0, import_react3.useContext)(ThemeAccentContext);
139
+ const { color: radixColor, className: colorClassName } = (0, import_react3.useMemo)(
140
+ () => {
141
+ var _a2;
142
+ return resolveColor((_a2 = color != null ? color : contextColor) != null ? _a2 : themeAccent);
143
+ },
144
+ [color, contextColor, themeAccent]
145
+ );
146
+ const appliedColor = colorClassName ? void 0 : radixColor;
147
+ const cls = (0, import_react3.useMemo)(() => {
106
148
  const etc = isNavigation ? "nav-select" : "";
107
149
  const errorCls = error ? "tipp-error" : "";
108
- return [etc, errorCls, className].join(" ");
109
- }, [className, error, isNavigation]);
110
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
111
- import_themes3.Select.Content,
150
+ return (0, import_clsx2.clsx)(etc, errorCls, colorClassName, className);
151
+ }, [className, colorClassName, error, isNavigation]);
152
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
153
+ import_themes4.Select.Content,
112
154
  __spreadProps(__spreadValues({
113
155
  position: "popper"
114
156
  }, rest), {
115
157
  className: cls,
158
+ color: appliedColor,
116
159
  ref
117
160
  })
118
161
  );
119
162
  });
120
163
  Content.displayName = "Select.Content";
121
- var Trigger = (0, import_react2.forwardRef)(
122
- (props, ref) => {
123
- const _a = props, { className } = _a, rest = __objRest(_a, ["className"]);
124
- const { error } = (0, import_react2.useContext)(SelectContext);
125
- const cls = (0, import_react2.useMemo)(() => {
126
- const errorCls = error ? "error" : "";
127
- return [errorCls, className].join(" ");
128
- }, [className, error]);
129
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_themes3.Select.Trigger, __spreadProps(__spreadValues({}, rest), { className: cls, ref }));
130
- }
131
- );
164
+ var Trigger = (0, import_react3.forwardRef)((props, ref) => {
165
+ const _a = props, { className, color } = _a, rest = __objRest(_a, ["className", "color"]);
166
+ const { error, color: contextColor } = (0, import_react3.useContext)(SelectContext);
167
+ const { color: radixColor, className: colorClassName } = (0, import_react3.useMemo)(
168
+ () => resolveColor(color != null ? color : contextColor),
169
+ [color, contextColor]
170
+ );
171
+ const appliedColor = colorClassName ? void 0 : radixColor;
172
+ const cls = (0, import_react3.useMemo)(() => {
173
+ const errorCls = error ? "error" : "";
174
+ return (0, import_clsx2.clsx)(errorCls, colorClassName, className);
175
+ }, [className, colorClassName, error]);
176
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
177
+ import_themes4.Select.Trigger,
178
+ __spreadProps(__spreadValues({}, rest), {
179
+ className: cls,
180
+ color: appliedColor,
181
+ ref
182
+ })
183
+ );
184
+ });
132
185
  Trigger.displayName = "Select.Trigger";
133
186
  function Root(props) {
134
- const _a = props, { error } = _a, rest = __objRest(_a, ["error"]);
135
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SelectContext.Provider, { value: { error }, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_themes3.Select.Root, __spreadValues({}, rest)) });
187
+ const _a = props, { error, color } = _a, rest = __objRest(_a, ["error", "color"]);
188
+ const value = (0, import_react3.useMemo)(() => ({ error, color }), [error, color]);
189
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_themes4.Select.Root, __spreadValues({}, rest)) });
136
190
  }
137
191
  Root.displayName = "Select.Root";
138
- var Select = __spreadProps(__spreadValues({}, import_themes3.Select), {
192
+ var Select = __spreadProps(__spreadValues({}, import_themes4.Select), {
139
193
  Root,
140
194
  Trigger,
141
195
  Content
142
196
  });
143
197
 
144
198
  // src/atoms/typo.tsx
145
- var import_themes4 = require("@radix-ui/themes");
146
- var import_react3 = require("react");
199
+ var import_themes5 = require("@radix-ui/themes");
200
+ var import_clsx3 = require("clsx");
201
+ var import_react4 = require("react");
147
202
 
148
203
  // src/utils/map-with-responsive.ts
149
204
  var mapWithResponsive = (args) => {
@@ -164,11 +219,15 @@ var mapWithResponsive = (args) => {
164
219
  };
165
220
 
166
221
  // src/atoms/typo.tsx
167
- var import_jsx_runtime3 = require("react/jsx-runtime");
168
- var Typo = (0, import_react3.forwardRef)(
222
+ var import_jsx_runtime4 = require("react/jsx-runtime");
223
+ var Typo = (0, import_react4.forwardRef)(
169
224
  (props, ref) => {
170
- const _a = props, { size, variant, children } = _a, rest = __objRest(_a, ["size", "variant", "children"]);
171
- const radixSize = (0, import_react3.useMemo)(() => {
225
+ const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
226
+ const { color: radixColor, className: colorClassName } = (0, import_react4.useMemo)(
227
+ () => resolveColor(color),
228
+ [color]
229
+ );
230
+ const radixSize = (0, import_react4.useMemo)(() => {
172
231
  if (size !== void 0) return size;
173
232
  if (variant === void 0) return "2";
174
233
  return mapWithResponsive({
@@ -186,7 +245,16 @@ var Typo = (0, import_react3.forwardRef)(
186
245
  }
187
246
  });
188
247
  }, [size, variant]);
189
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_themes4.Text, __spreadProps(__spreadValues({}, rest), { ref, size: radixSize, children }));
248
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
249
+ import_themes5.Text,
250
+ __spreadProps(__spreadValues({}, rest), {
251
+ className: (0, import_clsx3.clsx)(colorClassName, className),
252
+ color: radixColor,
253
+ ref,
254
+ size: radixSize,
255
+ children
256
+ })
257
+ );
190
258
  }
191
259
  );
192
260
  Typo.displayName = "Typo";
@@ -209,7 +277,7 @@ function getFieldTypeLabel(type) {
209
277
  }
210
278
 
211
279
  // src/molecules/dynamic-form-editor-field-list-panel.tsx
212
- var import_jsx_runtime4 = require("react/jsx-runtime");
280
+ var import_jsx_runtime5 = require("react/jsx-runtime");
213
281
  function isFieldType(value, types) {
214
282
  return types.some((t) => t === value);
215
283
  }
@@ -224,13 +292,13 @@ function DynamicFormEditorFieldListPanel(props) {
224
292
  onAddField
225
293
  } = props;
226
294
  const isEmpty = fields.length === 0;
227
- const triggerPlaceholder = (0, import_react4.useMemo)(() => {
295
+ const triggerPlaceholder = (0, import_react5.useMemo)(() => {
228
296
  return readonly ? "\uCD94\uAC00(\uC77D\uAE30 \uC804\uC6A9)" : "\uCD94\uAC00";
229
297
  }, [readonly]);
230
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Card, { style: { width: 340, padding: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_themes2.Flex, { direction: "column", gap: "3", children: [
231
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_themes2.Flex, { align: "center", justify: "between", children: [
232
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Typo, { variant: "body", children: "\uD544\uB4DC" }),
233
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
298
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Card, { style: { width: 340, padding: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes2.Flex, { direction: "column", gap: "3", children: [
299
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes2.Flex, { align: "center", justify: "between", children: [
300
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Typo, { variant: "body", children: "\uD544\uB4DC" }),
301
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
234
302
  Select.Root,
235
303
  {
236
304
  disabled: readonly,
@@ -240,18 +308,18 @@ function DynamicFormEditorFieldListPanel(props) {
240
308
  },
241
309
  value: "",
242
310
  children: [
243
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Select.Trigger, { placeholder: triggerPlaceholder }),
244
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Select.Content, { children: fieldTypes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Select.Item, { value: t, children: getFieldTypeLabel(t) }, t)) })
311
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Select.Trigger, { placeholder: triggerPlaceholder }),
312
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Select.Content, { children: fieldTypes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Select.Item, { value: t, children: getFieldTypeLabel(t) }, t)) })
245
313
  ]
246
314
  }
247
315
  )
248
316
  ] }),
249
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_themes2.Flex, { direction: "column", gap: "2", children: [
250
- isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Typo, { color: "gray", variant: "caption", children: "\uC544\uC9C1 \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }) : null,
317
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes2.Flex, { direction: "column", gap: "2", children: [
318
+ isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Typo, { color: "gray", variant: "caption", children: "\uC544\uC9C1 \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }) : null,
251
319
  fields.map((field) => {
252
320
  const isSelected = field.name === selectedFieldName;
253
321
  const hasError = hasFieldError(field.name);
254
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
322
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
255
323
  Card,
256
324
  {
257
325
  error: isSelected ? hasError : void 0,
@@ -264,8 +332,8 @@ function DynamicFormEditorFieldListPanel(props) {
264
332
  opacity: readonly ? 0.8 : 1,
265
333
  border: isSelected ? "1px solid var(--accent-9)" : "1px solid transparent"
266
334
  },
267
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_themes5.Box, { style: { minWidth: 0 }, children: [
268
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
335
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes6.Box, { style: { minWidth: 0 }, children: [
336
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
269
337
  Typo,
270
338
  {
271
339
  style: {
@@ -277,7 +345,7 @@ function DynamicFormEditorFieldListPanel(props) {
277
345
  children: field.label
278
346
  }
279
347
  ),
280
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Typo, { color: "gray", variant: "caption", children: [
348
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Typo, { color: "gray", variant: "caption", children: [
281
349
  field.name,
282
350
  " \xB7 ",
283
351
  field.type,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/molecules/dynamic-form-editor-field-list-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/select.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/molecules/dynamic-form-editor-utils.ts"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Box } from '@radix-ui/themes';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Select } from '@/atoms/select';\nimport { Typo } from '@/atoms/typo';\nimport type { DynamicFormFieldSchema } from '@/types/dynamic-form-schema-generated';\nimport { getFieldTypeLabel, type FieldType } from './dynamic-form-editor-utils';\n\nfunction isFieldType(value: string, types: FieldType[]): value is FieldType {\n return types.some((t) => t === value);\n}\n\nexport interface DynamicFormEditorFieldListPanelProps {\n fields: DynamicFormFieldSchema[];\n selectedFieldName: string | null;\n readonly: boolean;\n fieldTypes: FieldType[];\n hasFieldError: (fieldName: string) => boolean;\n onSelectFieldName: (fieldName: string) => void;\n onAddField: (type: FieldType) => void;\n}\n\nexport function DynamicFormEditorFieldListPanel(\n props: DynamicFormEditorFieldListPanelProps\n): React.ReactElement {\n const {\n fields,\n selectedFieldName,\n readonly,\n fieldTypes,\n hasFieldError,\n onSelectFieldName,\n onAddField,\n } = props;\n\n const isEmpty: boolean = fields.length === 0;\n\n const triggerPlaceholder: string = useMemo(() => {\n return readonly ? '추가(읽기 전용)' : '추가';\n }, [readonly]);\n\n return (\n <Card style={{ width: 340, padding: 12 }}>\n <Flex direction=\"column\" gap=\"3\">\n <Flex align=\"center\" justify=\"between\">\n <Typo variant=\"body\">필드</Typo>\n <Select.Root\n disabled={readonly}\n onValueChange={(v: string): void => {\n if (!isFieldType(v, fieldTypes)) return;\n onAddField(v);\n }}\n value=\"\"\n >\n <Select.Trigger placeholder={triggerPlaceholder} />\n <Select.Content>\n {fieldTypes.map((t) => (\n <Select.Item key={t} value={t}>\n {getFieldTypeLabel(t)}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n </Flex>\n\n <Flex direction=\"column\" gap=\"2\">\n {isEmpty ? (\n <Typo color=\"gray\" variant=\"caption\">\n 아직 필드가 없습니다.\n </Typo>\n ) : null}\n\n {fields.map((field) => {\n const isSelected: boolean = field.name === selectedFieldName;\n const hasError: boolean = hasFieldError(field.name);\n\n return (\n <Card\n error={isSelected ? hasError : undefined}\n key={field.name}\n onClick={(): void => { onSelectFieldName(field.name); }}\n style={{\n padding: 10,\n cursor: 'pointer',\n opacity: readonly ? 0.8 : 1,\n border: isSelected\n ? '1px solid var(--accent-9)'\n : '1px solid transparent',\n }}\n >\n <Box style={{ minWidth: 0 }}>\n <Typo\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n variant=\"body\"\n >\n {field.label}\n </Typo>\n <Typo color=\"gray\" variant=\"caption\">\n {field.name} · {field.type}\n {field.required ? ' · required' : ''}\n </Typo>\n </Box>\n </Card>\n );\n })}\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n","import { Select as RadixSelect } from '@radix-ui/themes';\nimport { createContext, forwardRef, useContext, useMemo } from 'react';\n\nconst SelectContext = createContext<{ error?: boolean }>({\n error: false,\n});\n\nexport type ContentProps = RadixSelect.ContentProps & {\n isNavigation?: boolean;\n};\n\nconst Content = forwardRef<HTMLDivElement, ContentProps>((props, ref) => {\n const { className, isNavigation, ...rest } = props;\n const { error } = useContext(SelectContext);\n\n const cls = useMemo(() => {\n const etc = isNavigation ? 'nav-select' : '';\n const errorCls = error ? 'tipp-error' : '';\n return [etc, errorCls, className].join(' ');\n }, [className, error, isNavigation]);\n\n return (\n <RadixSelect.Content\n position=\"popper\"\n {...rest}\n className={cls}\n ref={ref}\n />\n );\n});\nContent.displayName = 'Select.Content';\n\nconst Trigger = forwardRef<HTMLButtonElement, RadixSelect.TriggerProps>(\n (props, ref) => {\n const { className, ...rest } = props;\n const { error } = useContext(SelectContext);\n\n const cls = useMemo(() => {\n const errorCls = error ? 'error' : '';\n return [errorCls, className].join(' ');\n }, [className, error]);\n\n return <RadixSelect.Trigger {...rest} className={cls} ref={ref} />;\n }\n);\n\nTrigger.displayName = 'Select.Trigger';\n\nexport type SelectRootProps = RadixSelect.RootProps & {\n error?: boolean;\n};\n\nfunction Root(props: SelectRootProps): React.ReactNode {\n const { error, ...rest } = props;\n\n return (\n <SelectContext.Provider value={{ error }}>\n <RadixSelect.Root {...rest} />\n </SelectContext.Provider>\n );\n}\n\nRoot.displayName = 'Select.Root';\n\nexport const Select = {\n ...RadixSelect,\n Root,\n Trigger,\n Content,\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","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 {\n DynamicFormFieldSchema,\n DynamicFormSchema,\n FieldOption,\n ImageFieldOption,\n ValidationRule,\n} from '@/types/dynamic-form-schema-generated';\n\nexport type FieldType =\n | 'short_text'\n | 'long_text'\n | 'number'\n | 'email'\n | 'dropdown'\n | 'choice'\n | 'radio_cards'\n | 'image_radio_card'\n | 'choices'\n | 'yes_no';\n\nexport type SchemaIssueLevel = 'error' | 'warning';\n\nexport interface SchemaIssue {\n id: string;\n level: SchemaIssueLevel;\n message: string;\n fieldName?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isNonEmptyTrimmedString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction canCompileRegExp(pattern: string): boolean {\n try {\n // eslint-disable-next-line no-new -- 정규식 컴파일 가능 여부만 확인\n new RegExp(pattern);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function getFieldTypes(): FieldType[] {\n return [\n 'short_text',\n 'long_text',\n 'number',\n 'email',\n 'dropdown',\n 'choice',\n 'radio_cards',\n 'image_radio_card',\n 'choices',\n 'yes_no',\n ];\n}\n\nexport function getFieldTypeLabel(type: FieldType): string {\n const map: Record<FieldType, string> = {\n short_text: '짧은 텍스트',\n long_text: '긴 텍스트',\n number: '숫자',\n email: '이메일',\n dropdown: '드롭다운',\n choice: '단일 선택(라디오)',\n radio_cards: '라디오 카드',\n image_radio_card: '이미지 라디오 카드',\n choices: '다중 선택(체크)',\n yes_no: '동의(체크)',\n };\n return map[type];\n}\n\nexport function findFieldIndexByName(\n fields: DynamicFormFieldSchema[],\n fieldName: string\n): number {\n return fields.findIndex((field) => field.name === fieldName);\n}\n\nfunction toCamelFromSnake(value: string): string {\n const parts: string[] = value.split('_').filter(Boolean);\n if (parts.length === 0) return 'field';\n const [first, ...rest] = parts;\n const firstLower = first.toLowerCase();\n const restCamel = rest\n .map((p) => (p.length === 0 ? '' : p[0].toUpperCase() + p.slice(1)))\n .join('');\n return `${firstLower}${restCamel}`;\n}\n\nexport function createUniqueFieldName(\n fields: DynamicFormFieldSchema[],\n baseName: string\n): string {\n const used = new Set<string>(fields.map((f) => f.name));\n if (!used.has(baseName)) return baseName;\n let i = 2;\n while (used.has(`${baseName}${i}`)) i += 1;\n return `${baseName}${i}`;\n}\n\nexport function createDefaultField(\n type: FieldType,\n currentFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const baseName: string = toCamelFromSnake(type);\n const name: string = createUniqueFieldName(currentFields, baseName);\n const label: string = getFieldTypeLabel(type);\n\n if (type === 'short_text') return { name, type, label, placeholder: '' };\n if (type === 'long_text') return { name, type, label, placeholder: '' };\n if (type === 'number') return { name, type, label, placeholder: '' };\n if (type === 'email') return { name, type, label, placeholder: '' };\n if (type === 'dropdown')\n return {\n name,\n type,\n label,\n placeholder: '',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'choice')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'radio_cards')\n return { name, type, label, options: [{ label: '옵션 1', value: 'option1' }] };\n if (type === 'choices')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'yes_no') return { name, type, label, description: '' };\n\n return {\n name,\n type,\n label,\n gridColumnsCount: 4,\n gridItemHeight: '160px',\n gridGap: '2',\n imageFit: 'cover',\n options: [\n {\n label: '이미지 1',\n value: 'option1',\n imageSrc: 'https://placehold.co/300x300/png?text=1',\n },\n ],\n };\n}\n\nexport function normalizeSchema(value: DynamicFormSchema | undefined): DynamicFormSchema {\n const fallback: DynamicFormSchema = { fields: [] };\n if (!value) return fallback;\n if (!Array.isArray(value.fields)) return fallback;\n return { fields: value.fields };\n}\n\nexport function validateDynamicFormSchema(schema: DynamicFormSchema): SchemaIssue[] {\n const issues: SchemaIssue[] = [];\n\n const nameToCount = new Map<string, number>();\n schema.fields.forEach((field) => {\n const prev = nameToCount.get(field.name) || 0;\n nameToCount.set(field.name, prev + 1);\n });\n\n schema.fields.forEach((field, index) => {\n const fieldKey = `${index}:${field.name}`;\n\n if (!isNonEmptyTrimmedString(field.name)) {\n issues.push({\n id: `field.name.required.${fieldKey}`,\n level: 'error',\n message: '필드 name은 필수입니다',\n fieldName: field.name,\n });\n } else if (field.name.trim() !== field.name) {\n issues.push({\n id: `field.name.trim.${fieldKey}`,\n level: 'warning',\n message: '필드 name 앞/뒤 공백은 제거하는 것을 권장합니다',\n fieldName: field.name,\n });\n }\n\n if (isNonEmptyTrimmedString(field.name)) {\n const count = nameToCount.get(field.name) || 0;\n if (count > 1) {\n issues.push({\n id: `field.name.duplicate.${fieldKey}`,\n level: 'error',\n message: `중복된 name입니다: ${field.name}`,\n fieldName: field.name,\n });\n }\n }\n\n if (!isNonEmptyTrimmedString(field.label)) {\n issues.push({\n id: `field.label.required.${fieldKey}`,\n level: 'error',\n message: '필드 label은 필수입니다',\n fieldName: field.name,\n });\n }\n\n const type = field.type;\n const isOptionType =\n type === 'dropdown' ||\n type === 'choice' ||\n type === 'radio_cards' ||\n type === 'choices';\n\n if (isOptionType) {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.options.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n }\n }\n\n if (type === 'image_radio_card') {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.imageOptions.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n } else {\n optionsRaw.forEach((opt, optIndex) => {\n const imageSrc = isRecord(opt) ? opt.imageSrc : undefined;\n if (!isNonEmptyTrimmedString(imageSrc)) {\n issues.push({\n id: `field.imageOptions.imageSrc.required.${fieldKey}.${optIndex}`,\n level: 'error',\n message: 'imageSrc는 필수입니다',\n fieldName: field.name,\n });\n }\n });\n }\n }\n\n const validation: ValidationRule | undefined = field.validation;\n if (validation) {\n if (isFiniteNumber(validation.min) && isFiniteNumber(validation.max)) {\n if (validation.min > validation.max) {\n issues.push({\n id: `field.validation.minmax.${fieldKey}`,\n level: 'error',\n message: 'validation.min은 validation.max 이하이어야 합니다',\n fieldName: field.name,\n });\n }\n }\n if (isNonEmptyTrimmedString(validation.pattern)) {\n if (!canCompileRegExp(validation.pattern)) {\n issues.push({\n id: `field.validation.pattern.${fieldKey}`,\n level: 'error',\n message: 'validation.pattern이 올바른 정규식이 아닙니다',\n fieldName: field.name,\n });\n }\n }\n }\n });\n\n return issues;\n}\n\nexport function hasErrorIssues(issues: SchemaIssue[]): boolean {\n return issues.some((i) => i.level === 'error');\n}\n\nexport function updateSchemaFields(\n schema: DynamicFormSchema,\n nextFields: DynamicFormFieldSchema[]\n): DynamicFormSchema {\n return { fields: nextFields };\n}\n\nexport function moveField(\n fields: DynamicFormFieldSchema[],\n fromIndex: number,\n toIndex: number\n): DynamicFormFieldSchema[] {\n if (fromIndex < 0 || fromIndex >= fields.length) return fields;\n if (toIndex < 0 || toIndex >= fields.length) return fields;\n if (fromIndex === toIndex) return fields;\n\n const next: DynamicFormFieldSchema[] = [...fields];\n const [item] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, item);\n return next;\n}\n\nexport function duplicateField(fields: DynamicFormFieldSchema[], index: number): DynamicFormFieldSchema[] {\n if (index < 0 || index >= fields.length) return fields;\n const target = fields[index];\n const nextName: string = createUniqueFieldName(fields, target.name);\n const cloned: DynamicFormFieldSchema = { ...target, name: nextName };\n const next: DynamicFormFieldSchema[] = [...fields];\n next.splice(index + 1, 0, cloned);\n return next;\n}\n\nexport function updateFieldCommonProps(\n field: DynamicFormFieldSchema,\n next: {\n name?: string;\n label?: string;\n description?: string | undefined;\n required?: boolean;\n }\n): DynamicFormFieldSchema {\n const { name, label, description, required } = next;\n return {\n ...field,\n ...(name !== undefined ? { name } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(required !== undefined ? { required } : {}),\n };\n}\n\nexport function updateFieldValidation(\n field: DynamicFormFieldSchema,\n next: ValidationRule | undefined\n): DynamicFormFieldSchema {\n if (!next) {\n const { validation: _validation, ...rest } = field;\n return rest;\n }\n return { ...field, validation: next };\n}\n\nexport function updateTextPlaceholder(\n field: DynamicFormFieldSchema,\n placeholder: string\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'short_text' || type === 'long_text' || type === 'number' || type === 'email' || type === 'dropdown') {\n return { ...field, placeholder };\n }\n return field;\n}\n\nexport function updateOrientation(\n field: DynamicFormFieldSchema,\n orientation: 'horizontal' | 'vertical'\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'choice' || type === 'choices') return { ...field, orientation };\n return field;\n}\n\nexport function updateOptions(\n field: DynamicFormFieldSchema,\n options: FieldOption[]\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'dropdown' || type === 'choice' || type === 'radio_cards' || type === 'choices') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageOptions(\n field: DynamicFormFieldSchema,\n options: ImageFieldOption[]\n): DynamicFormFieldSchema {\n if (field.type === 'image_radio_card') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageLayout(\n field: DynamicFormFieldSchema,\n next: {\n gridColumnsCount?: number | undefined;\n gridItemHeight?: string | undefined;\n gridColumns?: string | undefined;\n gridRows?: string | undefined;\n gridGap?: string | undefined;\n imageFit?: 'cover' | 'contain' | undefined;\n }\n): DynamicFormFieldSchema {\n if (field.type !== 'image_radio_card') return field;\n return { ...field, ...next };\n}\n\nexport function resetFieldType(\n field: DynamicFormFieldSchema,\n nextType: FieldType,\n allFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const base: DynamicFormFieldSchema = createDefaultField(nextType, allFields);\n return {\n ...base,\n name: field.name,\n label: field.label,\n description: field.description,\n required: field.required,\n validation: field.validation,\n };\n}\n"],"mappings":"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","names":["import_react","import_themes","RadixCard","import_themes","import_themes","import_react","import_jsx_runtime","RadixSelect","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/molecules/dynamic-form-editor-field-list-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/select.tsx","../../src/utils/resolve-color.ts","../../src/theme/theme-provider.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/molecules/dynamic-form-editor-utils.ts"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Box } from '@radix-ui/themes';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Select } from '@/atoms/select';\nimport { Typo } from '@/atoms/typo';\nimport type { DynamicFormFieldSchema } from '@/types/dynamic-form-schema-generated';\nimport { getFieldTypeLabel, type FieldType } from './dynamic-form-editor-utils';\n\nfunction isFieldType(value: string, types: FieldType[]): value is FieldType {\n return types.some((t) => t === value);\n}\n\nexport interface DynamicFormEditorFieldListPanelProps {\n fields: DynamicFormFieldSchema[];\n selectedFieldName: string | null;\n readonly: boolean;\n fieldTypes: FieldType[];\n hasFieldError: (fieldName: string) => boolean;\n onSelectFieldName: (fieldName: string) => void;\n onAddField: (type: FieldType) => void;\n}\n\nexport function DynamicFormEditorFieldListPanel(\n props: DynamicFormEditorFieldListPanelProps\n): React.ReactElement {\n const {\n fields,\n selectedFieldName,\n readonly,\n fieldTypes,\n hasFieldError,\n onSelectFieldName,\n onAddField,\n } = props;\n\n const isEmpty: boolean = fields.length === 0;\n\n const triggerPlaceholder: string = useMemo(() => {\n return readonly ? '추가(읽기 전용)' : '추가';\n }, [readonly]);\n\n return (\n <Card style={{ width: 340, padding: 12 }}>\n <Flex direction=\"column\" gap=\"3\">\n <Flex align=\"center\" justify=\"between\">\n <Typo variant=\"body\">필드</Typo>\n <Select.Root\n disabled={readonly}\n onValueChange={(v: string): void => {\n if (!isFieldType(v, fieldTypes)) return;\n onAddField(v);\n }}\n value=\"\"\n >\n <Select.Trigger placeholder={triggerPlaceholder} />\n <Select.Content>\n {fieldTypes.map((t) => (\n <Select.Item key={t} value={t}>\n {getFieldTypeLabel(t)}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n </Flex>\n\n <Flex direction=\"column\" gap=\"2\">\n {isEmpty ? (\n <Typo color=\"gray\" variant=\"caption\">\n 아직 필드가 없습니다.\n </Typo>\n ) : null}\n\n {fields.map((field) => {\n const isSelected: boolean = field.name === selectedFieldName;\n const hasError: boolean = hasFieldError(field.name);\n\n return (\n <Card\n error={isSelected ? hasError : undefined}\n key={field.name}\n onClick={(): void => { onSelectFieldName(field.name); }}\n style={{\n padding: 10,\n cursor: 'pointer',\n opacity: readonly ? 0.8 : 1,\n border: isSelected\n ? '1px solid var(--accent-9)'\n : '1px solid transparent',\n }}\n >\n <Box style={{ minWidth: 0 }}>\n <Typo\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n variant=\"body\"\n >\n {field.label}\n </Typo>\n <Typo color=\"gray\" variant=\"caption\">\n {field.name} · {field.type}\n {field.required ? ' · required' : ''}\n </Typo>\n </Box>\n </Card>\n );\n })}\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n","import { Select as RadixSelect } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { createContext, forwardRef, useContext, useMemo } from 'react';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\nimport { ThemeAccentContext } from '../theme/theme-provider';\n\nconst SelectContext = createContext<{ error?: boolean; color?: UiColor }>({\n error: false,\n});\n\nexport type ContentProps = DistributiveOmit<\n RadixSelect.ContentProps,\n 'color'\n> & {\n isNavigation?: boolean;\n color?: UiColor;\n};\n\nconst Content = forwardRef<HTMLDivElement, ContentProps>((props, ref) => {\n const { className, isNavigation, color, ...rest } = props;\n const { error, color: contextColor } = useContext(SelectContext);\n const themeAccent = useContext(ThemeAccentContext);\n\n // Content는 Portal로 렌더돼 theme의 className override를 못 받으므로, per-instance/Root color가\n // 없으면 theme custom accent(black)를 fallback으로 적용해 Portal 안에서도 black을 유지한다.\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color ?? contextColor ?? themeAccent),\n [color, contextColor, themeAccent]\n );\n\n // custom color(black)는 className override만 사용 — fallback color를 함께 넘기면 자식 Item이\n // 자기 data-accent-color로 gray를 다시 적용해 override를 덮는다.\n const appliedColor = colorClassName ? undefined : radixColor;\n\n const cls = useMemo(() => {\n const etc = isNavigation ? 'nav-select' : '';\n const errorCls = error ? 'tipp-error' : '';\n return clsx(etc, errorCls, colorClassName, className);\n }, [className, colorClassName, error, isNavigation]);\n\n return (\n <RadixSelect.Content\n position=\"popper\"\n {...rest}\n className={cls}\n color={appliedColor}\n ref={ref}\n />\n );\n});\nContent.displayName = 'Select.Content';\n\nexport type TriggerProps = DistributiveOmit<\n RadixSelect.TriggerProps,\n 'color'\n> & {\n color?: UiColor;\n};\n\nconst Trigger = forwardRef<HTMLButtonElement, TriggerProps>((props, ref) => {\n const { className, color, ...rest } = props;\n const { error, color: contextColor } = useContext(SelectContext);\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color ?? contextColor),\n [color, contextColor]\n );\n\n // custom color(black)는 className override만 사용 (위 Content와 동일 이유).\n const appliedColor = colorClassName ? undefined : radixColor;\n\n const cls = useMemo(() => {\n const errorCls = error ? 'error' : '';\n return clsx(errorCls, colorClassName, className);\n }, [className, colorClassName, error]);\n\n return (\n <RadixSelect.Trigger\n {...rest}\n className={cls}\n color={appliedColor}\n ref={ref}\n />\n );\n});\n\nTrigger.displayName = 'Select.Trigger';\n\nexport type SelectRootProps = RadixSelect.RootProps & {\n error?: boolean;\n /** Trigger·Content에 일괄 적용할 color. 각 파트에서 color prop으로 개별 override 가능. */\n color?: UiColor;\n};\n\nfunction Root(props: SelectRootProps): React.ReactNode {\n const { error, color, ...rest } = props;\n\n const value = useMemo(() => ({ error, color }), [error, color]);\n\n return (\n <SelectContext.Provider value={value}>\n <RadixSelect.Root {...rest} />\n </SelectContext.Provider>\n );\n}\n\nRoot.displayName = 'Select.Root';\n\nexport const Select = {\n ...RadixSelect,\n Root,\n Trigger,\n Content,\n};\n","import type { BadgeProps as RadixBadgeProps } from '@radix-ui/themes';\n\n/**\n * Radix Themes가 제공하는 accent color union (gray, red, blue, ...).\n * 모든 color 지원 컴포넌트가 동일한 union을 공유하므로 Badge에서 파생한다.\n */\nexport type RadixColor = NonNullable<RadixBadgeProps['color']>;\n\n/** TIPP 시맨틱 color 별칭. */\nexport type SemanticColor = 'error' | 'accent' | 'neutral' | 'success';\n\n/**\n * Radix accent에 대응이 없어 CSS accent override로 처리하는 커스텀 color.\n * (예: black — `style/black.scss`의 `.tipp-accent-black` 참고)\n */\nexport type CustomColor = 'black';\n\n/** color 지원 컴포넌트가 노출하는 통합 color 타입. */\nexport type UiColor = RadixColor | SemanticColor | CustomColor;\n\n/**\n * union 각 멤버에 분배되는 Omit.\n * Radix의 polymorphic 컴포넌트 props(Text/Heading/Link 등 `as`로 분기되는 union)에서\n * 키를 제거할 때 일반 Omit은 union을 단일 객체로 합쳐 `as` 분기를 무너뜨리므로 이 타입을 쓴다.\n */\nexport type DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n ? Omit<T, K>\n : never;\n\nconst SEMANTIC_COLOR_MAP: Record<SemanticColor, RadixColor | undefined> = {\n error: 'red',\n neutral: 'gray',\n success: 'green',\n accent: undefined,\n};\n\ninterface CustomColorConfig {\n /**\n * accent override를 적용할 className.\n */\n className: string;\n /**\n * Radix에 넘길 fallback color.\n * Text/Heading/Link 등은 `color` prop이 있어야 `data-accent-color`가 붙어\n * `--accent-*`를 참조하므로, 유효한 Radix color를 함께 넘긴 뒤 className으로\n * `--accent-*`를 덮어쓴다. (Badge/Button은 prop 없이도 accent 기반이라 무해)\n */\n fallbackColor: RadixColor;\n}\n\nconst CUSTOM_COLOR_MAP: Record<CustomColor, CustomColorConfig> = {\n black: { className: 'tipp-accent-black', fallbackColor: 'gray' },\n};\n\nconst isSemanticColor = (color?: UiColor): color is SemanticColor =>\n color !== undefined && color in SEMANTIC_COLOR_MAP;\n\nconst isCustomColor = (color?: UiColor): color is CustomColor =>\n color !== undefined && color in CUSTOM_COLOR_MAP;\n\nexport interface ResolvedColor {\n /** Radix 컴포넌트의 `color` prop에 그대로 전달할 값. custom color면 undefined. */\n color?: RadixColor;\n /** accent override를 적용하기 위해 요소에 붙일 className. */\n className?: string;\n}\n\n/**\n * 통합 color 입력을 Radix color prop과 className으로 정규화한다.\n *\n * - custom color(black 등): Radix color는 비우고 accent override className을 반환\n * - semantic color(error/neutral/success/accent): 대응 Radix color로 변환\n * - Radix color: 그대로 pass-through\n */\nexport const resolveColor = (color?: UiColor): ResolvedColor => {\n if (isCustomColor(color)) {\n const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];\n return { color: fallbackColor, className };\n }\n\n if (isSemanticColor(color)) {\n return { color: SEMANTIC_COLOR_MAP[color] };\n }\n\n return { color };\n};\n","import React, { createContext } from 'react';\nimport { Theme } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { resolveColor, type UiColor } from '../utils/resolve-color';\n\ntype ThemeProps = React.ComponentProps<typeof Theme>;\n\n/**\n * 테마 전역 primary가 custom color(black 등)일 때 그 값을 하위로 전달하는 context.\n * Radix는 Portal 컨텐츠(Select 드롭다운 등)에 theme의 accentColor \"값\"(여기선 fallback gray)만\n * 복제하고 `.tipp-accent-black` className은 복제하지 않으므로, Portal 안에서는 accent override가\n * 사라진다. 래핑된 overlay 컴포넌트(Select 등)가 이 context를 최하위 fallback color로 읽어\n * 자기 요소에 className을 직접 부여하면 Portal 내부에서도 black이 유지된다.\n * (custom accent가 아닐 때는 undefined — Radix 네이티브 portal 상속에 맡긴다.)\n */\nexport const ThemeAccentContext = createContext<UiColor | undefined>(undefined);\n\nexport interface ThemeProviderProps extends Omit<ThemeProps, 'accentColor'> {\n children: React.ReactNode;\n /**\n * 전역 primary(accent) color. Radix accent color에 더해 커스텀 `black`을 지원한다.\n * black이면 Radix에는 fallback `gray`를 넘기고 Theme 루트에 accent override\n * className을 부여하여 하위 컴포넌트가 color prop 없이도 black을 상속한다.\n */\n accentColor?: ThemeProps['accentColor'] | 'black';\n}\n\nexport function ThemeProvider(props: ThemeProviderProps): React.ReactNode {\n const { accentColor = 'iris', className, ...rest } = props;\n\n const { color: radixAccent, className: accentClassName } =\n resolveColor(accentColor);\n\n // custom accent(className이 생기는 경우 = black)일 때만 Portal 보정용으로 context에 흘린다.\n const themeAccent = accentClassName ? accentColor : undefined;\n\n return (\n <ThemeAccentContext.Provider value={themeAccent}>\n <Theme\n accentColor={radixAccent ?? 'iris'}\n className={clsx(accentClassName, className)}\n radius=\"medium\"\n {...rest}\n />\n </ThemeAccentContext.Provider>\n );\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 { clsx } from 'clsx';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\n\nexport type TypoProps = DistributiveOmit<RadixTextProps, 'color'> & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n color?: UiColor;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, ...rest } = props;\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\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\n {...rest}\n className={clsx(colorClassName, className)}\n color={radixColor}\n ref={ref}\n size={radixSize}\n >\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\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 {\n DynamicFormFieldSchema,\n DynamicFormSchema,\n FieldOption,\n ImageFieldOption,\n ValidationRule,\n} from '@/types/dynamic-form-schema-generated';\n\nexport type FieldType =\n | 'short_text'\n | 'long_text'\n | 'number'\n | 'email'\n | 'dropdown'\n | 'choice'\n | 'radio_cards'\n | 'image_radio_card'\n | 'choices'\n | 'yes_no';\n\nexport type SchemaIssueLevel = 'error' | 'warning';\n\nexport interface SchemaIssue {\n id: string;\n level: SchemaIssueLevel;\n message: string;\n fieldName?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isNonEmptyTrimmedString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction canCompileRegExp(pattern: string): boolean {\n try {\n // eslint-disable-next-line no-new -- 정규식 컴파일 가능 여부만 확인\n new RegExp(pattern);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function getFieldTypes(): FieldType[] {\n return [\n 'short_text',\n 'long_text',\n 'number',\n 'email',\n 'dropdown',\n 'choice',\n 'radio_cards',\n 'image_radio_card',\n 'choices',\n 'yes_no',\n ];\n}\n\nexport function getFieldTypeLabel(type: FieldType): string {\n const map: Record<FieldType, string> = {\n short_text: '짧은 텍스트',\n long_text: '긴 텍스트',\n number: '숫자',\n email: '이메일',\n dropdown: '드롭다운',\n choice: '단일 선택(라디오)',\n radio_cards: '라디오 카드',\n image_radio_card: '이미지 라디오 카드',\n choices: '다중 선택(체크)',\n yes_no: '동의(체크)',\n };\n return map[type];\n}\n\nexport function findFieldIndexByName(\n fields: DynamicFormFieldSchema[],\n fieldName: string\n): number {\n return fields.findIndex((field) => field.name === fieldName);\n}\n\nfunction toCamelFromSnake(value: string): string {\n const parts: string[] = value.split('_').filter(Boolean);\n if (parts.length === 0) return 'field';\n const [first, ...rest] = parts;\n const firstLower = first.toLowerCase();\n const restCamel = rest\n .map((p) => (p.length === 0 ? '' : p[0].toUpperCase() + p.slice(1)))\n .join('');\n return `${firstLower}${restCamel}`;\n}\n\nexport function createUniqueFieldName(\n fields: DynamicFormFieldSchema[],\n baseName: string\n): string {\n const used = new Set<string>(fields.map((f) => f.name));\n if (!used.has(baseName)) return baseName;\n let i = 2;\n while (used.has(`${baseName}${i}`)) i += 1;\n return `${baseName}${i}`;\n}\n\nexport function createDefaultField(\n type: FieldType,\n currentFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const baseName: string = toCamelFromSnake(type);\n const name: string = createUniqueFieldName(currentFields, baseName);\n const label: string = getFieldTypeLabel(type);\n\n if (type === 'short_text') return { name, type, label, placeholder: '' };\n if (type === 'long_text') return { name, type, label, placeholder: '' };\n if (type === 'number') return { name, type, label, placeholder: '' };\n if (type === 'email') return { name, type, label, placeholder: '' };\n if (type === 'dropdown')\n return {\n name,\n type,\n label,\n placeholder: '',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'choice')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'radio_cards')\n return { name, type, label, options: [{ label: '옵션 1', value: 'option1' }] };\n if (type === 'choices')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'yes_no') return { name, type, label, description: '' };\n\n return {\n name,\n type,\n label,\n gridColumnsCount: 4,\n gridItemHeight: '160px',\n gridGap: '2',\n imageFit: 'cover',\n options: [\n {\n label: '이미지 1',\n value: 'option1',\n imageSrc: 'https://placehold.co/300x300/png?text=1',\n },\n ],\n };\n}\n\nexport function normalizeSchema(value: DynamicFormSchema | undefined): DynamicFormSchema {\n const fallback: DynamicFormSchema = { fields: [] };\n if (!value) return fallback;\n if (!Array.isArray(value.fields)) return fallback;\n return { fields: value.fields };\n}\n\nexport function validateDynamicFormSchema(schema: DynamicFormSchema): SchemaIssue[] {\n const issues: SchemaIssue[] = [];\n\n const nameToCount = new Map<string, number>();\n schema.fields.forEach((field) => {\n const prev = nameToCount.get(field.name) || 0;\n nameToCount.set(field.name, prev + 1);\n });\n\n schema.fields.forEach((field, index) => {\n const fieldKey = `${index}:${field.name}`;\n\n if (!isNonEmptyTrimmedString(field.name)) {\n issues.push({\n id: `field.name.required.${fieldKey}`,\n level: 'error',\n message: '필드 name은 필수입니다',\n fieldName: field.name,\n });\n } else if (field.name.trim() !== field.name) {\n issues.push({\n id: `field.name.trim.${fieldKey}`,\n level: 'warning',\n message: '필드 name 앞/뒤 공백은 제거하는 것을 권장합니다',\n fieldName: field.name,\n });\n }\n\n if (isNonEmptyTrimmedString(field.name)) {\n const count = nameToCount.get(field.name) || 0;\n if (count > 1) {\n issues.push({\n id: `field.name.duplicate.${fieldKey}`,\n level: 'error',\n message: `중복된 name입니다: ${field.name}`,\n fieldName: field.name,\n });\n }\n }\n\n if (!isNonEmptyTrimmedString(field.label)) {\n issues.push({\n id: `field.label.required.${fieldKey}`,\n level: 'error',\n message: '필드 label은 필수입니다',\n fieldName: field.name,\n });\n }\n\n const type = field.type;\n const isOptionType =\n type === 'dropdown' ||\n type === 'choice' ||\n type === 'radio_cards' ||\n type === 'choices';\n\n if (isOptionType) {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.options.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n }\n }\n\n if (type === 'image_radio_card') {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.imageOptions.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n } else {\n optionsRaw.forEach((opt, optIndex) => {\n const imageSrc = isRecord(opt) ? opt.imageSrc : undefined;\n if (!isNonEmptyTrimmedString(imageSrc)) {\n issues.push({\n id: `field.imageOptions.imageSrc.required.${fieldKey}.${optIndex}`,\n level: 'error',\n message: 'imageSrc는 필수입니다',\n fieldName: field.name,\n });\n }\n });\n }\n }\n\n const validation: ValidationRule | undefined = field.validation;\n if (validation) {\n if (isFiniteNumber(validation.min) && isFiniteNumber(validation.max)) {\n if (validation.min > validation.max) {\n issues.push({\n id: `field.validation.minmax.${fieldKey}`,\n level: 'error',\n message: 'validation.min은 validation.max 이하이어야 합니다',\n fieldName: field.name,\n });\n }\n }\n if (isNonEmptyTrimmedString(validation.pattern)) {\n if (!canCompileRegExp(validation.pattern)) {\n issues.push({\n id: `field.validation.pattern.${fieldKey}`,\n level: 'error',\n message: 'validation.pattern이 올바른 정규식이 아닙니다',\n fieldName: field.name,\n });\n }\n }\n }\n });\n\n return issues;\n}\n\nexport function hasErrorIssues(issues: SchemaIssue[]): boolean {\n return issues.some((i) => i.level === 'error');\n}\n\nexport function updateSchemaFields(\n schema: DynamicFormSchema,\n nextFields: DynamicFormFieldSchema[]\n): DynamicFormSchema {\n return { fields: nextFields };\n}\n\nexport function moveField(\n fields: DynamicFormFieldSchema[],\n fromIndex: number,\n toIndex: number\n): DynamicFormFieldSchema[] {\n if (fromIndex < 0 || fromIndex >= fields.length) return fields;\n if (toIndex < 0 || toIndex >= fields.length) return fields;\n if (fromIndex === toIndex) return fields;\n\n const next: DynamicFormFieldSchema[] = [...fields];\n const [item] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, item);\n return next;\n}\n\nexport function duplicateField(fields: DynamicFormFieldSchema[], index: number): DynamicFormFieldSchema[] {\n if (index < 0 || index >= fields.length) return fields;\n const target = fields[index];\n const nextName: string = createUniqueFieldName(fields, target.name);\n const cloned: DynamicFormFieldSchema = { ...target, name: nextName };\n const next: DynamicFormFieldSchema[] = [...fields];\n next.splice(index + 1, 0, cloned);\n return next;\n}\n\nexport function updateFieldCommonProps(\n field: DynamicFormFieldSchema,\n next: {\n name?: string;\n label?: string;\n description?: string | undefined;\n required?: boolean;\n }\n): DynamicFormFieldSchema {\n const { name, label, description, required } = next;\n return {\n ...field,\n ...(name !== undefined ? { name } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(required !== undefined ? { required } : {}),\n };\n}\n\nexport function updateFieldValidation(\n field: DynamicFormFieldSchema,\n next: ValidationRule | undefined\n): DynamicFormFieldSchema {\n if (!next) {\n const { validation: _validation, ...rest } = field;\n return rest;\n }\n return { ...field, validation: next };\n}\n\nexport function updateTextPlaceholder(\n field: DynamicFormFieldSchema,\n placeholder: string\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'short_text' || type === 'long_text' || type === 'number' || type === 'email' || type === 'dropdown') {\n return { ...field, placeholder };\n }\n return field;\n}\n\nexport function updateOrientation(\n field: DynamicFormFieldSchema,\n orientation: 'horizontal' | 'vertical'\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'choice' || type === 'choices') return { ...field, orientation };\n return field;\n}\n\nexport function updateOptions(\n field: DynamicFormFieldSchema,\n options: FieldOption[]\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'dropdown' || type === 'choice' || type === 'radio_cards' || type === 'choices') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageOptions(\n field: DynamicFormFieldSchema,\n options: ImageFieldOption[]\n): DynamicFormFieldSchema {\n if (field.type === 'image_radio_card') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageLayout(\n field: DynamicFormFieldSchema,\n next: {\n gridColumnsCount?: number | undefined;\n gridItemHeight?: string | undefined;\n gridColumns?: string | undefined;\n gridRows?: string | undefined;\n gridGap?: string | undefined;\n imageFit?: 'cover' | 'contain' | undefined;\n }\n): DynamicFormFieldSchema {\n if (field.type !== 'image_radio_card') return field;\n return { ...field, ...next };\n}\n\nexport function resetFieldType(\n field: DynamicFormFieldSchema,\n nextType: FieldType,\n allFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const base: DynamicFormFieldSchema = createDefaultField(nextType, allFields);\n return {\n ...base,\n name: field.name,\n label: field.label,\n description: field.description,\n required: field.required,\n validation: field.validation,\n };\n}\n"],"mappings":"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","names":["import_react","import_themes","RadixCard","import_themes","import_themes","import_clsx","import_react","import_react","import_themes","import_jsx_runtime","import_jsx_runtime","_a","RadixSelect","import_themes","import_clsx","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
@@ -1,12 +1,14 @@
1
1
  import {
2
2
  DynamicFormEditorFieldListPanel
3
- } from "../chunk-7R65MUL6.js";
3
+ } from "../chunk-2O7NVLVP.js";
4
4
  import "../chunk-Z7WNKARH.js";
5
- import "../chunk-X2GMDZ7M.js";
6
- import "../chunk-RP2RGCAW.js";
7
- import "../chunk-PMJIFLDT.js";
5
+ import "../chunk-YXMB4MCM.js";
6
+ import "../chunk-GR4PG6HY.js";
8
7
  import "../chunk-LDBWASUA.js";
9
8
  import "../chunk-25HMMI7R.js";
9
+ import "../chunk-RP2RGCAW.js";
10
+ import "../chunk-WYWM2HSZ.js";
11
+ import "../chunk-VFQD57ZY.js";
10
12
  import "../chunk-CRTRMMJ7.js";
11
13
  export {
12
14
  DynamicFormEditorFieldListPanel
@@ -92,6 +92,7 @@ var import_themes2 = require("@radix-ui/themes");
92
92
 
93
93
  // src/atoms/typo.tsx
94
94
  var import_themes3 = require("@radix-ui/themes");
95
+ var import_clsx = require("clsx");
95
96
  var import_react2 = require("react");
96
97
 
97
98
  // src/utils/map-with-responsive.ts
@@ -112,11 +113,38 @@ var mapWithResponsive = (args) => {
112
113
  return value;
113
114
  };
114
115
 
116
+ // src/utils/resolve-color.ts
117
+ var SEMANTIC_COLOR_MAP = {
118
+ error: "red",
119
+ neutral: "gray",
120
+ success: "green",
121
+ accent: void 0
122
+ };
123
+ var CUSTOM_COLOR_MAP = {
124
+ black: { className: "tipp-accent-black", fallbackColor: "gray" }
125
+ };
126
+ var isSemanticColor = (color) => color !== void 0 && color in SEMANTIC_COLOR_MAP;
127
+ var isCustomColor = (color) => color !== void 0 && color in CUSTOM_COLOR_MAP;
128
+ var resolveColor = (color) => {
129
+ if (isCustomColor(color)) {
130
+ const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];
131
+ return { color: fallbackColor, className };
132
+ }
133
+ if (isSemanticColor(color)) {
134
+ return { color: SEMANTIC_COLOR_MAP[color] };
135
+ }
136
+ return { color };
137
+ };
138
+
115
139
  // src/atoms/typo.tsx
116
140
  var import_jsx_runtime2 = require("react/jsx-runtime");
117
141
  var Typo = (0, import_react2.forwardRef)(
118
142
  (props, ref) => {
119
- const _a = props, { size, variant, children } = _a, rest = __objRest(_a, ["size", "variant", "children"]);
143
+ const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
144
+ const { color: radixColor, className: colorClassName } = (0, import_react2.useMemo)(
145
+ () => resolveColor(color),
146
+ [color]
147
+ );
120
148
  const radixSize = (0, import_react2.useMemo)(() => {
121
149
  if (size !== void 0) return size;
122
150
  if (variant === void 0) return "2";
@@ -135,7 +163,16 @@ var Typo = (0, import_react2.forwardRef)(
135
163
  }
136
164
  });
137
165
  }, [size, variant]);
138
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_themes3.Text, __spreadProps(__spreadValues({}, rest), { ref, size: radixSize, children }));
166
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
167
+ import_themes3.Text,
168
+ __spreadProps(__spreadValues({}, rest), {
169
+ className: (0, import_clsx.clsx)(colorClassName, className),
170
+ color: radixColor,
171
+ ref,
172
+ size: radixSize,
173
+ children
174
+ })
175
+ );
139
176
  }
140
177
  );
141
178
  Typo.displayName = "Typo";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/molecules/dynamic-form-editor-issues-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts"],"sourcesContent":["import React from 'react';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Typo } from '@/atoms/typo';\nimport type { SchemaIssue } from './dynamic-form-editor-utils';\n\nexport interface DynamicFormEditorIssuesPanelProps {\n issues: SchemaIssue[];\n}\n\nexport function DynamicFormEditorIssuesPanel(\n props: DynamicFormEditorIssuesPanelProps\n): React.ReactElement | null {\n const { issues } = props;\n if (issues.length === 0) return null;\n\n return (\n <Card style={{ padding: 12 }}>\n <Flex direction=\"column\" gap=\"2\">\n <Typo variant=\"caption\">스키마 이슈</Typo>\n {issues.map((i) => (\n <Typo\n color={i.level === 'error' ? 'red' : 'gray'}\n key={i.id}\n variant=\"caption\"\n >\n [{i.level}] {i.message}\n {i.fieldName ? ` (field: ${i.fieldName})` : ''}\n </Typo>\n ))}\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\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","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"],"mappings":"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","names":["RadixCard","import_themes","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/molecules/dynamic-form-editor-issues-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/resolve-color.ts"],"sourcesContent":["import React from 'react';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Typo } from '@/atoms/typo';\nimport type { SchemaIssue } from './dynamic-form-editor-utils';\n\nexport interface DynamicFormEditorIssuesPanelProps {\n issues: SchemaIssue[];\n}\n\nexport function DynamicFormEditorIssuesPanel(\n props: DynamicFormEditorIssuesPanelProps\n): React.ReactElement | null {\n const { issues } = props;\n if (issues.length === 0) return null;\n\n return (\n <Card style={{ padding: 12 }}>\n <Flex direction=\"column\" gap=\"2\">\n <Typo variant=\"caption\">스키마 이슈</Typo>\n {issues.map((i) => (\n <Typo\n color={i.level === 'error' ? 'red' : 'gray'}\n key={i.id}\n variant=\"caption\"\n >\n [{i.level}] {i.message}\n {i.fieldName ? ` (field: ${i.fieldName})` : ''}\n </Typo>\n ))}\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\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 { clsx } from 'clsx';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\n\nexport type TypoProps = DistributiveOmit<RadixTextProps, 'color'> & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n color?: UiColor;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, ...rest } = props;\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\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\n {...rest}\n className={clsx(colorClassName, className)}\n color={radixColor}\n ref={ref}\n size={radixSize}\n >\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\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 { BadgeProps as RadixBadgeProps } from '@radix-ui/themes';\n\n/**\n * Radix Themes가 제공하는 accent color union (gray, red, blue, ...).\n * 모든 color 지원 컴포넌트가 동일한 union을 공유하므로 Badge에서 파생한다.\n */\nexport type RadixColor = NonNullable<RadixBadgeProps['color']>;\n\n/** TIPP 시맨틱 color 별칭. */\nexport type SemanticColor = 'error' | 'accent' | 'neutral' | 'success';\n\n/**\n * Radix accent에 대응이 없어 CSS accent override로 처리하는 커스텀 color.\n * (예: black — `style/black.scss`의 `.tipp-accent-black` 참고)\n */\nexport type CustomColor = 'black';\n\n/** color 지원 컴포넌트가 노출하는 통합 color 타입. */\nexport type UiColor = RadixColor | SemanticColor | CustomColor;\n\n/**\n * union 각 멤버에 분배되는 Omit.\n * Radix의 polymorphic 컴포넌트 props(Text/Heading/Link 등 `as`로 분기되는 union)에서\n * 키를 제거할 때 일반 Omit은 union을 단일 객체로 합쳐 `as` 분기를 무너뜨리므로 이 타입을 쓴다.\n */\nexport type DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n ? Omit<T, K>\n : never;\n\nconst SEMANTIC_COLOR_MAP: Record<SemanticColor, RadixColor | undefined> = {\n error: 'red',\n neutral: 'gray',\n success: 'green',\n accent: undefined,\n};\n\ninterface CustomColorConfig {\n /**\n * accent override를 적용할 className.\n */\n className: string;\n /**\n * Radix에 넘길 fallback color.\n * Text/Heading/Link 등은 `color` prop이 있어야 `data-accent-color`가 붙어\n * `--accent-*`를 참조하므로, 유효한 Radix color를 함께 넘긴 뒤 className으로\n * `--accent-*`를 덮어쓴다. (Badge/Button은 prop 없이도 accent 기반이라 무해)\n */\n fallbackColor: RadixColor;\n}\n\nconst CUSTOM_COLOR_MAP: Record<CustomColor, CustomColorConfig> = {\n black: { className: 'tipp-accent-black', fallbackColor: 'gray' },\n};\n\nconst isSemanticColor = (color?: UiColor): color is SemanticColor =>\n color !== undefined && color in SEMANTIC_COLOR_MAP;\n\nconst isCustomColor = (color?: UiColor): color is CustomColor =>\n color !== undefined && color in CUSTOM_COLOR_MAP;\n\nexport interface ResolvedColor {\n /** Radix 컴포넌트의 `color` prop에 그대로 전달할 값. custom color면 undefined. */\n color?: RadixColor;\n /** accent override를 적용하기 위해 요소에 붙일 className. */\n className?: string;\n}\n\n/**\n * 통합 color 입력을 Radix color prop과 className으로 정규화한다.\n *\n * - custom color(black 등): Radix color는 비우고 accent override className을 반환\n * - semantic color(error/neutral/success/accent): 대응 Radix color로 변환\n * - Radix color: 그대로 pass-through\n */\nexport const resolveColor = (color?: UiColor): ResolvedColor => {\n if (isCustomColor(color)) {\n const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];\n return { color: fallbackColor, className };\n }\n\n if (isSemanticColor(color)) {\n return { color: SEMANTIC_COLOR_MAP[color] };\n }\n\n return { color };\n};\n"],"mappings":"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","names":["RadixCard","import_themes","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  DynamicFormEditorIssuesPanel
3
- } from "../chunk-AA6OYHCE.js";
4
- import "../chunk-RP2RGCAW.js";
5
- import "../chunk-PMJIFLDT.js";
3
+ } from "../chunk-7JW5Z2TL.js";
4
+ import "../chunk-GR4PG6HY.js";
6
5
  import "../chunk-LDBWASUA.js";
7
6
  import "../chunk-25HMMI7R.js";
7
+ import "../chunk-RP2RGCAW.js";
8
+ import "../chunk-VFQD57ZY.js";
8
9
  import "../chunk-CRTRMMJ7.js";
9
10
  export {
10
11
  DynamicFormEditorIssuesPanel