@tipp/ui 2.7.0 → 2.8.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 (399) hide show
  1. package/dist/app/index.cjs +10 -2
  2. package/dist/app/index.cjs.map +1 -1
  3. package/dist/app/index.js +101 -100
  4. package/dist/app/platform/coach-question-list.cjs +10 -2
  5. package/dist/app/platform/coach-question-list.cjs.map +1 -1
  6. package/dist/app/platform/coach-question-list.js +33 -32
  7. package/dist/app/platform/contents-card.cjs +10 -2
  8. package/dist/app/platform/contents-card.cjs.map +1 -1
  9. package/dist/app/platform/contents-card.js +33 -32
  10. package/dist/app/platform/curriculum-card.cjs +10 -2
  11. package/dist/app/platform/curriculum-card.cjs.map +1 -1
  12. package/dist/app/platform/curriculum-card.js +5 -4
  13. package/dist/app/platform/edit-coaching-time.cjs +10 -2
  14. package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
  15. package/dist/app/platform/edit-coaching-time.js +79 -78
  16. package/dist/app/platform/edit-service-type.cjs +10 -2
  17. package/dist/app/platform/edit-service-type.cjs.map +1 -1
  18. package/dist/app/platform/edit-service-type.js +80 -79
  19. package/dist/app/platform/goal-manage-card-edit.cjs +10 -2
  20. package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
  21. package/dist/app/platform/goal-manage-card-edit.js +79 -78
  22. package/dist/app/platform/goal-manage-card-read.cjs +10 -2
  23. package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
  24. package/dist/app/platform/goal-manage-card-read.js +33 -32
  25. package/dist/app/platform/on-offline-radio-card.cjs +10 -2
  26. package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
  27. package/dist/app/platform/on-offline-radio-card.js +79 -78
  28. package/dist/app/platform/report-card.cjs +10 -2
  29. package/dist/app/platform/report-card.cjs.map +1 -1
  30. package/dist/app/platform/report-card.js +33 -32
  31. package/dist/app/platform/reservation-card.cjs +10 -2
  32. package/dist/app/platform/reservation-card.cjs.map +1 -1
  33. package/dist/app/platform/reservation-card.js +80 -79
  34. package/dist/app/platform/session-card.cjs +10 -2
  35. package/dist/app/platform/session-card.cjs.map +1 -1
  36. package/dist/app/platform/session-card.js +82 -81
  37. package/dist/app/platform/session-review-simple-read.cjs +10 -2
  38. package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
  39. package/dist/app/platform/session-review-simple-read.js +33 -32
  40. package/dist/app/platform/userInfos/coaching-customer-info/index.cjs +10 -2
  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 +38 -37
  43. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs +10 -2
  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 +33 -32
  46. package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs +10 -2
  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 +33 -32
  49. package/dist/app/platform/userInfos/coaching-customer-info/small.cjs +10 -2
  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 +33 -32
  52. package/dist/app/platform/userInfos/session-user-info-detail.cjs +10 -2
  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 +33 -32
  55. package/dist/app/platform/userInfos/utils.cjs +10 -2
  56. package/dist/app/platform/userInfos/utils.cjs.map +1 -1
  57. package/dist/app/platform/userInfos/utils.js +32 -31
  58. package/dist/atoms/bullet-text.cjs +8 -1
  59. package/dist/atoms/bullet-text.cjs.map +1 -1
  60. package/dist/atoms/bullet-text.js +3 -2
  61. package/dist/atoms/dialog.cjs +8 -1
  62. package/dist/atoms/dialog.cjs.map +1 -1
  63. package/dist/atoms/dialog.js +3 -2
  64. package/dist/atoms/ellipsis-tooltip.cjs +8 -1
  65. package/dist/atoms/ellipsis-tooltip.cjs.map +1 -1
  66. package/dist/atoms/ellipsis-tooltip.js +3 -2
  67. package/dist/atoms/field-error-wrapper.cjs +8 -1
  68. package/dist/atoms/field-error-wrapper.cjs.map +1 -1
  69. package/dist/atoms/field-error-wrapper.js +3 -2
  70. package/dist/atoms/heading.cjs +8 -1
  71. package/dist/atoms/heading.cjs.map +1 -1
  72. package/dist/atoms/heading.d.cts +2 -0
  73. package/dist/atoms/heading.d.ts +2 -0
  74. package/dist/atoms/heading.js +2 -1
  75. package/dist/atoms/index.cjs +10 -2
  76. package/dist/atoms/index.cjs.map +1 -1
  77. package/dist/atoms/index.js +67 -66
  78. package/dist/atoms/list.cjs +8 -1
  79. package/dist/atoms/list.cjs.map +1 -1
  80. package/dist/atoms/list.js +3 -2
  81. package/dist/atoms/pagination.cjs +8 -1
  82. package/dist/atoms/pagination.cjs.map +1 -1
  83. package/dist/atoms/pagination.js +3 -2
  84. package/dist/atoms/typo.cjs +8 -1
  85. package/dist/atoms/typo.cjs.map +1 -1
  86. package/dist/atoms/typo.d.cts +2 -0
  87. package/dist/atoms/typo.d.ts +2 -0
  88. package/dist/atoms/typo.js +2 -1
  89. package/dist/{chunk-UFM3EL52.js → chunk-3UJEOHQT.js} +6 -6
  90. package/dist/{chunk-6YJGQWD6.js → chunk-5BIICWFT.js} +6 -6
  91. package/dist/{chunk-Q3M6GFHY.js → chunk-5FLPPHUZ.js} +2 -2
  92. package/dist/{chunk-T2CGNUCP.js → chunk-5FXPD4NE.js} +5 -5
  93. package/dist/{chunk-IA74OBFY.js → chunk-5SXTL6NO.js} +2 -2
  94. package/dist/{chunk-RUJZ5PE7.js → chunk-6JPGF4MB.js} +2 -2
  95. package/dist/{chunk-PXMJK5D5.js → chunk-6Q26H64H.js} +6 -6
  96. package/dist/{chunk-OEHVGPWL.js → chunk-6XASFDTI.js} +15 -15
  97. package/dist/{chunk-LQ3WGFS7.js → chunk-6YPAN4D3.js} +7 -7
  98. package/dist/{chunk-GAA3RTRW.js → chunk-72ZC7DBY.js} +2 -2
  99. package/dist/{chunk-MMLVZWMD.js → chunk-77YN5S26.js} +3 -3
  100. package/dist/{chunk-2O7NVLVP.js → chunk-7NBGSPZU.js} +5 -5
  101. package/dist/{chunk-A26UWBVB.js → chunk-7TRT4QTP.js} +2 -2
  102. package/dist/{chunk-MP5KZULQ.js → chunk-7XMPNH2X.js} +8 -8
  103. package/dist/{chunk-H3GQHGFA.js → chunk-AEDSRBBB.js} +3 -3
  104. package/dist/{chunk-LIWQ47VQ.js → chunk-ANFQJ6YW.js} +9 -9
  105. package/dist/{chunk-TU6SGJ5Z.js → chunk-B7SKF5RD.js} +4 -4
  106. package/dist/{chunk-MCKWO7K4.js → chunk-BZCUF5K6.js} +5 -5
  107. package/dist/{chunk-KO3V7KB6.js → chunk-BZVA4RGI.js} +2 -2
  108. package/dist/{chunk-MSLSD7F6.js → chunk-C2FRAZT2.js} +2 -2
  109. package/dist/{chunk-XOQXIPLL.js → chunk-C5CEDLV6.js} +2 -2
  110. package/dist/{chunk-MSM2QG23.js → chunk-DBXQFZBB.js} +8 -8
  111. package/dist/{chunk-ZC2JPF7B.js → chunk-DDYPJWZV.js} +10 -10
  112. package/dist/{chunk-QPL7SJQM.js → chunk-DHP7LYK7.js} +2 -2
  113. package/dist/{chunk-YCLYKBWZ.js → chunk-DUXYDGHX.js} +6 -6
  114. package/dist/{chunk-JNEGSY5N.js → chunk-FFGGO6E4.js} +2 -2
  115. package/dist/{chunk-WY37V3W4.js → chunk-FIQJUO66.js} +5 -5
  116. package/dist/{chunk-NFMEBYNY.js → chunk-GBT2BBZS.js} +6 -6
  117. package/dist/{chunk-GREYLAMY.js → chunk-GMEGTXIV.js} +5 -5
  118. package/dist/{chunk-YWWYA2JZ.js → chunk-GTTZJ2Y7.js} +4 -4
  119. package/dist/{chunk-C2G3IB7G.js → chunk-IA4WXGVH.js} +2 -2
  120. package/dist/{chunk-YGNHAFBW.js → chunk-IIA2BVJI.js} +3 -3
  121. package/dist/{chunk-2SM37SB4.js → chunk-IYAN33WP.js} +3 -3
  122. package/dist/{chunk-ZAFLWQOV.js → chunk-KEFAYPBO.js} +4 -4
  123. package/dist/{chunk-OBWQ3N5D.js → chunk-L5WSNVSD.js} +3 -3
  124. package/dist/{chunk-AJTGTGOC.js → chunk-LCR5R743.js} +2 -2
  125. package/dist/{chunk-Z5LPHG2D.js → chunk-LXL7GJUM.js} +3 -3
  126. package/dist/{chunk-OA3DGWVL.js → chunk-MTESLX7K.js} +12 -12
  127. package/dist/{chunk-2I37QLRA.js → chunk-NIMF5FJI.js} +6 -6
  128. package/dist/{chunk-ZWYQ44CB.js → chunk-P6YCD2AV.js} +9 -9
  129. package/dist/chunk-PO2PBAHW.js +10 -0
  130. package/dist/chunk-PO2PBAHW.js.map +1 -0
  131. package/dist/{chunk-2WNLUQX5.js → chunk-PRLNOTMV.js} +6 -6
  132. package/dist/{chunk-VD5ZDFCM.js → chunk-PTUL6MDB.js} +2 -2
  133. package/dist/{chunk-RMVVV5NH.js → chunk-PWUCBBQP.js} +6 -6
  134. package/dist/{chunk-NIHOKIYW.js → chunk-PZDN6K6R.js} +6 -6
  135. package/dist/{chunk-E6GCU5IQ.js → chunk-QFSMOKC6.js} +2 -2
  136. package/dist/{chunk-TYEGB5FQ.js → chunk-R43F6ZWT.js} +2 -2
  137. package/dist/{chunk-GPULIICW.js → chunk-RVHE3UVN.js} +6 -6
  138. package/dist/{chunk-MGR37YQB.js → chunk-SGJBQKUD.js} +2 -2
  139. package/dist/{chunk-5OW76AER.js → chunk-SHFN2BOB.js} +2 -2
  140. package/dist/{chunk-OYXUWBKS.js → chunk-SQZVLRUH.js} +5 -5
  141. package/dist/{chunk-OWQUXTQ2.js → chunk-TF3RLGKA.js} +4 -4
  142. package/dist/{chunk-7PBLFV5L.js → chunk-U5LZO2EI.js} +6 -6
  143. package/dist/chunk-U7PMCTVQ.js +1 -0
  144. package/dist/{chunk-A4YOY75P.js → chunk-UA2HDDD4.js} +6 -6
  145. package/dist/{chunk-OQN4E2QP.js → chunk-UHAMISMF.js} +6 -6
  146. package/dist/{chunk-7JW5Z2TL.js → chunk-UILGIMXL.js} +5 -5
  147. package/dist/{chunk-HH6LML5K.js → chunk-UIMDXYPP.js} +6 -6
  148. package/dist/{chunk-M77YPVQN.js → chunk-URSBI6BQ.js} +3 -3
  149. package/dist/{chunk-2FB75HU2.js → chunk-VFWRW7TA.js} +2 -2
  150. package/dist/{chunk-447H6BVE.js → chunk-VVJEXKCB.js} +6 -6
  151. package/dist/{chunk-J7N2IZQW.js → chunk-VYUQXEXS.js} +5 -5
  152. package/dist/{chunk-GYSRHZRS.js → chunk-WLG6GG26.js} +3 -3
  153. package/dist/{chunk-ZUL3NYQ4.js → chunk-XFFVIWAD.js} +2 -2
  154. package/dist/{chunk-IM6E52L2.js → chunk-XOCVP6IW.js} +8 -8
  155. package/dist/{chunk-NYG34MV6.js → chunk-YCV3HR4J.js} +2 -2
  156. package/dist/{chunk-NLHVQJQ2.js → chunk-YIVIBIK2.js} +6 -2
  157. package/dist/chunk-YIVIBIK2.js.map +1 -0
  158. package/dist/{chunk-ZCQMCIT5.js → chunk-YWLFDIBP.js} +2 -2
  159. package/dist/{chunk-GR4PG6HY.js → chunk-YXFHD2PY.js} +6 -2
  160. package/dist/chunk-YXFHD2PY.js.map +1 -0
  161. package/dist/{chunk-OPYRV6XJ.js → chunk-Z2U2YQOG.js} +2 -2
  162. package/dist/{chunk-PE4EBBU4.js → chunk-Z54XTEAF.js} +2 -2
  163. package/dist/context/dynamic-form-context.cjs +10 -2
  164. package/dist/context/dynamic-form-context.cjs.map +1 -1
  165. package/dist/context/dynamic-form-context.js +5 -4
  166. package/dist/context/index.cjs +10 -2
  167. package/dist/context/index.cjs.map +1 -1
  168. package/dist/context/index.js +5 -4
  169. package/dist/index.cjs +12 -2
  170. package/dist/index.cjs.map +1 -1
  171. package/dist/index.d.cts +1 -0
  172. package/dist/index.d.ts +1 -0
  173. package/dist/index.js +156 -152
  174. package/dist/molecules/autocomplete-textfield.cjs +8 -1
  175. package/dist/molecules/autocomplete-textfield.cjs.map +1 -1
  176. package/dist/molecules/autocomplete-textfield.js +3 -2
  177. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs +10 -2
  178. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs.map +1 -1
  179. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +14 -13
  180. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs +8 -1
  181. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs.map +1 -1
  182. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +3 -2
  183. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs +8 -1
  184. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs.map +1 -1
  185. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +10 -9
  186. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs +10 -2
  187. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs.map +1 -1
  188. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.js +4 -3
  189. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs +8 -1
  190. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs.map +1 -1
  191. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +5 -4
  192. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs +8 -1
  193. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs.map +1 -1
  194. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +5 -4
  195. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs +8 -1
  196. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs.map +1 -1
  197. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +5 -4
  198. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs +8 -1
  199. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs.map +1 -1
  200. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +6 -5
  201. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs +10 -2
  202. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs.map +1 -1
  203. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +4 -3
  204. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs +10 -2
  205. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs.map +1 -1
  206. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +18 -17
  207. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs +10 -2
  208. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs.map +1 -1
  209. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +5 -4
  210. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs +8 -1
  211. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs.map +1 -1
  212. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.js +3 -2
  213. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs +8 -1
  214. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs.map +1 -1
  215. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.js +3 -2
  216. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs +10 -2
  217. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
  218. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +20 -19
  219. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs +10 -2
  220. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
  221. package/dist/molecules/curriculumV2/CurriculumContents/index.js +23 -22
  222. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs +8 -1
  223. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs.map +1 -1
  224. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.js +3 -2
  225. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs +8 -1
  226. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs.map +1 -1
  227. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +4 -3
  228. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs +8 -1
  229. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs.map +1 -1
  230. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.js +3 -2
  231. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs +8 -1
  232. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
  233. package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +8 -7
  234. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs +8 -1
  235. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs.map +1 -1
  236. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +6 -5
  237. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs +10 -2
  238. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
  239. package/dist/molecules/curriculumV2/curriculum-sub-nav.js +4 -3
  240. package/dist/molecules/curriculumV2/index.cjs +10 -2
  241. package/dist/molecules/curriculumV2/index.cjs.map +1 -1
  242. package/dist/molecules/curriculumV2/index.js +34 -33
  243. package/dist/molecules/date-picker/date-picker-button.cjs +10 -2
  244. package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
  245. package/dist/molecules/date-picker/date-picker-button.js +5 -4
  246. package/dist/molecules/date-picker/index.cjs +10 -2
  247. package/dist/molecules/date-picker/index.cjs.map +1 -1
  248. package/dist/molecules/date-picker/index.js +4 -3
  249. package/dist/molecules/description-json-render.cjs +10 -1
  250. package/dist/molecules/description-json-render.cjs.map +1 -1
  251. package/dist/molecules/description-json-render.js +5 -4
  252. package/dist/molecules/download-card.cjs +8 -1
  253. package/dist/molecules/download-card.cjs.map +1 -1
  254. package/dist/molecules/download-card.js +3 -2
  255. package/dist/molecules/dynamic-field.cjs +10 -2
  256. package/dist/molecules/dynamic-field.cjs.map +1 -1
  257. package/dist/molecules/dynamic-field.js +7 -6
  258. package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs +8 -1
  259. package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs.map +1 -1
  260. package/dist/molecules/dynamic-form-editor-field-editor-panel.js +5 -4
  261. package/dist/molecules/dynamic-form-editor-field-list-panel.cjs +8 -1
  262. package/dist/molecules/dynamic-form-editor-field-list-panel.cjs.map +1 -1
  263. package/dist/molecules/dynamic-form-editor-field-list-panel.js +4 -3
  264. package/dist/molecules/dynamic-form-editor-issues-panel.cjs +8 -1
  265. package/dist/molecules/dynamic-form-editor-issues-panel.cjs.map +1 -1
  266. package/dist/molecules/dynamic-form-editor-issues-panel.js +4 -3
  267. package/dist/molecules/dynamic-form-editor-preview-panel.cjs +10 -2
  268. package/dist/molecules/dynamic-form-editor-preview-panel.cjs.map +1 -1
  269. package/dist/molecules/dynamic-form-editor-preview-panel.js +10 -9
  270. package/dist/molecules/dynamic-form-editor.cjs +10 -2
  271. package/dist/molecules/dynamic-form-editor.cjs.map +1 -1
  272. package/dist/molecules/dynamic-form-editor.js +16 -15
  273. package/dist/molecules/dynamic-form.cjs +10 -2
  274. package/dist/molecules/dynamic-form.cjs.map +1 -1
  275. package/dist/molecules/dynamic-form.js +8 -7
  276. package/dist/molecules/expand-table/index.cjs +8 -1
  277. package/dist/molecules/expand-table/index.cjs.map +1 -1
  278. package/dist/molecules/expand-table/index.js +5 -4
  279. package/dist/molecules/force-refresh.cjs +8 -1
  280. package/dist/molecules/force-refresh.cjs.map +1 -1
  281. package/dist/molecules/force-refresh.js +3 -2
  282. package/dist/molecules/form/form.cjs +10 -2
  283. package/dist/molecules/form/form.cjs.map +1 -1
  284. package/dist/molecules/form/form.js +4 -3
  285. package/dist/molecules/form/index.cjs +10 -2
  286. package/dist/molecules/form/index.cjs.map +1 -1
  287. package/dist/molecules/form/index.js +4 -3
  288. package/dist/molecules/ghost-post.cjs +8 -1
  289. package/dist/molecules/ghost-post.cjs.map +1 -1
  290. package/dist/molecules/ghost-post.js +3 -2
  291. package/dist/molecules/index.cjs +10 -2
  292. package/dist/molecules/index.cjs.map +1 -1
  293. package/dist/molecules/index.js +72 -71
  294. package/dist/molecules/learning-post.cjs +10 -2
  295. package/dist/molecules/learning-post.cjs.map +1 -1
  296. package/dist/molecules/learning-post.js +6 -5
  297. package/dist/molecules/navigation.cjs +8 -1
  298. package/dist/molecules/navigation.cjs.map +1 -1
  299. package/dist/molecules/navigation.js +3 -2
  300. package/dist/molecules/one-on-one-guide-list.cjs +10 -2
  301. package/dist/molecules/one-on-one-guide-list.cjs.map +1 -1
  302. package/dist/molecules/one-on-one-guide-list.js +5 -4
  303. package/dist/molecules/stepper.cjs +8 -1
  304. package/dist/molecules/stepper.cjs.map +1 -1
  305. package/dist/molecules/stepper.js +4 -3
  306. package/dist/molecules/tag-selector.cjs +8 -1
  307. package/dist/molecules/tag-selector.cjs.map +1 -1
  308. package/dist/molecules/tag-selector.js +5 -4
  309. package/dist/molecules/time-select.js +2 -1
  310. package/dist/molecules/training-info-guideline.cjs +10 -2
  311. package/dist/molecules/training-info-guideline.cjs.map +1 -1
  312. package/dist/molecules/training-info-guideline.js +6 -5
  313. package/dist/utils/index.cjs +8 -0
  314. package/dist/utils/index.cjs.map +1 -1
  315. package/dist/utils/index.d.cts +2 -0
  316. package/dist/utils/index.d.ts +2 -0
  317. package/dist/utils/index.js +5 -1
  318. package/dist/utils/mono-style.cjs +34 -0
  319. package/dist/utils/mono-style.cjs.map +1 -0
  320. package/dist/utils/mono-style.d.cts +12 -0
  321. package/dist/utils/mono-style.d.ts +12 -0
  322. package/dist/utils/mono-style.js +8 -0
  323. package/dist/utils/mono-style.js.map +1 -0
  324. package/package.json +1 -1
  325. package/src/atoms/heading.tsx +6 -1
  326. package/src/atoms/typo.tsx +6 -1
  327. package/src/utils/index.ts +2 -1
  328. package/src/utils/mono-style.ts +13 -0
  329. package/dist/chunk-GR4PG6HY.js.map +0 -1
  330. package/dist/chunk-NLHVQJQ2.js.map +0 -1
  331. package/dist/chunk-OLJN3WXR.js +0 -1
  332. /package/dist/{chunk-UFM3EL52.js.map → chunk-3UJEOHQT.js.map} +0 -0
  333. /package/dist/{chunk-6YJGQWD6.js.map → chunk-5BIICWFT.js.map} +0 -0
  334. /package/dist/{chunk-Q3M6GFHY.js.map → chunk-5FLPPHUZ.js.map} +0 -0
  335. /package/dist/{chunk-T2CGNUCP.js.map → chunk-5FXPD4NE.js.map} +0 -0
  336. /package/dist/{chunk-IA74OBFY.js.map → chunk-5SXTL6NO.js.map} +0 -0
  337. /package/dist/{chunk-RUJZ5PE7.js.map → chunk-6JPGF4MB.js.map} +0 -0
  338. /package/dist/{chunk-PXMJK5D5.js.map → chunk-6Q26H64H.js.map} +0 -0
  339. /package/dist/{chunk-OEHVGPWL.js.map → chunk-6XASFDTI.js.map} +0 -0
  340. /package/dist/{chunk-LQ3WGFS7.js.map → chunk-6YPAN4D3.js.map} +0 -0
  341. /package/dist/{chunk-GAA3RTRW.js.map → chunk-72ZC7DBY.js.map} +0 -0
  342. /package/dist/{chunk-MMLVZWMD.js.map → chunk-77YN5S26.js.map} +0 -0
  343. /package/dist/{chunk-2O7NVLVP.js.map → chunk-7NBGSPZU.js.map} +0 -0
  344. /package/dist/{chunk-A26UWBVB.js.map → chunk-7TRT4QTP.js.map} +0 -0
  345. /package/dist/{chunk-MP5KZULQ.js.map → chunk-7XMPNH2X.js.map} +0 -0
  346. /package/dist/{chunk-H3GQHGFA.js.map → chunk-AEDSRBBB.js.map} +0 -0
  347. /package/dist/{chunk-LIWQ47VQ.js.map → chunk-ANFQJ6YW.js.map} +0 -0
  348. /package/dist/{chunk-TU6SGJ5Z.js.map → chunk-B7SKF5RD.js.map} +0 -0
  349. /package/dist/{chunk-MCKWO7K4.js.map → chunk-BZCUF5K6.js.map} +0 -0
  350. /package/dist/{chunk-KO3V7KB6.js.map → chunk-BZVA4RGI.js.map} +0 -0
  351. /package/dist/{chunk-MSLSD7F6.js.map → chunk-C2FRAZT2.js.map} +0 -0
  352. /package/dist/{chunk-XOQXIPLL.js.map → chunk-C5CEDLV6.js.map} +0 -0
  353. /package/dist/{chunk-MSM2QG23.js.map → chunk-DBXQFZBB.js.map} +0 -0
  354. /package/dist/{chunk-ZC2JPF7B.js.map → chunk-DDYPJWZV.js.map} +0 -0
  355. /package/dist/{chunk-QPL7SJQM.js.map → chunk-DHP7LYK7.js.map} +0 -0
  356. /package/dist/{chunk-YCLYKBWZ.js.map → chunk-DUXYDGHX.js.map} +0 -0
  357. /package/dist/{chunk-JNEGSY5N.js.map → chunk-FFGGO6E4.js.map} +0 -0
  358. /package/dist/{chunk-WY37V3W4.js.map → chunk-FIQJUO66.js.map} +0 -0
  359. /package/dist/{chunk-NFMEBYNY.js.map → chunk-GBT2BBZS.js.map} +0 -0
  360. /package/dist/{chunk-GREYLAMY.js.map → chunk-GMEGTXIV.js.map} +0 -0
  361. /package/dist/{chunk-YWWYA2JZ.js.map → chunk-GTTZJ2Y7.js.map} +0 -0
  362. /package/dist/{chunk-C2G3IB7G.js.map → chunk-IA4WXGVH.js.map} +0 -0
  363. /package/dist/{chunk-YGNHAFBW.js.map → chunk-IIA2BVJI.js.map} +0 -0
  364. /package/dist/{chunk-2SM37SB4.js.map → chunk-IYAN33WP.js.map} +0 -0
  365. /package/dist/{chunk-ZAFLWQOV.js.map → chunk-KEFAYPBO.js.map} +0 -0
  366. /package/dist/{chunk-OBWQ3N5D.js.map → chunk-L5WSNVSD.js.map} +0 -0
  367. /package/dist/{chunk-AJTGTGOC.js.map → chunk-LCR5R743.js.map} +0 -0
  368. /package/dist/{chunk-Z5LPHG2D.js.map → chunk-LXL7GJUM.js.map} +0 -0
  369. /package/dist/{chunk-OA3DGWVL.js.map → chunk-MTESLX7K.js.map} +0 -0
  370. /package/dist/{chunk-2I37QLRA.js.map → chunk-NIMF5FJI.js.map} +0 -0
  371. /package/dist/{chunk-ZWYQ44CB.js.map → chunk-P6YCD2AV.js.map} +0 -0
  372. /package/dist/{chunk-2WNLUQX5.js.map → chunk-PRLNOTMV.js.map} +0 -0
  373. /package/dist/{chunk-VD5ZDFCM.js.map → chunk-PTUL6MDB.js.map} +0 -0
  374. /package/dist/{chunk-RMVVV5NH.js.map → chunk-PWUCBBQP.js.map} +0 -0
  375. /package/dist/{chunk-NIHOKIYW.js.map → chunk-PZDN6K6R.js.map} +0 -0
  376. /package/dist/{chunk-E6GCU5IQ.js.map → chunk-QFSMOKC6.js.map} +0 -0
  377. /package/dist/{chunk-TYEGB5FQ.js.map → chunk-R43F6ZWT.js.map} +0 -0
  378. /package/dist/{chunk-GPULIICW.js.map → chunk-RVHE3UVN.js.map} +0 -0
  379. /package/dist/{chunk-MGR37YQB.js.map → chunk-SGJBQKUD.js.map} +0 -0
  380. /package/dist/{chunk-5OW76AER.js.map → chunk-SHFN2BOB.js.map} +0 -0
  381. /package/dist/{chunk-OYXUWBKS.js.map → chunk-SQZVLRUH.js.map} +0 -0
  382. /package/dist/{chunk-OWQUXTQ2.js.map → chunk-TF3RLGKA.js.map} +0 -0
  383. /package/dist/{chunk-7PBLFV5L.js.map → chunk-U5LZO2EI.js.map} +0 -0
  384. /package/dist/{chunk-OLJN3WXR.js.map → chunk-U7PMCTVQ.js.map} +0 -0
  385. /package/dist/{chunk-A4YOY75P.js.map → chunk-UA2HDDD4.js.map} +0 -0
  386. /package/dist/{chunk-OQN4E2QP.js.map → chunk-UHAMISMF.js.map} +0 -0
  387. /package/dist/{chunk-7JW5Z2TL.js.map → chunk-UILGIMXL.js.map} +0 -0
  388. /package/dist/{chunk-HH6LML5K.js.map → chunk-UIMDXYPP.js.map} +0 -0
  389. /package/dist/{chunk-M77YPVQN.js.map → chunk-URSBI6BQ.js.map} +0 -0
  390. /package/dist/{chunk-2FB75HU2.js.map → chunk-VFWRW7TA.js.map} +0 -0
  391. /package/dist/{chunk-447H6BVE.js.map → chunk-VVJEXKCB.js.map} +0 -0
  392. /package/dist/{chunk-J7N2IZQW.js.map → chunk-VYUQXEXS.js.map} +0 -0
  393. /package/dist/{chunk-GYSRHZRS.js.map → chunk-WLG6GG26.js.map} +0 -0
  394. /package/dist/{chunk-ZUL3NYQ4.js.map → chunk-XFFVIWAD.js.map} +0 -0
  395. /package/dist/{chunk-IM6E52L2.js.map → chunk-XOCVP6IW.js.map} +0 -0
  396. /package/dist/{chunk-NYG34MV6.js.map → chunk-YCV3HR4J.js.map} +0 -0
  397. /package/dist/{chunk-ZCQMCIT5.js.map → chunk-YWLFDIBP.js.map} +0 -0
  398. /package/dist/{chunk-OPYRV6XJ.js.map → chunk-Z2U2YQOG.js.map} +0 -0
  399. /package/dist/{chunk-PE4EBBU4.js.map → chunk-Z54XTEAF.js.map} +0 -0
