@tipp/ui 2.8.0 → 2.10.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 (568) hide show
  1. package/dist/app/index.cjs +49 -4
  2. package/dist/app/index.cjs.map +1 -1
  3. package/dist/app/index.js +98 -97
  4. package/dist/app/platform/coach-question-list.cjs +49 -4
  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 +49 -4
  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 +49 -4
  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 +49 -4
  14. package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
  15. package/dist/app/platform/edit-coaching-time.js +80 -79
  16. package/dist/app/platform/edit-service-type.cjs +49 -4
  17. package/dist/app/platform/edit-service-type.cjs.map +1 -1
  18. package/dist/app/platform/edit-service-type.js +81 -80
  19. package/dist/app/platform/goal-manage-card-edit.cjs +49 -4
  20. package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
  21. package/dist/app/platform/goal-manage-card-edit.js +80 -79
  22. package/dist/app/platform/goal-manage-card-read.cjs +49 -4
  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 +49 -4
  26. package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
  27. package/dist/app/platform/on-offline-radio-card.js +80 -79
  28. package/dist/app/platform/report-card.cjs +49 -4
  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 +49 -4
  32. package/dist/app/platform/reservation-card.cjs.map +1 -1
  33. package/dist/app/platform/reservation-card.js +81 -80
  34. package/dist/app/platform/session-card.cjs +49 -4
  35. package/dist/app/platform/session-card.cjs.map +1 -1
  36. package/dist/app/platform/session-card.js +83 -82
  37. package/dist/app/platform/session-review-simple-read.cjs +49 -4
  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 +49 -4
  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 +36 -35
  43. package/dist/app/platform/userInfos/coaching-customer-info/large.cjs +49 -4
  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 +49 -4
  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 +49 -4
  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 +49 -4
  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 +49 -4
  56. package/dist/app/platform/userInfos/utils.cjs.map +1 -1
  57. package/dist/app/platform/userInfos/utils.js +32 -31
  58. package/dist/app/roleplay/chart/session-chart.cjs +351 -0
  59. package/dist/app/roleplay/chart/session-chart.cjs.map +1 -0
  60. package/dist/app/roleplay/chart/session-chart.d.cts +16 -0
  61. package/dist/app/roleplay/chart/session-chart.d.ts +16 -0
  62. package/dist/app/roleplay/chart/session-chart.js +14 -0
  63. package/dist/app/roleplay/index.cjs +5706 -0
  64. package/dist/app/roleplay/index.cjs.map +1 -0
  65. package/dist/app/roleplay/index.d.cts +4 -0
  66. package/dist/app/roleplay/index.d.ts +4 -0
  67. package/dist/app/roleplay/index.js +182 -0
  68. package/dist/app/roleplay/index.js.map +1 -0
  69. package/dist/app/roleplay/parts/analysis-section.cjs +2178 -0
  70. package/dist/app/roleplay/parts/analysis-section.cjs.map +1 -0
  71. package/dist/app/roleplay/parts/analysis-section.d.cts +17 -0
  72. package/dist/app/roleplay/parts/analysis-section.d.ts +17 -0
  73. package/dist/app/roleplay/parts/analysis-section.js +97 -0
  74. package/dist/app/roleplay/parts/analysis-section.js.map +1 -0
  75. package/dist/app/roleplay/parts/coaching-panel.cjs +2191 -0
  76. package/dist/app/roleplay/parts/coaching-panel.cjs.map +1 -0
  77. package/dist/app/roleplay/parts/coaching-panel.d.cts +8 -0
  78. package/dist/app/roleplay/parts/coaching-panel.d.ts +8 -0
  79. package/dist/app/roleplay/parts/coaching-panel.js +95 -0
  80. package/dist/app/roleplay/parts/coaching-panel.js.map +1 -0
  81. package/dist/app/roleplay/parts/content.cjs +4683 -0
  82. package/dist/app/roleplay/parts/content.cjs.map +1 -0
  83. package/dist/app/roleplay/parts/content.d.cts +15 -0
  84. package/dist/app/roleplay/parts/content.d.ts +15 -0
  85. package/dist/app/roleplay/parts/content.js +174 -0
  86. package/dist/app/roleplay/parts/content.js.map +1 -0
  87. package/dist/app/roleplay/parts/header.cjs +2300 -0
  88. package/dist/app/roleplay/parts/header.cjs.map +1 -0
  89. package/dist/app/roleplay/parts/header.d.cts +13 -0
  90. package/dist/app/roleplay/parts/header.d.ts +13 -0
  91. package/dist/app/roleplay/parts/header.js +96 -0
  92. package/dist/app/roleplay/parts/header.js.map +1 -0
  93. package/dist/app/roleplay/parts/score-summary.cjs +2276 -0
  94. package/dist/app/roleplay/parts/score-summary.cjs.map +1 -0
  95. package/dist/app/roleplay/parts/score-summary.d.cts +12 -0
  96. package/dist/app/roleplay/parts/score-summary.d.ts +12 -0
  97. package/dist/app/roleplay/parts/score-summary.js +96 -0
  98. package/dist/app/roleplay/parts/score-summary.js.map +1 -0
  99. package/dist/app/roleplay/parts/score-trend-section.cjs +3686 -0
  100. package/dist/app/roleplay/parts/score-trend-section.cjs.map +1 -0
  101. package/dist/app/roleplay/parts/score-trend-section.d.cts +14 -0
  102. package/dist/app/roleplay/parts/score-trend-section.d.ts +14 -0
  103. package/dist/app/roleplay/parts/score-trend-section.js +168 -0
  104. package/dist/app/roleplay/parts/score-trend-section.js.map +1 -0
  105. package/dist/app/roleplay/parts/script-transcript.cjs +2288 -0
  106. package/dist/app/roleplay/parts/script-transcript.cjs.map +1 -0
  107. package/dist/app/roleplay/parts/script-transcript.d.cts +15 -0
  108. package/dist/app/roleplay/parts/script-transcript.d.ts +15 -0
  109. package/dist/app/roleplay/parts/script-transcript.js +96 -0
  110. package/dist/app/roleplay/parts/script-transcript.js.map +1 -0
  111. package/dist/app/roleplay/parts/section-nav.cjs +2433 -0
  112. package/dist/app/roleplay/parts/section-nav.cjs.map +1 -0
  113. package/dist/app/roleplay/parts/section-nav.d.cts +15 -0
  114. package/dist/app/roleplay/parts/section-nav.d.ts +15 -0
  115. package/dist/app/roleplay/parts/section-nav.js +96 -0
  116. package/dist/app/roleplay/parts/section-nav.js.map +1 -0
  117. package/dist/app/roleplay/parts/session-replay-dialog.cjs +2598 -0
  118. package/dist/app/roleplay/parts/session-replay-dialog.cjs.map +1 -0
  119. package/dist/app/roleplay/parts/session-replay-dialog.d.cts +14 -0
  120. package/dist/app/roleplay/parts/session-replay-dialog.d.ts +14 -0
  121. package/dist/app/roleplay/parts/session-replay-dialog.js +97 -0
  122. package/dist/app/roleplay/parts/session-replay-dialog.js.map +1 -0
  123. package/dist/app/roleplay/parts/step-detail.cjs +2311 -0
  124. package/dist/app/roleplay/parts/step-detail.cjs.map +1 -0
  125. package/dist/app/roleplay/parts/step-detail.d.cts +9 -0
  126. package/dist/app/roleplay/parts/step-detail.d.ts +9 -0
  127. package/dist/app/roleplay/parts/step-detail.js +96 -0
  128. package/dist/app/roleplay/parts/step-detail.js.map +1 -0
  129. package/dist/app/roleplay/parts/step-radar.cjs +463 -0
  130. package/dist/app/roleplay/parts/step-radar.cjs.map +1 -0
  131. package/dist/app/roleplay/parts/step-radar.d.cts +8 -0
  132. package/dist/app/roleplay/parts/step-radar.d.ts +8 -0
  133. package/dist/app/roleplay/parts/step-radar.js +14 -0
  134. package/dist/app/roleplay/parts/step-radar.js.map +1 -0
  135. package/dist/app/roleplay/parts/step-summary.cjs +2651 -0
  136. package/dist/app/roleplay/parts/step-summary.cjs.map +1 -0
  137. package/dist/app/roleplay/parts/step-summary.d.cts +8 -0
  138. package/dist/app/roleplay/parts/step-summary.d.ts +8 -0
  139. package/dist/app/roleplay/parts/step-summary.js +101 -0
  140. package/dist/app/roleplay/parts/step-summary.js.map +1 -0
  141. package/dist/app/roleplay/rp-session-detail.cjs +5703 -0
  142. package/dist/app/roleplay/rp-session-detail.cjs.map +1 -0
  143. package/dist/app/roleplay/rp-session-detail.d.cts +17 -0
  144. package/dist/app/roleplay/rp-session-detail.d.ts +17 -0
  145. package/dist/app/roleplay/rp-session-detail.js +179 -0
  146. package/dist/app/roleplay/rp-session-detail.js.map +1 -0
  147. package/dist/app/roleplay/types.cjs +19 -0
  148. package/dist/app/roleplay/types.cjs.map +1 -0
  149. package/dist/app/roleplay/types.d.cts +42 -0
  150. package/dist/app/roleplay/types.d.ts +42 -0
  151. package/dist/app/roleplay/types.js +2 -0
  152. package/dist/app/roleplay/types.js.map +1 -0
  153. package/dist/app/roleplay/utils/report-parse.cjs +285 -0
  154. package/dist/app/roleplay/utils/report-parse.cjs.map +1 -0
  155. package/dist/app/roleplay/utils/report-parse.d.cts +57 -0
  156. package/dist/app/roleplay/utils/report-parse.d.ts +57 -0
  157. package/dist/app/roleplay/utils/report-parse.js +8 -0
  158. package/dist/app/roleplay/utils/report-parse.js.map +1 -0
  159. package/dist/app/roleplay/utils/report-parse.test.cjs +491 -0
  160. package/dist/app/roleplay/utils/report-parse.test.cjs.map +1 -0
  161. package/dist/app/roleplay/utils/report-parse.test.d.cts +2 -0
  162. package/dist/app/roleplay/utils/report-parse.test.d.ts +2 -0
  163. package/dist/app/roleplay/utils/report-parse.test.js +237 -0
  164. package/dist/app/roleplay/utils/report-parse.test.js.map +1 -0
  165. package/dist/app/roleplay/utils/session-utils.cjs +204 -0
  166. package/dist/app/roleplay/utils/session-utils.cjs.map +1 -0
  167. package/dist/app/roleplay/utils/session-utils.d.cts +38 -0
  168. package/dist/app/roleplay/utils/session-utils.d.ts +38 -0
  169. package/dist/app/roleplay/utils/session-utils.js +46 -0
  170. package/dist/app/roleplay/utils/session-utils.js.map +1 -0
  171. package/dist/atoms/bullet-text.cjs +29 -2
  172. package/dist/atoms/bullet-text.cjs.map +1 -1
  173. package/dist/atoms/bullet-text.js +3 -2
  174. package/dist/atoms/dialog.cjs +29 -2
  175. package/dist/atoms/dialog.cjs.map +1 -1
  176. package/dist/atoms/dialog.js +3 -2
  177. package/dist/atoms/ellipsis-tooltip.cjs +29 -2
  178. package/dist/atoms/ellipsis-tooltip.cjs.map +1 -1
  179. package/dist/atoms/ellipsis-tooltip.js +3 -2
  180. package/dist/atoms/field-error-wrapper.cjs +29 -2
  181. package/dist/atoms/field-error-wrapper.cjs.map +1 -1
  182. package/dist/atoms/field-error-wrapper.js +3 -2
  183. package/dist/atoms/heading.cjs +29 -2
  184. package/dist/atoms/heading.cjs.map +1 -1
  185. package/dist/atoms/heading.d.cts +2 -0
  186. package/dist/atoms/heading.d.ts +2 -0
  187. package/dist/atoms/heading.js +2 -1
  188. package/dist/atoms/index.cjs +49 -4
  189. package/dist/atoms/index.cjs.map +1 -1
  190. package/dist/atoms/index.js +67 -66
  191. package/dist/atoms/list.cjs +29 -2
  192. package/dist/atoms/list.cjs.map +1 -1
  193. package/dist/atoms/list.js +3 -2
  194. package/dist/atoms/pagination.cjs +29 -2
  195. package/dist/atoms/pagination.cjs.map +1 -1
  196. package/dist/atoms/pagination.js +3 -2
  197. package/dist/atoms/typo.cjs +29 -2
  198. package/dist/atoms/typo.cjs.map +1 -1
  199. package/dist/atoms/typo.d.cts +2 -0
  200. package/dist/atoms/typo.d.ts +2 -0
  201. package/dist/atoms/typo.js +2 -1
  202. package/dist/chunk-2TOASXPK.js +131 -0
  203. package/dist/chunk-2TOASXPK.js.map +1 -0
  204. package/dist/chunk-36W7VD2Z.js +13 -0
  205. package/dist/chunk-36W7VD2Z.js.map +1 -0
  206. package/dist/{chunk-7XMPNH2X.js → chunk-3DZIX4CE.js} +8 -8
  207. package/dist/chunk-3UGBMKSQ.js +166 -0
  208. package/dist/chunk-3UGBMKSQ.js.map +1 -0
  209. package/dist/{chunk-XFFVIWAD.js → chunk-47QYYEMG.js} +2 -2
  210. package/dist/{chunk-VVJEXKCB.js → chunk-4GH4R4VJ.js} +6 -6
  211. package/dist/chunk-4YAA25AV.js +161 -0
  212. package/dist/chunk-4YAA25AV.js.map +1 -0
  213. package/dist/{chunk-MTESLX7K.js → chunk-5IGBFB67.js} +12 -12
  214. package/dist/chunk-5QIT4URV.js +87 -0
  215. package/dist/chunk-5QIT4URV.js.map +1 -0
  216. package/dist/{chunk-LXL7GJUM.js → chunk-5RIAIE2J.js} +3 -3
  217. package/dist/{chunk-R43F6ZWT.js → chunk-64DSUMXA.js} +2 -2
  218. package/dist/{chunk-C2FRAZT2.js → chunk-6OT5OYGM.js} +2 -2
  219. package/dist/chunk-6YIKOYBQ.js +185 -0
  220. package/dist/chunk-6YIKOYBQ.js.map +1 -0
  221. package/dist/{chunk-6Q26H64H.js → chunk-74PR3ZWJ.js} +6 -6
  222. package/dist/{chunk-IA4WXGVH.js → chunk-75EY7LBP.js} +2 -2
  223. package/dist/chunk-7MXY3D3Z.js +84 -0
  224. package/dist/chunk-7MXY3D3Z.js.map +1 -0
  225. package/dist/{chunk-77YN5S26.js → chunk-AELKCD6B.js} +3 -3
  226. package/dist/{chunk-L5WSNVSD.js → chunk-AHYOAFOU.js} +3 -3
  227. package/dist/{chunk-6JPGF4MB.js → chunk-AT5PAJLW.js} +2 -2
  228. package/dist/{chunk-P6YCD2AV.js → chunk-C4INJWFV.js} +9 -9
  229. package/dist/{chunk-SGJBQKUD.js → chunk-C6HO3IGE.js} +2 -2
  230. package/dist/{chunk-7NBGSPZU.js → chunk-CBYIPRND.js} +5 -5
  231. package/dist/{chunk-UIMDXYPP.js → chunk-CGLDFUOY.js} +6 -6
  232. package/dist/{chunk-DUXYDGHX.js → chunk-CUS3ORMD.js} +6 -6
  233. package/dist/{chunk-UILGIMXL.js → chunk-D4U2ZV2A.js} +5 -5
  234. package/dist/{chunk-PRLNOTMV.js → chunk-DPMDQA3O.js} +6 -6
  235. package/dist/chunk-EBFQFOUQ.js +138 -0
  236. package/dist/chunk-EBFQFOUQ.js.map +1 -0
  237. package/dist/chunk-EHDUKUML.js +183 -0
  238. package/dist/chunk-EHDUKUML.js.map +1 -0
  239. package/dist/{chunk-6XASFDTI.js → chunk-EJXZXUD2.js} +15 -15
  240. package/dist/{chunk-QFSMOKC6.js → chunk-FAL6S2XK.js} +2 -2
  241. package/dist/{chunk-GMEGTXIV.js → chunk-FJEDSUGU.js} +5 -5
  242. package/dist/{chunk-WLG6GG26.js → chunk-G3KQN32M.js} +3 -3
  243. package/dist/chunk-GA6W62DO.js +101 -0
  244. package/dist/chunk-GA6W62DO.js.map +1 -0
  245. package/dist/{chunk-72ZC7DBY.js → chunk-GNB4A34H.js} +2 -2
  246. package/dist/{chunk-KEFAYPBO.js → chunk-IRFNKOKQ.js} +4 -4
  247. package/dist/{chunk-5BIICWFT.js → chunk-ISSUGCCY.js} +6 -6
  248. package/dist/{chunk-PZDN6K6R.js → chunk-JCZXPONS.js} +4 -4
  249. package/dist/{chunk-7TRT4QTP.js → chunk-K4RZTENM.js} +2 -2
  250. package/dist/{chunk-Z54XTEAF.js → chunk-KDS7OQOY.js} +2 -2
  251. package/dist/chunk-KJPBBBVK.js +142 -0
  252. package/dist/chunk-KJPBBBVK.js.map +1 -0
  253. package/dist/{chunk-YXFHD2PY.js → chunk-L4QQGIYQ.js} +24 -3
  254. package/dist/chunk-L4QQGIYQ.js.map +1 -0
  255. package/dist/{chunk-YCV3HR4J.js → chunk-LAGJDIVU.js} +2 -2
  256. package/dist/{chunk-3UJEOHQT.js → chunk-LK2H4QTJ.js} +6 -6
  257. package/dist/{chunk-UHAMISMF.js → chunk-LRNO4W2P.js} +4 -4
  258. package/dist/{chunk-5FLPPHUZ.js → chunk-MQKIIIBW.js} +2 -2
  259. package/dist/{chunk-6YPAN4D3.js → chunk-N242VJOP.js} +5 -5
  260. package/dist/{chunk-PWUCBBQP.js → chunk-N3FMP27I.js} +6 -6
  261. package/dist/{chunk-NIMF5FJI.js → chunk-NK6S7ZMB.js} +6 -6
  262. package/dist/chunk-NKW6BO5R.js +264 -0
  263. package/dist/chunk-NKW6BO5R.js.map +1 -0
  264. package/dist/{chunk-IIA2BVJI.js → chunk-NVRVOTWZ.js} +3 -3
  265. package/dist/{chunk-GTTZJ2Y7.js → chunk-O332K3SW.js} +4 -4
  266. package/dist/{chunk-LCR5R743.js → chunk-OOM522XP.js} +2 -2
  267. package/dist/{chunk-FIQJUO66.js → chunk-OPIVSYLN.js} +5 -5
  268. package/dist/{chunk-SQZVLRUH.js → chunk-OUDDTPEN.js} +5 -5
  269. package/dist/chunk-OUP3VFXG.js +1 -0
  270. package/dist/chunk-OUP3VFXG.js.map +1 -0
  271. package/dist/{chunk-URSBI6BQ.js → chunk-OW2QNTK3.js} +3 -3
  272. package/dist/{chunk-GBT2BBZS.js → chunk-P2H3VCIB.js} +3 -3
  273. package/dist/{chunk-TF3RLGKA.js → chunk-P4DJ5F6Z.js} +4 -4
  274. package/dist/{chunk-YWLFDIBP.js → chunk-PAUEQXYG.js} +2 -2
  275. package/dist/{chunk-XOCVP6IW.js → chunk-Q2FDF2AB.js} +8 -8
  276. package/dist/{chunk-VFWRW7TA.js → chunk-QLNAAZJX.js} +2 -2
  277. package/dist/{chunk-C5CEDLV6.js → chunk-QLOYGKKM.js} +2 -2
  278. package/dist/chunk-QMAINJ4G.js +190 -0
  279. package/dist/chunk-QMAINJ4G.js.map +1 -0
  280. package/dist/{chunk-DDYPJWZV.js → chunk-RBU2TRYY.js} +10 -10
  281. package/dist/{chunk-FFGGO6E4.js → chunk-RRC4WFG3.js} +2 -2
  282. package/dist/{chunk-5SXTL6NO.js → chunk-RWJUXAFY.js} +2 -2
  283. package/dist/{chunk-BZVA4RGI.js → chunk-S4MEMFKG.js} +2 -2
  284. package/dist/{chunk-PTUL6MDB.js → chunk-SINRU2A6.js} +2 -2
  285. package/dist/{chunk-UA2HDDD4.js → chunk-SOKGYD5B.js} +6 -6
  286. package/dist/{chunk-BZCUF5K6.js → chunk-SQ3FYBJT.js} +5 -5
  287. package/dist/chunk-T7LKMJVA.js +142 -0
  288. package/dist/chunk-T7LKMJVA.js.map +1 -0
  289. package/dist/chunk-TFJJKM3W.js +261 -0
  290. package/dist/chunk-TFJJKM3W.js.map +1 -0
  291. package/dist/{chunk-5FXPD4NE.js → chunk-U2EAXN3Y.js} +7 -7
  292. package/dist/{chunk-B7SKF5RD.js → chunk-U7HF53KK.js} +4 -4
  293. package/dist/{chunk-YIVIBIK2.js → chunk-USGOLLYO.js} +24 -3
  294. package/dist/chunk-USGOLLYO.js.map +1 -0
  295. package/dist/{chunk-Z2U2YQOG.js → chunk-USL6PICI.js} +2 -2
  296. package/dist/chunk-UXAEOCOH.js +150 -0
  297. package/dist/chunk-UXAEOCOH.js.map +1 -0
  298. package/dist/{chunk-DHP7LYK7.js → chunk-UXH2XIB2.js} +2 -2
  299. package/dist/{chunk-U5LZO2EI.js → chunk-V7KAHLW2.js} +6 -6
  300. package/dist/{chunk-VYUQXEXS.js → chunk-VBXZIIUA.js} +5 -5
  301. package/dist/{chunk-IYAN33WP.js → chunk-VVWQZK5L.js} +3 -3
  302. package/dist/{chunk-DBXQFZBB.js → chunk-WLKK5L3P.js} +8 -8
  303. package/dist/chunk-WTS75RUC.js +1 -0
  304. package/dist/chunk-WTS75RUC.js.map +1 -0
  305. package/dist/{chunk-ANFQJ6YW.js → chunk-WYHDQK2S.js} +9 -9
  306. package/dist/{chunk-RVHE3UVN.js → chunk-X3TBEGPA.js} +6 -6
  307. package/dist/chunk-XM4GWPXC.js +236 -0
  308. package/dist/chunk-XM4GWPXC.js.map +1 -0
  309. package/dist/{chunk-AEDSRBBB.js → chunk-XWHBJY5V.js} +3 -3
  310. package/dist/{chunk-SHFN2BOB.js → chunk-ZGTGEBQX.js} +2 -2
  311. package/dist/context/dynamic-form-context.cjs +49 -4
  312. package/dist/context/dynamic-form-context.cjs.map +1 -1
  313. package/dist/context/dynamic-form-context.js +5 -4
  314. package/dist/context/index.cjs +49 -4
  315. package/dist/context/index.cjs.map +1 -1
  316. package/dist/context/index.js +5 -4
  317. package/dist/index.cjs +51 -4
  318. package/dist/index.cjs.map +1 -1
  319. package/dist/index.css +76 -0
  320. package/dist/index.d.cts +1 -0
  321. package/dist/index.d.ts +1 -0
  322. package/dist/index.js +161 -157
  323. package/dist/molecules/autocomplete-textfield.cjs +29 -2
  324. package/dist/molecules/autocomplete-textfield.cjs.map +1 -1
  325. package/dist/molecules/autocomplete-textfield.js +3 -2
  326. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs +49 -4
  327. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs.map +1 -1
  328. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +14 -13
  329. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs +29 -2
  330. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs.map +1 -1
  331. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +3 -2
  332. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs +29 -2
  333. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs.map +1 -1
  334. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +10 -9
  335. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs +49 -4
  336. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs.map +1 -1
  337. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.js +4 -3
  338. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs +29 -2
  339. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs.map +1 -1
  340. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +5 -4
  341. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs +29 -2
  342. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs.map +1 -1
  343. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +5 -4
  344. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs +29 -2
  345. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs.map +1 -1
  346. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +5 -4
  347. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs +29 -2
  348. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs.map +1 -1
  349. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +6 -5
  350. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs +49 -4
  351. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs.map +1 -1
  352. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +4 -3
  353. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs +49 -4
  354. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs.map +1 -1
  355. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +18 -17
  356. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs +49 -4
  357. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs.map +1 -1
  358. package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +5 -4
  359. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs +29 -2
  360. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs.map +1 -1
  361. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.js +3 -2
  362. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs +29 -2
  363. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs.map +1 -1
  364. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.js +3 -2
  365. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs +49 -4
  366. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
  367. package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +20 -19
  368. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs +49 -4
  369. package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
  370. package/dist/molecules/curriculumV2/CurriculumContents/index.js +23 -22
  371. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs +29 -2
  372. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs.map +1 -1
  373. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.js +3 -2
  374. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs +29 -2
  375. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs.map +1 -1
  376. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +4 -3
  377. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs +29 -2
  378. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs.map +1 -1
  379. package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.js +3 -2
  380. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs +29 -2
  381. package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
  382. package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +8 -7
  383. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs +29 -2
  384. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs.map +1 -1
  385. package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +6 -5
  386. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs +49 -4
  387. package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
  388. package/dist/molecules/curriculumV2/curriculum-sub-nav.js +4 -3
  389. package/dist/molecules/curriculumV2/index.cjs +49 -4
  390. package/dist/molecules/curriculumV2/index.cjs.map +1 -1
  391. package/dist/molecules/curriculumV2/index.js +33 -32
  392. package/dist/molecules/date-picker/date-picker-button.cjs +49 -4
  393. package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
  394. package/dist/molecules/date-picker/date-picker-button.js +5 -4
  395. package/dist/molecules/date-picker/index.cjs +49 -4
  396. package/dist/molecules/date-picker/index.cjs.map +1 -1
  397. package/dist/molecules/date-picker/index.js +4 -3
  398. package/dist/molecules/description-json-render.cjs +29 -2
  399. package/dist/molecules/description-json-render.cjs.map +1 -1
  400. package/dist/molecules/description-json-render.js +5 -4
  401. package/dist/molecules/download-card.cjs +29 -2
  402. package/dist/molecules/download-card.cjs.map +1 -1
  403. package/dist/molecules/download-card.js +3 -2
  404. package/dist/molecules/dynamic-field.cjs +49 -4
  405. package/dist/molecules/dynamic-field.cjs.map +1 -1
  406. package/dist/molecules/dynamic-field.js +7 -6
  407. package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs +29 -2
  408. package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs.map +1 -1
  409. package/dist/molecules/dynamic-form-editor-field-editor-panel.js +5 -4
  410. package/dist/molecules/dynamic-form-editor-field-list-panel.cjs +29 -2
  411. package/dist/molecules/dynamic-form-editor-field-list-panel.cjs.map +1 -1
  412. package/dist/molecules/dynamic-form-editor-field-list-panel.js +4 -3
  413. package/dist/molecules/dynamic-form-editor-issues-panel.cjs +29 -2
  414. package/dist/molecules/dynamic-form-editor-issues-panel.cjs.map +1 -1
  415. package/dist/molecules/dynamic-form-editor-issues-panel.js +4 -3
  416. package/dist/molecules/dynamic-form-editor-preview-panel.cjs +49 -4
  417. package/dist/molecules/dynamic-form-editor-preview-panel.cjs.map +1 -1
  418. package/dist/molecules/dynamic-form-editor-preview-panel.js +10 -9
  419. package/dist/molecules/dynamic-form-editor.cjs +49 -4
  420. package/dist/molecules/dynamic-form-editor.cjs.map +1 -1
  421. package/dist/molecules/dynamic-form-editor.js +16 -15
  422. package/dist/molecules/dynamic-form.cjs +49 -4
  423. package/dist/molecules/dynamic-form.cjs.map +1 -1
  424. package/dist/molecules/dynamic-form.js +8 -7
  425. package/dist/molecules/expand-table/index.cjs +29 -2
  426. package/dist/molecules/expand-table/index.cjs.map +1 -1
  427. package/dist/molecules/expand-table/index.js +5 -4
  428. package/dist/molecules/force-refresh.cjs +29 -2
  429. package/dist/molecules/force-refresh.cjs.map +1 -1
  430. package/dist/molecules/force-refresh.js +3 -2
  431. package/dist/molecules/form/form.cjs +49 -4
  432. package/dist/molecules/form/form.cjs.map +1 -1
  433. package/dist/molecules/form/form.js +4 -3
  434. package/dist/molecules/form/index.cjs +49 -4
  435. package/dist/molecules/form/index.cjs.map +1 -1
  436. package/dist/molecules/form/index.js +4 -3
  437. package/dist/molecules/ghost-post.cjs +29 -2
  438. package/dist/molecules/ghost-post.cjs.map +1 -1
  439. package/dist/molecules/ghost-post.js +3 -2
  440. package/dist/molecules/index.cjs +49 -4
  441. package/dist/molecules/index.cjs.map +1 -1
  442. package/dist/molecules/index.js +76 -75
  443. package/dist/molecules/learning-post.cjs +49 -4
  444. package/dist/molecules/learning-post.cjs.map +1 -1
  445. package/dist/molecules/learning-post.js +6 -5
  446. package/dist/molecules/navigation.cjs +29 -2
  447. package/dist/molecules/navigation.cjs.map +1 -1
  448. package/dist/molecules/navigation.js +3 -2
  449. package/dist/molecules/one-on-one-guide-list.cjs +49 -4
  450. package/dist/molecules/one-on-one-guide-list.cjs.map +1 -1
  451. package/dist/molecules/one-on-one-guide-list.js +5 -4
  452. package/dist/molecules/stepper.cjs +29 -2
  453. package/dist/molecules/stepper.cjs.map +1 -1
  454. package/dist/molecules/stepper.js +4 -3
  455. package/dist/molecules/tag-selector.cjs +29 -2
  456. package/dist/molecules/tag-selector.cjs.map +1 -1
  457. package/dist/molecules/tag-selector.js +5 -4
  458. package/dist/molecules/time-select.js +3 -2
  459. package/dist/molecules/training-info-guideline.cjs +49 -4
  460. package/dist/molecules/training-info-guideline.cjs.map +1 -1
  461. package/dist/molecules/training-info-guideline.js +6 -5
  462. package/dist/utils/clamp-style.cjs +37 -0
  463. package/dist/utils/clamp-style.cjs.map +1 -0
  464. package/dist/utils/clamp-style.d.cts +13 -0
  465. package/dist/utils/clamp-style.d.ts +13 -0
  466. package/dist/utils/clamp-style.js +8 -0
  467. package/dist/utils/clamp-style.js.map +1 -0
  468. package/dist/utils/index.cjs +11 -0
  469. package/dist/utils/index.cjs.map +1 -1
  470. package/dist/utils/index.d.cts +1 -0
  471. package/dist/utils/index.d.ts +1 -0
  472. package/dist/utils/index.js +10 -6
  473. package/package.json +28 -2
  474. package/src/app/roleplay/chart/session-chart.tsx +185 -0
  475. package/src/app/roleplay/index.ts +8 -0
  476. package/src/app/roleplay/parts/analysis-section.tsx +98 -0
  477. package/src/app/roleplay/parts/coaching-panel.tsx +101 -0
  478. package/src/app/roleplay/parts/content.tsx +146 -0
  479. package/src/app/roleplay/parts/header.tsx +168 -0
  480. package/src/app/roleplay/parts/score-summary.tsx +158 -0
  481. package/src/app/roleplay/parts/score-trend-section.tsx +255 -0
  482. package/src/app/roleplay/parts/script-transcript.tsx +190 -0
  483. package/src/app/roleplay/parts/section-nav.tsx +299 -0
  484. package/src/app/roleplay/parts/session-replay-dialog.tsx +168 -0
  485. package/src/app/roleplay/parts/step-detail.tsx +173 -0
  486. package/src/app/roleplay/parts/step-radar.tsx +80 -0
  487. package/src/app/roleplay/parts/step-summary.tsx +149 -0
  488. package/src/app/roleplay/rp-session-detail.tsx +176 -0
  489. package/src/app/roleplay/types.ts +61 -0
  490. package/src/app/roleplay/utils/report-parse.test.ts +268 -0
  491. package/src/app/roleplay/utils/report-parse.ts +443 -0
  492. package/src/app/roleplay/utils/session-utils.ts +215 -0
  493. package/src/atoms/heading.tsx +19 -3
  494. package/src/atoms/typo.tsx +19 -3
  495. package/src/constrant/trainingLog.dummy.json +1 -0
  496. package/src/utils/clamp-style.ts +17 -0
  497. package/src/utils/index.ts +2 -1
  498. package/dist/chunk-U7PMCTVQ.js +0 -1
  499. package/dist/chunk-YIVIBIK2.js.map +0 -1
  500. package/dist/chunk-YXFHD2PY.js.map +0 -1
  501. /package/dist/{chunk-U7PMCTVQ.js.map → app/roleplay/chart/session-chart.js.map} +0 -0
  502. /package/dist/{chunk-7XMPNH2X.js.map → chunk-3DZIX4CE.js.map} +0 -0
  503. /package/dist/{chunk-XFFVIWAD.js.map → chunk-47QYYEMG.js.map} +0 -0
  504. /package/dist/{chunk-VVJEXKCB.js.map → chunk-4GH4R4VJ.js.map} +0 -0
  505. /package/dist/{chunk-MTESLX7K.js.map → chunk-5IGBFB67.js.map} +0 -0
  506. /package/dist/{chunk-LXL7GJUM.js.map → chunk-5RIAIE2J.js.map} +0 -0
  507. /package/dist/{chunk-R43F6ZWT.js.map → chunk-64DSUMXA.js.map} +0 -0
  508. /package/dist/{chunk-C2FRAZT2.js.map → chunk-6OT5OYGM.js.map} +0 -0
  509. /package/dist/{chunk-6Q26H64H.js.map → chunk-74PR3ZWJ.js.map} +0 -0
  510. /package/dist/{chunk-IA4WXGVH.js.map → chunk-75EY7LBP.js.map} +0 -0
  511. /package/dist/{chunk-77YN5S26.js.map → chunk-AELKCD6B.js.map} +0 -0
  512. /package/dist/{chunk-L5WSNVSD.js.map → chunk-AHYOAFOU.js.map} +0 -0
  513. /package/dist/{chunk-6JPGF4MB.js.map → chunk-AT5PAJLW.js.map} +0 -0
  514. /package/dist/{chunk-P6YCD2AV.js.map → chunk-C4INJWFV.js.map} +0 -0
  515. /package/dist/{chunk-SGJBQKUD.js.map → chunk-C6HO3IGE.js.map} +0 -0
  516. /package/dist/{chunk-7NBGSPZU.js.map → chunk-CBYIPRND.js.map} +0 -0
  517. /package/dist/{chunk-UIMDXYPP.js.map → chunk-CGLDFUOY.js.map} +0 -0
  518. /package/dist/{chunk-DUXYDGHX.js.map → chunk-CUS3ORMD.js.map} +0 -0
  519. /package/dist/{chunk-UILGIMXL.js.map → chunk-D4U2ZV2A.js.map} +0 -0
  520. /package/dist/{chunk-PRLNOTMV.js.map → chunk-DPMDQA3O.js.map} +0 -0
  521. /package/dist/{chunk-6XASFDTI.js.map → chunk-EJXZXUD2.js.map} +0 -0
  522. /package/dist/{chunk-QFSMOKC6.js.map → chunk-FAL6S2XK.js.map} +0 -0
  523. /package/dist/{chunk-GMEGTXIV.js.map → chunk-FJEDSUGU.js.map} +0 -0
  524. /package/dist/{chunk-WLG6GG26.js.map → chunk-G3KQN32M.js.map} +0 -0
  525. /package/dist/{chunk-72ZC7DBY.js.map → chunk-GNB4A34H.js.map} +0 -0
  526. /package/dist/{chunk-KEFAYPBO.js.map → chunk-IRFNKOKQ.js.map} +0 -0
  527. /package/dist/{chunk-5BIICWFT.js.map → chunk-ISSUGCCY.js.map} +0 -0
  528. /package/dist/{chunk-PZDN6K6R.js.map → chunk-JCZXPONS.js.map} +0 -0
  529. /package/dist/{chunk-7TRT4QTP.js.map → chunk-K4RZTENM.js.map} +0 -0
  530. /package/dist/{chunk-Z54XTEAF.js.map → chunk-KDS7OQOY.js.map} +0 -0
  531. /package/dist/{chunk-YCV3HR4J.js.map → chunk-LAGJDIVU.js.map} +0 -0
  532. /package/dist/{chunk-3UJEOHQT.js.map → chunk-LK2H4QTJ.js.map} +0 -0
  533. /package/dist/{chunk-UHAMISMF.js.map → chunk-LRNO4W2P.js.map} +0 -0
  534. /package/dist/{chunk-5FLPPHUZ.js.map → chunk-MQKIIIBW.js.map} +0 -0
  535. /package/dist/{chunk-6YPAN4D3.js.map → chunk-N242VJOP.js.map} +0 -0
  536. /package/dist/{chunk-PWUCBBQP.js.map → chunk-N3FMP27I.js.map} +0 -0
  537. /package/dist/{chunk-NIMF5FJI.js.map → chunk-NK6S7ZMB.js.map} +0 -0
  538. /package/dist/{chunk-IIA2BVJI.js.map → chunk-NVRVOTWZ.js.map} +0 -0
  539. /package/dist/{chunk-GTTZJ2Y7.js.map → chunk-O332K3SW.js.map} +0 -0
  540. /package/dist/{chunk-LCR5R743.js.map → chunk-OOM522XP.js.map} +0 -0
  541. /package/dist/{chunk-FIQJUO66.js.map → chunk-OPIVSYLN.js.map} +0 -0
  542. /package/dist/{chunk-SQZVLRUH.js.map → chunk-OUDDTPEN.js.map} +0 -0
  543. /package/dist/{chunk-URSBI6BQ.js.map → chunk-OW2QNTK3.js.map} +0 -0
  544. /package/dist/{chunk-GBT2BBZS.js.map → chunk-P2H3VCIB.js.map} +0 -0
  545. /package/dist/{chunk-TF3RLGKA.js.map → chunk-P4DJ5F6Z.js.map} +0 -0
  546. /package/dist/{chunk-YWLFDIBP.js.map → chunk-PAUEQXYG.js.map} +0 -0
  547. /package/dist/{chunk-XOCVP6IW.js.map → chunk-Q2FDF2AB.js.map} +0 -0
  548. /package/dist/{chunk-VFWRW7TA.js.map → chunk-QLNAAZJX.js.map} +0 -0
  549. /package/dist/{chunk-C5CEDLV6.js.map → chunk-QLOYGKKM.js.map} +0 -0
  550. /package/dist/{chunk-DDYPJWZV.js.map → chunk-RBU2TRYY.js.map} +0 -0
  551. /package/dist/{chunk-FFGGO6E4.js.map → chunk-RRC4WFG3.js.map} +0 -0
  552. /package/dist/{chunk-5SXTL6NO.js.map → chunk-RWJUXAFY.js.map} +0 -0
  553. /package/dist/{chunk-BZVA4RGI.js.map → chunk-S4MEMFKG.js.map} +0 -0
  554. /package/dist/{chunk-PTUL6MDB.js.map → chunk-SINRU2A6.js.map} +0 -0
  555. /package/dist/{chunk-UA2HDDD4.js.map → chunk-SOKGYD5B.js.map} +0 -0
  556. /package/dist/{chunk-BZCUF5K6.js.map → chunk-SQ3FYBJT.js.map} +0 -0
  557. /package/dist/{chunk-5FXPD4NE.js.map → chunk-U2EAXN3Y.js.map} +0 -0
  558. /package/dist/{chunk-B7SKF5RD.js.map → chunk-U7HF53KK.js.map} +0 -0
  559. /package/dist/{chunk-Z2U2YQOG.js.map → chunk-USL6PICI.js.map} +0 -0
  560. /package/dist/{chunk-DHP7LYK7.js.map → chunk-UXH2XIB2.js.map} +0 -0
  561. /package/dist/{chunk-U5LZO2EI.js.map → chunk-V7KAHLW2.js.map} +0 -0
  562. /package/dist/{chunk-VYUQXEXS.js.map → chunk-VBXZIIUA.js.map} +0 -0
  563. /package/dist/{chunk-IYAN33WP.js.map → chunk-VVWQZK5L.js.map} +0 -0
  564. /package/dist/{chunk-DBXQFZBB.js.map → chunk-WLKK5L3P.js.map} +0 -0
  565. /package/dist/{chunk-ANFQJ6YW.js.map → chunk-WYHDQK2S.js.map} +0 -0
  566. /package/dist/{chunk-RVHE3UVN.js.map → chunk-X3TBEGPA.js.map} +0 -0
  567. /package/dist/{chunk-AEDSRBBB.js.map → chunk-XWHBJY5V.js.map} +0 -0
  568. /package/dist/{chunk-SHFN2BOB.js.map → chunk-ZGTGEBQX.js.map} +0 -0
