@tipp/ui 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/index.cjs +1291 -837
- package/dist/app/index.cjs.map +1 -1
- package/dist/app/index.js +122 -121
- package/dist/app/platform/coach-question-list.cjs +822 -364
- package/dist/app/platform/coach-question-list.cjs.map +1 -1
- package/dist/app/platform/coach-question-list.js +48 -46
- package/dist/app/platform/contents-card.cjs +815 -357
- package/dist/app/platform/contents-card.cjs.map +1 -1
- package/dist/app/platform/contents-card.js +48 -46
- package/dist/app/platform/curriculum-card.cjs +65 -13
- package/dist/app/platform/curriculum-card.cjs.map +1 -1
- package/dist/app/platform/curriculum-card.js +7 -6
- package/dist/app/platform/edit-coaching-time.cjs +1012 -558
- package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
- package/dist/app/platform/edit-coaching-time.js +97 -96
- package/dist/app/platform/edit-service-type.cjs +995 -541
- package/dist/app/platform/edit-service-type.cjs.map +1 -1
- package/dist/app/platform/edit-service-type.js +98 -97
- package/dist/app/platform/goal-manage-card-edit.cjs +991 -537
- package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-edit.js +97 -96
- package/dist/app/platform/goal-manage-card-read.cjs +865 -407
- package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-read.js +48 -46
- package/dist/app/platform/on-offline-radio-card.cjs +785 -331
- package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
- package/dist/app/platform/on-offline-radio-card.js +97 -96
- package/dist/app/platform/report-card.cjs +828 -370
- package/dist/app/platform/report-card.cjs.map +1 -1
- package/dist/app/platform/report-card.js +48 -46
- package/dist/app/platform/reservation-card.cjs +1016 -562
- package/dist/app/platform/reservation-card.cjs.map +1 -1
- package/dist/app/platform/reservation-card.js +98 -97
- package/dist/app/platform/session-card.cjs +1069 -615
- package/dist/app/platform/session-card.cjs.map +1 -1
- package/dist/app/platform/session-card.js +100 -99
- package/dist/app/platform/session-review-simple-read.cjs +825 -367
- package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
- package/dist/app/platform/session-review-simple-read.js +48 -46
- package/dist/app/platform/userInfos/coaching-customer-info/index.cjs +857 -399
- package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/index.js +54 -52
- package/dist/app/platform/userInfos/coaching-customer-info/large.cjs +833 -375
- package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/large.js +49 -47
- package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs +836 -378
- package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/medium.js +49 -47
- package/dist/app/platform/userInfos/coaching-customer-info/small.cjs +823 -365
- package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/small.js +48 -46
- package/dist/app/platform/userInfos/session-user-info-detail.cjs +832 -374
- package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
- package/dist/app/platform/userInfos/session-user-info-detail.js +49 -47
- package/dist/app/platform/userInfos/utils.cjs +824 -366
- package/dist/app/platform/userInfos/utils.cjs.map +1 -1
- package/dist/app/platform/userInfos/utils.js +48 -46
- package/dist/atoms/alert-dialog.cjs +85 -1
- package/dist/atoms/alert-dialog.cjs.map +1 -1
- package/dist/atoms/alert-dialog.d.cts +18 -2
- package/dist/atoms/alert-dialog.d.ts +18 -2
- package/dist/atoms/alert-dialog.js +3 -1
- package/dist/atoms/aspect-ratio.d.cts +1 -0
- package/dist/atoms/aspect-ratio.d.ts +1 -0
- package/dist/atoms/avatar.cjs +39 -2
- package/dist/atoms/avatar.cjs.map +1 -1
- package/dist/atoms/avatar.d.cts +5 -2
- package/dist/atoms/avatar.d.ts +5 -2
- package/dist/atoms/avatar.js +2 -1
- package/dist/atoms/badge.cjs +34 -9
- package/dist/atoms/badge.cjs.map +1 -1
- package/dist/atoms/badge.d.cts +4 -5
- package/dist/atoms/badge.d.ts +4 -5
- package/dist/atoms/badge.js +2 -1
- package/dist/atoms/blockquote.cjs +71 -1
- package/dist/atoms/blockquote.cjs.map +1 -1
- package/dist/atoms/blockquote.d.cts +12 -1
- package/dist/atoms/blockquote.d.ts +12 -1
- package/dist/atoms/blockquote.js +2 -1
- package/dist/atoms/bullet-text.cjs +39 -2
- package/dist/atoms/bullet-text.cjs.map +1 -1
- package/dist/atoms/bullet-text.d.cts +1 -0
- package/dist/atoms/bullet-text.d.ts +1 -0
- package/dist/atoms/bullet-text.js +4 -3
- package/dist/atoms/button.cjs +33 -3
- package/dist/atoms/button.cjs.map +1 -1
- package/dist/atoms/button.d.cts +5 -3
- package/dist/atoms/button.d.ts +5 -3
- package/dist/atoms/button.js +2 -1
- package/dist/atoms/button.type.cjs.map +1 -1
- package/dist/atoms/button.type.d.cts +3 -1
- package/dist/atoms/button.type.d.ts +3 -1
- package/dist/atoms/call-out.cjs +78 -1
- package/dist/atoms/call-out.cjs.map +1 -1
- package/dist/atoms/call-out.d.cts +13 -1
- package/dist/atoms/call-out.d.ts +13 -1
- package/dist/atoms/call-out.js +2 -1
- package/dist/atoms/check-box-card.cjs +78 -1
- package/dist/atoms/check-box-card.cjs.map +1 -1
- package/dist/atoms/check-box-card.d.cts +12 -1
- package/dist/atoms/check-box-card.d.ts +12 -1
- package/dist/atoms/check-box-card.js +2 -1
- package/dist/atoms/check-box-group.cjs +40 -2
- package/dist/atoms/check-box-group.cjs.map +1 -1
- package/dist/atoms/check-box-group.d.cts +6 -0
- package/dist/atoms/check-box-group.d.ts +6 -0
- package/dist/atoms/check-box-group.js +2 -1
- package/dist/atoms/check-box.cjs +37 -2
- package/dist/atoms/check-box.cjs.map +1 -1
- package/dist/atoms/check-box.d.cts +5 -2
- package/dist/atoms/check-box.d.ts +5 -2
- package/dist/atoms/check-box.js +2 -1
- package/dist/atoms/code.cjs +73 -1
- package/dist/atoms/code.cjs.map +1 -1
- package/dist/atoms/code.d.cts +12 -1
- package/dist/atoms/code.d.ts +12 -1
- package/dist/atoms/code.js +2 -1
- package/dist/atoms/data-list.cjs +77 -1
- package/dist/atoms/data-list.cjs.map +1 -1
- package/dist/atoms/data-list.d.cts +14 -1
- package/dist/atoms/data-list.d.ts +14 -1
- package/dist/atoms/data-list.js +2 -1
- package/dist/atoms/dialog.cjs +49 -6
- package/dist/atoms/dialog.cjs.map +1 -1
- package/dist/atoms/dialog.js +4 -3
- package/dist/atoms/drawer.cjs +33 -3
- package/dist/atoms/drawer.cjs.map +1 -1
- package/dist/atoms/drawer.js +3 -2
- package/dist/atoms/dropdown-menu.cjs +63 -12
- package/dist/atoms/dropdown-menu.cjs.map +1 -1
- package/dist/atoms/dropdown-menu.d.cts +27 -17
- package/dist/atoms/dropdown-menu.d.ts +27 -17
- package/dist/atoms/dropdown-menu.js +3 -1
- package/dist/atoms/ellipsis-tooltip.cjs +73 -22
- package/dist/atoms/ellipsis-tooltip.cjs.map +1 -1
- package/dist/atoms/ellipsis-tooltip.d.cts +1 -0
- package/dist/atoms/ellipsis-tooltip.d.ts +1 -0
- package/dist/atoms/ellipsis-tooltip.js +5 -3
- package/dist/atoms/field-error-wrapper.cjs +39 -2
- package/dist/atoms/field-error-wrapper.cjs.map +1 -1
- package/dist/atoms/field-error-wrapper.js +4 -3
- package/dist/atoms/heading.cjs +38 -2
- package/dist/atoms/heading.cjs.map +1 -1
- package/dist/atoms/heading.d.cts +3 -1
- package/dist/atoms/heading.d.ts +3 -1
- package/dist/atoms/heading.js +2 -1
- package/dist/atoms/hover-card.cjs +85 -1
- package/dist/atoms/hover-card.cjs.map +1 -1
- package/dist/atoms/hover-card.d.cts +14 -1
- package/dist/atoms/hover-card.d.ts +14 -1
- package/dist/atoms/hover-card.js +3 -1
- package/dist/atoms/icon-button.cjs +33 -3
- package/dist/atoms/icon-button.cjs.map +1 -1
- package/dist/atoms/icon-button.d.cts +5 -3
- package/dist/atoms/icon-button.d.ts +5 -3
- package/dist/atoms/icon-button.js +2 -1
- package/dist/atoms/index.cjs +996 -506
- package/dist/atoms/index.cjs.map +1 -1
- package/dist/atoms/index.d.cts +18 -2
- package/dist/atoms/index.d.ts +18 -2
- package/dist/atoms/index.js +81 -79
- package/dist/atoms/link.cjs +40 -2
- package/dist/atoms/link.cjs.map +1 -1
- package/dist/atoms/link.d.cts +3 -1
- package/dist/atoms/link.d.ts +3 -1
- package/dist/atoms/link.js +2 -1
- package/dist/atoms/list.cjs +43 -4
- package/dist/atoms/list.cjs.map +1 -1
- package/dist/atoms/list.js +4 -3
- package/dist/atoms/pagination.cjs +100 -42
- package/dist/atoms/pagination.cjs.map +1 -1
- package/dist/atoms/pagination.d.cts +4 -0
- package/dist/atoms/pagination.d.ts +4 -0
- package/dist/atoms/pagination.js +5 -4
- package/dist/atoms/popover.cjs +85 -1
- package/dist/atoms/popover.cjs.map +1 -1
- package/dist/atoms/popover.d.cts +16 -1
- package/dist/atoms/popover.d.ts +16 -1
- package/dist/atoms/popover.js +3 -1
- package/dist/atoms/progress.cjs +71 -1
- package/dist/atoms/progress.cjs.map +1 -1
- package/dist/atoms/progress.d.cts +12 -1
- package/dist/atoms/progress.d.ts +12 -1
- package/dist/atoms/progress.js +2 -1
- package/dist/atoms/radio-cards.cjs +78 -1
- package/dist/atoms/radio-cards.cjs.map +1 -1
- package/dist/atoms/radio-cards.d.cts +12 -1
- package/dist/atoms/radio-cards.d.ts +12 -1
- package/dist/atoms/radio-cards.js +2 -1
- package/dist/atoms/radio-group.cjs +78 -1
- package/dist/atoms/radio-group.cjs.map +1 -1
- package/dist/atoms/radio-group.d.cts +12 -1
- package/dist/atoms/radio-group.d.ts +12 -1
- package/dist/atoms/radio-group.js +2 -1
- package/dist/atoms/radio.cjs +71 -1
- package/dist/atoms/radio.cjs.map +1 -1
- package/dist/atoms/radio.d.cts +12 -1
- package/dist/atoms/radio.d.ts +12 -1
- package/dist/atoms/radio.js +2 -1
- package/dist/atoms/segmented-control.cjs.map +1 -1
- package/dist/atoms/segmented-control.js +1 -1
- package/dist/atoms/select.cjs +78 -24
- package/dist/atoms/select.cjs.map +1 -1
- package/dist/atoms/select.d.cts +14 -4
- package/dist/atoms/select.d.ts +14 -4
- package/dist/atoms/select.js +3 -1
- package/dist/atoms/switch.cjs +71 -1
- package/dist/atoms/switch.cjs.map +1 -1
- package/dist/atoms/switch.d.cts +12 -1
- package/dist/atoms/switch.d.ts +12 -1
- package/dist/atoms/switch.js +2 -1
- package/dist/atoms/tab-nav.cjs +76 -1
- package/dist/atoms/tab-nav.cjs.map +1 -1
- package/dist/atoms/tab-nav.d.cts +16 -1
- package/dist/atoms/tab-nav.d.ts +16 -1
- package/dist/atoms/tab-nav.js +2 -1
- package/dist/atoms/tabs.cjs +76 -1
- package/dist/atoms/tabs.cjs.map +1 -1
- package/dist/atoms/tabs.d.cts +19 -1
- package/dist/atoms/tabs.d.ts +19 -1
- package/dist/atoms/tabs.js +2 -1
- package/dist/atoms/tooltip.cjs +46 -9
- package/dist/atoms/tooltip.cjs.map +1 -1
- package/dist/atoms/tooltip.js +3 -1
- package/dist/atoms/typo.cjs +39 -2
- package/dist/atoms/typo.cjs.map +1 -1
- package/dist/atoms/typo.d.cts +3 -1
- package/dist/atoms/typo.d.ts +3 -1
- package/dist/atoms/typo.js +2 -1
- package/dist/chunk-24PX34TH.js +42 -0
- package/dist/chunk-24PX34TH.js.map +1 -0
- package/dist/{chunk-GGLDVUYU.js → chunk-2FB75HU2.js} +5 -5
- package/dist/{chunk-7ITDAUWI.js → chunk-2I37QLRA.js} +15 -15
- package/dist/{chunk-ZVDAEY5Q.js → chunk-2LCH3PDF.js} +14 -4
- package/dist/chunk-2LCH3PDF.js.map +1 -0
- package/dist/{chunk-3NUQAVE6.js → chunk-2M3UFZUD.js} +15 -2
- package/dist/chunk-2M3UFZUD.js.map +1 -0
- package/dist/{chunk-PXPGCDNA.js → chunk-2O7NVLVP.js} +5 -5
- package/dist/{chunk-NZ6ONU5Z.js → chunk-2SM37SB4.js} +13 -13
- package/dist/{chunk-NLW32DPB.js → chunk-2WNLUQX5.js} +11 -11
- package/dist/chunk-3TOUVBIB.js +34 -0
- package/dist/chunk-3TOUVBIB.js.map +1 -0
- package/dist/{chunk-XBOSNFUM.js → chunk-447H6BVE.js} +6 -6
- package/dist/{chunk-5V6MQUTB.js → chunk-5OW76AER.js} +2 -2
- package/dist/chunk-6TU647KJ.js +37 -0
- package/dist/chunk-6TU647KJ.js.map +1 -0
- package/dist/{chunk-44VLRAHW.js → chunk-6YJGQWD6.js} +12 -12
- package/dist/{chunk-KCCYHT23.js → chunk-7JW5Z2TL.js} +4 -4
- package/dist/{chunk-JZVK4NDF.js → chunk-7PBLFV5L.js} +5 -5
- package/dist/{chunk-XK6VEVOK.js → chunk-7RJYF5L3.js} +14 -4
- package/dist/chunk-7RJYF5L3.js.map +1 -0
- package/dist/{chunk-UXVM3Y7P.js → chunk-A26UWBVB.js} +5 -5
- package/dist/{chunk-HJP4STJZ.js → chunk-A4YOY75P.js} +5 -5
- package/dist/{chunk-LSDD4TAP.js → chunk-AJTGTGOC.js} +3 -3
- package/dist/chunk-BI6TW3ZO.js +51 -0
- package/dist/chunk-BI6TW3ZO.js.map +1 -0
- package/dist/chunk-BK74U562.js +52 -0
- package/dist/chunk-BK74U562.js.map +1 -0
- package/dist/{chunk-JWAQUXGB.js → chunk-BZ3EXV6A.js} +3 -3
- package/dist/{chunk-QRI6ARS6.js → chunk-C2G3IB7G.js} +4 -4
- package/dist/chunk-CGDBUDY3.js +37 -0
- package/dist/chunk-CGDBUDY3.js.map +1 -0
- package/dist/chunk-DX3DLP5Z.js +39 -0
- package/dist/chunk-DX3DLP5Z.js.map +1 -0
- package/dist/{chunk-4U6DFH7Z.js → chunk-E6GCU5IQ.js} +2 -2
- package/dist/chunk-EIKFXUNC.js +39 -0
- package/dist/chunk-EIKFXUNC.js.map +1 -0
- package/dist/{chunk-CSKNBWPB.js → chunk-EZN5PMTC.js} +3 -3
- package/dist/chunk-EZN5PMTC.js.map +1 -0
- package/dist/{chunk-VRJR534I.js → chunk-GAA3RTRW.js} +4 -4
- package/dist/{chunk-VY557FHE.js → chunk-GE4M5GOQ.js} +4 -4
- package/dist/chunk-GI4AN2IZ.js +42 -0
- package/dist/chunk-GI4AN2IZ.js.map +1 -0
- package/dist/{chunk-OUJAPQS2.js → chunk-GPULIICW.js} +11 -11
- package/dist/{chunk-K36TPMKL.js → chunk-GPZXD762.js} +18 -3
- package/dist/chunk-GPZXD762.js.map +1 -0
- package/dist/{chunk-PMJIFLDT.js → chunk-GR4PG6HY.js} +20 -3
- package/dist/chunk-GR4PG6HY.js.map +1 -0
- package/dist/{chunk-7PF6I4RN.js → chunk-GRDRXD53.js} +2 -2
- package/dist/{chunk-TJKS6CLU.js → chunk-GREYLAMY.js} +6 -6
- package/dist/{chunk-VREM33BW.js → chunk-GYSRHZRS.js} +8 -8
- package/dist/{chunk-2TYR2RDO.js → chunk-H3GQHGFA.js} +8 -8
- package/dist/{chunk-KMVSJT6Y.js → chunk-HH6LML5K.js} +10 -10
- package/dist/{chunk-HQATHJBN.js → chunk-IA74OBFY.js} +58 -41
- package/dist/chunk-IA74OBFY.js.map +1 -0
- package/dist/{chunk-J62KAMQL.js → chunk-IM6E52L2.js} +10 -10
- package/dist/{chunk-TVDKGMBI.js → chunk-IT7ZTP7F.js} +1 -1
- package/dist/chunk-IT7ZTP7F.js.map +1 -0
- package/dist/{chunk-5LRFDSG2.js → chunk-J7N2IZQW.js} +6 -6
- package/dist/{chunk-EEAHZCIK.js → chunk-JCUG2XKB.js} +2 -2
- package/dist/chunk-JETG3WEI.js +39 -0
- package/dist/chunk-JETG3WEI.js.map +1 -0
- package/dist/{chunk-4LUFF5LX.js → chunk-JNEGSY5N.js} +3 -3
- package/dist/{chunk-CQSM6JCO.js → chunk-K3Q4XLCN.js} +4 -4
- package/dist/chunk-KNIIDDYM.js +34 -0
- package/dist/chunk-KNIIDDYM.js.map +1 -0
- package/dist/{chunk-4TST4UK5.js → chunk-KO3V7KB6.js} +2 -2
- package/dist/{chunk-3U6FXC6R.js → chunk-LIWQ47VQ.js} +11 -11
- package/dist/{chunk-2ZSK45QM.js → chunk-LQ3WGFS7.js} +9 -9
- package/dist/{chunk-A7LYIUE7.js → chunk-M77YPVQN.js} +7 -7
- package/dist/{chunk-P4KO43AP.js → chunk-MCKWO7K4.js} +5 -5
- package/dist/{chunk-G7NEBNHU.js → chunk-MGR37YQB.js} +6 -6
- package/dist/{chunk-QDC3LFHS.js → chunk-MMLVZWMD.js} +3 -3
- package/dist/{chunk-D4JZHM4J.js → chunk-MP5KZULQ.js} +10 -10
- package/dist/{chunk-WMWXF44S.js → chunk-MSLSD7F6.js} +5 -5
- package/dist/{chunk-JUDD3XGY.js → chunk-MSM2QG23.js} +9 -9
- package/dist/{chunk-NVQSH733.js → chunk-NFMEBYNY.js} +5 -5
- package/dist/{chunk-7ZMY4CAZ.js → chunk-NIHOKIYW.js} +6 -6
- package/dist/{chunk-BESTU2AY.js → chunk-NLHVQJQ2.js} +19 -3
- package/dist/chunk-NLHVQJQ2.js.map +1 -0
- package/dist/{chunk-3GQQQBJN.js → chunk-NYG34MV6.js} +6 -6
- package/dist/{chunk-XF7FPCS7.js → chunk-OA3DGWVL.js} +15 -15
- package/dist/{chunk-F5IXHUBI.js → chunk-OBWQ3N5D.js} +12 -12
- package/dist/{chunk-HVXBZGLT.js → chunk-OEHVGPWL.js} +16 -16
- package/dist/chunk-OLJN3WXR.js +1 -0
- package/dist/{chunk-WE3TWSC4.js → chunk-OPYRV6XJ.js} +5 -5
- package/dist/{chunk-WFOIY6OR.js → chunk-OQN4E2QP.js} +4 -4
- package/dist/{chunk-HZ7HETUI.js → chunk-OWQUXTQ2.js} +4 -4
- package/dist/{chunk-7I7PZF5L.js → chunk-OYXUWBKS.js} +3 -3
- package/dist/{chunk-D3KCPM4O.js → chunk-PE4EBBU4.js} +5 -5
- package/dist/{chunk-3GGJWSFK.js → chunk-PXMJK5D5.js} +10 -10
- package/dist/{chunk-Y4U24VXI.js → chunk-Q3M6GFHY.js} +3 -3
- package/dist/{chunk-GFURX6GB.js → chunk-QPL7SJQM.js} +5 -5
- package/dist/{chunk-YAUOAWYS.js → chunk-RMVVV5NH.js} +6 -6
- package/dist/chunk-RMW3MQF5.js +42 -0
- package/dist/chunk-RMW3MQF5.js.map +1 -0
- package/dist/{chunk-RPV3QPQL.js → chunk-RUJZ5PE7.js} +5 -5
- package/dist/chunk-SA7AYYQS.js +39 -0
- package/dist/chunk-SA7AYYQS.js.map +1 -0
- package/dist/{chunk-6J5YZTZE.js → chunk-T2CGNUCP.js} +7 -7
- package/dist/chunk-T73HHR3I.js +67 -0
- package/dist/chunk-T73HHR3I.js.map +1 -0
- package/dist/chunk-TNNF5Q62.js +34 -0
- package/dist/chunk-TNNF5Q62.js.map +1 -0
- package/dist/{chunk-ZUZ5FT4B.js → chunk-TU6SGJ5Z.js} +11 -11
- package/dist/{chunk-5ZEQ33PC.js → chunk-TYEGB5FQ.js} +7 -7
- package/dist/{chunk-5AWPST2R.js → chunk-UFM3EL52.js} +12 -12
- package/dist/chunk-UFRB2BVD.js +34 -0
- package/dist/chunk-UFRB2BVD.js.map +1 -0
- package/dist/chunk-UFWDQGOK.js +36 -0
- package/dist/chunk-UFWDQGOK.js.map +1 -0
- package/dist/{chunk-R3WM6HV6.js → chunk-VD5ZDFCM.js} +5 -5
- package/dist/chunk-VFQD57ZY.js +27 -0
- package/dist/chunk-VFQD57ZY.js.map +1 -0
- package/dist/{chunk-AQVIQODP.js → chunk-VK6INFSB.js} +4 -4
- package/dist/{chunk-W7X7KSJP.js → chunk-WG5OK3YN.js} +19 -3
- package/dist/chunk-WG5OK3YN.js.map +1 -0
- package/dist/{chunk-QFEZIPWJ.js → chunk-WY37V3W4.js} +9 -9
- package/dist/chunk-WYWM2HSZ.js +33 -0
- package/dist/chunk-WYWM2HSZ.js.map +1 -0
- package/dist/{chunk-SDEDXT7A.js → chunk-XOQXIPLL.js} +4 -4
- package/dist/{chunk-DVYTRZOL.js → chunk-YCLYKBWZ.js} +15 -15
- package/dist/{chunk-YW4IN7LP.js → chunk-YGNHAFBW.js} +8 -8
- package/dist/{chunk-APG3GKDT.js → chunk-YWWYA2JZ.js} +11 -11
- package/dist/chunk-YXMB4MCM.js +87 -0
- package/dist/chunk-YXMB4MCM.js.map +1 -0
- package/dist/{chunk-7AMHCTRM.js → chunk-Z5LPHG2D.js} +5 -5
- package/dist/{chunk-GZNELGHF.js → chunk-ZAFLWQOV.js} +10 -10
- package/dist/{chunk-WD5P2N6F.js → chunk-ZC2JPF7B.js} +13 -13
- package/dist/{chunk-VYCYVN3L.js → chunk-ZCGH6TJ3.js} +16 -3
- package/dist/chunk-ZCGH6TJ3.js.map +1 -0
- package/dist/{chunk-UH6Q3TEK.js → chunk-ZCQMCIT5.js} +9 -9
- package/dist/chunk-ZPUNTAVI.js +38 -0
- package/dist/chunk-ZPUNTAVI.js.map +1 -0
- package/dist/{chunk-LT5C6QT7.js → chunk-ZUL3NYQ4.js} +2 -2
- package/dist/{chunk-23QMZC6L.js → chunk-ZWYQ44CB.js} +10 -10
- package/dist/context/dynamic-form-context.cjs +54 -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 +54 -4
- package/dist/context/index.cjs.map +1 -1
- package/dist/context/index.js +8 -7
- package/dist/index.cjs +2131 -1631
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +73 -0
- package/dist/index.d.cts +19 -3
- package/dist/index.d.ts +19 -3
- package/dist/index.js +174 -168
- package/dist/molecules/autocomplete-textfield.cjs +111 -46
- package/dist/molecules/autocomplete-textfield.cjs.map +1 -1
- package/dist/molecules/autocomplete-textfield.js +5 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs +367 -209
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +22 -21
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs +39 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-comp.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.cjs +293 -164
- 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 +16 -15
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.cjs +33 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-footer.js +4 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-header.cjs +85 -19
- 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 +6 -5
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-layout.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-radio.cjs +217 -134
- 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 +10 -9
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-option.cjs +172 -110
- 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 +7 -6
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-satisfaction-text.cjs +39 -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 +6 -5
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-text.cjs +80 -20
- 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 +7 -6
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs +64 -7
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/complete-review.js +6 -5
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs +275 -115
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +26 -25
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs +76 -17
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/start-review.js +8 -7
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs +49 -5
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-ai-traning.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs +49 -5
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-file-download.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs +318 -153
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +29 -28
- package/dist/molecules/curriculumV2/CurriculumContents/index.cjs +346 -181
- package/dist/molecules/curriculumV2/CurriculumContents/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumContents/index.js +33 -32
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs +39 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/curriculum-item-title.js +4 -3
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs +39 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-item.js +5 -4
- package/dist/molecules/curriculumV2/CurriculumSidebar/Items/section-title.cjs +39 -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 +195 -135
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/index.js +10 -9
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs +39 -2
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.cjs.map +1 -1
- package/dist/molecules/curriculumV2/CurriculumSidebar/sidebar-item.js +7 -6
- package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs +65 -8
- package/dist/molecules/curriculumV2/curriculum-sub-nav.cjs.map +1 -1
- package/dist/molecules/curriculumV2/curriculum-sub-nav.js +6 -5
- package/dist/molecules/curriculumV2/curriculum-v2-layout.js +2 -2
- package/dist/molecules/curriculumV2/index.cjs +406 -220
- package/dist/molecules/curriculumV2/index.cjs.map +1 -1
- package/dist/molecules/curriculumV2/index.js +42 -41
- package/dist/molecules/date-picker/date-picker-button.cjs +160 -64
- package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
- package/dist/molecules/date-picker/date-picker-button.d.cts +1 -0
- package/dist/molecules/date-picker/date-picker-button.d.ts +1 -0
- package/dist/molecules/date-picker/date-picker-button.js +11 -9
- package/dist/molecules/date-picker/index.cjs +242 -146
- package/dist/molecules/date-picker/index.cjs.map +1 -1
- package/dist/molecules/date-picker/index.js +10 -8
- package/dist/molecules/description-json-render.cjs +182 -120
- package/dist/molecules/description-json-render.cjs.map +1 -1
- package/dist/molecules/description-json-render.js +7 -6
- package/dist/molecules/download-card.cjs +67 -8
- package/dist/molecules/download-card.cjs.map +1 -1
- package/dist/molecules/download-card.js +6 -5
- package/dist/molecules/dynamic-field.cjs +222 -72
- package/dist/molecules/dynamic-field.cjs.map +1 -1
- package/dist/molecules/dynamic-field.js +13 -11
- package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs +359 -267
- package/dist/molecules/dynamic-form-editor-field-editor-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-field-editor-panel.js +9 -7
- package/dist/molecules/dynamic-form-editor-field-list-panel.cjs +115 -47
- package/dist/molecules/dynamic-form-editor-field-list-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-field-list-panel.js +6 -4
- package/dist/molecules/dynamic-form-editor-issues-panel.cjs +39 -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 +239 -89
- package/dist/molecules/dynamic-form-editor-preview-panel.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor-preview-panel.js +15 -13
- package/dist/molecules/dynamic-form-editor.cjs +571 -407
- package/dist/molecules/dynamic-form-editor.cjs.map +1 -1
- package/dist/molecules/dynamic-form-editor.js +21 -19
- package/dist/molecules/dynamic-form.cjs +235 -85
- package/dist/molecules/dynamic-form.cjs.map +1 -1
- package/dist/molecules/dynamic-form.js +14 -12
- package/dist/molecules/expand-table/index.cjs +100 -42
- package/dist/molecules/expand-table/index.cjs.map +1 -1
- package/dist/molecules/expand-table/index.js +6 -5
- package/dist/molecules/force-refresh.cjs +79 -24
- package/dist/molecules/force-refresh.cjs.map +1 -1
- package/dist/molecules/force-refresh.js +5 -4
- package/dist/molecules/form/form.cjs +54 -4
- package/dist/molecules/form/form.cjs.map +1 -1
- package/dist/molecules/form/form.js +4 -3
- package/dist/molecules/form/index.cjs +54 -4
- package/dist/molecules/form/index.cjs.map +1 -1
- package/dist/molecules/form/index.js +4 -3
- package/dist/molecules/ghost-post.cjs +72 -14
- package/dist/molecules/ghost-post.cjs.map +1 -1
- package/dist/molecules/ghost-post.d.cts +1 -0
- package/dist/molecules/ghost-post.d.ts +1 -0
- package/dist/molecules/ghost-post.js +7 -6
- package/dist/molecules/index.cjs +1334 -989
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.d.cts +1 -0
- package/dist/molecules/index.d.ts +1 -0
- package/dist/molecules/index.js +80 -79
- package/dist/molecules/learning-post.cjs +109 -37
- package/dist/molecules/learning-post.cjs.map +1 -1
- package/dist/molecules/learning-post.d.cts +1 -0
- package/dist/molecules/learning-post.d.ts +1 -0
- package/dist/molecules/learning-post.js +9 -8
- package/dist/molecules/navigation.cjs +49 -5
- package/dist/molecules/navigation.cjs.map +1 -1
- package/dist/molecules/navigation.js +5 -4
- package/dist/molecules/one-on-one-guide-list.cjs +56 -6
- package/dist/molecules/one-on-one-guide-list.cjs.map +1 -1
- package/dist/molecules/one-on-one-guide-list.js +6 -5
- package/dist/molecules/radio-button-card.cjs +77 -13
- package/dist/molecules/radio-button-card.cjs.map +1 -1
- package/dist/molecules/radio-button-card.js +4 -3
- package/dist/molecules/stepper.cjs +55 -4
- package/dist/molecules/stepper.cjs.map +1 -1
- package/dist/molecules/stepper.js +5 -4
- package/dist/molecules/tag-selector.cjs +256 -180
- package/dist/molecules/tag-selector.cjs.map +1 -1
- package/dist/molecules/tag-selector.js +9 -7
- package/dist/molecules/time-select.cjs +180 -126
- package/dist/molecules/time-select.cjs.map +1 -1
- package/dist/molecules/time-select.d.cts +1 -0
- package/dist/molecules/time-select.d.ts +1 -0
- package/dist/molecules/time-select.js +5 -3
- package/dist/molecules/training-info-guideline.cjs +75 -11
- package/dist/molecules/training-info-guideline.cjs.map +1 -1
- package/dist/molecules/training-info-guideline.js +10 -9
- package/dist/theme/theme-provider.cjs +53 -1
- package/dist/theme/theme-provider.cjs.map +1 -1
- package/dist/theme/theme-provider.d.cts +18 -2
- package/dist/theme/theme-provider.d.ts +18 -2
- package/dist/theme/theme-provider.js +4 -1
- package/dist/utils/convert-button-size.d.cts +1 -0
- package/dist/utils/convert-button-size.d.ts +1 -0
- package/dist/utils/convert-icon-button-size.d.cts +1 -0
- package/dist/utils/convert-icon-button-size.d.ts +1 -0
- package/dist/utils/index.cjs +25 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +5 -1
- package/dist/utils/resolve-color.cjs +51 -0
- package/dist/utils/resolve-color.cjs.map +1 -0
- package/dist/utils/resolve-color.d.cts +38 -0
- package/dist/utils/resolve-color.d.ts +38 -0
- package/dist/utils/resolve-color.js +8 -0
- package/dist/utils/resolve-color.js.map +1 -0
- package/package.json +1 -1
- package/src/atoms/alert-dialog.tsx +38 -1
- package/src/atoms/avatar.tsx +18 -3
- package/src/atoms/badge.tsx +15 -22
- package/src/atoms/blockquote.tsx +31 -1
- package/src/atoms/button.tsx +12 -3
- package/src/atoms/button.type.ts +6 -1
- package/src/atoms/call-out.tsx +48 -1
- package/src/atoms/check-box-card.tsx +51 -1
- package/src/atoms/check-box-group.tsx +19 -2
- package/src/atoms/check-box.tsx +17 -3
- package/src/atoms/code.tsx +31 -1
- package/src/atoms/data-list.tsx +47 -1
- package/src/atoms/dropdown-menu.tsx +53 -6
- package/src/atoms/heading.tsx +22 -4
- package/src/atoms/hover-card.tsx +37 -1
- package/src/atoms/icon-button.tsx +12 -3
- package/src/atoms/link.tsx +21 -3
- package/src/atoms/pagination.tsx +21 -2
- package/src/atoms/popover.tsx +37 -1
- package/src/atoms/progress.tsx +31 -1
- package/src/atoms/radio-cards.tsx +49 -1
- package/src/atoms/radio-group.tsx +49 -1
- package/src/atoms/radio.tsx +31 -1
- package/src/atoms/segmented-control.tsx +3 -0
- package/src/atoms/select.tsx +67 -19
- package/src/atoms/switch.tsx +31 -1
- package/src/atoms/tab-nav.tsx +42 -1
- package/src/atoms/tabs.tsx +40 -1
- package/src/atoms/tooltip.tsx +14 -1
- package/src/atoms/typo.tsx +21 -3
- package/src/molecules/radio-button-card.tsx +6 -4
- package/src/theme/theme-provider.tsx +38 -3
- package/src/utils/index.ts +2 -1
- package/src/utils/resolve-color.ts +86 -0
- package/dist/chunk-365QMK4D.js +0 -7
- package/dist/chunk-365QMK4D.js.map +0 -1
- package/dist/chunk-3NUQAVE6.js.map +0 -1
- package/dist/chunk-5AVBYDPB.js +0 -7
- package/dist/chunk-5AVBYDPB.js.map +0 -1
- package/dist/chunk-5ZITU5L7.js +0 -7
- package/dist/chunk-5ZITU5L7.js.map +0 -1
- package/dist/chunk-6DJOIRMF.js +0 -7
- package/dist/chunk-6DJOIRMF.js.map +0 -1
- package/dist/chunk-6IVCARWS.js +0 -7
- package/dist/chunk-6IVCARWS.js.map +0 -1
- package/dist/chunk-7FKRQQYK.js +0 -15
- package/dist/chunk-7FKRQQYK.js.map +0 -1
- package/dist/chunk-B6XJN6EC.js +0 -7
- package/dist/chunk-B6XJN6EC.js.map +0 -1
- package/dist/chunk-BESTU2AY.js.map +0 -1
- package/dist/chunk-CSKNBWPB.js.map +0 -1
- package/dist/chunk-DHZVOXFM.js +0 -35
- package/dist/chunk-DHZVOXFM.js.map +0 -1
- package/dist/chunk-FPD73OHW.js +0 -7
- package/dist/chunk-FPD73OHW.js.map +0 -1
- package/dist/chunk-HFVVQEOZ.js +0 -1
- package/dist/chunk-HQATHJBN.js.map +0 -1
- package/dist/chunk-J242TTFH.js +0 -7
- package/dist/chunk-J242TTFH.js.map +0 -1
- package/dist/chunk-K36TPMKL.js.map +0 -1
- package/dist/chunk-KTSEZC6A.js +0 -49
- package/dist/chunk-KTSEZC6A.js.map +0 -1
- package/dist/chunk-MIMJ7LON.js +0 -7
- package/dist/chunk-MIMJ7LON.js.map +0 -1
- package/dist/chunk-O3T3TM3V.js +0 -7
- package/dist/chunk-O3T3TM3V.js.map +0 -1
- package/dist/chunk-OHMOP5PV.js +0 -7
- package/dist/chunk-OHMOP5PV.js.map +0 -1
- package/dist/chunk-OYM4XCHQ.js +0 -7
- package/dist/chunk-OYM4XCHQ.js.map +0 -1
- package/dist/chunk-PMJIFLDT.js.map +0 -1
- package/dist/chunk-SMLC2O3V.js +0 -42
- package/dist/chunk-SMLC2O3V.js.map +0 -1
- package/dist/chunk-TVDKGMBI.js.map +0 -1
- package/dist/chunk-VTJZMOSP.js +0 -7
- package/dist/chunk-VTJZMOSP.js.map +0 -1
- package/dist/chunk-VYCYVN3L.js.map +0 -1
- package/dist/chunk-W7X7KSJP.js.map +0 -1
- package/dist/chunk-X2GMDZ7M.js +0 -59
- package/dist/chunk-X2GMDZ7M.js.map +0 -1
- package/dist/chunk-XK6VEVOK.js.map +0 -1
- package/dist/chunk-YGL6SWKN.js +0 -7
- package/dist/chunk-YGL6SWKN.js.map +0 -1
- package/dist/chunk-YJ7ZFOYL.js +0 -7
- package/dist/chunk-YJ7ZFOYL.js.map +0 -1
- package/dist/chunk-ZVDAEY5Q.js.map +0 -1
- /package/dist/{chunk-GGLDVUYU.js.map → chunk-2FB75HU2.js.map} +0 -0
- /package/dist/{chunk-7ITDAUWI.js.map → chunk-2I37QLRA.js.map} +0 -0
- /package/dist/{chunk-PXPGCDNA.js.map → chunk-2O7NVLVP.js.map} +0 -0
- /package/dist/{chunk-NZ6ONU5Z.js.map → chunk-2SM37SB4.js.map} +0 -0
- /package/dist/{chunk-NLW32DPB.js.map → chunk-2WNLUQX5.js.map} +0 -0
- /package/dist/{chunk-XBOSNFUM.js.map → chunk-447H6BVE.js.map} +0 -0
- /package/dist/{chunk-5V6MQUTB.js.map → chunk-5OW76AER.js.map} +0 -0
- /package/dist/{chunk-44VLRAHW.js.map → chunk-6YJGQWD6.js.map} +0 -0
- /package/dist/{chunk-KCCYHT23.js.map → chunk-7JW5Z2TL.js.map} +0 -0
- /package/dist/{chunk-JZVK4NDF.js.map → chunk-7PBLFV5L.js.map} +0 -0
- /package/dist/{chunk-UXVM3Y7P.js.map → chunk-A26UWBVB.js.map} +0 -0
- /package/dist/{chunk-HJP4STJZ.js.map → chunk-A4YOY75P.js.map} +0 -0
- /package/dist/{chunk-LSDD4TAP.js.map → chunk-AJTGTGOC.js.map} +0 -0
- /package/dist/{chunk-JWAQUXGB.js.map → chunk-BZ3EXV6A.js.map} +0 -0
- /package/dist/{chunk-QRI6ARS6.js.map → chunk-C2G3IB7G.js.map} +0 -0
- /package/dist/{chunk-4U6DFH7Z.js.map → chunk-E6GCU5IQ.js.map} +0 -0
- /package/dist/{chunk-VRJR534I.js.map → chunk-GAA3RTRW.js.map} +0 -0
- /package/dist/{chunk-VY557FHE.js.map → chunk-GE4M5GOQ.js.map} +0 -0
- /package/dist/{chunk-OUJAPQS2.js.map → chunk-GPULIICW.js.map} +0 -0
- /package/dist/{chunk-7PF6I4RN.js.map → chunk-GRDRXD53.js.map} +0 -0
- /package/dist/{chunk-TJKS6CLU.js.map → chunk-GREYLAMY.js.map} +0 -0
- /package/dist/{chunk-VREM33BW.js.map → chunk-GYSRHZRS.js.map} +0 -0
- /package/dist/{chunk-2TYR2RDO.js.map → chunk-H3GQHGFA.js.map} +0 -0
- /package/dist/{chunk-KMVSJT6Y.js.map → chunk-HH6LML5K.js.map} +0 -0
- /package/dist/{chunk-J62KAMQL.js.map → chunk-IM6E52L2.js.map} +0 -0
- /package/dist/{chunk-5LRFDSG2.js.map → chunk-J7N2IZQW.js.map} +0 -0
- /package/dist/{chunk-EEAHZCIK.js.map → chunk-JCUG2XKB.js.map} +0 -0
- /package/dist/{chunk-4LUFF5LX.js.map → chunk-JNEGSY5N.js.map} +0 -0
- /package/dist/{chunk-CQSM6JCO.js.map → chunk-K3Q4XLCN.js.map} +0 -0
- /package/dist/{chunk-4TST4UK5.js.map → chunk-KO3V7KB6.js.map} +0 -0
- /package/dist/{chunk-3U6FXC6R.js.map → chunk-LIWQ47VQ.js.map} +0 -0
- /package/dist/{chunk-2ZSK45QM.js.map → chunk-LQ3WGFS7.js.map} +0 -0
- /package/dist/{chunk-A7LYIUE7.js.map → chunk-M77YPVQN.js.map} +0 -0
- /package/dist/{chunk-P4KO43AP.js.map → chunk-MCKWO7K4.js.map} +0 -0
- /package/dist/{chunk-G7NEBNHU.js.map → chunk-MGR37YQB.js.map} +0 -0
- /package/dist/{chunk-QDC3LFHS.js.map → chunk-MMLVZWMD.js.map} +0 -0
- /package/dist/{chunk-D4JZHM4J.js.map → chunk-MP5KZULQ.js.map} +0 -0
- /package/dist/{chunk-WMWXF44S.js.map → chunk-MSLSD7F6.js.map} +0 -0
- /package/dist/{chunk-JUDD3XGY.js.map → chunk-MSM2QG23.js.map} +0 -0
- /package/dist/{chunk-NVQSH733.js.map → chunk-NFMEBYNY.js.map} +0 -0
- /package/dist/{chunk-7ZMY4CAZ.js.map → chunk-NIHOKIYW.js.map} +0 -0
- /package/dist/{chunk-3GQQQBJN.js.map → chunk-NYG34MV6.js.map} +0 -0
- /package/dist/{chunk-XF7FPCS7.js.map → chunk-OA3DGWVL.js.map} +0 -0
- /package/dist/{chunk-F5IXHUBI.js.map → chunk-OBWQ3N5D.js.map} +0 -0
- /package/dist/{chunk-HVXBZGLT.js.map → chunk-OEHVGPWL.js.map} +0 -0
- /package/dist/{chunk-HFVVQEOZ.js.map → chunk-OLJN3WXR.js.map} +0 -0
- /package/dist/{chunk-WE3TWSC4.js.map → chunk-OPYRV6XJ.js.map} +0 -0
- /package/dist/{chunk-WFOIY6OR.js.map → chunk-OQN4E2QP.js.map} +0 -0
- /package/dist/{chunk-HZ7HETUI.js.map → chunk-OWQUXTQ2.js.map} +0 -0
- /package/dist/{chunk-7I7PZF5L.js.map → chunk-OYXUWBKS.js.map} +0 -0
- /package/dist/{chunk-D3KCPM4O.js.map → chunk-PE4EBBU4.js.map} +0 -0
- /package/dist/{chunk-3GGJWSFK.js.map → chunk-PXMJK5D5.js.map} +0 -0
- /package/dist/{chunk-Y4U24VXI.js.map → chunk-Q3M6GFHY.js.map} +0 -0
- /package/dist/{chunk-GFURX6GB.js.map → chunk-QPL7SJQM.js.map} +0 -0
- /package/dist/{chunk-YAUOAWYS.js.map → chunk-RMVVV5NH.js.map} +0 -0
- /package/dist/{chunk-RPV3QPQL.js.map → chunk-RUJZ5PE7.js.map} +0 -0
- /package/dist/{chunk-6J5YZTZE.js.map → chunk-T2CGNUCP.js.map} +0 -0
- /package/dist/{chunk-ZUZ5FT4B.js.map → chunk-TU6SGJ5Z.js.map} +0 -0
- /package/dist/{chunk-5ZEQ33PC.js.map → chunk-TYEGB5FQ.js.map} +0 -0
- /package/dist/{chunk-5AWPST2R.js.map → chunk-UFM3EL52.js.map} +0 -0
- /package/dist/{chunk-R3WM6HV6.js.map → chunk-VD5ZDFCM.js.map} +0 -0
- /package/dist/{chunk-AQVIQODP.js.map → chunk-VK6INFSB.js.map} +0 -0
- /package/dist/{chunk-QFEZIPWJ.js.map → chunk-WY37V3W4.js.map} +0 -0
- /package/dist/{chunk-SDEDXT7A.js.map → chunk-XOQXIPLL.js.map} +0 -0
- /package/dist/{chunk-DVYTRZOL.js.map → chunk-YCLYKBWZ.js.map} +0 -0
- /package/dist/{chunk-YW4IN7LP.js.map → chunk-YGNHAFBW.js.map} +0 -0
- /package/dist/{chunk-APG3GKDT.js.map → chunk-YWWYA2JZ.js.map} +0 -0
- /package/dist/{chunk-7AMHCTRM.js.map → chunk-Z5LPHG2D.js.map} +0 -0
- /package/dist/{chunk-GZNELGHF.js.map → chunk-ZAFLWQOV.js.map} +0 -0
- /package/dist/{chunk-WD5P2N6F.js.map → chunk-ZC2JPF7B.js.map} +0 -0
- /package/dist/{chunk-UH6Q3TEK.js.map → chunk-ZCQMCIT5.js.map} +0 -0
- /package/dist/{chunk-LT5C6QT7.js.map → chunk-ZUL3NYQ4.js.map} +0 -0
- /package/dist/{chunk-23QMZC6L.js.map → chunk-ZWYQ44CB.js.map} +0 -0
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DynamicFormEditorFieldEditorPanel
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-MP5KZULQ.js";
|
|
4
4
|
import "../chunk-Z7WNKARH.js";
|
|
5
5
|
import "../chunk-5XYPLDI5.js";
|
|
6
6
|
import "../chunk-6NPTJBFE.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-YXMB4MCM.js";
|
|
8
|
+
import "../chunk-ZCGH6TJ3.js";
|
|
9
|
+
import "../chunk-7RJYF5L3.js";
|
|
9
10
|
import "../chunk-HF6GNDPV.js";
|
|
11
|
+
import "../chunk-GR4PG6HY.js";
|
|
12
|
+
import "../chunk-LDBWASUA.js";
|
|
10
13
|
import "../chunk-25HMMI7R.js";
|
|
11
|
-
import "../chunk-
|
|
14
|
+
import "../chunk-2LCH3PDF.js";
|
|
12
15
|
import "../chunk-LQY4RKWI.js";
|
|
13
16
|
import "../chunk-RP2RGCAW.js";
|
|
14
|
-
import "../chunk-VYCYVN3L.js";
|
|
15
17
|
import "../chunk-VOME2TE7.js";
|
|
16
18
|
import "../chunk-JVXATVAC.js";
|
|
17
19
|
import "../chunk-B3VSXNTH.js";
|
|
@@ -29,8 +31,8 @@ import "../chunk-YSYJCYHY.js";
|
|
|
29
31
|
import "../chunk-5OM2H6RI.js";
|
|
30
32
|
import "../chunk-ZUYCXCPW.js";
|
|
31
33
|
import "../chunk-YVFNJE4E.js";
|
|
32
|
-
import "../chunk-
|
|
33
|
-
import "../chunk-
|
|
34
|
+
import "../chunk-WYWM2HSZ.js";
|
|
35
|
+
import "../chunk-VFQD57ZY.js";
|
|
34
36
|
import "../chunk-CRTRMMJ7.js";
|
|
35
37
|
export {
|
|
36
38
|
DynamicFormEditorFieldEditorPanel
|
|
@@ -52,8 +52,8 @@ __export(dynamic_form_editor_field_list_panel_exports, {
|
|
|
52
52
|
DynamicFormEditorFieldListPanel: () => DynamicFormEditorFieldListPanel
|
|
53
53
|
});
|
|
54
54
|
module.exports = __toCommonJS(dynamic_form_editor_field_list_panel_exports);
|
|
55
|
-
var
|
|
56
|
-
var
|
|
55
|
+
var import_react5 = require("react");
|
|
56
|
+
var import_themes6 = require("@radix-ui/themes");
|
|
57
57
|
|
|
58
58
|
// src/atoms/card.tsx
|
|
59
59
|
var import_react = require("react");
|
|
@@ -93,57 +93,112 @@ Card.displayName = "Card";
|
|
|
93
93
|
var import_themes2 = require("@radix-ui/themes");
|
|
94
94
|
|
|
95
95
|
// src/atoms/select.tsx
|
|
96
|
-
var
|
|
96
|
+
var import_themes4 = require("@radix-ui/themes");
|
|
97
|
+
var import_clsx2 = require("clsx");
|
|
98
|
+
var import_react3 = require("react");
|
|
99
|
+
|
|
100
|
+
// src/utils/resolve-color.ts
|
|
101
|
+
var SEMANTIC_COLOR_MAP = {
|
|
102
|
+
error: "red",
|
|
103
|
+
neutral: "gray",
|
|
104
|
+
success: "green",
|
|
105
|
+
accent: void 0
|
|
106
|
+
};
|
|
107
|
+
var CUSTOM_COLOR_MAP = {
|
|
108
|
+
black: { className: "tipp-accent-black", fallbackColor: "gray" }
|
|
109
|
+
};
|
|
110
|
+
var isSemanticColor = (color) => color !== void 0 && color in SEMANTIC_COLOR_MAP;
|
|
111
|
+
var isCustomColor = (color) => color !== void 0 && color in CUSTOM_COLOR_MAP;
|
|
112
|
+
var resolveColor = (color) => {
|
|
113
|
+
if (isCustomColor(color)) {
|
|
114
|
+
const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];
|
|
115
|
+
return { color: fallbackColor, className };
|
|
116
|
+
}
|
|
117
|
+
if (isSemanticColor(color)) {
|
|
118
|
+
return { color: SEMANTIC_COLOR_MAP[color] };
|
|
119
|
+
}
|
|
120
|
+
return { color };
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// src/theme/theme-provider.tsx
|
|
97
124
|
var import_react2 = require("react");
|
|
125
|
+
var import_themes3 = require("@radix-ui/themes");
|
|
126
|
+
var import_clsx = require("clsx");
|
|
98
127
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
99
|
-
var
|
|
128
|
+
var ThemeAccentContext = (0, import_react2.createContext)(void 0);
|
|
129
|
+
|
|
130
|
+
// src/atoms/select.tsx
|
|
131
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
132
|
+
var SelectContext = (0, import_react3.createContext)({
|
|
100
133
|
error: false
|
|
101
134
|
});
|
|
102
|
-
var Content = (0,
|
|
103
|
-
const _a = props, { className, isNavigation } = _a, rest = __objRest(_a, ["className", "isNavigation"]);
|
|
104
|
-
const { error } = (0,
|
|
105
|
-
const
|
|
135
|
+
var Content = (0, import_react3.forwardRef)((props, ref) => {
|
|
136
|
+
const _a = props, { className, isNavigation, color } = _a, rest = __objRest(_a, ["className", "isNavigation", "color"]);
|
|
137
|
+
const { error, color: contextColor } = (0, import_react3.useContext)(SelectContext);
|
|
138
|
+
const themeAccent = (0, import_react3.useContext)(ThemeAccentContext);
|
|
139
|
+
const { color: radixColor, className: colorClassName } = (0, import_react3.useMemo)(
|
|
140
|
+
() => {
|
|
141
|
+
var _a2;
|
|
142
|
+
return resolveColor((_a2 = color != null ? color : contextColor) != null ? _a2 : themeAccent);
|
|
143
|
+
},
|
|
144
|
+
[color, contextColor, themeAccent]
|
|
145
|
+
);
|
|
146
|
+
const appliedColor = colorClassName ? void 0 : radixColor;
|
|
147
|
+
const cls = (0, import_react3.useMemo)(() => {
|
|
106
148
|
const etc = isNavigation ? "nav-select" : "";
|
|
107
149
|
const errorCls = error ? "tipp-error" : "";
|
|
108
|
-
return
|
|
109
|
-
}, [className, error, isNavigation]);
|
|
110
|
-
return /* @__PURE__ */ (0,
|
|
111
|
-
|
|
150
|
+
return (0, import_clsx2.clsx)(etc, errorCls, colorClassName, className);
|
|
151
|
+
}, [className, colorClassName, error, isNavigation]);
|
|
152
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
153
|
+
import_themes4.Select.Content,
|
|
112
154
|
__spreadProps(__spreadValues({
|
|
113
155
|
position: "popper"
|
|
114
156
|
}, rest), {
|
|
115
157
|
className: cls,
|
|
158
|
+
color: appliedColor,
|
|
116
159
|
ref
|
|
117
160
|
})
|
|
118
161
|
);
|
|
119
162
|
});
|
|
120
163
|
Content.displayName = "Select.Content";
|
|
121
|
-
var Trigger = (0,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
);
|
|
164
|
+
var Trigger = (0, import_react3.forwardRef)((props, ref) => {
|
|
165
|
+
const _a = props, { className, color } = _a, rest = __objRest(_a, ["className", "color"]);
|
|
166
|
+
const { error, color: contextColor } = (0, import_react3.useContext)(SelectContext);
|
|
167
|
+
const { color: radixColor, className: colorClassName } = (0, import_react3.useMemo)(
|
|
168
|
+
() => resolveColor(color != null ? color : contextColor),
|
|
169
|
+
[color, contextColor]
|
|
170
|
+
);
|
|
171
|
+
const appliedColor = colorClassName ? void 0 : radixColor;
|
|
172
|
+
const cls = (0, import_react3.useMemo)(() => {
|
|
173
|
+
const errorCls = error ? "error" : "";
|
|
174
|
+
return (0, import_clsx2.clsx)(errorCls, colorClassName, className);
|
|
175
|
+
}, [className, colorClassName, error]);
|
|
176
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
177
|
+
import_themes4.Select.Trigger,
|
|
178
|
+
__spreadProps(__spreadValues({}, rest), {
|
|
179
|
+
className: cls,
|
|
180
|
+
color: appliedColor,
|
|
181
|
+
ref
|
|
182
|
+
})
|
|
183
|
+
);
|
|
184
|
+
});
|
|
132
185
|
Trigger.displayName = "Select.Trigger";
|
|
133
186
|
function Root(props) {
|
|
134
|
-
const _a = props, { error } = _a, rest = __objRest(_a, ["error"]);
|
|
135
|
-
|
|
187
|
+
const _a = props, { error, color } = _a, rest = __objRest(_a, ["error", "color"]);
|
|
188
|
+
const value = (0, import_react3.useMemo)(() => ({ error, color }), [error, color]);
|
|
189
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(SelectContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_themes4.Select.Root, __spreadValues({}, rest)) });
|
|
136
190
|
}
|
|
137
191
|
Root.displayName = "Select.Root";
|
|
138
|
-
var Select = __spreadProps(__spreadValues({},
|
|
192
|
+
var Select = __spreadProps(__spreadValues({}, import_themes4.Select), {
|
|
139
193
|
Root,
|
|
140
194
|
Trigger,
|
|
141
195
|
Content
|
|
142
196
|
});
|
|
143
197
|
|
|
144
198
|
// src/atoms/typo.tsx
|
|
145
|
-
var
|
|
146
|
-
var
|
|
199
|
+
var import_themes5 = require("@radix-ui/themes");
|
|
200
|
+
var import_clsx3 = require("clsx");
|
|
201
|
+
var import_react4 = require("react");
|
|
147
202
|
|
|
148
203
|
// src/utils/map-with-responsive.ts
|
|
149
204
|
var mapWithResponsive = (args) => {
|
|
@@ -164,11 +219,15 @@ var mapWithResponsive = (args) => {
|
|
|
164
219
|
};
|
|
165
220
|
|
|
166
221
|
// src/atoms/typo.tsx
|
|
167
|
-
var
|
|
168
|
-
var Typo = (0,
|
|
222
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
223
|
+
var Typo = (0, import_react4.forwardRef)(
|
|
169
224
|
(props, ref) => {
|
|
170
|
-
const _a = props, { size, variant, children } = _a, rest = __objRest(_a, ["size", "variant", "children"]);
|
|
171
|
-
const
|
|
225
|
+
const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
|
|
226
|
+
const { color: radixColor, className: colorClassName } = (0, import_react4.useMemo)(
|
|
227
|
+
() => resolveColor(color),
|
|
228
|
+
[color]
|
|
229
|
+
);
|
|
230
|
+
const radixSize = (0, import_react4.useMemo)(() => {
|
|
172
231
|
if (size !== void 0) return size;
|
|
173
232
|
if (variant === void 0) return "2";
|
|
174
233
|
return mapWithResponsive({
|
|
@@ -186,7 +245,16 @@ var Typo = (0, import_react3.forwardRef)(
|
|
|
186
245
|
}
|
|
187
246
|
});
|
|
188
247
|
}, [size, variant]);
|
|
189
|
-
return /* @__PURE__ */ (0,
|
|
248
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
249
|
+
import_themes5.Text,
|
|
250
|
+
__spreadProps(__spreadValues({}, rest), {
|
|
251
|
+
className: (0, import_clsx3.clsx)(colorClassName, className),
|
|
252
|
+
color: radixColor,
|
|
253
|
+
ref,
|
|
254
|
+
size: radixSize,
|
|
255
|
+
children
|
|
256
|
+
})
|
|
257
|
+
);
|
|
190
258
|
}
|
|
191
259
|
);
|
|
192
260
|
Typo.displayName = "Typo";
|
|
@@ -209,7 +277,7 @@ function getFieldTypeLabel(type) {
|
|
|
209
277
|
}
|
|
210
278
|
|
|
211
279
|
// src/molecules/dynamic-form-editor-field-list-panel.tsx
|
|
212
|
-
var
|
|
280
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
213
281
|
function isFieldType(value, types) {
|
|
214
282
|
return types.some((t) => t === value);
|
|
215
283
|
}
|
|
@@ -224,13 +292,13 @@ function DynamicFormEditorFieldListPanel(props) {
|
|
|
224
292
|
onAddField
|
|
225
293
|
} = props;
|
|
226
294
|
const isEmpty = fields.length === 0;
|
|
227
|
-
const triggerPlaceholder = (0,
|
|
295
|
+
const triggerPlaceholder = (0, import_react5.useMemo)(() => {
|
|
228
296
|
return readonly ? "\uCD94\uAC00(\uC77D\uAE30 \uC804\uC6A9)" : "\uCD94\uAC00";
|
|
229
297
|
}, [readonly]);
|
|
230
|
-
return /* @__PURE__ */ (0,
|
|
231
|
-
/* @__PURE__ */ (0,
|
|
232
|
-
/* @__PURE__ */ (0,
|
|
233
|
-
/* @__PURE__ */ (0,
|
|
298
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Card, { style: { width: 340, padding: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes2.Flex, { direction: "column", gap: "3", children: [
|
|
299
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes2.Flex, { align: "center", justify: "between", children: [
|
|
300
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Typo, { variant: "body", children: "\uD544\uB4DC" }),
|
|
301
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
234
302
|
Select.Root,
|
|
235
303
|
{
|
|
236
304
|
disabled: readonly,
|
|
@@ -240,18 +308,18 @@ function DynamicFormEditorFieldListPanel(props) {
|
|
|
240
308
|
},
|
|
241
309
|
value: "",
|
|
242
310
|
children: [
|
|
243
|
-
/* @__PURE__ */ (0,
|
|
244
|
-
/* @__PURE__ */ (0,
|
|
311
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Select.Trigger, { placeholder: triggerPlaceholder }),
|
|
312
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Select.Content, { children: fieldTypes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Select.Item, { value: t, children: getFieldTypeLabel(t) }, t)) })
|
|
245
313
|
]
|
|
246
314
|
}
|
|
247
315
|
)
|
|
248
316
|
] }),
|
|
249
|
-
/* @__PURE__ */ (0,
|
|
250
|
-
isEmpty ? /* @__PURE__ */ (0,
|
|
317
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes2.Flex, { direction: "column", gap: "2", children: [
|
|
318
|
+
isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Typo, { color: "gray", variant: "caption", children: "\uC544\uC9C1 \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }) : null,
|
|
251
319
|
fields.map((field) => {
|
|
252
320
|
const isSelected = field.name === selectedFieldName;
|
|
253
321
|
const hasError = hasFieldError(field.name);
|
|
254
|
-
return /* @__PURE__ */ (0,
|
|
322
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
255
323
|
Card,
|
|
256
324
|
{
|
|
257
325
|
error: isSelected ? hasError : void 0,
|
|
@@ -264,8 +332,8 @@ function DynamicFormEditorFieldListPanel(props) {
|
|
|
264
332
|
opacity: readonly ? 0.8 : 1,
|
|
265
333
|
border: isSelected ? "1px solid var(--accent-9)" : "1px solid transparent"
|
|
266
334
|
},
|
|
267
|
-
children: /* @__PURE__ */ (0,
|
|
268
|
-
/* @__PURE__ */ (0,
|
|
335
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_themes6.Box, { style: { minWidth: 0 }, children: [
|
|
336
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
269
337
|
Typo,
|
|
270
338
|
{
|
|
271
339
|
style: {
|
|
@@ -277,7 +345,7 @@ function DynamicFormEditorFieldListPanel(props) {
|
|
|
277
345
|
children: field.label
|
|
278
346
|
}
|
|
279
347
|
),
|
|
280
|
-
/* @__PURE__ */ (0,
|
|
348
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Typo, { color: "gray", variant: "caption", children: [
|
|
281
349
|
field.name,
|
|
282
350
|
" \xB7 ",
|
|
283
351
|
field.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/molecules/dynamic-form-editor-field-list-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/select.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/molecules/dynamic-form-editor-utils.ts"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Box } from '@radix-ui/themes';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Select } from '@/atoms/select';\nimport { Typo } from '@/atoms/typo';\nimport type { DynamicFormFieldSchema } from '@/types/dynamic-form-schema-generated';\nimport { getFieldTypeLabel, type FieldType } from './dynamic-form-editor-utils';\n\nfunction isFieldType(value: string, types: FieldType[]): value is FieldType {\n return types.some((t) => t === value);\n}\n\nexport interface DynamicFormEditorFieldListPanelProps {\n fields: DynamicFormFieldSchema[];\n selectedFieldName: string | null;\n readonly: boolean;\n fieldTypes: FieldType[];\n hasFieldError: (fieldName: string) => boolean;\n onSelectFieldName: (fieldName: string) => void;\n onAddField: (type: FieldType) => void;\n}\n\nexport function DynamicFormEditorFieldListPanel(\n props: DynamicFormEditorFieldListPanelProps\n): React.ReactElement {\n const {\n fields,\n selectedFieldName,\n readonly,\n fieldTypes,\n hasFieldError,\n onSelectFieldName,\n onAddField,\n } = props;\n\n const isEmpty: boolean = fields.length === 0;\n\n const triggerPlaceholder: string = useMemo(() => {\n return readonly ? '추가(읽기 전용)' : '추가';\n }, [readonly]);\n\n return (\n <Card style={{ width: 340, padding: 12 }}>\n <Flex direction=\"column\" gap=\"3\">\n <Flex align=\"center\" justify=\"between\">\n <Typo variant=\"body\">필드</Typo>\n <Select.Root\n disabled={readonly}\n onValueChange={(v: string): void => {\n if (!isFieldType(v, fieldTypes)) return;\n onAddField(v);\n }}\n value=\"\"\n >\n <Select.Trigger placeholder={triggerPlaceholder} />\n <Select.Content>\n {fieldTypes.map((t) => (\n <Select.Item key={t} value={t}>\n {getFieldTypeLabel(t)}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n </Flex>\n\n <Flex direction=\"column\" gap=\"2\">\n {isEmpty ? (\n <Typo color=\"gray\" variant=\"caption\">\n 아직 필드가 없습니다.\n </Typo>\n ) : null}\n\n {fields.map((field) => {\n const isSelected: boolean = field.name === selectedFieldName;\n const hasError: boolean = hasFieldError(field.name);\n\n return (\n <Card\n error={isSelected ? hasError : undefined}\n key={field.name}\n onClick={(): void => { onSelectFieldName(field.name); }}\n style={{\n padding: 10,\n cursor: 'pointer',\n opacity: readonly ? 0.8 : 1,\n border: isSelected\n ? '1px solid var(--accent-9)'\n : '1px solid transparent',\n }}\n >\n <Box style={{ minWidth: 0 }}>\n <Typo\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n variant=\"body\"\n >\n {field.label}\n </Typo>\n <Typo color=\"gray\" variant=\"caption\">\n {field.name} · {field.type}\n {field.required ? ' · required' : ''}\n </Typo>\n </Box>\n </Card>\n );\n })}\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n","import { Select as RadixSelect } from '@radix-ui/themes';\nimport { createContext, forwardRef, useContext, useMemo } from 'react';\n\nconst SelectContext = createContext<{ error?: boolean }>({\n error: false,\n});\n\nexport type ContentProps = RadixSelect.ContentProps & {\n isNavigation?: boolean;\n};\n\nconst Content = forwardRef<HTMLDivElement, ContentProps>((props, ref) => {\n const { className, isNavigation, ...rest } = props;\n const { error } = useContext(SelectContext);\n\n const cls = useMemo(() => {\n const etc = isNavigation ? 'nav-select' : '';\n const errorCls = error ? 'tipp-error' : '';\n return [etc, errorCls, className].join(' ');\n }, [className, error, isNavigation]);\n\n return (\n <RadixSelect.Content\n position=\"popper\"\n {...rest}\n className={cls}\n ref={ref}\n />\n );\n});\nContent.displayName = 'Select.Content';\n\nconst Trigger = forwardRef<HTMLButtonElement, RadixSelect.TriggerProps>(\n (props, ref) => {\n const { className, ...rest } = props;\n const { error } = useContext(SelectContext);\n\n const cls = useMemo(() => {\n const errorCls = error ? 'error' : '';\n return [errorCls, className].join(' ');\n }, [className, error]);\n\n return <RadixSelect.Trigger {...rest} className={cls} ref={ref} />;\n }\n);\n\nTrigger.displayName = 'Select.Trigger';\n\nexport type SelectRootProps = RadixSelect.RootProps & {\n error?: boolean;\n};\n\nfunction Root(props: SelectRootProps): React.ReactNode {\n const { error, ...rest } = props;\n\n return (\n <SelectContext.Provider value={{ error }}>\n <RadixSelect.Root {...rest} />\n </SelectContext.Provider>\n );\n}\n\nRoot.displayName = 'Select.Root';\n\nexport const Select = {\n ...RadixSelect,\n Root,\n Trigger,\n Content,\n};\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport type TypoProps = RadixTextProps & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, ...rest } = props;\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText {...rest} ref={ref} size={radixSize}>\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type {\n DynamicFormFieldSchema,\n DynamicFormSchema,\n FieldOption,\n ImageFieldOption,\n ValidationRule,\n} from '@/types/dynamic-form-schema-generated';\n\nexport type FieldType =\n | 'short_text'\n | 'long_text'\n | 'number'\n | 'email'\n | 'dropdown'\n | 'choice'\n | 'radio_cards'\n | 'image_radio_card'\n | 'choices'\n | 'yes_no';\n\nexport type SchemaIssueLevel = 'error' | 'warning';\n\nexport interface SchemaIssue {\n id: string;\n level: SchemaIssueLevel;\n message: string;\n fieldName?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isNonEmptyTrimmedString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction canCompileRegExp(pattern: string): boolean {\n try {\n // eslint-disable-next-line no-new -- 정규식 컴파일 가능 여부만 확인\n new RegExp(pattern);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function getFieldTypes(): FieldType[] {\n return [\n 'short_text',\n 'long_text',\n 'number',\n 'email',\n 'dropdown',\n 'choice',\n 'radio_cards',\n 'image_radio_card',\n 'choices',\n 'yes_no',\n ];\n}\n\nexport function getFieldTypeLabel(type: FieldType): string {\n const map: Record<FieldType, string> = {\n short_text: '짧은 텍스트',\n long_text: '긴 텍스트',\n number: '숫자',\n email: '이메일',\n dropdown: '드롭다운',\n choice: '단일 선택(라디오)',\n radio_cards: '라디오 카드',\n image_radio_card: '이미지 라디오 카드',\n choices: '다중 선택(체크)',\n yes_no: '동의(체크)',\n };\n return map[type];\n}\n\nexport function findFieldIndexByName(\n fields: DynamicFormFieldSchema[],\n fieldName: string\n): number {\n return fields.findIndex((field) => field.name === fieldName);\n}\n\nfunction toCamelFromSnake(value: string): string {\n const parts: string[] = value.split('_').filter(Boolean);\n if (parts.length === 0) return 'field';\n const [first, ...rest] = parts;\n const firstLower = first.toLowerCase();\n const restCamel = rest\n .map((p) => (p.length === 0 ? '' : p[0].toUpperCase() + p.slice(1)))\n .join('');\n return `${firstLower}${restCamel}`;\n}\n\nexport function createUniqueFieldName(\n fields: DynamicFormFieldSchema[],\n baseName: string\n): string {\n const used = new Set<string>(fields.map((f) => f.name));\n if (!used.has(baseName)) return baseName;\n let i = 2;\n while (used.has(`${baseName}${i}`)) i += 1;\n return `${baseName}${i}`;\n}\n\nexport function createDefaultField(\n type: FieldType,\n currentFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const baseName: string = toCamelFromSnake(type);\n const name: string = createUniqueFieldName(currentFields, baseName);\n const label: string = getFieldTypeLabel(type);\n\n if (type === 'short_text') return { name, type, label, placeholder: '' };\n if (type === 'long_text') return { name, type, label, placeholder: '' };\n if (type === 'number') return { name, type, label, placeholder: '' };\n if (type === 'email') return { name, type, label, placeholder: '' };\n if (type === 'dropdown')\n return {\n name,\n type,\n label,\n placeholder: '',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'choice')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'radio_cards')\n return { name, type, label, options: [{ label: '옵션 1', value: 'option1' }] };\n if (type === 'choices')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'yes_no') return { name, type, label, description: '' };\n\n return {\n name,\n type,\n label,\n gridColumnsCount: 4,\n gridItemHeight: '160px',\n gridGap: '2',\n imageFit: 'cover',\n options: [\n {\n label: '이미지 1',\n value: 'option1',\n imageSrc: 'https://placehold.co/300x300/png?text=1',\n },\n ],\n };\n}\n\nexport function normalizeSchema(value: DynamicFormSchema | undefined): DynamicFormSchema {\n const fallback: DynamicFormSchema = { fields: [] };\n if (!value) return fallback;\n if (!Array.isArray(value.fields)) return fallback;\n return { fields: value.fields };\n}\n\nexport function validateDynamicFormSchema(schema: DynamicFormSchema): SchemaIssue[] {\n const issues: SchemaIssue[] = [];\n\n const nameToCount = new Map<string, number>();\n schema.fields.forEach((field) => {\n const prev = nameToCount.get(field.name) || 0;\n nameToCount.set(field.name, prev + 1);\n });\n\n schema.fields.forEach((field, index) => {\n const fieldKey = `${index}:${field.name}`;\n\n if (!isNonEmptyTrimmedString(field.name)) {\n issues.push({\n id: `field.name.required.${fieldKey}`,\n level: 'error',\n message: '필드 name은 필수입니다',\n fieldName: field.name,\n });\n } else if (field.name.trim() !== field.name) {\n issues.push({\n id: `field.name.trim.${fieldKey}`,\n level: 'warning',\n message: '필드 name 앞/뒤 공백은 제거하는 것을 권장합니다',\n fieldName: field.name,\n });\n }\n\n if (isNonEmptyTrimmedString(field.name)) {\n const count = nameToCount.get(field.name) || 0;\n if (count > 1) {\n issues.push({\n id: `field.name.duplicate.${fieldKey}`,\n level: 'error',\n message: `중복된 name입니다: ${field.name}`,\n fieldName: field.name,\n });\n }\n }\n\n if (!isNonEmptyTrimmedString(field.label)) {\n issues.push({\n id: `field.label.required.${fieldKey}`,\n level: 'error',\n message: '필드 label은 필수입니다',\n fieldName: field.name,\n });\n }\n\n const type = field.type;\n const isOptionType =\n type === 'dropdown' ||\n type === 'choice' ||\n type === 'radio_cards' ||\n type === 'choices';\n\n if (isOptionType) {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.options.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n }\n }\n\n if (type === 'image_radio_card') {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.imageOptions.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n } else {\n optionsRaw.forEach((opt, optIndex) => {\n const imageSrc = isRecord(opt) ? opt.imageSrc : undefined;\n if (!isNonEmptyTrimmedString(imageSrc)) {\n issues.push({\n id: `field.imageOptions.imageSrc.required.${fieldKey}.${optIndex}`,\n level: 'error',\n message: 'imageSrc는 필수입니다',\n fieldName: field.name,\n });\n }\n });\n }\n }\n\n const validation: ValidationRule | undefined = field.validation;\n if (validation) {\n if (isFiniteNumber(validation.min) && isFiniteNumber(validation.max)) {\n if (validation.min > validation.max) {\n issues.push({\n id: `field.validation.minmax.${fieldKey}`,\n level: 'error',\n message: 'validation.min은 validation.max 이하이어야 합니다',\n fieldName: field.name,\n });\n }\n }\n if (isNonEmptyTrimmedString(validation.pattern)) {\n if (!canCompileRegExp(validation.pattern)) {\n issues.push({\n id: `field.validation.pattern.${fieldKey}`,\n level: 'error',\n message: 'validation.pattern이 올바른 정규식이 아닙니다',\n fieldName: field.name,\n });\n }\n }\n }\n });\n\n return issues;\n}\n\nexport function hasErrorIssues(issues: SchemaIssue[]): boolean {\n return issues.some((i) => i.level === 'error');\n}\n\nexport function updateSchemaFields(\n schema: DynamicFormSchema,\n nextFields: DynamicFormFieldSchema[]\n): DynamicFormSchema {\n return { fields: nextFields };\n}\n\nexport function moveField(\n fields: DynamicFormFieldSchema[],\n fromIndex: number,\n toIndex: number\n): DynamicFormFieldSchema[] {\n if (fromIndex < 0 || fromIndex >= fields.length) return fields;\n if (toIndex < 0 || toIndex >= fields.length) return fields;\n if (fromIndex === toIndex) return fields;\n\n const next: DynamicFormFieldSchema[] = [...fields];\n const [item] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, item);\n return next;\n}\n\nexport function duplicateField(fields: DynamicFormFieldSchema[], index: number): DynamicFormFieldSchema[] {\n if (index < 0 || index >= fields.length) return fields;\n const target = fields[index];\n const nextName: string = createUniqueFieldName(fields, target.name);\n const cloned: DynamicFormFieldSchema = { ...target, name: nextName };\n const next: DynamicFormFieldSchema[] = [...fields];\n next.splice(index + 1, 0, cloned);\n return next;\n}\n\nexport function updateFieldCommonProps(\n field: DynamicFormFieldSchema,\n next: {\n name?: string;\n label?: string;\n description?: string | undefined;\n required?: boolean;\n }\n): DynamicFormFieldSchema {\n const { name, label, description, required } = next;\n return {\n ...field,\n ...(name !== undefined ? { name } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(required !== undefined ? { required } : {}),\n };\n}\n\nexport function updateFieldValidation(\n field: DynamicFormFieldSchema,\n next: ValidationRule | undefined\n): DynamicFormFieldSchema {\n if (!next) {\n const { validation: _validation, ...rest } = field;\n return rest;\n }\n return { ...field, validation: next };\n}\n\nexport function updateTextPlaceholder(\n field: DynamicFormFieldSchema,\n placeholder: string\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'short_text' || type === 'long_text' || type === 'number' || type === 'email' || type === 'dropdown') {\n return { ...field, placeholder };\n }\n return field;\n}\n\nexport function updateOrientation(\n field: DynamicFormFieldSchema,\n orientation: 'horizontal' | 'vertical'\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'choice' || type === 'choices') return { ...field, orientation };\n return field;\n}\n\nexport function updateOptions(\n field: DynamicFormFieldSchema,\n options: FieldOption[]\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'dropdown' || type === 'choice' || type === 'radio_cards' || type === 'choices') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageOptions(\n field: DynamicFormFieldSchema,\n options: ImageFieldOption[]\n): DynamicFormFieldSchema {\n if (field.type === 'image_radio_card') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageLayout(\n field: DynamicFormFieldSchema,\n next: {\n gridColumnsCount?: number | undefined;\n gridItemHeight?: string | undefined;\n gridColumns?: string | undefined;\n gridRows?: string | undefined;\n gridGap?: string | undefined;\n imageFit?: 'cover' | 'contain' | undefined;\n }\n): DynamicFormFieldSchema {\n if (field.type !== 'image_radio_card') return field;\n return { ...field, ...next };\n}\n\nexport function resetFieldType(\n field: DynamicFormFieldSchema,\n nextType: FieldType,\n allFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const base: DynamicFormFieldSchema = createDefaultField(nextType, allFields);\n return {\n ...base,\n name: field.name,\n label: field.label,\n description: field.description,\n required: field.required,\n validation: field.validation,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAA+B;AAC/B,IAAAC,iBAAoB;;;ACDpB,mBAAoC;AACpC,oBAGO;AAmCD;AAtBC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAO,iBAAiB;AACvB,UAAwD,YAAhD,iBAAe,cAAc,MAnBzC,IAmB4D,IAAT,iBAAS,IAAT,CAAvC,iBAAe,gBAAc;AAErC,UAAM,2BAAuB,sBAAQ,MAAM;AACzC,UAAI,CAAC,cAAe,QAAO;AAC3B,YAAM,EAAE,MAAM,OAAO,KAAK,OAAO,IAAI;AACrC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,QACP,UAAU;AAAA,MACZ,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACb,GAAG,CAAC,aAAa,CAAC;AAElB,UAAM,mBAAe,sBAAQ,MAAM;AACjC,aAAO,QAAQ,WAAW;AAAA,IAC5B,GAAG,CAAC,KAAK,CAAC;AAEV,WACE;AAAA,MAAC,cAAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,SACJ,OAFL;AAAA,QAGC,WAAW,GAAG,oBAAoB,GAAG,YAAY,IAAI,KAAK,aAAa,EAAE;AAAA,QACzE,eAAa;AAAA,QACb,KAAK;AAAA;AAAA,IACP;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AClDnB,IAAAC,iBAAqC;;;ACArC,IAAAC,iBAAsC;AACtC,IAAAC,gBAA+D;AAqB3D,IAAAC,sBAAA;AAnBJ,IAAM,oBAAgB,6BAAmC;AAAA,EACvD,OAAO;AACT,CAAC;AAMD,IAAM,cAAU,0BAAyC,CAAC,OAAO,QAAQ;AACvE,QAA6C,YAArC,aAAW,aAZrB,IAY+C,IAAT,iBAAS,IAAT,CAA5B,aAAW;AACnB,QAAM,EAAE,MAAM,QAAI,0BAAW,aAAa;AAE1C,QAAM,UAAM,uBAAQ,MAAM;AACxB,UAAM,MAAM,eAAe,eAAe;AAC1C,UAAM,WAAW,QAAQ,eAAe;AACxC,WAAO,CAAC,KAAK,UAAU,SAAS,EAAE,KAAK,GAAG;AAAA,EAC5C,GAAG,CAAC,WAAW,OAAO,YAAY,CAAC;AAEnC,SACE;AAAA,IAAC,eAAAC,OAAY;AAAA,IAAZ;AAAA,MACC,UAAS;AAAA,OACL,OAFL;AAAA,MAGC,WAAW;AAAA,MACX;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,QAAQ,cAAc;AAEtB,IAAM,cAAU;AAAA,EACd,CAAC,OAAO,QAAQ;AACd,UAA+B,YAAvB,YAlCZ,IAkCmC,IAAT,iBAAS,IAAT,CAAd;AACR,UAAM,EAAE,MAAM,QAAI,0BAAW,aAAa;AAE1C,UAAM,UAAM,uBAAQ,MAAM;AACxB,YAAM,WAAW,QAAQ,UAAU;AACnC,aAAO,CAAC,UAAU,SAAS,EAAE,KAAK,GAAG;AAAA,IACvC,GAAG,CAAC,WAAW,KAAK,CAAC;AAErB,WAAO,6CAAC,eAAAA,OAAY,SAAZ,iCAAwB,OAAxB,EAA8B,WAAW,KAAK,MAAU;AAAA,EAClE;AACF;AAEA,QAAQ,cAAc;AAMtB,SAAS,KAAK,OAAyC;AACrD,QAA2B,YAAnB,QArDV,IAqD6B,IAAT,iBAAS,IAAT,CAAV;AAER,SACE,6CAAC,cAAc,UAAd,EAAuB,OAAO,EAAE,MAAM,GACrC,uDAAC,eAAAA,OAAY,MAAZ,mBAAqB,KAAM,GAC9B;AAEJ;AAEA,KAAK,cAAc;AAEZ,IAAM,SAAS,iCACjB,eAAAA,SADiB;AAAA,EAEpB;AAAA,EACA;AAAA,EACA;AACF;;;ACnEA,IAAAC,iBAAkC;AAClC,IAAAC,gBAA2C;;;ACDpC,IAAM,oBAAoB,CAChC,SAC+B;AAC9B,QAAM,EAAC,OAAO,MAAK,IAAI;AACvB,MAAG,OAAO,UAAU,UAAS;AAC3B,WAAO,MAAM,KAAK;AAAA,EACpB;AAAC;AAED,MAAG,OAAO,UAAU,UAAS;AAC3B,UAAM,SAAyC,CAAC;AAChD,QAAI;AACJ,SAAI,OAAO,OAAM;AACf,aAAO,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ADiBM,IAAAC,sBAAA;AA1BC,IAAM,WAAO;AAAA,EAClB,CAAC,OAAkB,QAAyB;AAC1C,UAA6C,YAArC,QAAM,SAAS,SAZ3B,IAYiD,IAAT,iBAAS,IAAT,CAA5B,QAAM,WAAS;AAEvB,UAAM,gBAAY,uBAAgC,MAAM;AACtD,UAAI,SAAS,OAAW,QAAO;AAE/B,UAAI,YAAY,OAAW,QAAO;AAElC,aAAO,kBAAkB;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,CAAC,iBAAmD;AACzD,kBAAQ,cAAc;AAAA,YACpB,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AACH,qBAAO;AAAA,YACT,KAAK;AAAA,YACL;AACE,qBAAO;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,WACE,6CAAC,eAAAC,MAAA,iCAAc,OAAd,EAAoB,KAAU,MAAM,WAClC,WACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;;;AEuBZ,SAAS,kBAAkB,MAAyB;AACzD,QAAM,MAAiC;AAAA,IACrC,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AACA,SAAO,IAAI,IAAI;AACjB;;;ANlCU,IAAAC,sBAAA;AArCV,SAAS,YAAY,OAAe,OAAwC;AAC1E,SAAO,MAAM,KAAK,CAAC,MAAM,MAAM,KAAK;AACtC;AAYO,SAAS,gCACd,OACoB;AACpB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,UAAmB,OAAO,WAAW;AAE3C,QAAM,yBAA6B,uBAAQ,MAAM;AAC/C,WAAO,WAAW,4CAAc;AAAA,EAClC,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,6CAAC,QAAK,OAAO,EAAE,OAAO,KAAK,SAAS,GAAG,GACrC,wDAAC,uBAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,kDAAC,uBAAK,OAAM,UAAS,SAAQ,WAC3B;AAAA,mDAAC,QAAK,SAAQ,QAAO,0BAAE;AAAA,MACvB;AAAA,QAAC,OAAO;AAAA,QAAP;AAAA,UACC,UAAU;AAAA,UACV,eAAe,CAAC,MAAoB;AAClC,gBAAI,CAAC,YAAY,GAAG,UAAU,EAAG;AACjC,uBAAW,CAAC;AAAA,UACd;AAAA,UACA,OAAM;AAAA,UAEN;AAAA,yDAAC,OAAO,SAAP,EAAe,aAAa,oBAAoB;AAAA,YACjD,6CAAC,OAAO,SAAP,EACE,qBAAW,IAAI,CAAC,MACf,6CAAC,OAAO,MAAP,EAAoB,OAAO,GACzB,4BAAkB,CAAC,KADJ,CAElB,CACD,GACH;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,IAEA,8CAAC,uBAAK,WAAU,UAAS,KAAI,KAC1B;AAAA,gBACC,6CAAC,QAAK,OAAM,QAAO,SAAQ,WAAU,uEAErC,IACE;AAAA,MAEH,OAAO,IAAI,CAAC,UAAU;AACrB,cAAM,aAAsB,MAAM,SAAS;AAC3C,cAAM,WAAoB,cAAc,MAAM,IAAI;AAElD,eACE;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,aAAa,WAAW;AAAA,YAE/B,SAAS,MAAY;AAAE,gCAAkB,MAAM,IAAI;AAAA,YAAG;AAAA,YACtD,OAAO;AAAA,cACL,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,SAAS,WAAW,MAAM;AAAA,cAC1B,QAAQ,aACJ,8BACA;AAAA,YACN;AAAA,YAEA,wDAAC,sBAAI,OAAO,EAAE,UAAU,EAAE,GACxB;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,oBACL,YAAY;AAAA,oBACZ,UAAU;AAAA,oBACV,cAAc;AAAA,kBAChB;AAAA,kBACA,SAAQ;AAAA,kBAEP,gBAAM;AAAA;AAAA,cACT;AAAA,cACA,8CAAC,QAAK,OAAM,QAAO,SAAQ,WACxB;AAAA,sBAAM;AAAA,gBAAK;AAAA,gBAAI,MAAM;AAAA,gBACrB,MAAM,WAAW,mBAAgB;AAAA,iBACpC;AAAA,eACF;AAAA;AAAA,UA1BK,MAAM;AAAA,QA2Bb;AAAA,MAEJ,CAAC;AAAA,OACH;AAAA,KACF,GACF;AAEJ;","names":["import_react","import_themes","RadixCard","import_themes","import_themes","import_react","import_jsx_runtime","RadixSelect","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/molecules/dynamic-form-editor-field-list-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/select.tsx","../../src/utils/resolve-color.ts","../../src/theme/theme-provider.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/molecules/dynamic-form-editor-utils.ts"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Box } from '@radix-ui/themes';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Select } from '@/atoms/select';\nimport { Typo } from '@/atoms/typo';\nimport type { DynamicFormFieldSchema } from '@/types/dynamic-form-schema-generated';\nimport { getFieldTypeLabel, type FieldType } from './dynamic-form-editor-utils';\n\nfunction isFieldType(value: string, types: FieldType[]): value is FieldType {\n return types.some((t) => t === value);\n}\n\nexport interface DynamicFormEditorFieldListPanelProps {\n fields: DynamicFormFieldSchema[];\n selectedFieldName: string | null;\n readonly: boolean;\n fieldTypes: FieldType[];\n hasFieldError: (fieldName: string) => boolean;\n onSelectFieldName: (fieldName: string) => void;\n onAddField: (type: FieldType) => void;\n}\n\nexport function DynamicFormEditorFieldListPanel(\n props: DynamicFormEditorFieldListPanelProps\n): React.ReactElement {\n const {\n fields,\n selectedFieldName,\n readonly,\n fieldTypes,\n hasFieldError,\n onSelectFieldName,\n onAddField,\n } = props;\n\n const isEmpty: boolean = fields.length === 0;\n\n const triggerPlaceholder: string = useMemo(() => {\n return readonly ? '추가(읽기 전용)' : '추가';\n }, [readonly]);\n\n return (\n <Card style={{ width: 340, padding: 12 }}>\n <Flex direction=\"column\" gap=\"3\">\n <Flex align=\"center\" justify=\"between\">\n <Typo variant=\"body\">필드</Typo>\n <Select.Root\n disabled={readonly}\n onValueChange={(v: string): void => {\n if (!isFieldType(v, fieldTypes)) return;\n onAddField(v);\n }}\n value=\"\"\n >\n <Select.Trigger placeholder={triggerPlaceholder} />\n <Select.Content>\n {fieldTypes.map((t) => (\n <Select.Item key={t} value={t}>\n {getFieldTypeLabel(t)}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n </Flex>\n\n <Flex direction=\"column\" gap=\"2\">\n {isEmpty ? (\n <Typo color=\"gray\" variant=\"caption\">\n 아직 필드가 없습니다.\n </Typo>\n ) : null}\n\n {fields.map((field) => {\n const isSelected: boolean = field.name === selectedFieldName;\n const hasError: boolean = hasFieldError(field.name);\n\n return (\n <Card\n error={isSelected ? hasError : undefined}\n key={field.name}\n onClick={(): void => { onSelectFieldName(field.name); }}\n style={{\n padding: 10,\n cursor: 'pointer',\n opacity: readonly ? 0.8 : 1,\n border: isSelected\n ? '1px solid var(--accent-9)'\n : '1px solid transparent',\n }}\n >\n <Box style={{ minWidth: 0 }}>\n <Typo\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n variant=\"body\"\n >\n {field.label}\n </Typo>\n <Typo color=\"gray\" variant=\"caption\">\n {field.name} · {field.type}\n {field.required ? ' · required' : ''}\n </Typo>\n </Box>\n </Card>\n );\n })}\n </Flex>\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n","import { Select as RadixSelect } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { createContext, forwardRef, useContext, useMemo } from 'react';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\nimport { ThemeAccentContext } from '../theme/theme-provider';\n\nconst SelectContext = createContext<{ error?: boolean; color?: UiColor }>({\n error: false,\n});\n\nexport type ContentProps = DistributiveOmit<\n RadixSelect.ContentProps,\n 'color'\n> & {\n isNavigation?: boolean;\n color?: UiColor;\n};\n\nconst Content = forwardRef<HTMLDivElement, ContentProps>((props, ref) => {\n const { className, isNavigation, color, ...rest } = props;\n const { error, color: contextColor } = useContext(SelectContext);\n const themeAccent = useContext(ThemeAccentContext);\n\n // Content는 Portal로 렌더돼 theme의 className override를 못 받으므로, per-instance/Root color가\n // 없으면 theme custom accent(black)를 fallback으로 적용해 Portal 안에서도 black을 유지한다.\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color ?? contextColor ?? themeAccent),\n [color, contextColor, themeAccent]\n );\n\n // custom color(black)는 className override만 사용 — fallback color를 함께 넘기면 자식 Item이\n // 자기 data-accent-color로 gray를 다시 적용해 override를 덮는다.\n const appliedColor = colorClassName ? undefined : radixColor;\n\n const cls = useMemo(() => {\n const etc = isNavigation ? 'nav-select' : '';\n const errorCls = error ? 'tipp-error' : '';\n return clsx(etc, errorCls, colorClassName, className);\n }, [className, colorClassName, error, isNavigation]);\n\n return (\n <RadixSelect.Content\n position=\"popper\"\n {...rest}\n className={cls}\n color={appliedColor}\n ref={ref}\n />\n );\n});\nContent.displayName = 'Select.Content';\n\nexport type TriggerProps = DistributiveOmit<\n RadixSelect.TriggerProps,\n 'color'\n> & {\n color?: UiColor;\n};\n\nconst Trigger = forwardRef<HTMLButtonElement, TriggerProps>((props, ref) => {\n const { className, color, ...rest } = props;\n const { error, color: contextColor } = useContext(SelectContext);\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color ?? contextColor),\n [color, contextColor]\n );\n\n // custom color(black)는 className override만 사용 (위 Content와 동일 이유).\n const appliedColor = colorClassName ? undefined : radixColor;\n\n const cls = useMemo(() => {\n const errorCls = error ? 'error' : '';\n return clsx(errorCls, colorClassName, className);\n }, [className, colorClassName, error]);\n\n return (\n <RadixSelect.Trigger\n {...rest}\n className={cls}\n color={appliedColor}\n ref={ref}\n />\n );\n});\n\nTrigger.displayName = 'Select.Trigger';\n\nexport type SelectRootProps = RadixSelect.RootProps & {\n error?: boolean;\n /** Trigger·Content에 일괄 적용할 color. 각 파트에서 color prop으로 개별 override 가능. */\n color?: UiColor;\n};\n\nfunction Root(props: SelectRootProps): React.ReactNode {\n const { error, color, ...rest } = props;\n\n const value = useMemo(() => ({ error, color }), [error, color]);\n\n return (\n <SelectContext.Provider value={value}>\n <RadixSelect.Root {...rest} />\n </SelectContext.Provider>\n );\n}\n\nRoot.displayName = 'Select.Root';\n\nexport const Select = {\n ...RadixSelect,\n Root,\n Trigger,\n Content,\n};\n","import type { BadgeProps as RadixBadgeProps } from '@radix-ui/themes';\n\n/**\n * Radix Themes가 제공하는 accent color union (gray, red, blue, ...).\n * 모든 color 지원 컴포넌트가 동일한 union을 공유하므로 Badge에서 파생한다.\n */\nexport type RadixColor = NonNullable<RadixBadgeProps['color']>;\n\n/** TIPP 시맨틱 color 별칭. */\nexport type SemanticColor = 'error' | 'accent' | 'neutral' | 'success';\n\n/**\n * Radix accent에 대응이 없어 CSS accent override로 처리하는 커스텀 color.\n * (예: black — `style/black.scss`의 `.tipp-accent-black` 참고)\n */\nexport type CustomColor = 'black';\n\n/** color 지원 컴포넌트가 노출하는 통합 color 타입. */\nexport type UiColor = RadixColor | SemanticColor | CustomColor;\n\n/**\n * union 각 멤버에 분배되는 Omit.\n * Radix의 polymorphic 컴포넌트 props(Text/Heading/Link 등 `as`로 분기되는 union)에서\n * 키를 제거할 때 일반 Omit은 union을 단일 객체로 합쳐 `as` 분기를 무너뜨리므로 이 타입을 쓴다.\n */\nexport type DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n ? Omit<T, K>\n : never;\n\nconst SEMANTIC_COLOR_MAP: Record<SemanticColor, RadixColor | undefined> = {\n error: 'red',\n neutral: 'gray',\n success: 'green',\n accent: undefined,\n};\n\ninterface CustomColorConfig {\n /**\n * accent override를 적용할 className.\n */\n className: string;\n /**\n * Radix에 넘길 fallback color.\n * Text/Heading/Link 등은 `color` prop이 있어야 `data-accent-color`가 붙어\n * `--accent-*`를 참조하므로, 유효한 Radix color를 함께 넘긴 뒤 className으로\n * `--accent-*`를 덮어쓴다. (Badge/Button은 prop 없이도 accent 기반이라 무해)\n */\n fallbackColor: RadixColor;\n}\n\nconst CUSTOM_COLOR_MAP: Record<CustomColor, CustomColorConfig> = {\n black: { className: 'tipp-accent-black', fallbackColor: 'gray' },\n};\n\nconst isSemanticColor = (color?: UiColor): color is SemanticColor =>\n color !== undefined && color in SEMANTIC_COLOR_MAP;\n\nconst isCustomColor = (color?: UiColor): color is CustomColor =>\n color !== undefined && color in CUSTOM_COLOR_MAP;\n\nexport interface ResolvedColor {\n /** Radix 컴포넌트의 `color` prop에 그대로 전달할 값. custom color면 undefined. */\n color?: RadixColor;\n /** accent override를 적용하기 위해 요소에 붙일 className. */\n className?: string;\n}\n\n/**\n * 통합 color 입력을 Radix color prop과 className으로 정규화한다.\n *\n * - custom color(black 등): Radix color는 비우고 accent override className을 반환\n * - semantic color(error/neutral/success/accent): 대응 Radix color로 변환\n * - Radix color: 그대로 pass-through\n */\nexport const resolveColor = (color?: UiColor): ResolvedColor => {\n if (isCustomColor(color)) {\n const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];\n return { color: fallbackColor, className };\n }\n\n if (isSemanticColor(color)) {\n return { color: SEMANTIC_COLOR_MAP[color] };\n }\n\n return { color };\n};\n","import React, { createContext } from 'react';\nimport { Theme } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport { resolveColor, type UiColor } from '../utils/resolve-color';\n\ntype ThemeProps = React.ComponentProps<typeof Theme>;\n\n/**\n * 테마 전역 primary가 custom color(black 등)일 때 그 값을 하위로 전달하는 context.\n * Radix는 Portal 컨텐츠(Select 드롭다운 등)에 theme의 accentColor \"값\"(여기선 fallback gray)만\n * 복제하고 `.tipp-accent-black` className은 복제하지 않으므로, Portal 안에서는 accent override가\n * 사라진다. 래핑된 overlay 컴포넌트(Select 등)가 이 context를 최하위 fallback color로 읽어\n * 자기 요소에 className을 직접 부여하면 Portal 내부에서도 black이 유지된다.\n * (custom accent가 아닐 때는 undefined — Radix 네이티브 portal 상속에 맡긴다.)\n */\nexport const ThemeAccentContext = createContext<UiColor | undefined>(undefined);\n\nexport interface ThemeProviderProps extends Omit<ThemeProps, 'accentColor'> {\n children: React.ReactNode;\n /**\n * 전역 primary(accent) color. Radix accent color에 더해 커스텀 `black`을 지원한다.\n * black이면 Radix에는 fallback `gray`를 넘기고 Theme 루트에 accent override\n * className을 부여하여 하위 컴포넌트가 color prop 없이도 black을 상속한다.\n */\n accentColor?: ThemeProps['accentColor'] | 'black';\n}\n\nexport function ThemeProvider(props: ThemeProviderProps): React.ReactNode {\n const { accentColor = 'iris', className, ...rest } = props;\n\n const { color: radixAccent, className: accentClassName } =\n resolveColor(accentColor);\n\n // custom accent(className이 생기는 경우 = black)일 때만 Portal 보정용으로 context에 흘린다.\n const themeAccent = accentClassName ? accentColor : undefined;\n\n return (\n <ThemeAccentContext.Provider value={themeAccent}>\n <Theme\n accentColor={radixAccent ?? 'iris'}\n className={clsx(accentClassName, className)}\n radius=\"medium\"\n {...rest}\n />\n </ThemeAccentContext.Provider>\n );\n}\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\n\nexport type TypoProps = DistributiveOmit<RadixTextProps, 'color'> & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n color?: UiColor;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, ...rest } = props;\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText\n {...rest}\n className={clsx(colorClassName, className)}\n color={radixColor}\n ref={ref}\n size={radixSize}\n >\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type {\n DynamicFormFieldSchema,\n DynamicFormSchema,\n FieldOption,\n ImageFieldOption,\n ValidationRule,\n} from '@/types/dynamic-form-schema-generated';\n\nexport type FieldType =\n | 'short_text'\n | 'long_text'\n | 'number'\n | 'email'\n | 'dropdown'\n | 'choice'\n | 'radio_cards'\n | 'image_radio_card'\n | 'choices'\n | 'yes_no';\n\nexport type SchemaIssueLevel = 'error' | 'warning';\n\nexport interface SchemaIssue {\n id: string;\n level: SchemaIssueLevel;\n message: string;\n fieldName?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isNonEmptyTrimmedString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction canCompileRegExp(pattern: string): boolean {\n try {\n // eslint-disable-next-line no-new -- 정규식 컴파일 가능 여부만 확인\n new RegExp(pattern);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function getFieldTypes(): FieldType[] {\n return [\n 'short_text',\n 'long_text',\n 'number',\n 'email',\n 'dropdown',\n 'choice',\n 'radio_cards',\n 'image_radio_card',\n 'choices',\n 'yes_no',\n ];\n}\n\nexport function getFieldTypeLabel(type: FieldType): string {\n const map: Record<FieldType, string> = {\n short_text: '짧은 텍스트',\n long_text: '긴 텍스트',\n number: '숫자',\n email: '이메일',\n dropdown: '드롭다운',\n choice: '단일 선택(라디오)',\n radio_cards: '라디오 카드',\n image_radio_card: '이미지 라디오 카드',\n choices: '다중 선택(체크)',\n yes_no: '동의(체크)',\n };\n return map[type];\n}\n\nexport function findFieldIndexByName(\n fields: DynamicFormFieldSchema[],\n fieldName: string\n): number {\n return fields.findIndex((field) => field.name === fieldName);\n}\n\nfunction toCamelFromSnake(value: string): string {\n const parts: string[] = value.split('_').filter(Boolean);\n if (parts.length === 0) return 'field';\n const [first, ...rest] = parts;\n const firstLower = first.toLowerCase();\n const restCamel = rest\n .map((p) => (p.length === 0 ? '' : p[0].toUpperCase() + p.slice(1)))\n .join('');\n return `${firstLower}${restCamel}`;\n}\n\nexport function createUniqueFieldName(\n fields: DynamicFormFieldSchema[],\n baseName: string\n): string {\n const used = new Set<string>(fields.map((f) => f.name));\n if (!used.has(baseName)) return baseName;\n let i = 2;\n while (used.has(`${baseName}${i}`)) i += 1;\n return `${baseName}${i}`;\n}\n\nexport function createDefaultField(\n type: FieldType,\n currentFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const baseName: string = toCamelFromSnake(type);\n const name: string = createUniqueFieldName(currentFields, baseName);\n const label: string = getFieldTypeLabel(type);\n\n if (type === 'short_text') return { name, type, label, placeholder: '' };\n if (type === 'long_text') return { name, type, label, placeholder: '' };\n if (type === 'number') return { name, type, label, placeholder: '' };\n if (type === 'email') return { name, type, label, placeholder: '' };\n if (type === 'dropdown')\n return {\n name,\n type,\n label,\n placeholder: '',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'choice')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'radio_cards')\n return { name, type, label, options: [{ label: '옵션 1', value: 'option1' }] };\n if (type === 'choices')\n return {\n name,\n type,\n label,\n orientation: 'vertical',\n options: [{ label: '옵션 1', value: 'option1' }],\n };\n if (type === 'yes_no') return { name, type, label, description: '' };\n\n return {\n name,\n type,\n label,\n gridColumnsCount: 4,\n gridItemHeight: '160px',\n gridGap: '2',\n imageFit: 'cover',\n options: [\n {\n label: '이미지 1',\n value: 'option1',\n imageSrc: 'https://placehold.co/300x300/png?text=1',\n },\n ],\n };\n}\n\nexport function normalizeSchema(value: DynamicFormSchema | undefined): DynamicFormSchema {\n const fallback: DynamicFormSchema = { fields: [] };\n if (!value) return fallback;\n if (!Array.isArray(value.fields)) return fallback;\n return { fields: value.fields };\n}\n\nexport function validateDynamicFormSchema(schema: DynamicFormSchema): SchemaIssue[] {\n const issues: SchemaIssue[] = [];\n\n const nameToCount = new Map<string, number>();\n schema.fields.forEach((field) => {\n const prev = nameToCount.get(field.name) || 0;\n nameToCount.set(field.name, prev + 1);\n });\n\n schema.fields.forEach((field, index) => {\n const fieldKey = `${index}:${field.name}`;\n\n if (!isNonEmptyTrimmedString(field.name)) {\n issues.push({\n id: `field.name.required.${fieldKey}`,\n level: 'error',\n message: '필드 name은 필수입니다',\n fieldName: field.name,\n });\n } else if (field.name.trim() !== field.name) {\n issues.push({\n id: `field.name.trim.${fieldKey}`,\n level: 'warning',\n message: '필드 name 앞/뒤 공백은 제거하는 것을 권장합니다',\n fieldName: field.name,\n });\n }\n\n if (isNonEmptyTrimmedString(field.name)) {\n const count = nameToCount.get(field.name) || 0;\n if (count > 1) {\n issues.push({\n id: `field.name.duplicate.${fieldKey}`,\n level: 'error',\n message: `중복된 name입니다: ${field.name}`,\n fieldName: field.name,\n });\n }\n }\n\n if (!isNonEmptyTrimmedString(field.label)) {\n issues.push({\n id: `field.label.required.${fieldKey}`,\n level: 'error',\n message: '필드 label은 필수입니다',\n fieldName: field.name,\n });\n }\n\n const type = field.type;\n const isOptionType =\n type === 'dropdown' ||\n type === 'choice' ||\n type === 'radio_cards' ||\n type === 'choices';\n\n if (isOptionType) {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.options.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n }\n }\n\n if (type === 'image_radio_card') {\n const optionsRaw: unknown = field.options;\n if (!Array.isArray(optionsRaw) || optionsRaw.length === 0) {\n issues.push({\n id: `field.imageOptions.required.${fieldKey}`,\n level: 'error',\n message: 'options는 1개 이상 필요합니다',\n fieldName: field.name,\n });\n } else {\n optionsRaw.forEach((opt, optIndex) => {\n const imageSrc = isRecord(opt) ? opt.imageSrc : undefined;\n if (!isNonEmptyTrimmedString(imageSrc)) {\n issues.push({\n id: `field.imageOptions.imageSrc.required.${fieldKey}.${optIndex}`,\n level: 'error',\n message: 'imageSrc는 필수입니다',\n fieldName: field.name,\n });\n }\n });\n }\n }\n\n const validation: ValidationRule | undefined = field.validation;\n if (validation) {\n if (isFiniteNumber(validation.min) && isFiniteNumber(validation.max)) {\n if (validation.min > validation.max) {\n issues.push({\n id: `field.validation.minmax.${fieldKey}`,\n level: 'error',\n message: 'validation.min은 validation.max 이하이어야 합니다',\n fieldName: field.name,\n });\n }\n }\n if (isNonEmptyTrimmedString(validation.pattern)) {\n if (!canCompileRegExp(validation.pattern)) {\n issues.push({\n id: `field.validation.pattern.${fieldKey}`,\n level: 'error',\n message: 'validation.pattern이 올바른 정규식이 아닙니다',\n fieldName: field.name,\n });\n }\n }\n }\n });\n\n return issues;\n}\n\nexport function hasErrorIssues(issues: SchemaIssue[]): boolean {\n return issues.some((i) => i.level === 'error');\n}\n\nexport function updateSchemaFields(\n schema: DynamicFormSchema,\n nextFields: DynamicFormFieldSchema[]\n): DynamicFormSchema {\n return { fields: nextFields };\n}\n\nexport function moveField(\n fields: DynamicFormFieldSchema[],\n fromIndex: number,\n toIndex: number\n): DynamicFormFieldSchema[] {\n if (fromIndex < 0 || fromIndex >= fields.length) return fields;\n if (toIndex < 0 || toIndex >= fields.length) return fields;\n if (fromIndex === toIndex) return fields;\n\n const next: DynamicFormFieldSchema[] = [...fields];\n const [item] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, item);\n return next;\n}\n\nexport function duplicateField(fields: DynamicFormFieldSchema[], index: number): DynamicFormFieldSchema[] {\n if (index < 0 || index >= fields.length) return fields;\n const target = fields[index];\n const nextName: string = createUniqueFieldName(fields, target.name);\n const cloned: DynamicFormFieldSchema = { ...target, name: nextName };\n const next: DynamicFormFieldSchema[] = [...fields];\n next.splice(index + 1, 0, cloned);\n return next;\n}\n\nexport function updateFieldCommonProps(\n field: DynamicFormFieldSchema,\n next: {\n name?: string;\n label?: string;\n description?: string | undefined;\n required?: boolean;\n }\n): DynamicFormFieldSchema {\n const { name, label, description, required } = next;\n return {\n ...field,\n ...(name !== undefined ? { name } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(required !== undefined ? { required } : {}),\n };\n}\n\nexport function updateFieldValidation(\n field: DynamicFormFieldSchema,\n next: ValidationRule | undefined\n): DynamicFormFieldSchema {\n if (!next) {\n const { validation: _validation, ...rest } = field;\n return rest;\n }\n return { ...field, validation: next };\n}\n\nexport function updateTextPlaceholder(\n field: DynamicFormFieldSchema,\n placeholder: string\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'short_text' || type === 'long_text' || type === 'number' || type === 'email' || type === 'dropdown') {\n return { ...field, placeholder };\n }\n return field;\n}\n\nexport function updateOrientation(\n field: DynamicFormFieldSchema,\n orientation: 'horizontal' | 'vertical'\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'choice' || type === 'choices') return { ...field, orientation };\n return field;\n}\n\nexport function updateOptions(\n field: DynamicFormFieldSchema,\n options: FieldOption[]\n): DynamicFormFieldSchema {\n const type = field.type;\n if (type === 'dropdown' || type === 'choice' || type === 'radio_cards' || type === 'choices') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageOptions(\n field: DynamicFormFieldSchema,\n options: ImageFieldOption[]\n): DynamicFormFieldSchema {\n if (field.type === 'image_radio_card') {\n return { ...field, options };\n }\n return field;\n}\n\nexport function updateImageLayout(\n field: DynamicFormFieldSchema,\n next: {\n gridColumnsCount?: number | undefined;\n gridItemHeight?: string | undefined;\n gridColumns?: string | undefined;\n gridRows?: string | undefined;\n gridGap?: string | undefined;\n imageFit?: 'cover' | 'contain' | undefined;\n }\n): DynamicFormFieldSchema {\n if (field.type !== 'image_radio_card') return field;\n return { ...field, ...next };\n}\n\nexport function resetFieldType(\n field: DynamicFormFieldSchema,\n nextType: FieldType,\n allFields: DynamicFormFieldSchema[]\n): DynamicFormFieldSchema {\n const base: DynamicFormFieldSchema = createDefaultField(nextType, allFields);\n return {\n ...base,\n name: field.name,\n label: field.label,\n description: field.description,\n required: field.required,\n validation: field.validation,\n };\n}\n"],"mappings":"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","names":["import_react","import_themes","RadixCard","import_themes","import_themes","import_clsx","import_react","import_react","import_themes","import_jsx_runtime","import_jsx_runtime","_a","RadixSelect","import_themes","import_clsx","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DynamicFormEditorFieldListPanel
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-2O7NVLVP.js";
|
|
4
4
|
import "../chunk-Z7WNKARH.js";
|
|
5
|
-
import "../chunk-
|
|
5
|
+
import "../chunk-YXMB4MCM.js";
|
|
6
|
+
import "../chunk-GR4PG6HY.js";
|
|
7
|
+
import "../chunk-LDBWASUA.js";
|
|
6
8
|
import "../chunk-25HMMI7R.js";
|
|
7
9
|
import "../chunk-RP2RGCAW.js";
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-WYWM2HSZ.js";
|
|
11
|
+
import "../chunk-VFQD57ZY.js";
|
|
10
12
|
import "../chunk-CRTRMMJ7.js";
|
|
11
13
|
export {
|
|
12
14
|
DynamicFormEditorFieldListPanel
|
|
@@ -92,6 +92,7 @@ var import_themes2 = require("@radix-ui/themes");
|
|
|
92
92
|
|
|
93
93
|
// src/atoms/typo.tsx
|
|
94
94
|
var import_themes3 = require("@radix-ui/themes");
|
|
95
|
+
var import_clsx = require("clsx");
|
|
95
96
|
var import_react2 = require("react");
|
|
96
97
|
|
|
97
98
|
// src/utils/map-with-responsive.ts
|
|
@@ -112,11 +113,38 @@ var mapWithResponsive = (args) => {
|
|
|
112
113
|
return value;
|
|
113
114
|
};
|
|
114
115
|
|
|
116
|
+
// src/utils/resolve-color.ts
|
|
117
|
+
var SEMANTIC_COLOR_MAP = {
|
|
118
|
+
error: "red",
|
|
119
|
+
neutral: "gray",
|
|
120
|
+
success: "green",
|
|
121
|
+
accent: void 0
|
|
122
|
+
};
|
|
123
|
+
var CUSTOM_COLOR_MAP = {
|
|
124
|
+
black: { className: "tipp-accent-black", fallbackColor: "gray" }
|
|
125
|
+
};
|
|
126
|
+
var isSemanticColor = (color) => color !== void 0 && color in SEMANTIC_COLOR_MAP;
|
|
127
|
+
var isCustomColor = (color) => color !== void 0 && color in CUSTOM_COLOR_MAP;
|
|
128
|
+
var resolveColor = (color) => {
|
|
129
|
+
if (isCustomColor(color)) {
|
|
130
|
+
const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];
|
|
131
|
+
return { color: fallbackColor, className };
|
|
132
|
+
}
|
|
133
|
+
if (isSemanticColor(color)) {
|
|
134
|
+
return { color: SEMANTIC_COLOR_MAP[color] };
|
|
135
|
+
}
|
|
136
|
+
return { color };
|
|
137
|
+
};
|
|
138
|
+
|
|
115
139
|
// src/atoms/typo.tsx
|
|
116
140
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
117
141
|
var Typo = (0, import_react2.forwardRef)(
|
|
118
142
|
(props, ref) => {
|
|
119
|
-
const _a = props, { size, variant, children } = _a, rest = __objRest(_a, ["size", "variant", "children"]);
|
|
143
|
+
const _a = props, { size, variant, children, color, className } = _a, rest = __objRest(_a, ["size", "variant", "children", "color", "className"]);
|
|
144
|
+
const { color: radixColor, className: colorClassName } = (0, import_react2.useMemo)(
|
|
145
|
+
() => resolveColor(color),
|
|
146
|
+
[color]
|
|
147
|
+
);
|
|
120
148
|
const radixSize = (0, import_react2.useMemo)(() => {
|
|
121
149
|
if (size !== void 0) return size;
|
|
122
150
|
if (variant === void 0) return "2";
|
|
@@ -135,7 +163,16 @@ var Typo = (0, import_react2.forwardRef)(
|
|
|
135
163
|
}
|
|
136
164
|
});
|
|
137
165
|
}, [size, variant]);
|
|
138
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
167
|
+
import_themes3.Text,
|
|
168
|
+
__spreadProps(__spreadValues({}, rest), {
|
|
169
|
+
className: (0, import_clsx.clsx)(colorClassName, className),
|
|
170
|
+
color: radixColor,
|
|
171
|
+
ref,
|
|
172
|
+
size: radixSize,
|
|
173
|
+
children
|
|
174
|
+
})
|
|
175
|
+
);
|
|
139
176
|
}
|
|
140
177
|
);
|
|
141
178
|
Typo.displayName = "Typo";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/molecules/dynamic-form-editor-issues-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts"],"sourcesContent":["import React from 'react';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Typo } from '@/atoms/typo';\nimport type { SchemaIssue } from './dynamic-form-editor-utils';\n\nexport interface DynamicFormEditorIssuesPanelProps {\n issues: SchemaIssue[];\n}\n\nexport function DynamicFormEditorIssuesPanel(\n props: DynamicFormEditorIssuesPanelProps\n): React.ReactElement | null {\n const { issues } = props;\n if (issues.length === 0) return null;\n\n return (\n <Card style={{ padding: 12 }}>\n <Flex direction=\"column\" gap=\"2\">\n <Typo variant=\"caption\">스키마 이슈</Typo>\n {issues.map((i) => (\n <Typo\n color={i.level === 'error' ? 'red' : 'gray'}\n key={i.id}\n variant=\"caption\"\n >\n [{i.level}] {i.message}\n {i.fieldName ? ` (field: ${i.fieldName})` : ''}\n </Typo>\n ))}\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\n\nexport type TypoProps = RadixTextProps & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, ...rest } = props;\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText {...rest} ref={ref} size={radixSize}>\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n"],"mappings":"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","names":["RadixCard","import_themes","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/molecules/dynamic-form-editor-issues-panel.tsx","../../src/atoms/card.tsx","../../src/atoms/flex.tsx","../../src/atoms/typo.tsx","../../src/utils/map-with-responsive.ts","../../src/utils/resolve-color.ts"],"sourcesContent":["import React from 'react';\nimport { Card } from '@/atoms/card';\nimport { Flex } from '@/atoms/flex';\nimport { Typo } from '@/atoms/typo';\nimport type { SchemaIssue } from './dynamic-form-editor-utils';\n\nexport interface DynamicFormEditorIssuesPanelProps {\n issues: SchemaIssue[];\n}\n\nexport function DynamicFormEditorIssuesPanel(\n props: DynamicFormEditorIssuesPanelProps\n): React.ReactElement | null {\n const { issues } = props;\n if (issues.length === 0) return null;\n\n return (\n <Card style={{ padding: 12 }}>\n <Flex direction=\"column\" gap=\"2\">\n <Typo variant=\"caption\">스키마 이슈</Typo>\n {issues.map((i) => (\n <Typo\n color={i.level === 'error' ? 'red' : 'gray'}\n key={i.id}\n variant=\"caption\"\n >\n [{i.level}] {i.message}\n {i.fieldName ? ` (field: ${i.fieldName})` : ''}\n </Typo>\n ))}\n </Flex>\n </Card>\n );\n}\n\n","import { forwardRef, useMemo } from 'react';\nimport {\n Card as RadixCard,\n type CardProps as RadixCardProps,\n} from '@radix-ui/themes';\n\nexport type CardProps = RadixCardProps & {\n borderRadius?: 'none';\n borderDisable?: {\n left?: boolean;\n right?: boolean;\n top?: boolean;\n bottom?: boolean;\n };\n error?: boolean;\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (props, forwardedRef) => {\n const { borderDisable, borderRadius, error, ...rest } = props;\n\n const borderInsetClassName = useMemo(() => {\n if (!borderDisable) return '';\n const { left, right, top, bottom } = borderDisable;\n return [\n left && 'disable-inset-left',\n right && 'disable-inset-right',\n top && 'disable-inset-top',\n bottom && 'disable-inset-bottom',\n ]\n .filter(Boolean)\n .join(' ');\n }, [borderDisable]);\n\n const errorClsName = useMemo(() => {\n return error ? ' error' : '';\n }, [error]);\n\n return (\n <RadixCard\n variant=\"surface\"\n {...rest}\n className={`${borderInsetClassName}${errorClsName} ${rest.className || ''}`}\n data-radius={borderRadius}\n ref={forwardedRef}\n />\n );\n }\n);\n\nCard.displayName = 'Card';\n","export { Flex, type FlexProps } from '@radix-ui/themes';\n","import type { TextProps as RadixTextProps } from '@radix-ui/themes';\nimport type { Responsive } from '@radix-ui/themes/props';\nimport { Text as RadixText } from '@radix-ui/themes';\nimport { clsx } from 'clsx';\nimport React, { useMemo, forwardRef } from 'react';\nimport { mapWithResponsive } from '@/utils/map-with-responsive';\nimport {\n resolveColor,\n type DistributiveOmit,\n type UiColor,\n} from '../utils/resolve-color';\n\nexport type TypoProps = DistributiveOmit<RadixTextProps, 'color'> & {\n variant?: Responsive<'body' | 'caption' | 'subtitle'>;\n color?: UiColor;\n};\n\nexport const Typo = forwardRef<HTMLSpanElement, TypoProps>(\n (props: TypoProps, ref): React.ReactNode => {\n const { size, variant, children, color, className, ...rest } = props;\n\n const { color: radixColor, className: colorClassName } = useMemo(\n () => resolveColor(color),\n [color]\n );\n\n const radixSize = useMemo<RadixTextProps['size']>(() => {\n if (size !== undefined) return size;\n\n if (variant === undefined) return '2';\n\n return mapWithResponsive({\n value: variant,\n mapFn: (variantValue?: 'body' | 'caption' | 'subtitle') => {\n switch (variantValue) {\n case 'caption':\n return '1';\n case 'subtitle':\n return '3';\n case 'body':\n default:\n return '2';\n }\n },\n });\n }, [size, variant]);\n\n return (\n <RadixText\n {...rest}\n className={clsx(colorClassName, className)}\n color={radixColor}\n ref={ref}\n size={radixSize}\n >\n {children}\n </RadixText>\n );\n }\n);\n\nTypo.displayName = 'Typo';\n","import type { Breakpoint, Responsive } from \"@radix-ui/themes/props\";\n\nexport const mapWithResponsive = <T extends string,K extends string>(\n args: {value: Responsive<T>, mapFn: (value?:T)=>K |undefined}\n): Responsive<K> | undefined => {\n const {value, mapFn} = args;\n if(typeof value === 'string'){\n return mapFn(value);\n };\n \n if(typeof value === 'object'){\n const newObj: Partial<Record<Breakpoint, K>> = {};\n let key: Breakpoint;\n for(key in value){\n newObj[key] = mapFn(value[key]);\n }\n return newObj;\n }\n return value;\n};\n","import type { BadgeProps as RadixBadgeProps } from '@radix-ui/themes';\n\n/**\n * Radix Themes가 제공하는 accent color union (gray, red, blue, ...).\n * 모든 color 지원 컴포넌트가 동일한 union을 공유하므로 Badge에서 파생한다.\n */\nexport type RadixColor = NonNullable<RadixBadgeProps['color']>;\n\n/** TIPP 시맨틱 color 별칭. */\nexport type SemanticColor = 'error' | 'accent' | 'neutral' | 'success';\n\n/**\n * Radix accent에 대응이 없어 CSS accent override로 처리하는 커스텀 color.\n * (예: black — `style/black.scss`의 `.tipp-accent-black` 참고)\n */\nexport type CustomColor = 'black';\n\n/** color 지원 컴포넌트가 노출하는 통합 color 타입. */\nexport type UiColor = RadixColor | SemanticColor | CustomColor;\n\n/**\n * union 각 멤버에 분배되는 Omit.\n * Radix의 polymorphic 컴포넌트 props(Text/Heading/Link 등 `as`로 분기되는 union)에서\n * 키를 제거할 때 일반 Omit은 union을 단일 객체로 합쳐 `as` 분기를 무너뜨리므로 이 타입을 쓴다.\n */\nexport type DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n ? Omit<T, K>\n : never;\n\nconst SEMANTIC_COLOR_MAP: Record<SemanticColor, RadixColor | undefined> = {\n error: 'red',\n neutral: 'gray',\n success: 'green',\n accent: undefined,\n};\n\ninterface CustomColorConfig {\n /**\n * accent override를 적용할 className.\n */\n className: string;\n /**\n * Radix에 넘길 fallback color.\n * Text/Heading/Link 등은 `color` prop이 있어야 `data-accent-color`가 붙어\n * `--accent-*`를 참조하므로, 유효한 Radix color를 함께 넘긴 뒤 className으로\n * `--accent-*`를 덮어쓴다. (Badge/Button은 prop 없이도 accent 기반이라 무해)\n */\n fallbackColor: RadixColor;\n}\n\nconst CUSTOM_COLOR_MAP: Record<CustomColor, CustomColorConfig> = {\n black: { className: 'tipp-accent-black', fallbackColor: 'gray' },\n};\n\nconst isSemanticColor = (color?: UiColor): color is SemanticColor =>\n color !== undefined && color in SEMANTIC_COLOR_MAP;\n\nconst isCustomColor = (color?: UiColor): color is CustomColor =>\n color !== undefined && color in CUSTOM_COLOR_MAP;\n\nexport interface ResolvedColor {\n /** Radix 컴포넌트의 `color` prop에 그대로 전달할 값. custom color면 undefined. */\n color?: RadixColor;\n /** accent override를 적용하기 위해 요소에 붙일 className. */\n className?: string;\n}\n\n/**\n * 통합 color 입력을 Radix color prop과 className으로 정규화한다.\n *\n * - custom color(black 등): Radix color는 비우고 accent override className을 반환\n * - semantic color(error/neutral/success/accent): 대응 Radix color로 변환\n * - Radix color: 그대로 pass-through\n */\nexport const resolveColor = (color?: UiColor): ResolvedColor => {\n if (isCustomColor(color)) {\n const { className, fallbackColor } = CUSTOM_COLOR_MAP[color];\n return { color: fallbackColor, className };\n }\n\n if (isSemanticColor(color)) {\n return { color: SEMANTIC_COLOR_MAP[color] };\n }\n\n return { color };\n};\n"],"mappings":"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","names":["RadixCard","import_themes","import_themes","import_react","import_jsx_runtime","RadixText","import_jsx_runtime"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DynamicFormEditorIssuesPanel
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-7JW5Z2TL.js";
|
|
4
|
+
import "../chunk-GR4PG6HY.js";
|
|
5
|
+
import "../chunk-LDBWASUA.js";
|
|
4
6
|
import "../chunk-25HMMI7R.js";
|
|
5
7
|
import "../chunk-RP2RGCAW.js";
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-LDBWASUA.js";
|
|
8
|
+
import "../chunk-VFQD57ZY.js";
|
|
8
9
|
import "../chunk-CRTRMMJ7.js";
|
|
9
10
|
export {
|
|
10
11
|
DynamicFormEditorIssuesPanel
|