@@ -6,65 +6,69 @@ import {
6
6
  sessionList
7
7
  } from "../../../chunk-BZ3EXV6A.js";
8
8
  import "../../../chunk-HBF6IIVZ.js";
9
- import "../../../chunk-MMLVZWMD.js";
9
+ import "../../../chunk-77YN5S26.js";
10
+ import "../../../chunk-KNIIDDYM.js";
11
+ import "../../../chunk-6TU647KJ.js";
12
+ import "../../../chunk-CGDBUDY3.js";
10
13
  import "../../../chunk-5XYPLDI5.js";
11
14
  import "../../../chunk-6NPTJBFE.js";
12
15
  import "../../../chunk-LNPFV5BJ.js";
16
+ import "../../../chunk-MUPK4L3U.js";
17
+ import "../../../chunk-MUNMDHRF.js";
18
+ import "../../../chunk-IT7ZTP7F.js";
13
19
  import "../../../chunk-YXMB4MCM.js";
14
20
  import "../../../chunk-HYITAA4J.js";
15
21
  import "../../../chunk-5H3YPCZK.js";
16
22
  import "../../../chunk-FR2GDOU2.js";
17
23
  import "../../../chunk-74DX4CU7.js";
18
- import "../../../chunk-KNIIDDYM.js";
19
- import "../../../chunk-6TU647KJ.js";
20
- import "../../../chunk-CGDBUDY3.js";
24
+ import "../../../chunk-Z2U2YQOG.js";
25
+ import "../../../chunk-5SXTL6NO.js";
26
+ import "../../../chunk-RMW3MQF5.js";
21
27
  import "../../../chunk-TNNF5Q62.js";