@@ -0,0 +1,13 @@
1
+ // src/utils/clamp-style.ts
2
+ var clampStyle = (lines) => ({
3
+ display: "-webkit-box",
4
+ WebkitBoxOrient: "vertical",
5
+ WebkitLineClamp: lines,
6
+ lineClamp: lines,
7
+ overflow: "hidden"
8
+ });
9
+
10
+ export {
11
+ clampStyle
12
+ };
13
+ //# sourceMappingURL=chunk-36W7VD2Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/clamp-style.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\n\n/**\n * 여러 줄 말줄임(line-clamp) 스타일. 지정한 줄 수까지만 표시하고 넘치면 `…`로 자른다.\n *\n * Radix의 `truncate`(white-space:nowrap 강제 1줄)와 달리, 줄바꿈을 허용한 뒤\n * `lines` 줄에서 자른다. `Typo`/`Heading`의 `clamp` prop 구현에 사용된다.\n *\n * @param lines - 표시할 최대 줄 수 (1, 2, 3 …)\n */\nexport const clampStyle = (lines: number): CSSProperties => ({\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: lines,\n lineClamp: lines,\n overflow: 'hidden',\n});\n"],"mappings":";AAUO,IAAM,aAAa,CAAC,WAAkC;AAAA,EAC3D,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AACZ;","names":[]}
@@ -18,24 +18,24 @@ import {
18
18
  import {
19
19
  Select
20
20
  } from "./chunk-YXMB4MCM.js";
21
- import {
22
- IconButton
23
- } from "./chunk-7RJYF5L3.js";
24
- import {
25
- Card
26
- } from "./chunk-RP2RGCAW.js";
27
21
  import {
28
22
  Checkbox
29
23
  } from "./chunk-ZCGH6TJ3.js";
24
+ import {
25
+ IconButton
26
+ } from "./chunk-7RJYF5L3.js";
30
27
  import {
31
28
  Typo
32
- } from "./chunk-YXFHD2PY.js";
29
+ } from "./chunk-L4QQGIYQ.js";
33
30
  import {
34
31
  Flex
35
32
  } from "./chunk-25HMMI7R.js";
