@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.
- package/dist/app/index.cjs +49 -4
- package/dist/app/index.cjs.map +1 -1
- package/dist/app/index.js +98 -97
- package/dist/app/platform/coach-question-list.cjs +49 -4
- package/dist/app/platform/coach-question-list.cjs.map +1 -1
- package/dist/app/platform/coach-question-list.js +33 -32
- package/dist/app/platform/contents-card.cjs +49 -4
- package/dist/app/platform/contents-card.cjs.map +1 -1
- package/dist/app/platform/contents-card.js +33 -32
- package/dist/app/platform/curriculum-card.cjs +49 -4
- package/dist/app/platform/curriculum-card.cjs.map +1 -1
- package/dist/app/platform/curriculum-card.js +5 -4
- package/dist/app/platform/edit-coaching-time.cjs +49 -4
- package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
- package/dist/app/platform/edit-coaching-time.js +80 -79
- package/dist/app/platform/edit-service-type.cjs +49 -4
- package/dist/app/platform/edit-service-type.cjs.map +1 -1
- package/dist/app/platform/edit-service-type.js +81 -80
- package/dist/app/platform/goal-manage-card-edit.cjs +49 -4
- package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-edit.js +80 -79
- package/dist/app/platform/goal-manage-card-read.cjs +49 -4
- package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-read.js +33 -32
- package/dist/app/platform/on-offline-radio-card.cjs +49 -4
- package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
- package/dist/app/platform/on-offline-radio-card.js +80 -79
- package/dist/app/platform/report-card.cjs +49 -4
- package/dist/app/platform/report-card.cjs.map +1 -1
- package/dist/app/platform/report-card.js +33 -32
- package/dist/app/platform/reservation-card.cjs +49 -4
- package/dist/app/platform/reservation-card.cjs.map +1 -1
- package/dist/app/platform/reservation-card.js +81 -80
- package/dist/app/platform/session-card.cjs +49 -4
- package/dist/app/platform/session-card.cjs.map +1 -1
- package/dist/app/platform/session-card.js +83 -82
- package/dist/app/platform/session-review-simple-read.cjs +49 -4
- package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
- package/dist/app/platform/session-review-simple-read.js +33 -32
- package/dist/app/platform/userInfos/coaching-customer-info/index.cjs +49 -4
- package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/index.js +36 -35
- package/dist/app/platform/userInfos/coaching-customer-info/large.cjs +49 -4
- package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/large.js +33 -32
- package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs +49 -4
- package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/medium.js +33 -32
- package/dist/app/platform/userInfos/coaching-customer-info/small.cjs +49 -4
- package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/small.js +33 -32
- package/dist/app/platform/userInfos/session-user-info-detail.cjs +49 -4
- package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
- package/dist/app/platform/userInfos/session-user-info-detail.js +33 -32
- package/dist/app/platform/userInfos/utils.cjs +49 -4
- package/dist/app/platform/userInfos/utils.cjs.map +1 -1
- package/dist/app/platform/userInfos/utils.js +32 -31
- package/dist/app/roleplay/chart/session-chart.cjs +351 -0
- package/dist/app/roleplay/chart/session-chart.cjs.map +1 -0
- package/dist/app/roleplay/chart/session-chart.d.cts +16 -0
- package/dist/app/roleplay/chart/session-chart.d.ts +16 -0
- package/dist/app/roleplay/chart/session-chart.js +14 -0
- package/dist/app/roleplay/index.cjs +5706 -0
- package/dist/app/roleplay/index.cjs.map +1 -0
- package/dist/app/roleplay/index.d.cts +4 -0
- package/dist/app/roleplay/index.d.ts +4 -0
- package/dist/app/roleplay/index.js +182 -0
- package/dist/app/roleplay/index.js.map +1 -0
- package/dist/app/roleplay/parts/analysis-section.cjs +2178 -0
- package/dist/app/roleplay/parts/analysis-section.cjs.map +1 -0
- package/dist/app/roleplay/parts/analysis-section.d.cts +17 -0
- package/dist/app/roleplay/parts/analysis-section.d.ts +17 -0
- package/dist/app/roleplay/parts/analysis-section.js +97 -0
- package/dist/app/roleplay/parts/analysis-section.js.map +1 -0
- package/dist/app/roleplay/parts/coaching-panel.cjs +2191 -0
- package/dist/app/roleplay/parts/coaching-panel.cjs.map +1 -0
- package/dist/app/roleplay/parts/coaching-panel.d.cts +8 -0
- package/dist/app/roleplay/parts/coaching-panel.d.ts +8 -0
- package/dist/app/roleplay/parts/coaching-panel.js +95 -0
- package/dist/app/roleplay/parts/coaching-panel.js.map +1 -0
- package/dist/app/roleplay/parts/content.cjs +4683 -0
- package/dist/app/roleplay/parts/content.cjs.map +1 -0
- package/dist/app/roleplay/parts/content.d.cts +15 -0
- package/dist/app/roleplay/parts/content.d.ts +15 -0
- package/dist/app/roleplay/parts/content.js +174 -0
- package/dist/app/roleplay/parts/content.js.map +1 -0
- package/dist/app/roleplay/parts/header.cjs +2300 -0
- package/dist/app/roleplay/parts/header.cjs.map +1 -0
- package/dist/app/roleplay/parts/header.d.cts +13 -0
- package/dist/app/roleplay/parts/header.d.ts +13 -0
- package/dist/app/roleplay/parts/header.js +96 -0
- package/dist/app/roleplay/parts/header.js.map +1 -0
- package/dist/app/roleplay/parts/score-summary.cjs +2276 -0
- package/dist/app/roleplay/parts/score-summary.cjs.map +1 -0
- package/dist/app/roleplay/parts/score-summary.d.cts +12 -0
- package/dist/app/roleplay/parts/score-summary.d.ts +12 -0
- package/dist/app/roleplay/parts/score-summary.js +96 -0
- package/dist/app/roleplay/parts/score-summary.js.map +1 -0
- package/dist/app/roleplay/parts/score-trend-section.cjs +3686 -0
- package/dist/app/roleplay/parts/score-trend-section.cjs.map +1 -0
- package/dist/app/roleplay/parts/score-trend-section.d.cts +14 -0
- package/dist/app/roleplay/parts/score-trend-section.d.ts +14 -0
- package/dist/app/roleplay/parts/score-trend-section.js +168 -0
- package/dist/app/roleplay/parts/score-trend-section.js.map +1 -0
- package/dist/app/roleplay/parts/script-transcript.cjs +2288 -0
- package/dist/app/roleplay/parts/script-transcript.cjs.map +1 -0
- package/dist/app/roleplay/parts/script-transcript.d.cts +15 -0
- package/dist/app/roleplay/parts/script-transcript.d.ts +15 -0
- package/dist/app/roleplay/parts/script-transcript.js +96 -0
- package/dist/app/roleplay/parts/script-transcript.js.map +1 -0
- package/dist/app/roleplay/parts/section-nav.cjs +2433 -0
- package/dist/app/roleplay/parts/section-nav.cjs.map +1 -0
- package/dist/app/roleplay/parts/section-nav.d.cts +15 -0
- package/dist/app/roleplay/parts/section-nav.d.ts +15 -0
- package/dist/app/roleplay/parts/section-nav.js +96 -0
- package/dist/app/roleplay/parts/section-nav.js.map +1 -0
- package/dist/app/roleplay/parts/session-replay-dialog.cjs +2598 -0
- package/dist/app/roleplay/parts/session-replay-dialog.cjs.map +1 -0
- package/dist/app/roleplay/parts/session-replay-dialog.d.cts +14 -0
- package/dist/app/roleplay/parts/session-replay-dialog.d.ts +14 -0
- package/dist/app/roleplay/parts/session-replay-dialog.js +97 -0
- package/dist/app/roleplay/parts/session-replay-dialog.js.map +1 -0
- package/dist/app/roleplay/parts/step-detail.cjs +2311 -0
- package/dist/app/roleplay/parts/step-detail.cjs.map +1 -0
- package/dist/app/roleplay/parts/step-detail.d.cts +9 -0
- package/dist/app/roleplay/parts/step-detail.d.ts +9 -0
- package/dist/app/roleplay/parts/step-detail.js +96 -0
- package/dist/app/roleplay/parts/step-detail.js.map +1 -0
- package/dist/app/roleplay/parts/step-radar.cjs +463 -0
- package/dist/app/roleplay/parts/step-radar.cjs.map +1 -0
- package/dist/app/roleplay/parts/step-radar.d.cts +8 -0
- package/dist/app/roleplay/parts/step-radar.d.ts +8 -0
- package/dist/app/roleplay/parts/step-radar.js +14 -0
- package/dist/app/roleplay/parts/step-radar.js.map +1 -0
- package/dist/app/roleplay/parts/step-summary.cjs +2651 -0
- package/dist/app/roleplay/parts/step-summary.cjs.map +1 -0
- package/dist/app/roleplay/parts/step-summary.d.cts +8 -0
- package/dist/app/roleplay/parts/step-summary.d.ts +8 -0
- package/dist/app/roleplay/parts/step-summary.js +101 -0
- package/dist/app/roleplay/parts/step-summary.js.map +1 -0
- package/dist/app/roleplay/rp-session-detail.cjs +5703 -0
- package/dist/app/roleplay/rp-session-detail.cjs.map +1 -0
- package/dist/app/roleplay/rp-session-detail.d.cts +17 -0
- package/dist/app/roleplay/rp-session-detail.d.ts +17 -0
- package/dist/app/roleplay/rp-session-detail.js +179 -0
- package/dist/app/roleplay/rp-session-detail.js.map +1 -0
- package/dist/app/roleplay/types.cjs +19 -0
- package/dist/app/roleplay/types.cjs.map +1 -0
- package/dist/app/roleplay/types.d.cts +42 -0
- package/dist/app/roleplay/types.d.ts +42 -0
- package/dist/app/roleplay/types.js +2 -0
- package/dist/app/roleplay/types.js.map +1 -0
- package/dist/app/roleplay/utils/report-parse.cjs +285 -0
- package/dist/app/roleplay/utils/report-parse.cjs.map +1 -0
- package/dist/app/roleplay/utils/report-parse.d.cts +57 -0
- package/dist/app/roleplay/utils/report-parse.d.ts +57 -0
- package/dist/app/roleplay/utils/report-parse.js +8 -0
- package/dist/app/roleplay/utils/report-parse.js.map +1 -0
- package/dist/app/roleplay/utils/report-parse.test.cjs +491 -0
- package/dist/app/roleplay/utils/report-parse.test.cjs.map +1 -0
- package/dist/app/roleplay/utils/report-parse.test.d.cts +2 -0
- package/dist/app/roleplay/utils/report-parse.test.d.ts +2 -0
- package/dist/app/roleplay/utils/report-parse.test.js +237 -0
- package/dist/app/roleplay/utils/report-parse.test.js.map +1 -0
- package/dist/app/roleplay/utils/session-utils.cjs +204 -0
- package/dist/app/roleplay/utils/session-utils.cjs.map +1 -0
- package/dist/app/roleplay/utils/session-utils.d.cts +38 -0
- package/dist/app/roleplay/utils/session-utils.d.ts +38 -0
- package/dist/app/roleplay/utils/session-utils.js +46 -0
- package/dist/app/roleplay/utils/session-utils.js.map +1 -0
- package/dist/atoms/bullet-text.cjs +29 -2
- package/dist/atoms/bullet-text.cjs.map +1 -1
- package/dist/atoms/bullet-text.js +3 -2
- package/dist/atoms/dialog.cjs +29 -2
- package/dist/atoms/dialog.cjs.map +1 -1
- package/dist/atoms/dialog.js +3 -2
- package/dist/atoms/ellipsis-tooltip.cjs +29 -2
- package/dist/atoms/ellipsis-tooltip.cjs.map +1 -1
- package/dist/atoms/ellipsis-tooltip.js +3 -2
- package/dist/atoms/field-error-wrapper.cjs +29 -2
- package/dist/atoms/field-error-wrapper.cjs.map +1 -1
- package/dist/atoms/field-error-wrapper.js +3 -2
- package/dist/atoms/heading.cjs +29 -2
- package/dist/atoms/heading.cjs.map +1 -1
- package/dist/atoms/heading.d.cts +2 -0
- package/dist/atoms/heading.d.ts +2 -0
- package/dist/atoms/heading.js +2 -1
- package/dist/atoms/index.cjs +49 -4
- package/dist/atoms/index.cjs.map +1 -1
- package/dist/atoms/index.js +67 -66
- package/dist/atoms/list.cjs +29 -2
- package/dist/atoms/list.cjs.map +1 -1
- package/dist/atoms/list.js +3 -2
- package/dist/atoms/pagination.cjs +29 -2
- package/dist/atoms/pagination.cjs.map +1 -1
- package/dist/atoms/pagination.js +3 -2
- package/dist/atoms/typo.cjs +29 -2
- package/dist/atoms/typo.cjs.map +1 -1
- package/dist/atoms/typo.d.cts +2 -0
- package/dist/atoms/typo.d.ts +2 -0
- package/dist/atoms/typo.js +2 -1
- package/dist/chunk-2TOASXPK.js +131 -0
- package/dist/chunk-2TOASXPK.js.map +1 -0
- package/dist/chunk-36W7VD2Z.js +13 -0
- package/dist/chunk-36W7VD2Z.js.map +1 -0
- package/dist/{chunk-7XMPNH2X.js → chunk-3DZIX4CE.js} +8 -8
- package/dist/chunk-3UGBMKSQ.js +166 -0
- package/dist/chunk-3UGBMKSQ.js.map +1 -0
- package/dist/{chunk-XFFVIWAD.js → chunk-47QYYEMG.js} +2 -2
- package/dist/{chunk-VVJEXKCB.js → chunk-4GH4R4VJ.js} +6 -6
- package/dist/chunk-4YAA25AV.js +161 -0
- package/dist/chunk-4YAA25AV.js.map +1 -0
- package/dist/{chunk-MTESLX7K.js → chunk-5IGBFB67.js} +12 -12
- package/dist/chunk-5QIT4URV.js +87 -0
- package/dist/chunk-5QIT4URV.js.map +1 -0
- package/dist/{chunk-LXL7GJUM.js → chunk-5RIAIE2J.js} +3 -3
- package/dist/{chunk-R43F6ZWT.js → chunk-64DSUMXA.js} +2 -2
- package/dist/{chunk-C2FRAZT2.js → chunk-6OT5OYGM.js} +2 -2
- package/dist/chunk-6YIKOYBQ.js +185 -0
- package/dist/chunk-6YIKOYBQ.js.map +1 -0
- package/dist/{chunk-6Q26H64H.js → chunk-74PR3ZWJ.js} +6 -6
- package/dist/{chunk-IA4WXGVH.js → chunk-75EY7LBP.js} +2 -2
- package/dist/chunk-7MXY3D3Z.js +84 -0
- package/dist/chunk-7MXY3D3Z.js.map +1 -0
- package/dist/{chunk-77YN5S26.js → chunk-AELKCD6B.js} +3 -3
- package/dist/{chunk-L5WSNVSD.js → chunk-AHYOAFOU.js} +3 -3
- package/dist/{chunk-6JPGF4MB.js → chunk-AT5PAJLW.js} +2 -2
- package/dist/{chunk-P6YCD2AV.js → chunk-C4INJWFV.js} +9 -9
- package/dist/{chunk-SGJBQKUD.js → chunk-C6HO3IGE.js} +2 -2
- package/dist/{chunk-7NBGSPZU.js → chunk-CBYIPRND.js} +5 -5
- package/dist/{chunk-UIMDXYPP.js → chunk-CGLDFUOY.js} +6 -6
- package/dist/{chunk-DUXYDGHX.js → chunk-CUS3ORMD.js} +6 -6
- package/dist/{chunk-UILGIMXL.js → chunk-D4U2ZV2A.js} +5 -5
- package/dist/{chunk-PRLNOTMV.js → chunk-DPMDQA3O.js} +6 -6
- package/dist/chunk-EBFQFOUQ.js +138 -0
- package/dist/chunk-EBFQFOUQ.js.map +1 -0
- package/dist/chunk-EHDUKUML.js +183 -0
- package/dist/chunk-EHDUKUML.js.map +1 -0
- package/dist/{chunk-6XASFDTI.js → chunk-EJXZXUD2.js} +15 -15
- package/dist/{chunk-QFSMOKC6.js → chunk-FAL6S2XK.js} +2 -2
- package/dist/{chunk-GMEGTXIV.js → chunk-FJEDSUGU.js} +5 -5
- package/dist/{chunk-WLG6GG26.js → chunk-G3KQN32M.js} +3 -3
- package/dist/chunk-GA6W62DO.js +101 -0
- package/dist/chunk-GA6W62DO.js.map +1 -0
- package/dist/{chunk-72ZC7DBY.js → chunk-GNB4A34H.js} +2 -2
- package/dist/{chunk-KEFAYPBO.js → chunk-IRFNKOKQ.js} +4 -4
- package/dist/{chunk-5BIICWFT.js → chunk-ISSUGCCY.js} +6 -6
- package/dist/{chunk-PZDN6K6R.js → chunk-JCZXPONS.js} +4 -4
- package/dist/{chunk-7TRT4QTP.js → chunk-K4RZTENM.js} +2 -2
- package/dist/{chunk-Z54XTEAF.js → chunk-KDS7OQOY.js} +2 -2
- package/dist/chunk-KJPBBBVK.js +142 -0
- package/dist/chunk-KJPBBBVK.js.map +1 -0
- package/dist/{chunk-YXFHD2PY.js → chunk-L4QQGIYQ.js} +24 -3
- package/dist/chunk-L4QQGIYQ.js.map +1 -0
- package/dist/{chunk-YCV3HR4J.js → chunk-LAGJDIVU.js} +2 -2
- package/dist/{chunk-3UJEOHQT.js → chunk-LK2H4QTJ.js} +6 -6
- package/dist/{chunk-UHAMISMF.js → chunk-LRNO4W2P.js} +4 -4
- package/dist/{chunk-5FLPPHUZ.js → chunk-MQKIIIBW.js} +2 -2
- package/dist/{chunk-6YPAN4D3.js → chunk-N242VJOP.js} +5 -5
- package/dist/{chunk-PWUCBBQP.js → chunk-N3FMP27I.js} +6 -6
- package/dist/{chunk-NIMF5FJI.js → chunk-NK6S7ZMB.js} +6 -6
- package/dist/chunk-NKW6BO5R.js +264 -0
- package/dist/chunk-NKW6BO5R.js.map +1 -0
- package/dist/{chunk-IIA2BVJI.js → chunk-NVRVOTWZ.js} +3 -3
- package/dist/{chunk-GTTZJ2Y7.js → chunk-O332K3SW.js} +4 -4
- package/dist/{chunk-LCR5R743.js → chunk-OOM522XP.js} +2 -2
- package/dist/{chunk-FIQJUO66.js → chunk-OPIVSYLN.js} +5 -5
- package/dist/{chunk-SQZVLRUH.js → chunk-OUDDTPEN.js} +5 -5
- package/dist/chunk-OUP3VFXG.js +1 -0
- package/dist/chunk-OUP3VFXG.js.map +1 -0
- package/dist/{chunk-URSBI6BQ.js → chunk-OW2QNTK3.js} +3 -3
- package/dist/{chunk-GBT2BBZS.js → chunk-P2H3VCIB.js} +3 -3
- package/dist/{chunk-TF3RLGKA.js → chunk-P4DJ5F6Z.js} +4 -4
- package/dist/{chunk-YWLFDIBP.js → chunk-PAUEQXYG.js} +2 -2
- package/dist/{chunk-XOCVP6IW.js → chunk-Q2FDF2AB.js} +8 -8
- package/dist/{chunk-VFWRW7TA.js → chunk-QLNAAZJX.js} +2 -2
- package/dist/{chunk-C5CEDLV6.js → chunk-QLOYGKKM.js} +2 -2
- package/dist/chunk-QMAINJ4G.js +190 -0
- package/dist/chunk-QMAINJ4G.js.map +1 -0
- package/dist/{chunk-DDYPJWZV.js → chunk-RBU2TRYY.js} +10 -10
- package/dist/{chunk-FFGGO6E4.js → chunk-RRC4WFG3.js} +2 -2
- package/dist/{chunk-5SXTL6NO.js → chunk-RWJUXAFY.js} +2 -2
- package/dist/{chunk-BZVA4RGI.js → chunk-S4MEMFKG.js} +2 -2
- package/dist/{chunk-PTUL6MDB.js → chunk-SINRU2A6.js} +2 -2
- package/dist/{chunk-UA2HDDD4.js → chunk-SOKGYD5B.js} +6 -6
- package/dist/{chunk-BZCUF5K6.js → chunk-SQ3FYBJT.js} +5 -5
- package/dist/chunk-T7LKMJVA.js +142 -0
- package/dist/chunk-T7LKMJVA.js.map +1 -0
- package/dist/chunk-TFJJKM3W.js +261 -0
- package/dist/chunk-TFJJKM3W.js.map +1 -0
- package/dist/{chunk-5FXPD4NE.js → chunk-U2EAXN3Y.js} +7 -7
- package/dist/{chunk-B7SKF5RD.js → chunk-U7HF53KK.js} +4 -4
- package/dist/{chunk-YIVIBIK2.js → chunk-USGOLLYO.js} +24 -3
- package/dist/chunk-USGOLLYO.js.map +1 -0
- package/dist/{chunk-Z2U2YQOG.js → chunk-USL6PICI.js} +2 -2
- package/dist/chunk-UXAEOCOH.js +150 -0
- package/dist/chunk-UXAEOCOH.js.map +1 -0
- package/dist/{chunk-DHP7LYK7.js → chunk-UXH2XIB2.js} +2 -2
- package/dist/{chunk-U5LZO2EI.js → chunk-V7KAHLW2.js} +6 -6
- package/dist/{chunk-VYUQXEXS.js → chunk-VBXZIIUA.js} +5 -5
- package/dist/{chunk-IYAN33WP.js → chunk-VVWQZK5L.js} +3 -3
- package/dist/{chunk-DBXQFZBB.js → chunk-WLKK5L3P.js} +8 -8
- package/dist/chunk-WTS75RUC.js +1 -0
- package/dist/chunk-WTS75RUC.js.map +1 -0
- package/dist/{chunk-ANFQJ6YW.js → chunk-WYHDQK2S.js} +9 -9
- package/dist/{chunk-RVHE3UVN.js → chunk-X3TBEGPA.js} +6 -6
- package/dist/chunk-XM4GWPXC.js +236 -0
- package/dist/chunk-XM4GWPXC.js.map +1 -0
- package/dist/{chunk-AEDSRBBB.js → chunk-XWHBJY5V.js} +3 -3
- package/dist/{chunk-SHFN2BOB.js → chunk-ZGTGEBQX.js} +2 -2
- package/dist/context/dynamic-form-context.cjs +49 -4
- package/dist/context/dynamic-form-context.cjs.map +1 -1
- package/dist/context/dynamic-form-context.js +5 -4
- package/dist/context/index.cjs +49 -4
- package/dist/context/index.cjs.map +1 -1
- package/dist/context/index.js +5 -4
- package/dist/index.cjs +51 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +76 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +161 -157
- package/dist/molecules/autocomplete-textfield.cjs +29 -2
- package/dist/molecules/autocomplete-textfield.cjs.map +1 -1
- package/dist/molecules/autocomplete-textfield.js +3 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +14 -13
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +3 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +10 -9
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.js +4 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.js +6 -5
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +4 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +18 -17
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.js +3 -2
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.js +3 -2
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +20 -19
- package/dist/molecules/curriculumV2/CurriculumContents/index.cjs +49 -4
- package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/index.js +23 -22
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.js +3 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +4 -3
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.js +3 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +8 -7
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs +29 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +6 -5
- package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs +49 -4
- package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
- package/dist/molecules/curriculumV2/curriculum-sub-nav.js +4 -3
- package/dist/molecules/curriculumV2/index.cjs +49 -4
- package/dist/molecules/curriculumV2/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/index.js +33 -32
- package/dist/molecules/date-picker/date-picker-button.cjs +49 -4
- package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
- package/dist/molecules/date-picker/date-picker-button.js +5 -4
- package/dist/molecules/date-picker/index.cjs +49 -4
- package/dist/molecules/date-picker/index.cjs.map +1 -1
- package/dist/molecules/date-picker/index.js +4 -3
- package/dist/molecules/description-json-render.cjs +29 -2
- package/dist/molecules/description-json-render.cjs.map +1 -1
- package/dist/molecules/description-json-render.js +5 -4
- package/dist/molecules/download-card.cjs +29 -2
- package/dist/molecules/download-card.cjs.map +1 -1
- package/dist/molecules/download-card.js +3 -2
- package/dist/molecules/dynamic-field.cjs +49 -4
- package/dist/molecules/dynamic-field.cjs.map +1 -1
- package/dist/molecules/dynamic-field.js +7 -6
- package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs +29 -2
- package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-field-editor-panel.js +5 -4
- package/dist/molecules/dynamic-form-editor-field-list-panel.cjs +29 -2
- package/dist/molecules/dynamic-form-editor-field-list-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-field-list-panel.js +4 -3
- package/dist/molecules/dynamic-form-editor-issues-panel.cjs +29 -2
- package/dist/molecules/dynamic-form-editor-issues-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-issues-panel.js +4 -3
- package/dist/molecules/dynamic-form-editor-preview-panel.cjs +49 -4
- package/dist/molecules/dynamic-form-editor-preview-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-preview-panel.js +10 -9
- package/dist/molecules/dynamic-form-editor.cjs +49 -4
- package/dist/molecules/dynamic-form-editor.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor.js +16 -15
- package/dist/molecules/dynamic-form.cjs +49 -4
- package/dist/molecules/dynamic-form.cjs.map +1 -1
- package/dist/molecules/dynamic-form.js +8 -7
- package/dist/molecules/expand-table/index.cjs +29 -2
- package/dist/molecules/expand-table/index.cjs.map +1 -1
- package/dist/molecules/expand-table/index.js +5 -4
- package/dist/molecules/force-refresh.cjs +29 -2
- package/dist/molecules/force-refresh.cjs.map +1 -1
- package/dist/molecules/force-refresh.js +3 -2
- package/dist/molecules/form/form.cjs +49 -4
- package/dist/molecules/form/form.cjs.map +1 -1
- package/dist/molecules/form/form.js +4 -3
- package/dist/molecules/form/index.cjs +49 -4
- package/dist/molecules/form/index.cjs.map +1 -1
- package/dist/molecules/form/index.js +4 -3
- package/dist/molecules/ghost-post.cjs +29 -2
- package/dist/molecules/ghost-post.cjs.map +1 -1
- package/dist/molecules/ghost-post.js +3 -2
- package/dist/molecules/index.cjs +49 -4
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.js +76 -75
- package/dist/molecules/learning-post.cjs +49 -4
- package/dist/molecules/learning-post.cjs.map +1 -1
- package/dist/molecules/learning-post.js +6 -5
- package/dist/molecules/navigation.cjs +29 -2
- package/dist/molecules/navigation.cjs.map +1 -1
- package/dist/molecules/navigation.js +3 -2
- package/dist/molecules/one-on-one-guide-list.cjs +49 -4
- package/dist/molecules/one-on-one-guide-list.cjs.map +1 -1
- package/dist/molecules/one-on-one-guide-list.js +5 -4
- package/dist/molecules/stepper.cjs +29 -2
- package/dist/molecules/stepper.cjs.map +1 -1
- package/dist/molecules/stepper.js +4 -3
- package/dist/molecules/tag-selector.cjs +29 -2
- package/dist/molecules/tag-selector.cjs.map +1 -1
- package/dist/molecules/tag-selector.js +5 -4
- package/dist/molecules/time-select.js +3 -2
- package/dist/molecules/training-info-guideline.cjs +49 -4
- package/dist/molecules/training-info-guideline.cjs.map +1 -1
- package/dist/molecules/training-info-guideline.js +6 -5
- package/dist/utils/clamp-style.cjs +37 -0
- package/dist/utils/clamp-style.cjs.map +1 -0
- package/dist/utils/clamp-style.d.cts +13 -0
- package/dist/utils/clamp-style.d.ts +13 -0
- package/dist/utils/clamp-style.js +8 -0
- package/dist/utils/clamp-style.js.map +1 -0
- package/dist/utils/index.cjs +11 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +10 -6
- package/package.json +28 -2
- package/src/app/roleplay/chart/session-chart.tsx +185 -0
- package/src/app/roleplay/index.ts +8 -0
- package/src/app/roleplay/parts/analysis-section.tsx +98 -0
- package/src/app/roleplay/parts/coaching-panel.tsx +101 -0
- package/src/app/roleplay/parts/content.tsx +146 -0
- package/src/app/roleplay/parts/header.tsx +168 -0
- package/src/app/roleplay/parts/score-summary.tsx +158 -0
- package/src/app/roleplay/parts/score-trend-section.tsx +255 -0
- package/src/app/roleplay/parts/script-transcript.tsx +190 -0
- package/src/app/roleplay/parts/section-nav.tsx +299 -0
- package/src/app/roleplay/parts/session-replay-dialog.tsx +168 -0
- package/src/app/roleplay/parts/step-detail.tsx +173 -0
- package/src/app/roleplay/parts/step-radar.tsx +80 -0
- package/src/app/roleplay/parts/step-summary.tsx +149 -0
- package/src/app/roleplay/rp-session-detail.tsx +176 -0
- package/src/app/roleplay/types.ts +61 -0
- package/src/app/roleplay/utils/report-parse.test.ts +268 -0
- package/src/app/roleplay/utils/report-parse.ts +443 -0
- package/src/app/roleplay/utils/session-utils.ts +215 -0
- package/src/atoms/heading.tsx +19 -3
- package/src/atoms/typo.tsx +19 -3
- package/src/constrant/trainingLog.dummy.json +1 -0
- package/src/utils/clamp-style.ts +17 -0
- package/src/utils/index.ts +2 -1
- package/dist/chunk-U7PMCTVQ.js +0 -1
- package/dist/chunk-YIVIBIK2.js.map +0 -1
- package/dist/chunk-YXFHD2PY.js.map +0 -1
- /package/dist/{chunk-U7PMCTVQ.js.map → app/roleplay/chart/session-chart.js.map} +0 -0
- /package/dist/{chunk-7XMPNH2X.js.map → chunk-3DZIX4CE.js.map} +0 -0
- /package/dist/{chunk-XFFVIWAD.js.map → chunk-47QYYEMG.js.map} +0 -0
- /package/dist/{chunk-VVJEXKCB.js.map → chunk-4GH4R4VJ.js.map} +0 -0
- /package/dist/{chunk-MTESLX7K.js.map → chunk-5IGBFB67.js.map} +0 -0
- /package/dist/{chunk-LXL7GJUM.js.map → chunk-5RIAIE2J.js.map} +0 -0
- /package/dist/{chunk-R43F6ZWT.js.map → chunk-64DSUMXA.js.map} +0 -0
- /package/dist/{chunk-C2FRAZT2.js.map → chunk-6OT5OYGM.js.map} +0 -0
- /package/dist/{chunk-6Q26H64H.js.map → chunk-74PR3ZWJ.js.map} +0 -0
- /package/dist/{chunk-IA4WXGVH.js.map → chunk-75EY7LBP.js.map} +0 -0
- /package/dist/{chunk-77YN5S26.js.map → chunk-AELKCD6B.js.map} +0 -0
- /package/dist/{chunk-L5WSNVSD.js.map → chunk-AHYOAFOU.js.map} +0 -0
- /package/dist/{chunk-6JPGF4MB.js.map → chunk-AT5PAJLW.js.map} +0 -0
- /package/dist/{chunk-P6YCD2AV.js.map → chunk-C4INJWFV.js.map} +0 -0
- /package/dist/{chunk-SGJBQKUD.js.map → chunk-C6HO3IGE.js.map} +0 -0
- /package/dist/{chunk-7NBGSPZU.js.map → chunk-CBYIPRND.js.map} +0 -0
- /package/dist/{chunk-UIMDXYPP.js.map → chunk-CGLDFUOY.js.map} +0 -0
- /package/dist/{chunk-DUXYDGHX.js.map → chunk-CUS3ORMD.js.map} +0 -0
- /package/dist/{chunk-UILGIMXL.js.map → chunk-D4U2ZV2A.js.map} +0 -0
- /package/dist/{chunk-PRLNOTMV.js.map → chunk-DPMDQA3O.js.map} +0 -0
- /package/dist/{chunk-6XASFDTI.js.map → chunk-EJXZXUD2.js.map} +0 -0
- /package/dist/{chunk-QFSMOKC6.js.map → chunk-FAL6S2XK.js.map} +0 -0
- /package/dist/{chunk-GMEGTXIV.js.map → chunk-FJEDSUGU.js.map} +0 -0
- /package/dist/{chunk-WLG6GG26.js.map → chunk-G3KQN32M.js.map} +0 -0
- /package/dist/{chunk-72ZC7DBY.js.map → chunk-GNB4A34H.js.map} +0 -0
- /package/dist/{chunk-KEFAYPBO.js.map → chunk-IRFNKOKQ.js.map} +0 -0
- /package/dist/{chunk-5BIICWFT.js.map → chunk-ISSUGCCY.js.map} +0 -0
- /package/dist/{chunk-PZDN6K6R.js.map → chunk-JCZXPONS.js.map} +0 -0
- /package/dist/{chunk-7TRT4QTP.js.map → chunk-K4RZTENM.js.map} +0 -0
- /package/dist/{chunk-Z54XTEAF.js.map → chunk-KDS7OQOY.js.map} +0 -0
- /package/dist/{chunk-YCV3HR4J.js.map → chunk-LAGJDIVU.js.map} +0 -0
- /package/dist/{chunk-3UJEOHQT.js.map → chunk-LK2H4QTJ.js.map} +0 -0
- /package/dist/{chunk-UHAMISMF.js.map → chunk-LRNO4W2P.js.map} +0 -0
- /package/dist/{chunk-5FLPPHUZ.js.map → chunk-MQKIIIBW.js.map} +0 -0
- /package/dist/{chunk-6YPAN4D3.js.map → chunk-N242VJOP.js.map} +0 -0
- /package/dist/{chunk-PWUCBBQP.js.map → chunk-N3FMP27I.js.map} +0 -0
- /package/dist/{chunk-NIMF5FJI.js.map → chunk-NK6S7ZMB.js.map} +0 -0
- /package/dist/{chunk-IIA2BVJI.js.map → chunk-NVRVOTWZ.js.map} +0 -0
- /package/dist/{chunk-GTTZJ2Y7.js.map → chunk-O332K3SW.js.map} +0 -0
- /package/dist/{chunk-LCR5R743.js.map → chunk-OOM522XP.js.map} +0 -0
- /package/dist/{chunk-FIQJUO66.js.map → chunk-OPIVSYLN.js.map} +0 -0
- /package/dist/{chunk-SQZVLRUH.js.map → chunk-OUDDTPEN.js.map} +0 -0
- /package/dist/{chunk-URSBI6BQ.js.map → chunk-OW2QNTK3.js.map} +0 -0
- /package/dist/{chunk-GBT2BBZS.js.map → chunk-P2H3VCIB.js.map} +0 -0
- /package/dist/{chunk-TF3RLGKA.js.map → chunk-P4DJ5F6Z.js.map} +0 -0
- /package/dist/{chunk-YWLFDIBP.js.map → chunk-PAUEQXYG.js.map} +0 -0
- /package/dist/{chunk-XOCVP6IW.js.map → chunk-Q2FDF2AB.js.map} +0 -0
- /package/dist/{chunk-VFWRW7TA.js.map → chunk-QLNAAZJX.js.map} +0 -0
- /package/dist/{chunk-C5CEDLV6.js.map → chunk-QLOYGKKM.js.map} +0 -0
- /package/dist/{chunk-DDYPJWZV.js.map → chunk-RBU2TRYY.js.map} +0 -0
- /package/dist/{chunk-FFGGO6E4.js.map → chunk-RRC4WFG3.js.map} +0 -0
- /package/dist/{chunk-5SXTL6NO.js.map → chunk-RWJUXAFY.js.map} +0 -0
- /package/dist/{chunk-BZVA4RGI.js.map → chunk-S4MEMFKG.js.map} +0 -0
- /package/dist/{chunk-PTUL6MDB.js.map → chunk-SINRU2A6.js.map} +0 -0
- /package/dist/{chunk-UA2HDDD4.js.map → chunk-SOKGYD5B.js.map} +0 -0
- /package/dist/{chunk-BZCUF5K6.js.map → chunk-SQ3FYBJT.js.map} +0 -0
- /package/dist/{chunk-5FXPD4NE.js.map → chunk-U2EAXN3Y.js.map} +0 -0
- /package/dist/{chunk-B7SKF5RD.js.map → chunk-U7HF53KK.js.map} +0 -0
- /package/dist/{chunk-Z2U2YQOG.js.map → chunk-USL6PICI.js.map} +0 -0
- /package/dist/{chunk-DHP7LYK7.js.map → chunk-UXH2XIB2.js.map} +0 -0
- /package/dist/{chunk-U5LZO2EI.js.map → chunk-V7KAHLW2.js.map} +0 -0
- /package/dist/{chunk-VYUQXEXS.js.map → chunk-VBXZIIUA.js.map} +0 -0
- /package/dist/{chunk-IYAN33WP.js.map → chunk-VVWQZK5L.js.map} +0 -0
- /package/dist/{chunk-DBXQFZBB.js.map → chunk-WLKK5L3P.js.map} +0 -0
- /package/dist/{chunk-ANFQJ6YW.js.map → chunk-WYHDQK2S.js.map} +0 -0
- /package/dist/{chunk-RVHE3UVN.js.map → chunk-X3TBEGPA.js.map} +0 -0
- /package/dist/{chunk-AEDSRBBB.js.map → chunk-XWHBJY5V.js.map} +0 -0
- /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-
|
|
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-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,WAAW,SAAS,QAAQ,gBAAgB;AAyGvC,SACc,KADd;AAtFd,SAAe,WACb,KACA,MACA,UAC6B;AAAA;AAC7B,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI,CAAC,SAAU,QAAO;AACtB,QAAI;AACF,aAAO,MAAM,SAAS,KAAK,EAAE,aAAa,KAAK,CAAC;AAAA,IAClD,SAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiD;AAzCjD;AA0CE,QAAM,WAAW,OAAyB,IAAI;AAC9C,QAAM,WAAW,OAAyB,IAAI;AAE9C,QAAM,WAAW,QAAQ,OAAO,gBAAgB;AAChD,QAAM,WAAW,QAAQ,OAAO,gBAAgB;AAEhD,QAAM,CAAC,KAAK,MAAM,IAAI,SAAoB,WAAW,UAAU,OAAO;AACtE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAI,UAAwB,YAAO,qBAAP,YAA2B,IAAI;AACvF,QAAM,CAAC,UAAU,WAAW,IAAI,UAAwB,YAAO,qBAAP,YAA2B,IAAI;AAEvF,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAA6B,MAAS;AACtF,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAA6B,MAAS;AAEtF,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,SAAK,WAAW,OAAO,kBAAkB,UAAU,iBAAiB,EAAE;AAAA,MACpE;AAAA,IACF;AACA,SAAK,WAAW,OAAO,kBAAkB,UAAU,iBAAiB,EAAE;AAAA,MACpE;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,kBAAkB,OAAO,kBAAkB,iBAAiB,CAAC;AAE9E,QAAM,QAAQ,QAAQ,MAAG;AAlE3B,QAAAA;AAkE8B,YAAAA,MAAA,iCAAQ,UAAR,OAAAA,MAAiB,CAAC;AAAA,KAAG,CAAC,iCAAQ,KAAK,CAAC;AAChE,QAAM,cAAc,QAAQ,MAAM,mBAAmB,KAAK,GAAG,CAAC,KAAK,CAAC;AACpE,QAAM,WAAU,sCAAQ,eAAR,YAAsB,KAAK;AAE3C,QAAM,UACJ,QAAQ,UACJ,YAAY,cAAc,UAAU,MAAM,IAC1C,YAAY,cAAc,UAAU,MAAM;AAEhD,QAAM,iBAAiB,QAAQ,UAAU,WAAW;AAEpD,QAAM,aAAa,CAAC,YAA0B;AAC5C,QAAI,CAAC,QAAS;AACd,UAAM,KAAK,eAAe;AAC1B,QAAI,CAAC,GAAI;AACT,OAAG,cAAc,UAAU;AAC3B,SAAK,GAAG,KAAK;AAAA,EACf;AAEA,QAAM,mBAAmB,MAAY;AACnC,UAAM,KAAK,eAAe;AAC1B,QAAI,IAAI;AACN,mBAAa,GAAG,cAAc,GAAI;AAAA,IACpC;AAAA,EACF;AAEA,SACE,oBAAC,OAAO,MAAP,EAAY,cAA4B,MACvC,8BAAC,OAAO,SAAP,EAAe,UAAS,UAAS,OAAM,yCAAU,OAAM,QACtD;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,EAAE,SAAS,KAAK,IAAI,mCAAmC;AAAA,MAChE,KAAI;AAAA,MACJ,IAAG;AAAA,MAEH;AAAA,4BAAC,OACC;AAAA,UAAC,KAAK;AAAA,UAAL;AAAA,YACC,eAAe,CAAC,MAAM;AACpB,qBAAO,CAAc;AAAA,YACvB;AAAA,YACA,OAAO;AAAA,YAEP;AAAA,mCAAC,KAAK,MAAL,EACE;AAAA,2BAAW,oBAAC,KAAK,SAAL,EAAa,OAAM,SAAQ,0BAAE,IAAkB;AAAA,gBAC3D,WAAW,oBAAC,KAAK,SAAL,EAAa,OAAM,SAAQ,gCAAG,IAAkB;AAAA,iBAC/D;AAAA,cACC,WACC,oBAAC,KAAK,SAAL,EAAa,OAAM,SAClB;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAG;AAAA,kBACH,OAAO;AAAA,oBACL,cAAc;AAAA,oBACd,UAAU;AAAA,oBACV,YAAY;AAAA,kBACd;AAAA,kBAGA;AAAA,oBAAC;AAAA;AAAA,sBACC,UAAQ;AAAA,sBACR,kBAAkB,MAAM;AA5H9C,4BAAAA,KAAAC;AA6HwB,qCAAYA,OAAAD,MAAA,SAAS,YAAT,gBAAAA,IAAkB,aAAlB,OAAAC,MAA8B,IAAI;AAAA,sBAChD;AAAA,sBACA,cAAc;AAAA,sBACd,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,OAAO,EAAE,OAAO,QAAQ,SAAS,SAAS,WAAW,IAAI;AAAA;AAAA,kBAC3D;AAAA;AAAA,cACF,GACF,IACE;AAAA,cACH,WACC,oBAAC,KAAK,SAAL,EAAa,OAAM,SAClB,8BAAC,OAAI,IAAG,KAEN;AAAA,gBAAC;AAAA;AAAA,kBACC,UAAQ;AAAA,kBACR,kBAAkB,MAAM;AA7I9C,wBAAAD,KAAAC;AA8IwB,iCAAYA,OAAAD,MAAA,SAAS,YAAT,gBAAAA,IAAkB,aAAlB,OAAAC,MAA8B,IAAI;AAAA,kBAChD;AAAA,kBACA,cAAc;AAAA,kBACd,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,OAAO,EAAE,OAAO,OAAO;AAAA;AAAA,cACzB,GACF,GACF,IACE;AAAA;AAAA;AAAA,QACN,GACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR,aAAa,OAAO;AAAA,YACpB;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF,GACF,GACF;AAEJ;","names":["_a","_b"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
curriculum_item_title_default
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
29
|
+
//# sourceMappingURL=chunk-47QYYEMG.js.map
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DatePickerButton
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AT5PAJLW.js";
|
|
4
4
|
import {
|
|
5
5
|
Form
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
9
|
+
} from "./chunk-RWJUXAFY.js";
|
|
10
10
|
import {
|
|
11
11
|
Typo
|
|
12
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
57
|
+
//# sourceMappingURL=chunk-64DSUMXA.js.map
|