22
28
  import "../../../chunk-YO3BQW6S.js";
23
29
  import "../../../chunk-DX3DLP5Z.js";
24
30
  import "../../../chunk-SA7AYYQS.js";
25
31
  import "../../../chunk-3TOUVBIB.js";
26
- import "../../../chunk-MUPK4L3U.js";
27
- import "../../../chunk-MUNMDHRF.js";
28
- import "../../../chunk-IT7ZTP7F.js";
32
+ import "../../../chunk-EGEQY3KT.js";
33
+ import "../../../chunk-24PX34TH.js";
29
34
  import "../../../chunk-XQOL7UBI.js";
30
35
  import "../../../chunk-TULWX7D6.js";
31
36
  import "../../../chunk-BI6TW3ZO.js";
32
- import "../../../chunk-OPYRV6XJ.js";
33
- import "../../../chunk-IA74OBFY.js";
34
- import "../../../chunk-RMW3MQF5.js";
37
+ import "../../../chunk-ZPUNTAVI.js";
38
+ import "../../../chunk-Z54XTEAF.js";
39
+ import "../../../chunk-YIVIBIK2.js";
40
+ import "../../../chunk-JCUG2XKB.js";
41
+ import "../../../chunk-645GPOW2.js";
42
+ import "../../../chunk-U7N2PWMO.js";
43
+ import "../../../chunk-7RJYF5L3.js";
44
+ import "../../../chunk-HF6GNDPV.js";
35
45
  import "../../../chunk-T73HHR3I.js";
36
- import "../../../chunk-Q3M6GFHY.js";
46
+ import "../../../chunk-5FLPPHUZ.js";
37
47
  import "../../../chunk-2M3UFZUD.js";
38
48
  import "../../../chunk-PT57HCAI.js";
39
49
  import "../../../chunk-2DZ2Y3JI.js";
40
- import "../../../chunk-GAA3RTRW.js";
41
- import "../../../chunk-EGEQY3KT.js";
42
- import "../../../chunk-24PX34TH.js";
50
+ import "../../../chunk-72ZC7DBY.js";
51
+ import "../../../chunk-EIKFXUNC.js";
52
+ import "../../../chunk-RP2RGCAW.js";
53
+ import "../../../chunk-JETG3WEI.js";
43
54
  import "../../../chunk-WG5OK3YN.js";
44
55
  import "../../../chunk-ZCGH6TJ3.js";
45
56
  import "../../../chunk-UFWDQGOK.js";
46
57
  import "../../../chunk-NFDQJVFA.js";
47
58
  import "../../../chunk-Q37G2GS6.js";
48
- import "../../../chunk-ZPUNTAVI.js";
49
- import "../../../chunk-PE4EBBU4.js";
50
- import "../../../chunk-NLHVQJQ2.js";
51
- import "../../../chunk-JCUG2XKB.js";
52
- import "../../../chunk-645GPOW2.js";
53
- import "../../../chunk-U7N2PWMO.js";
54
- import "../../../chunk-7RJYF5L3.js";
55
- import "../../../chunk-HF6GNDPV.js";
59
+ import "../../../chunk-6SYFG6YY.js";
60
+ import "../../../chunk-GPZXD762.js";
61
+ import "../../../chunk-BK74U562.js";
56
62
  import "../../../chunk-UFRB2BVD.js";
57
63
  import "../../../chunk-4Y5BEXVN.js";
58
- import "../../../chunk-C2G3IB7G.js";
59
- import "../../../chunk-GR4PG6HY.js";
64
+ import "../../../chunk-IA4WXGVH.js";
65
+ import "../../../chunk-YXFHD2PY.js";
60
66
  import "../../../chunk-LDBWASUA.js";
67
+ import "../../../chunk-PO2PBAHW.js";
61
68
  import "../../../chunk-25HMMI7R.js";
62
69
  import "../../../chunk-2LCH3PDF.js";
63
70
  import "../../../chunk-LQY4RKWI.js";
64
71
  import "../../../chunk-ZD7MNMED.js";
65
- import "../../../chunk-EIKFXUNC.js";
66
- import "../../../chunk-RP2RGCAW.js";
67
- import "../../../chunk-JETG3WEI.js";
68
72
  import "../../../chunk-VOME2TE7.js";
69
73
  import "../../../chunk-JVXATVAC.js";
70
74
  import "../../../chunk-B3VSXNTH.js";
@@ -84,11 +88,8 @@ import "../../../chunk-ZUYCXCPW.js";
84
88
  import "../../../chunk-YVFNJE4E.js";
85
89
  import "../../../chunk-GI4AN2IZ.js";
86
90
  import "../../../chunk-WYWM2HSZ.js";
87
- import "../../../chunk-EAXUQEO5.js";
88
- import "../../../chunk-6SYFG6YY.js";
89
- import "../../../chunk-GPZXD762.js";
90
- import "../../../chunk-BK74U562.js";
91
91
  import "../../../chunk-VFQD57ZY.js";
92
+ import "../../../chunk-EAXUQEO5.js";
92
93
  import "../../../chunk-CRTRMMJ7.js";