36
33
  import {
37
34
  Button
38
35
  } from "./chunk-2LCH3PDF.js";
36
+ import {
37
+ Card
38
+ } from "./chunk-RP2RGCAW.js";
39
39
  import {
40
40
  ChevronDownIcon,
41
41
  ChevronUpIcon,
@@ -686,4 +686,4 @@ function DynamicFormEditorFieldEditorPanel(props) {
686
686
  export {
687
687
  DynamicFormEditorFieldEditorPanel
688
688
  };
689
- //# sourceMappingURL=chunk-7XMPNH2X.js.map
689
+ //# sourceMappingURL=chunk-3DZIX4CE.js.map
@@ -0,0 +1,166 @@
1
+ import {
2
+ ScriptTranscript
3
+ } from "./chunk-EHDUKUML.js";
4
+ import {
5
+ computeSpeechShare,
6
+ isLengthClose
7
+ } from "./chunk-4YAA25AV.js";
8
+ import {
9
+ Tabs
10
+ } from "./chunk-CGDBUDY3.js";
11
+ import {
12
+ Grid
13
+ } from "./chunk-EGEQY3KT.js";
14
+ import {
15
+ Dialog
16
+ } from "./chunk-KDS7OQOY.js";
17
+ import {
18
+ Box
19
+ } from "./chunk-4Y5BEXVN.js";
20
+ import {
21
+ __async
22
+ } from "./chunk-CRTRMMJ7.js";
23
+
24
+ // src/app/roleplay/parts/session-replay-dialog.tsx
25
+ import { useEffect, useMemo, useRef, useState } from "react";
26
+ import { jsx, jsxs } from "react/jsx-runtime";
27
+ function resolveUrl(raw, disp, resolver) {
28
+ return __async(this, null, function* () {
29
+ if (!raw) return void 0;
30
+ if (!resolver) return raw;
31
+ try {
32
+ return yield resolver(raw, { disposition: disp });
33
+ } catch (e) {
34
+ return raw;
35
+ }
36
+ });
37
+ }
38
+ function SessionReplayDialog({
39
+ open,
40
+ onOpenChange,
41
+ detail,
42
+ script,
43
+ onResolveMediaUrl
44
+ }) {
45
+ var _a, _b, _c;
46
+ const videoRef = useRef(null);
47
+ const audioRef = useRef(null);
48
+ const hasVideo = Boolean(detail.trainingVideoURL);
49
+ const hasAudio = Boolean(detail.trainingAudioURL);
50
+ const [tab, setTab] = useState(hasVideo ? "video" : "audio");
51
+ const [currentMs, setCurrentMs] = useState(0);
52
+ const [videoSec, setVideoSec] = useState((_a = detail.videoDurationSec) != null ? _a : null);
53
+ const [audioSec, setAudioSec] = useState((_b = detail.audioDurationSec) != null ? _b : null);
54
+ const [resolvedVideoUrl, setResolvedVideoUrl] = useState(void 0);
55
+ const [resolvedAudioUrl, setResolvedAudioUrl] = useState(void 0);
56
+ useEffect(() => {
57
+ if (!open) return;
58
+ void resolveUrl(detail.trainingVideoURL, "inline", onResolveMediaUrl).then(
59
+ setResolvedVideoUrl
60
+ );
61
+ void resolveUrl(detail.trainingAudioURL, "inline", onResolveMediaUrl).then(
62
+ setResolvedAudioUrl
63
+ );
64
+ }, [open, detail.trainingVideoURL, detail.trainingAudioURL, onResolveMediaUrl]);
65
+ const lines = useMemo(() => {
66
+ var _a2;
67
+ return (_a2 = script == null ? void 0 : script.items) != null ? _a2 : [];
68
+ }, [script == null ? void 0 : script.items]);
69
+ const speechShare = useMemo(() => computeSpeechShare(lines), [lines]);
70
+ const sttSec = ((_c = script == null ? void 0 : script.durationMs) != null ? _c : 0) / 1e3;
71
+ const canSync = tab === "video" ? hasVideo && isLengthClose(videoSec, sttSec) : hasAudio && isLengthClose(audioSec, sttSec);
72
+ const activeMediaRef = tab === "video" ? videoRef : audioRef;
73
+ const handleSeek = (startMs) => {
74
+ if (!canSync) return;
75
+ const el = activeMediaRef.current;
76
+ if (!el) return;
77
+ el.currentTime = startMs / 1e3;
78
+ void el.play();
79
+ };
80
+ const handleTimeUpdate = () => {
81
+ const el = activeMediaRef.current;
82
+ if (el) {
83
+ setCurrentMs(el.currentTime * 1e3);
84
+ }
85
+ };
86
+ return /* @__PURE__ */ jsx(Dialog.Root, { onOpenChange, open, children: /* @__PURE__ */ jsx(Dialog.Content, { maxWidth: "1040px", title: "\uC138\uC158 \uB2E4\uC2DC\uBCF4\uAE30", width: "100%", children: /* @__PURE__ */ jsxs(
87
+ Grid,
88
+ {
89
+ columns: { initial: "1", md: "minmax(0, 1fr) minmax(0, 1.05fr)" },
90
+ gap: "5",
91
+ mt: "2",
92
+ children: [
93
+ /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(
94
+ Tabs.Root,
95
+ {
96
+ onValueChange: (v) => {
97
+ setTab(v);
98
+ },
99
+ value: tab,
100
+ children: [
101
+ /* @__PURE__ */ jsxs(Tabs.List, { children: [
102
+ hasVideo ? /* @__PURE__ */ jsx(Tabs.Trigger, { value: "video", children: "\uC601\uC0C1" }) : null,
103
+ hasAudio ? /* @__PURE__ */ jsx(Tabs.Trigger, { value: "audio", children: "\uC624\uB514\uC624" }) : null
104
+ ] }),
105
+ hasVideo ? /* @__PURE__ */ jsx(Tabs.Content, { value: "video", children: /* @__PURE__ */ jsx(
106
+ Box,
107
+ {
108
+ mt: "3",
109
+ style: {
110
+ borderRadius: "var(--radius-3)",
111
+ overflow: "hidden",
112
+ background: "var(--gray-3)"
113
+ },
114
+ children: /* @__PURE__ */ jsx(
115
+ "video",
116
+ {
117
+ controls: true,
118
+ onLoadedMetadata: () => {
119
+ var _a2, _b2;
120
+ setVideoSec((_b2 = (_a2 = videoRef.current) == null ? void 0 : _a2.duration) != null ? _b2 : null);
121
+ },
122
+ onTimeUpdate: handleTimeUpdate,
123
+ ref: videoRef,
124
+ src: resolvedVideoUrl,
125
+ style: { width: "100%", display: "block", maxHeight: 440 }
126
+ }
127
+ )
128
+ }
129
+ ) }) : null,
130
+ hasAudio ? /* @__PURE__ */ jsx(Tabs.Content, { value: "audio", children: /* @__PURE__ */ jsx(Box, { mt: "3", children: /* @__PURE__ */ jsx(
131
+ "audio",
132
+ {
133
+ controls: true,
134
+ onLoadedMetadata: () => {
135
+ var _a2, _b2;
136
+ setAudioSec((_b2 = (_a2 = audioRef.current) == null ? void 0 : _a2.duration) != null ? _b2 : null);
137
+ },
138
+ onTimeUpdate: handleTimeUpdate,
139
+ ref: audioRef,
140
+ src: resolvedAudioUrl,
141
+ style: { width: "100%" }
142
+ }
143
+ ) }) }) : null
144
+ ]
145
+ }
146
+ ) }),
147
+ /* @__PURE__ */ jsx(
148
+ ScriptTranscript,
149
+ {
150
+ canSync,
151
+ currentMs,
152
+ lines,
153
+ onSeek: handleSeek,
154
+ partnerName: detail.characterTitle,
155
+ speechShare
156
+ }
157
+ )
158
+ ]
159
+ }
160
+ ) }) });
161
+ }
162
+
163
+ export {
164
+ SessionReplayDialog
165
+ };
166
+ //# sourceMappingURL=chunk-3UGBMKSQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/roleplay/parts/session-replay-dialog.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { Box, Dialog, Grid, Tabs } from '../../../atoms';\nimport { computeSpeechShare, isLengthClose } from '../utils/session-utils';\nimport type { RpSessionDetailData, RpSessionScript } from '../types';\nimport { ScriptTranscript } from './script-transcript';\n\nexport interface SessionReplayDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n detail: RpSessionDetailData;\n script?: RpSessionScript | null;\n onResolveMediaUrl?: (\n rawUrl: string,\n options: { disposition: 'inline' | 'attachment' }\n ) => string | Promise<string>;\n}\n\ntype ReplayTab = 'video' | 'audio';\n\nasync function resolveUrl(\n raw: string | null | undefined,\n disp: 'inline' | 'attachment',\n resolver?: (rawUrl: string, options: { disposition: 'inline' | 'attachment' }) => string | Promise<string>\n): Promise<string | undefined> {\n if (!raw) return undefined;\n if (!resolver) return raw;\n try {\n return await resolver(raw, { disposition: disp });\n } catch {\n return raw;\n }\n}\n\nexport function SessionReplayDialog({\n open,\n onOpenChange,\n detail,\n script,\n onResolveMediaUrl,\n}: SessionReplayDialogProps): React.ReactElement {\n const videoRef = useRef<HTMLVideoElement>(null);\n const audioRef = useRef<HTMLAudioElement>(null);\n\n const hasVideo = Boolean(detail.trainingVideoURL);\n const hasAudio = Boolean(detail.trainingAudioURL);\n\n const [tab, setTab] = useState<ReplayTab>(hasVideo ? 'video' : 'audio');\n const [currentMs, setCurrentMs] = useState(0);\n const [videoSec, setVideoSec] = useState<number | null>(detail.videoDurationSec ?? null);\n const [audioSec, setAudioSec] = useState<number | null>(detail.audioDurationSec ?? null);\n\n const [resolvedVideoUrl, setResolvedVideoUrl] = useState<string | undefined>(undefined);\n const [resolvedAudioUrl, setResolvedAudioUrl] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!open) return;\n void resolveUrl(detail.trainingVideoURL, 'inline', onResolveMediaUrl).then(\n setResolvedVideoUrl\n );\n void resolveUrl(detail.trainingAudioURL, 'inline', onResolveMediaUrl).then(\n setResolvedAudioUrl\n );\n }, [open, detail.trainingVideoURL, detail.trainingAudioURL, onResolveMediaUrl]);\n\n const lines = useMemo(() => script?.items ?? [], [script?.items]);\n const speechShare = useMemo(() => computeSpeechShare(lines), [lines]);\n const sttSec = (script?.durationMs ?? 0) / 1000;\n\n const canSync =\n tab === 'video'\n ? hasVideo && isLengthClose(videoSec, sttSec)\n : hasAudio && isLengthClose(audioSec, sttSec);\n\n const activeMediaRef = tab === 'video' ? videoRef : audioRef;\n\n const handleSeek = (startMs: number): void => {\n if (!canSync) return;\n const el = activeMediaRef.current;\n if (!el) return;\n el.currentTime = startMs / 1000;\n void el.play();\n };\n\n const handleTimeUpdate = (): void => {\n const el = activeMediaRef.current;\n if (el) {\n setCurrentMs(el.currentTime * 1000);\n }\n };\n\n return (\n <Dialog.Root onOpenChange={onOpenChange} open={open}>\n <Dialog.Content maxWidth=\"1040px\" title=\"세션 다시보기\" width=\"100%\">\n <Grid\n columns={{ initial: '1', md: 'minmax(0, 1fr) minmax(0, 1.05fr)' }}\n gap=\"5\"\n mt=\"2\"\n >\n <Box>\n <Tabs.Root\n onValueChange={(v) => {\n setTab(v as ReplayTab);\n }}\n value={tab}\n >\n <Tabs.List>\n {hasVideo ? <Tabs.Trigger value=\"video\">영상</Tabs.Trigger> : null}\n {hasAudio ? <Tabs.Trigger value=\"audio\">오디오</Tabs.Trigger> : null}\n </Tabs.List>\n {hasVideo ? (\n <Tabs.Content value=\"video\">\n <Box\n mt=\"3\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n background: 'var(--gray-3)',\n }}\n >\n {/* eslint-disable-next-line jsx-a11y/media-has-caption -- 학습 다시보기 영상은 자막 트랙이 없는 사용자 녹화본 */}\n <video\n controls\n onLoadedMetadata={() => {\n setVideoSec(videoRef.current?.duration ?? null);\n }}\n onTimeUpdate={handleTimeUpdate}\n ref={videoRef}\n src={resolvedVideoUrl}\n style={{ width: '100%', display: 'block', maxHeight: 440 }}\n />\n </Box>\n </Tabs.Content>\n ) : null}\n {hasAudio ? (\n <Tabs.Content value=\"audio\">\n <Box mt=\"3\">\n {/* eslint-disable-next-line jsx-a11y/media-has-caption -- 학습 다시보기 오디오는 자막 트랙이 없는 사용자 녹음본 */}\n <audio\n controls\n onLoadedMetadata={() => {\n setAudioSec(audioRef.current?.duration ?? null);\n }}\n onTimeUpdate={handleTimeUpdate}\n ref={audioRef}\n src={resolvedAudioUrl}\n style={{ width: '100%' }}\n />\n </Box>\n </Tabs.Content>\n ) : null}\n </Tabs.Root>\n </Box>\n\n <ScriptTranscript\n canSync={canSync}\n currentMs={currentMs}\n lines={lines}\n onSeek={handleSeek}\n partnerName={detail.characterTitle}\n speechShare={speechShare}\n />\n </Grid>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n"],"mappings":"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","names":["_a","_b"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  curriculum_item_title_default
3
- } from "./chunk-C5CEDLV6.js";
3
+ } from "./chunk-QLOYGKKM.js";
4
4
  import {
5
5
  getCurriculumContentSubTypeText,
6
6
  getCurriculumIcon
@@ -26,4 +26,4 @@ var section_item_default = SectionCommonItem;
26
26
  export {
27
27
  section_item_default
28
28
  };
29
- //# sourceMappingURL=chunk-XFFVIWAD.js.map
29
+ //# sourceMappingURL=chunk-47QYYEMG.js.map
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  DatePickerButton
3
- } from "./chunk-6JPGF4MB.js";
3
+ } from "./chunk-AT5PAJLW.js";
4
4
  import {
5
5
  Form
6
- } from "./chunk-77YN5S26.js";
6
+ } from "./chunk-AELKCD6B.js";
7
7
  import {
8
8
  TextArea
9
9
  } from "./chunk-5XYPLDI5.js";
