@customafk/lunas-ui 0.2.37 → 0.2.38
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/{alert-DubR6Szk.cjs → alert-B2PaDJp6.cjs} +2 -2
- package/dist/{alert-DubR6Szk.cjs.map → alert-B2PaDJp6.cjs.map} +1 -1
- package/dist/{alert-CT7oAzCC.d.mts → alert-C-bk-pne.d.mts} +5 -5
- package/dist/{alert-lqPNRRvJ.d.cts → alert-DDxGzOzi.d.cts} +5 -5
- package/dist/{avatar-CqRl9dge.cjs → avatar-TyOphzGo.cjs} +2 -2
- package/dist/{avatar-CqRl9dge.cjs.map → avatar-TyOphzGo.cjs.map} +1 -1
- package/dist/{avatar-m1LjDIil.mjs → avatar-fltdRVsJ.mjs} +1 -1
- package/dist/{avatar-m1LjDIil.mjs.map → avatar-fltdRVsJ.mjs.map} +1 -1
- package/dist/{badge-Bhbhmsic.mjs → badge-CDGBGq8X.mjs} +1 -1
- package/dist/{badge-Bhbhmsic.mjs.map → badge-CDGBGq8X.mjs.map} +1 -1
- package/dist/{badge-C4nTfJGX.d.mts → badge-IUtmECjN.d.cts} +7 -7
- package/dist/{badge-DMnKV_uW.cjs → badge-KW7xu5Ca.cjs} +2 -2
- package/dist/{badge-DMnKV_uW.cjs.map → badge-KW7xu5Ca.cjs.map} +1 -1
- package/dist/{badge-Dq-Yyus_.d.cts → badge-lvr8nB_0.d.mts} +7 -7
- package/dist/{button-CYLxBCfa.d.cts → button-Brw-tmr9.d.cts} +5 -5
- package/dist/{button-Bu4ejNOW.cjs → button-C--DAN1D.cjs} +2 -2
- package/dist/button-C--DAN1D.cjs.map +1 -0
- package/dist/button-CCVJTHBI.mjs +2 -0
- package/dist/button-CCVJTHBI.mjs.map +1 -0
- package/dist/{button-DlFsSFmT.d.mts → button-DhDRMeFA.d.mts} +5 -5
- package/dist/{button.variants-tnhb123u.cjs → button.variants-4kw6plrv.cjs} +2 -2
- package/dist/{button.variants-tnhb123u.cjs.map → button.variants-4kw6plrv.cjs.map} +1 -1
- package/dist/{button.variants-B8aRZ52K.mjs → button.variants-DkMqWB8G.mjs} +1 -1
- package/dist/{button.variants-B8aRZ52K.mjs.map → button.variants-DkMqWB8G.mjs.map} +1 -1
- package/dist/{calendar-CMd11yg9.cjs → calendar-4weBDnXz.cjs} +2 -2
- package/dist/{calendar-CMd11yg9.cjs.map → calendar-4weBDnXz.cjs.map} +1 -1
- package/dist/{calendar-BDhIfwPP.mjs → calendar-R866yyd1.mjs} +2 -2
- package/dist/{calendar-BDhIfwPP.mjs.map → calendar-R866yyd1.mjs.map} +1 -1
- package/dist/cards/grid-product-card.cjs +1 -1
- package/dist/cards/grid-product-card.mjs +1 -1
- package/dist/cards/product-card.cjs +1 -1
- package/dist/cards/product-card.mjs +1 -1
- package/dist/cards/simple-card.cjs +1 -1
- package/dist/cards/simple-card.d.mts +2 -2
- package/dist/cards/simple-card.mjs +1 -1
- package/dist/{checkbox-CgHaRkuU.mjs → checkbox-Cat3i08X.mjs} +1 -1
- package/dist/{checkbox-CgHaRkuU.mjs.map → checkbox-Cat3i08X.mjs.map} +1 -1
- package/dist/{checkbox-BwDvS4De.cjs → checkbox-Dsq-MSbH.cjs} +2 -2
- package/dist/{checkbox-BwDvS4De.cjs.map → checkbox-Dsq-MSbH.cjs.map} +1 -1
- package/dist/chunk-350yNsax.cjs +1 -0
- package/dist/{close-DrCUWZt0.cjs → close-Dlo1bI8x.cjs} +2 -2
- package/dist/{close-DrCUWZt0.cjs.map → close-Dlo1bI8x.cjs.map} +1 -1
- package/dist/{close-B7OOMSZl.mjs → close-_UHFeiLS.mjs} +1 -1
- package/dist/{close-B7OOMSZl.mjs.map → close-_UHFeiLS.mjs.map} +1 -1
- package/dist/cms-layout-BCH4NroR.cjs +2 -0
- package/dist/cms-layout-BCH4NroR.cjs.map +1 -0
- package/dist/cms-layout-DkCR1AfG.mjs +2 -0
- package/dist/cms-layout-DkCR1AfG.mjs.map +1 -0
- package/dist/{command-DiXzSGc8.cjs → command-CsP8a1Un.cjs} +2 -2
- package/dist/{command-DiXzSGc8.cjs.map → command-CsP8a1Un.cjs.map} +1 -1
- package/dist/{command-FnbrPZ7_.mjs → command-D6_CSbwJ.mjs} +2 -2
- package/dist/{command-FnbrPZ7_.mjs.map → command-D6_CSbwJ.mjs.map} +1 -1
- package/dist/data-display/country.cjs +1 -1
- package/dist/data-display/country.mjs +1 -1
- package/dist/data-display/data-list.cjs +1 -1
- package/dist/data-display/date-tooltip.cjs +1 -1
- package/dist/data-display/date-tooltip.mjs +1 -1
- package/dist/data-display/date.cjs +1 -1
- package/dist/data-display/date.mjs +1 -1
- package/dist/data-display/empty.cjs +1 -1
- package/dist/data-display/name.cjs +1 -1
- package/dist/data-display/name.mjs +1 -1
- package/dist/data-display/phone-number.cjs +1 -1
- package/dist/data-display/phone-number.mjs +1 -1
- package/dist/data-display/role-badge.cjs +1 -1
- package/dist/data-display/role-badge.mjs +1 -1
- package/dist/data-display/statistic.cjs +1 -1
- package/dist/data-display/statistic.d.cts +3 -3
- package/dist/data-display/statistic.d.mts +3 -3
- package/dist/data-display/statistic.mjs +1 -1
- package/dist/data-display/user.cjs +1 -1
- package/dist/data-display/user.mjs +1 -1
- package/dist/{date-DtajzNoy.cjs → date-D4NVl6C9.cjs} +2 -2
- package/dist/{date-DtajzNoy.cjs.map → date-D4NVl6C9.cjs.map} +1 -1
- package/dist/{date-CFgc7pK3.mjs → date-fY3sUcLp.mjs} +1 -1
- package/dist/{date-CFgc7pK3.mjs.map → date-fY3sUcLp.mjs.map} +1 -1
- package/dist/{dialog-D1sWnn6n.cjs → dialog-BigPrWIj.cjs} +2 -2
- package/dist/{dialog-D1sWnn6n.cjs.map → dialog-BigPrWIj.cjs.map} +1 -1
- package/dist/{dialog-EGFZeITu.mjs → dialog-CLDnvNH_.mjs} +2 -2
- package/dist/{dialog-EGFZeITu.mjs.map → dialog-CLDnvNH_.mjs.map} +1 -1
- package/dist/{dialog-_zfOGo8B.d.mts → dialog-CsltUGHB.d.mts} +12 -12
- package/dist/{dialog-1ArhWB8r.d.cts → dialog-D0zfwr8i.d.cts} +12 -12
- package/dist/dialogs/confirm-dialog.cjs +1 -1
- package/dist/dialogs/confirm-dialog.mjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +24 -24
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +24 -24
- package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
- package/dist/dialogs/detail-dialog/index.cjs +1 -1
- package/dist/dialogs/detail-dialog/index.mjs +1 -1
- package/dist/dialogs/error-dialog.cjs +1 -1
- package/dist/dialogs/error-dialog.mjs +1 -1
- package/dist/dialogs/loading-dialog.cjs +1 -1
- package/dist/dialogs/loading-dialog.mjs +1 -1
- package/dist/dist-Cx5ufCdr.cjs +2 -0
- package/dist/{dist-CAeolvAH.cjs.map → dist-Cx5ufCdr.cjs.map} +1 -1
- package/dist/dist-DVrfqn8H.mjs +2 -0
- package/dist/{dist-BQGL-YKY.mjs.map → dist-DVrfqn8H.mjs.map} +1 -1
- package/dist/{drawer-B6C8-Ndu.cjs → drawer-BB8BZzDG.cjs} +2 -2
- package/dist/{drawer-B6C8-Ndu.cjs.map → drawer-BB8BZzDG.cjs.map} +1 -1
- package/dist/{dropdown-menu-C6tRSumY.mjs → dropdown-menu-BWhiVsEf.mjs} +1 -1
- package/dist/{dropdown-menu-C6tRSumY.mjs.map → dropdown-menu-BWhiVsEf.mjs.map} +1 -1
- package/dist/{dropdown-menu-Bz7oMQ36.cjs → dropdown-menu-CVh520yG.cjs} +2 -2
- package/dist/{dropdown-menu-Bz7oMQ36.cjs.map → dropdown-menu-CVh520yG.cjs.map} +1 -1
- package/dist/features/descriptions/index.cjs +1 -1
- package/dist/features/descriptions/index.cjs.map +1 -1
- package/dist/features/descriptions/index.d.cts +1 -1
- package/dist/features/descriptions/index.d.mts +6 -6
- package/dist/features/descriptions/index.mjs +1 -1
- package/dist/features/descriptions/index.mjs.map +1 -1
- package/dist/features/search-modal/index.cjs +1 -1
- package/dist/features/search-modal/index.d.mts +2 -2
- package/dist/features/search-modal/index.mjs +1 -1
- package/dist/features/tables/index.cjs +1 -1
- package/dist/features/tables/index.d.cts +2 -2
- package/dist/features/tables/index.d.mts +3 -3
- package/dist/features/tables/index.mjs +1 -1
- package/dist/features/tanstack-form/index.cjs +1 -1
- package/dist/features/tanstack-form/index.d.cts +2 -2
- package/dist/features/tanstack-form/index.d.mts +2 -2
- package/dist/features/tanstack-form/index.mjs +1 -1
- package/dist/features/text-editor/index.cjs +1 -1
- package/dist/features/text-editor/index.d.cts +1 -1
- package/dist/features/text-editor/index.d.mts +1 -1
- package/dist/features/text-editor/index.mjs +1 -1
- package/dist/{field-pfL7RWcN.cjs → field-BrlETeXX.cjs} +2 -2
- package/dist/{field-pfL7RWcN.cjs.map → field-BrlETeXX.cjs.map} +1 -1
- package/dist/{field-DhgAIueI.mjs → field-dYemS0hQ.mjs} +2 -2
- package/dist/{field-DhgAIueI.mjs.map → field-dYemS0hQ.mjs.map} +1 -1
- package/dist/{flex-BAcvp4lB.mjs → flex-B6YSJzGe.mjs} +1 -1
- package/dist/{flex-BAcvp4lB.mjs.map → flex-B6YSJzGe.mjs.map} +1 -1
- package/dist/{flex-DYh2t8ft.cjs → flex-DmWmOBn5.cjs} +2 -2
- package/dist/{flex-DYh2t8ft.cjs.map → flex-DmWmOBn5.cjs.map} +1 -1
- package/dist/{heading-woRh-IC7.mjs → heading-De4Pn3mZ.mjs} +1 -1
- package/dist/{heading-woRh-IC7.mjs.map → heading-De4Pn3mZ.mjs.map} +1 -1
- package/dist/{heading-wUXEbicM.cjs → heading-tGTqk3pA.cjs} +2 -2
- package/dist/{heading-wUXEbicM.cjs.map → heading-tGTqk3pA.cjs.map} +1 -1
- package/dist/image-D7OZ13Ib.mjs +2 -0
- package/dist/{image-D2U1SBw5.mjs.map → image-D7OZ13Ib.mjs.map} +1 -1
- package/dist/image-W_Yb0xTB.cjs +2 -0
- package/dist/{image-Y7gCz7uE.cjs.map → image-W_Yb0xTB.cjs.map} +1 -1
- package/dist/{index-C6nrbQ-E.d.cts → index-9eog5ilY.d.cts} +36 -4
- package/dist/{index-CJoz7sMc.d.mts → index-BuNzvvj3.d.mts} +64 -32
- package/dist/{index-DiW-62hY.d.mts → index-CG8iS6qj.d.cts} +3 -3
- package/dist/index-Cm62M0Ft.d.mts +90 -0
- package/dist/{index-Du_HLRsN.d.cts → index-DI8qmezw.d.mts} +7 -7
- package/dist/index-DsD83ZN8.d.cts +2348 -0
- package/dist/index-KO98y6L0.d.cts +90 -0
- package/dist/index-SMYnpHIM.d.mts +2348 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +10 -10
- package/dist/index.d.mts +10 -10
- package/dist/index.mjs +1 -1
- package/dist/{input-BAr0l-oA.d.cts → input-BFtFMzRG.d.mts} +6 -6
- package/dist/{input-DXO2mTgG.d.mts → input-DvkEND5a.d.cts} +6 -6
- package/dist/{input-5gk-Jv1y.mjs → input-NJP2wQOm.mjs} +1 -1
- package/dist/{input-5gk-Jv1y.mjs.map → input-NJP2wQOm.mjs.map} +1 -1
- package/dist/{input-BvzsfAUc.cjs → input-WJ0DLHTR.cjs} +2 -2
- package/dist/{input-BvzsfAUc.cjs.map → input-WJ0DLHTR.cjs.map} +1 -1
- package/dist/{label-eIyGIRyw.cjs → label-CC6fXVbC.cjs} +2 -2
- package/dist/{label-eIyGIRyw.cjs.map → label-CC6fXVbC.cjs.map} +1 -1
- package/dist/{label-D9uNQ9b_.mjs → label-CUCpwS5D.mjs} +1 -1
- package/dist/{label-D9uNQ9b_.mjs.map → label-CUCpwS5D.mjs.map} +1 -1
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.d.cts +2 -76
- package/dist/layouts/cms-layout/index.d.mts +2 -76
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/layouts/flex.cjs +1 -1
- package/dist/layouts/flex.d.cts +6 -6
- package/dist/layouts/flex.d.mts +6 -6
- package/dist/layouts/flex.mjs +1 -1
- package/dist/layouts/grid.cjs +1 -1
- package/dist/layouts/payment-layout/index.cjs +1 -1
- package/dist/layouts/payment-layout/index.mjs +1 -1
- package/dist/pages/FeatureDeveloping.cjs +1 -1
- package/dist/pages/FeatureDeveloping.d.cts +2 -2
- package/dist/pages/FeatureDeveloping.d.mts +2 -2
- package/dist/pages/FeatureDeveloping.mjs +1 -1
- package/dist/pages/FeatureFixing.cjs +1 -1
- package/dist/pages/FeatureFixing.d.cts +2 -2
- package/dist/pages/FeatureFixing.d.mts +2 -2
- package/dist/pages/FeatureFixing.mjs +1 -1
- package/dist/pages/LoginPage.cjs +1 -1
- package/dist/pages/LoginPage.cjs.map +1 -1
- package/dist/pages/LoginPage.d.cts +2 -2
- package/dist/pages/LoginPage.d.mts +2 -2
- package/dist/pages/LoginPage.mjs +1 -1
- package/dist/pages/LoginPage.mjs.map +1 -1
- package/dist/pages/NotAuthorized.cjs +1 -1
- package/dist/pages/NotAuthorized.d.cts +2 -2
- package/dist/pages/NotAuthorized.d.mts +2 -2
- package/dist/pages/NotAuthorized.mjs +1 -1
- package/dist/pages/NotFound.cjs +1 -1
- package/dist/pages/NotFound.d.cts +2 -2
- package/dist/pages/NotFound.d.mts +2 -2
- package/dist/pages/NotFound.mjs +1 -1
- package/dist/pages/RegisterPage.cjs +1 -1
- package/dist/pages/RegisterPage.cjs.map +1 -1
- package/dist/pages/RegisterPage.d.cts +2 -2
- package/dist/pages/RegisterPage.mjs +1 -1
- package/dist/pages/RegisterPage.mjs.map +1 -1
- package/dist/pages/VerifyEmailPage.cjs +1 -1
- package/dist/pages/VerifyEmailPage.d.cts +2 -2
- package/dist/pages/VerifyEmailPage.d.mts +2 -2
- package/dist/pages/VerifyEmailPage.mjs +1 -1
- package/dist/{paragraph-CjstaJFj.mjs → paragraph-DYLaQtTV.mjs} +1 -1
- package/dist/{paragraph-CjstaJFj.mjs.map → paragraph-DYLaQtTV.mjs.map} +1 -1
- package/dist/{paragraph-D-JHj7EP.cjs → paragraph-DvTZvbzw.cjs} +2 -2
- package/dist/{paragraph-D-JHj7EP.cjs.map → paragraph-DvTZvbzw.cjs.map} +1 -1
- package/dist/{payment-layout-_ZM4uBy_.mjs → payment-layout-DrQ0kZPX.mjs} +2 -2
- package/dist/{payment-layout-_ZM4uBy_.mjs.map → payment-layout-DrQ0kZPX.mjs.map} +1 -1
- package/dist/{payment-layout-fsYTkw3r.cjs → payment-layout-DyILfyVG.cjs} +2 -2
- package/dist/{payment-layout-fsYTkw3r.cjs.map → payment-layout-DyILfyVG.cjs.map} +1 -1
- package/dist/{popover-DwgdOX8a.mjs → popover-C8rcemA3.mjs} +2 -2
- package/dist/{popover-DwgdOX8a.mjs.map → popover-C8rcemA3.mjs.map} +1 -1
- package/dist/{popover-fsTCOb6a.cjs → popover-DBsC8Ltp.cjs} +2 -2
- package/dist/{popover-fsTCOb6a.cjs.map → popover-DBsC8Ltp.cjs.map} +1 -1
- package/dist/{progress-DCBKnTx0.mjs → progress-CLeM0e7Z.mjs} +1 -1
- package/dist/{progress-DCBKnTx0.mjs.map → progress-CLeM0e7Z.mjs.map} +1 -1
- package/dist/{progress-CDYA2V-W.cjs → progress-gvBqNiHp.cjs} +2 -2
- package/dist/{progress-CDYA2V-W.cjs.map → progress-gvBqNiHp.cjs.map} +1 -1
- package/dist/{radio-group-B-M599Ys.cjs → radio-group-_TdMkv8w.cjs} +2 -2
- package/dist/{radio-group-B-M599Ys.cjs.map → radio-group-_TdMkv8w.cjs.map} +1 -1
- package/dist/{resizable-DP1BQAF_.mjs → resizable-CpCaSCFB.mjs} +1 -1
- package/dist/{resizable-DP1BQAF_.mjs.map → resizable-CpCaSCFB.mjs.map} +1 -1
- package/dist/{resizable-DATSh0Du.cjs → resizable-sgpaHAb8.cjs} +2 -2
- package/dist/{resizable-DATSh0Du.cjs.map → resizable-sgpaHAb8.cjs.map} +1 -1
- package/dist/{search-modal-CYRJEDE-.cjs → search-modal-B-pzGcfP.cjs} +2 -2
- package/dist/{search-modal-CYRJEDE-.cjs.map → search-modal-B-pzGcfP.cjs.map} +1 -1
- package/dist/{search-modal-DWu08xkE.mjs → search-modal-Bn-GOOCy.mjs} +2 -2
- package/dist/{search-modal-DWu08xkE.mjs.map → search-modal-Bn-GOOCy.mjs.map} +1 -1
- package/dist/select-CWLQHh8x.cjs +2 -0
- package/dist/select-CWLQHh8x.cjs.map +1 -0
- package/dist/{select-BAlA65tZ.mjs → select-LlPCZFSF.mjs} +2 -2
- package/dist/select-LlPCZFSF.mjs.map +1 -0
- package/dist/{separator-C6s-YvlT.mjs → separator-D3Gmkxzq.mjs} +1 -1
- package/dist/{separator-C6s-YvlT.mjs.map → separator-D3Gmkxzq.mjs.map} +1 -1
- package/dist/{separator-CBup_ah1.cjs → separator-KuymG9g0.cjs} +2 -2
- package/dist/{separator-CBup_ah1.cjs.map → separator-KuymG9g0.cjs.map} +1 -1
- package/dist/{sheet-Cj8hoftE.mjs → sheet-BFlIfNaA.mjs} +1 -1
- package/dist/{sheet-Cj8hoftE.mjs.map → sheet-BFlIfNaA.mjs.map} +1 -1
- package/dist/{sheet-DAjZ-Q6Q.cjs → sheet-CvKSi0UC.cjs} +2 -2
- package/dist/{sheet-DAjZ-Q6Q.cjs.map → sheet-CvKSi0UC.cjs.map} +1 -1
- package/dist/{sidebar-RcmDh50_.mjs → sidebar-ChtCyu-n.mjs} +2 -2
- package/dist/{sidebar-RcmDh50_.mjs.map → sidebar-ChtCyu-n.mjs.map} +1 -1
- package/dist/{sidebar-Drasn0Bx.cjs → sidebar-D5J2gcTw.cjs} +2 -2
- package/dist/{sidebar-Drasn0Bx.cjs.map → sidebar-D5J2gcTw.cjs.map} +1 -1
- package/dist/{skeleton-DupQ91XW.mjs → skeleton-C51IdOfK.mjs} +1 -1
- package/dist/{skeleton-DupQ91XW.mjs.map → skeleton-C51IdOfK.mjs.map} +1 -1
- package/dist/{skeleton-CHympz8k.cjs → skeleton-CX1USu1w.cjs} +2 -2
- package/dist/{skeleton-CHympz8k.cjs.map → skeleton-CX1USu1w.cjs.map} +1 -1
- package/dist/{spinner-Bdta7BMp.cjs → spinner-CFxorYEt.cjs} +2 -2
- package/dist/{spinner-Bdta7BMp.cjs.map → spinner-CFxorYEt.cjs.map} +1 -1
- package/dist/{spinner-BCnPYF1H.mjs → spinner-eClTgHjk.mjs} +1 -1
- package/dist/{spinner-BCnPYF1H.mjs.map → spinner-eClTgHjk.mjs.map} +1 -1
- package/dist/{statistic-DDDm5Om1.cjs → statistic-DDXilD7q.cjs} +2 -2
- package/dist/{statistic-DDDm5Om1.cjs.map → statistic-DDXilD7q.cjs.map} +1 -1
- package/dist/{statistic-Cm4nbkjQ.mjs → statistic-cwLwcukn.mjs} +1 -1
- package/dist/{statistic-Cm4nbkjQ.mjs.map → statistic-cwLwcukn.mjs.map} +1 -1
- package/dist/{switch-Dbc77c_D.cjs → switch-DVfOV7wP.cjs} +2 -2
- package/dist/{switch-Dbc77c_D.cjs.map → switch-DVfOV7wP.cjs.map} +1 -1
- package/dist/systems/google.cjs +1 -1
- package/dist/tables-CFrsk2lM.mjs +4 -0
- package/dist/tables-CFrsk2lM.mjs.map +1 -0
- package/dist/tables-CPKHe3k-.cjs +4 -0
- package/dist/tables-CPKHe3k-.cjs.map +1 -0
- package/dist/tanstack-form-DT1TqIDl.mjs +12 -0
- package/dist/tanstack-form-DT1TqIDl.mjs.map +1 -0
- package/dist/tanstack-form-DatI41wz.cjs +12 -0
- package/dist/tanstack-form-DatI41wz.cjs.map +1 -0
- package/dist/{text-editor-Bg0Wtnt3.mjs → text-editor-5mA7XyaI.mjs} +2 -2
- package/dist/{text-editor-Bg0Wtnt3.mjs.map → text-editor-5mA7XyaI.mjs.map} +1 -1
- package/dist/{text-editor-DtLcsiR7.cjs → text-editor-CvJN3nSL.cjs} +2 -2
- package/dist/{text-editor-DtLcsiR7.cjs.map → text-editor-CvJN3nSL.cjs.map} +1 -1
- package/dist/{textarea-Byo8E8oi.cjs → textarea-Cc9CF8wD.cjs} +2 -2
- package/dist/{textarea-Byo8E8oi.cjs.map → textarea-Cc9CF8wD.cjs.map} +1 -1
- package/dist/{tooltip-DC6i1A25.cjs → tooltip-CBdoIzoM.cjs} +2 -2
- package/dist/{tooltip-DC6i1A25.cjs.map → tooltip-CBdoIzoM.cjs.map} +1 -1
- package/dist/{tooltip-BfBJRYpc.mjs → tooltip-Dxl5Wa8i.mjs} +1 -1
- package/dist/{tooltip-BfBJRYpc.mjs.map → tooltip-Dxl5Wa8i.mjs.map} +1 -1
- package/dist/{types-CFXgrpTm.mjs → types-B5nyTWtO.mjs} +1 -1
- package/dist/{types-CFXgrpTm.mjs.map → types-B5nyTWtO.mjs.map} +1 -1
- package/dist/typography/paragraph.cjs +1 -1
- package/dist/typography/paragraph.d.cts +5 -5
- package/dist/typography/paragraph.d.mts +5 -5
- package/dist/typography/paragraph.mjs +1 -1
- package/dist/typography/title.cjs +1 -1
- package/dist/ui/alert-dialog.cjs +1 -1
- package/dist/ui/alert-dialog.d.cts +12 -12
- package/dist/ui/alert-dialog.d.mts +12 -12
- package/dist/ui/alert-dialog.mjs +1 -1
- package/dist/ui/alert.cjs +1 -1
- package/dist/ui/alert.d.cts +1 -1
- package/dist/ui/alert.d.mts +1 -1
- package/dist/ui/aspect-ratio.cjs +1 -1
- package/dist/ui/aspect-ratio.d.cts +2 -2
- package/dist/ui/aspect-ratio.d.mts +2 -2
- package/dist/ui/avatar.cjs +1 -1
- package/dist/ui/avatar.d.cts +4 -4
- package/dist/ui/avatar.d.mts +4 -4
- package/dist/ui/avatar.mjs +1 -1
- package/dist/ui/badge.cjs +1 -1
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.mts +1 -1
- package/dist/ui/badge.mjs +1 -1
- package/dist/ui/breadcrumb.cjs +1 -1
- package/dist/ui/breadcrumb.d.cts +8 -8
- package/dist/ui/breadcrumb.d.mts +8 -8
- package/dist/ui/breadcrumb.mjs +1 -1
- package/dist/ui/button-group.cjs +1 -1
- package/dist/ui/button-group.d.cts +6 -6
- package/dist/ui/button-group.d.mts +6 -6
- package/dist/ui/button-group.mjs +1 -1
- package/dist/ui/button.cjs +1 -1
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/button.mjs +1 -1
- package/dist/ui/buttons/add-new.cjs +1 -1
- package/dist/ui/buttons/add-new.mjs +1 -1
- package/dist/ui/buttons/edit.cjs +1 -1
- package/dist/ui/buttons/edit.mjs +1 -1
- package/dist/ui/buttons/refresh.cjs +1 -1
- package/dist/ui/buttons/refresh.mjs +1 -1
- package/dist/ui/buttons/trash.cjs +1 -1
- package/dist/ui/buttons/trash.mjs +1 -1
- package/dist/ui/buttons/upload-image.cjs +1 -1
- package/dist/ui/buttons/upload-image.mjs +1 -1
- package/dist/ui/calendar.cjs +1 -1
- package/dist/ui/calendar.d.cts +4 -4
- package/dist/ui/calendar.d.mts +4 -4
- package/dist/ui/calendar.mjs +1 -1
- package/dist/ui/card.cjs +1 -1
- package/dist/ui/card.d.cts +8 -8
- package/dist/ui/card.d.mts +8 -8
- package/dist/ui/card.mjs +1 -1
- package/dist/ui/carousel.cjs +1 -1
- package/dist/ui/carousel.d.cts +7 -7
- package/dist/ui/carousel.d.mts +7 -7
- package/dist/ui/carousel.mjs +1 -1
- package/dist/ui/checkbox.cjs +1 -1
- package/dist/ui/checkbox.d.cts +2 -2
- package/dist/ui/checkbox.d.mts +2 -2
- package/dist/ui/checkbox.mjs +1 -1
- package/dist/ui/collapsible.cjs +1 -1
- package/dist/ui/collapsible.d.cts +4 -4
- package/dist/ui/collapsible.d.mts +4 -4
- package/dist/ui/command.cjs +1 -1
- package/dist/ui/command.d.cts +11 -11
- package/dist/ui/command.d.mts +11 -11
- package/dist/ui/command.mjs +1 -1
- package/dist/ui/context-menu.cjs +1 -1
- package/dist/ui/context-menu.d.cts +16 -16
- package/dist/ui/context-menu.d.mts +16 -16
- package/dist/ui/dialog.cjs +1 -1
- package/dist/ui/dialog.d.cts +1 -1
- package/dist/ui/dialog.d.mts +1 -1
- package/dist/ui/dialog.mjs +1 -1
- package/dist/ui/drawer.cjs +1 -1
- package/dist/ui/drawer.d.cts +11 -11
- package/dist/ui/drawer.d.mts +11 -11
- package/dist/ui/dropdown-menu.cjs +1 -1
- package/dist/ui/dropdown-menu.d.cts +16 -16
- package/dist/ui/dropdown-menu.d.mts +16 -16
- package/dist/ui/dropdown-menu.mjs +1 -1
- package/dist/ui/empty.cjs +1 -1
- package/dist/ui/empty.d.cts +9 -9
- package/dist/ui/empty.d.mts +9 -9
- package/dist/ui/field.cjs +1 -1
- package/dist/ui/field.d.cts +23 -23
- package/dist/ui/field.d.mts +23 -23
- package/dist/ui/field.mjs +1 -1
- package/dist/ui/file-uploader.cjs +1 -1
- package/dist/ui/file-uploader.d.cts +2 -2
- package/dist/ui/file-uploader.d.mts +2 -2
- package/dist/ui/file-uploader.mjs +1 -1
- package/dist/ui/form.cjs +1 -1
- package/dist/ui/form.d.cts +10 -10
- package/dist/ui/form.d.mts +10 -10
- package/dist/ui/form.mjs +1 -1
- package/dist/ui/hover-card.cjs +1 -1
- package/dist/ui/hover-card.d.cts +4 -4
- package/dist/ui/hover-card.d.mts +4 -4
- package/dist/ui/image.cjs +1 -1
- package/dist/ui/image.mjs +1 -1
- package/dist/ui/input-otp.cjs +1 -1
- package/dist/ui/input-otp.d.cts +5 -5
- package/dist/ui/input-otp.d.mts +5 -5
- package/dist/ui/input.cjs +1 -1
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/input.mjs +1 -1
- package/dist/ui/inputs/search-input.cjs +1 -1
- package/dist/ui/inputs/search-input.d.cts +3 -3
- package/dist/ui/inputs/search-input.d.mts +3 -3
- package/dist/ui/inputs/search-input.mjs +1 -1
- package/dist/ui/item.cjs +1 -1
- package/dist/ui/item.d.cts +3 -3
- package/dist/ui/item.d.mts +11 -11
- package/dist/ui/item.mjs +1 -1
- package/dist/ui/label.cjs +1 -1
- package/dist/ui/label.d.cts +2 -2
- package/dist/ui/label.d.mts +2 -2
- package/dist/ui/label.mjs +1 -1
- package/dist/ui/menubar.cjs +1 -1
- package/dist/ui/menubar.d.cts +17 -17
- package/dist/ui/menubar.d.mts +17 -17
- package/dist/ui/multi-select.cjs +1 -1
- package/dist/ui/multi-select.d.cts +2 -2
- package/dist/ui/multi-select.d.mts +3 -3
- package/dist/ui/multi-select.mjs +1 -1
- package/dist/ui/navigation-menu.cjs +1 -1
- package/dist/ui/navigation-menu.d.cts +11 -11
- package/dist/ui/navigation-menu.d.mts +11 -11
- package/dist/ui/pagination.cjs +1 -1
- package/dist/ui/pagination.d.cts +9 -9
- package/dist/ui/pagination.d.mts +9 -9
- package/dist/ui/pagination.mjs +1 -1
- package/dist/ui/popover.cjs +1 -1
- package/dist/ui/popover.d.cts +6 -6
- package/dist/ui/popover.d.mts +6 -6
- package/dist/ui/popover.mjs +1 -1
- package/dist/ui/progress.cjs +1 -1
- package/dist/ui/progress.d.cts +2 -2
- package/dist/ui/progress.d.mts +2 -2
- package/dist/ui/progress.mjs +1 -1
- package/dist/ui/radio-group.cjs +1 -1
- package/dist/ui/radio-group.d.cts +3 -3
- package/dist/ui/radio-group.d.mts +3 -3
- package/dist/ui/resizable.cjs +1 -1
- package/dist/ui/resizable.d.cts +9 -9
- package/dist/ui/resizable.d.mts +9 -9
- package/dist/ui/resizable.mjs +1 -1
- package/dist/ui/scroll-area.cjs +1 -1
- package/dist/ui/scroll-area.d.cts +5 -5
- package/dist/ui/scroll-area.d.mts +5 -5
- package/dist/ui/select.cjs +1 -1
- package/dist/ui/select.d.cts +9 -9
- package/dist/ui/select.d.mts +9 -9
- package/dist/ui/select.mjs +1 -1
- package/dist/ui/separator.cjs +1 -1
- package/dist/ui/separator.d.cts +2 -2
- package/dist/ui/separator.d.mts +2 -2
- package/dist/ui/separator.mjs +1 -1
- package/dist/ui/sheet.cjs +1 -1
- package/dist/ui/sheet.d.cts +9 -9
- package/dist/ui/sheet.d.mts +9 -9
- package/dist/ui/sheet.mjs +1 -1
- package/dist/ui/skeleton.cjs +1 -1
- package/dist/ui/skeleton.d.cts +2 -2
- package/dist/ui/skeleton.d.mts +2 -2
- package/dist/ui/skeleton.mjs +1 -1
- package/dist/ui/slider.cjs +1 -1
- package/dist/ui/slider.d.cts +2 -2
- package/dist/ui/slider.d.mts +2 -2
- package/dist/ui/sonner.cjs +1 -1
- package/dist/ui/sonner.cjs.map +1 -1
- package/dist/ui/sonner.d.cts +2 -2
- package/dist/ui/sonner.d.mts +2 -2
- package/dist/ui/sonner.mjs +1 -1
- package/dist/ui/sonner.mjs.map +1 -1
- package/dist/ui/spinner.cjs +1 -1
- package/dist/ui/spinner.d.cts +2 -2
- package/dist/ui/spinner.d.mts +2 -2
- package/dist/ui/spinner.mjs +1 -1
- package/dist/ui/switch.cjs +1 -1
- package/dist/ui/switch.d.cts +2 -2
- package/dist/ui/switch.d.mts +2 -2
- package/dist/ui/table.cjs +1 -1
- package/dist/ui/table.d.cts +17 -17
- package/dist/ui/table.d.mts +17 -17
- package/dist/ui/tabs.cjs +1 -1
- package/dist/ui/tabs.d.cts +5 -5
- package/dist/ui/tabs.d.mts +5 -5
- package/dist/ui/textarea.cjs +1 -1
- package/dist/ui/textarea.d.cts +2 -2
- package/dist/ui/textarea.d.mts +2 -2
- package/dist/ui/toggle-group.cjs +1 -1
- package/dist/ui/toggle-group.d.mts +3 -3
- package/dist/ui/toggle.cjs +1 -1
- package/dist/ui/toggle.d.cts +4 -4
- package/dist/ui/toggle.d.mts +4 -4
- package/dist/ui/tooltip.cjs +1 -1
- package/dist/ui/tooltip.d.cts +5 -5
- package/dist/ui/tooltip.d.mts +5 -5
- package/dist/ui/tooltip.mjs +1 -1
- package/dist/{user-D8Skw8dI.mjs → user-DtZy4P9d.mjs} +2 -2
- package/dist/{user-D8Skw8dI.mjs.map → user-DtZy4P9d.mjs.map} +1 -1
- package/dist/{user-Dns1BKaT.cjs → user-ii4FBhO1.cjs} +2 -2
- package/dist/{user-Dns1BKaT.cjs.map → user-ii4FBhO1.cjs.map} +1 -1
- package/package.json +20 -5
- package/styles/spacing.css +186 -0
- package/dist/button-Bu4ejNOW.cjs.map +0 -1
- package/dist/button-CfPTDyoq.mjs +0 -2
- package/dist/button-CfPTDyoq.mjs.map +0 -1
- package/dist/chunk-Bmb41Sf3.cjs +0 -1
- package/dist/cms-layout-BrubV8D8.cjs +0 -2
- package/dist/cms-layout-BrubV8D8.cjs.map +0 -1
- package/dist/cms-layout-C2-yysO2.mjs +0 -2
- package/dist/cms-layout-C2-yysO2.mjs.map +0 -1
- package/dist/dist-BQGL-YKY.mjs +0 -2
- package/dist/dist-CAeolvAH.cjs +0 -2
- package/dist/image-D2U1SBw5.mjs +0 -2
- package/dist/image-Y7gCz7uE.cjs +0 -2
- package/dist/index-9dZXIJo5.d.mts +0 -2749
- package/dist/index-CQkuntSj.d.cts +0 -2749
- package/dist/select-BAlA65tZ.mjs.map +0 -1
- package/dist/select-Cib2aiw5.cjs +0 -2
- package/dist/select-Cib2aiw5.cjs.map +0 -1
- package/dist/tables-B3Ald6An.cjs +0 -4
- package/dist/tables-B3Ald6An.cjs.map +0 -1
- package/dist/tables-C3asiSD4.mjs +0 -4
- package/dist/tables-C3asiSD4.mjs.map +0 -1
- package/dist/tanstack-form-Byb7E1m9.cjs +0 -2
- package/dist/tanstack-form-Byb7E1m9.cjs.map +0 -1
- package/dist/tanstack-form-Dg_0hFwX.mjs +0 -2
- package/dist/tanstack-form-Dg_0hFwX.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-C6tRSumY.mjs","names":["DropdownMenu","DropdownMenuPrimitive"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\n/**\n * Root provider for the DropdownMenu — wraps all sub-components and controls open state.\n *\n * @example\n * ```tsx\n * import {\n * DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,\n * DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator,\n * } from '@customafk/lunas-ui/ui/dropdown-menu';\n *\n * <DropdownMenu>\n * <DropdownMenuTrigger>Options</DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuLabel>My Account</DropdownMenuLabel>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem>Profile</DropdownMenuItem>\n * <DropdownMenuItem variant=\"destructive\">Delete</DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n */\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Portals DropdownMenu content outside the current DOM hierarchy. */\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\n/** Element that opens the DropdownMenu when activated. */\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\n/** Animated floating panel that contains the dropdown items. */\nfunction DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'rounded-md p-1.5 shadow-dropdown',\n 'max-h-(--radix-dropdown-menu-content-available-height)',\n 'origin-(--radix-dropdown-menu-content-transform-origin)',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related DropdownMenuItems under a shared logical section. */\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\n/**\n * A single clickable row inside a DropdownMenuContent.\n *\n * @param inset - When true, adds left padding to align with items that have icons.\n * @param variant - Visual style: `'default'` or `'destructive'`.\n */\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-inset:pl-8',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n 'data-[variant=destructive]:text-danger',\n 'data-[variant=destructive]:focus:bg-danger-muted data-[variant=destructive]:focus:text-danger-strong',\n 'data-[variant=destructive]:*:[svg]:text-danger!',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n className\n )}\n {...props}\n />\n );\n}\n\n/** A checkable menu item that displays a checkmark when selected. */\nfunction DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Groups DropdownMenuRadioItems so only one can be selected at a time. */\nfunction DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\n/** A radio-button menu item; shows a filled circle when selected. */\nfunction DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/**\n * Non-interactive label used to describe a group of items.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('px-2 py-1.5 font-medium text-sm text-text-positive-weak data-inset:pl-8', className)}\n {...props}\n />\n );\n}\n\n/** Horizontal dividing line between groups of dropdown items. */\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return <DropdownMenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border-weak', className)} {...props} />;\n}\n\n/** Displays a keyboard shortcut hint aligned to the right of a menu item. */\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"dropdown-menu-shortcut\" className={cn('ml-auto text-xs text-text-positive-muted tracking-widest', className)} {...props} />;\n}\n\n/** Root container for a nested sub-menu inside a DropdownMenu. */\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/**\n * Menu item that reveals a nested DropdownMenuSubContent on hover or activation.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n 'flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-[state=open]:bg-muted-muted data-[state=open]:text-text-positive-strong',\n 'data-inset:pl-8',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** Floating panel that contains the items of a nested sub-menu. */\nfunction DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'origin-(--radix-dropdown-menu-content-transform-origin) rounded-md p-1.5 shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown-menu-BWhiVsEf.mjs","names":["DropdownMenu","DropdownMenuPrimitive"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\n/**\n * Root provider for the DropdownMenu — wraps all sub-components and controls open state.\n *\n * @example\n * ```tsx\n * import {\n * DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,\n * DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator,\n * } from '@customafk/lunas-ui/ui/dropdown-menu';\n *\n * <DropdownMenu>\n * <DropdownMenuTrigger>Options</DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuLabel>My Account</DropdownMenuLabel>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem>Profile</DropdownMenuItem>\n * <DropdownMenuItem variant=\"destructive\">Delete</DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n */\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Portals DropdownMenu content outside the current DOM hierarchy. */\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\n/** Element that opens the DropdownMenu when activated. */\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\n/** Animated floating panel that contains the dropdown items. */\nfunction DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'rounded-md p-1.5 shadow-dropdown',\n 'max-h-(--radix-dropdown-menu-content-available-height)',\n 'origin-(--radix-dropdown-menu-content-transform-origin)',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related DropdownMenuItems under a shared logical section. */\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\n/**\n * A single clickable row inside a DropdownMenuContent.\n *\n * @param inset - When true, adds left padding to align with items that have icons.\n * @param variant - Visual style: `'default'` or `'destructive'`.\n */\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-inset:pl-8',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n 'data-[variant=destructive]:text-danger',\n 'data-[variant=destructive]:focus:bg-danger-muted data-[variant=destructive]:focus:text-danger-strong',\n 'data-[variant=destructive]:*:[svg]:text-danger!',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n className\n )}\n {...props}\n />\n );\n}\n\n/** A checkable menu item that displays a checkmark when selected. */\nfunction DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Groups DropdownMenuRadioItems so only one can be selected at a time. */\nfunction DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\n/** A radio-button menu item; shows a filled circle when selected. */\nfunction DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/**\n * Non-interactive label used to describe a group of items.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('px-2 py-1.5 font-medium text-sm text-text-positive-weak data-inset:pl-8', className)}\n {...props}\n />\n );\n}\n\n/** Horizontal dividing line between groups of dropdown items. */\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return <DropdownMenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border-weak', className)} {...props} />;\n}\n\n/** Displays a keyboard shortcut hint aligned to the right of a menu item. */\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"dropdown-menu-shortcut\" className={cn('ml-auto text-xs text-text-positive-muted tracking-widest', className)} {...props} />;\n}\n\n/** Root container for a nested sub-menu inside a DropdownMenu. */\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/**\n * Menu item that reveals a nested DropdownMenuSubContent on hover or activation.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n 'flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-[state=open]:bg-muted-muted data-[state=open]:text-text-positive-strong',\n 'data-inset:pl-8',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** Floating panel that contains the items of a nested sub-menu. */\nfunction DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'origin-(--radix-dropdown-menu-content-transform-origin) rounded-md p-1.5 shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./chunk-
|
|
2
|
-
//# sourceMappingURL=dropdown-menu-
|
|
1
|
+
const e=require(`./chunk-350yNsax.cjs`);let t=require(`lucide-react`),n=require(`@customafk/react-toolkit/utils`),r=require(`react/jsx-runtime`),i=require(`radix-ui`);function a({...e}){return(0,r.jsx)(i.DropdownMenu.Root,{"data-slot":`dropdown-menu`,...e})}function o({...e}){return(0,r.jsx)(i.DropdownMenu.Portal,{"data-slot":`dropdown-menu-portal`,...e})}function s({...e}){return(0,r.jsx)(i.DropdownMenu.Trigger,{"data-slot":`dropdown-menu-trigger`,...e})}function c({className:e,sideOffset:t=4,align:a=`start`,...o}){return(0,r.jsx)(i.DropdownMenu.Portal,{children:(0,r.jsx)(i.DropdownMenu.Content,{"data-slot":`dropdown-menu-content`,sideOffset:t,align:a,className:(0,n.cn)(`bg-popover text-text-positive`,`z-50 min-w-32`,`overflow-y-auto overflow-x-hidden`,`rounded-md p-1.5 shadow-dropdown`,`max-h-(--radix-dropdown-menu-content-available-height)`,`origin-(--radix-dropdown-menu-content-transform-origin)`,`data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,`data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,`data-[side=bottom]:slide-in-from-top-2`,`data-[side=left]:slide-in-from-right-2`,`data-[side=right]:slide-in-from-left-2`,`data-[side=top]:slide-in-from-bottom-2`,e),...o})})}function l({...e}){return(0,r.jsx)(i.DropdownMenu.Group,{"data-slot":`dropdown-menu-group`,...e})}function u({className:e,inset:t,variant:a=`default`,...o}){return(0,r.jsx)(i.DropdownMenu.Item,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":a,className:(0,n.cn)(`relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors`,`focus:bg-muted-muted focus:text-text-positive-strong`,`data-inset:pl-8`,`data-disabled:pointer-events-none data-disabled:opacity-50`,`data-[variant=destructive]:text-danger`,`data-[variant=destructive]:focus:bg-danger-muted data-[variant=destructive]:focus:text-danger-strong`,`data-[variant=destructive]:*:[svg]:text-danger!`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,`[&_svg:not([class*='size-'])]:size-4`,`[&_svg:not([class*='text-'])]:text-text-positive-weak`,e),...o})}function d({className:e,children:a,checked:o,...s}){return(0,r.jsxs)(i.DropdownMenu.CheckboxItem,{"data-slot":`dropdown-menu-checkbox-item`,className:(0,n.cn)(`relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors`,`focus:bg-muted-muted focus:text-text-positive-strong`,`data-disabled:pointer-events-none data-disabled:opacity-50`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,`[&_svg:not([class*='size-'])]:size-4`,e),checked:o,...s,children:[(0,r.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,r.jsx)(i.DropdownMenu.ItemIndicator,{children:(0,r.jsx)(t.CheckIcon,{size:16})})}),a]})}function f({...e}){return(0,r.jsx)(i.DropdownMenu.RadioGroup,{"data-slot":`dropdown-menu-radio-group`,...e})}function p({className:e,children:a,...o}){return(0,r.jsxs)(i.DropdownMenu.RadioItem,{"data-slot":`dropdown-menu-radio-item`,className:(0,n.cn)(`relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors`,`focus:bg-muted-muted focus:text-text-positive-strong`,`data-disabled:pointer-events-none data-disabled:opacity-50`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,`[&_svg:not([class*='size-'])]:size-4`,e),...o,children:[(0,r.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,r.jsx)(i.DropdownMenu.ItemIndicator,{children:(0,r.jsx)(t.CircleIcon,{className:`size-2 fill-current`})})}),a]})}function m({className:e,inset:t,...a}){return(0,r.jsx)(i.DropdownMenu.Label,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:(0,n.cn)(`px-2 py-1.5 font-medium text-sm text-text-positive-weak data-inset:pl-8`,e),...a})}function h({className:e,...t}){return(0,r.jsx)(i.DropdownMenu.Separator,{"data-slot":`dropdown-menu-separator`,className:(0,n.cn)(`-mx-1 my-1 h-px bg-border-weak`,e),...t})}function g({className:e,...t}){return(0,r.jsx)(`span`,{"data-slot":`dropdown-menu-shortcut`,className:(0,n.cn)(`ml-auto text-xs text-text-positive-muted tracking-widest`,e),...t})}function _({...e}){return(0,r.jsx)(i.DropdownMenu.Sub,{"data-slot":`dropdown-menu-sub`,...e})}function v({className:e,inset:a,children:o,...s}){return(0,r.jsxs)(i.DropdownMenu.SubTrigger,{"data-slot":`dropdown-menu-sub-trigger`,"data-inset":a,className:(0,n.cn)(`flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors`,`focus:bg-muted-muted focus:text-text-positive-strong`,`data-[state=open]:bg-muted-muted data-[state=open]:text-text-positive-strong`,`data-inset:pl-8`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,`[&_svg:not([class*='size-'])]:size-4`,e),...s,children:[o,(0,r.jsx)(t.ChevronRightIcon,{className:`ml-auto size-4`})]})}function y({className:e,...t}){return(0,r.jsx)(i.DropdownMenu.SubContent,{"data-slot":`dropdown-menu-sub-content`,className:(0,n.cn)(`bg-popover text-text-positive`,`z-50 min-w-32`,`overflow-y-auto overflow-x-hidden`,`origin-(--radix-dropdown-menu-content-transform-origin) rounded-md p-1.5 shadow-dropdown`,`data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,`data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,`data-[side=bottom]:slide-in-from-top-2`,`data-[side=left]:slide-in-from-right-2`,`data-[side=right]:slide-in-from-left-2`,`data-[side=top]:slide-in-from-bottom-2`,e),...t})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return h}});
|
|
2
|
+
//# sourceMappingURL=dropdown-menu-CVh520yG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-Bz7oMQ36.cjs","names":["DropdownMenuPrimitive","CheckIcon","CircleIcon","ChevronRightIcon"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\n/**\n * Root provider for the DropdownMenu — wraps all sub-components and controls open state.\n *\n * @example\n * ```tsx\n * import {\n * DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,\n * DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator,\n * } from '@customafk/lunas-ui/ui/dropdown-menu';\n *\n * <DropdownMenu>\n * <DropdownMenuTrigger>Options</DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuLabel>My Account</DropdownMenuLabel>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem>Profile</DropdownMenuItem>\n * <DropdownMenuItem variant=\"destructive\">Delete</DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n */\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Portals DropdownMenu content outside the current DOM hierarchy. */\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\n/** Element that opens the DropdownMenu when activated. */\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\n/** Animated floating panel that contains the dropdown items. */\nfunction DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'rounded-md p-1.5 shadow-dropdown',\n 'max-h-(--radix-dropdown-menu-content-available-height)',\n 'origin-(--radix-dropdown-menu-content-transform-origin)',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related DropdownMenuItems under a shared logical section. */\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\n/**\n * A single clickable row inside a DropdownMenuContent.\n *\n * @param inset - When true, adds left padding to align with items that have icons.\n * @param variant - Visual style: `'default'` or `'destructive'`.\n */\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-inset:pl-8',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n 'data-[variant=destructive]:text-danger',\n 'data-[variant=destructive]:focus:bg-danger-muted data-[variant=destructive]:focus:text-danger-strong',\n 'data-[variant=destructive]:*:[svg]:text-danger!',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n className\n )}\n {...props}\n />\n );\n}\n\n/** A checkable menu item that displays a checkmark when selected. */\nfunction DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Groups DropdownMenuRadioItems so only one can be selected at a time. */\nfunction DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\n/** A radio-button menu item; shows a filled circle when selected. */\nfunction DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/**\n * Non-interactive label used to describe a group of items.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('px-2 py-1.5 font-medium text-sm text-text-positive-weak data-inset:pl-8', className)}\n {...props}\n />\n );\n}\n\n/** Horizontal dividing line between groups of dropdown items. */\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return <DropdownMenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border-weak', className)} {...props} />;\n}\n\n/** Displays a keyboard shortcut hint aligned to the right of a menu item. */\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"dropdown-menu-shortcut\" className={cn('ml-auto text-xs text-text-positive-muted tracking-widest', className)} {...props} />;\n}\n\n/** Root container for a nested sub-menu inside a DropdownMenu. */\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/**\n * Menu item that reveals a nested DropdownMenuSubContent on hover or activation.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n 'flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-[state=open]:bg-muted-muted data-[state=open]:text-text-positive-strong',\n 'data-inset:pl-8',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** Floating panel that contains the items of a nested sub-menu. */\nfunction DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'origin-(--radix-dropdown-menu-content-transform-origin) rounded-md p-1.5 shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown-menu-CVh520yG.cjs","names":["DropdownMenuPrimitive","CheckIcon","CircleIcon","ChevronRightIcon"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\n\n/**\n * Root provider for the DropdownMenu — wraps all sub-components and controls open state.\n *\n * @example\n * ```tsx\n * import {\n * DropdownMenu, DropdownMenuTrigger, DropdownMenuContent,\n * DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator,\n * } from '@customafk/lunas-ui/ui/dropdown-menu';\n *\n * <DropdownMenu>\n * <DropdownMenuTrigger>Options</DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuLabel>My Account</DropdownMenuLabel>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem>Profile</DropdownMenuItem>\n * <DropdownMenuItem variant=\"destructive\">Delete</DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n * ```\n */\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Portals DropdownMenu content outside the current DOM hierarchy. */\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\n/** Element that opens the DropdownMenu when activated. */\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\n/** Animated floating panel that contains the dropdown items. */\nfunction DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'rounded-md p-1.5 shadow-dropdown',\n 'max-h-(--radix-dropdown-menu-content-available-height)',\n 'origin-(--radix-dropdown-menu-content-transform-origin)',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related DropdownMenuItems under a shared logical section. */\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\n/**\n * A single clickable row inside a DropdownMenuContent.\n *\n * @param inset - When true, adds left padding to align with items that have icons.\n * @param variant - Visual style: `'default'` or `'destructive'`.\n */\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-inset:pl-8',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n 'data-[variant=destructive]:text-danger',\n 'data-[variant=destructive]:focus:bg-danger-muted data-[variant=destructive]:focus:text-danger-strong',\n 'data-[variant=destructive]:*:[svg]:text-danger!',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n className\n )}\n {...props}\n />\n );\n}\n\n/** A checkable menu item that displays a checkmark when selected. */\nfunction DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Groups DropdownMenuRadioItems so only one can be selected at a time. */\nfunction DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\n/** A radio-button menu item; shows a filled circle when selected. */\nfunction DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-2 pl-8 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-disabled:pointer-events-none data-disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/**\n * Non-interactive label used to describe a group of items.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('px-2 py-1.5 font-medium text-sm text-text-positive-weak data-inset:pl-8', className)}\n {...props}\n />\n );\n}\n\n/** Horizontal dividing line between groups of dropdown items. */\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return <DropdownMenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border-weak', className)} {...props} />;\n}\n\n/** Displays a keyboard shortcut hint aligned to the right of a menu item. */\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"dropdown-menu-shortcut\" className={cn('ml-auto text-xs text-text-positive-muted tracking-widest', className)} {...props} />;\n}\n\n/** Root container for a nested sub-menu inside a DropdownMenu. */\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/**\n * Menu item that reveals a nested DropdownMenuSubContent on hover or activation.\n *\n * @param inset - When true, adds left padding to align with inset items.\n */\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n 'flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-colors',\n 'focus:bg-muted-muted focus:text-text-positive-strong',\n 'data-[state=open]:bg-muted-muted data-[state=open]:text-text-positive-strong',\n 'data-inset:pl-8',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n \"[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** Floating panel that contains the items of a nested sub-menu. */\nfunction DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-text-positive',\n 'z-50 min-w-32',\n 'overflow-y-auto overflow-x-hidden',\n 'origin-(--radix-dropdown-menu-content-transform-origin) rounded-md p-1.5 shadow-dropdown',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";const e=require(`../../chunk-Bmb41Sf3.cjs`),t=require(`../../paragraph-D-JHj7EP.cjs`);require(`../../skeleton-CHympz8k.cjs`);const n=require(`../../image-Y7gCz7uE.cjs`);require(`../../flex-DYh2t8ft.cjs`);const r=require(`../../date-DtajzNoy.cjs`),i=require(`../../badge-DMnKV_uW.cjs`),a=require(`../../tooltip-DC6i1A25.cjs`);require(`../../avatar-CqRl9dge.cjs`);const o=require(`../../user-Dns1BKaT.cjs`);let s=require(`lucide-react`),c=require(`react`),l=require(`@customafk/react-toolkit/utils`),u=require(`class-variance-authority`),d=require(`react/jsx-runtime`);const f=()=>(0,d.jsx)(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),p=({label:e,color:t=`secondary`,variant:n=`soft`,size:r=`sm`})=>e?(0,d.jsx)(i.t,{"data-slot":`description-badge`,color:t,variant:n,size:r,children:e}):(0,d.jsx)(f,{}),m=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?(0,d.jsx)(f,{}):(0,d.jsx)(i.t,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),h=({value:e,truncate:t=!0})=>{let[n,r]=(0,c.useState)(!1),i=(0,c.useCallback)(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?(0,d.jsxs)(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:(0,l.cn)(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[(0,d.jsx)(`span`,{className:(0,l.cn)(`tabular-nums`,t&&`truncate`),children:e}),n?(0,d.jsx)(s.CheckIcon,{size:12,className:`shrink-0 text-success`}):(0,d.jsx)(s.CopyIcon,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):(0,d.jsx)(f,{})},g=({date:e})=>e==null?(0,d.jsx)(f,{}):(0,d.jsx)(a.r,{children:(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{asChild:!0,children:(0,d.jsx)(r.t,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help underline decoration-dashed decoration-border-strong underline-offset-2`})}),(0,d.jsx)(a.n,{children:(0,d.jsx)(r.t,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),_=({images:e})=>{if(!e?.length)return(0,d.jsx)(f,{});let t=e.length===1;return(0,d.jsx)(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>(0,d.jsx)(`div`,{className:t?`group relative size-42 overflow-hidden rounded-sm border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-16 overflow-hidden rounded-lg border border-border shadow-xs transition-shadow hover:shadow-card`,children:(0,d.jsx)(n.t,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},v=({href:e,label:t,external:n=!0,className:r})=>e?(0,d.jsxs)(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:(0,l.cn)(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&(0,d.jsx)(s.LinkIcon,{size:12,className:`shrink-0 opacity-70`}),(0,d.jsx)(`span`,{className:`truncate`,children:t??e}),n&&(0,d.jsx)(s.ExternalLinkIcon,{size:12,className:`shrink-0 opacity-70`})]}):(0,d.jsx)(f,{}),y=({content:e})=>e==null?(0,d.jsx)(f,{}):(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{asChild:!0,children:(0,d.jsx)(t.t,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm underline decoration-dashed decoration-border-strong underline-offset-2`,children:e})}),(0,d.jsx)(a.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,d.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,d.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,d.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[e.toString().length,` chars`]})]})})]}),b=({name:e})=>e?(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{asChild:!0,children:(0,d.jsx)(t.t,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate underline decoration-dashed decoration-border-strong underline-offset-2`,children:e})}),(0,d.jsx)(a.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,d.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,d.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,d.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[e.length,` chars`]})]})})]}):(0,d.jsx)(f,{}),x=({value:e})=>(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{"data-slot":`description-phone`,children:(0,d.jsx)(t.t,{variant:`sm`,className:`tabular-nums transition-colors`,children:e.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),(0,d.jsx)(a.n,{align:`start`,children:(0,d.jsx)(`p`,{className:`tabular-nums`,children:e.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),S=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},C=(0,u.cva)(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),w=(0,c.memo)(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:s=`sm`,trend:u=`neutral`,value:p=0,className:m})=>{let h=(0,c.useMemo)(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),g=(0,c.useCallback)(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=S(e,i,a)),t.toLocaleString(`en-US`,h)},[a,h,i]),_=(0,c.useMemo)(()=>{if(typeof p==`number`)return Number.isNaN(p)||!Number.isFinite(p)?`N/A`:g(p);if(typeof p==`string`){let e=p.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:g(t)}return`N/A`},[p,g]),v=(0,c.useMemo)(()=>e===`.`&&t===`,`?_:_.replace(/,/g,t).replace(/\./g,e),[_,e,t]);return v===`0`||v===`N/A`||!v?(0,d.jsx)(f,{}):(0,d.jsxs)(`div`,{"data-slot":`description-statistic`,className:(0,l.cn)(C({size:s,trend:u}),m),children:[n&&(0,d.jsx)(`span`,{"data-slot":`description-statistic-prefix`,children:n}),(0,d.jsx)(`p`,{"data-slot":`description-statistic-value`,children:v}),r&&(0,d.jsx)(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});w.displayName=`DescriptionStatistic`;const T={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},E=({label:e,color:t=`info`,dot:n=!0})=>e?(0,d.jsxs)(i.t,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&(0,d.jsx)(`span`,{className:(0,l.cn)(`inline-block size-1.5 shrink-0 rounded-full`,T[t])}),e]}):(0,d.jsx)(f,{}),D=({tags:e,max:t=5,color:n=`secondary`,variant:r=`soft`})=>{if(!e?.length)return(0,d.jsx)(f,{});let a=e.slice(0,t),o=e.length-a.length;return(0,d.jsxs)(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>(0,d.jsx)(i.t,{variant:r,color:n,size:`sm`,children:e},t)),o>0&&(0,d.jsxs)(i.t,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},O=({uuid:e,username:t,email:n})=>!e||!t||!n?(0,d.jsx)(f,{}):(0,d.jsx)(o.t,{uuid:e,username:t,email:n}),k=(0,c.createContext)(!1),A=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,children:i})=>n===`vertical`?(0,d.jsxs)(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[(0,d.jsxs)(`div`,{"data-slot":`description-item-label`,className:`flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak`,children:[(0,d.jsx)(`span`,{children:e}),r&&(0,d.jsx)(`div`,{className:`shrink-0`,children:r})]}),(0,d.jsx)(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}):(0,d.jsxs)(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,d.jsxs)(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:`flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums`,children:[(0,d.jsx)(`span`,{children:e}),r&&(0,d.jsx)(`div`,{className:`shrink-0 pr-1`,children:r})]}),(0,d.jsx)(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}),j=({title:e,description:t,extra:n,className:r})=>(0,d.jsxs)(`div`,{"data-slot":`description-header`,className:(0,l.cn)(`sticky top-0 z-10 flex items-start justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[(0,d.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,d.jsx)(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&(0,d.jsx)(`p`,{className:`text-xs text-text-positive-weak`,children:t})]}),n&&(0,d.jsx)(`div`,{className:`shrink-0`,children:n})]}),M=({title:e,className:t})=>(0,d.jsxs)(`div`,{"data-slot":`description-section`,className:(0,l.cn)(`flex items-center gap-3 border-b border-b-border bg-secondary-muted px-4 py-2`,t),children:[e&&(0,d.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-wide text-text-positive-muted`,children:e}),(0,d.jsx)(`div`,{className:`h-px flex-1 bg-border-weak`})]}),N=({rows:e})=>(0,d.jsxs)(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[(0,d.jsxs)(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[(0,d.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,d.jsx)(`div`,{className:`h-3.5 w-36 rounded bg-border`}),(0,d.jsx)(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),(0,d.jsx)(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>(0,d.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,d.jsx)(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:(0,d.jsx)(`div`,{className:`h-3 w-20 rounded bg-border`})}),(0,d.jsx)(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:(0,d.jsx)(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),P=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>{let a=(0,c.useContext)(k);return(0,d.jsx)(`div`,{"data-slot":`description`,className:(0,l.cn)(`relative flex flex-col bg-card`,a?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?(0,d.jsx)(N,{rows:i}):e})},F=({children:e,className:t})=>(0,d.jsx)(k.Provider,{value:!0,children:(0,d.jsx)(`div`,{"data-slot":`description-group`,className:(0,l.cn)(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});exports.Description=P,exports.DescriptionBadge=p,exports.DescriptionBoolean=m,exports.DescriptionCopy=h,exports.DescriptionDate=g,exports.DescriptionEmpty=f,exports.DescriptionGroup=F,exports.DescriptionHeader=j,exports.DescriptionImages=_,exports.DescriptionItem=A,exports.DescriptionLink=v,exports.DescriptionLongText=y,exports.DescriptionName=b,exports.DescriptionNumberPhone=x,exports.DescriptionSection=M,exports.DescriptionStatistic=w,exports.DescriptionStatus=E,exports.DescriptionTagList=D,exports.DescriptionUser=O;
|
|
1
|
+
"use client";const e=require(`../../chunk-350yNsax.cjs`),t=require(`../../paragraph-DvTZvbzw.cjs`);require(`../../skeleton-CX1USu1w.cjs`);const n=require(`../../image-W_Yb0xTB.cjs`);require(`../../flex-DmWmOBn5.cjs`);const r=require(`../../date-D4NVl6C9.cjs`),i=require(`../../badge-KW7xu5Ca.cjs`),a=require(`../../tooltip-CBdoIzoM.cjs`);require(`../../avatar-TyOphzGo.cjs`);const o=require(`../../user-ii4FBhO1.cjs`);let s=require(`lucide-react`),c=require(`react`),l=require(`@customafk/react-toolkit/utils`),u=require(`class-variance-authority`),d=require(`react/jsx-runtime`);const f=()=>(0,d.jsx)(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),p=({label:e,color:t=`secondary`,variant:n=`soft`,size:r=`sm`})=>e?(0,d.jsx)(i.t,{"data-slot":`description-badge`,color:t,variant:n,size:r,children:e}):(0,d.jsx)(f,{}),m=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?(0,d.jsx)(f,{}):(0,d.jsx)(i.t,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),h=({value:e,truncate:t=!0})=>{let[n,r]=(0,c.useState)(!1),i=(0,c.useCallback)(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?(0,d.jsxs)(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:(0,l.cn)(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[(0,d.jsx)(`span`,{className:(0,l.cn)(`tabular-nums`,t&&`truncate`),children:e}),n?(0,d.jsx)(s.CheckIcon,{size:12,className:`shrink-0 text-success`}):(0,d.jsx)(s.CopyIcon,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):(0,d.jsx)(f,{})},g=({date:e})=>e==null?(0,d.jsx)(f,{}):(0,d.jsx)(a.r,{children:(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{asChild:!0,children:(0,d.jsx)(r.t,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help`})}),(0,d.jsx)(a.n,{children:(0,d.jsx)(r.t,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),_=({images:e})=>{if(!e?.length)return(0,d.jsx)(f,{});let t=e.length===1;return(0,d.jsx)(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>(0,d.jsx)(`div`,{className:t?`group relative size-42 overflow-hidden rounded-sm border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-16 overflow-hidden rounded-lg border border-border shadow-xs transition-shadow hover:shadow-card`,children:(0,d.jsx)(n.t,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},v=({href:e,label:t,external:n=!0,className:r})=>e?(0,d.jsxs)(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:(0,l.cn)(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&(0,d.jsx)(s.LinkIcon,{size:12,className:`shrink-0 opacity-70`}),(0,d.jsx)(`span`,{className:`truncate`,children:t??e}),n&&(0,d.jsx)(s.ExternalLinkIcon,{size:12,className:`shrink-0 opacity-70`})]}):(0,d.jsx)(f,{}),y=({content:e})=>e==null?(0,d.jsx)(f,{}):(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{asChild:!0,children:(0,d.jsx)(t.t,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors`,children:e})}),(0,d.jsx)(a.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,d.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,d.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,d.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[e.toString().length,` chars`]})]})})]}),b=({name:e})=>e?(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{asChild:!0,children:(0,d.jsx)(t.t,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors`,children:e})}),(0,d.jsx)(a.n,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:(0,d.jsxs)(`div`,{className:`flex flex-col gap-y-2`,children:[(0,d.jsx)(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:e}),(0,d.jsxs)(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[e.length,` chars`]})]})})]}):(0,d.jsx)(f,{}),x=({value:e})=>(0,d.jsxs)(a.t,{children:[(0,d.jsx)(a.i,{"data-slot":`description-phone`,children:(0,d.jsx)(t.t,{variant:`sm`,className:`tabular-nums transition-colors`,children:e.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),(0,d.jsx)(a.n,{align:`start`,children:(0,d.jsx)(`p`,{className:`tabular-nums`,children:e.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),S=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},C=(0,u.cva)(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),w=(0,c.memo)(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:s=`sm`,trend:u=`neutral`,value:p=0,className:m})=>{let h=(0,c.useMemo)(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),g=(0,c.useCallback)(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=S(e,i,a)),t.toLocaleString(`en-US`,h)},[a,h,i]),_=(0,c.useMemo)(()=>{if(typeof p==`number`)return Number.isNaN(p)||!Number.isFinite(p)?`N/A`:g(p);if(typeof p==`string`){let e=p.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:g(t)}return`N/A`},[p,g]),v=(0,c.useMemo)(()=>e===`.`&&t===`,`?_:_.replace(/,/g,t).replace(/\./g,e),[_,e,t]);return v===`0`||v===`N/A`||!v?(0,d.jsx)(f,{}):(0,d.jsxs)(`div`,{"data-slot":`description-statistic`,className:(0,l.cn)(C({size:s,trend:u}),m),children:[n&&(0,d.jsx)(`span`,{"data-slot":`description-statistic-prefix`,children:n}),(0,d.jsx)(`p`,{"data-slot":`description-statistic-value`,children:v}),r&&(0,d.jsx)(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});w.displayName=`DescriptionStatistic`;const T={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},E=({label:e,color:t=`info`,dot:n=!0})=>e?(0,d.jsxs)(i.t,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&(0,d.jsx)(`span`,{className:(0,l.cn)(`inline-block size-1.5 shrink-0 rounded-full`,T[t])}),e]}):(0,d.jsx)(f,{}),D=({tags:e,max:t=5,color:n=`secondary`,variant:r=`soft`})=>{if(!e?.length)return(0,d.jsx)(f,{});let a=e.slice(0,t),o=e.length-a.length;return(0,d.jsxs)(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>(0,d.jsx)(i.t,{variant:r,color:n,size:`sm`,children:e},t)),o>0&&(0,d.jsxs)(i.t,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},O=({uuid:e,username:t,email:n})=>!e||!t||!n?(0,d.jsx)(f,{}):(0,d.jsx)(o.t,{uuid:e,username:t,email:n}),k=(0,c.createContext)(!1),A=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,children:i})=>n===`vertical`?(0,d.jsxs)(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[(0,d.jsxs)(`div`,{"data-slot":`description-item-label`,className:`flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak`,children:[(0,d.jsx)(`span`,{children:e}),r&&(0,d.jsx)(`div`,{className:`shrink-0`,children:r})]}),(0,d.jsx)(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}):(0,d.jsxs)(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,d.jsxs)(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:`flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums`,children:[(0,d.jsx)(`span`,{children:e}),r&&(0,d.jsx)(`div`,{className:`shrink-0 pr-1`,children:r})]}),(0,d.jsx)(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}),j=({title:e,description:t,extra:n,className:r})=>(0,d.jsxs)(`div`,{"data-slot":`description-header`,className:(0,l.cn)(`sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[(0,d.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,d.jsx)(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&(0,d.jsx)(`p`,{className:`text-xs text-text-positive-muted`,children:t})]}),n&&(0,d.jsx)(`div`,{className:`shrink-0`,children:n})]}),M=({title:e,className:t})=>(0,d.jsxs)(`div`,{"data-slot":`description-section`,className:(0,l.cn)(`flex items-center gap-3 border-b border-b-border px-4 py-2.5`,t),children:[e&&(0,d.jsx)(`p`,{className:`shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted`,children:e}),(0,d.jsx)(`div`,{className:`h-px flex-1 bg-border`})]}),N=({rows:e})=>(0,d.jsxs)(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[(0,d.jsxs)(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[(0,d.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,d.jsx)(`div`,{className:`h-3.5 w-36 rounded bg-border`}),(0,d.jsx)(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),(0,d.jsx)(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>(0,d.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[(0,d.jsx)(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:(0,d.jsx)(`div`,{className:`h-3 w-20 rounded bg-border`})}),(0,d.jsx)(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:(0,d.jsx)(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),P=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>{let a=(0,c.useContext)(k);return(0,d.jsx)(`div`,{"data-slot":`description`,className:(0,l.cn)(`relative flex flex-col bg-card`,a?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?(0,d.jsx)(N,{rows:i}):e})},F=({children:e,className:t})=>(0,d.jsx)(k.Provider,{value:!0,children:(0,d.jsx)(`div`,{"data-slot":`description-group`,className:(0,l.cn)(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});exports.Description=P,exports.DescriptionBadge=p,exports.DescriptionBoolean=m,exports.DescriptionCopy=h,exports.DescriptionDate=g,exports.DescriptionEmpty=f,exports.DescriptionGroup=F,exports.DescriptionHeader=j,exports.DescriptionImages=_,exports.DescriptionItem=A,exports.DescriptionLink=v,exports.DescriptionLongText=y,exports.DescriptionName=b,exports.DescriptionNumberPhone=x,exports.DescriptionSection=M,exports.DescriptionStatistic=w,exports.DescriptionStatus=E,exports.DescriptionTagList=D,exports.DescriptionUser=O;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["DescriptionEmpty: React.FC","DescriptionBadge: React.FC<DescriptionBadgeProps>","Badge","DescriptionBoolean: React.FC<DescriptionBooleanProps>","Badge","DescriptionCopy: React.FC<DescriptionCopyProps>","CheckIcon","CopyIcon","DescriptionDate: React.FC<DescriptionDateProps>","TooltipProvider","Tooltip","TooltipTrigger","DateDisplay","TooltipContent","DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}>","Image","DescriptionLink: React.FC<DescriptionLinkProps>","LinkIcon","ExternalLinkIcon","DescriptionLongText: React.FC<{ content: string | null | undefined | number }>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","DescriptionName: React.FC<{\n name?: string | null | undefined;\n}>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","DescriptionNumberPhone: React.FC<{ value: string }>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","options: Intl.NumberFormatOptions","dotColorMap: Record<StatusColor, string>","DescriptionStatus: React.FC<DescriptionStatusProps>","Badge","DescriptionTagList: React.FC<DescriptionTagListProps>","Badge","DescriptionUser: React.FC<DescriptionUserProps>","UserDataDisplay","DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n }>\n>","DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}>","DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}>","DescriptionLoadingSkeleton: React.FC<{ rows: number }>","Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n>","DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n>"],"sources":["../../../packages/components/features/descriptions/components/empty.tsx","../../../packages/components/features/descriptions/components/badge.tsx","../../../packages/components/features/descriptions/components/boolean.tsx","../../../packages/components/features/descriptions/components/copy.tsx","../../../packages/components/features/descriptions/components/date.tsx","../../../packages/components/features/descriptions/components/images.tsx","../../../packages/components/features/descriptions/components/link.tsx","../../../packages/components/features/descriptions/components/longtext.tsx","../../../packages/components/features/descriptions/components/name.tsx","../../../packages/components/features/descriptions/components/number-phone.tsx","../../../packages/components/features/descriptions/components/statistic.tsx","../../../packages/components/features/descriptions/components/status.tsx","../../../packages/components/features/descriptions/components/tag-list.tsx","../../../packages/components/features/descriptions/components/user.tsx","../../../packages/components/features/descriptions/index.tsx"],"sourcesContent":["'use client';\n\nexport const DescriptionEmpty: React.FC = () => {\n return (\n <span data-slot=\"description-empty\" aria-label=\"Empty value\" className=\"select-none font-medium text-sm text-text-positive-muted\">\n —\n </span>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBadgeProps = {\n label: string | number | null | undefined;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n};\n\nexport const DescriptionBadge: React.FC<DescriptionBadgeProps> = ({ label, color = 'secondary', variant = 'soft', size = 'sm' }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-badge\" color={color} variant={variant} size={size}>\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBooleanProps = {\n value: boolean | null | undefined;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const DescriptionBoolean: React.FC<DescriptionBooleanProps> = ({ value, trueLabel = 'Yes', falseLabel = 'No' }) => {\n if (value == null) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-boolean\" variant=\"soft\" color={value ? 'success' : 'danger'} size=\"sm\">\n {value ? trueLabel : falseLabel}\n </Badge>\n );\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionCopyProps = {\n value: string | null | undefined;\n truncate?: boolean;\n};\n\nexport const DescriptionCopy: React.FC<DescriptionCopyProps> = ({ value, truncate = true }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n if (!value) return;\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n if (!value) return <DescriptionEmpty />;\n\n return (\n <button\n type=\"button\"\n data-slot=\"description-copy\"\n onClick={handleCopy}\n className={cn(\n 'group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs',\n truncate && 'min-w-0'\n )}\n >\n <span className={cn('tabular-nums', truncate && 'truncate')}>{value}</span>\n {copied ? <CheckIcon size={12} className=\"shrink-0 text-success\" /> : <CopyIcon size={12} className=\"shrink-0 opacity-50 group-hover:opacity-100\" />}\n </button>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { DateDisplay } from '@/components/data-display/date';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionDateProps = {\n date: Date | string | number | null | undefined;\n};\n\nexport const DescriptionDate: React.FC<DescriptionDateProps> = ({ date }) => {\n if (date == null) return <DescriptionEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DateDisplay\n data-slot=\"description-date\"\n date={date}\n format=\"medium\"\n className=\"cursor-help underline decoration-dashed decoration-border-strong underline-offset-2\"\n />\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"text-xs font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","'use client';\n\nimport { Image } from '@/components/ui/image';\n\nimport { DescriptionEmpty } from './empty';\n\ntype ImageItem = { id: string; src: string; alt: string };\n\nexport const DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}> = ({ images }) => {\n if (!images?.length) return <DescriptionEmpty />;\n\n const isSingle = images.length === 1;\n\n return (\n <div data-slot=\"description-images\" className=\"flex flex-wrap gap-4\">\n {images.map(image => (\n <div\n key={image.id}\n className={\n isSingle\n ? 'group relative size-42 overflow-hidden rounded-sm border border-border shadow-xs transition-shadow hover:shadow-card'\n : 'group relative size-16 overflow-hidden rounded-lg border border-border shadow-xs transition-shadow hover:shadow-card'\n }\n >\n <Image src={image.src} alt={image.alt} width=\"100%\" height=\"100%\" className=\"transition-transform duration-200 group-hover:scale-105\" />\n </div>\n ))}\n </div>\n );\n};\n","'use client';\n\nimport { ExternalLinkIcon, LinkIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionLinkProps = {\n href: string | null | undefined;\n label?: string;\n external?: boolean;\n className?: string;\n};\n\nexport const DescriptionLink: React.FC<DescriptionLinkProps> = ({ href, label, external = true, className }) => {\n if (!href) return <DescriptionEmpty />;\n\n return (\n <a\n data-slot=\"description-link\"\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n className={cn(\n 'inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid',\n className\n )}\n >\n {!external && <LinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n <span className=\"truncate\">{label ?? href}</span>\n {external && <ExternalLinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n </a>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionLongText: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content == null) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-longtext\"\n variant=\"sm\"\n className=\"line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm underline decoration-dashed decoration-border-strong underline-offset-2\"\n >\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionName: React.FC<{\n name?: string | null | undefined;\n}> = ({ name }) => {\n if (!name) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-name\"\n variant=\"sm\"\n className=\"line-clamp-2 w-full cursor-pointer truncate underline decoration-dashed decoration-border-strong underline-offset-2\"\n >\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nexport const DescriptionNumberPhone: React.FC<{ value: string }> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"description-phone\">\n <Paragraph variant=\"sm\" className=\"tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\nconst descriptionStatisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'sm',\n trend: 'neutral',\n },\n});\n\nexport type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n roundingMode?: 'round' | 'floor' | 'ceil';\n showTrailingZeros?: boolean;\n value: number | string | null | undefined;\n className?: string;\n};\n\nexport const DescriptionStatistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'sm',\n trend = 'neutral',\n value = 0,\n className,\n }: DescriptionStatisticProps) => {\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <DescriptionEmpty />;\n }\n\n return (\n <div data-slot=\"description-statistic\" className={cn(descriptionStatisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"description-statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"description-statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"description-statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nDescriptionStatistic.displayName = 'DescriptionStatistic';\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype StatusColor = NonNullable<BadgeProps['color']>;\n\nconst dotColorMap: Record<StatusColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n muted: 'bg-muted',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\ntype DescriptionStatusProps = {\n label: string | null | undefined;\n color?: StatusColor;\n dot?: boolean;\n};\n\nexport const DescriptionStatus: React.FC<DescriptionStatusProps> = ({ label, color = 'info', dot = true }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-status\" variant=\"soft\" color={color} size=\"sm\" className=\"gap-1.5\">\n {dot && <span className={cn('inline-block size-1.5 shrink-0 rounded-full', dotColorMap[color])} />}\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionTagListProps = {\n tags: Array<string | number> | null | undefined;\n max?: number;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n};\n\nexport const DescriptionTagList: React.FC<DescriptionTagListProps> = ({ tags, max = 5, color = 'secondary', variant = 'soft' }) => {\n if (!tags?.length) return <DescriptionEmpty />;\n\n const visible = tags.slice(0, max);\n const overflow = tags.length - visible.length;\n\n return (\n <div data-slot=\"description-tag-list\" className=\"flex flex-wrap gap-1\">\n {visible.map((tag, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: static display list\n <Badge key={i} variant={variant} color={color} size=\"sm\">\n {tag}\n </Badge>\n ))}\n {overflow > 0 && (\n <Badge variant=\"outline\" color=\"muted\" size=\"sm\">\n +{overflow}\n </Badge>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { UserDataDisplay } from '@/components/data-display/user';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionUserProps = {\n uuid?: string | null;\n username?: string | null;\n email?: string | null;\n};\n\nexport const DescriptionUser: React.FC<DescriptionUserProps> = ({ uuid, username, email }) => {\n if (!uuid || !username || !email) return <DescriptionEmpty />;\n return <UserDataDisplay uuid={uuid} username={username} email={email} />;\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport * from './components';\n\nconst DescriptionGroupContext = createContext(false);\n\n/**\n * A single labeled row within a {@link Description} container, supporting both horizontal (side-by-side label/value) and vertical (stacked) layouts.\n *\n * @example\n * import { Description, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionItem label=\"Full name\">John Doe</DescriptionItem>\n * <DescriptionItem label=\"Email\" orientation=\"vertical\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n }>\n> = ({ label, labelColSpan = 3, orientation = 'horizontal', action, children }) => {\n if (orientation === 'vertical') {\n return (\n <div data-slot=\"description-item\" className=\"flex flex-col border-b border-b-border last:border-b-0\">\n <div\n data-slot=\"description-item-label\"\n className=\"flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div data-slot=\"description-item-value\" className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\">\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"description-item\"\n style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }}\n className=\"grid border-b border-b-border last:border-b-0\"\n >\n <div\n data-slot=\"description-item-label\"\n style={{ gridColumn: `span ${labelColSpan} / span ${labelColSpan}` }}\n className=\"flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0 pr-1\">{action}</div>}\n </div>\n <div\n data-slot=\"description-item-value\"\n style={{ gridColumn: `span ${12 - labelColSpan} / span ${12 - labelColSpan}` }}\n className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\"\n >\n {children}\n </div>\n </div>\n );\n};\n\n/**\n * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.\n *\n * @example\n * import { Description, DescriptionHeader } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"User details\" description=\"Read-only overview\" extra={<EditBtn />} />\n * </Description>\n */\nexport const DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}> = ({ title, description, extra, className }) => {\n return (\n <div\n data-slot=\"description-header\"\n className={cn('sticky top-0 z-10 flex items-start justify-between gap-4 border-b border-b-border bg-card px-4 py-3', className)}\n >\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-sm font-semibold text-text-positive\">{title}</p>\n {description && <p className=\"text-xs text-text-positive-weak\">{description}</p>}\n </div>\n {extra && <div className=\"shrink-0\">{extra}</div>}\n </div>\n );\n};\n\n/**\n * A visual section divider inside a {@link Description} container that optionally displays a section title with a decorative horizontal rule.\n *\n * @example\n * import { Description, DescriptionSection, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionSection title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}> = ({ title, className }) => {\n return (\n <div data-slot=\"description-section\" className={cn('flex items-center gap-3 border-b border-b-border bg-secondary-muted px-4 py-2', className)}>\n {title && <p className=\"text-xs font-semibold uppercase tracking-wide text-text-positive-muted\">{title}</p>}\n <div className=\"h-px flex-1 bg-border-weak\" />\n </div>\n );\n};\n\nconst DescriptionLoadingSkeleton: React.FC<{ rows: number }> = ({ rows }) => (\n <div data-slot=\"description-loading\" className=\"animate-pulse\">\n <div className=\"flex items-center justify-between border-b border-b-border px-4 py-3\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-3.5 w-36 rounded bg-border\" />\n <div className=\"h-2.5 w-24 rounded bg-border-weak\" />\n </div>\n <div className=\"h-5 w-16 rounded bg-border-weak\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }} className=\"grid border-b border-b-border last:border-b-0\">\n <div style={{ gridColumn: 'span 3 / span 3' }} className=\"flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2\">\n <div className=\"h-3 w-20 rounded bg-border\" />\n </div>\n <div style={{ gridColumn: 'span 9 / span 9' }} className=\"flex items-center py-3 pl-4 pr-2\">\n <div className=\"h-3 w-28 rounded bg-border-weak\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/**\n * Root container for a description block — a bordered, rounded card that groups {@link DescriptionHeader}, {@link DescriptionSection}, and {@link DescriptionItem} elements.\n *\n * Set `nested` when embedding one `Description` inside another (removes the outer card shadow/ring and constrains sizing).\n * Set `loading` to replace content with animated skeleton rows while data is being fetched.\n *\n * @example\n * import { Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"Order #1234\" />\n * <DescriptionItem label=\"Status\">Shipped</DescriptionItem>\n * <DescriptionItem label=\"Total\">$99.00</DescriptionItem>\n * </Description>\n */\nexport const Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n> = ({ children, className, nested = false, loading = false, loadingRows = 4 }) => {\n const inGroup = useContext(DescriptionGroupContext);\n\n return (\n <div\n data-slot=\"description\"\n className={cn(\n 'relative flex flex-col bg-card',\n inGroup\n ? 'border-b border-b-border last:border-b-0'\n : nested\n ? 'w-full overflow-hidden rounded-md border border-border'\n : 'size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak',\n className\n )}\n >\n {loading ? <DescriptionLoadingSkeleton rows={loadingRows} /> : children}\n </div>\n );\n};\n\n/**\n * A scrollable container that groups multiple {@link Description} blocks and makes each\n * {@link DescriptionHeader} sticky. As you scroll, the next section header stacks above\n * (pushes out) the previous one — standard CSS sticky behaviour within a single scroll context.\n *\n * @example\n * import { DescriptionGroup, Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <DescriptionGroup>\n * <Description>\n * <DescriptionHeader title=\"Personal info\" />\n * <DescriptionItem label=\"Name\">John Doe</DescriptionItem>\n * </Description>\n * <Description>\n * <DescriptionHeader title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n * </DescriptionGroup>\n */\nexport const DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n> = ({ children, className }) => {\n return (\n <DescriptionGroupContext.Provider value={true}>\n <div\n data-slot=\"description-group\"\n className={cn('relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak', className)}\n >\n {children}\n </div>\n </DescriptionGroupContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["DescriptionEmpty: React.FC","DescriptionBadge: React.FC<DescriptionBadgeProps>","Badge","DescriptionBoolean: React.FC<DescriptionBooleanProps>","Badge","DescriptionCopy: React.FC<DescriptionCopyProps>","CheckIcon","CopyIcon","DescriptionDate: React.FC<DescriptionDateProps>","TooltipProvider","Tooltip","TooltipTrigger","DateDisplay","TooltipContent","DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}>","Image","DescriptionLink: React.FC<DescriptionLinkProps>","LinkIcon","ExternalLinkIcon","DescriptionLongText: React.FC<{ content: string | null | undefined | number }>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","DescriptionName: React.FC<{\n name?: string | null | undefined;\n}>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","DescriptionNumberPhone: React.FC<{ value: string }>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","options: Intl.NumberFormatOptions","dotColorMap: Record<StatusColor, string>","DescriptionStatus: React.FC<DescriptionStatusProps>","Badge","DescriptionTagList: React.FC<DescriptionTagListProps>","Badge","DescriptionUser: React.FC<DescriptionUserProps>","UserDataDisplay","DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n }>\n>","DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}>","DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}>","DescriptionLoadingSkeleton: React.FC<{ rows: number }>","Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n>","DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n>"],"sources":["../../../packages/components/features/descriptions/components/empty.tsx","../../../packages/components/features/descriptions/components/badge.tsx","../../../packages/components/features/descriptions/components/boolean.tsx","../../../packages/components/features/descriptions/components/copy.tsx","../../../packages/components/features/descriptions/components/date.tsx","../../../packages/components/features/descriptions/components/images.tsx","../../../packages/components/features/descriptions/components/link.tsx","../../../packages/components/features/descriptions/components/longtext.tsx","../../../packages/components/features/descriptions/components/name.tsx","../../../packages/components/features/descriptions/components/number-phone.tsx","../../../packages/components/features/descriptions/components/statistic.tsx","../../../packages/components/features/descriptions/components/status.tsx","../../../packages/components/features/descriptions/components/tag-list.tsx","../../../packages/components/features/descriptions/components/user.tsx","../../../packages/components/features/descriptions/index.tsx"],"sourcesContent":["'use client';\n\nexport const DescriptionEmpty: React.FC = () => {\n return (\n <span data-slot=\"description-empty\" aria-label=\"Empty value\" className=\"select-none font-medium text-sm text-text-positive-muted\">\n —\n </span>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBadgeProps = {\n label: string | number | null | undefined;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n};\n\nexport const DescriptionBadge: React.FC<DescriptionBadgeProps> = ({ label, color = 'secondary', variant = 'soft', size = 'sm' }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-badge\" color={color} variant={variant} size={size}>\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionBooleanProps = {\n value: boolean | null | undefined;\n trueLabel?: string;\n falseLabel?: string;\n};\n\nexport const DescriptionBoolean: React.FC<DescriptionBooleanProps> = ({ value, trueLabel = 'Yes', falseLabel = 'No' }) => {\n if (value == null) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-boolean\" variant=\"soft\" color={value ? 'success' : 'danger'} size=\"sm\">\n {value ? trueLabel : falseLabel}\n </Badge>\n );\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { CheckIcon, CopyIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionCopyProps = {\n value: string | null | undefined;\n truncate?: boolean;\n};\n\nexport const DescriptionCopy: React.FC<DescriptionCopyProps> = ({ value, truncate = true }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n if (!value) return;\n await navigator.clipboard.writeText(value);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [value]);\n\n if (!value) return <DescriptionEmpty />;\n\n return (\n <button\n type=\"button\"\n data-slot=\"description-copy\"\n onClick={handleCopy}\n className={cn(\n 'group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs',\n truncate && 'min-w-0'\n )}\n >\n <span className={cn('tabular-nums', truncate && 'truncate')}>{value}</span>\n {copied ? <CheckIcon size={12} className=\"shrink-0 text-success\" /> : <CopyIcon size={12} className=\"shrink-0 opacity-50 group-hover:opacity-100\" />}\n </button>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { DateDisplay } from '@/components/data-display/date';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionDateProps = {\n date: Date | string | number | null | undefined;\n};\n\nexport const DescriptionDate: React.FC<DescriptionDateProps> = ({ date }) => {\n if (date == null) return <DescriptionEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DateDisplay data-slot=\"description-date\" date={date} format=\"medium\" className=\"cursor-help\" />\n </TooltipTrigger>\n <TooltipContent>\n <DateDisplay date={date} format=\"full\" showTime className=\"text-xs font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","'use client';\n\nimport { Image } from '@/components/ui/image';\n\nimport { DescriptionEmpty } from './empty';\n\ntype ImageItem = { id: string; src: string; alt: string };\n\nexport const DescriptionImages: React.FC<{\n images?: Array<ImageItem> | null | undefined;\n}> = ({ images }) => {\n if (!images?.length) return <DescriptionEmpty />;\n\n const isSingle = images.length === 1;\n\n return (\n <div data-slot=\"description-images\" className=\"flex flex-wrap gap-4\">\n {images.map(image => (\n <div\n key={image.id}\n className={\n isSingle\n ? 'group relative size-42 overflow-hidden rounded-sm border border-border shadow-xs transition-shadow hover:shadow-card'\n : 'group relative size-16 overflow-hidden rounded-lg border border-border shadow-xs transition-shadow hover:shadow-card'\n }\n >\n <Image src={image.src} alt={image.alt} width=\"100%\" height=\"100%\" className=\"transition-transform duration-200 group-hover:scale-105\" />\n </div>\n ))}\n </div>\n );\n};\n","'use client';\n\nimport { ExternalLinkIcon, LinkIcon } from 'lucide-react';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionLinkProps = {\n href: string | null | undefined;\n label?: string;\n external?: boolean;\n className?: string;\n};\n\nexport const DescriptionLink: React.FC<DescriptionLinkProps> = ({ href, label, external = true, className }) => {\n if (!href) return <DescriptionEmpty />;\n\n return (\n <a\n data-slot=\"description-link\"\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n className={cn(\n 'inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid',\n className\n )}\n >\n {!external && <LinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n <span className=\"truncate\">{label ?? href}</span>\n {external && <ExternalLinkIcon size={12} className=\"shrink-0 opacity-70\" />}\n </a>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionLongText: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content == null) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph\n data-slot=\"description-longtext\"\n variant=\"sm\"\n className=\"line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors\"\n >\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nimport { DescriptionEmpty } from './empty';\n\nexport const DescriptionName: React.FC<{\n name?: string | null | undefined;\n}> = ({ name }) => {\n if (!name) return <DescriptionEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Paragraph data-slot=\"description-name\" variant=\"sm\" className=\"line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end text-text-positive-subtle\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport { Paragraph } from '@/components/typography/paragraph';\n\nexport const DescriptionNumberPhone: React.FC<{ value: string }> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"description-phone\">\n <Paragraph variant=\"sm\" className=\"tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DescriptionEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\nconst descriptionStatisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'sm',\n trend: 'neutral',\n },\n});\n\nexport type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number;\n roundingMode?: 'round' | 'floor' | 'ceil';\n showTrailingZeros?: boolean;\n value: number | string | null | undefined;\n className?: string;\n};\n\nexport const DescriptionStatistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'sm',\n trend = 'neutral',\n value = 0,\n className,\n }: DescriptionStatisticProps) => {\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <DescriptionEmpty />;\n }\n\n return (\n <div data-slot=\"description-statistic\" className={cn(descriptionStatisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"description-statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"description-statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"description-statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nDescriptionStatistic.displayName = 'DescriptionStatistic';\n","'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype StatusColor = NonNullable<BadgeProps['color']>;\n\nconst dotColorMap: Record<StatusColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n muted: 'bg-muted',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n};\n\ntype DescriptionStatusProps = {\n label: string | null | undefined;\n color?: StatusColor;\n dot?: boolean;\n};\n\nexport const DescriptionStatus: React.FC<DescriptionStatusProps> = ({ label, color = 'info', dot = true }) => {\n if (!label) return <DescriptionEmpty />;\n return (\n <Badge data-slot=\"description-status\" variant=\"soft\" color={color} size=\"sm\" className=\"gap-1.5\">\n {dot && <span className={cn('inline-block size-1.5 shrink-0 rounded-full', dotColorMap[color])} />}\n {label}\n </Badge>\n );\n};\n","'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport type { BadgeProps } from '@/components/ui/badge';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionTagListProps = {\n tags: Array<string | number> | null | undefined;\n max?: number;\n color?: BadgeProps['color'];\n variant?: BadgeProps['variant'];\n};\n\nexport const DescriptionTagList: React.FC<DescriptionTagListProps> = ({ tags, max = 5, color = 'secondary', variant = 'soft' }) => {\n if (!tags?.length) return <DescriptionEmpty />;\n\n const visible = tags.slice(0, max);\n const overflow = tags.length - visible.length;\n\n return (\n <div data-slot=\"description-tag-list\" className=\"flex flex-wrap gap-1\">\n {visible.map((tag, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: static display list\n <Badge key={i} variant={variant} color={color} size=\"sm\">\n {tag}\n </Badge>\n ))}\n {overflow > 0 && (\n <Badge variant=\"outline\" color=\"muted\" size=\"sm\">\n +{overflow}\n </Badge>\n )}\n </div>\n );\n};\n","'use client';\n\nimport { UserDataDisplay } from '@/components/data-display/user';\n\nimport { DescriptionEmpty } from './empty';\n\ntype DescriptionUserProps = {\n uuid?: string | null;\n username?: string | null;\n email?: string | null;\n};\n\nexport const DescriptionUser: React.FC<DescriptionUserProps> = ({ uuid, username, email }) => {\n if (!uuid || !username || !email) return <DescriptionEmpty />;\n return <UserDataDisplay uuid={uuid} username={username} email={email} />;\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport * from './components';\n\nconst DescriptionGroupContext = createContext(false);\n\n/**\n * A single labeled row within a {@link Description} container, supporting both horizontal (side-by-side label/value) and vertical (stacked) layouts.\n *\n * @example\n * import { Description, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionItem label=\"Full name\">John Doe</DescriptionItem>\n * <DescriptionItem label=\"Email\" orientation=\"vertical\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionItem: React.FC<\n React.PropsWithChildren<{\n /** Text displayed in the label column. */\n label: string;\n /**\n * Number of grid columns (out of 12) allocated to the label in horizontal orientation.\n * @default 3\n */\n labelColSpan?: number;\n /**\n * Layout direction of the label/value pair.\n * - `'horizontal'` — label and value are side by side.\n * - `'vertical'` — label sits above the value.\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n /** Optional node rendered in the top-right corner of the label area (e.g. an edit action). */\n action?: React.ReactNode;\n }>\n> = ({ label, labelColSpan = 3, orientation = 'horizontal', action, children }) => {\n if (orientation === 'vertical') {\n return (\n <div data-slot=\"description-item\" className=\"flex flex-col border-b border-b-border last:border-b-0\">\n <div\n data-slot=\"description-item-label\"\n className=\"flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n <div data-slot=\"description-item-value\" className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\">\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"description-item\"\n style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }}\n className=\"grid border-b border-b-border last:border-b-0\"\n >\n <div\n data-slot=\"description-item-label\"\n style={{ gridColumn: `span ${labelColSpan} / span ${labelColSpan}` }}\n className=\"flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums\"\n >\n <span>{label}</span>\n {action && <div className=\"shrink-0 pr-1\">{action}</div>}\n </div>\n <div\n data-slot=\"description-item-value\"\n style={{ gridColumn: `span ${12 - labelColSpan} / span ${12 - labelColSpan}` }}\n className=\"flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive\"\n >\n {children}\n </div>\n </div>\n );\n};\n\n/**\n * A header bar for a {@link Description} block, showing a title, an optional subtitle, and an optional trailing action area.\n *\n * @example\n * import { Description, DescriptionHeader } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"User details\" description=\"Read-only overview\" extra={<EditBtn />} />\n * </Description>\n */\nexport const DescriptionHeader: React.FC<{\n /** Primary heading text. */\n title: string;\n /** Optional secondary text rendered below the title in a smaller, muted style. */\n description?: string;\n /** Optional node rendered on the right side of the header (e.g. action buttons). */\n extra?: React.ReactNode;\n /** Additional CSS class names applied to the header wrapper. */\n className?: string;\n}> = ({ title, description, extra, className }) => {\n return (\n <div\n data-slot=\"description-header\"\n className={cn('sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3', className)}\n >\n <div className=\"flex flex-col gap-0.5\">\n <p className=\"text-sm font-semibold text-text-positive\">{title}</p>\n {description && <p className=\"text-xs text-text-positive-muted\">{description}</p>}\n </div>\n {extra && <div className=\"shrink-0\">{extra}</div>}\n </div>\n );\n};\n\n/**\n * A visual section divider inside a {@link Description} container that optionally displays a section title with a decorative horizontal rule.\n *\n * @example\n * import { Description, DescriptionSection, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionSection title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n */\nexport const DescriptionSection: React.FC<{\n /** Optional section label rendered as uppercase small-caps text beside the divider line. */\n title?: string;\n /** Additional CSS class names applied to the section wrapper. */\n className?: string;\n}> = ({ title, className }) => {\n return (\n <div data-slot=\"description-section\" className={cn('flex items-center gap-3 border-b border-b-border px-4 py-2.5', className)}>\n {title && <p className=\"shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted\">{title}</p>}\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n );\n};\n\nconst DescriptionLoadingSkeleton: React.FC<{ rows: number }> = ({ rows }) => (\n <div data-slot=\"description-loading\" className=\"animate-pulse\">\n <div className=\"flex items-center justify-between border-b border-b-border px-4 py-3\">\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"h-3.5 w-36 rounded bg-border\" />\n <div className=\"h-2.5 w-24 rounded bg-border-weak\" />\n </div>\n <div className=\"h-5 w-16 rounded bg-border-weak\" />\n </div>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} style={{ display: 'grid', gridTemplateColumns: 'repeat(12, minmax(0, 1fr))' }} className=\"grid border-b border-b-border last:border-b-0\">\n <div style={{ gridColumn: 'span 3 / span 3' }} className=\"flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2\">\n <div className=\"h-3 w-20 rounded bg-border\" />\n </div>\n <div style={{ gridColumn: 'span 9 / span 9' }} className=\"flex items-center py-3 pl-4 pr-2\">\n <div className=\"h-3 w-28 rounded bg-border-weak\" />\n </div>\n </div>\n ))}\n </div>\n);\n\n/**\n * Root container for a description block — a bordered, rounded card that groups {@link DescriptionHeader}, {@link DescriptionSection}, and {@link DescriptionItem} elements.\n *\n * Set `nested` when embedding one `Description` inside another (removes the outer card shadow/ring and constrains sizing).\n * Set `loading` to replace content with animated skeleton rows while data is being fetched.\n *\n * @example\n * import { Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <Description>\n * <DescriptionHeader title=\"Order #1234\" />\n * <DescriptionItem label=\"Status\">Shipped</DescriptionItem>\n * <DescriptionItem label=\"Total\">$99.00</DescriptionItem>\n * </Description>\n */\nexport const Description: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the root wrapper element. */\n className?: string;\n /** Strips the outer card shadow/ring and adapts sizing for embedding inside another Description. */\n nested?: boolean;\n /** Replaces children with animated skeleton rows while data is loading. */\n loading?: boolean;\n /** Number of skeleton rows shown when `loading` is true. @default 4 */\n loadingRows?: number;\n }>\n> = ({ children, className, nested = false, loading = false, loadingRows = 4 }) => {\n const inGroup = useContext(DescriptionGroupContext);\n\n return (\n <div\n data-slot=\"description\"\n className={cn(\n 'relative flex flex-col bg-card',\n inGroup\n ? 'border-b border-b-border last:border-b-0'\n : nested\n ? 'w-full overflow-hidden rounded-md border border-border'\n : 'size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak',\n className\n )}\n >\n {loading ? <DescriptionLoadingSkeleton rows={loadingRows} /> : children}\n </div>\n );\n};\n\n/**\n * A scrollable container that groups multiple {@link Description} blocks and makes each\n * {@link DescriptionHeader} sticky. As you scroll, the next section header stacks above\n * (pushes out) the previous one — standard CSS sticky behaviour within a single scroll context.\n *\n * @example\n * import { DescriptionGroup, Description, DescriptionHeader, DescriptionItem } from '@customafk/lunas-ui/features/descriptions';\n *\n * <DescriptionGroup>\n * <Description>\n * <DescriptionHeader title=\"Personal info\" />\n * <DescriptionItem label=\"Name\">John Doe</DescriptionItem>\n * </Description>\n * <Description>\n * <DescriptionHeader title=\"Contact\" />\n * <DescriptionItem label=\"Email\">john@example.com</DescriptionItem>\n * </Description>\n * </DescriptionGroup>\n */\nexport const DescriptionGroup: React.FC<\n React.PropsWithChildren<{\n /** Additional CSS class names applied to the group wrapper. */\n className?: string;\n }>\n> = ({ children, className }) => {\n return (\n <DescriptionGroupContext.Provider value={true}>\n <div\n data-slot=\"description-group\"\n className={cn('relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak', className)}\n >\n {children}\n </div>\n </DescriptionGroupContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as BadgeProps } from "../../badge-
|
|
1
|
+
import { n as BadgeProps } from "../../badge-IUtmECjN.cjs";
|
|
2
2
|
import * as react640 from "react";
|
|
3
3
|
import * as class_variance_authority_types21 from "class-variance-authority/types";
|
|
4
4
|
import { VariantProps } from "class-variance-authority";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as BadgeProps } from "../../badge-
|
|
2
|
-
import * as
|
|
1
|
+
import { n as BadgeProps } from "../../badge-lvr8nB_0.mjs";
|
|
2
|
+
import * as react640 from "react";
|
|
3
3
|
import { VariantProps } from "class-variance-authority";
|
|
4
|
-
import * as
|
|
4
|
+
import * as class_variance_authority_types21 from "class-variance-authority/types";
|
|
5
5
|
|
|
6
6
|
//#region packages/components/features/descriptions/components/badge.d.ts
|
|
7
7
|
type DescriptionBadgeProps = {
|
|
@@ -74,7 +74,7 @@ declare const DescriptionNumberPhone: React.FC<{
|
|
|
74
74
|
declare const descriptionStatisticVariants: (props?: ({
|
|
75
75
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
76
76
|
trend?: "neutral" | "up" | "down" | null | undefined;
|
|
77
|
-
} &
|
|
77
|
+
} & class_variance_authority_types21.ClassProp) | undefined) => string;
|
|
78
78
|
type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariants> & {
|
|
79
79
|
decimalSeparator?: string;
|
|
80
80
|
groupSeparator?: string;
|
|
@@ -86,7 +86,7 @@ type DescriptionStatisticProps = VariantProps<typeof descriptionStatisticVariant
|
|
|
86
86
|
value: number | string | null | undefined;
|
|
87
87
|
className?: string;
|
|
88
88
|
};
|
|
89
|
-
declare const DescriptionStatistic:
|
|
89
|
+
declare const DescriptionStatistic: react640.MemoExoticComponent<({
|
|
90
90
|
decimalSeparator,
|
|
91
91
|
groupSeparator,
|
|
92
92
|
prefix: Prefix,
|
|
@@ -98,7 +98,7 @@ declare const DescriptionStatistic: react646.MemoExoticComponent<({
|
|
|
98
98
|
trend,
|
|
99
99
|
value,
|
|
100
100
|
className
|
|
101
|
-
}: DescriptionStatisticProps) =>
|
|
101
|
+
}: DescriptionStatisticProps) => react640.JSX.Element>;
|
|
102
102
|
//#endregion
|
|
103
103
|
//#region packages/components/features/descriptions/components/status.d.ts
|
|
104
104
|
type StatusColor = NonNullable<BadgeProps['color']>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{t as e}from"../../paragraph-CjstaJFj.mjs";import"../../skeleton-DupQ91XW.mjs";import{t}from"../../image-D2U1SBw5.mjs";import"../../flex-BAcvp4lB.mjs";import{t as n}from"../../date-CFgc7pK3.mjs";import{t as r}from"../../badge-Bhbhmsic.mjs";import{i,n as a,r as o,t as s}from"../../tooltip-BfBJRYpc.mjs";import"../../avatar-m1LjDIil.mjs";import{t as c}from"../../user-D8Skw8dI.mjs";import{CheckIcon as l,CopyIcon as u,ExternalLinkIcon as d,LinkIcon as f}from"lucide-react";import{createContext as p,memo as m,useCallback as h,useContext as g,useMemo as _,useState as v}from"react";import{cn as y}from"@customafk/react-toolkit/utils";import{cva as b}from"class-variance-authority";import{jsx as x,jsxs as S}from"react/jsx-runtime";const C=()=>x(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),w=({label:e,color:t=`secondary`,variant:n=`soft`,size:i=`sm`})=>e?x(r,{"data-slot":`description-badge`,color:t,variant:n,size:i,children:e}):x(C,{}),T=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?x(C,{}):x(r,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),E=({value:e,truncate:t=!0})=>{let[n,r]=v(!1),i=h(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?S(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:y(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[x(`span`,{className:y(`tabular-nums`,t&&`truncate`),children:e}),n?x(l,{size:12,className:`shrink-0 text-success`}):x(u,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):x(C,{})},D=({date:e})=>e==null?x(C,{}):x(o,{children:S(s,{children:[x(i,{asChild:!0,children:x(n,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help underline decoration-dashed decoration-border-strong underline-offset-2`})}),x(a,{children:x(n,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),O=({images:e})=>{if(!e?.length)return x(C,{});let n=e.length===1;return x(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>x(`div`,{className:n?`group relative size-42 overflow-hidden rounded-sm border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-16 overflow-hidden rounded-lg border border-border shadow-xs transition-shadow hover:shadow-card`,children:x(t,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},k=({href:e,label:t,external:n=!0,className:r})=>e?S(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:y(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&x(f,{size:12,className:`shrink-0 opacity-70`}),x(`span`,{className:`truncate`,children:t??e}),n&&x(d,{size:12,className:`shrink-0 opacity-70`})]}):x(C,{}),A=({content:t})=>t==null?x(C,{}):S(s,{children:[x(i,{asChild:!0,children:x(e,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm underline decoration-dashed decoration-border-strong underline-offset-2`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.toString().length,` chars`]})]})})]}),j=({name:t})=>t?S(s,{children:[x(i,{asChild:!0,children:x(e,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate underline decoration-dashed decoration-border-strong underline-offset-2`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.length,` chars`]})]})})]}):x(C,{}),M=({value:t})=>S(s,{children:[x(i,{"data-slot":`description-phone`,children:x(e,{variant:`sm`,className:`tabular-nums transition-colors`,children:t.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),x(a,{align:`start`,children:x(`p`,{className:`tabular-nums`,children:t.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),N=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},P=b(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),F=m(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:s=`sm`,trend:c=`neutral`,value:l=0,className:u})=>{let d=_(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),f=h(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=N(e,i,a)),t.toLocaleString(`en-US`,d)},[a,d,i]),p=_(()=>{if(typeof l==`number`)return Number.isNaN(l)||!Number.isFinite(l)?`N/A`:f(l);if(typeof l==`string`){let e=l.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:f(t)}return`N/A`},[l,f]),m=_(()=>e===`.`&&t===`,`?p:p.replace(/,/g,t).replace(/\./g,e),[p,e,t]);return m===`0`||m===`N/A`||!m?x(C,{}):S(`div`,{"data-slot":`description-statistic`,className:y(P({size:s,trend:c}),u),children:[n&&x(`span`,{"data-slot":`description-statistic-prefix`,children:n}),x(`p`,{"data-slot":`description-statistic-value`,children:m}),r&&x(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});F.displayName=`DescriptionStatistic`;const I={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},L=({label:e,color:t=`info`,dot:n=!0})=>e?S(r,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&x(`span`,{className:y(`inline-block size-1.5 shrink-0 rounded-full`,I[t])}),e]}):x(C,{}),R=({tags:e,max:t=5,color:n=`secondary`,variant:i=`soft`})=>{if(!e?.length)return x(C,{});let a=e.slice(0,t),o=e.length-a.length;return S(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>x(r,{variant:i,color:n,size:`sm`,children:e},t)),o>0&&S(r,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},z=({uuid:e,username:t,email:n})=>!e||!t||!n?x(C,{}):x(c,{uuid:e,username:t,email:n}),B=p(!1),V=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,children:i})=>n===`vertical`?S(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,className:`flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak`,children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}):S(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:`flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums`,children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0 pr-1`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}),H=({title:e,description:t,extra:n,className:r})=>S(`div`,{"data-slot":`description-header`,className:y(`sticky top-0 z-10 flex items-start justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[S(`div`,{className:`flex flex-col gap-0.5`,children:[x(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&x(`p`,{className:`text-xs text-text-positive-weak`,children:t})]}),n&&x(`div`,{className:`shrink-0`,children:n})]}),U=({title:e,className:t})=>S(`div`,{"data-slot":`description-section`,className:y(`flex items-center gap-3 border-b border-b-border bg-secondary-muted px-4 py-2`,t),children:[e&&x(`p`,{className:`text-xs font-semibold uppercase tracking-wide text-text-positive-muted`,children:e}),x(`div`,{className:`h-px flex-1 bg-border-weak`})]}),W=({rows:e})=>S(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[S(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[S(`div`,{className:`flex flex-col gap-1.5`,children:[x(`div`,{className:`h-3.5 w-36 rounded bg-border`}),x(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),x(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>S(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[x(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-20 rounded bg-border`})}),x(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),G=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>{let a=g(B);return x(`div`,{"data-slot":`description`,className:y(`relative flex flex-col bg-card`,a?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?x(W,{rows:i}):e})},K=({children:e,className:t})=>x(B.Provider,{value:!0,children:x(`div`,{"data-slot":`description-group`,className:y(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});export{G as Description,w as DescriptionBadge,T as DescriptionBoolean,E as DescriptionCopy,D as DescriptionDate,C as DescriptionEmpty,K as DescriptionGroup,H as DescriptionHeader,O as DescriptionImages,V as DescriptionItem,k as DescriptionLink,A as DescriptionLongText,j as DescriptionName,M as DescriptionNumberPhone,U as DescriptionSection,F as DescriptionStatistic,L as DescriptionStatus,R as DescriptionTagList,z as DescriptionUser};
|
|
1
|
+
"use client";import{t as e}from"../../paragraph-DYLaQtTV.mjs";import"../../skeleton-C51IdOfK.mjs";import{t}from"../../image-D7OZ13Ib.mjs";import"../../flex-B6YSJzGe.mjs";import{t as n}from"../../date-fY3sUcLp.mjs";import{t as r}from"../../badge-CDGBGq8X.mjs";import{i,n as a,r as o,t as s}from"../../tooltip-Dxl5Wa8i.mjs";import"../../avatar-fltdRVsJ.mjs";import{t as c}from"../../user-DtZy4P9d.mjs";import{CheckIcon as l,CopyIcon as u,ExternalLinkIcon as d,LinkIcon as f}from"lucide-react";import{createContext as p,memo as m,useCallback as h,useContext as g,useMemo as _,useState as v}from"react";import{cn as y}from"@customafk/react-toolkit/utils";import{cva as b}from"class-variance-authority";import{jsx as x,jsxs as S}from"react/jsx-runtime";const C=()=>x(`span`,{"data-slot":`description-empty`,"aria-label":`Empty value`,className:`select-none font-medium text-sm text-text-positive-muted`,children:`—`}),w=({label:e,color:t=`secondary`,variant:n=`soft`,size:i=`sm`})=>e?x(r,{"data-slot":`description-badge`,color:t,variant:n,size:i,children:e}):x(C,{}),T=({value:e,trueLabel:t=`Yes`,falseLabel:n=`No`})=>e==null?x(C,{}):x(r,{"data-slot":`description-boolean`,variant:`soft`,color:e?`success`:`danger`,size:`sm`,children:e?t:n}),E=({value:e,truncate:t=!0})=>{let[n,r]=v(!1),i=h(async()=>{e&&(await navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),1500))},[e]);return e?S(`button`,{type:`button`,"data-slot":`description-copy`,onClick:i,className:y(`group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-sm border border-border-weak bg-secondary-muted px-2 py-0.5 font-mono text-xs text-text-positive-weak transition-[border-color,color,box-shadow] hover:border-border hover:text-text-positive hover:shadow-xs`,t&&`min-w-0`),children:[x(`span`,{className:y(`tabular-nums`,t&&`truncate`),children:e}),n?x(l,{size:12,className:`shrink-0 text-success`}):x(u,{size:12,className:`shrink-0 opacity-50 group-hover:opacity-100`})]}):x(C,{})},D=({date:e})=>e==null?x(C,{}):x(o,{children:S(s,{children:[x(i,{asChild:!0,children:x(n,{"data-slot":`description-date`,date:e,format:`medium`,className:`cursor-help`})}),x(a,{children:x(n,{date:e,format:`full`,showTime:!0,className:`text-xs font-medium`})})]})}),O=({images:e})=>{if(!e?.length)return x(C,{});let n=e.length===1;return x(`div`,{"data-slot":`description-images`,className:`flex flex-wrap gap-4`,children:e.map(e=>x(`div`,{className:n?`group relative size-42 overflow-hidden rounded-sm border border-border shadow-xs transition-shadow hover:shadow-card`:`group relative size-16 overflow-hidden rounded-lg border border-border shadow-xs transition-shadow hover:shadow-card`,children:x(t,{src:e.src,alt:e.alt,width:`100%`,height:`100%`,className:`transition-transform duration-200 group-hover:scale-105`})},e.id))})},k=({href:e,label:t,external:n=!0,className:r})=>e?S(`a`,{"data-slot":`description-link`,href:e,target:n?`_blank`:void 0,rel:n?`noopener noreferrer`:void 0,className:y(`inline-flex max-w-full items-center gap-1 text-sm text-primary underline decoration-dashed underline-offset-2 transition-colors hover:text-primary-strong hover:decoration-solid`,r),children:[!n&&x(f,{size:12,className:`shrink-0 opacity-70`}),x(`span`,{className:`truncate`,children:t??e}),n&&x(d,{size:12,className:`shrink-0 opacity-70`})]}):x(C,{}),A=({content:t})=>t==null?x(C,{}):S(s,{children:[x(i,{asChild:!0,children:x(e,{"data-slot":`description-longtext`,variant:`sm`,className:`line-clamp-2 cursor-pointer whitespace-pre-line break-all text-start text-sm hover:text-text-positive transition-colors`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.toString().length,` chars`]})]})})]}),j=({name:t})=>t?S(s,{children:[x(i,{asChild:!0,children:x(e,{"data-slot":`description-name`,variant:`sm`,className:`line-clamp-2 w-full cursor-pointer truncate hover:text-text-positive transition-colors`,children:t})}),x(a,{align:`start`,className:`h-fit min-w-48 max-w-80 pt-4`,children:S(`div`,{className:`flex flex-col gap-y-2`,children:[x(`p`,{className:`whitespace-pre-line text-wrap break-keep`,children:t}),S(`p`,{className:`w-full text-end text-text-positive-subtle`,children:[t.length,` chars`]})]})})]}):x(C,{}),M=({value:t})=>S(s,{children:[x(i,{"data-slot":`description-phone`,children:x(e,{variant:`sm`,className:`tabular-nums transition-colors`,children:t.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),x(a,{align:`start`,children:x(`p`,{className:`tabular-nums`,children:t.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]}),N=(e,t,n)=>{let r=10**t;switch(n){case`floor`:return Math.floor(e*r)/r;case`ceil`:return Math.ceil(e*r)/r;default:return Math.round(e*r)/r}},P=b(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`sm`,trend:`neutral`}}),F=m(({decimalSeparator:e=`.`,groupSeparator:t=`,`,prefix:n,suffix:r,precision:i,roundingMode:a=`round`,showTrailingZeros:o=!1,size:s=`sm`,trend:c=`neutral`,value:l=0,className:u})=>{let d=_(()=>{let e={};return typeof i==`number`&&i>=0&&(o&&(e.minimumFractionDigits=i),e.maximumFractionDigits=i),e},[i,o]),f=h(e=>{let t=e;return typeof i==`number`&&i>=0&&(t=N(e,i,a)),t.toLocaleString(`en-US`,d)},[a,d,i]),p=_(()=>{if(typeof l==`number`)return Number.isNaN(l)||!Number.isFinite(l)?`N/A`:f(l);if(typeof l==`string`){let e=l.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:f(t)}return`N/A`},[l,f]),m=_(()=>e===`.`&&t===`,`?p:p.replace(/,/g,t).replace(/\./g,e),[p,e,t]);return m===`0`||m===`N/A`||!m?x(C,{}):S(`div`,{"data-slot":`description-statistic`,className:y(P({size:s,trend:c}),u),children:[n&&x(`span`,{"data-slot":`description-statistic-prefix`,children:n}),x(`p`,{"data-slot":`description-statistic-value`,children:m}),r&&x(`span`,{"data-slot":`description-statistic-suffix`,children:r})]})});F.displayName=`DescriptionStatistic`;const I={primary:`bg-primary`,secondary:`bg-secondary`,muted:`bg-muted`,accent:`bg-accent`,info:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-danger`},L=({label:e,color:t=`info`,dot:n=!0})=>e?S(r,{"data-slot":`description-status`,variant:`soft`,color:t,size:`sm`,className:`gap-1.5`,children:[n&&x(`span`,{className:y(`inline-block size-1.5 shrink-0 rounded-full`,I[t])}),e]}):x(C,{}),R=({tags:e,max:t=5,color:n=`secondary`,variant:i=`soft`})=>{if(!e?.length)return x(C,{});let a=e.slice(0,t),o=e.length-a.length;return S(`div`,{"data-slot":`description-tag-list`,className:`flex flex-wrap gap-1`,children:[a.map((e,t)=>x(r,{variant:i,color:n,size:`sm`,children:e},t)),o>0&&S(r,{variant:`outline`,color:`muted`,size:`sm`,children:[`+`,o]})]})},z=({uuid:e,username:t,email:n})=>!e||!t||!n?x(C,{}):x(c,{uuid:e,username:t,email:n}),B=p(!1),V=({label:e,labelColSpan:t=3,orientation:n=`horizontal`,action:r,children:i})=>n===`vertical`?S(`div`,{"data-slot":`description-item`,className:`flex flex-col border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,className:`flex items-center justify-between border-b border-b-border bg-secondary-muted py-2 pr-2 pl-4 text-sm font-medium text-text-positive-weak`,children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}):S(`div`,{"data-slot":`description-item`,style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[S(`div`,{"data-slot":`description-item-label`,style:{gridColumn:`span ${t} / span ${t}`},className:`flex min-w-full items-center justify-between overflow-x-hidden text-wrap break-all border-r border-r-border bg-secondary-muted py-3 pr-2 pl-4 text-sm font-medium text-text-positive-weak tabular-nums`,children:[x(`span`,{children:e}),r&&x(`div`,{className:`shrink-0 pr-1`,children:r})]}),x(`div`,{"data-slot":`description-item-value`,style:{gridColumn:`span ${12-t} / span ${12-t}`},className:`flex flex-wrap items-center gap-2 py-3 pr-2 pl-4 text-sm text-text-positive`,children:i})]}),H=({title:e,description:t,extra:n,className:r})=>S(`div`,{"data-slot":`description-header`,className:y(`sticky top-0 z-10 flex items-center justify-between gap-4 border-b border-b-border bg-card px-4 py-3`,r),children:[S(`div`,{className:`flex flex-col gap-0.5`,children:[x(`p`,{className:`text-sm font-semibold text-text-positive`,children:e}),t&&x(`p`,{className:`text-xs text-text-positive-muted`,children:t})]}),n&&x(`div`,{className:`shrink-0`,children:n})]}),U=({title:e,className:t})=>S(`div`,{"data-slot":`description-section`,className:y(`flex items-center gap-3 border-b border-b-border px-4 py-2.5`,t),children:[e&&x(`p`,{className:`shrink-0 text-xs font-semibold uppercase tracking-widest text-text-positive-muted`,children:e}),x(`div`,{className:`h-px flex-1 bg-border`})]}),W=({rows:e})=>S(`div`,{"data-slot":`description-loading`,className:`animate-pulse`,children:[S(`div`,{className:`flex items-center justify-between border-b border-b-border px-4 py-3`,children:[S(`div`,{className:`flex flex-col gap-1.5`,children:[x(`div`,{className:`h-3.5 w-36 rounded bg-border`}),x(`div`,{className:`h-2.5 w-24 rounded bg-border-weak`})]}),x(`div`,{className:`h-5 w-16 rounded bg-border-weak`})]}),Array.from({length:e}).map((e,t)=>S(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(12, minmax(0, 1fr))`},className:`grid border-b border-b-border last:border-b-0`,children:[x(`div`,{style:{gridColumn:`span 3 / span 3`},className:`flex items-center border-r border-r-border bg-secondary-muted py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-20 rounded bg-border`})}),x(`div`,{style:{gridColumn:`span 9 / span 9`},className:`flex items-center py-3 pl-4 pr-2`,children:x(`div`,{className:`h-3 w-28 rounded bg-border-weak`})})]},t))]}),G=({children:e,className:t,nested:n=!1,loading:r=!1,loadingRows:i=4})=>{let a=g(B);return x(`div`,{"data-slot":`description`,className:y(`relative flex flex-col bg-card`,a?`border-b border-b-border last:border-b-0`:n?`w-full overflow-hidden rounded-md border border-border`:`size-full overflow-y-auto rounded-lg border border-border shadow-card ring-1 ring-border-weak`,t),children:r?x(W,{rows:i}):e})},K=({children:e,className:t})=>x(B.Provider,{value:!0,children:x(`div`,{"data-slot":`description-group`,className:y(`relative size-full overflow-y-auto rounded-lg border border-border bg-card shadow-card ring-1 ring-border-weak`,t),children:e})});export{G as Description,w as DescriptionBadge,T as DescriptionBoolean,E as DescriptionCopy,D as DescriptionDate,C as DescriptionEmpty,K as DescriptionGroup,H as DescriptionHeader,O as DescriptionImages,V as DescriptionItem,k as DescriptionLink,A as DescriptionLongText,j as DescriptionName,M as DescriptionNumberPhone,U as DescriptionSection,F as DescriptionStatistic,L as DescriptionStatus,R as DescriptionTagList,z as DescriptionUser};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|