93
94
  export {
94
95
  CopyButton,
@@ -76,6 +76,12 @@ var mapWithResponsive = (args) => {
76
76
  return value;
77
77
  };
78
78
 
79
+ // src/utils/mono-style.ts
80
+ var MONO_STYLE = {
81
+ fontFamily: 'var(--code-font-family, ui-monospace, "SF Mono", monospace)',
82
+ fontVariantNumeric: "tabular-nums"
83
+ };
84
+
79
85
  // src/utils/resolve-color.ts
80
86
  var SEMANTIC_COLOR_MAP = {
81
87
  error: "red",
@@ -103,7 +109,7 @@ var resolveColor = (color) => {
103
109
  var import_jsx_runtime = require("react/jsx-runtime");
104
110
  var Typo = (0, import_react.forwardRef)(
105
111
  (props, ref) => {
106
- const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
112
+ const _a = props, { size, variant, children, color, className, mono, style } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className", "mono", "style"]);
107
113
  const { color: radixColor, className: colorClassName } = (0, import_react.useMemo)(
108
114
  () => resolveColor(color),
109
115
  [color]
@@ -133,6 +139,7 @@ var Typo = (0, import_react.forwardRef)(
133
139
  color: radixColor,
134
140
  ref,
135
141
  size: radixSize,
142
+ style: mono ? __spreadValues(__spreadValues({}, MONO_STYLE), style) : style,
136
143
  children
137
144
  })
138
145
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/atoms/bullet-text.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/resolve-color.ts","../../src/atoms/flex.tsx"],"sourcesContent":["import React from 'react';\nimport type { TypoProps } from './typo';\nimport { Typo } from './typo';\nimport { Flex } from './flex';\n\nexport type BulletTextProps = TypoProps;\n\nexport function BulletText({\n children,\n ...rest\n}: BulletTextProps): React.ReactNode {\n return (\n <Flex gap=\"1\" ml=\"2\">\n <Typo {...rest}>•</Typo>\n <Typo {...rest}>{children}</Typo>\n </Flex>\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 { 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","export { Flex, type FlexProps } from '@radix-ui/themes';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,oBAAkC;AAClC,kBAAqB;AACrB,mBAA2C;;;ACFpC,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACUA,IAAM,qBAAoE;AAAA,EACxE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAgBA,IAAM,mBAA2D;AAAA,EAC/D,OAAO,EAAE,WAAW,qBAAqB,eAAe,OAAO;AACjE;AAEA,IAAM,kBAAkB,CAAC,UACvB,UAAU,UAAa,SAAS;AAElC,IAAM,gBAAgB,CAAC,UACrB,UAAU,UAAa,SAAS;AAgB3B,IAAM,eAAe,CAAC,UAAmC;AAC9D,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAW,cAAc,IAAI,iBAAiB,KAAK;AAC3D,WAAO,EAAE,OAAO,eAAe,UAAU;AAAA,EAC3C;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,EAAE,OAAO,mBAAmB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO,EAAE,MAAM;AACjB;;;AFrCM;AA/BC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAkB,QAAyB;AAC1C,UAA+D,YAAvD,QAAM,SAAS,UAAU,OAAO,UAnB5C,IAmBmE,IAAT,iBAAS,IAAT,CAA9C,QAAM,WAAS,YAAU,SAAO;AAExC,UAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,MACvD,MAAM,aAAa,KAAK;AAAA,MACxB,CAAC,KAAK;AAAA,IACR;AAEA,UAAM,gBAAY,sBAAgC,MAAM;AACtD,UAAI,SAAS,OAAW,QAAO;AAE/B,UAAI,YAAY,OAAW,QAAO;AAElC,aAAO,kBAAkB;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,CAAC,iBAAmD;AACzD,kBAAQ,cAAc;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AAAA,YACL;AACE,qBAAO;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,WACE;AAAA,MAAC,cAAAA;AAAA,MAAA,iCACK,OADL;AAAA,QAEC,eAAW,kBAAK,gBAAgB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA,QAEL;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AG7DnB,IAAAC,iBAAqC;;;AJYjC,IAAAC,sBAAA;AALG,SAAS,WAAW,IAGU;AAHV,eACzB;AAAA;AAAA,EARF,IAO2B,IAEtB,iBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,8CAAC,uBAAK,KAAI,KAAI,IAAG,KACf;AAAA,iDAAC,uCAAS,OAAT,EAAe,qBAAC;AAAA,IACjB,6CAAC,uCAAS,OAAT,EAAgB,WAAS;AAAA,KAC5B;AAEJ;","names":["RadixText","import_themes","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/atoms/bullet-text.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/mono-style.ts","../../src/utils/resolve-color.ts","../../src/atoms/flex.tsx"],"sourcesContent":["import React from 'react';\nimport type { TypoProps } from './typo';\nimport { Typo } from './typo';\nimport { Flex } from './flex';\n\nexport type BulletTextProps = TypoProps;\n\nexport function BulletText({\n children,\n ...rest\n}: BulletTextProps): React.ReactNode {\n return (\n <Flex gap=\"1\" ml=\"2\">\n <Typo {...rest}>•</Typo>\n <Typo {...rest}>{children}</Typo>\n </Flex>\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 { MONO_STYLE } from '../utils/mono-style';\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 /** 등폭(monospace) 폰트 + 숫자 고정폭 정렬(tabular-nums). 점수·퍼센트 등 수치 표시에 사용한다. */\n mono?: boolean;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, mono, style, ...rest } =\n 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 style={mono ? { ...MONO_STYLE, ...style } : style}\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 { CSSProperties } from 'react';\n\n/**\n * 등폭(monospace) 텍스트 스타일.\n * - `font-family`: 등폭 폰트(`--code-font-family`는 Radix Themes가 제공, 없으면 시스템 등폭으로 폴백)\n * - `font-variant-numeric: tabular-nums`: 숫자를 고정폭으로 정렬해 점수·퍼센트·통계가 자릿수마다 흔들리지 않게 함\n *\n * `Typo`/`Heading`의 `mono` prop 구현에 사용된다.\n */\nexport const MONO_STYLE: CSSProperties = {\n fontFamily: 'var(--code-font-family, ui-monospace, \"SF Mono\", monospace)',\n fontVariantNumeric: 'tabular-nums',\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","export { Flex, type FlexProps } from '@radix-ui/themes';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,oBAAkC;AAClC,kBAAqB;AACrB,mBAA2C;;;ACFpC,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACVO,IAAM,aAA4B;AAAA,EACvC,YAAY;AAAA,EACZ,oBAAoB;AACtB;;;ACiBA,IAAM,qBAAoE;AAAA,EACxE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAgBA,IAAM,mBAA2D;AAAA,EAC/D,OAAO,EAAE,WAAW,qBAAqB,eAAe,OAAO;AACjE;AAEA,IAAM,kBAAkB,CAAC,UACvB,UAAU,UAAa,SAAS;AAElC,IAAM,gBAAgB,CAAC,UACrB,UAAU,UAAa,SAAS;AAgB3B,IAAM,eAAe,CAAC,UAAmC;AAC9D,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAW,cAAc,IAAI,iBAAiB,KAAK;AAC3D,WAAO,EAAE,OAAO,eAAe,UAAU;AAAA,EAC3C;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,EAAE,OAAO,mBAAmB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO,EAAE,MAAM;AACjB;;;AHjCM;AAhCC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAkB,QAAyB;AAC1C,UACE,YADM,QAAM,SAAS,UAAU,OAAO,WAAW,MAAM,MAtB7D,IAuBM,IADiE,iBACjE,IADiE,CAA3D,QAAM,WAAS,YAAU,SAAO,aAAW,QAAM;AAGzD,UAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,MACvD,MAAM,aAAa,KAAK;AAAA,MACxB,CAAC,KAAK;AAAA,IACR;AAEA,UAAM,gBAAY,sBAAgC,MAAM;AACtD,UAAI,SAAS,OAAW,QAAO;AAE/B,UAAI,YAAY,OAAW,QAAO;AAElC,aAAO,kBAAkB;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,CAAC,iBAAmD;AACzD,kBAAQ,cAAc;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AAAA,YACL;AACE,qBAAO;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,WACE;AAAA,MAAC,cAAAA;AAAA,MAAA,iCACK,OADL;AAAA,QAEC,eAAW,kBAAK,gBAAgB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA,QACN,OAAO,OAAO,kCAAK,aAAe,SAAU;AAAA,QAE3C;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AIlEnB,IAAAC,iBAAqC;;;ALYjC,IAAAC,sBAAA;AALG,SAAS,WAAW,IAGU;AAHV,eACzB;AAAA;AAAA,EARF,IAO2B,IAEtB,iBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,8CAAC,uBAAK,KAAI,KAAI,IAAG,KACf;AAAA,iDAAC,uCAAS,OAAT,EAAe,qBAAC;AAAA,IACjB,6CAAC,uCAAS,OAAT,EAAgB,WAAS;AAAA,KAC5B;AAEJ;","names":["RadixText","import_themes","import_jsx_runtime"]}
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  BulletText
3
- } from "../chunk-C2G3IB7G.js";
4
- import "../chunk-GR4PG6HY.js";
3
+ } from "../chunk-IA4WXGVH.js";
4
+ import "../chunk-YXFHD2PY.js";
5
5
  import "../chunk-LDBWASUA.js";
6
+ import "../chunk-PO2PBAHW.js";
6
7
  import "../chunk-25HMMI7R.js";
7
8
  import "../chunk-VFQD57ZY.js";
8
9
  import "../chunk-CRTRMMJ7.js";
@@ -105,6 +105,12 @@ var mapWithResponsive = (args) => {
105
105
  return value;
106
106
  };
107
107
 
108
+ // src/utils/mono-style.ts
109
+ var MONO_STYLE = {
110
+ fontFamily: 'var(--code-font-family, ui-monospace, "SF Mono", monospace)',
111
+ fontVariantNumeric: "tabular-nums"
112
+ };
113
+
108
114
  // src/utils/resolve-color.ts
109
115
  var SEMANTIC_COLOR_MAP = {
110
116
  error: "red",
@@ -148,7 +154,7 @@ var mapVariant = (variant) => {
148
154
  }
149
155
  };
150
156
  function Heading2(props) {
151
- const _a = props, { size, children, variant, color, className } = _a, rest = __objRest(_a, ["size", "children", "variant", "color", "className"]);
157
+ const _a = props, { size, children, variant, color, className, mono, style } = _a, rest = __objRest(_a, ["size", "children", "variant", "color", "className", "mono", "style"]);
152
158
  const { color: radixColor, className: colorClassName } = (0, import_react2.useMemo)(
153
159
  () => resolveColor(color),
154
160
  [color]
@@ -165,6 +171,7 @@ function Heading2(props) {
165
171
  className: (0, import_clsx.clsx)(colorClassName, className),
166
172
  color: radixColor,
167
173
  size: radixSize,
174
+ style: mono ? __spreadValues(__spreadValues({}, MONO_STYLE), style) : style,
168
175
  children
169
176
  })
170
177
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/atoms/dialog.tsx","../../src/theme/portal-provider.tsx","../../src/atoms/heading.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/resolve-color.ts","../../src/atoms/icon-button.tsx","../../src/utils/convert-icon-button-size.ts"],"sourcesContent":["import * as RadixDialog from '@radix-ui/react-dialog';\nimport { Cross1Icon } from '@radix-ui/react-icons';\nimport { Flex, Theme } from '@radix-ui/themes';\nimport { useEffect, useRef } from 'react';\nimport { usePortalContainer } from '@/theme/portal-provider';\nimport { Heading } from './heading';\nimport { IconButton } from './icon-button';\n\ntype ContentProps = RadixDialog.DialogContentProps & {\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n height?: string;\n maxHeight?: string;\n minHeight?: string;\n title?: string;\n hideCloseButton?: boolean;\n buttons?: React.ReactNode;\n size?: '1' | '2' | '3' | '4';\n};\n\nconst preventDefault: RadixDialog.DialogContentProps['onPointerDownOutside'] = (\n e\n) => {\n e.preventDefault();\n};\n\nfunction Content(props: ContentProps): React.ReactNode {\n const {\n children,\n style = {},\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n title,\n buttons,\n size,\n hideCloseButton,\n className,\n ...rest\n } = props;\n const { dialogContainerRef } = usePortalContainer();\n\n return (\n <RadixDialog.Portal container={dialogContainerRef.current}>\n <Theme asChild>\n <RadixDialog.Overlay className=\"rt-BaseDialogScroll rt-DialogScroll DialogOverlay\">\n <RadixDialog.Content\n className={`DialogContent ${className || ''} rt-BaseDialogContent rt-DialogContent rt-r-size-${size||'3'}`}\n onPointerDownOutside={preventDefault}\n style={{\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n ...style,\n }}\n {...rest}\n >\n <Flex gap=\"2\" justify=\"between\" width=\"100%\">\n <RadixDialog.Title asChild>\n {typeof title === 'string' && title !== '' ? (\n <Heading mb=\"2\" variant=\"heading3\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </RadixDialog.Title>\n {!hideCloseButton && (\n <RadixDialog.Close asChild className=\"DialogClose\">\n <IconButton color=\"gray\" variant=\"ghost\">\n <Cross1Icon />\n </IconButton>\n </RadixDialog.Close>\n )}\n </Flex>\n {children}\n {buttons ? (\n <Flex gap=\"3\" justify=\"end\" mt=\"3\" width=\"100%\">\n {buttons}\n </Flex>\n ) : null}\n </RadixDialog.Content>\n </RadixDialog.Overlay>\n </Theme>\n </RadixDialog.Portal>\n );\n}\n\nfunction Close({\n children,\n ...rest\n}: RadixDialog.DialogCloseProps): React.ReactNode {\n return (\n <RadixDialog.Close asChild {...rest}>\n {children}\n </RadixDialog.Close>\n );\n}\n\nfunction Trigger({\n children,\n ...rest\n}: RadixDialog.DialogTriggerProps): React.ReactNode {\n return (\n <RadixDialog.Trigger asChild {...rest}>\n {children}\n </RadixDialog.Trigger>\n );\n}\n\nfunction Root(props: RadixDialog.DialogProps): React.ReactNode {\n const prevOpenRef = useRef<boolean | undefined>(undefined);\n const cleanupExecutedRef = useRef<boolean>(false);\n\n // 모달이 닫힌 후 포커스 복원 및 이벤트 정리\n useEffect(() => {\n const prevOpen = prevOpenRef.current;\n const currentOpen = props.open;\n\n // 현재 상태를 이전 상태로 업데이트 (if 분기의 early return과 무관하게 항상 실행)\n prevOpenRef.current = currentOpen;\n\n // 모달이 열린 상태에서 닫힌 상태로 변경될 때만 실행\n if (prevOpen === true && currentOpen === false && !cleanupExecutedRef.current) {\n cleanupExecutedRef.current = true;\n\n // 모달이 닫힌 후 약간의 지연을 두고 포커스 복원\n const timer = setTimeout(() => {\n try {\n // 활성 요소에 포커스 복원\n const activeElement = document.activeElement as HTMLElement | null;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- 어떤 dom인지 확실하지 않음\n activeElement?.blur?.();\n\n // body의 pointer-events 복원\n document.body.style.pointerEvents = '';\n } catch {\n // 에러 무시\n } finally {\n cleanupExecutedRef.current = false;\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n cleanupExecutedRef.current = false;\n };\n }\n }, [props.open]);\n\n // open=true 상태에서 컴포넌트가 언마운트될 때 body 스타일 복원\n useEffect(() => {\n return () => {\n if (prevOpenRef.current === true) {\n document.body.style.pointerEvents = '';\n }\n };\n }, []);\n\n return <RadixDialog.Root {...props} />;\n}\n\nexport const Dialog = {\n Root,\n Trigger,\n Content,\n Close,\n Description: RadixDialog.Description,\n Title: RadixDialog.Title,\n};\n","import React, { createContext, useContext, useRef } from 'react';\n\ninterface PortalProviderProps {\n children: React.ReactNode;\n}\n\ninterface PortalState {\n dialogContainerRef: React.RefObject<HTMLDivElement | null>;\n drawerContainerRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst PortalContext = createContext<PortalState>(\n null as unknown as PortalState\n);\n\nexport function PortalProvider({\n children,\n}: PortalProviderProps): React.ReactNode {\n const dialogContainerRef = useRef<HTMLDivElement | null>(null);\n const drawerContainerRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <PortalContext.Provider value={{ dialogContainerRef, drawerContainerRef }}>\n {children}\n <div className=\"drawer-portal-container\" ref={drawerContainerRef} />\n <div className=\"dialog-portal-container\" ref={dialogContainerRef} />\n </PortalContext.Provider>\n );\n}\n\nexport const usePortalContainer = (): PortalState => {\n try {\n const state = useContext(PortalContext);\n return state;\n } catch (error) {\n throw new Error('PortalProvider not found');\n }\n};\n\nexport default PortalProvider;\n","import {\n Heading as RadixHeading,\n type HeadingProps as RadixHeadingProps,\n} from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { clsx } from 'clsx';\nimport { useMemo } 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 { Heading as RadixHeading } from '@radix-ui/themes';\ntype HeadingVariant =\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5';\nexport type HeadingProps = DistributiveOmit<RadixHeadingProps, 'color'> & {\n variant?: Responsive<HeadingVariant>;\n color?: UiColor;\n};\n\ntype HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';\n\nconst mapVariant = (variant?: HeadingVariant): HeadingSize | undefined => {\n switch (variant) {\n case 'heading1':\n return '7';\n case 'heading2':\n return '6';\n case 'heading3':\n return '5';\n case 'heading4':\n return '4';\n case 'heading5':\n return '3';\n default:\n return undefined;\n }\n};\n\nexport function Heading(props: HeadingProps): React.ReactNode {\n const { size, children, variant, color, className, ...rest } = props;\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\n\n const radixSize = useMemo<RadixHeadingProps['size']>(() => {\n return variant\n ? mapWithResponsive({\n value: variant,\n mapFn: mapVariant,\n })\n : size;\n\n }, [size, variant]);\n\n return (\n <RadixHeading\n {...rest}\n className={clsx(colorClassName, className)}\n color={radixColor}\n size={radixSize}\n >\n {children}\n </RadixHeading>\n );\n}\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type { 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, { forwardRef, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { IconButton as RadixIconButton } from '@radix-ui/themes';\nimport { convertSize } from '../utils/convert-icon-button-size';\nimport { resolveColor } from '../utils/resolve-color';\nimport type { ButtonProps } from './button.type';\n\nexport type IconButtonProps = ButtonProps;\nexport const IconButton = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref): React.ReactNode => {\n const { size, style, variant, color, ...restProps } = props;\n\n const radixSize = useMemo(() => {\n return convertSize(size);\n }, [size]);\n\n const radixVariant = useMemo(() => {\n if (variant === 'transparent') return 'ghost';\n return variant;\n }, [variant]);\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\n\n const className = useMemo(() => {\n return clsx(props.className, colorClassName, {\n transparent: variant === 'transparent',\n });\n }, [props.className, colorClassName, variant]);\n\n return (\n <RadixIconButton\n style={style}\n type=\"button\"\n variant={radixVariant}\n {...restProps}\n className={className}\n color={radixColor}\n ref={ref}\n size={radixSize}\n />\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n","import { type ButtonProps as RadixButtonProps } from '@radix-ui/themes';\nimport type { Breakpoint } from '@radix-ui/themes/props';\nimport type { ButtonProps } from '../atoms/button.type';\n\nexport const convertSizeStr = (\n size: ButtonProps['size']\n): '1' | '2' | '3' | '4' => {\n switch (size) {\n case 'small':\n return '1';\n case 'medium':\n return '2';\n case 'large':\n return '4';\n default:\n return '2';\n }\n};\n\nexport const convertSizeResponse = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string' || typeof size === 'undefined') {\n return convertSizeStr(size);\n }\n const radixSize: RadixButtonProps['size'] = {};\n let key: Breakpoint = 'initial';\n for (key in size) {\n radixSize[key] = convertSizeStr(size[key]);\n }\n return radixSize;\n};\n\nexport const convertSize = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string') {\n return convertSizeStr(size);\n }\n return convertSizeResponse(size);\n};\n"],"mappings":"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","names":["import_themes","import_react","import_react","import_themes","import_jsx_runtime","Heading","RadixHeading","import_react","import_clsx","import_themes","import_jsx_runtime","RadixIconButton","import_jsx_runtime","Content","Heading","Close","Trigger","Root"]}
1
+ {"version":3,"sources":["../../src/atoms/dialog.tsx","../../src/theme/portal-provider.tsx","../../src/atoms/heading.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/mono-style.ts","../../src/utils/resolve-color.ts","../../src/atoms/icon-button.tsx","../../src/utils/convert-icon-button-size.ts"],"sourcesContent":["import * as RadixDialog from '@radix-ui/react-dialog';\nimport { Cross1Icon } from '@radix-ui/react-icons';\nimport { Flex, Theme } from '@radix-ui/themes';\nimport { useEffect, useRef } from 'react';\nimport { usePortalContainer } from '@/theme/portal-provider';\nimport { Heading } from './heading';\nimport { IconButton } from './icon-button';\n\ntype ContentProps = RadixDialog.DialogContentProps & {\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n height?: string;\n maxHeight?: string;\n minHeight?: string;\n title?: string;\n hideCloseButton?: boolean;\n buttons?: React.ReactNode;\n size?: '1' | '2' | '3' | '4';\n};\n\nconst preventDefault: RadixDialog.DialogContentProps['onPointerDownOutside'] = (\n e\n) => {\n e.preventDefault();\n};\n\nfunction Content(props: ContentProps): React.ReactNode {\n const {\n children,\n style = {},\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n title,\n buttons,\n size,\n hideCloseButton,\n className,\n ...rest\n } = props;\n const { dialogContainerRef } = usePortalContainer();\n\n return (\n <RadixDialog.Portal container={dialogContainerRef.current}>\n <Theme asChild>\n <RadixDialog.Overlay className=\"rt-BaseDialogScroll rt-DialogScroll DialogOverlay\">\n <RadixDialog.Content\n className={`DialogContent ${className || ''} rt-BaseDialogContent rt-DialogContent rt-r-size-${size||'3'}`}\n onPointerDownOutside={preventDefault}\n style={{\n width,\n maxWidth,\n minWidth,\n maxHeight,\n height,\n minHeight,\n ...style,\n }}\n {...rest}\n >\n <Flex gap=\"2\" justify=\"between\" width=\"100%\">\n <RadixDialog.Title asChild>\n {typeof title === 'string' && title !== '' ? (\n <Heading mb=\"2\" variant=\"heading3\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </RadixDialog.Title>\n {!hideCloseButton && (\n <RadixDialog.Close asChild className=\"DialogClose\">\n <IconButton color=\"gray\" variant=\"ghost\">\n <Cross1Icon />\n </IconButton>\n </RadixDialog.Close>\n )}\n </Flex>\n {children}\n {buttons ? (\n <Flex gap=\"3\" justify=\"end\" mt=\"3\" width=\"100%\">\n {buttons}\n </Flex>\n ) : null}\n </RadixDialog.Content>\n </RadixDialog.Overlay>\n </Theme>\n </RadixDialog.Portal>\n );\n}\n\nfunction Close({\n children,\n ...rest\n}: RadixDialog.DialogCloseProps): React.ReactNode {\n return (\n <RadixDialog.Close asChild {...rest}>\n {children}\n </RadixDialog.Close>\n );\n}\n\nfunction Trigger({\n children,\n ...rest\n}: RadixDialog.DialogTriggerProps): React.ReactNode {\n return (\n <RadixDialog.Trigger asChild {...rest}>\n {children}\n </RadixDialog.Trigger>\n );\n}\n\nfunction Root(props: RadixDialog.DialogProps): React.ReactNode {\n const prevOpenRef = useRef<boolean | undefined>(undefined);\n const cleanupExecutedRef = useRef<boolean>(false);\n\n // 모달이 닫힌 후 포커스 복원 및 이벤트 정리\n useEffect(() => {\n const prevOpen = prevOpenRef.current;\n const currentOpen = props.open;\n\n // 현재 상태를 이전 상태로 업데이트 (if 분기의 early return과 무관하게 항상 실행)\n prevOpenRef.current = currentOpen;\n\n // 모달이 열린 상태에서 닫힌 상태로 변경될 때만 실행\n if (prevOpen === true && currentOpen === false && !cleanupExecutedRef.current) {\n cleanupExecutedRef.current = true;\n\n // 모달이 닫힌 후 약간의 지연을 두고 포커스 복원\n const timer = setTimeout(() => {\n try {\n // 활성 요소에 포커스 복원\n const activeElement = document.activeElement as HTMLElement | null;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- 어떤 dom인지 확실하지 않음\n activeElement?.blur?.();\n\n // body의 pointer-events 복원\n document.body.style.pointerEvents = '';\n } catch {\n // 에러 무시\n } finally {\n cleanupExecutedRef.current = false;\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n cleanupExecutedRef.current = false;\n };\n }\n }, [props.open]);\n\n // open=true 상태에서 컴포넌트가 언마운트될 때 body 스타일 복원\n useEffect(() => {\n return () => {\n if (prevOpenRef.current === true) {\n document.body.style.pointerEvents = '';\n }\n };\n }, []);\n\n return <RadixDialog.Root {...props} />;\n}\n\nexport const Dialog = {\n Root,\n Trigger,\n Content,\n Close,\n Description: RadixDialog.Description,\n Title: RadixDialog.Title,\n};\n","import React, { createContext, useContext, useRef } from 'react';\n\ninterface PortalProviderProps {\n children: React.ReactNode;\n}\n\ninterface PortalState {\n dialogContainerRef: React.RefObject<HTMLDivElement | null>;\n drawerContainerRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst PortalContext = createContext<PortalState>(\n null as unknown as PortalState\n);\n\nexport function PortalProvider({\n children,\n}: PortalProviderProps): React.ReactNode {\n const dialogContainerRef = useRef<HTMLDivElement | null>(null);\n const drawerContainerRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <PortalContext.Provider value={{ dialogContainerRef, drawerContainerRef }}>\n {children}\n <div className=\"drawer-portal-container\" ref={drawerContainerRef} />\n <div className=\"dialog-portal-container\" ref={dialogContainerRef} />\n </PortalContext.Provider>\n );\n}\n\nexport const usePortalContainer = (): PortalState => {\n try {\n const state = useContext(PortalContext);\n return state;\n } catch (error) {\n throw new Error('PortalProvider not found');\n }\n};\n\nexport default PortalProvider;\n","import {\n Heading as RadixHeading,\n type HeadingProps as RadixHeadingProps,\n} from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { clsx } from 'clsx';\nimport { useMemo } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\nimport { MONO_STYLE } from '../utils/mono-style';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\n\nexport { Heading as RadixHeading } from '@radix-ui/themes';\ntype HeadingVariant =\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5';\nexport type HeadingProps = DistributiveOmit<RadixHeadingProps, 'color'> & {\n variant?: Responsive<HeadingVariant>;\n color?: UiColor;\n /** 등폭(monospace) 폰트 + 숫자 고정폭 정렬(tabular-nums). 점수·퍼센트 등 수치 표시에 사용한다. */\n mono?: boolean;\n};\n\ntype HeadingSize = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';\n\nconst mapVariant = (variant?: HeadingVariant): HeadingSize | undefined => {\n switch (variant) {\n case 'heading1':\n return '7';\n case 'heading2':\n return '6';\n case 'heading3':\n return '5';\n case 'heading4':\n return '4';\n case 'heading5':\n return '3';\n default:\n return undefined;\n }\n};\n\nexport function Heading(props: HeadingProps): React.ReactNode {\n const { size, children, variant, color, className, mono, style, ...rest } =\n props;\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\n\n const radixSize = useMemo<RadixHeadingProps['size']>(() => {\n return variant\n ? mapWithResponsive({\n value: variant,\n mapFn: mapVariant,\n })\n : size;\n\n }, [size, variant]);\n\n return (\n <RadixHeading\n {...rest}\n className={clsx(colorClassName, className)}\n color={radixColor}\n size={radixSize}\n style={mono ? { ...MONO_STYLE, ...style } : style}\n >\n {children}\n </RadixHeading>\n );\n}\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type { CSSProperties } from 'react';\n\n/**\n * 등폭(monospace) 텍스트 스타일.\n * - `font-family`: 등폭 폰트(`--code-font-family`는 Radix Themes가 제공, 없으면 시스템 등폭으로 폴백)\n * - `font-variant-numeric: tabular-nums`: 숫자를 고정폭으로 정렬해 점수·퍼센트·통계가 자릿수마다 흔들리지 않게 함\n *\n * `Typo`/`Heading`의 `mono` prop 구현에 사용된다.\n */\nexport const MONO_STYLE: CSSProperties = {\n fontFamily: 'var(--code-font-family, ui-monospace, \"SF Mono\", monospace)',\n fontVariantNumeric: 'tabular-nums',\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, { forwardRef, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { IconButton as RadixIconButton } from '@radix-ui/themes';\nimport { convertSize } from '../utils/convert-icon-button-size';\nimport { resolveColor } from '../utils/resolve-color';\nimport type { ButtonProps } from './button.type';\n\nexport type IconButtonProps = ButtonProps;\nexport const IconButton = forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref): React.ReactNode => {\n const { size, style, variant, color, ...restProps } = props;\n\n const radixSize = useMemo(() => {\n return convertSize(size);\n }, [size]);\n\n const radixVariant = useMemo(() => {\n if (variant === 'transparent') return 'ghost';\n return variant;\n }, [variant]);\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\n\n const className = useMemo(() => {\n return clsx(props.className, colorClassName, {\n transparent: variant === 'transparent',\n });\n }, [props.className, colorClassName, variant]);\n\n return (\n <RadixIconButton\n style={style}\n type=\"button\"\n variant={radixVariant}\n {...restProps}\n className={className}\n color={radixColor}\n ref={ref}\n size={radixSize}\n />\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n","import { type ButtonProps as RadixButtonProps } from '@radix-ui/themes';\nimport type { Breakpoint } from '@radix-ui/themes/props';\nimport type { ButtonProps } from '../atoms/button.type';\n\nexport const convertSizeStr = (\n size: ButtonProps['size']\n): '1' | '2' | '3' | '4' => {\n switch (size) {\n case 'small':\n return '1';\n case 'medium':\n return '2';\n case 'large':\n return '4';\n default:\n return '2';\n }\n};\n\nexport const convertSizeResponse = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string' || typeof size === 'undefined') {\n return convertSizeStr(size);\n }\n const radixSize: RadixButtonProps['size'] = {};\n let key: Breakpoint = 'initial';\n for (key in size) {\n radixSize[key] = convertSizeStr(size[key]);\n }\n return radixSize;\n};\n\nexport const convertSize = (\n size: ButtonProps['size']\n): RadixButtonProps['size'] => {\n if (typeof size === 'string') {\n return convertSizeStr(size);\n }\n return convertSizeResponse(size);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;AAC7B,yBAA2B;AAC3B,IAAAA,iBAA4B;AAC5B,IAAAC,gBAAkC;;;ACHlC,mBAAyD;AAsBrD;AAXJ,IAAM,oBAAgB;AAAA,EACpB;AACF;AAiBO,IAAM,qBAAqB,MAAmB;AACnD,MAAI;AACF,UAAM,YAAQ,yBAAW,aAAa;AACtC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AACF;;;ACrCA,oBAGO;AAEP,kBAAqB;AACrB,IAAAC,gBAAwB;;;ACJjB,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACVO,IAAM,aAA4B;AAAA,EACvC,YAAY;AAAA,EACZ,oBAAoB;AACtB;;;ACiBA,IAAM,qBAAoE;AAAA,EACxE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAgBA,IAAM,mBAA2D;AAAA,EAC/D,OAAO,EAAE,WAAW,qBAAqB,eAAe,OAAO;AACjE;AAEA,IAAM,kBAAkB,CAAC,UACvB,UAAU,UAAa,SAAS;AAElC,IAAM,gBAAgB,CAAC,UACrB,UAAU,UAAa,SAAS;AAgB3B,IAAM,eAAe,CAAC,UAAmC;AAC9D,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAW,cAAc,IAAI,iBAAiB,KAAK;AAC3D,WAAO,EAAE,OAAO,eAAe,UAAU;AAAA,EAC3C;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,EAAE,OAAO,mBAAmB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO,EAAE,MAAM;AACjB;;;AHtEA,IAAAC,iBAAwC;AAqDpC,IAAAC,sBAAA;AArCJ,IAAM,aAAa,CAAC,YAAsD;AACxE,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAASC,SAAQ,OAAsC;AAC5D,QACE,YADM,QAAM,UAAU,SAAS,OAAO,WAAW,MAAM,MAjD3D,IAkDI,IADiE,iBACjE,IADiE,CAA3D,QAAM,YAAU,WAAS,SAAO,aAAW,QAAM;AAGzD,QAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,IACvD,MAAM,aAAa,KAAK;AAAA,IACxB,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,gBAAY,uBAAmC,MAAM;AACzD,WAAO,UACH,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,OAAO;AAAA,IACT,CAAC,IACD;AAAA,EAEN,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,SACE;AAAA,IAAC,cAAAC;AAAA,IAAA,iCACK,OADL;AAAA,MAEC,eAAW,kBAAK,gBAAgB,SAAS;AAAA,MACzC,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,OAAO,kCAAK,aAAe,SAAU;AAAA,MAE3C;AAAA;AAAA,EACH;AAEJ;;;AI9EA,IAAAC,gBAA2C;AAC3C,IAAAC,eAAqB;AACrB,IAAAC,iBAA8C;;;ACEvC,IAAM,iBAAiB,CAC5B,SAC0B;AAC1B,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,IAAM,sBAAsB,CACjC,SAC6B;AAC7B,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,aAAa;AAC3D,WAAO,eAAe,IAAI;AAAA,EAC5B;AACA,QAAM,YAAsC,CAAC;AAC7C,MAAI,MAAkB;AACtB,OAAK,OAAO,MAAM;AAChB,cAAU,GAAG,IAAI,eAAe,KAAK,GAAG,CAAC;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,IAAM,cAAc,CACzB,SAC6B;AAC7B,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,eAAe,IAAI;AAAA,EAC5B;AACA,SAAO,oBAAoB,IAAI;AACjC;;;ADPM,IAAAC,sBAAA;AAzBC,IAAM,iBAAa;AAAA,EACxB,CAAC,OAAO,QAAyB;AAC/B,UAAsD,YAA9C,QAAM,OAAO,SAAS,MAVlC,IAU0D,IAAd,sBAAc,IAAd,CAAhC,QAAM,SAAO,WAAS;AAE9B,UAAM,gBAAY,uBAAQ,MAAM;AAC9B,aAAO,YAAY,IAAI;AAAA,IACzB,GAAG,CAAC,IAAI,CAAC;AAET,UAAM,mBAAe,uBAAQ,MAAM;AACjC,UAAI,YAAY,cAAe,QAAO;AACtC,aAAO;AAAA,IACT,GAAG,CAAC,OAAO,CAAC;AAEZ,UAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,MACvD,MAAM,aAAa,KAAK;AAAA,MACxB,CAAC,KAAK;AAAA,IACR;AAEA,UAAM,gBAAY,uBAAQ,MAAM;AAC9B,iBAAO,mBAAK,MAAM,WAAW,gBAAgB;AAAA,QAC3C,aAAa,YAAY;AAAA,MAC3B,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,WAAW,gBAAgB,OAAO,CAAC;AAE7C,WACE;AAAA,MAAC,eAAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,SAAS;AAAA,SACL,YAJL;AAAA,QAKC;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA;AAAA,IACR;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;;;ANiBb,IAAAC,sBAAA;AA3CZ,IAAM,iBAAyE,CAC7E,MACG;AACH,IAAE,eAAe;AACnB;AAEA,SAASC,SAAQ,OAAsC;AACrD,QAeI,YAdF;AAAA;AAAA,IACA,QAAQ,CAAC;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAzCJ,IA2CM,IADC,iBACD,IADC;AAAA,IAbH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGF,QAAM,EAAE,mBAAmB,IAAI,mBAAmB;AAElD,SACE,6CAAa,oBAAZ,EAAmB,WAAW,mBAAmB,SAChD,uDAAC,wBAAM,SAAO,MACZ,uDAAa,qBAAZ,EAAoB,WAAU,qDAC7B;AAAA,IAAa;AAAA,IAAZ;AAAA,MACC,WAAW,iBAAiB,aAAa,EAAE,oDAAoD,QAAM,GAAG;AAAA,MACxG,sBAAsB;AAAA,MACtB,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,SACG;AAAA,OAED,OAZL;AAAA,MAcC;AAAA,sDAAC,uBAAK,KAAI,KAAI,SAAQ,WAAU,OAAM,QACpC;AAAA,uDAAa,mBAAZ,EAAkB,SAAO,MACvB,iBAAO,UAAU,YAAY,UAAU,KACtC,6CAACC,UAAA,EAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,IAEA,OAEJ;AAAA,UACC,CAAC,mBACA,6CAAa,mBAAZ,EAAkB,SAAO,MAAC,WAAU,eACnC,uDAAC,cAAW,OAAM,QAAO,SAAQ,SAC/B,uDAAC,iCAAW,GACd,GACF;AAAA,WAEJ;AAAA,QACC;AAAA,QACA,UACC,6CAAC,uBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,OAAM,QACtC,mBACH,IACE;AAAA;AAAA;AAAA,EACN,GACF,GACF,GACF;AAEJ;AAEA,SAASC,OAAM,IAGmC;AAHnC,eACb;AAAA;AAAA,EAhGF,IA+Fe,IAEV,iBAFU,IAEV;AAAA,IADH;AAAA;AAGA,SACE,6CAAa,mBAAZ,+BAAkB,SAAO,QAAK,OAA9B,EACE,WACH;AAEJ;AAEA,SAASC,SAAQ,IAGmC;AAHnC,eACf;AAAA;AAAA,EA3GF,IA0GiB,IAEZ,iBAFY,IAEZ;AAAA,IADH;AAAA;AAGA,SACE,6CAAa,qBAAZ,+BAAoB,SAAO,QAAK,OAAhC,EACE,WACH;AAEJ;AAEA,SAASC,MAAK,OAAiD;AAC7D,QAAM,kBAAc,sBAA4B,MAAS;AACzD,QAAM,yBAAqB,sBAAgB,KAAK;AAGhD,+BAAU,MAAM;AACd,UAAM,WAAW,YAAY;AAC7B,UAAM,cAAc,MAAM;AAG1B,gBAAY,UAAU;AAGtB,QAAI,aAAa,QAAQ,gBAAgB,SAAS,CAAC,mBAAmB,SAAS;AAC7E,yBAAmB,UAAU;AAG7B,YAAM,QAAQ,WAAW,MAAM;AAtIrC;AAuIQ,YAAI;AAEF,gBAAM,gBAAgB,SAAS;AAE/B,+DAAe,SAAf;AAGA,mBAAS,KAAK,MAAM,gBAAgB;AAAA,QACtC,SAAQ;AAAA,QAER,UAAE;AACA,6BAAmB,UAAU;AAAA,QAC/B;AAAA,MACF,GAAG,GAAG;AAEN,aAAO,MAAM;AACX,qBAAa,KAAK;AAClB,2BAAmB,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,IAAI,CAAC;AAGf,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,YAAY,YAAY,MAAM;AAChC,iBAAS,KAAK,MAAM,gBAAgB;AAAA,MACtC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,6CAAa,kBAAZ,mBAAqB,MAAO;AACtC;AAEO,IAAM,SAAS;AAAA,EACpB,MAAAA;AAAA,EACA,SAAAD;AAAA,EACA,SAAAH;AAAA,EACA,OAAAE;AAAA,EACA,aAAyB;AAAA,EACzB,OAAmB;AACrB;","names":["import_themes","import_react","import_react","import_themes","import_jsx_runtime","Heading","RadixHeading","import_react","import_clsx","import_themes","import_jsx_runtime","RadixIconButton","import_jsx_runtime","Content","Heading","Close","Trigger","Root"]}
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  Dialog
3
- } from "../chunk-PE4EBBU4.js";
4
- import "../chunk-NLHVQJQ2.js";
3
+ } from "../chunk-Z54XTEAF.js";
4
+ import "../chunk-YIVIBIK2.js";
5
5
  import "../chunk-U7N2PWMO.js";
6
6
  import "../chunk-7RJYF5L3.js";
7
7
  import "../chunk-HF6GNDPV.js";
8
8
  import "../chunk-LDBWASUA.js";
9
+ import "../chunk-PO2PBAHW.js";
9
10
  import "../chunk-VFQD57ZY.js";
10
11
  import "../chunk-CRTRMMJ7.js";
11
12
  export {
@@ -171,11 +171,17 @@ var mapWithResponsive = (args) => {
171
171
  return value;
172
172
  };
173
173
 
174
+ // src/utils/mono-style.ts
175
+ var MONO_STYLE = {
176
+ fontFamily: 'var(--code-font-family, ui-monospace, "SF Mono", monospace)',
177
+ fontVariantNumeric: "tabular-nums"
178
+ };
179
+
174
180
  // src/atoms/typo.tsx
175
181
  var import_jsx_runtime4 = require("react/jsx-runtime");
176
182
  var Typo = (0, import_react4.forwardRef)(
177
183
  (props, ref) => {
178
- const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
184
+ const _a = props, { size, variant, children, color, className, mono, style } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className", "mono", "style"]);
179
185
  const { color: radixColor, className: colorClassName } = (0, import_react4.useMemo)(
180
186
  () => resolveColor(color),
181
187
  [color]
@@ -205,6 +211,7 @@ var Typo = (0, import_react4.forwardRef)(
205
211
  color: radixColor,
206
212
  ref,
207
213
  size: radixSize,
214
+ style: mono ? __spreadValues(__spreadValues({}, MONO_STYLE), style) : style,
208
215
  children
209
216
  })
210
217
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/atoms/ellipsis-tooltip.tsx","../../src/atoms/tooltip.tsx","../../src/context/ui-state-provider.tsx","../../src/utils/resolve-color.ts","../../src/theme/theme-provider.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Tooltip } from './tooltip';\nimport { Typo, type TypoProps } from './typo';\n\nexport type EllipsisTooltipProps = TypoProps & {\n lineClamp?: number;\n children?: string;\n};\n\nexport function EllipsisTooltip(\n props: EllipsisTooltipProps\n): React.ReactNode {\n const { children, style, lineClamp = 2, ...rest } = props;\n const ref = useRef<HTMLSpanElement>(null);\n\n const [tooltipDisplay, setTooltipDisplay] = useState<'none' | 'block'>(\n 'none'\n );\n\n useEffect(() => {\n if (ref.current) {\n const typo = ref.current;\n const mouseOver = (): void => {\n if (typo.clientHeight < typo.scrollHeight) {\n setTooltipDisplay('block');\n }\n };\n\n const mouseOut = (): void => {\n setTooltipDisplay('none');\n };\n\n ref.current.addEventListener('mouseenter', mouseOver);\n ref.current.addEventListener('mouseleave', mouseOut);\n }\n }, [children]);\n\n return (\n <Tooltip content={children} style={{ display: tooltipDisplay }}>\n <Typo\n {...rest}\n ref={ref}\n style={{\n width: '100%',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n WebkitLineClamp: lineClamp,\n\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n wordBreak: 'break-word',\n ...style,\n }}\n >\n {children}\n </Typo>\n </Tooltip>\n );\n}\n","import {\n Box,\n Tooltip as RadixTooltip,\n type TooltipProps as RadixTooltipProps,\n} from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport { useUIState } from '@/context/ui-state-provider';\nimport { resolveColor } from '../utils/resolve-color';\nimport { ThemeAccentContext } from '../theme/theme-provider';\n\nexport function Tooltip({\n children,\n ...props\n}: RadixTooltipProps): React.ReactElement {\n const { isMobile } = useUIState();\n const [open, setOpen] = useState<boolean>(props.defaultOpen ?? false);\n const themeAccent = useContext(ThemeAccentContext);\n\n // Content는 Portal(body)로 렌더돼 theme의 className override를 못 받으므로, theme custom\n // accent(black)를 className으로 다시 적용해 Portal 안에서도 black을 유지한다.\n // (RadixTooltip의 className은 Content에 적용됨)\n const accentClassName = useMemo(\n () => resolveColor(themeAccent).className,\n [themeAccent]\n );\n\n const onOpenChange = useCallback(\n (e: boolean) => {\n if (isMobile) return;\n setOpen(e);\n },\n [isMobile]\n );\n\n const onClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isMobile) return;\n e.preventDefault();\n setOpen((p) => !p);\n },\n [isMobile]\n );\n\n return (\n <RadixTooltip\n delayDuration={isMobile ? props.delayDuration : 0}\n onOpenChange={onOpenChange}\n open={open}\n {...props}\n className={clsx(accentClassName, props.className)}\n >\n <Box asChild onClick={onClick}>\n {children}\n </Box>\n </RadixTooltip>\n );\n}\n","import { createContext, useContext } from 'react';\n\ninterface UIStateContextType {\n isMobile: boolean;\n}\n\nexport const UIStateContext = createContext<UIStateContextType>({\n isMobile: false,\n});\n\nexport type UiStateProviderProps = React.ReactNode;\n\nexport function UIStateProvider({\n children,\n isMobile,\n}: {\n children: UiStateProviderProps;\n isMobile: boolean;\n}): React.ReactElement {\n return (\n <UIStateContext.Provider value={{ isMobile }}>\n {children}\n </UIStateContext.Provider>\n );\n}\n\nexport const useUIState = (): UIStateContextType => {\n try {\n const state = useContext(UIStateContext);\n return state;\n } catch (error) {\n throw new Error('UIStateProvider not found');\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"],"mappings":"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","names":["import_react","import_themes","import_clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","_a","RadixTooltip","import_themes","import_clsx","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/atoms/ellipsis-tooltip.tsx","../../src/atoms/tooltip.tsx","../../src/context/ui-state-provider.tsx","../../src/utils/resolve-color.ts","../../src/theme/theme-provider.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/mono-style.ts"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Tooltip } from './tooltip';\nimport { Typo, type TypoProps } from './typo';\n\nexport type EllipsisTooltipProps = TypoProps & {\n lineClamp?: number;\n children?: string;\n};\n\nexport function EllipsisTooltip(\n props: EllipsisTooltipProps\n): React.ReactNode {\n const { children, style, lineClamp = 2, ...rest } = props;\n const ref = useRef<HTMLSpanElement>(null);\n\n const [tooltipDisplay, setTooltipDisplay] = useState<'none' | 'block'>(\n 'none'\n );\n\n useEffect(() => {\n if (ref.current) {\n const typo = ref.current;\n const mouseOver = (): void => {\n if (typo.clientHeight < typo.scrollHeight) {\n setTooltipDisplay('block');\n }\n };\n\n const mouseOut = (): void => {\n setTooltipDisplay('none');\n };\n\n ref.current.addEventListener('mouseenter', mouseOver);\n ref.current.addEventListener('mouseleave', mouseOut);\n }\n }, [children]);\n\n return (\n <Tooltip content={children} style={{ display: tooltipDisplay }}>\n <Typo\n {...rest}\n ref={ref}\n style={{\n width: '100%',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n WebkitLineClamp: lineClamp,\n\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n wordBreak: 'break-word',\n ...style,\n }}\n >\n {children}\n </Typo>\n </Tooltip>\n );\n}\n","import {\n Box,\n Tooltip as RadixTooltip,\n type TooltipProps as RadixTooltipProps,\n} from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport { useUIState } from '@/context/ui-state-provider';\nimport { resolveColor } from '../utils/resolve-color';\nimport { ThemeAccentContext } from '../theme/theme-provider';\n\nexport function Tooltip({\n children,\n ...props\n}: RadixTooltipProps): React.ReactElement {\n const { isMobile } = useUIState();\n const [open, setOpen] = useState<boolean>(props.defaultOpen ?? false);\n const themeAccent = useContext(ThemeAccentContext);\n\n // Content는 Portal(body)로 렌더돼 theme의 className override를 못 받으므로, theme custom\n // accent(black)를 className으로 다시 적용해 Portal 안에서도 black을 유지한다.\n // (RadixTooltip의 className은 Content에 적용됨)\n const accentClassName = useMemo(\n () => resolveColor(themeAccent).className,\n [themeAccent]\n );\n\n const onOpenChange = useCallback(\n (e: boolean) => {\n if (isMobile) return;\n setOpen(e);\n },\n [isMobile]\n );\n\n const onClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isMobile) return;\n e.preventDefault();\n setOpen((p) => !p);\n },\n [isMobile]\n );\n\n return (\n <RadixTooltip\n delayDuration={isMobile ? props.delayDuration : 0}\n onOpenChange={onOpenChange}\n open={open}\n {...props}\n className={clsx(accentClassName, props.className)}\n >\n <Box asChild onClick={onClick}>\n {children}\n </Box>\n </RadixTooltip>\n );\n}\n","import { createContext, useContext } from 'react';\n\ninterface UIStateContextType {\n isMobile: boolean;\n}\n\nexport const UIStateContext = createContext<UIStateContextType>({\n isMobile: false,\n});\n\nexport type UiStateProviderProps = React.ReactNode;\n\nexport function UIStateProvider({\n children,\n isMobile,\n}: {\n children: UiStateProviderProps;\n isMobile: boolean;\n}): React.ReactElement {\n return (\n <UIStateContext.Provider value={{ isMobile }}>\n {children}\n </UIStateContext.Provider>\n );\n}\n\nexport const useUIState = (): UIStateContextType => {\n try {\n const state = useContext(UIStateContext);\n return state;\n } catch (error) {\n throw new Error('UIStateProvider not found');\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 { MONO_STYLE } from '../utils/mono-style';\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 /** 등폭(monospace) 폰트 + 숫자 고정폭 정렬(tabular-nums). 점수·퍼센트 등 수치 표시에 사용한다. */\n mono?: boolean;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, mono, style, ...rest } =\n 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 style={mono ? { ...MONO_STYLE, ...style } : style}\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 { CSSProperties } from 'react';\n\n/**\n * 등폭(monospace) 텍스트 스타일.\n * - `font-family`: 등폭 폰트(`--code-font-family`는 Radix Themes가 제공, 없으면 시스템 등폭으로 폴백)\n * - `font-variant-numeric: tabular-nums`: 숫자를 고정폭으로 정렬해 점수·퍼센트·통계가 자릿수마다 흔들리지 않게 함\n *\n * `Typo`/`Heading`의 `mono` prop 구현에 사용된다.\n */\nexport const MONO_STYLE: CSSProperties = {\n fontFamily: 'var(--code-font-family, ui-monospace, \"SF Mono\", monospace)',\n fontVariantNumeric: 'tabular-nums',\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAAmD;;;ACAnD,IAAAC,iBAIO;AACP,IAAAC,eAAqB;AACrB,IAAAC,gBAA2D;;;ACN3D,mBAA0C;AAoBtC;AAdG,IAAM,qBAAiB,4BAAkC;AAAA,EAC9D,UAAU;AACZ,CAAC;AAkBM,IAAM,aAAa,MAA0B;AAClD,MAAI;AACF,UAAM,YAAQ,yBAAW,cAAc;AACvC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;;;ACJA,IAAM,qBAAoE;AAAA,EACxE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAgBA,IAAM,mBAA2D;AAAA,EAC/D,OAAO,EAAE,WAAW,qBAAqB,eAAe,OAAO;AACjE;AAEA,IAAM,kBAAkB,CAAC,UACvB,UAAU,UAAa,SAAS;AAElC,IAAM,gBAAgB,CAAC,UACrB,UAAU,UAAa,SAAS;AAgB3B,IAAM,eAAe,CAAC,UAAmC;AAC9D,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAW,cAAc,IAAI,iBAAiB,KAAK;AAC3D,WAAO,EAAE,OAAO,eAAe,UAAU;AAAA,EAC3C;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,EAAE,OAAO,mBAAmB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO,EAAE,MAAM;AACjB;;;ACrFA,IAAAC,gBAAqC;AACrC,oBAAsB;AACtB,kBAAqB;AAoCf,IAAAC,sBAAA;AAvBC,IAAM,yBAAqB,6BAAmC,MAAS;;;AHqCxE,IAAAC,sBAAA;AAzCC,SAAS,QAAQ,IAGkB;AAHlB,eACtB;AAAA;AAAA,EAZF,IAWwB,IAEnB,kBAFmB,IAEnB;AAAA,IADH;AAAA;AAZF,MAAAC;AAeE,QAAM,EAAE,SAAS,IAAI,WAAW;AAChC,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAkBA,MAAA,MAAM,gBAAN,OAAAA,MAAqB,KAAK;AACpE,QAAM,kBAAc,0BAAW,kBAAkB;AAKjD,QAAM,sBAAkB;AAAA,IACtB,MAAM,aAAa,WAAW,EAAE;AAAA,IAChC,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,mBAAe;AAAA,IACnB,CAAC,MAAe;AACd,UAAI,SAAU;AACd,cAAQ,CAAC;AAAA,IACX;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,cAAU;AAAA,IACd,CAAC,MAAwC;AACvC,UAAI,CAAC,SAAU;AACf,QAAE,eAAe;AACjB,cAAQ,CAAC,MAAM,CAAC,CAAC;AAAA,IACnB;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,SACE;AAAA,IAAC,eAAAC;AAAA,IAAA;AAAA,MACC,eAAe,WAAW,MAAM,gBAAgB;AAAA,MAChD;AAAA,MACA;AAAA,OACI,QAJL;AAAA,MAKC,eAAW,mBAAK,iBAAiB,MAAM,SAAS;AAAA,MAEhD,uDAAC,sBAAI,SAAO,MAAC,SACV,UACH;AAAA;AAAA,EACF;AAEJ;;;AIvDA,IAAAC,iBAAkC;AAClC,IAAAC,eAAqB;AACrB,IAAAC,gBAA2C;;;ACFpC,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACVO,IAAM,aAA4B;AAAA,EACvC,YAAY;AAAA,EACZ,oBAAoB;AACtB;;;AFwCM,IAAAC,sBAAA;AAhCC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAkB,QAAyB;AAC1C,UACE,YADM,QAAM,SAAS,UAAU,OAAO,WAAW,MAAM,MAtB7D,IAuBM,IADiE,iBACjE,IADiE,CAA3D,QAAM,WAAS,YAAU,SAAO,aAAW,QAAM;AAGzD,UAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,MACvD,MAAM,aAAa,KAAK;AAAA,MACxB,CAAC,KAAK;AAAA,IACR;AAEA,UAAM,gBAAY,uBAAgC,MAAM;AACtD,UAAI,SAAS,OAAW,QAAO;AAE/B,UAAI,YAAY,OAAW,QAAO;AAElC,aAAO,kBAAkB;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,CAAC,iBAAmD;AACzD,kBAAQ,cAAc;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AAAA,YACL;AACE,qBAAO;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,WACE;AAAA,MAAC,eAAAC;AAAA,MAAA,iCACK,OADL;AAAA,QAEC,eAAW,mBAAK,gBAAgB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA,QACN,OAAO,OAAO,kCAAK,aAAe,SAAU;AAAA,QAE3C;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AL3Bb,IAAAC,sBAAA;AA9BC,SAAS,gBACd,OACiB;AACjB,QAAoD,YAA5C,YAAU,OAAO,YAAY,EAZvC,IAYsD,IAAT,iBAAS,IAAT,CAAnC,YAAU,SAAO;AACzB,QAAM,UAAM,sBAAwB,IAAI;AAExC,QAAM,CAAC,gBAAgB,iBAAiB,QAAI;AAAA,IAC1C;AAAA,EACF;AAEA,+BAAU,MAAM;AACd,QAAI,IAAI,SAAS;AACf,YAAM,OAAO,IAAI;AACjB,YAAM,YAAY,MAAY;AAC5B,YAAI,KAAK,eAAe,KAAK,cAAc;AACzC,4BAAkB,OAAO;AAAA,QAC3B;AAAA,MACF;AAEA,YAAM,WAAW,MAAY;AAC3B,0BAAkB,MAAM;AAAA,MAC1B;AAEA,UAAI,QAAQ,iBAAiB,cAAc,SAAS;AACpD,UAAI,QAAQ,iBAAiB,cAAc,QAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,6CAAC,WAAQ,SAAS,UAAU,OAAO,EAAE,SAAS,eAAe,GAC3D;AAAA,IAAC;AAAA,qCACK,OADL;AAAA,MAEC;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QACP,cAAc;AAAA,QACd,UAAU;AAAA,QACV,iBAAiB;AAAA,QAEjB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,WAAW;AAAA,SACR;AAAA,MAGJ;AAAA;AAAA,EACH,GACF;AAEJ;","names":["import_react","import_themes","import_clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","_a","RadixTooltip","import_themes","import_clsx","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  EllipsisTooltip
3
- } from "../chunk-Q3M6GFHY.js";
3
+ } from "../chunk-5FLPPHUZ.js";
4
4
  import "../chunk-2M3UFZUD.js";
5
5
  import "../chunk-PT57HCAI.js";
6
- import "../chunk-GR4PG6HY.js";
6
+ import "../chunk-YXFHD2PY.js";
7
7
  import "../chunk-LDBWASUA.js";
8
+ import "../chunk-PO2PBAHW.js";
8
9
  import "../chunk-WYWM2HSZ.js";
9
10
  import "../chunk-VFQD57ZY.js";
10
11
  import "../chunk-CRTRMMJ7.js";
@@ -79,6 +79,12 @@ var mapWithResponsive = (args) => {
79
79
  return value;
80
80
  };
81
81
 
82
+ // src/utils/mono-style.ts
83
+ var MONO_STYLE = {
84
+ fontFamily: 'var(--code-font-family, ui-monospace, "SF Mono", monospace)',
85
+ fontVariantNumeric: "tabular-nums"
86
+ };
87
+
82
88
  // src/utils/resolve-color.ts
83
89
  var SEMANTIC_COLOR_MAP = {
84
90
  error: "red",
@@ -106,7 +112,7 @@ var resolveColor = (color) => {
106
112
  var import_jsx_runtime = require("react/jsx-runtime");
107
113
  var Typo = (0, import_react.forwardRef)(
108
114
  (props, ref) => {
109
- const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
115
+ const _a = props, { size, variant, children, color, className, mono, style } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className", "mono", "style"]);
110
116
  const { color: radixColor, className: colorClassName } = (0, import_react.useMemo)(
111
117
  () => resolveColor(color),
112
118
  [color]
@@ -136,6 +142,7 @@ var Typo = (0, import_react.forwardRef)(
136
142
  color: radixColor,
137
143
  ref,
138
144
  size: radixSize,
145
+ style: mono ? __spreadValues(__spreadValues({}, MONO_STYLE), style) : style,
139
146
  children
140
147
  })
141
148
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/atoms/field-error-wrapper.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 { Flex } from './flex';\nimport { Typo } from './typo';\n\nexport interface FieldErrorWrapperProps {\n children?: React.ReactNode;\n error?: React.ReactNode;\n}\n\nexport function FieldErrorWrapper({\n children,\n error,\n}: FieldErrorWrapperProps): React.ReactNode {\n return (\n <Flex direction=\"column\" gap=\"1\">\n {children}\n {error ? (\n <Typo color=\"red\" variant=\"caption\">\n {error}\n </Typo>\n ) : null}\n </Flex>\n );\n}\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAqC;;;ACErC,IAAAA,iBAAkC;AAClC,kBAAqB;AACrB,mBAA2C;;;ACFpC,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACUA,IAAM,qBAAoE;AAAA,EACxE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAgBA,IAAM,mBAA2D;AAAA,EAC/D,OAAO,EAAE,WAAW,qBAAqB,eAAe,OAAO;AACjE;AAEA,IAAM,kBAAkB,CAAC,UACvB,UAAU,UAAa,SAAS;AAElC,IAAM,gBAAgB,CAAC,UACrB,UAAU,UAAa,SAAS;AAgB3B,IAAM,eAAe,CAAC,UAAmC;AAC9D,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAW,cAAc,IAAI,iBAAiB,KAAK;AAC3D,WAAO,EAAE,OAAO,eAAe,UAAU;AAAA,EAC3C;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,EAAE,OAAO,mBAAmB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO,EAAE,MAAM;AACjB;;;AFrCM;AA/BC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAkB,QAAyB;AAC1C,UAA+D,YAAvD,QAAM,SAAS,UAAU,OAAO,UAnB5C,IAmBmE,IAAT,iBAAS,IAAT,CAA9C,QAAM,WAAS,YAAU,SAAO;AAExC,UAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,MACvD,MAAM,aAAa,KAAK;AAAA,MACxB,CAAC,KAAK;AAAA,IACR;AAEA,UAAM,gBAAY,sBAAgC,MAAM;AACtD,UAAI,SAAS,OAAW,QAAO;AAE/B,UAAI,YAAY,OAAW,QAAO;AAElC,aAAO,kBAAkB;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,CAAC,iBAAmD;AACzD,kBAAQ,cAAc;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AAAA,YACL;AACE,qBAAO;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,WACE;AAAA,MAAC,eAAAC;AAAA,MAAA,iCACK,OADL;AAAA,QAEC,eAAW,kBAAK,gBAAgB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA,QAEL;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AF/Cf,IAAAC,sBAAA;AALG,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAA4C;AAC1C,SACE,8CAAC,sBAAK,WAAU,UAAS,KAAI,KAC1B;AAAA;AAAA,IACA,QACC,6CAAC,QAAK,OAAM,OAAM,SAAQ,WACvB,iBACH,IACE;AAAA,KACN;AAEJ;","names":["import_themes","RadixText","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/atoms/field-error-wrapper.tsx","../../src/atoms/flex.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/mono-style.ts","../../src/utils/resolve-color.ts"],"sourcesContent":["import React from 'react';\nimport { Flex } from './flex';\nimport { Typo } from './typo';\n\nexport interface FieldErrorWrapperProps {\n children?: React.ReactNode;\n error?: React.ReactNode;\n}\n\nexport function FieldErrorWrapper({\n children,\n error,\n}: FieldErrorWrapperProps): React.ReactNode {\n return (\n <Flex direction=\"column\" gap=\"1\">\n {children}\n {error ? (\n <Typo color=\"red\" variant=\"caption\">\n {error}\n </Typo>\n ) : null}\n </Flex>\n );\n}\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 { MONO_STYLE } from '../utils/mono-style';\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 /** 등폭(monospace) 폰트 + 숫자 고정폭 정렬(tabular-nums). 점수·퍼센트 등 수치 표시에 사용한다. */\n mono?: boolean;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, mono, style, ...rest } =\n 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 style={mono ? { ...MONO_STYLE, ...style } : style}\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 { CSSProperties } from 'react';\n\n/**\n * 등폭(monospace) 텍스트 스타일.\n * - `font-family`: 등폭 폰트(`--code-font-family`는 Radix Themes가 제공, 없으면 시스템 등폭으로 폴백)\n * - `font-variant-numeric: tabular-nums`: 숫자를 고정폭으로 정렬해 점수·퍼센트·통계가 자릿수마다 흔들리지 않게 함\n *\n * `Typo`/`Heading`의 `mono` prop 구현에 사용된다.\n */\nexport const MONO_STYLE: CSSProperties = {\n fontFamily: 'var(--code-font-family, ui-monospace, \"SF Mono\", monospace)',\n fontVariantNumeric: 'tabular-nums',\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAqC;;;ACErC,IAAAA,iBAAkC;AAClC,kBAAqB;AACrB,mBAA2C;;;ACFpC,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACVO,IAAM,aAA4B;AAAA,EACvC,YAAY;AAAA,EACZ,oBAAoB;AACtB;;;ACiBA,IAAM,qBAAoE;AAAA,EACxE,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAgBA,IAAM,mBAA2D;AAAA,EAC/D,OAAO,EAAE,WAAW,qBAAqB,eAAe,OAAO;AACjE;AAEA,IAAM,kBAAkB,CAAC,UACvB,UAAU,UAAa,SAAS;AAElC,IAAM,gBAAgB,CAAC,UACrB,UAAU,UAAa,SAAS;AAgB3B,IAAM,eAAe,CAAC,UAAmC;AAC9D,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAW,cAAc,IAAI,iBAAiB,KAAK;AAC3D,WAAO,EAAE,OAAO,eAAe,UAAU;AAAA,EAC3C;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,EAAE,OAAO,mBAAmB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO,EAAE,MAAM;AACjB;;;AHjCM;AAhCC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAkB,QAAyB;AAC1C,UACE,YADM,QAAM,SAAS,UAAU,OAAO,WAAW,MAAM,MAtB7D,IAuBM,IADiE,iBACjE,IADiE,CAA3D,QAAM,WAAS,YAAU,SAAO,aAAW,QAAM;AAGzD,UAAM,EAAE,OAAO,YAAY,WAAW,eAAe,QAAI;AAAA,MACvD,MAAM,aAAa,KAAK;AAAA,MACxB,CAAC,KAAK;AAAA,IACR;AAEA,UAAM,gBAAY,sBAAgC,MAAM;AACtD,UAAI,SAAS,OAAW,QAAO;AAE/B,UAAI,YAAY,OAAW,QAAO;AAElC,aAAO,kBAAkB;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,CAAC,iBAAmD;AACzD,kBAAQ,cAAc;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AAAA,YACL;AACE,qBAAO;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,WACE;AAAA,MAAC,eAAAC;AAAA,MAAA,iCACK,OADL;AAAA,QAEC,eAAW,kBAAK,gBAAgB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA,QACN,OAAO,OAAO,kCAAK,aAAe,SAAU;AAAA,QAE3C;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AFpDf,IAAAC,sBAAA;AALG,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAA4C;AAC1C,SACE,8CAAC,sBAAK,WAAU,UAAS,KAAI,KAC1B;AAAA;AAAA,IACA,QACC,6CAAC,QAAK,OAAM,OAAM,SAAQ,WACvB,iBACH,IACE;AAAA,KACN;AAEJ;","names":["import_themes","RadixText","import_jsx_runtime"]}
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  FieldErrorWrapper
3
- } from "../chunk-GAA3RTRW.js";
4
- import "../chunk-GR4PG6HY.js";
3
+ } from "../chunk-72ZC7DBY.js";
4
+ import "../chunk-YXFHD2PY.js";
5
5
  import "../chunk-LDBWASUA.js";
6
+ import "../chunk-PO2PBAHW.js";
6
7
  import "../chunk-25HMMI7R.js";
7
8
  import "../chunk-VFQD57ZY.js";
8
9
  import "../chunk-CRTRMMJ7.js";
@@ -75,6 +75,12 @@ var mapWithResponsive = (args) => {
75
75
  return value;
76
76
  };
77
77
 
78
+ // src/utils/mono-style.ts
79
+ var MONO_STYLE = {
80
+ fontFamily: 'var(--code-font-family, ui-monospace, "SF Mono", monospace)',
81
+ fontVariantNumeric: "tabular-nums"
82
+ };
83
+
78
84
  // src/utils/resolve-color.ts
79
85
  var SEMANTIC_COLOR_MAP = {
80
86
  error: "red",
@@ -118,7 +124,7 @@ var mapVariant = (variant) => {
118
124
  }
119
125
  };
120
126
  function Heading2(props) {
121
- const _a = props, { size, children, variant, color, className } = _a, rest = __objRest(_a, ["size", "children", "variant", "color", "className"]);
127
+ const _a = props, { size, children, variant, color, className, mono, style } = _a, rest = __objRest(_a, ["size", "children", "variant", "color", "className", "mono", "style"]);
122
128
  const { color: radixColor, className: colorClassName } = (0, import_react.useMemo)(
123
129
  () => resolveColor(color),
124
130
  [color]
@@ -135,6 +141,7 @@ function Heading2(props) {
135
141
  className: (0, import_clsx.clsx)(colorClassName, className),
136
142
  color: radixColor,
137
143
  size: radixSize,
144
+ style: mono ? __spreadValues(__spreadValues({}, MONO_STYLE), style) : style,
138
145
  children
139
146
  })
140
147
  );