10
10
  import {
11
11
  TextField
12
12
  } from "./chunk-6NPTJBFE.js";
13
- import {
14
- Card
15
- } from "./chunk-RP2RGCAW.js";
16
13
  import {
17
14
  Flex
18
15
  } from "./chunk-25HMMI7R.js";
19
16
  import {
20
17
  Button
21
18
  } from "./chunk-2LCH3PDF.js";
19
+ import {
20
+ Card
21
+ } from "./chunk-RP2RGCAW.js";
22
22
  import {
23
23
  __spreadValues
24
24
  } from "./chunk-CRTRMMJ7.js";
@@ -142,4 +142,4 @@ function GoalManageCardEdit(props) {
142
142
  export {
143
143
  GoalManageCardEdit
144
144
  };
145
- //# sourceMappingURL=chunk-VVJEXKCB.js.map
145
+ //# sourceMappingURL=chunk-4GH4R4VJ.js.map
@@ -0,0 +1,161 @@
1
+ // src/app/roleplay/utils/session-utils.ts
2
+ import { format } from "date-fns";
3
+ var COLOR_VARS = {
4
+ green: {
5
+ fg: "var(--green-11)",
6
+ bg: "var(--green-a3)",
7
+ border: "var(--green-a6)"
8
+ },
9
+ amber: {
10
+ fg: "var(--amber-11)",
11
+ bg: "var(--amber-a3)",
12
+ border: "var(--amber-a6)"
13
+ },
14
+ red: { fg: "var(--red-11)", bg: "var(--red-a3)", border: "var(--red-a6)" },
15
+ gray: { fg: "var(--gray-9)", bg: "var(--gray-a3)", border: "var(--gray-5)" }
16
+ };
17
+ function qualityColor(quality) {
18
+ switch (quality) {
19
+ case "\uCDA9\uC871":
20
+ return "green";
21
+ case "\uBD80\uBD84\uCDA9\uC871":
22
+ return "amber";
23
+ case "\uBBF8\uD761":
24
+ return "red";
25
+ default:
26
+ return "gray";
27
+ }
28
+ }
29
+ var QUALITY_RATIO = {
30
+ \uCDA9\uC871: 1,
31
+ \uBD80\uBD84\uCDA9\uC871: 0.6,
32
+ \uBBF8\uD761: 0.3
33
+ };
34
+ function qualityRatio(quality) {
35
+ return quality === null ? null : QUALITY_RATIO[quality];
36
+ }
37
+ function gradeColorFromLabel(label) {
38
+ if (!label) return "gray";
39
+ if (label.includes("\uBBF8\uD761") || label.includes("\uBD80\uC871") || label.includes("\uBBF8\uB2EC"))
40
+ return "red";
41
+ if (label.includes("\uBD80\uBD84") || label.includes("\uBCF4\uD1B5")) return "amber";
42
+ if (label.includes("\uCDA9\uC871") || label.includes("\uC6B0\uC218") || label.includes("\uCDA9\uBD84"))
43
+ return "green";
44
+ return "gray";
45
+ }
46
+ function stepColor(step) {
47
+ return step.quality !== null ? qualityColor(step.quality) : gradeColorFromLabel(step.qualityLabel);
48
+ }
49
+ function stepVars(step) {
50
+ return COLOR_VARS[stepColor(step)];
51
+ }
52
+ function stepRatio(step) {
53
+ if (step.maxScore !== null && step.maxScore > 0 && step.score !== null) {
54
+ return Math.max(0, Math.min(1, step.score / step.maxScore));
55
+ }
56
+ return qualityRatio(step.quality);
57
+ }
58
+ function stepScoreText(step) {
59
+ if (step.score === null) return null;
60
+ return step.maxScore !== null ? `${step.score}/${step.maxScore}` : `${step.score}`;
61
+ }
62
+ function stepGradeLabel(step) {
63
+ return step.qualityLabel;
64
+ }
65
+ function hasStepSignal(step) {
66
+ return step.score !== null || step.qualityLabel !== null;
67
+ }
68
+ var LETTER_RE = /[A-Za-z]/;
69
+ function stepCode(step) {
70
+ if (step.initial !== null && step.initial.trim().length > 0) {
71
+ return step.initial.trim();
72
+ }
73
+ const label = step.label.trim();
74
+ const first = label.charAt(0);
75
+ const second = label.charAt(1);
76
+ if (LETTER_RE.test(first) && (second === " " || second === "\u2014" || second === "-")) {
77
+ return first.toUpperCase();
78
+ }
79
+ if (first === "[" && LETTER_RE.test(second) && label.charAt(2) === "]") {
80
+ return second.toUpperCase();
81
+ }
82
+ return step.key.split("_")[0].slice(0, 4).toUpperCase();
83
+ }
84
+ function formatDuration(seconds) {
85
+ if (seconds === null) return "\u2014";
86
+ const m = Math.floor(seconds / 60);
87
+ const s = seconds % 60;
88
+ return `${m}\uBD84 ${String(s).padStart(2, "0")}\uCD08`;
89
+ }
90
+ function formatDate(iso) {
91
+ const d = new Date(iso);
92
+ if (Number.isNaN(d.getTime())) return iso;
93
+ return format(d, "M/d HH:mm");
94
+ }
95
+ function formatTimestamp(ms) {
96
+ const total = Math.floor(ms / 1e3);
97
+ const m = Math.floor(total / 60);
98
+ const s = total % 60;
99
+ return `${m}:${String(s).padStart(2, "0")}`;
100
+ }
101
+ var SYNC_TOLERANCE = 0.05;
102
+ function isLengthClose(mediaSec, sttSec) {
103
+ if (!mediaSec || mediaSec <= 0 || sttSec <= 0) {
104
+ return false;
105
+ }
106
+ return Math.abs(mediaSec - sttSec) / Math.max(mediaSec, sttSec) <= SYNC_TOLERANCE;
107
+ }
108
+ var SPEECH_OVERTALK_THRESHOLD = 40;
109
+ function computeSpeechShare(lines) {
110
+ let userChars = 0;
111
+ let partnerChars = 0;
112
+ for (const line of lines) {
113
+ const count = line.text.replace(/\s/g, "").length;
114
+ if (line.speaker === "user") {
115
+ userChars += count;
116
+ } else {
117
+ partnerChars += count;
118
+ }
119
+ }
120
+ const total = userChars + partnerChars;
121
+ if (total === 0) {
122
+ return null;
123
+ }
124
+ const userPct = Math.round(userChars / total * 100);
125
+ return { userPct, partnerPct: 100 - userPct };
126
+ }
127
+ var STATUS_LABEL = {
128
+ complete: "\uBD84\uC11D \uC644\uB8CC",
129
+ completed: "\uBD84\uC11D \uC644\uB8CC",
130
+ analyzing: "AI \uBD84\uC11D \uC911",
131
+ partial: "\uC77C\uBD80 \uC0B0\uCD9C\uBB3C \uC5C6\uC74C"
132
+ };
133
+ function statusLabelOf(status) {
134
+ var _a;
135
+ if (!status) return "\uC138\uC158";
136
+ return (_a = STATUS_LABEL[status]) != null ? _a : status;
137
+ }
138
+
139
+ export {
140
+ COLOR_VARS,
141
+ qualityColor,
142
+ QUALITY_RATIO,
143
+ qualityRatio,
144
+ gradeColorFromLabel,
145
+ stepColor,
146
+ stepVars,
147
+ stepRatio,
148
+ stepScoreText,
149
+ stepGradeLabel,
150
+ hasStepSignal,
151
+ stepCode,
152
+ formatDuration,
153
+ formatDate,
154
+ formatTimestamp,
155
+ SYNC_TOLERANCE,
156
+ isLengthClose,
157
+ SPEECH_OVERTALK_THRESHOLD,
158
+ computeSpeechShare,
159
+ statusLabelOf
160
+ };
161
+ //# sourceMappingURL=chunk-4YAA25AV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/roleplay/utils/session-utils.ts"],"sourcesContent":["// 롤플레잉 세션 상세 순수 유틸 함수 모음.\n// 원본: website/src/modules/customer/roleplay/pages/RpSessionDetail/RpSessionDetail.tsx\n// 'use client' 없음 — 순수 함수, 클라이언트 전용 아님.\n\nimport { format } from 'date-fns';\nimport type { RpSessionScriptLine } from '../types';\nimport type { RpQuality, RpReportStep } from './report-parse';\n\n/* ───────────────────────── 타입 ───────────────────────── */\n\nexport interface SpeechShare { userPct: number; partnerPct: number }\n\nexport type QColor = 'green' | 'amber' | 'red' | 'gray';\n\n/* ───────────────────────── 색 변수 ───────────────────────── */\n\nexport const COLOR_VARS: Record<QColor, { fg: string; bg: string; border: string }> = {\n green: {\n fg: 'var(--green-11)',\n bg: 'var(--green-a3)',\n border: 'var(--green-a6)',\n },\n amber: {\n fg: 'var(--amber-11)',\n bg: 'var(--amber-a3)',\n border: 'var(--amber-a6)',\n },\n red: { fg: 'var(--red-11)', bg: 'var(--red-a3)', border: 'var(--red-a6)' },\n gray: { fg: 'var(--gray-9)', bg: 'var(--gray-a3)', border: 'var(--gray-5)' },\n};\n\n/* ───────────────────────── 등급 색 ───────────────────────── */\n\nexport function qualityColor(quality: RpQuality | null): QColor {\n switch (quality) {\n case '충족':\n return 'green';\n case '부분충족':\n return 'amber';\n case '미흡':\n return 'red';\n default:\n return 'gray';\n }\n}\n\nexport const QUALITY_RATIO: Record<RpQuality, number> = {\n 충족: 1,\n 부분충족: 0.6,\n 미흡: 0.3,\n} as const;\n\nexport function qualityRatio(quality: RpQuality | null): number | null {\n return quality === null ? null : QUALITY_RATIO[quality];\n}\n\n// 표준 등급이 아닌 자유 등급 문자열에서 색만 키워드로 추정(비율은 산출하지 않음).\nexport function gradeColorFromLabel(label: string | null): QColor {\n if (!label) return 'gray';\n if (\n label.includes('미흡') ||\n label.includes('부족') ||\n label.includes('미달')\n )\n return 'red';\n if (label.includes('부분') || label.includes('보통')) return 'amber';\n if (\n label.includes('충족') ||\n label.includes('우수') ||\n label.includes('충분')\n )\n return 'green';\n return 'gray';\n}\n\n/* ───────────────────────── 단계(Step) 헬퍼 ───────────────────────── */\n\n// 단계 색: 표준 등급 우선, 없으면 라벨 키워드 추정.\nexport function stepColor(step: RpReportStep): QColor {\n return step.quality !== null\n ? qualityColor(step.quality)\n : gradeColorFromLabel(step.qualityLabel);\n}\n\nexport function stepVars(step: RpReportStep): { fg: string; bg: string; border: string } {\n return COLOR_VARS[stepColor(step)];\n}\n\n// progress/radar 정규화 비율(0~1). score/maxScore 우선, 없으면 표준 등급 비율, 둘 다 없으면 null.\nexport function stepRatio(step: RpReportStep): number | null {\n if (step.maxScore !== null && step.maxScore > 0 && step.score !== null) {\n return Math.max(0, Math.min(1, step.score / step.maxScore));\n }\n return qualityRatio(step.quality);\n}\n\n// 점수 텍스트: max 있으면 'score/max', 없으면 'score', score 없으면 null.\nexport function stepScoreText(step: RpReportStep): string | null {\n if (step.score === null) return null;\n return step.maxScore !== null\n ? `${step.score}/${step.maxScore}`\n : `${step.score}`;\n}\n\n// 표시할 등급 라벨(자유 문자열 포함). 없으면 null.\nexport function stepGradeLabel(step: RpReportStep): string | null {\n return step.qualityLabel;\n}\n\n// 단계에 표시할 평가 정보가 하나라도 있는지(점수 또는 등급).\nexport function hasStepSignal(step: RpReportStep): boolean {\n return step.score !== null || step.qualityLabel !== null;\n}\n\n// radar 축/요약 라벨용 짧은 코드.\n// displayMeta.steps.initial 이 지정돼 있으면 최우선(이니셜 충돌 해소).\n// 없으면 기존 휴리스틱: acronym 프레임워크는 선두 글자, 아니면 키 약식.\nconst LETTER_RE = /[A-Za-z]/;\n\nexport function stepCode(step: RpReportStep): string {\n if (step.initial !== null && step.initial.trim().length > 0) {\n return step.initial.trim();\n }\n const label = step.label.trim();\n const first = label.charAt(0);\n const second = label.charAt(1);\n // \"O — Opening\" / \"O - Opening\" / \"O Opening\" 형태\n if (\n LETTER_RE.test(first) &&\n (second === ' ' || second === '—' || second === '-')\n ) {\n return first.toUpperCase();\n }\n // \"[I] Introduction\" 형태\n if (first === '[' && LETTER_RE.test(second) && label.charAt(2) === ']') {\n return second.toUpperCase();\n }\n return step.key.split('_')[0].slice(0, 4).toUpperCase();\n}\n\n/* ───────────────────────── 포맷 유틸 ───────────────────────── */\n\nexport function formatDuration(seconds: number | null): string {\n if (seconds === null) return '—';\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return `${m}분 ${String(s).padStart(2, '0')}초`;\n}\n\nexport function formatDate(iso: string): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n return format(d, 'M/d HH:mm');\n}\n\nexport function formatTimestamp(ms: number): string {\n const total = Math.floor(ms / 1000);\n const m = Math.floor(total / 60);\n const s = total % 60;\n return `${m}:${String(s).padStart(2, '0')}`;\n}\n\n/* ───────────────────────── 미디어 싱크 ───────────────────────── */\n\n// 미디어 길이와 STT 길이가 이 비율 이내로 가까우면 싱크(클릭 seek/재생 하이라이트) 활성.\nexport const SYNC_TOLERANCE = 0.05;\n\nexport function isLengthClose(mediaSec: number | null, sttSec: number): boolean {\n if (!mediaSec || mediaSec <= 0 || sttSec <= 0) {\n return false;\n }\n return (\n Math.abs(mediaSec - sttSec) / Math.max(mediaSec, sttSec) <= SYNC_TOLERANCE\n );\n}\n\n/* ───────────────────────── 발화량 ───────────────────────── */\n\n// 내 발화량이 이 비율을 넘으면 과다 발화로 간주(빨간 막대 + 주의 문구).\nexport const SPEECH_OVERTALK_THRESHOLD = 40;\n\n// 화자별 발화량 비율. 기준은 공백·개행 제거 글자 수(실제 말한 양에 근접, 공백 패턴 왜곡 방지).\n// 발화 글자가 전혀 없으면 null → 미표시.\nexport function computeSpeechShare(lines: RpSessionScriptLine[]): SpeechShare | null {\n let userChars = 0;\n let partnerChars = 0;\n for (const line of lines) {\n const count = line.text.replace(/\\s/g, '').length;\n if (line.speaker === 'user') {\n userChars += count;\n } else {\n partnerChars += count;\n }\n }\n const total = userChars + partnerChars;\n if (total === 0) {\n return null;\n }\n const userPct = Math.round((userChars / total) * 100);\n return { userPct, partnerPct: 100 - userPct };\n}\n\n/* ───────────────────────── 세션 상태 ───────────────────────── */\n\nconst STATUS_LABEL: Record<string, string> = {\n complete: '분석 완료',\n completed: '분석 완료',\n analyzing: 'AI 분석 중',\n partial: '일부 산출물 없음',\n};\n\nexport function statusLabelOf(status: string | null): string {\n if (!status) return '세션';\n return STATUS_LABEL[status] ?? status;\n}\n"],"mappings":"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","names":[]}
@@ -7,33 +7,30 @@ import {
7
7
  import {
8
8
  Grid
9
9
  } from "./chunk-EGEQY3KT.js";
10
+ import {
11
+ Collapse
12
+ } from "./chunk-NFDQJVFA.js";
10
13
  import {
11
14
  Heading
12
- } from "./chunk-YIVIBIK2.js";
15
+ } from "./chunk-USGOLLYO.js";
13
16
  import {
14
17
  IconButton
15
18
  } from "./chunk-7RJYF5L3.js";
16
- import {
17
- Card
18
- } from "./chunk-RP2RGCAW.js";
19
- import {
20
- Collapse
21
- } from "./chunk-NFDQJVFA.js";
22
- import {
23
- Badge
24
- } from "./chunk-BK74U562.js";
25
19
  import {
26
20
  Box
27
21
  } from "./chunk-4Y5BEXVN.js";
28
22
  import {
29
23
  Typo
30
- } from "./chunk-YXFHD2PY.js";
24
+ } from "./chunk-L4QQGIYQ.js";
31
25
  import {
32
26
  Flex
33
27
  } from "./chunk-25HMMI7R.js";
34
28
  import {
35
29
  Button
36
30
  } from "./chunk-2LCH3PDF.js";
31
+ import {
32
+ Card
33
+ } from "./chunk-RP2RGCAW.js";
37
34
  import {
38
35
  ChevronDownIcon,
39
36
  ChevronUpIcon,
@@ -41,6 +38,9 @@ import {
41
38
  RocketIcon,
42
39
  TrashIcon
43
40
  } from "./chunk-VOME2TE7.js";
41
+ import {
42
+ Badge
43
+ } from "./chunk-BK74U562.js";
44
44
  import {
45
45
  __spreadValues
46
46
  } from "./chunk-CRTRMMJ7.js";
@@ -162,4 +162,4 @@ function GoalManageCardRead(props) {
162
162
  export {
163
163
  GoalManageCardRead
164
164
  };
165
- //# sourceMappingURL=chunk-MTESLX7K.js.map
165
+ //# sourceMappingURL=chunk-5IGBFB67.js.map
@@ -0,0 +1,87 @@
1
+ import {
2
+ stepCode,
3
+ stepGradeLabel,
4
+ stepRatio,
5
+ stepScoreText
6
+ } from "./chunk-4YAA25AV.js";
7
+ import {
8
+ Chart,
9
+ useTokenColors
10
+ } from "./chunk-UXAEOCOH.js";
11
+
12
+ // src/app/roleplay/parts/step-radar.tsx
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ function StepRadar({ steps }) {
15
+ const { colors, probe } = useTokenColors({
16
+ accent: ["--accent-9", "#5b5bd6"],
17
+ grid: ["--gray-5", "#e0e0e0"],
18
+ label: ["--gray-11", "#646464"]
19
+ });
20
+ const indicator = steps.map((s) => ({ name: stepCode(s), max: 1 }));
21
+ const values = steps.map((s) => {
22
+ var _a;
23
+ return (_a = stepRatio(s)) != null ? _a : 0;
24
+ });
25
+ const option = {
26
+ tooltip: {
27
+ trigger: "item",
28
+ formatter: () => steps.map(
29
+ (s) => {
30
+ var _a, _b;
31
+ return `${stepCode(s)} ${(_b = (_a = stepScoreText(s)) != null ? _a : stepGradeLabel(s)) != null ? _b : "\u2014"}`;
32
+ }
33
+ ).join("<br/>")
34
+ },
35
+ radar: {
36
+ indicator,
37
+ radius: "66%",
38
+ center: ["50%", "50%"],
39
+ splitNumber: 4,
40
+ axisName: { color: colors.label, fontSize: 10, fontWeight: "bold" },
41
+ // ds-allow: chart-lib
42
+ splitLine: { lineStyle: { color: colors.grid } },
43
+ splitArea: { show: false },
44
+ axisLine: { lineStyle: { color: colors.grid } }
45
+ },
46
+ series: [
47
+ {
48
+ type: "radar",
49
+ data: [
50
+ {
51
+ value: values,
52
+ name: "\uC774\uBC88 \uC138\uC158",
53
+ areaStyle: { color: colors.accent, opacity: 0.18 },
54
+ lineStyle: { color: colors.accent, width: 2 },
55
+ itemStyle: { color: colors.accent },
56
+ symbolSize: 4
57
+ }
58
+ ]
59
+ }
60
+ ]
61
+ };
62
+ return /* @__PURE__ */ jsxs(
63
+ "div",
64
+ {
65
+ "aria-label": "\uD3C9\uAC00 \uB2E8\uACC4 \uB808\uC774\uB354 \uCC28\uD2B8",
66
+ role: "img",
67
+ style: {
68
+ position: "relative",
69
+ display: "flex",
70
+ alignItems: "center",
71
+ justifyContent: "center",
72
+ height: "100%",
73
+ minWidth: 0,
74
+ overflow: "hidden"
75
+ },
76
+ children: [
77
+ probe,
78
+ /* @__PURE__ */ jsx("div", { style: { width: "100%", maxWidth: 300, height: 280 }, children: /* @__PURE__ */ jsx(Chart, { option }) })
79
+ ]
80
+ }
81
+ );
82
+ }
83
+
84
+ export {
85
+ StepRadar
86
+ };
87
+ //# sourceMappingURL=chunk-5QIT4URV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app/roleplay/parts/step-radar.tsx"],"sourcesContent":["'use client';\n\nimport type { EChartsOption } from 'echarts';\nimport type { RpReportStep } from '../utils/report-parse';\nimport { stepCode, stepGradeLabel, stepRatio, stepScoreText } from '../utils/session-utils';\nimport { Chart, useTokenColors } from '../chart/session-chart';\n\nexport interface StepRadarProps {\n steps: RpReportStep[];\n}\n\nexport function StepRadar({ steps }: StepRadarProps): React.ReactElement {\n const { colors, probe } = useTokenColors({\n accent: ['--accent-9', '#5b5bd6'],\n grid: ['--gray-5', '#e0e0e0'],\n label: ['--gray-11', '#646464'],\n });\n\n const indicator = steps.map((s) => ({ name: stepCode(s), max: 1 }));\n const values = steps.map((s) => stepRatio(s) ?? 0);\n\n const option: EChartsOption = {\n tooltip: {\n trigger: 'item',\n formatter: () =>\n steps\n .map(\n (s) =>\n `${stepCode(s)} ${stepScoreText(s) ?? stepGradeLabel(s) ?? '—'}`\n )\n .join('<br/>'),\n },\n radar: {\n indicator,\n radius: '66%',\n center: ['50%', '50%'],\n splitNumber: 4,\n axisName: { color: colors.label, fontSize: 10, fontWeight: 'bold' }, // ds-allow: chart-lib\n splitLine: { lineStyle: { color: colors.grid } },\n splitArea: { show: false },\n axisLine: { lineStyle: { color: colors.grid } },\n },\n series: [\n {\n type: 'radar',\n data: [\n {\n value: values,\n name: '이번 세션',\n areaStyle: { color: colors.accent, opacity: 0.18 },\n lineStyle: { color: colors.accent, width: 2 },\n itemStyle: { color: colors.accent },\n symbolSize: 4,\n },\n ],\n },\n ],\n };\n\n return (\n <div\n aria-label=\"평가 단계 레이더 차트\"\n role=\"img\"\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n minWidth: 0,\n overflow: 'hidden',\n }}\n >\n {probe}\n <div style={{ width: '100%', maxWidth: 300, height: 280 }}>\n <Chart option={option} />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AA4DI,SAeI,KAfJ;AAjDG,SAAS,UAAU,EAAE,MAAM,GAAuC;AACvE,QAAM,EAAE,QAAQ,MAAM,IAAI,eAAe;AAAA,IACvC,QAAQ,CAAC,cAAc,SAAS;AAAA,IAChC,MAAM,CAAC,YAAY,SAAS;AAAA,IAC5B,OAAO,CAAC,aAAa,SAAS;AAAA,EAChC,CAAC;AAED,QAAM,YAAY,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,SAAS,CAAC,GAAG,KAAK,EAAE,EAAE;AAClE,QAAM,SAAS,MAAM,IAAI,CAAC,MAAG;AAnB/B;AAmBkC,2BAAU,CAAC,MAAX,YAAgB;AAAA,GAAC;AAEjD,QAAM,SAAwB;AAAA,IAC5B,SAAS;AAAA,MACP,SAAS;AAAA,MACT,WAAW,MACT,MACG;AAAA,QACC,CAAC,MAAG;AA3BhB;AA4Bc,oBAAG,SAAS,CAAC,CAAC,KAAI,yBAAc,CAAC,MAAf,YAAoB,eAAe,CAAC,MAApC,YAAyC,QAAG;AAAA;AAAA,MAClE,EACC,KAAK,OAAO;AAAA,IACnB;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ,CAAC,OAAO,KAAK;AAAA,MACrB,aAAa;AAAA,MACb,UAAU,EAAE,OAAO,OAAO,OAAO,UAAU,IAAI,YAAY,OAAO;AAAA;AAAA,MAClE,WAAW,EAAE,WAAW,EAAE,OAAO,OAAO,KAAK,EAAE;AAAA,MAC/C,WAAW,EAAE,MAAM,MAAM;AAAA,MACzB,UAAU,EAAE,WAAW,EAAE,OAAO,OAAO,KAAK,EAAE;AAAA,IAChD;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ;AAAA,YACE,OAAO;AAAA,YACP,MAAM;AAAA,YACN,WAAW,EAAE,OAAO,OAAO,QAAQ,SAAS,KAAK;AAAA,YACjD,WAAW,EAAE,OAAO,OAAO,QAAQ,OAAO,EAAE;AAAA,YAC5C,WAAW,EAAE,OAAO,OAAO,OAAO;AAAA,YAClC,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,MAAK;AAAA,MACL,OAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,MAEC;AAAA;AAAA,QACD,oBAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,UAAU,KAAK,QAAQ,IAAI,GACtD,8BAAC,SAAM,QAAgB,GACzB;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-FR2GDOU2.js";
7
7
  import {
8
8
  Pagination
9
- } from "./chunk-5SXTL6NO.js";
9
+ } from "./chunk-RWJUXAFY.js";
10
10
  import {
11
11
  Typo
12
- } from "./chunk-YXFHD2PY.js";
12
+ } from "./chunk-L4QQGIYQ.js";
13
13
  import {
14
14
  Flex
15
15
  } from "./chunk-25HMMI7R.js";
@@ -234,4 +234,4 @@ export {
234
234
  createColumnHelper,
235
235
  ExpandTable
236
236
  };
237
- //# sourceMappingURL=chunk-LXL7GJUM.js.map
237
+ //# sourceMappingURL=chunk-5RIAIE2J.js.map
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-ZPUNTAVI.js";
15
15
  import {
16
16
  Heading
17
- } from "./chunk-YIVIBIK2.js";
17
+ } from "./chunk-USGOLLYO.js";
18
18
  import {
19
19
  Box
20
20
  } from "./chunk-4Y5BEXVN.js";
@@ -54,4 +54,4 @@ function SessionUserInfoDetail({
54
54
  export {
55
55
  SessionUserInfoDetail
56
56
  };
57
- //# sourceMappingURL=chunk-R43F6ZWT.js.map
57
+ //# sourceMappingURL=chunk-64DSUMXA.js.map