@customafk/lunas-ui 0.2.75 → 0.2.77
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/{FeatureDeveloping-zuTTDIh_.d.cts → FeatureDeveloping-DRmYHj91.d.cts} +2 -9
- package/dist/{FeatureDeveloping-zuTTDIh_.d.mts → FeatureDeveloping-DRmYHj91.d.mts} +2 -9
- package/dist/{FeatureFixing-DYQlgHPk.d.cts → FeatureFixing-BHHCDtAQ.d.cts} +2 -9
- package/dist/{FeatureFixing-DYQlgHPk.d.mts → FeatureFixing-BHHCDtAQ.d.mts} +2 -9
- package/dist/{LoginPage-vMXvwtxf.d.cts → LoginPage-DDljzV6A.d.cts} +2 -12
- package/dist/{LoginPage-vMXvwtxf.d.mts → LoginPage-DDljzV6A.d.mts} +2 -12
- package/dist/{NotAuthorized-CZIQ6EaA.d.cts → NotAuthorized-DTT57OHb.d.cts} +2 -9
- package/dist/{NotAuthorized-CZIQ6EaA.d.mts → NotAuthorized-DTT57OHb.d.mts} +2 -9
- package/dist/{NotFound-CRSKxhV8.d.cts → NotFound-BeUB1yus.d.cts} +2 -9
- package/dist/{NotFound-CRSKxhV8.d.mts → NotFound-BeUB1yus.d.mts} +2 -9
- package/dist/{RegisterPage-BBtpEzvL.d.cts → RegisterPage-LuTuV7Sw.d.cts} +2 -11
- package/dist/{RegisterPage-BBtpEzvL.d.mts → RegisterPage-LuTuV7Sw.d.mts} +2 -11
- package/dist/{VerifyEmailPage-CsmIeYLu.d.cts → VerifyEmailPage-5DFlEkk3.d.cts} +2 -14
- package/dist/{VerifyEmailPage-CsmIeYLu.d.mts → VerifyEmailPage-5DFlEkk3.d.mts} +2 -14
- package/dist/{action-submit-ScN29AQ1.mjs → action-submit-DVNxnW4-.mjs} +2 -2
- package/dist/{action-submit-ScN29AQ1.mjs.map → action-submit-DVNxnW4-.mjs.map} +1 -1
- package/dist/{action-submit-DI590CG3.cjs → action-submit-kYjq-iPD.cjs} +2 -2
- package/dist/{action-submit-DI590CG3.cjs.map → action-submit-kYjq-iPD.cjs.map} +1 -1
- package/dist/{actions-form-CNW4nhAP.cjs → actions-form-CwicJU89.cjs} +2 -2
- package/dist/{actions-form-CNW4nhAP.cjs.map → actions-form-CwicJU89.cjs.map} +1 -1
- package/dist/{actions-form-f8sejItb.mjs → actions-form-DRrkiGzh.mjs} +2 -2
- package/dist/{actions-form-f8sejItb.mjs.map → actions-form-DRrkiGzh.mjs.map} +1 -1
- package/dist/activity-heatmap-chart-DufvFndI.mjs.map +1 -1
- package/dist/activity-heatmap-chart-gDcvIAK_.cjs.map +1 -1
- package/dist/{add-new-DkBwXh0Q.d.cts → add-new-CHYPSC1G.d.cts} +3 -2
- package/dist/{add-new-DkBwXh0Q.d.mts → add-new-CHYPSC1G.d.mts} +3 -2
- package/dist/{alert-Bip5XjBw.d.cts → alert-C8wdckO8.d.cts} +4 -19
- package/dist/{alert-Bip5XjBw.d.mts → alert-C8wdckO8.d.mts} +4 -19
- package/dist/alert-D31c6DLq.cjs.map +1 -1
- package/dist/alert-OD1KJTEV.mjs.map +1 -1
- package/dist/{alert-dialog-Cdhz7jSj.d.cts → alert-dialog-8aDimwPK.d.cts} +12 -43
- package/dist/{alert-dialog-Cdhz7jSj.d.mts → alert-dialog-8aDimwPK.d.mts} +12 -43
- package/dist/analysis-panel-BqZmOU58.mjs.map +1 -1
- package/dist/analysis-panel-CQZ0hmfN.cjs.map +1 -1
- package/dist/{aspect-ratio-huscluwJ.d.cts → aspect-ratio-DqXWkGJQ.d.cts} +2 -6
- package/dist/{aspect-ratio-huscluwJ.d.mts → aspect-ratio-DqXWkGJQ.d.mts} +2 -6
- package/dist/avatar-name-display-BrpnTqa_.mjs.map +1 -1
- package/dist/avatar-name-display-CLi1DJUs.cjs.map +1 -1
- package/dist/{avatar-BpeFwSkQ.d.cts → avatar-yN3dNBsZ.d.cts} +4 -14
- package/dist/{avatar-BpeFwSkQ.d.mts → avatar-yN3dNBsZ.d.mts} +4 -14
- package/dist/{badge-MRT40pxM.d.cts → badge-BPiU1Ss2.d.cts} +2 -10
- package/dist/{badge-MRT40pxM.d.mts → badge-BPiU1Ss2.d.mts} +2 -10
- package/dist/badge-display-DmCKpGk9.cjs.map +1 -1
- package/dist/badge-display-RP5VTE10.mjs.map +1 -1
- package/dist/{breadcrumb-CSpScKZm.d.cts → breadcrumb-DEFTnz90.d.cts} +8 -31
- package/dist/{breadcrumb-CSpScKZm.d.mts → breadcrumb-DEFTnz90.d.mts} +8 -31
- package/dist/{button-Bk4Y6_9I.d.cts → button-BnoPktln.d.cts} +2 -15
- package/dist/{button-Bk4Y6_9I.d.mts → button-BnoPktln.d.mts} +2 -15
- package/dist/{button-group-Cd5m5G3p.d.mts → button-group-Br7Cye6b.d.mts} +5 -18
- package/dist/{button-group-CiKhLVCg.d.cts → button-group-CP48qR0o.d.cts} +5 -18
- package/dist/{calendar-DPKt7D3w.d.mts → calendar-BkV5hTX2.d.mts} +6 -21
- package/dist/{calendar-stv2bJv0.d.cts → calendar-iDMPT1kI.d.cts} +6 -21
- package/dist/candlestick-chart-CiBiCU3y.mjs.map +1 -1
- package/dist/candlestick-chart-CqmRkfXj.cjs.map +1 -1
- package/dist/{card-DOnx7RKz.d.cts → card-C7jG9mCZ.d.cts} +8 -29
- package/dist/{card-DOnx7RKz.d.mts → card-C7jG9mCZ.d.mts} +8 -29
- package/dist/card-form-BR5kDTzB.cjs.map +1 -1
- package/dist/card-form-D9fNO-6F.mjs.map +1 -1
- package/dist/cards/grid-product-card.cjs.map +1 -1
- package/dist/cards/grid-product-card.d.cts +1 -1
- package/dist/cards/grid-product-card.d.mts +1 -1
- package/dist/cards/grid-product-card.mjs.map +1 -1
- package/dist/cards/product-card.cjs.map +1 -1
- package/dist/cards/product-card.d.cts +1 -1
- package/dist/cards/product-card.d.mts +1 -1
- package/dist/cards/product-card.mjs.map +1 -1
- package/dist/cards/simple-card.d.cts +1 -1
- package/dist/cards/simple-card.d.mts +1 -1
- package/dist/{carousel-CV3IZ96x.d.mts → carousel-D7VXWJ3S.d.mts} +7 -32
- package/dist/{carousel-c2XuzmYN.d.cts → carousel-bBvM31sh.d.cts} +7 -32
- package/dist/{chart-sYFksFMk.d.cts → chart-D8tNf0_6.d.cts} +6 -36
- package/dist/{chart-sYFksFMk.d.mts → chart-D8tNf0_6.d.mts} +6 -36
- package/dist/{checkbox-XfLNnG0S.d.cts → checkbox-Cuc-_UcF.d.cts} +2 -6
- package/dist/{checkbox-XfLNnG0S.d.mts → checkbox-Cuc-_UcF.d.mts} +2 -6
- package/dist/{checkbox-field-Csro0Nla.mjs → checkbox-field-BN3Vd9qq.mjs} +2 -2
- package/dist/{checkbox-field-Csro0Nla.mjs.map → checkbox-field-BN3Vd9qq.mjs.map} +1 -1
- package/dist/{checkbox-field-Ck_VADFe.cjs → checkbox-field-DBUjQC_4.cjs} +2 -2
- package/dist/{checkbox-field-Ck_VADFe.cjs.map → checkbox-field-DBUjQC_4.cjs.map} +1 -1
- package/dist/close-BYHgEZvZ.cjs.map +1 -1
- package/dist/close-DYJZ8fkh.mjs.map +1 -1
- package/dist/cms-layout-BXd2ncAV.cjs +2 -0
- package/dist/cms-layout-BXd2ncAV.cjs.map +1 -0
- package/dist/cms-layout-COIo9HiP.mjs +2 -0
- package/dist/cms-layout-COIo9HiP.mjs.map +1 -0
- package/dist/{collapsible-liIHmFuw.d.cts → collapsible-D3MS6pMC.d.cts} +4 -11
- package/dist/{collapsible-liIHmFuw.d.mts → collapsible-D3MS6pMC.d.mts} +4 -11
- package/dist/combobox-BFLmuV4w.d.cts +120 -0
- package/dist/combobox-C64Rvd7n.mjs +2 -0
- package/dist/combobox-C64Rvd7n.mjs.map +1 -0
- package/dist/{combobox-field-Bxrct4lA.cjs → combobox-field-BE9miJ3D.cjs} +2 -2
- package/dist/{combobox-field-Bxrct4lA.cjs.map → combobox-field-BE9miJ3D.cjs.map} +1 -1
- package/dist/{combobox-field-BMfA_taQ.mjs → combobox-field-Bug1qI5B.mjs} +2 -2
- package/dist/{combobox-field-BMfA_taQ.mjs.map → combobox-field-Bug1qI5B.mjs.map} +1 -1
- package/dist/combobox-kp_kPY8o.cjs +2 -0
- package/dist/combobox-kp_kPY8o.cjs.map +1 -0
- package/dist/combobox-wOpqEFBq.d.mts +120 -0
- package/dist/{command-Bb6SneVI.d.mts → command-BM9cIuFp.d.cts} +11 -42
- package/dist/{command-CHSJVU9o.d.cts → command-DLnIGYou.d.mts} +11 -42
- package/dist/{context-menu-BOlGSuep.d.cts → context-menu-z_-DdL8k.d.cts} +16 -64
- package/dist/{context-menu-BOlGSuep.d.mts → context-menu-z_-DdL8k.d.mts} +16 -64
- package/dist/conversion-funnel-chart-CW_zDfKS.mjs.map +1 -1
- package/dist/conversion-funnel-chart-r2m2QbiQ.cjs.map +1 -1
- package/dist/correlation-scatter-chart-Djtt7NU7.mjs.map +1 -1
- package/dist/correlation-scatter-chart-HF48YUIB.cjs.map +1 -1
- package/dist/{country-C8QijcHF.d.mts → country-8m51pdnj.d.mts} +3 -3
- package/dist/{country-CJIaO0I7.d.cts → country-BPlbbV9W.d.cts} +3 -3
- package/dist/currency-display-Buxc6Ph5.cjs.map +1 -1
- package/dist/currency-display-CEg_HRYv.mjs.map +1 -1
- package/dist/data-display/country.cjs.map +1 -1
- package/dist/data-display/country.d.cts +1 -1
- package/dist/data-display/country.d.mts +1 -1
- package/dist/data-display/country.mjs.map +1 -1
- package/dist/data-display/data-list.cjs.map +1 -1
- package/dist/data-display/data-list.d.cts +1 -1
- package/dist/data-display/data-list.d.mts +1 -1
- package/dist/data-display/data-list.mjs.map +1 -1
- package/dist/data-display/date-tooltip.cjs.map +1 -1
- package/dist/data-display/date-tooltip.d.cts +1 -1
- package/dist/data-display/date-tooltip.d.mts +1 -1
- package/dist/data-display/date-tooltip.mjs.map +1 -1
- package/dist/data-display/empty.cjs.map +1 -1
- package/dist/data-display/empty.d.cts +1 -1
- package/dist/data-display/empty.d.mts +1 -1
- package/dist/data-display/empty.mjs.map +1 -1
- package/dist/data-display/name.cjs.map +1 -1
- package/dist/data-display/name.d.cts +1 -1
- package/dist/data-display/name.d.mts +1 -1
- package/dist/data-display/name.mjs.map +1 -1
- package/dist/data-display/phone-number.cjs.map +1 -1
- package/dist/data-display/phone-number.d.cts +1 -1
- package/dist/data-display/phone-number.d.mts +1 -1
- package/dist/data-display/phone-number.mjs.map +1 -1
- package/dist/data-display/role-badge.cjs.map +1 -1
- package/dist/data-display/role-badge.d.cts +1 -1
- package/dist/data-display/role-badge.d.mts +1 -1
- package/dist/data-display/role-badge.mjs.map +1 -1
- package/dist/data-display/statistic.cjs.map +1 -1
- package/dist/data-display/statistic.d.cts +1 -1
- package/dist/data-display/statistic.d.mts +1 -1
- package/dist/data-display/statistic.mjs.map +1 -1
- package/dist/data-display/user.cjs.map +1 -1
- package/dist/data-display/user.d.cts +1 -1
- package/dist/data-display/user.d.mts +1 -1
- package/dist/data-display/user.mjs.map +1 -1
- package/dist/{data-list-Cg510z2m.d.cts → data-list-BRHjqVUT.d.cts} +10 -5
- package/dist/{data-list-Cg510z2m.d.mts → data-list-BRHjqVUT.d.mts} +10 -5
- package/dist/date-B3cozmfV.cjs.map +1 -1
- package/dist/date-Nsz0Pewe.mjs.map +1 -1
- package/dist/date-display-BgI7Wjqf.cjs.map +1 -1
- package/dist/date-display-DGfHQhpu.mjs.map +1 -1
- package/dist/{date-field-Ba6O0uV3.cjs → date-field-CYoPe74G.cjs} +2 -2
- package/dist/{date-field-Ba6O0uV3.cjs.map → date-field-CYoPe74G.cjs.map} +1 -1
- package/dist/{date-field-DUx13OiJ.mjs → date-field-D_qpBb-t.mjs} +2 -2
- package/dist/{date-field-DUx13OiJ.mjs.map → date-field-D_qpBb-t.mjs.map} +1 -1
- package/dist/{date-tooltip-DptxGOj_.d.cts → date-tooltip-BZ4JiwfW.d.cts} +3 -2
- package/dist/{date-tooltip-DptxGOj_.d.mts → date-tooltip-BZ4JiwfW.d.mts} +3 -2
- package/dist/description-display-BR8nXqc_.cjs.map +1 -1
- package/dist/description-display-CW0g3aJa.mjs.map +1 -1
- package/dist/detail-dialog-Ct0vAjFe.mjs +2 -0
- package/dist/detail-dialog-Ct0vAjFe.mjs.map +1 -0
- package/dist/detail-dialog-uN5mrCa7.cjs +2 -0
- package/dist/detail-dialog-uN5mrCa7.cjs.map +1 -0
- package/dist/{dialog-BASlxWF_.d.cts → dialog-c1vBnso8.d.cts} +13 -41
- package/dist/{dialog-BASlxWF_.d.mts → dialog-c1vBnso8.d.mts} +13 -41
- package/dist/{dialog-form-B_kgYxZg.cjs → dialog-form-BTZZwz3T.cjs} +2 -2
- package/dist/{dialog-form-B_kgYxZg.cjs.map → dialog-form-BTZZwz3T.cjs.map} +1 -1
- package/dist/{dialog-form-SyBJUlDB.mjs → dialog-form-CCIcht28.mjs} +2 -2
- package/dist/{dialog-form-SyBJUlDB.mjs.map → dialog-form-CCIcht28.mjs.map} +1 -1
- package/dist/dialogs/confirm-dialog.cjs.map +1 -1
- package/dist/dialogs/confirm-dialog.mjs.map +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +64 -133
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +64 -133
- package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +1 -1
- package/dist/dialogs/detail-dialog/index.cjs +1 -2
- package/dist/dialogs/detail-dialog/index.d.cts +1 -1
- package/dist/dialogs/detail-dialog/index.d.mts +1 -1
- package/dist/dialogs/detail-dialog/index.mjs +1 -2
- package/dist/dialogs/error-dialog.cjs.map +1 -1
- package/dist/dialogs/error-dialog.d.cts +1 -1
- package/dist/dialogs/error-dialog.d.mts +1 -1
- package/dist/dialogs/error-dialog.mjs.map +1 -1
- package/dist/dialogs/loading-dialog.cjs.map +1 -1
- package/dist/dialogs/loading-dialog.d.cts +1 -1
- package/dist/dialogs/loading-dialog.d.mts +1 -1
- package/dist/dialogs/loading-dialog.mjs.map +1 -1
- package/dist/donut-chart-CsPPKy0G.cjs.map +1 -1
- package/dist/donut-chart-eKZjuzW0.mjs.map +1 -1
- package/dist/{drawer-Dwx99ff3.d.cts → drawer-B8cntcg3.d.cts} +11 -39
- package/dist/{drawer-Dwx99ff3.d.mts → drawer-B8cntcg3.d.mts} +11 -39
- package/dist/{dropdown-menu-CcMccVns.d.cts → dropdown-menu-wdaYl-q0.d.cts} +16 -66
- package/dist/{dropdown-menu-CcMccVns.d.mts → dropdown-menu-wdaYl-q0.d.mts} +16 -66
- package/dist/{edit-qfS5kOtM.d.cts → edit-C8JDClC3.d.cts} +3 -2
- package/dist/{edit-qfS5kOtM.d.mts → edit-C8JDClC3.d.mts} +3 -2
- package/dist/edit-button-0_FLZoT3.cjs.map +1 -1
- package/dist/edit-button-DmMFMzG0.mjs.map +1 -1
- package/dist/email-display-BKcoWmPK.mjs.map +1 -1
- package/dist/email-display-DqKYq0iM.cjs.map +1 -1
- package/dist/{email-field-CO_BZHod.cjs → email-field-DJa7iASY.cjs} +2 -2
- package/dist/{email-field-CO_BZHod.cjs.map → email-field-DJa7iASY.cjs.map} +1 -1
- package/dist/{email-field-BGYZUVl0.mjs → email-field-DxSNJ6tf.mjs} +2 -2
- package/dist/{email-field-BGYZUVl0.mjs.map → email-field-DxSNJ6tf.mjs.map} +1 -1
- package/dist/{empty-CaNJjp05.d.cts → empty-B-Nd7s_O.d.cts} +7 -27
- package/dist/{empty-CaNJjp05.d.mts → empty-B-Nd7s_O.d.mts} +7 -27
- package/dist/{empty-ClQptIZH.d.cts → empty-CHTdH5fg.d.cts} +4 -2
- package/dist/{empty-ClQptIZH.d.mts → empty-CHTdH5fg.d.mts} +4 -2
- package/dist/{error-dialog-D4jOPhmw.d.cts → error-dialog-DYQSm_JC.d.cts} +6 -3
- package/dist/{error-dialog-D4jOPhmw.d.mts → error-dialog-DYQSm_JC.d.mts} +6 -3
- package/dist/features/charts/index.cjs.map +1 -1
- package/dist/features/charts/index.d.cts +1 -1
- package/dist/features/charts/index.d.mts +1 -1
- package/dist/features/charts/index.mjs.map +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 +1 -1
- package/dist/features/descriptions/index.mjs.map +1 -1
- package/dist/features/logo/index.cjs.map +1 -1
- package/dist/features/logo/index.d.cts +3 -8
- package/dist/features/logo/index.d.mts +3 -8
- package/dist/features/logo/index.mjs.map +1 -1
- package/dist/features/tables/index.d.cts +1 -1
- package/dist/features/tables/index.d.mts +1 -1
- package/dist/features/tanstack-form/index.cjs +1 -1
- package/dist/features/tanstack-form/index.d.cts +1 -1
- package/dist/features/tanstack-form/index.d.mts +1 -1
- 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-BSLi-P0Q.cjs.map +1 -1
- package/dist/field-V2DoD8qL.mjs.map +1 -1
- package/dist/{file-uploader-U64lH0zG.d.cts → file-uploader-DyHOMFK3.d.cts} +1 -2
- package/dist/{file-uploader-U64lH0zG.d.mts → file-uploader-DyHOMFK3.d.mts} +1 -2
- package/dist/filter-CWuRGTl4.mjs.map +1 -1
- package/dist/filter-DqedvThM.cjs.map +1 -1
- package/dist/{flex-bw7U4hXn.d.cts → flex-BTPF2-F6.d.cts} +7 -18
- package/dist/{flex-bw7U4hXn.d.mts → flex-BTPF2-F6.d.mts} +7 -18
- package/dist/{form-CMP15S4r.d.cts → form-D0M_qGX_.d.cts} +8 -45
- package/dist/{form-CMP15S4r.d.mts → form-D0M_qGX_.d.mts} +8 -45
- package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs.map +1 -1
- package/dist/gain-loss-bar-chart-FUzN7DxF.cjs.map +1 -1
- package/dist/{google-Bl-jBW8L.d.cts → google-vajkoOiC.d.cts} +9 -5
- package/dist/{google-Bl-jBW8L.d.mts → google-vajkoOiC.d.mts} +9 -5
- package/dist/{grid-product-card-bpADqDOQ.d.cts → grid-product-card-P5X8ZPQF.d.cts} +14 -7
- package/dist/{grid-product-card-bpADqDOQ.d.mts → grid-product-card-P5X8ZPQF.d.mts} +14 -7
- package/dist/group-field-gejvx_Td.mjs.map +1 -1
- package/dist/group-field-sVykO2JZ.cjs.map +1 -1
- package/dist/{hover-card-Prwm-0Q4.d.cts → hover-card-JeShfV9g.d.cts} +4 -14
- package/dist/{hover-card-Prwm-0Q4.d.mts → hover-card-JeShfV9g.d.mts} +4 -14
- package/dist/image-BvDGi_G7.d.cts +36 -0
- package/dist/image-BvDGi_G7.d.mts +36 -0
- package/dist/{index-DJiiPHPf.d.cts → index-BBMKb5q2.d.cts} +28 -13
- package/dist/{index-DJiiPHPf.d.mts → index-BBMKb5q2.d.mts} +28 -13
- package/dist/{index-CS7oydGk.d.cts → index-BMuVmm7f.d.mts} +26 -26
- package/dist/index-BOifmu0V.d.cts +51 -0
- package/dist/index-BOifmu0V.d.mts +51 -0
- package/dist/{index-FEMPGfwO.d.cts → index-C9JAujMq.d.cts} +304 -142
- package/dist/{index-DmvXR2Cn.d.mts → index-CLx89ATZ.d.cts} +26 -26
- package/dist/{index-CBntsHIg.d.cts → index-DJKJt7oV.d.cts} +111 -54
- package/dist/{index-CBntsHIg.d.mts → index-DJKJt7oV.d.mts} +111 -54
- package/dist/{index-DOaKN0wJ.d.cts → index-DRAyYm8g.d.cts} +4 -34
- package/dist/{index-DOaKN0wJ.d.mts → index-DRAyYm8g.d.mts} +4 -34
- package/dist/{index-_GTjwUdG.d.mts → index-DnHoBjv7.d.mts} +304 -142
- package/dist/{index-BoYnKWwg.d.cts → index-DvC1inRy.d.cts} +789 -689
- package/dist/{index-BoYnKWwg.d.mts → index-DvC1inRy.d.mts} +789 -689
- package/dist/{index-teY5hw2R.d.cts → index-KgI9KqIf.d.cts} +33 -15
- package/dist/{index-teY5hw2R.d.mts → index-KgI9KqIf.d.mts} +33 -15
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +92 -91
- package/dist/index.d.mts +92 -91
- package/dist/index.mjs +1 -1
- package/dist/indexed-performance-line-chart-CT79KOM6.cjs.map +1 -1
- package/dist/indexed-performance-line-chart-D7F-rIMv.mjs.map +1 -1
- package/dist/{input-BieGEIDf.d.cts → input-D73TrUof.d.cts} +8 -13
- package/dist/{input-BieGEIDf.d.mts → input-D73TrUof.d.mts} +8 -13
- package/dist/{input-otp-6hJfhBHX.d.cts → input-otp-DGf28Nq2.d.cts} +7 -20
- package/dist/{input-otp-6hJfhBHX.d.mts → input-otp-DGf28Nq2.d.mts} +7 -20
- package/dist/{item-DTR2f2CX.d.cts → item-BxUBO7Hd.d.cts} +12 -47
- package/dist/{item-cIhkI3ZI.d.mts → item-ChW41yKF.d.mts} +12 -47
- package/dist/{label-DPG_GY7h.d.cts → label-CKywNz0h.d.cts} +2 -6
- package/dist/{label-DPG_GY7h.d.mts → label-CKywNz0h.d.mts} +2 -6
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.d.cts +1 -1
- package/dist/layouts/cms-layout/index.d.mts +1 -1
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/layouts/flex.d.cts +1 -1
- package/dist/layouts/flex.d.mts +1 -1
- package/dist/layouts/grid.cjs.map +1 -1
- package/dist/layouts/grid.mjs.map +1 -1
- package/dist/layouts/payment-layout/index.cjs +1 -1
- package/dist/layouts/payment-layout/index.d.cts +1 -1
- package/dist/layouts/payment-layout/index.d.mts +1 -1
- package/dist/layouts/payment-layout/index.mjs +1 -1
- package/dist/list-display-BRJVmji0.cjs.map +1 -1
- package/dist/list-display-Co94sV4H.mjs.map +1 -1
- package/dist/{loading-dialog-C73EJx9s.d.cts → loading-dialog-DXjQSQnC.d.cts} +4 -2
- package/dist/{loading-dialog-C73EJx9s.d.mts → loading-dialog-DXjQSQnC.d.mts} +4 -2
- package/dist/{menubar-CFrn3S96.d.cts → menubar-PDJeDtHh.d.cts} +17 -72
- package/dist/{menubar-CFrn3S96.d.mts → menubar-PDJeDtHh.d.mts} +17 -72
- package/dist/metric-radar-chart-6LTGQHsL.mjs.map +1 -1
- package/dist/metric-radar-chart-DwgbXgJX.cjs.map +1 -1
- package/dist/mirrored-bar-chart-BT7AYPJB.mjs.map +1 -1
- package/dist/mirrored-bar-chart-BwjtExjh.cjs.map +1 -1
- package/dist/more-button-BKBcXz6E.mjs.map +1 -1
- package/dist/more-button-RYvZgYiu.cjs.map +1 -1
- package/dist/{multi-select-BbiKgAYs.d.cts → multi-select-C4ae_jaX.d.mts} +2 -3
- package/dist/{multi-select-BoBHt_Z9.d.mts → multi-select-V3chK_bJ.d.cts} +2 -3
- package/dist/name-display-B-FtblLL.cjs.map +1 -1
- package/dist/name-display-CB9XAhXP.mjs.map +1 -1
- package/dist/{name-7aoM5rAW.d.cts → name-tnVKGZN7.d.cts} +3 -2
- package/dist/{name-7aoM5rAW.d.mts → name-tnVKGZN7.d.mts} +3 -2
- package/dist/{navigation-menu-B1BY9Zll.d.cts → navigation-menu-BCjjeblq.d.cts} +11 -38
- package/dist/{navigation-menu-B1BY9Zll.d.mts → navigation-menu-BCjjeblq.d.mts} +11 -38
- package/dist/{number-field-B89VeU2r.mjs → number-field-5INgdUUv.mjs} +2 -2
- package/dist/{number-field-B89VeU2r.mjs.map → number-field-5INgdUUv.mjs.map} +1 -1
- package/dist/{number-field-C7iEv5GJ.cjs → number-field-DKZz-27X.cjs} +2 -2
- package/dist/{number-field-C7iEv5GJ.cjs.map → number-field-DKZz-27X.cjs.map} +1 -1
- package/dist/number-input-CAr3JaA-.cjs +2 -0
- package/dist/{number-input-kTh9zzr7.cjs.map → number-input-CAr3JaA-.cjs.map} +1 -1
- package/dist/number-input-CJcEV9Cg.mjs +2 -0
- package/dist/{number-input-CqkegUWs.mjs.map → number-input-CJcEV9Cg.mjs.map} +1 -1
- package/dist/orders-bar-chart-9RmtP6In.cjs.map +1 -1
- package/dist/orders-bar-chart-DQhJGmwY.mjs.map +1 -1
- package/dist/pages/FeatureDeveloping.cjs.map +1 -1
- package/dist/pages/FeatureDeveloping.d.cts +1 -1
- package/dist/pages/FeatureDeveloping.d.mts +1 -1
- package/dist/pages/FeatureDeveloping.mjs.map +1 -1
- package/dist/pages/FeatureFixing.cjs.map +1 -1
- package/dist/pages/FeatureFixing.d.cts +1 -1
- package/dist/pages/FeatureFixing.d.mts +1 -1
- package/dist/pages/FeatureFixing.mjs.map +1 -1
- package/dist/pages/LoginPage.cjs.map +1 -1
- package/dist/pages/LoginPage.d.cts +1 -1
- package/dist/pages/LoginPage.d.mts +1 -1
- package/dist/pages/LoginPage.mjs.map +1 -1
- package/dist/pages/NotAuthorized.cjs.map +1 -1
- package/dist/pages/NotAuthorized.d.cts +1 -1
- package/dist/pages/NotAuthorized.d.mts +1 -1
- package/dist/pages/NotAuthorized.mjs.map +1 -1
- package/dist/pages/NotFound.cjs.map +1 -1
- package/dist/pages/NotFound.d.cts +1 -1
- package/dist/pages/NotFound.d.mts +1 -1
- package/dist/pages/NotFound.mjs.map +1 -1
- package/dist/pages/RegisterPage.cjs.map +1 -1
- package/dist/pages/RegisterPage.d.cts +1 -1
- package/dist/pages/RegisterPage.d.mts +1 -1
- package/dist/pages/RegisterPage.mjs.map +1 -1
- package/dist/pages/VerifyEmailPage.cjs.map +1 -1
- package/dist/pages/VerifyEmailPage.d.cts +1 -1
- package/dist/pages/VerifyEmailPage.d.mts +1 -1
- package/dist/pages/VerifyEmailPage.mjs.map +1 -1
- package/dist/{pagination-B2fyP0J2.d.cts → pagination-BRw-yZBY.d.cts} +11 -33
- package/dist/{pagination-DY0PBCnI.d.mts → pagination-BlLiOvY9.d.mts} +11 -33
- package/dist/{paragraph-BTmvVS1S.d.mts → paragraph-CRo5eC7H.d.mts} +2 -7
- package/dist/{paragraph-DbYYv0A0.d.cts → paragraph-CkCNIsvz.d.cts} +2 -7
- package/dist/{password-field-9RZ84TNz.cjs → password-field-BuWARi35.cjs} +2 -2
- package/dist/{password-field-9RZ84TNz.cjs.map → password-field-BuWARi35.cjs.map} +1 -1
- package/dist/{password-field-pqUgUcgf.mjs → password-field-DOIe6wTv.mjs} +2 -2
- package/dist/{password-field-pqUgUcgf.mjs.map → password-field-DOIe6wTv.mjs.map} +1 -1
- package/dist/{payment-layout-DS5CEH1h.mjs → payment-layout-BSl9DYQA.mjs} +2 -2
- package/dist/{payment-layout-DS5CEH1h.mjs.map → payment-layout-BSl9DYQA.mjs.map} +1 -1
- package/dist/payment-layout-DDcLanA0.cjs +2 -0
- package/dist/{payment-layout-Cb-Q8KD2.cjs.map → payment-layout-DDcLanA0.cjs.map} +1 -1
- package/dist/permalink-CUIKG9VA.cjs.map +1 -1
- package/dist/permalink-I-INEarM.mjs.map +1 -1
- package/dist/phone-number-Cu7Mnl6J.mjs.map +1 -1
- package/dist/{phone-number-6b_pkGI1.d.cts → phone-number-D9j5xYDW.d.cts} +3 -2
- package/dist/{phone-number-6b_pkGI1.d.mts → phone-number-D9j5xYDW.d.mts} +3 -2
- package/dist/phone-number-DJvfJg1b.cjs.map +1 -1
- package/dist/{popover-form-CLr6xIl5.cjs → popover-form-Bq2GcuZu.cjs} +2 -2
- package/dist/{popover-form-CLr6xIl5.cjs.map → popover-form-Bq2GcuZu.cjs.map} +1 -1
- package/dist/{popover-form-BmOqFjQM.mjs → popover-form-BsapHJck.mjs} +2 -2
- package/dist/{popover-form-BmOqFjQM.mjs.map → popover-form-BsapHJck.mjs.map} +1 -1
- package/dist/{popover-CdOCi0xg.d.cts → popover-qfF3o0zL.d.cts} +6 -21
- package/dist/{popover-CdOCi0xg.d.mts → popover-qfF3o0zL.d.mts} +6 -21
- package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs.map +1 -1
- package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs.map +1 -1
- package/dist/price-range-area-chart-BW6RQb_9.cjs.map +1 -1
- package/dist/price-range-area-chart-Dy01mhWJ.mjs.map +1 -1
- package/dist/{product-card-CvXLXbpV.d.cts → product-card-CYNh0CT5.d.cts} +14 -7
- package/dist/{product-card-CvXLXbpV.d.mts → product-card-CYNh0CT5.d.mts} +14 -7
- package/dist/{progress-Bp-5keO8.d.cts → progress-BpWaSlPG.d.cts} +2 -7
- package/dist/{progress-Bp-5keO8.d.mts → progress-BpWaSlPG.d.mts} +2 -7
- package/dist/progress-display-DbfN7U8m.cjs.map +1 -1
- package/dist/progress-display-qgvclwy9.mjs.map +1 -1
- package/dist/{radio-group-ycQQrPGn.d.cts → radio-group-D_ssq0Q2.d.cts} +3 -10
- package/dist/{radio-group-ycQQrPGn.d.mts → radio-group-D_ssq0Q2.d.mts} +3 -10
- package/dist/{radio-group-field-DsUi8uCy.mjs → radio-group-field-DOJ4jVSr.mjs} +2 -2
- package/dist/{radio-group-field-DsUi8uCy.mjs.map → radio-group-field-DOJ4jVSr.mjs.map} +1 -1
- package/dist/{radio-group-field-Bm2nkk1W.cjs → radio-group-field-kTgtvp1p.cjs} +2 -2
- package/dist/{radio-group-field-Bm2nkk1W.cjs.map → radio-group-field-kTgtvp1p.cjs.map} +1 -1
- package/dist/{refresh-BiyrZAXL.d.cts → refresh-CWvkHT0L.d.cts} +3 -2
- package/dist/{refresh-BiyrZAXL.d.mts → refresh-CWvkHT0L.d.mts} +3 -2
- package/dist/remove-button-B3qFw-M5.cjs.map +1 -1
- package/dist/remove-button-Db5oSj4h.mjs.map +1 -1
- package/dist/{resizable-B1BHdSAr.d.cts → resizable-CWmitx5U.d.cts} +2 -3
- package/dist/{resizable-B1BHdSAr.d.mts → resizable-CWmitx5U.d.mts} +2 -3
- package/dist/revenue-area-chart-BwzeTRzD.mjs.map +1 -1
- package/dist/revenue-area-chart-w2FZCl_7.cjs.map +1 -1
- package/dist/revenue-orders-composed-chart-BttOWYGt.cjs.map +1 -1
- package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs.map +1 -1
- package/dist/{role-badge-IdZW0tsN.d.cts → role-badge-CojpT6hX.d.cts} +3 -3
- package/dist/{role-badge-Bl4Rimpk.d.mts → role-badge-NTpnTz8M.d.mts} +3 -3
- package/dist/sales-target-radial-chart-BFLxBT2m.mjs.map +1 -1
- package/dist/sales-target-radial-chart-BoxSk7hW.cjs.map +1 -1
- package/dist/sankey-flow-chart-CDUqIRMZ.cjs.map +1 -1
- package/dist/sankey-flow-chart-bQ3Dffet.mjs.map +1 -1
- package/dist/{scroll-area-PbkqIAaH.d.cts → scroll-area-BpSwutyr.d.cts} +3 -14
- package/dist/{scroll-area-PbkqIAaH.d.mts → scroll-area-BpSwutyr.d.mts} +3 -14
- package/dist/{search-input-Bq4enQzR.d.cts → search-input-DEvYI6Rm.d.mts} +3 -7
- package/dist/{search-input-D51_mAY-.d.mts → search-input-h_3MoMqK.d.cts} +3 -7
- package/dist/search-modal-CMhsIxae.cjs.map +1 -1
- package/dist/search-modal-Cdmi2iyV.mjs.map +1 -1
- package/dist/section-form-BJWWflUR.mjs.map +1 -1
- package/dist/section-form-C_pHiBEW.cjs.map +1 -1
- package/dist/{select-B5j4WvPM.d.cts → select-UNtSe_Fs.d.cts} +11 -37
- package/dist/{select-B5j4WvPM.d.mts → select-UNtSe_Fs.d.mts} +11 -37
- package/dist/{select-field-ikKFoatc.mjs → select-field-BcsFBbNJ.mjs} +2 -2
- package/dist/{select-field-ikKFoatc.mjs.map → select-field-BcsFBbNJ.mjs.map} +1 -1
- package/dist/{select-field-F9eikYws.cjs → select-field-CURv37h4.cjs} +2 -2
- package/dist/{select-field-F9eikYws.cjs.map → select-field-CURv37h4.cjs.map} +1 -1
- package/dist/{separator-D6_fMJtM.d.cts → separator-Cvxkpzrj.d.cts} +2 -8
- package/dist/{separator-D6_fMJtM.d.mts → separator-Cvxkpzrj.d.mts} +2 -8
- package/dist/{sheet-cHLLSvvt.d.cts → sheet-BBvQsKM_.d.cts} +11 -34
- package/dist/{sheet-cHLLSvvt.d.mts → sheet-BBvQsKM_.d.mts} +11 -34
- package/dist/sidebar-core-Bz_LtXZy.mjs +2 -0
- package/dist/sidebar-core-Bz_LtXZy.mjs.map +1 -0
- package/dist/sidebar-core-DUdB9WCv.cjs +2 -0
- package/dist/sidebar-core-DUdB9WCv.cjs.map +1 -0
- package/dist/{simple-array-field-Bm_5b8pE.cjs → simple-array-field-bCUuPMgT.cjs} +2 -2
- package/dist/{simple-array-field-Bm_5b8pE.cjs.map → simple-array-field-bCUuPMgT.cjs.map} +1 -1
- package/dist/{simple-array-field-CeqZJfVs.mjs → simple-array-field-wFE_DUOV.mjs} +2 -2
- package/dist/{simple-array-field-CeqZJfVs.mjs.map → simple-array-field-wFE_DUOV.mjs.map} +1 -1
- package/dist/{simple-boolean-field-BeL9WjD5.cjs → simple-boolean-field-DRapzNrB.cjs} +2 -2
- package/dist/{simple-boolean-field-BeL9WjD5.cjs.map → simple-boolean-field-DRapzNrB.cjs.map} +1 -1
- package/dist/{simple-boolean-field-DZ0J-Pk0.mjs → simple-boolean-field-GQJyeyVS.mjs} +2 -2
- package/dist/{simple-boolean-field-DZ0J-Pk0.mjs.map → simple-boolean-field-GQJyeyVS.mjs.map} +1 -1
- package/dist/simple-card-Dhf9UXBg.d.cts +27 -0
- package/dist/simple-card-Dhf9UXBg.d.mts +27 -0
- package/dist/{simple-combobox-field-CeV40wnv.cjs → simple-combobox-field-Cp5dfQv3.cjs} +2 -2
- package/dist/{simple-combobox-field-CeV40wnv.cjs.map → simple-combobox-field-Cp5dfQv3.cjs.map} +1 -1
- package/dist/{simple-combobox-field-BQXmNATZ.mjs → simple-combobox-field-D6IaMJKl.mjs} +2 -2
- package/dist/{simple-combobox-field-BQXmNATZ.mjs.map → simple-combobox-field-D6IaMJKl.mjs.map} +1 -1
- package/dist/{simple-date-field-CrH-92i4.cjs → simple-date-field-_PSkIXAt.cjs} +2 -2
- package/dist/{simple-date-field-CrH-92i4.cjs.map → simple-date-field-_PSkIXAt.cjs.map} +1 -1
- package/dist/{simple-date-field-D9ymav2L.mjs → simple-date-field-dszQs7Ik.mjs} +2 -2
- package/dist/{simple-date-field-D9ymav2L.mjs.map → simple-date-field-dszQs7Ik.mjs.map} +1 -1
- package/dist/{simple-email-field-8IiVOYa-.mjs → simple-email-field-CwyoXqWo.mjs} +2 -2
- package/dist/{simple-email-field-8IiVOYa-.mjs.map → simple-email-field-CwyoXqWo.mjs.map} +1 -1
- package/dist/{simple-email-field-CsMmMSvS.cjs → simple-email-field-DIHwYrhk.cjs} +2 -2
- package/dist/{simple-email-field-CsMmMSvS.cjs.map → simple-email-field-DIHwYrhk.cjs.map} +1 -1
- package/dist/{simple-number-field-C6hE1Qlj.mjs → simple-number-field-Id1kV5yR.mjs} +2 -2
- package/dist/{simple-number-field-C6hE1Qlj.mjs.map → simple-number-field-Id1kV5yR.mjs.map} +1 -1
- package/dist/{simple-number-field-CrU2A2yp.cjs → simple-number-field-VdEeaIiC.cjs} +2 -2
- package/dist/{simple-number-field-CrU2A2yp.cjs.map → simple-number-field-VdEeaIiC.cjs.map} +1 -1
- package/dist/{simple-password-field-DWmUR_5_.cjs → simple-password-field-7xbVB1H3.cjs} +2 -2
- package/dist/{simple-password-field-DWmUR_5_.cjs.map → simple-password-field-7xbVB1H3.cjs.map} +1 -1
- package/dist/{simple-password-field-CabyA9Y7.mjs → simple-password-field-DIO9FwQy.mjs} +2 -2
- package/dist/{simple-password-field-CabyA9Y7.mjs.map → simple-password-field-DIO9FwQy.mjs.map} +1 -1
- package/dist/{simple-radio-group-field-BNFgrTSb.mjs → simple-radio-group-field-BmHWRnns.mjs} +2 -2
- package/dist/{simple-radio-group-field-BNFgrTSb.mjs.map → simple-radio-group-field-BmHWRnns.mjs.map} +1 -1
- package/dist/{simple-radio-group-field-CpTX_Xoy.cjs → simple-radio-group-field-CxVAr6yW.cjs} +2 -2
- package/dist/{simple-radio-group-field-CpTX_Xoy.cjs.map → simple-radio-group-field-CxVAr6yW.cjs.map} +1 -1
- package/dist/{simple-select-field-VibM3I3D.cjs → simple-select-field-C9u7Pg9u.cjs} +2 -2
- package/dist/{simple-select-field-VibM3I3D.cjs.map → simple-select-field-C9u7Pg9u.cjs.map} +1 -1
- package/dist/{simple-select-field-CiUfRHCo.mjs → simple-select-field-DfZk0zPa.mjs} +2 -2
- package/dist/{simple-select-field-CiUfRHCo.mjs.map → simple-select-field-DfZk0zPa.mjs.map} +1 -1
- package/dist/{simple-text-field-DRlcBB-3.cjs → simple-text-field-BxPjcB4c.cjs} +2 -2
- package/dist/{simple-text-field-DRlcBB-3.cjs.map → simple-text-field-BxPjcB4c.cjs.map} +1 -1
- package/dist/{simple-text-field-Cmmmci4R.mjs → simple-text-field-CT9KFUSK.mjs} +2 -2
- package/dist/{simple-text-field-Cmmmci4R.mjs.map → simple-text-field-CT9KFUSK.mjs.map} +1 -1
- package/dist/{simple-textarea-field-BDqw8ewE.mjs → simple-textarea-field-B22rT6zS.mjs} +2 -2
- package/dist/{simple-textarea-field-BDqw8ewE.mjs.map → simple-textarea-field-B22rT6zS.mjs.map} +1 -1
- package/dist/{simple-textarea-field-B0fOG7nh.cjs → simple-textarea-field-DG9oPtP-.cjs} +2 -2
- package/dist/{simple-textarea-field-B0fOG7nh.cjs.map → simple-textarea-field-DG9oPtP-.cjs.map} +1 -1
- package/dist/{skeleton-Ct4sYEKk.d.cts → skeleton-BL19ZqPB.d.cts} +2 -5
- package/dist/{skeleton-Ct4sYEKk.d.mts → skeleton-BL19ZqPB.d.mts} +2 -5
- package/dist/{slider-DwR1MhR8.d.cts → slider-KvzhtIbT.d.cts} +2 -10
- package/dist/{slider-DwR1MhR8.d.mts → slider-KvzhtIbT.d.mts} +2 -10
- package/dist/{sonner-B6LxJMYT.d.mts → sonner-C-sM3xU2.d.mts} +1 -2
- package/dist/{sonner-BcNgR0GP.d.cts → sonner-D-rrTnjn.d.cts} +1 -2
- package/dist/sparkline-chart-TbGzakUl.mjs.map +1 -1
- package/dist/sparkline-chart-sPqaJHep.cjs.map +1 -1
- package/dist/{spinner-CXuqcoB5.d.cts → spinner-Cz20qsxS.d.cts} +2 -5
- package/dist/{spinner-CXuqcoB5.d.mts → spinner-Cz20qsxS.d.mts} +2 -5
- package/dist/stacked-area-chart-DyxY96_l.cjs.map +1 -1
- package/dist/stacked-area-chart-UIWIxTmq.mjs.map +1 -1
- package/dist/statistic-Bpif8p8R.d.cts +42 -0
- package/dist/statistic-Bpif8p8R.d.mts +42 -0
- package/dist/statistic-ClkqqDfk.mjs.map +1 -1
- package/dist/statistic-LL4uHlRb.cjs.map +1 -1
- package/dist/status-display-BUphOF18.mjs.map +1 -1
- package/dist/status-display-o9inMVvb.cjs.map +1 -1
- package/dist/submit-button-CGBaPzE9.mjs.map +1 -1
- package/dist/submit-button-CvINfld5.cjs.map +1 -1
- package/dist/summary-bar-CYfgdxrQ.mjs.map +1 -1
- package/dist/summary-bar-Mb1B9Dnf.cjs.map +1 -1
- package/dist/{switch-9v4AYqJb.d.cts → switch-Ce5Pre2e.d.cts} +2 -6
- package/dist/{switch-9v4AYqJb.d.mts → switch-Ce5Pre2e.d.mts} +2 -6
- package/dist/{switch-field-BDVIJ21m.mjs → switch-field-Cz4lDf1D.mjs} +2 -2
- package/dist/{switch-field-BDVIJ21m.mjs.map → switch-field-Cz4lDf1D.mjs.map} +1 -1
- package/dist/{switch-field-D6CCxaEX.cjs → switch-field-yE4A6EoF.cjs} +2 -2
- package/dist/{switch-field-D6CCxaEX.cjs.map → switch-field-yE4A6EoF.cjs.map} +1 -1
- package/dist/systems/google.cjs.map +1 -1
- package/dist/systems/google.d.cts +1 -1
- package/dist/systems/google.d.mts +1 -1
- package/dist/systems/google.mjs.map +1 -1
- package/dist/{table-Dg2D0v87.d.cts → table-D354-TpC.d.cts} +9 -33
- package/dist/{table-Dg2D0v87.d.mts → table-D354-TpC.d.mts} +9 -33
- package/dist/tables-078i-X0d.cjs.map +1 -1
- package/dist/tables-BGzwkdFO.mjs.map +1 -1
- package/dist/{tabs-CJ6qZcFU.d.cts → tabs-DLEtBGOr.d.cts} +5 -18
- package/dist/{tabs-CJ6qZcFU.d.mts → tabs-DLEtBGOr.d.mts} +5 -18
- package/dist/{tanstack-form-Bae0TOEr.cjs → tanstack-form-BxqS40rB.cjs} +2 -2
- package/dist/{tanstack-form-Bae0TOEr.cjs.map → tanstack-form-BxqS40rB.cjs.map} +1 -1
- package/dist/{tanstack-form-AGwPfwiM.mjs → tanstack-form-q9hDCc0Y.mjs} +2 -2
- package/dist/{tanstack-form-AGwPfwiM.mjs.map → tanstack-form-q9hDCc0Y.mjs.map} +1 -1
- package/dist/text-editor-BtfyZSgR.cjs +2 -0
- package/dist/{text-editor-DJYQXXtP.cjs.map → text-editor-BtfyZSgR.cjs.map} +1 -1
- package/dist/text-editor-CtR27_PR.mjs +2 -0
- package/dist/{text-editor-BQtIXOpM.mjs.map → text-editor-CtR27_PR.mjs.map} +1 -1
- package/dist/{text-editor-field-C2KDtfZV.mjs → text-editor-field-CQ8tnZFw.mjs} +2 -2
- package/dist/{text-editor-field-C2KDtfZV.mjs.map → text-editor-field-CQ8tnZFw.mjs.map} +1 -1
- package/dist/{text-editor-field-DF8lkOc_.cjs → text-editor-field-CxU-KMMn.cjs} +2 -2
- package/dist/{text-editor-field-DF8lkOc_.cjs.map → text-editor-field-CxU-KMMn.cjs.map} +1 -1
- package/dist/{text-field-BJciq-S8.mjs → text-field-B3xlvEUN.mjs} +2 -2
- package/dist/{text-field-BJciq-S8.mjs.map → text-field-B3xlvEUN.mjs.map} +1 -1
- package/dist/{text-field-B1n5Xd-k.cjs → text-field-BQovKYN-.cjs} +2 -2
- package/dist/{text-field-B1n5Xd-k.cjs.map → text-field-BQovKYN-.cjs.map} +1 -1
- package/dist/{textarea-C8ZIZh-y.d.cts → textarea-D1diQohb.d.cts} +4 -8
- package/dist/{textarea-C8ZIZh-y.d.mts → textarea-D1diQohb.d.mts} +4 -8
- package/dist/{textarea-field-Bm7bsyjB.cjs → textarea-field-B38SnNv4.cjs} +2 -2
- package/dist/{textarea-field-Bm7bsyjB.cjs.map → textarea-field-B38SnNv4.cjs.map} +1 -1
- package/dist/{textarea-field-BjdX2Qjt.mjs → textarea-field-u2UUwtr_.mjs} +2 -2
- package/dist/{textarea-field-BjdX2Qjt.mjs.map → textarea-field-u2UUwtr_.mjs.map} +1 -1
- package/dist/{title-BT9guhSU.d.cts → title-D8BSkLsi.d.cts} +6 -9
- package/dist/{title-BT9guhSU.d.mts → title-D8BSkLsi.d.mts} +6 -9
- package/dist/title-field-B2hM3S_S.cjs.map +1 -1
- package/dist/title-field-oAqHRw59.mjs.map +1 -1
- package/dist/{toggle-Bh4EazxT.d.cts → toggle-CqTmiPDi.d.cts} +2 -8
- package/dist/{toggle-Bh4EazxT.d.mts → toggle-CqTmiPDi.d.mts} +2 -8
- package/dist/toggle-button-DNLtfjJC.mjs.map +1 -1
- package/dist/toggle-button-Dq78v8cH.cjs.map +1 -1
- package/dist/{toggle-group-BpqkL1ds.d.cts → toggle-group--bJylFDV.d.cts} +4 -17
- package/dist/{toggle-group-DzNE38v5.d.mts → toggle-group-l_Mi7NRg.d.mts} +4 -17
- package/dist/{tooltip-D4U-RhIu.d.cts → tooltip-BVYKhsC2.d.cts} +5 -18
- package/dist/{tooltip-D4U-RhIu.d.mts → tooltip-BVYKhsC2.d.mts} +5 -18
- package/dist/tooltip-BcfELg8e.cjs.map +1 -1
- package/dist/tooltip-TGmzPdoR.mjs.map +1 -1
- package/dist/top-products-bar-chart-5EJFSkeo.cjs.map +1 -1
- package/dist/top-products-bar-chart-CKYaOGWT.mjs.map +1 -1
- package/dist/{trash-BfWSqlL4.d.cts → trash-DBDuSVzW.d.cts} +3 -2
- package/dist/{trash-BfWSqlL4.d.mts → trash-DBDuSVzW.d.mts} +3 -2
- package/dist/typography/paragraph.d.cts +1 -1
- package/dist/typography/paragraph.d.mts +1 -1
- package/dist/typography/title.d.cts +1 -1
- package/dist/typography/title.d.mts +1 -1
- package/dist/ui/alert-dialog.d.cts +1 -1
- package/dist/ui/alert-dialog.d.mts +1 -1
- package/dist/ui/alert.d.cts +1 -1
- package/dist/ui/alert.d.mts +1 -1
- package/dist/ui/aspect-ratio.d.cts +1 -1
- package/dist/ui/aspect-ratio.d.mts +1 -1
- package/dist/ui/avatar.d.cts +1 -1
- package/dist/ui/avatar.d.mts +1 -1
- package/dist/ui/badge.cjs +1 -1
- package/dist/ui/badge.cjs.map +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/badge.mjs.map +1 -1
- package/dist/ui/breadcrumb.cjs.map +1 -1
- package/dist/ui/breadcrumb.d.cts +1 -1
- package/dist/ui/breadcrumb.d.mts +1 -1
- package/dist/ui/breadcrumb.mjs.map +1 -1
- package/dist/ui/button-group.d.cts +1 -1
- package/dist/ui/button-group.d.mts +1 -1
- package/dist/ui/button.cjs.map +1 -1
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/button.mjs.map +1 -1
- package/dist/ui/buttons/add-new.cjs.map +1 -1
- package/dist/ui/buttons/add-new.d.cts +1 -1
- package/dist/ui/buttons/add-new.d.mts +1 -1
- package/dist/ui/buttons/add-new.mjs.map +1 -1
- package/dist/ui/buttons/edit.cjs.map +1 -1
- package/dist/ui/buttons/edit.d.cts +1 -1
- package/dist/ui/buttons/edit.d.mts +1 -1
- package/dist/ui/buttons/edit.mjs.map +1 -1
- package/dist/ui/buttons/refresh.cjs.map +1 -1
- package/dist/ui/buttons/refresh.d.cts +1 -1
- package/dist/ui/buttons/refresh.d.mts +1 -1
- package/dist/ui/buttons/refresh.mjs.map +1 -1
- package/dist/ui/buttons/trash.cjs.map +1 -1
- package/dist/ui/buttons/trash.d.cts +1 -1
- package/dist/ui/buttons/trash.d.mts +1 -1
- package/dist/ui/buttons/trash.mjs.map +1 -1
- package/dist/ui/buttons/upload-image.cjs.map +1 -1
- package/dist/ui/buttons/upload-image.d.cts +1 -1
- package/dist/ui/buttons/upload-image.d.mts +1 -1
- package/dist/ui/buttons/upload-image.mjs.map +1 -1
- package/dist/ui/calendar.cjs.map +1 -1
- package/dist/ui/calendar.d.cts +1 -1
- package/dist/ui/calendar.d.mts +1 -1
- package/dist/ui/calendar.mjs.map +1 -1
- package/dist/ui/card.d.cts +1 -1
- package/dist/ui/card.d.mts +1 -1
- package/dist/ui/carousel.cjs.map +1 -1
- package/dist/ui/carousel.d.cts +1 -1
- package/dist/ui/carousel.d.mts +1 -1
- package/dist/ui/carousel.mjs.map +1 -1
- package/dist/ui/chart.cjs +1 -1
- package/dist/ui/chart.cjs.map +1 -1
- package/dist/ui/chart.d.cts +1 -1
- package/dist/ui/chart.d.mts +1 -1
- package/dist/ui/chart.mjs +1 -1
- package/dist/ui/chart.mjs.map +1 -1
- package/dist/ui/checkbox.cjs.map +1 -1
- package/dist/ui/checkbox.d.cts +1 -1
- package/dist/ui/checkbox.d.mts +1 -1
- package/dist/ui/checkbox.mjs.map +1 -1
- package/dist/ui/collapsible.d.cts +1 -1
- package/dist/ui/collapsible.d.mts +1 -1
- package/dist/ui/combobox.cjs +1 -0
- package/dist/ui/combobox.d.cts +2 -0
- package/dist/ui/combobox.d.mts +2 -0
- package/dist/ui/combobox.mjs +1 -0
- package/dist/ui/command.cjs +1 -1
- package/dist/ui/command.cjs.map +1 -1
- package/dist/ui/command.d.cts +1 -1
- package/dist/ui/command.d.mts +1 -1
- package/dist/ui/command.mjs +1 -1
- package/dist/ui/command.mjs.map +1 -1
- package/dist/ui/context-menu.cjs.map +1 -1
- package/dist/ui/context-menu.d.cts +1 -1
- package/dist/ui/context-menu.d.mts +1 -1
- package/dist/ui/context-menu.mjs.map +1 -1
- package/dist/ui/dialog.cjs.map +1 -1
- package/dist/ui/dialog.d.cts +1 -1
- package/dist/ui/dialog.d.mts +1 -1
- package/dist/ui/dialog.mjs.map +1 -1
- package/dist/ui/drawer.cjs.map +1 -1
- package/dist/ui/drawer.d.cts +1 -1
- package/dist/ui/drawer.d.mts +1 -1
- package/dist/ui/drawer.mjs.map +1 -1
- package/dist/ui/dropdown-menu.cjs.map +1 -1
- package/dist/ui/dropdown-menu.d.cts +1 -1
- package/dist/ui/dropdown-menu.d.mts +1 -1
- package/dist/ui/dropdown-menu.mjs.map +1 -1
- package/dist/ui/empty.d.cts +1 -1
- package/dist/ui/empty.d.mts +1 -1
- package/dist/ui/field.cjs.map +1 -1
- package/dist/ui/field.d.cts +11 -47
- package/dist/ui/field.d.mts +11 -47
- package/dist/ui/field.mjs.map +1 -1
- package/dist/ui/file-uploader.cjs.map +1 -1
- package/dist/ui/file-uploader.d.cts +1 -1
- package/dist/ui/file-uploader.d.mts +1 -1
- package/dist/ui/file-uploader.mjs.map +1 -1
- package/dist/ui/form.cjs.map +1 -1
- package/dist/ui/form.d.cts +1 -1
- package/dist/ui/form.d.mts +1 -1
- package/dist/ui/form.mjs.map +1 -1
- package/dist/ui/hover-card.cjs.map +1 -1
- package/dist/ui/hover-card.d.cts +1 -1
- package/dist/ui/hover-card.d.mts +1 -1
- package/dist/ui/hover-card.mjs.map +1 -1
- package/dist/ui/image.cjs +1 -1
- package/dist/ui/image.cjs.map +1 -1
- package/dist/ui/image.d.cts +1 -1
- package/dist/ui/image.d.mts +1 -1
- package/dist/ui/image.mjs +1 -1
- package/dist/ui/image.mjs.map +1 -1
- package/dist/ui/input-otp.cjs.map +1 -1
- package/dist/ui/input-otp.d.cts +1 -1
- package/dist/ui/input-otp.d.mts +1 -1
- package/dist/ui/input-otp.mjs.map +1 -1
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.cjs.map +1 -1
- package/dist/ui/inputs/search-input.d.cts +1 -1
- package/dist/ui/inputs/search-input.d.mts +1 -1
- package/dist/ui/inputs/search-input.mjs.map +1 -1
- package/dist/ui/item.d.cts +1 -1
- package/dist/ui/item.d.mts +1 -1
- package/dist/ui/label.d.cts +1 -1
- package/dist/ui/label.d.mts +1 -1
- package/dist/ui/menubar.cjs.map +1 -1
- package/dist/ui/menubar.d.cts +1 -1
- package/dist/ui/menubar.d.mts +1 -1
- package/dist/ui/menubar.mjs.map +1 -1
- package/dist/ui/multi-select.cjs +1 -1
- package/dist/ui/multi-select.cjs.map +1 -1
- package/dist/ui/multi-select.d.cts +1 -1
- package/dist/ui/multi-select.d.mts +1 -1
- package/dist/ui/multi-select.mjs +1 -1
- package/dist/ui/multi-select.mjs.map +1 -1
- package/dist/ui/navigation-menu.cjs.map +1 -1
- package/dist/ui/navigation-menu.d.cts +1 -1
- package/dist/ui/navigation-menu.d.mts +1 -1
- package/dist/ui/navigation-menu.mjs.map +1 -1
- package/dist/ui/pagination.cjs.map +1 -1
- package/dist/ui/pagination.d.cts +1 -1
- package/dist/ui/pagination.d.mts +1 -1
- package/dist/ui/pagination.mjs.map +1 -1
- package/dist/ui/popover.cjs.map +1 -1
- package/dist/ui/popover.d.cts +1 -1
- package/dist/ui/popover.d.mts +1 -1
- package/dist/ui/popover.mjs.map +1 -1
- package/dist/ui/progress.cjs.map +1 -1
- package/dist/ui/progress.d.cts +1 -1
- package/dist/ui/progress.d.mts +1 -1
- package/dist/ui/progress.mjs.map +1 -1
- package/dist/ui/radio-group.cjs.map +1 -1
- package/dist/ui/radio-group.d.cts +1 -1
- package/dist/ui/radio-group.d.mts +1 -1
- package/dist/ui/radio-group.mjs.map +1 -1
- package/dist/ui/resizable.cjs.map +1 -1
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/dist/ui/resizable.mjs.map +1 -1
- package/dist/ui/scroll-area.cjs.map +1 -1
- package/dist/ui/scroll-area.d.cts +1 -1
- package/dist/ui/scroll-area.d.mts +1 -1
- package/dist/ui/scroll-area.mjs.map +1 -1
- package/dist/ui/select.cjs.map +1 -1
- package/dist/ui/select.d.cts +1 -1
- package/dist/ui/select.d.mts +1 -1
- package/dist/ui/select.mjs.map +1 -1
- package/dist/ui/separator.d.cts +1 -1
- package/dist/ui/separator.d.mts +1 -1
- package/dist/ui/sheet.cjs.map +1 -1
- package/dist/ui/sheet.d.cts +1 -1
- package/dist/ui/sheet.d.mts +1 -1
- package/dist/ui/sheet.mjs.map +1 -1
- package/dist/ui/skeleton.d.cts +1 -1
- package/dist/ui/skeleton.d.mts +1 -1
- package/dist/ui/slider.cjs.map +1 -1
- package/dist/ui/slider.d.cts +1 -1
- package/dist/ui/slider.d.mts +1 -1
- package/dist/ui/slider.mjs.map +1 -1
- package/dist/ui/sonner.d.cts +1 -1
- package/dist/ui/sonner.d.mts +1 -1
- package/dist/ui/spinner.d.cts +1 -1
- package/dist/ui/spinner.d.mts +1 -1
- package/dist/ui/status.cjs.map +1 -1
- package/dist/ui/status.d.cts +1 -9
- package/dist/ui/status.d.mts +1 -9
- package/dist/ui/status.mjs.map +1 -1
- package/dist/ui/switch.cjs.map +1 -1
- package/dist/ui/switch.d.cts +1 -1
- package/dist/ui/switch.d.mts +1 -1
- package/dist/ui/switch.mjs.map +1 -1
- package/dist/ui/table.d.cts +1 -1
- package/dist/ui/table.d.mts +1 -1
- package/dist/ui/tabs.d.cts +1 -1
- package/dist/ui/tabs.d.mts +1 -1
- package/dist/ui/textarea.d.cts +1 -1
- package/dist/ui/textarea.d.mts +1 -1
- package/dist/ui/toggle-group.cjs.map +1 -1
- package/dist/ui/toggle-group.d.cts +1 -1
- package/dist/ui/toggle-group.d.mts +1 -1
- package/dist/ui/toggle-group.mjs.map +1 -1
- package/dist/ui/toggle.d.cts +1 -1
- package/dist/ui/toggle.d.mts +1 -1
- package/dist/ui/tooltip.cjs.map +1 -1
- package/dist/ui/tooltip.d.cts +1 -1
- package/dist/ui/tooltip.d.mts +1 -1
- package/dist/ui/tooltip.mjs.map +1 -1
- package/dist/{upload-image-D4VZU3IA.d.cts → upload-image-DM-tkZuR.d.cts} +3 -3
- package/dist/{upload-image-D4VZU3IA.d.mts → upload-image-DM-tkZuR.d.mts} +3 -3
- package/dist/user-BymzvsYp.mjs.map +1 -1
- package/dist/{user-CvesQf42.d.cts → user-D46H2MOh.d.cts} +6 -3
- package/dist/{user-CvesQf42.d.mts → user-D46H2MOh.d.mts} +6 -3
- package/dist/user-Dn53Fu5q.cjs.map +1 -1
- package/dist/volume-bar-chart-BRpC_8-X.mjs.map +1 -1
- package/dist/volume-bar-chart-CRxZPZIn.cjs.map +1 -1
- package/dist/waterfall-chart-CTB2f5eh.cjs.map +1 -1
- package/dist/waterfall-chart-DwetaJFJ.mjs.map +1 -1
- package/package.json +5 -1
- package/dist/cms-layout-CGGJqbr0.cjs +0 -2
- package/dist/cms-layout-CGGJqbr0.cjs.map +0 -1
- package/dist/cms-layout-ePySxIQN.mjs +0 -2
- package/dist/cms-layout-ePySxIQN.mjs.map +0 -1
- package/dist/dialogs/detail-dialog/index.cjs.map +0 -1
- package/dist/dialogs/detail-dialog/index.mjs.map +0 -1
- package/dist/image-Cln0r7Eb.d.cts +0 -27
- package/dist/image-Cln0r7Eb.d.mts +0 -27
- package/dist/index-C9eXmnvk.d.cts +0 -36
- package/dist/index-C9eXmnvk.d.mts +0 -36
- package/dist/number-input-CqkegUWs.mjs +0 -2
- package/dist/number-input-kTh9zzr7.cjs +0 -2
- package/dist/payment-layout-Cb-Q8KD2.cjs +0 -2
- package/dist/sidebar-core-Bh0dZXsm.mjs +0 -2
- package/dist/sidebar-core-Bh0dZXsm.mjs.map +0 -1
- package/dist/sidebar-core-DQE6ymo4.cjs +0 -2
- package/dist/sidebar-core-DQE6ymo4.cjs.map +0 -1
- package/dist/simple-card-6P377r4A.d.cts +0 -29
- package/dist/simple-card-6P377r4A.d.mts +0 -29
- package/dist/statistic-8zBJMdRa.d.cts +0 -45
- package/dist/statistic-8zBJMdRa.d.mts +0 -45
- package/dist/text-editor-BQtIXOpM.mjs +0 -2
- package/dist/text-editor-DJYQXXtP.cjs +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-DJYQXXtP.cjs","names":["Popover","PopoverTrigger","Link2","PopoverContent","Link2Off","Undo","Redo","DropdownMenu","DropdownMenuTrigger","ChevronDown","DropdownMenuContent","DropdownMenuItem","Bold","Italic","Underline","Strikethrough","Code","List","ListOrdered","ListChecks","Quote","Code2","Minus","AlignLeft","AlignCenter","AlignRight","AlignJustify","Popover","PopoverTrigger","Palette","PopoverContent","Highlighter","StarterKit","Underline","Placeholder","TextAlign","ListKeymap","TextStyle","Link","TaskList","TaskItem","Highlight","Color","CharacterCount","BubbleMenu","Bold","Italic","UnderlineIcon","Strikethrough","EditorContent"],"sources":["../packages/components/features/text-editor/toolbar-primitives.tsx","../packages/components/features/text-editor/link-dialog.tsx","../packages/components/features/text-editor/text-editor.variants.ts","../packages/components/features/text-editor/toolbar.tsx","../packages/components/features/text-editor/text-editor.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ninterface ToolbarButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isActive?: boolean;\n}\n\nfunction ToolbarButton({ isActive, className, children, ...props }: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n data-slot=\"toolbar-button\"\n data-active={isActive || undefined}\n className={cn(\n 'inline-flex h-7 w-7 items-center justify-center rounded text-sm transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n isActive && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary',\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nfunction ToolbarDivider() {\n return <div data-slot=\"toolbar-divider\" className=\"mx-0.5 h-5 w-px shrink-0 bg-border\" />;\n}\n\nexport { ToolbarButton, ToolbarDivider };\n// biome-ignore lint/style/useComponentExportOnlyModules: type export needed by sibling feature files\nexport type { ToolbarButtonProps };\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport { Link2, Link2Off } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { ToolbarButton } from './toolbar-primitives';\n\nexport interface LinkDialogProps {\n editor: Editor;\n}\n\nfunction LinkDialog({ editor }: LinkDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [url, setUrl] = useState('');\n\n const isLinkActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('link'),\n });\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n const existingHref = editor.getAttributes('link').href ?? '';\n setUrl(existingHref);\n }\n setIsOpen(open);\n },\n [editor]\n );\n\n const handleApply = useCallback(() => {\n const trimmed = url.trim();\n if (!trimmed) return;\n editor.chain().focus().setLink({ href: trimmed, target: '_blank' }).run();\n setIsOpen(false);\n }, [editor, url]);\n\n const handleRemove = useCallback(() => {\n editor.chain().focus().unsetLink().run();\n setIsOpen(false);\n }, [editor]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleApply();\n }\n if (e.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n return (\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <ToolbarButton isActive={isLinkActive} title=\"Link (Ctrl+K)\" data-slot=\"toolbar-link-button\">\n <Link2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent data-slot=\"link-dialog\" sideOffset={6} align=\"start\" className=\"w-72 p-3\">\n <p className=\"mb-2 font-medium text-text-positive-strong text-xs\">{isLinkActive ? 'Edit Link' : 'Insert Link'}</p>\n <div className=\"flex gap-1.5\">\n <input\n type=\"url\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={e => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n className={cn(\n 'flex-1 rounded border border-border bg-transparent px-2.5 py-1.5 text-sm text-text-positive',\n 'outline-none placeholder:text-text-positive-muted',\n 'focus:border-primary focus:ring-1 focus:ring-primary/30'\n )}\n />\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!url.trim()}\n className={cn(\n 'rounded bg-primary px-2.5 py-1.5 font-medium text-text-negative text-xs',\n 'transition-colors hover:bg-primary-strong',\n 'disabled:pointer-events-none disabled:opacity-50'\n )}\n >\n Apply\n </button>\n </div>\n {isLinkActive && (\n <button type=\"button\" onClick={handleRemove} className=\"mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline\">\n <Link2Off className=\"h-3 w-3\" />\n Remove link\n </button>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { LinkDialog };\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const textEditorVariants = cva(['flex flex-col overflow-hidden rounded-md'], {\n variants: {\n variant: {\n outline: 'border border-border bg-background shadow-xs',\n ghost: 'border-0',\n },\n size: {\n sm: 'text-xs [&_.ProseMirror]:min-h-24 [&_.ProseMirror]:px-2.5 [&_.ProseMirror]:py-1.5',\n md: '',\n lg: 'text-base [&_.ProseMirror]:min-h-56 [&_.ProseMirror]:px-4 [&_.ProseMirror]:py-3',\n },\n },\n defaultVariants: {\n variant: 'outline',\n size: 'md',\n },\n});\n\nexport type TextEditorVariantProps = VariantProps<typeof textEditorVariants>;\n","'use client';\n\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n ChevronDown,\n Code,\n Code2,\n Highlighter,\n Italic,\n List,\n ListChecks,\n ListOrdered,\n Minus,\n Palette,\n Quote,\n Redo,\n Strikethrough,\n Underline,\n Undo,\n} from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { LinkDialog } from './link-dialog';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nconst HIGHLIGHT_COLORS = [\n { label: 'Yellow', value: '#fde047' },\n { label: 'Green', value: '#86efac' },\n { label: 'Blue', value: '#93c5fd' },\n { label: 'Pink', value: '#f9a8d4' },\n { label: 'Orange', value: '#fdba74' },\n { label: 'Purple', value: '#c4b5fd' },\n { label: 'Red', value: '#fca5a5' },\n { label: 'Cyan', value: '#67e8f9' },\n { label: 'Lime', value: '#bef264' },\n { label: 'Gray', value: '#d1d5db' },\n];\n\nconst TEXT_COLORS = [\n { label: 'Default', value: '' },\n { label: 'Red', value: '#ef4444' },\n { label: 'Orange', value: '#f97316' },\n { label: 'Yellow', value: '#eab308' },\n { label: 'Green', value: '#22c55e' },\n { label: 'Blue', value: '#3b82f6' },\n { label: 'Purple', value: '#a855f7' },\n { label: 'Pink', value: '#ec4899' },\n { label: 'Gray', value: '#6b7280' },\n { label: 'Black', value: '#000000' },\n];\n\nexport interface TextEditorToolbarProps {\n editor: Editor;\n className?: string;\n enableLink?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditorToolbar({ editor, className, enableLink, enableTaskList, enableHighlight, enableColor }: TextEditorToolbarProps) {\n const isHeading1Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 1 }),\n });\n const isHeading2Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 2 }),\n });\n const isHeading3Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 3 }),\n });\n const isBoldActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bold'),\n });\n const isItalicActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('italic'),\n });\n const isUnderlineActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('underline'),\n });\n const isStrikeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('strike'),\n });\n const isCodeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('code'),\n });\n const isBulletListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bulletList'),\n });\n const isOrderedListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('orderedList'),\n });\n const isTaskListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('taskList'),\n });\n const isBlockquoteActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('blockquote'),\n });\n const isCodeBlockActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('codeBlock'),\n });\n const isAlignLeftActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'left' }),\n });\n const isAlignCenterActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'center' }),\n });\n const isAlignRightActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'right' }),\n });\n const isAlignJustifyActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'justify' }),\n });\n\n const headingLabel = isHeading1Active ? 'H1' : isHeading2Active ? 'H2' : isHeading3Active ? 'H3' : 'P';\n\n return (\n <div data-slot=\"text-editor-toolbar\" className={cn('flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5', className)}>\n {/* History */}\n <ToolbarButton onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo (Ctrl+Z)\">\n <Undo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo (Ctrl+Y)\">\n <Redo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Heading dropdown */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"toolbar-heading-trigger\"\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded px-1.5 font-medium text-xs transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n (isHeading1Active || isHeading2Active || isHeading3Active) && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary'\n )}\n >\n <span className=\"w-5 text-center\">{headingLabel}</span>\n <ChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-32\">\n <DropdownMenuItem onClick={() => editor.chain().focus().setParagraph().run()}>\n <span className=\"text-sm\">Paragraph</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}>\n <span className=\"font-bold text-lg\">Heading 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}>\n <span className=\"font-semibold text-base\">Heading 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}>\n <span className=\"font-semibold text-sm\">Heading 3</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <ToolbarDivider />\n\n {/* Text formatting */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={isBoldActive} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={isItalicActive} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={isUnderlineActive} title=\"Underline (Ctrl+U)\">\n <Underline className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={isStrikeActive} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCode().run()} isActive={isCodeActive} title=\"Inline Code\">\n <Code className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Lists */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBulletList().run()} isActive={isBulletListActive} title=\"Bullet List\">\n <List className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleOrderedList().run()} isActive={isOrderedListActive} title=\"Ordered List\">\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableTaskList && (\n <ToolbarButton onClick={() => editor.chain().focus().toggleTaskList().run()} isActive={isTaskListActive} title=\"Task List\">\n <ListChecks className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n )}\n\n <ToolbarDivider />\n\n {/* Blocks */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBlockquote().run()} isActive={isBlockquoteActive} title=\"Blockquote\">\n <Quote className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCodeBlock().run()} isActive={isCodeBlockActive} title=\"Code Block\">\n <Code2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setHorizontalRule().run()} title=\"Horizontal Rule\">\n <Minus className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Text alignment */}\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('left').run()} isActive={isAlignLeftActive} title=\"Align Left\">\n <AlignLeft className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('center').run()} isActive={isAlignCenterActive} title=\"Align Center\">\n <AlignCenter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('right').run()} isActive={isAlignRightActive} title=\"Align Right\">\n <AlignRight className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('justify').run()} isActive={isAlignJustifyActive} title=\"Align Justify\">\n <AlignJustify className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n {/* Link */}\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n\n {/* Color & Highlight */}\n {(enableColor || enableHighlight) && (\n <>\n <ToolbarDivider />\n {enableColor && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Text Color\">\n <Palette className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Text Color</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {TEXT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => {\n if (!color.value) {\n editor.chain().focus().unsetColor().run();\n } else {\n editor.chain().focus().setColor(color.value).run();\n }\n }}\n className={cn(\n 'h-6 w-6 rounded border border-border transition-transform hover:scale-110',\n !color.value && 'bg-background text-[10px] text-text-positive leading-none'\n )}\n style={color.value ? { backgroundColor: color.value } : undefined}\n >\n {!color.value && '∅'}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )}\n {enableHighlight && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Highlight\">\n <Highlighter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Highlight</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {HIGHLIGHT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => editor.chain().focus().toggleHighlight({ color: color.value }).run()}\n className=\"h-6 w-6 rounded border border-border transition-transform hover:scale-110\"\n style={{ backgroundColor: color.value }}\n />\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().unsetHighlight().run()}\n className=\"mt-1.5 w-full rounded border border-border py-0.5 text-center text-text-positive-weak text-xs hover:bg-muted-muted\"\n >\n Clear highlight\n </button>\n </PopoverContent>\n </Popover>\n )}\n </>\n )}\n </div>\n );\n}\n\nexport { TextEditorToolbar };\n","'use client';\n\nimport { useEffect, useMemo } from 'react';\n\nimport { Bold, Italic, Strikethrough, Underline as UnderlineIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { CharacterCount } from '@tiptap/extension-character-count';\nimport { Highlight } from '@tiptap/extension-highlight';\nimport { Link } from '@tiptap/extension-link';\nimport { ListKeymap } from '@tiptap/extension-list-keymap';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { TaskItem } from '@tiptap/extension-task-item';\nimport { TaskList } from '@tiptap/extension-task-list';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { Color, TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport { type AnyExtension, EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport StarterKit from '@tiptap/starter-kit';\nimport { LinkDialog } from './link-dialog';\nimport { type TextEditorVariantProps, textEditorVariants } from './text-editor.variants';\nimport { TextEditorToolbar } from './toolbar';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nexport interface TextEditorProps extends TextEditorVariantProps {\n value?: string;\n defaultValue?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n readOnly?: boolean;\n showToolbar?: boolean;\n className?: string;\n toolbarClassName?: string;\n editorClassName?: string;\n // Character count\n maxLength?: number;\n showCharacterCount?: boolean;\n onCharacterCount?: (stats: { characters: number; words: number }) => void;\n // Feature flags\n enableLink?: boolean;\n enableBubbleMenu?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditor({\n value,\n defaultValue,\n onChange,\n placeholder = 'Start writing...',\n readOnly = false,\n showToolbar = true,\n variant,\n size,\n className,\n toolbarClassName,\n editorClassName,\n maxLength,\n showCharacterCount,\n onCharacterCount,\n enableLink,\n enableBubbleMenu,\n enableTaskList,\n enableHighlight,\n enableColor,\n}: TextEditorProps) {\n const needsCharCount = maxLength !== undefined || showCharacterCount || onCharacterCount !== undefined;\n const needsTextStyle = enableColor || enableHighlight;\n\n const extensions = useMemo(() => {\n const base: AnyExtension[] = [\n StarterKit,\n Underline,\n Placeholder.configure({ placeholder }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n ListKeymap,\n ];\n\n if (needsTextStyle) base.push(TextStyle);\n if (enableLink) {\n base.push(Link.configure({ openOnClick: false, linkOnPaste: true, defaultProtocol: 'https' }));\n }\n if (enableTaskList) {\n base.push(TaskList, TaskItem.configure({ nested: true }));\n }\n if (enableHighlight) {\n base.push(Highlight.configure({ multicolor: true }));\n }\n if (enableColor) {\n base.push(Color);\n }\n if (needsCharCount) {\n base.push(CharacterCount.configure({ limit: maxLength }));\n }\n\n return base;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needsCharCount, placeholder, maxLength, enableHighlight, needsTextStyle, enableTaskList, enableLink, enableColor]);\n\n const editor = useEditor({\n extensions,\n content: value ?? defaultValue,\n editable: !readOnly,\n onUpdate: ({ editor: e }) => {\n onChange?.(e.getHTML());\n if (onCharacterCount) {\n const storage = e.storage.characterCount;\n onCharacterCount({ characters: storage.characters(), words: storage.words() });\n }\n },\n });\n\n useEffect(() => {\n if (!editor || value === undefined) return;\n if (editor.getHTML() === value) return;\n editor.commands.setContent(value);\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n const charCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.characters() as number) : 0;\n },\n });\n\n const wordCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.words() as number) : 0;\n },\n });\n\n const showCharCount = showCharacterCount || maxLength !== undefined;\n const isNearLimit = maxLength !== undefined && charCount > maxLength * 0.9;\n\n return (\n <div data-slot=\"text-editor\" className={cn('lunas-text-editor', textEditorVariants({ variant, size }), className)}>\n {showToolbar && !readOnly && editor && (\n <TextEditorToolbar\n editor={editor}\n className={toolbarClassName}\n enableLink={enableLink}\n enableTaskList={enableTaskList}\n enableHighlight={enableHighlight}\n enableColor={enableColor}\n />\n )}\n\n {enableBubbleMenu && !readOnly && editor && (\n <BubbleMenu\n editor={editor}\n options={{ placement: 'top' }}\n className={cn('flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown')}\n >\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={editor.isActive('bold')} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={editor.isActive('italic')} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={editor.isActive('underline')} title=\"Underline (Ctrl+U)\">\n <UnderlineIcon className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={editor.isActive('strike')} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n </BubbleMenu>\n )}\n\n <EditorContent editor={editor} data-slot=\"text-editor-content\" className={cn('flex-1 bg-white text-sm text-text-positive', editorClassName)} />\n\n {showCharCount && needsCharCount && (\n <div\n data-slot=\"text-editor-footer\"\n className=\"flex items-center justify-between border-border border-t bg-muted-muted/30 px-3 py-1 text-text-positive-weak text-xs\"\n >\n <span>{wordCount} words</span>\n <span data-warning={isNearLimit || undefined} className=\"data-warning:text-warning-strong\">\n {charCount}\n {maxLength ? ` / ${maxLength}` : ''} characters\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport { TextEditor };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"text-editor-BtfyZSgR.cjs","names":["Popover","PopoverTrigger","Link2","PopoverContent","Link2Off","Undo","Redo","DropdownMenu","DropdownMenuTrigger","ChevronDown","DropdownMenuContent","DropdownMenuItem","Bold","Italic","Underline","Strikethrough","Code","List","ListOrdered","ListChecks","Quote","Code2","Minus","AlignLeft","AlignCenter","AlignRight","AlignJustify","Popover","PopoverTrigger","Palette","PopoverContent","Highlighter","StarterKit","Underline","Placeholder","TextAlign","ListKeymap","TextStyle","Link","TaskList","TaskItem","Highlight","Color","CharacterCount","BubbleMenu","Bold","Italic","UnderlineIcon","Strikethrough","EditorContent"],"sources":["../packages/components/features/text-editor/toolbar-primitives.tsx","../packages/components/features/text-editor/link-dialog.tsx","../packages/components/features/text-editor/text-editor.variants.ts","../packages/components/features/text-editor/toolbar.tsx","../packages/components/features/text-editor/text-editor.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ninterface ToolbarButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isActive?: boolean;\n}\n\nfunction ToolbarButton({ isActive, className, children, ...props }: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n data-slot=\"toolbar-button\"\n data-active={isActive || undefined}\n className={cn(\n 'inline-flex h-7 w-7 items-center justify-center rounded text-sm transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n isActive && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary',\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nfunction ToolbarDivider() {\n return <div data-slot=\"toolbar-divider\" className=\"mx-0.5 h-5 w-px shrink-0 bg-border\" />;\n}\n\nexport { ToolbarButton, ToolbarDivider };\n// biome-ignore lint/style/useComponentExportOnlyModules: type export needed by sibling feature files\nexport type { ToolbarButtonProps };\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport { Link2, Link2Off } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { ToolbarButton } from './toolbar-primitives';\n\nexport interface LinkDialogProps {\n editor: Editor;\n}\n\nfunction LinkDialog({ editor }: LinkDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [url, setUrl] = useState('');\n\n const isLinkActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('link'),\n });\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n const existingHref = editor.getAttributes('link').href ?? '';\n setUrl(existingHref);\n }\n setIsOpen(open);\n },\n [editor]\n );\n\n const handleApply = useCallback(() => {\n const trimmed = url.trim();\n if (!trimmed) return;\n editor.chain().focus().setLink({ href: trimmed, target: '_blank' }).run();\n setIsOpen(false);\n }, [editor, url]);\n\n const handleRemove = useCallback(() => {\n editor.chain().focus().unsetLink().run();\n setIsOpen(false);\n }, [editor]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleApply();\n }\n if (e.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n return (\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <ToolbarButton isActive={isLinkActive} title=\"Link (Ctrl+K)\" data-slot=\"toolbar-link-button\">\n <Link2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent data-slot=\"link-dialog\" sideOffset={6} align=\"start\" className=\"w-72 p-3\">\n <p className=\"mb-2 font-medium text-text-positive-strong text-xs\">{isLinkActive ? 'Edit Link' : 'Insert Link'}</p>\n <div className=\"flex gap-1.5\">\n <input\n type=\"url\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={e => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n className={cn(\n 'flex-1 rounded border border-border bg-transparent px-2.5 py-1.5 text-sm text-text-positive',\n 'outline-none placeholder:text-text-positive-muted',\n 'focus:border-primary focus:ring-1 focus:ring-primary/30'\n )}\n />\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!url.trim()}\n className={cn(\n 'rounded bg-primary px-2.5 py-1.5 font-medium text-text-negative text-xs',\n 'transition-colors hover:bg-primary-strong',\n 'disabled:pointer-events-none disabled:opacity-50'\n )}\n >\n Apply\n </button>\n </div>\n {isLinkActive && (\n <button type=\"button\" onClick={handleRemove} className=\"mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline\">\n <Link2Off className=\"h-3 w-3\" />\n Remove link\n </button>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { LinkDialog };\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const textEditorVariants = cva(['flex flex-col overflow-hidden rounded-md'], {\n variants: {\n variant: {\n outline: 'border border-border bg-background shadow-xs',\n ghost: 'border-0',\n },\n size: {\n sm: 'text-xs [&_.ProseMirror]:min-h-24 [&_.ProseMirror]:px-2.5 [&_.ProseMirror]:py-1.5',\n md: '',\n lg: 'text-base [&_.ProseMirror]:min-h-56 [&_.ProseMirror]:px-4 [&_.ProseMirror]:py-3',\n },\n },\n defaultVariants: {\n variant: 'outline',\n size: 'md',\n },\n});\n\nexport type TextEditorVariantProps = VariantProps<typeof textEditorVariants>;\n","'use client';\n\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n ChevronDown,\n Code,\n Code2,\n Highlighter,\n Italic,\n List,\n ListChecks,\n ListOrdered,\n Minus,\n Palette,\n Quote,\n Redo,\n Strikethrough,\n Underline,\n Undo,\n} from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { LinkDialog } from './link-dialog';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nconst HIGHLIGHT_COLORS = [\n { label: 'Yellow', value: '#fde047' },\n { label: 'Green', value: '#86efac' },\n { label: 'Blue', value: '#93c5fd' },\n { label: 'Pink', value: '#f9a8d4' },\n { label: 'Orange', value: '#fdba74' },\n { label: 'Purple', value: '#c4b5fd' },\n { label: 'Red', value: '#fca5a5' },\n { label: 'Cyan', value: '#67e8f9' },\n { label: 'Lime', value: '#bef264' },\n { label: 'Gray', value: '#d1d5db' },\n];\n\nconst TEXT_COLORS = [\n { label: 'Default', value: '' },\n { label: 'Red', value: '#ef4444' },\n { label: 'Orange', value: '#f97316' },\n { label: 'Yellow', value: '#eab308' },\n { label: 'Green', value: '#22c55e' },\n { label: 'Blue', value: '#3b82f6' },\n { label: 'Purple', value: '#a855f7' },\n { label: 'Pink', value: '#ec4899' },\n { label: 'Gray', value: '#6b7280' },\n { label: 'Black', value: '#000000' },\n];\n\nexport interface TextEditorToolbarProps {\n editor: Editor;\n className?: string;\n enableLink?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditorToolbar({ editor, className, enableLink, enableTaskList, enableHighlight, enableColor }: TextEditorToolbarProps) {\n const isHeading1Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 1 }),\n });\n const isHeading2Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 2 }),\n });\n const isHeading3Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 3 }),\n });\n const isBoldActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bold'),\n });\n const isItalicActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('italic'),\n });\n const isUnderlineActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('underline'),\n });\n const isStrikeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('strike'),\n });\n const isCodeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('code'),\n });\n const isBulletListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bulletList'),\n });\n const isOrderedListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('orderedList'),\n });\n const isTaskListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('taskList'),\n });\n const isBlockquoteActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('blockquote'),\n });\n const isCodeBlockActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('codeBlock'),\n });\n const isAlignLeftActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'left' }),\n });\n const isAlignCenterActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'center' }),\n });\n const isAlignRightActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'right' }),\n });\n const isAlignJustifyActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'justify' }),\n });\n\n const headingLabel = isHeading1Active ? 'H1' : isHeading2Active ? 'H2' : isHeading3Active ? 'H3' : 'P';\n\n return (\n <div data-slot=\"text-editor-toolbar\" className={cn('flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5', className)}>\n {/* History */}\n <ToolbarButton onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo (Ctrl+Z)\">\n <Undo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo (Ctrl+Y)\">\n <Redo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Heading dropdown */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"toolbar-heading-trigger\"\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded px-1.5 font-medium text-xs transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n (isHeading1Active || isHeading2Active || isHeading3Active) && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary'\n )}\n >\n <span className=\"w-5 text-center\">{headingLabel}</span>\n <ChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-32\">\n <DropdownMenuItem onClick={() => editor.chain().focus().setParagraph().run()}>\n <span className=\"text-sm\">Paragraph</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}>\n <span className=\"font-bold text-lg\">Heading 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}>\n <span className=\"font-semibold text-base\">Heading 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}>\n <span className=\"font-semibold text-sm\">Heading 3</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <ToolbarDivider />\n\n {/* Text formatting */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={isBoldActive} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={isItalicActive} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={isUnderlineActive} title=\"Underline (Ctrl+U)\">\n <Underline className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={isStrikeActive} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCode().run()} isActive={isCodeActive} title=\"Inline Code\">\n <Code className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Lists */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBulletList().run()} isActive={isBulletListActive} title=\"Bullet List\">\n <List className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleOrderedList().run()} isActive={isOrderedListActive} title=\"Ordered List\">\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableTaskList && (\n <ToolbarButton onClick={() => editor.chain().focus().toggleTaskList().run()} isActive={isTaskListActive} title=\"Task List\">\n <ListChecks className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n )}\n\n <ToolbarDivider />\n\n {/* Blocks */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBlockquote().run()} isActive={isBlockquoteActive} title=\"Blockquote\">\n <Quote className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCodeBlock().run()} isActive={isCodeBlockActive} title=\"Code Block\">\n <Code2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setHorizontalRule().run()} title=\"Horizontal Rule\">\n <Minus className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Text alignment */}\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('left').run()} isActive={isAlignLeftActive} title=\"Align Left\">\n <AlignLeft className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('center').run()} isActive={isAlignCenterActive} title=\"Align Center\">\n <AlignCenter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('right').run()} isActive={isAlignRightActive} title=\"Align Right\">\n <AlignRight className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('justify').run()} isActive={isAlignJustifyActive} title=\"Align Justify\">\n <AlignJustify className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n {/* Link */}\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n\n {/* Color & Highlight */}\n {(enableColor || enableHighlight) && (\n <>\n <ToolbarDivider />\n {enableColor && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Text Color\">\n <Palette className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Text Color</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {TEXT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => {\n if (!color.value) {\n editor.chain().focus().unsetColor().run();\n } else {\n editor.chain().focus().setColor(color.value).run();\n }\n }}\n className={cn(\n 'h-6 w-6 rounded border border-border transition-transform hover:scale-110',\n !color.value && 'bg-background text-[10px] text-text-positive leading-none'\n )}\n style={color.value ? { backgroundColor: color.value } : undefined}\n >\n {!color.value && '∅'}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )}\n {enableHighlight && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Highlight\">\n <Highlighter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Highlight</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {HIGHLIGHT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => editor.chain().focus().toggleHighlight({ color: color.value }).run()}\n className=\"h-6 w-6 rounded border border-border transition-transform hover:scale-110\"\n style={{ backgroundColor: color.value }}\n />\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().unsetHighlight().run()}\n className=\"mt-1.5 w-full rounded border border-border py-0.5 text-center text-text-positive-weak text-xs hover:bg-muted-muted\"\n >\n Clear highlight\n </button>\n </PopoverContent>\n </Popover>\n )}\n </>\n )}\n </div>\n );\n}\n\nexport { TextEditorToolbar };\n","'use client';\n\nimport { useEffect, useMemo } from 'react';\n\nimport { Bold, Italic, Strikethrough, Underline as UnderlineIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { CharacterCount } from '@tiptap/extension-character-count';\nimport { Highlight } from '@tiptap/extension-highlight';\nimport { Link } from '@tiptap/extension-link';\nimport { ListKeymap } from '@tiptap/extension-list-keymap';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { TaskItem } from '@tiptap/extension-task-item';\nimport { TaskList } from '@tiptap/extension-task-list';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { Color, TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport { type AnyExtension, EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport StarterKit from '@tiptap/starter-kit';\nimport { LinkDialog } from './link-dialog';\nimport { type TextEditorVariantProps, textEditorVariants } from './text-editor.variants';\nimport { TextEditorToolbar } from './toolbar';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nexport interface TextEditorProps extends TextEditorVariantProps {\n value?: string;\n defaultValue?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n readOnly?: boolean;\n showToolbar?: boolean;\n className?: string;\n toolbarClassName?: string;\n editorClassName?: string;\n // Character count\n maxLength?: number;\n showCharacterCount?: boolean;\n onCharacterCount?: (stats: { characters: number; words: number }) => void;\n // Feature flags\n enableLink?: boolean;\n enableBubbleMenu?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditor({\n value,\n defaultValue,\n onChange,\n placeholder = 'Start writing...',\n readOnly = false,\n showToolbar = true,\n variant,\n size,\n className,\n toolbarClassName,\n editorClassName,\n maxLength,\n showCharacterCount,\n onCharacterCount,\n enableLink,\n enableBubbleMenu,\n enableTaskList,\n enableHighlight,\n enableColor,\n}: TextEditorProps) {\n const needsCharCount = maxLength !== undefined || showCharacterCount || onCharacterCount !== undefined;\n const needsTextStyle = enableColor || enableHighlight;\n\n const extensions = useMemo(() => {\n const base: AnyExtension[] = [\n StarterKit,\n Underline,\n Placeholder.configure({ placeholder }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n ListKeymap,\n ];\n\n if (needsTextStyle) base.push(TextStyle);\n if (enableLink) {\n base.push(Link.configure({ openOnClick: false, linkOnPaste: true, defaultProtocol: 'https' }));\n }\n if (enableTaskList) {\n base.push(TaskList, TaskItem.configure({ nested: true }));\n }\n if (enableHighlight) {\n base.push(Highlight.configure({ multicolor: true }));\n }\n if (enableColor) {\n base.push(Color);\n }\n if (needsCharCount) {\n base.push(CharacterCount.configure({ limit: maxLength }));\n }\n\n return base;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needsCharCount, placeholder, maxLength, enableHighlight, needsTextStyle, enableTaskList, enableLink, enableColor]);\n\n const editor = useEditor({\n extensions,\n content: value ?? defaultValue,\n editable: !readOnly,\n onUpdate: ({ editor: e }) => {\n onChange?.(e.getHTML());\n if (onCharacterCount) {\n const storage = e.storage.characterCount;\n onCharacterCount({ characters: storage.characters(), words: storage.words() });\n }\n },\n });\n\n useEffect(() => {\n if (!editor || value === undefined) return;\n if (editor.getHTML() === value) return;\n editor.commands.setContent(value);\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n const charCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.characters() as number) : 0;\n },\n });\n\n const wordCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.words() as number) : 0;\n },\n });\n\n const showCharCount = showCharacterCount || maxLength !== undefined;\n const isNearLimit = maxLength !== undefined && charCount > maxLength * 0.9;\n\n return (\n <div data-slot=\"text-editor\" className={cn('lunas-text-editor', textEditorVariants({ variant, size }), className)}>\n {showToolbar && !readOnly && editor && (\n <TextEditorToolbar\n editor={editor}\n className={toolbarClassName}\n enableLink={enableLink}\n enableTaskList={enableTaskList}\n enableHighlight={enableHighlight}\n enableColor={enableColor}\n />\n )}\n\n {enableBubbleMenu && !readOnly && editor && (\n <BubbleMenu\n editor={editor}\n options={{ placement: 'top' }}\n className={cn('flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown')}\n >\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={editor.isActive('bold')} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={editor.isActive('italic')} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={editor.isActive('underline')} title=\"Underline (Ctrl+U)\">\n <UnderlineIcon className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={editor.isActive('strike')} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n </BubbleMenu>\n )}\n\n <EditorContent editor={editor} data-slot=\"text-editor-content\" className={cn('flex-1 bg-white text-sm text-text-positive', editorClassName)} />\n\n {showCharCount && needsCharCount && (\n <div\n data-slot=\"text-editor-footer\"\n className=\"flex items-center justify-between border-border border-t bg-muted-muted/30 px-3 py-1 text-text-positive-weak text-xs\"\n >\n <span>{wordCount} words</span>\n <span data-warning={isNearLimit || undefined} className=\"data-warning:text-warning-strong\">\n {charCount}\n {maxLength ? ` / ${maxLength}` : ''} characters\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport { TextEditor };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{DropdownMenu as e,DropdownMenuContent as t,DropdownMenuItem as n,DropdownMenuTrigger as r}from"./ui/dropdown-menu.mjs";import{Popover as i,PopoverContent as a,PopoverTrigger as o}from"./ui/popover.mjs";import{AlignCenter as s,AlignJustify as c,AlignLeft as l,AlignRight as u,Bold as d,ChevronDown as f,Code as p,Code2 as m,Highlighter as h,Italic as ee,Link2 as g,Link2Off as _,List as v,ListChecks as y,ListOrdered as b,Minus as x,Palette as S,Quote as C,Redo as te,Strikethrough as w,Underline as ne,Undo as re}from"lucide-react";import{useCallback as T,useEffect as E,useMemo as D,useState as O}from"react";import{cn as k}from"@customafk/react-toolkit/utils";import{cva as A}from"class-variance-authority";import{Fragment as j,jsx as M,jsxs as N}from"react/jsx-runtime";import{EditorContent as P,useEditor as F,useEditorState as I}from"@tiptap/react";import{CharacterCount as L}from"@tiptap/extension-character-count";import{Highlight as R}from"@tiptap/extension-highlight";import{Link as z}from"@tiptap/extension-link";import{ListKeymap as B}from"@tiptap/extension-list-keymap";import V from"@tiptap/extension-placeholder";import{TaskItem as H}from"@tiptap/extension-task-item";import{TaskList as U}from"@tiptap/extension-task-list";import W from"@tiptap/extension-text-align";import{Color as G,TextStyle as K}from"@tiptap/extension-text-style";import q from"@tiptap/extension-underline";import{BubbleMenu as J}from"@tiptap/react/menus";import Y from"@tiptap/starter-kit";function X({isActive:e,className:t,children:n,...r}){return M(`button`,{type:`button`,"data-slot":`toolbar-button`,"data-active":e||void 0,className:k(`inline-flex h-7 w-7 items-center justify-center rounded text-sm transition-colors`,`hover:bg-muted-muted hover:text-text-positive-strong`,`disabled:pointer-events-none disabled:opacity-40`,e&&`bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary`,t),...r,children:n})}function Z(){return M(`div`,{"data-slot":`toolbar-divider`,className:`mx-0.5 h-5 w-px shrink-0 bg-border`})}function Q({editor:e}){let[t,n]=O(!1),[r,s]=O(``),c=I({editor:e,selector:e=>e.editor.isActive(`link`)}),l=T(t=>{if(t){let t=e.getAttributes(`link`).href??``;s(t)}n(t)},[e]),u=T(()=>{let t=r.trim();t&&(e.chain().focus().setLink({href:t,target:`_blank`}).run(),n(!1))},[e,r]),d=T(()=>{e.chain().focus().unsetLink().run(),n(!1)},[e]);return N(i,{open:t,onOpenChange:l,children:[M(o,{asChild:!0,children:M(X,{isActive:c,title:`Link (Ctrl+K)`,"data-slot":`toolbar-link-button`,children:M(g,{className:`h-3.5 w-3.5`})})}),N(a,{"data-slot":`link-dialog`,sideOffset:6,align:`start`,className:`w-72 p-3`,children:[M(`p`,{className:`mb-2 font-medium text-text-positive-strong text-xs`,children:c?`Edit Link`:`Insert Link`}),N(`div`,{className:`flex gap-1.5`,children:[M(`input`,{type:`url`,placeholder:`https://example.com`,value:r,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),u()),e.key===`Escape`&&n(!1)},autoFocus:!0,className:k(`flex-1 rounded border border-border bg-transparent px-2.5 py-1.5 text-sm text-text-positive`,`outline-none placeholder:text-text-positive-muted`,`focus:border-primary focus:ring-1 focus:ring-primary/30`)}),M(`button`,{type:`button`,onClick:u,disabled:!r.trim(),className:k(`rounded bg-primary px-2.5 py-1.5 font-medium text-text-negative text-xs`,`transition-colors hover:bg-primary-strong`,`disabled:pointer-events-none disabled:opacity-50`),children:`Apply`})]}),c&&N(`button`,{type:`button`,onClick:d,className:`mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline`,children:[M(_,{className:`h-3 w-3`}),`Remove link`]})]})]})}const ie=A([`flex flex-col overflow-hidden rounded-md`],{variants:{variant:{outline:`border border-border bg-background shadow-xs`,ghost:`border-0`},size:{sm:`text-xs [&_.ProseMirror]:min-h-24 [&_.ProseMirror]:px-2.5 [&_.ProseMirror]:py-1.5`,md:``,lg:`text-base [&_.ProseMirror]:min-h-56 [&_.ProseMirror]:px-4 [&_.ProseMirror]:py-3`}},defaultVariants:{variant:`outline`,size:`md`}}),ae=[{label:`Yellow`,value:`#fde047`},{label:`Green`,value:`#86efac`},{label:`Blue`,value:`#93c5fd`},{label:`Pink`,value:`#f9a8d4`},{label:`Orange`,value:`#fdba74`},{label:`Purple`,value:`#c4b5fd`},{label:`Red`,value:`#fca5a5`},{label:`Cyan`,value:`#67e8f9`},{label:`Lime`,value:`#bef264`},{label:`Gray`,value:`#d1d5db`}],oe=[{label:`Default`,value:``},{label:`Red`,value:`#ef4444`},{label:`Orange`,value:`#f97316`},{label:`Yellow`,value:`#eab308`},{label:`Green`,value:`#22c55e`},{label:`Blue`,value:`#3b82f6`},{label:`Purple`,value:`#a855f7`},{label:`Pink`,value:`#ec4899`},{label:`Gray`,value:`#6b7280`},{label:`Black`,value:`#000000`}];function $({editor:g,className:_,enableLink:T,enableTaskList:E,enableHighlight:D,enableColor:O}){let A=I({editor:g,selector:e=>e.editor.isActive(`heading`,{level:1})}),P=I({editor:g,selector:e=>e.editor.isActive(`heading`,{level:2})}),F=I({editor:g,selector:e=>e.editor.isActive(`heading`,{level:3})}),L=I({editor:g,selector:e=>e.editor.isActive(`bold`)}),R=I({editor:g,selector:e=>e.editor.isActive(`italic`)}),z=I({editor:g,selector:e=>e.editor.isActive(`underline`)}),B=I({editor:g,selector:e=>e.editor.isActive(`strike`)}),V=I({editor:g,selector:e=>e.editor.isActive(`code`)}),H=I({editor:g,selector:e=>e.editor.isActive(`bulletList`)}),U=I({editor:g,selector:e=>e.editor.isActive(`orderedList`)}),W=I({editor:g,selector:e=>e.editor.isActive(`taskList`)}),G=I({editor:g,selector:e=>e.editor.isActive(`blockquote`)}),K=I({editor:g,selector:e=>e.editor.isActive(`codeBlock`)}),q=I({editor:g,selector:e=>e.editor.isActive({textAlign:`left`})}),J=I({editor:g,selector:e=>e.editor.isActive({textAlign:`center`})}),Y=I({editor:g,selector:e=>e.editor.isActive({textAlign:`right`})}),ie=I({editor:g,selector:e=>e.editor.isActive({textAlign:`justify`})}),$=A?`H1`:P?`H2`:F?`H3`:`P`;return N(`div`,{"data-slot":`text-editor-toolbar`,className:k(`flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5`,_),children:[M(X,{onClick:()=>g.chain().focus().undo().run(),disabled:!g.can().undo(),title:`Undo (Ctrl+Z)`,children:M(re,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().redo().run(),disabled:!g.can().redo(),title:`Redo (Ctrl+Y)`,children:M(te,{className:`h-3.5 w-3.5`})}),M(Z,{}),N(e,{children:[M(r,{asChild:!0,children:N(`button`,{type:`button`,"data-slot":`toolbar-heading-trigger`,className:k(`inline-flex h-7 items-center gap-1 rounded px-1.5 font-medium text-xs transition-colors`,`hover:bg-muted-muted hover:text-text-positive-strong`,`disabled:pointer-events-none disabled:opacity-40`,(A||P||F)&&`bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary`),children:[M(`span`,{className:`w-5 text-center`,children:$}),M(f,{className:`h-3 w-3 opacity-60`})]})}),N(t,{align:`start`,className:`min-w-32`,children:[M(n,{onClick:()=>g.chain().focus().setParagraph().run(),children:M(`span`,{className:`text-sm`,children:`Paragraph`})}),M(n,{onClick:()=>g.chain().focus().toggleHeading({level:1}).run(),children:M(`span`,{className:`font-bold text-lg`,children:`Heading 1`})}),M(n,{onClick:()=>g.chain().focus().toggleHeading({level:2}).run(),children:M(`span`,{className:`font-semibold text-base`,children:`Heading 2`})}),M(n,{onClick:()=>g.chain().focus().toggleHeading({level:3}).run(),children:M(`span`,{className:`font-semibold text-sm`,children:`Heading 3`})})]})]}),M(Z,{}),M(X,{onClick:()=>g.chain().focus().toggleBold().run(),isActive:L,title:`Bold (Ctrl+B)`,children:M(d,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().toggleItalic().run(),isActive:R,title:`Italic (Ctrl+I)`,children:M(ee,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().toggleUnderline().run(),isActive:z,title:`Underline (Ctrl+U)`,children:M(ne,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().toggleStrike().run(),isActive:B,title:`Strikethrough`,children:M(w,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().toggleCode().run(),isActive:V,title:`Inline Code`,children:M(p,{className:`h-3.5 w-3.5`})}),M(Z,{}),M(X,{onClick:()=>g.chain().focus().toggleBulletList().run(),isActive:H,title:`Bullet List`,children:M(v,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().toggleOrderedList().run(),isActive:U,title:`Ordered List`,children:M(b,{className:`h-3.5 w-3.5`})}),E&&M(X,{onClick:()=>g.chain().focus().toggleTaskList().run(),isActive:W,title:`Task List`,children:M(y,{className:`h-3.5 w-3.5`})}),M(Z,{}),M(X,{onClick:()=>g.chain().focus().toggleBlockquote().run(),isActive:G,title:`Blockquote`,children:M(C,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().toggleCodeBlock().run(),isActive:K,title:`Code Block`,children:M(m,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().setHorizontalRule().run(),title:`Horizontal Rule`,children:M(x,{className:`h-3.5 w-3.5`})}),M(Z,{}),M(X,{onClick:()=>g.chain().focus().setTextAlign(`left`).run(),isActive:q,title:`Align Left`,children:M(l,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().setTextAlign(`center`).run(),isActive:J,title:`Align Center`,children:M(s,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().setTextAlign(`right`).run(),isActive:Y,title:`Align Right`,children:M(u,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>g.chain().focus().setTextAlign(`justify`).run(),isActive:ie,title:`Align Justify`,children:M(c,{className:`h-3.5 w-3.5`})}),T&&N(j,{children:[M(Z,{}),M(Q,{editor:g})]}),(O||D)&&N(j,{children:[M(Z,{}),O&&N(i,{children:[M(o,{asChild:!0,children:M(X,{title:`Text Color`,children:M(S,{className:`h-3.5 w-3.5`})})}),N(a,{align:`start`,className:`w-44 p-2`,children:[M(`p`,{className:`mb-1.5 font-medium text-text-positive-weak text-xs`,children:`Text Color`}),M(`div`,{className:`grid grid-cols-5 gap-1`,children:oe.map(e=>M(`button`,{type:`button`,title:e.label,onClick:()=>{e.value?g.chain().focus().setColor(e.value).run():g.chain().focus().unsetColor().run()},className:k(`h-6 w-6 rounded border border-border transition-transform hover:scale-110`,!e.value&&`bg-background text-[10px] text-text-positive leading-none`),style:e.value?{backgroundColor:e.value}:void 0,children:!e.value&&`∅`},e.label))})]})]}),D&&N(i,{children:[M(o,{asChild:!0,children:M(X,{title:`Highlight`,children:M(h,{className:`h-3.5 w-3.5`})})}),N(a,{align:`start`,className:`w-44 p-2`,children:[M(`p`,{className:`mb-1.5 font-medium text-text-positive-weak text-xs`,children:`Highlight`}),M(`div`,{className:`grid grid-cols-5 gap-1`,children:ae.map(e=>M(`button`,{type:`button`,title:e.label,onClick:()=>g.chain().focus().toggleHighlight({color:e.value}).run(),className:`h-6 w-6 rounded border border-border transition-transform hover:scale-110`,style:{backgroundColor:e.value}},e.label))}),M(`button`,{type:`button`,onClick:()=>g.chain().focus().unsetHighlight().run(),className:`mt-1.5 w-full rounded border border-border py-0.5 text-center text-text-positive-weak text-xs hover:bg-muted-muted`,children:`Clear highlight`})]})]})]})]})}function se({value:e,defaultValue:t,onChange:n,placeholder:r=`Start writing...`,readOnly:i=!1,showToolbar:a=!0,variant:o,size:s,className:c,toolbarClassName:l,editorClassName:u,maxLength:f,showCharacterCount:p,onCharacterCount:m,enableLink:h,enableBubbleMenu:g,enableTaskList:_,enableHighlight:v,enableColor:y}){let b=f!==void 0||p||m!==void 0,x=y||v,S=F({extensions:D(()=>{let e=[Y,q,V.configure({placeholder:r}),W.configure({types:[`heading`,`paragraph`]}),B];return x&&e.push(K),h&&e.push(z.configure({openOnClick:!1,linkOnPaste:!0,defaultProtocol:`https`})),_&&e.push(U,H.configure({nested:!0})),v&&e.push(R.configure({multicolor:!0})),y&&e.push(G),b&&e.push(L.configure({limit:f})),e},[b,r,f,v,x,_,h,y]),content:e??t,editable:!i,onUpdate:({editor:e})=>{if(n?.(e.getHTML()),m){let t=e.storage.characterCount;m({characters:t.characters(),words:t.words()})}}});E(()=>{!S||e===void 0||S.getHTML()!==e&&S.commands.setContent(e)},[S,e]),E(()=>{S&&S.setEditable(!i)},[S,i]);let C=I({editor:S,selector:e=>{let t=e.editor?.storage?.characterCount;return t?t.characters():0}}),te=I({editor:S,selector:e=>{let t=e.editor?.storage?.characterCount;return t?t.words():0}}),re=p||f!==void 0,T=f!==void 0&&C>f*.9;return N(`div`,{"data-slot":`text-editor`,className:k(`lunas-text-editor`,ie({variant:o,size:s}),c),children:[a&&!i&&S&&M($,{editor:S,className:l,enableLink:h,enableTaskList:_,enableHighlight:v,enableColor:y}),g&&!i&&S&&N(J,{editor:S,options:{placement:`top`},className:k(`flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown`),children:[M(X,{onClick:()=>S.chain().focus().toggleBold().run(),isActive:S.isActive(`bold`),title:`Bold (Ctrl+B)`,children:M(d,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>S.chain().focus().toggleItalic().run(),isActive:S.isActive(`italic`),title:`Italic (Ctrl+I)`,children:M(ee,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>S.chain().focus().toggleUnderline().run(),isActive:S.isActive(`underline`),title:`Underline (Ctrl+U)`,children:M(ne,{className:`h-3.5 w-3.5`})}),M(X,{onClick:()=>S.chain().focus().toggleStrike().run(),isActive:S.isActive(`strike`),title:`Strikethrough`,children:M(w,{className:`h-3.5 w-3.5`})}),h&&N(j,{children:[M(Z,{}),M(Q,{editor:S})]})]}),M(P,{editor:S,"data-slot":`text-editor-content`,className:k(`flex-1 bg-white text-sm text-text-positive`,u)}),re&&b&&N(`div`,{"data-slot":`text-editor-footer`,className:`flex items-center justify-between border-border border-t bg-muted-muted/30 px-3 py-1 text-text-positive-weak text-xs`,children:[N(`span`,{children:[te,` words`]}),N(`span`,{"data-warning":T||void 0,className:`data-warning:text-warning-strong`,children:[C,f?` / ${f}`:``,` characters`]})]})]})}export{$ as n,Q as r,se as t};
|
|
2
|
+
//# sourceMappingURL=text-editor-CtR27_PR.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-BQtIXOpM.mjs","names":["Underline","UnderlineIcon"],"sources":["../packages/components/features/text-editor/toolbar-primitives.tsx","../packages/components/features/text-editor/link-dialog.tsx","../packages/components/features/text-editor/text-editor.variants.ts","../packages/components/features/text-editor/toolbar.tsx","../packages/components/features/text-editor/text-editor.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ninterface ToolbarButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isActive?: boolean;\n}\n\nfunction ToolbarButton({ isActive, className, children, ...props }: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n data-slot=\"toolbar-button\"\n data-active={isActive || undefined}\n className={cn(\n 'inline-flex h-7 w-7 items-center justify-center rounded text-sm transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n isActive && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary',\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nfunction ToolbarDivider() {\n return <div data-slot=\"toolbar-divider\" className=\"mx-0.5 h-5 w-px shrink-0 bg-border\" />;\n}\n\nexport { ToolbarButton, ToolbarDivider };\n// biome-ignore lint/style/useComponentExportOnlyModules: type export needed by sibling feature files\nexport type { ToolbarButtonProps };\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport { Link2, Link2Off } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { ToolbarButton } from './toolbar-primitives';\n\nexport interface LinkDialogProps {\n editor: Editor;\n}\n\nfunction LinkDialog({ editor }: LinkDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [url, setUrl] = useState('');\n\n const isLinkActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('link'),\n });\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n const existingHref = editor.getAttributes('link').href ?? '';\n setUrl(existingHref);\n }\n setIsOpen(open);\n },\n [editor]\n );\n\n const handleApply = useCallback(() => {\n const trimmed = url.trim();\n if (!trimmed) return;\n editor.chain().focus().setLink({ href: trimmed, target: '_blank' }).run();\n setIsOpen(false);\n }, [editor, url]);\n\n const handleRemove = useCallback(() => {\n editor.chain().focus().unsetLink().run();\n setIsOpen(false);\n }, [editor]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleApply();\n }\n if (e.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n return (\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <ToolbarButton isActive={isLinkActive} title=\"Link (Ctrl+K)\" data-slot=\"toolbar-link-button\">\n <Link2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent data-slot=\"link-dialog\" sideOffset={6} align=\"start\" className=\"w-72 p-3\">\n <p className=\"mb-2 font-medium text-text-positive-strong text-xs\">{isLinkActive ? 'Edit Link' : 'Insert Link'}</p>\n <div className=\"flex gap-1.5\">\n <input\n type=\"url\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={e => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n className={cn(\n 'flex-1 rounded border border-border bg-transparent px-2.5 py-1.5 text-sm text-text-positive',\n 'outline-none placeholder:text-text-positive-muted',\n 'focus:border-primary focus:ring-1 focus:ring-primary/30'\n )}\n />\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!url.trim()}\n className={cn(\n 'rounded bg-primary px-2.5 py-1.5 font-medium text-text-negative text-xs',\n 'transition-colors hover:bg-primary-strong',\n 'disabled:pointer-events-none disabled:opacity-50'\n )}\n >\n Apply\n </button>\n </div>\n {isLinkActive && (\n <button type=\"button\" onClick={handleRemove} className=\"mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline\">\n <Link2Off className=\"h-3 w-3\" />\n Remove link\n </button>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { LinkDialog };\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const textEditorVariants = cva(['flex flex-col overflow-hidden rounded-md'], {\n variants: {\n variant: {\n outline: 'border border-border bg-background shadow-xs',\n ghost: 'border-0',\n },\n size: {\n sm: 'text-xs [&_.ProseMirror]:min-h-24 [&_.ProseMirror]:px-2.5 [&_.ProseMirror]:py-1.5',\n md: '',\n lg: 'text-base [&_.ProseMirror]:min-h-56 [&_.ProseMirror]:px-4 [&_.ProseMirror]:py-3',\n },\n },\n defaultVariants: {\n variant: 'outline',\n size: 'md',\n },\n});\n\nexport type TextEditorVariantProps = VariantProps<typeof textEditorVariants>;\n","'use client';\n\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n ChevronDown,\n Code,\n Code2,\n Highlighter,\n Italic,\n List,\n ListChecks,\n ListOrdered,\n Minus,\n Palette,\n Quote,\n Redo,\n Strikethrough,\n Underline,\n Undo,\n} from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { LinkDialog } from './link-dialog';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nconst HIGHLIGHT_COLORS = [\n { label: 'Yellow', value: '#fde047' },\n { label: 'Green', value: '#86efac' },\n { label: 'Blue', value: '#93c5fd' },\n { label: 'Pink', value: '#f9a8d4' },\n { label: 'Orange', value: '#fdba74' },\n { label: 'Purple', value: '#c4b5fd' },\n { label: 'Red', value: '#fca5a5' },\n { label: 'Cyan', value: '#67e8f9' },\n { label: 'Lime', value: '#bef264' },\n { label: 'Gray', value: '#d1d5db' },\n];\n\nconst TEXT_COLORS = [\n { label: 'Default', value: '' },\n { label: 'Red', value: '#ef4444' },\n { label: 'Orange', value: '#f97316' },\n { label: 'Yellow', value: '#eab308' },\n { label: 'Green', value: '#22c55e' },\n { label: 'Blue', value: '#3b82f6' },\n { label: 'Purple', value: '#a855f7' },\n { label: 'Pink', value: '#ec4899' },\n { label: 'Gray', value: '#6b7280' },\n { label: 'Black', value: '#000000' },\n];\n\nexport interface TextEditorToolbarProps {\n editor: Editor;\n className?: string;\n enableLink?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditorToolbar({ editor, className, enableLink, enableTaskList, enableHighlight, enableColor }: TextEditorToolbarProps) {\n const isHeading1Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 1 }),\n });\n const isHeading2Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 2 }),\n });\n const isHeading3Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 3 }),\n });\n const isBoldActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bold'),\n });\n const isItalicActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('italic'),\n });\n const isUnderlineActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('underline'),\n });\n const isStrikeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('strike'),\n });\n const isCodeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('code'),\n });\n const isBulletListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bulletList'),\n });\n const isOrderedListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('orderedList'),\n });\n const isTaskListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('taskList'),\n });\n const isBlockquoteActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('blockquote'),\n });\n const isCodeBlockActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('codeBlock'),\n });\n const isAlignLeftActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'left' }),\n });\n const isAlignCenterActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'center' }),\n });\n const isAlignRightActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'right' }),\n });\n const isAlignJustifyActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'justify' }),\n });\n\n const headingLabel = isHeading1Active ? 'H1' : isHeading2Active ? 'H2' : isHeading3Active ? 'H3' : 'P';\n\n return (\n <div data-slot=\"text-editor-toolbar\" className={cn('flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5', className)}>\n {/* History */}\n <ToolbarButton onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo (Ctrl+Z)\">\n <Undo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo (Ctrl+Y)\">\n <Redo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Heading dropdown */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"toolbar-heading-trigger\"\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded px-1.5 font-medium text-xs transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n (isHeading1Active || isHeading2Active || isHeading3Active) && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary'\n )}\n >\n <span className=\"w-5 text-center\">{headingLabel}</span>\n <ChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-32\">\n <DropdownMenuItem onClick={() => editor.chain().focus().setParagraph().run()}>\n <span className=\"text-sm\">Paragraph</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}>\n <span className=\"font-bold text-lg\">Heading 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}>\n <span className=\"font-semibold text-base\">Heading 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}>\n <span className=\"font-semibold text-sm\">Heading 3</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <ToolbarDivider />\n\n {/* Text formatting */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={isBoldActive} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={isItalicActive} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={isUnderlineActive} title=\"Underline (Ctrl+U)\">\n <Underline className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={isStrikeActive} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCode().run()} isActive={isCodeActive} title=\"Inline Code\">\n <Code className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Lists */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBulletList().run()} isActive={isBulletListActive} title=\"Bullet List\">\n <List className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleOrderedList().run()} isActive={isOrderedListActive} title=\"Ordered List\">\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableTaskList && (\n <ToolbarButton onClick={() => editor.chain().focus().toggleTaskList().run()} isActive={isTaskListActive} title=\"Task List\">\n <ListChecks className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n )}\n\n <ToolbarDivider />\n\n {/* Blocks */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBlockquote().run()} isActive={isBlockquoteActive} title=\"Blockquote\">\n <Quote className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCodeBlock().run()} isActive={isCodeBlockActive} title=\"Code Block\">\n <Code2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setHorizontalRule().run()} title=\"Horizontal Rule\">\n <Minus className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Text alignment */}\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('left').run()} isActive={isAlignLeftActive} title=\"Align Left\">\n <AlignLeft className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('center').run()} isActive={isAlignCenterActive} title=\"Align Center\">\n <AlignCenter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('right').run()} isActive={isAlignRightActive} title=\"Align Right\">\n <AlignRight className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('justify').run()} isActive={isAlignJustifyActive} title=\"Align Justify\">\n <AlignJustify className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n {/* Link */}\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n\n {/* Color & Highlight */}\n {(enableColor || enableHighlight) && (\n <>\n <ToolbarDivider />\n {enableColor && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Text Color\">\n <Palette className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Text Color</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {TEXT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => {\n if (!color.value) {\n editor.chain().focus().unsetColor().run();\n } else {\n editor.chain().focus().setColor(color.value).run();\n }\n }}\n className={cn(\n 'h-6 w-6 rounded border border-border transition-transform hover:scale-110',\n !color.value && 'bg-background text-[10px] text-text-positive leading-none'\n )}\n style={color.value ? { backgroundColor: color.value } : undefined}\n >\n {!color.value && '∅'}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )}\n {enableHighlight && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Highlight\">\n <Highlighter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Highlight</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {HIGHLIGHT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => editor.chain().focus().toggleHighlight({ color: color.value }).run()}\n className=\"h-6 w-6 rounded border border-border transition-transform hover:scale-110\"\n style={{ backgroundColor: color.value }}\n />\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().unsetHighlight().run()}\n className=\"mt-1.5 w-full rounded border border-border py-0.5 text-center text-text-positive-weak text-xs hover:bg-muted-muted\"\n >\n Clear highlight\n </button>\n </PopoverContent>\n </Popover>\n )}\n </>\n )}\n </div>\n );\n}\n\nexport { TextEditorToolbar };\n","'use client';\n\nimport { useEffect, useMemo } from 'react';\n\nimport { Bold, Italic, Strikethrough, Underline as UnderlineIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { CharacterCount } from '@tiptap/extension-character-count';\nimport { Highlight } from '@tiptap/extension-highlight';\nimport { Link } from '@tiptap/extension-link';\nimport { ListKeymap } from '@tiptap/extension-list-keymap';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { TaskItem } from '@tiptap/extension-task-item';\nimport { TaskList } from '@tiptap/extension-task-list';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { Color, TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport { type AnyExtension, EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport StarterKit from '@tiptap/starter-kit';\nimport { LinkDialog } from './link-dialog';\nimport { type TextEditorVariantProps, textEditorVariants } from './text-editor.variants';\nimport { TextEditorToolbar } from './toolbar';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nexport interface TextEditorProps extends TextEditorVariantProps {\n value?: string;\n defaultValue?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n readOnly?: boolean;\n showToolbar?: boolean;\n className?: string;\n toolbarClassName?: string;\n editorClassName?: string;\n // Character count\n maxLength?: number;\n showCharacterCount?: boolean;\n onCharacterCount?: (stats: { characters: number; words: number }) => void;\n // Feature flags\n enableLink?: boolean;\n enableBubbleMenu?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditor({\n value,\n defaultValue,\n onChange,\n placeholder = 'Start writing...',\n readOnly = false,\n showToolbar = true,\n variant,\n size,\n className,\n toolbarClassName,\n editorClassName,\n maxLength,\n showCharacterCount,\n onCharacterCount,\n enableLink,\n enableBubbleMenu,\n enableTaskList,\n enableHighlight,\n enableColor,\n}: TextEditorProps) {\n const needsCharCount = maxLength !== undefined || showCharacterCount || onCharacterCount !== undefined;\n const needsTextStyle = enableColor || enableHighlight;\n\n const extensions = useMemo(() => {\n const base: AnyExtension[] = [\n StarterKit,\n Underline,\n Placeholder.configure({ placeholder }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n ListKeymap,\n ];\n\n if (needsTextStyle) base.push(TextStyle);\n if (enableLink) {\n base.push(Link.configure({ openOnClick: false, linkOnPaste: true, defaultProtocol: 'https' }));\n }\n if (enableTaskList) {\n base.push(TaskList, TaskItem.configure({ nested: true }));\n }\n if (enableHighlight) {\n base.push(Highlight.configure({ multicolor: true }));\n }\n if (enableColor) {\n base.push(Color);\n }\n if (needsCharCount) {\n base.push(CharacterCount.configure({ limit: maxLength }));\n }\n\n return base;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needsCharCount, placeholder, maxLength, enableHighlight, needsTextStyle, enableTaskList, enableLink, enableColor]);\n\n const editor = useEditor({\n extensions,\n content: value ?? defaultValue,\n editable: !readOnly,\n onUpdate: ({ editor: e }) => {\n onChange?.(e.getHTML());\n if (onCharacterCount) {\n const storage = e.storage.characterCount;\n onCharacterCount({ characters: storage.characters(), words: storage.words() });\n }\n },\n });\n\n useEffect(() => {\n if (!editor || value === undefined) return;\n if (editor.getHTML() === value) return;\n editor.commands.setContent(value);\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n const charCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.characters() as number) : 0;\n },\n });\n\n const wordCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.words() as number) : 0;\n },\n });\n\n const showCharCount = showCharacterCount || maxLength !== undefined;\n const isNearLimit = maxLength !== undefined && charCount > maxLength * 0.9;\n\n return (\n <div data-slot=\"text-editor\" className={cn('lunas-text-editor', textEditorVariants({ variant, size }), className)}>\n {showToolbar && !readOnly && editor && (\n <TextEditorToolbar\n editor={editor}\n className={toolbarClassName}\n enableLink={enableLink}\n enableTaskList={enableTaskList}\n enableHighlight={enableHighlight}\n enableColor={enableColor}\n />\n )}\n\n {enableBubbleMenu && !readOnly && editor && (\n <BubbleMenu\n editor={editor}\n options={{ placement: 'top' }}\n className={cn('flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown')}\n >\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={editor.isActive('bold')} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={editor.isActive('italic')} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={editor.isActive('underline')} title=\"Underline (Ctrl+U)\">\n <UnderlineIcon className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={editor.isActive('strike')} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n </BubbleMenu>\n )}\n\n <EditorContent editor={editor} data-slot=\"text-editor-content\" className={cn('flex-1 bg-white text-sm text-text-positive', editorClassName)} />\n\n {showCharCount && needsCharCount && (\n <div\n data-slot=\"text-editor-footer\"\n className=\"flex items-center justify-between border-border border-t bg-muted-muted/30 px-3 py-1 text-text-positive-weak text-xs\"\n >\n <span>{wordCount} words</span>\n <span data-warning={isNearLimit || undefined} className=\"data-warning:text-warning-strong\">\n {charCount}\n {maxLength ? ` / ${maxLength}` : ''} characters\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport { TextEditor };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"text-editor-CtR27_PR.mjs","names":["Underline","UnderlineIcon"],"sources":["../packages/components/features/text-editor/toolbar-primitives.tsx","../packages/components/features/text-editor/link-dialog.tsx","../packages/components/features/text-editor/text-editor.variants.ts","../packages/components/features/text-editor/toolbar.tsx","../packages/components/features/text-editor/text-editor.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ninterface ToolbarButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n isActive?: boolean;\n}\n\nfunction ToolbarButton({ isActive, className, children, ...props }: ToolbarButtonProps) {\n return (\n <button\n type=\"button\"\n data-slot=\"toolbar-button\"\n data-active={isActive || undefined}\n className={cn(\n 'inline-flex h-7 w-7 items-center justify-center rounded text-sm transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n isActive && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary',\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nfunction ToolbarDivider() {\n return <div data-slot=\"toolbar-divider\" className=\"mx-0.5 h-5 w-px shrink-0 bg-border\" />;\n}\n\nexport { ToolbarButton, ToolbarDivider };\n// biome-ignore lint/style/useComponentExportOnlyModules: type export needed by sibling feature files\nexport type { ToolbarButtonProps };\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport { Link2, Link2Off } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { ToolbarButton } from './toolbar-primitives';\n\nexport interface LinkDialogProps {\n editor: Editor;\n}\n\nfunction LinkDialog({ editor }: LinkDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [url, setUrl] = useState('');\n\n const isLinkActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('link'),\n });\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n const existingHref = editor.getAttributes('link').href ?? '';\n setUrl(existingHref);\n }\n setIsOpen(open);\n },\n [editor]\n );\n\n const handleApply = useCallback(() => {\n const trimmed = url.trim();\n if (!trimmed) return;\n editor.chain().focus().setLink({ href: trimmed, target: '_blank' }).run();\n setIsOpen(false);\n }, [editor, url]);\n\n const handleRemove = useCallback(() => {\n editor.chain().focus().unsetLink().run();\n setIsOpen(false);\n }, [editor]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleApply();\n }\n if (e.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n return (\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <ToolbarButton isActive={isLinkActive} title=\"Link (Ctrl+K)\" data-slot=\"toolbar-link-button\">\n <Link2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent data-slot=\"link-dialog\" sideOffset={6} align=\"start\" className=\"w-72 p-3\">\n <p className=\"mb-2 font-medium text-text-positive-strong text-xs\">{isLinkActive ? 'Edit Link' : 'Insert Link'}</p>\n <div className=\"flex gap-1.5\">\n <input\n type=\"url\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={e => setUrl(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n className={cn(\n 'flex-1 rounded border border-border bg-transparent px-2.5 py-1.5 text-sm text-text-positive',\n 'outline-none placeholder:text-text-positive-muted',\n 'focus:border-primary focus:ring-1 focus:ring-primary/30'\n )}\n />\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!url.trim()}\n className={cn(\n 'rounded bg-primary px-2.5 py-1.5 font-medium text-text-negative text-xs',\n 'transition-colors hover:bg-primary-strong',\n 'disabled:pointer-events-none disabled:opacity-50'\n )}\n >\n Apply\n </button>\n </div>\n {isLinkActive && (\n <button type=\"button\" onClick={handleRemove} className=\"mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline\">\n <Link2Off className=\"h-3 w-3\" />\n Remove link\n </button>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { LinkDialog };\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const textEditorVariants = cva(['flex flex-col overflow-hidden rounded-md'], {\n variants: {\n variant: {\n outline: 'border border-border bg-background shadow-xs',\n ghost: 'border-0',\n },\n size: {\n sm: 'text-xs [&_.ProseMirror]:min-h-24 [&_.ProseMirror]:px-2.5 [&_.ProseMirror]:py-1.5',\n md: '',\n lg: 'text-base [&_.ProseMirror]:min-h-56 [&_.ProseMirror]:px-4 [&_.ProseMirror]:py-3',\n },\n },\n defaultVariants: {\n variant: 'outline',\n size: 'md',\n },\n});\n\nexport type TextEditorVariantProps = VariantProps<typeof textEditorVariants>;\n","'use client';\n\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n ChevronDown,\n Code,\n Code2,\n Highlighter,\n Italic,\n List,\n ListChecks,\n ListOrdered,\n Minus,\n Palette,\n Quote,\n Redo,\n Strikethrough,\n Underline,\n Undo,\n} from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\n\nimport { type Editor, useEditorState } from '@tiptap/react';\nimport { LinkDialog } from './link-dialog';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nconst HIGHLIGHT_COLORS = [\n { label: 'Yellow', value: '#fde047' },\n { label: 'Green', value: '#86efac' },\n { label: 'Blue', value: '#93c5fd' },\n { label: 'Pink', value: '#f9a8d4' },\n { label: 'Orange', value: '#fdba74' },\n { label: 'Purple', value: '#c4b5fd' },\n { label: 'Red', value: '#fca5a5' },\n { label: 'Cyan', value: '#67e8f9' },\n { label: 'Lime', value: '#bef264' },\n { label: 'Gray', value: '#d1d5db' },\n];\n\nconst TEXT_COLORS = [\n { label: 'Default', value: '' },\n { label: 'Red', value: '#ef4444' },\n { label: 'Orange', value: '#f97316' },\n { label: 'Yellow', value: '#eab308' },\n { label: 'Green', value: '#22c55e' },\n { label: 'Blue', value: '#3b82f6' },\n { label: 'Purple', value: '#a855f7' },\n { label: 'Pink', value: '#ec4899' },\n { label: 'Gray', value: '#6b7280' },\n { label: 'Black', value: '#000000' },\n];\n\nexport interface TextEditorToolbarProps {\n editor: Editor;\n className?: string;\n enableLink?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditorToolbar({ editor, className, enableLink, enableTaskList, enableHighlight, enableColor }: TextEditorToolbarProps) {\n const isHeading1Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 1 }),\n });\n const isHeading2Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 2 }),\n });\n const isHeading3Active = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('heading', { level: 3 }),\n });\n const isBoldActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bold'),\n });\n const isItalicActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('italic'),\n });\n const isUnderlineActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('underline'),\n });\n const isStrikeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('strike'),\n });\n const isCodeActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('code'),\n });\n const isBulletListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('bulletList'),\n });\n const isOrderedListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('orderedList'),\n });\n const isTaskListActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('taskList'),\n });\n const isBlockquoteActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('blockquote'),\n });\n const isCodeBlockActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive('codeBlock'),\n });\n const isAlignLeftActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'left' }),\n });\n const isAlignCenterActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'center' }),\n });\n const isAlignRightActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'right' }),\n });\n const isAlignJustifyActive = useEditorState({\n editor,\n selector: ctx => ctx.editor.isActive({ textAlign: 'justify' }),\n });\n\n const headingLabel = isHeading1Active ? 'H1' : isHeading2Active ? 'H2' : isHeading3Active ? 'H3' : 'P';\n\n return (\n <div data-slot=\"text-editor-toolbar\" className={cn('flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5', className)}>\n {/* History */}\n <ToolbarButton onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo (Ctrl+Z)\">\n <Undo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo (Ctrl+Y)\">\n <Redo className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Heading dropdown */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-slot=\"toolbar-heading-trigger\"\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded px-1.5 font-medium text-xs transition-colors',\n 'hover:bg-muted-muted hover:text-text-positive-strong',\n 'disabled:pointer-events-none disabled:opacity-40',\n (isHeading1Active || isHeading2Active || isHeading3Active) && 'bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary'\n )}\n >\n <span className=\"w-5 text-center\">{headingLabel}</span>\n <ChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"min-w-32\">\n <DropdownMenuItem onClick={() => editor.chain().focus().setParagraph().run()}>\n <span className=\"text-sm\">Paragraph</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}>\n <span className=\"font-bold text-lg\">Heading 1</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}>\n <span className=\"font-semibold text-base\">Heading 2</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}>\n <span className=\"font-semibold text-sm\">Heading 3</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n\n <ToolbarDivider />\n\n {/* Text formatting */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={isBoldActive} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={isItalicActive} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={isUnderlineActive} title=\"Underline (Ctrl+U)\">\n <Underline className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={isStrikeActive} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCode().run()} isActive={isCodeActive} title=\"Inline Code\">\n <Code className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Lists */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBulletList().run()} isActive={isBulletListActive} title=\"Bullet List\">\n <List className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleOrderedList().run()} isActive={isOrderedListActive} title=\"Ordered List\">\n <ListOrdered className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableTaskList && (\n <ToolbarButton onClick={() => editor.chain().focus().toggleTaskList().run()} isActive={isTaskListActive} title=\"Task List\">\n <ListChecks className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n )}\n\n <ToolbarDivider />\n\n {/* Blocks */}\n <ToolbarButton onClick={() => editor.chain().focus().toggleBlockquote().run()} isActive={isBlockquoteActive} title=\"Blockquote\">\n <Quote className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleCodeBlock().run()} isActive={isCodeBlockActive} title=\"Code Block\">\n <Code2 className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setHorizontalRule().run()} title=\"Horizontal Rule\">\n <Minus className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n <ToolbarDivider />\n\n {/* Text alignment */}\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('left').run()} isActive={isAlignLeftActive} title=\"Align Left\">\n <AlignLeft className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('center').run()} isActive={isAlignCenterActive} title=\"Align Center\">\n <AlignCenter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('right').run()} isActive={isAlignRightActive} title=\"Align Right\">\n <AlignRight className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().setTextAlign('justify').run()} isActive={isAlignJustifyActive} title=\"Align Justify\">\n <AlignJustify className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n\n {/* Link */}\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n\n {/* Color & Highlight */}\n {(enableColor || enableHighlight) && (\n <>\n <ToolbarDivider />\n {enableColor && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Text Color\">\n <Palette className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Text Color</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {TEXT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => {\n if (!color.value) {\n editor.chain().focus().unsetColor().run();\n } else {\n editor.chain().focus().setColor(color.value).run();\n }\n }}\n className={cn(\n 'h-6 w-6 rounded border border-border transition-transform hover:scale-110',\n !color.value && 'bg-background text-[10px] text-text-positive leading-none'\n )}\n style={color.value ? { backgroundColor: color.value } : undefined}\n >\n {!color.value && '∅'}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )}\n {enableHighlight && (\n <Popover>\n <PopoverTrigger asChild>\n <ToolbarButton title=\"Highlight\">\n <Highlighter className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-44 p-2\">\n <p className=\"mb-1.5 font-medium text-text-positive-weak text-xs\">Highlight</p>\n <div className=\"grid grid-cols-5 gap-1\">\n {HIGHLIGHT_COLORS.map(color => (\n <button\n key={color.label}\n type=\"button\"\n title={color.label}\n onClick={() => editor.chain().focus().toggleHighlight({ color: color.value }).run()}\n className=\"h-6 w-6 rounded border border-border transition-transform hover:scale-110\"\n style={{ backgroundColor: color.value }}\n />\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().unsetHighlight().run()}\n className=\"mt-1.5 w-full rounded border border-border py-0.5 text-center text-text-positive-weak text-xs hover:bg-muted-muted\"\n >\n Clear highlight\n </button>\n </PopoverContent>\n </Popover>\n )}\n </>\n )}\n </div>\n );\n}\n\nexport { TextEditorToolbar };\n","'use client';\n\nimport { useEffect, useMemo } from 'react';\n\nimport { Bold, Italic, Strikethrough, Underline as UnderlineIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { CharacterCount } from '@tiptap/extension-character-count';\nimport { Highlight } from '@tiptap/extension-highlight';\nimport { Link } from '@tiptap/extension-link';\nimport { ListKeymap } from '@tiptap/extension-list-keymap';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { TaskItem } from '@tiptap/extension-task-item';\nimport { TaskList } from '@tiptap/extension-task-list';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { Color, TextStyle } from '@tiptap/extension-text-style';\nimport Underline from '@tiptap/extension-underline';\nimport { type AnyExtension, EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport StarterKit from '@tiptap/starter-kit';\nimport { LinkDialog } from './link-dialog';\nimport { type TextEditorVariantProps, textEditorVariants } from './text-editor.variants';\nimport { TextEditorToolbar } from './toolbar';\nimport { ToolbarButton, ToolbarDivider } from './toolbar-primitives';\n\nexport interface TextEditorProps extends TextEditorVariantProps {\n value?: string;\n defaultValue?: string;\n onChange?: (html: string) => void;\n placeholder?: string;\n readOnly?: boolean;\n showToolbar?: boolean;\n className?: string;\n toolbarClassName?: string;\n editorClassName?: string;\n // Character count\n maxLength?: number;\n showCharacterCount?: boolean;\n onCharacterCount?: (stats: { characters: number; words: number }) => void;\n // Feature flags\n enableLink?: boolean;\n enableBubbleMenu?: boolean;\n enableTaskList?: boolean;\n enableHighlight?: boolean;\n enableColor?: boolean;\n}\n\nfunction TextEditor({\n value,\n defaultValue,\n onChange,\n placeholder = 'Start writing...',\n readOnly = false,\n showToolbar = true,\n variant,\n size,\n className,\n toolbarClassName,\n editorClassName,\n maxLength,\n showCharacterCount,\n onCharacterCount,\n enableLink,\n enableBubbleMenu,\n enableTaskList,\n enableHighlight,\n enableColor,\n}: TextEditorProps) {\n const needsCharCount = maxLength !== undefined || showCharacterCount || onCharacterCount !== undefined;\n const needsTextStyle = enableColor || enableHighlight;\n\n const extensions = useMemo(() => {\n const base: AnyExtension[] = [\n StarterKit,\n Underline,\n Placeholder.configure({ placeholder }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n ListKeymap,\n ];\n\n if (needsTextStyle) base.push(TextStyle);\n if (enableLink) {\n base.push(Link.configure({ openOnClick: false, linkOnPaste: true, defaultProtocol: 'https' }));\n }\n if (enableTaskList) {\n base.push(TaskList, TaskItem.configure({ nested: true }));\n }\n if (enableHighlight) {\n base.push(Highlight.configure({ multicolor: true }));\n }\n if (enableColor) {\n base.push(Color);\n }\n if (needsCharCount) {\n base.push(CharacterCount.configure({ limit: maxLength }));\n }\n\n return base;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needsCharCount, placeholder, maxLength, enableHighlight, needsTextStyle, enableTaskList, enableLink, enableColor]);\n\n const editor = useEditor({\n extensions,\n content: value ?? defaultValue,\n editable: !readOnly,\n onUpdate: ({ editor: e }) => {\n onChange?.(e.getHTML());\n if (onCharacterCount) {\n const storage = e.storage.characterCount;\n onCharacterCount({ characters: storage.characters(), words: storage.words() });\n }\n },\n });\n\n useEffect(() => {\n if (!editor || value === undefined) return;\n if (editor.getHTML() === value) return;\n editor.commands.setContent(value);\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n const charCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.characters() as number) : 0;\n },\n });\n\n const wordCount = useEditorState({\n editor,\n selector: ctx => {\n const storage = ctx.editor?.storage?.characterCount;\n return storage ? (storage.words() as number) : 0;\n },\n });\n\n const showCharCount = showCharacterCount || maxLength !== undefined;\n const isNearLimit = maxLength !== undefined && charCount > maxLength * 0.9;\n\n return (\n <div data-slot=\"text-editor\" className={cn('lunas-text-editor', textEditorVariants({ variant, size }), className)}>\n {showToolbar && !readOnly && editor && (\n <TextEditorToolbar\n editor={editor}\n className={toolbarClassName}\n enableLink={enableLink}\n enableTaskList={enableTaskList}\n enableHighlight={enableHighlight}\n enableColor={enableColor}\n />\n )}\n\n {enableBubbleMenu && !readOnly && editor && (\n <BubbleMenu\n editor={editor}\n options={{ placement: 'top' }}\n className={cn('flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown')}\n >\n <ToolbarButton onClick={() => editor.chain().focus().toggleBold().run()} isActive={editor.isActive('bold')} title=\"Bold (Ctrl+B)\">\n <Bold className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleItalic().run()} isActive={editor.isActive('italic')} title=\"Italic (Ctrl+I)\">\n <Italic className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleUnderline().run()} isActive={editor.isActive('underline')} title=\"Underline (Ctrl+U)\">\n <UnderlineIcon className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton onClick={() => editor.chain().focus().toggleStrike().run()} isActive={editor.isActive('strike')} title=\"Strikethrough\">\n <Strikethrough className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n {enableLink && (\n <>\n <ToolbarDivider />\n <LinkDialog editor={editor} />\n </>\n )}\n </BubbleMenu>\n )}\n\n <EditorContent editor={editor} data-slot=\"text-editor-content\" className={cn('flex-1 bg-white text-sm text-text-positive', editorClassName)} />\n\n {showCharCount && needsCharCount && (\n <div\n data-slot=\"text-editor-footer\"\n className=\"flex items-center justify-between border-border border-t bg-muted-muted/30 px-3 py-1 text-text-positive-weak text-xs\"\n >\n <span>{wordCount} words</span>\n <span data-warning={isNearLimit || undefined} className=\"data-warning:text-warning-strong\">\n {charCount}\n {maxLength ? ` / ${maxLength}` : ''} characters\n </span>\n </div>\n )}\n </div>\n );\n}\n\nexport { TextEditor };\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as e}from"./tanstack-form-
|
|
2
|
-
//# sourceMappingURL=text-editor-field-
|
|
1
|
+
import{G as e}from"./tanstack-form-q9hDCc0Y.mjs";import{t}from"./text-editor-CtR27_PR.mjs";import{Field as n,FieldContent as r,FieldDescription as i,FieldError as a,FieldGroup as o,FieldLabel as s,FieldNote as c,FieldSeparator as l,FieldTooltip as u}from"./field-V2DoD8qL.mjs";import{memo as d,useCallback as f}from"react";import{jsx as p,jsxs as m}from"react/jsx-runtime";import{useStore as h}from"@tanstack/react-form";const g=d(({label:d,description:g,placeholder:_,tooltip:v,helperText:y,showErrorMessage:b=!0,required:x=!1})=>{let{form:S,state:C,handleChange:w}=e(),T=h(S.store,({isSubmitting:e})=>e),E=C.meta.isDirty&&C.meta.isTouched&&!C.meta.isValid,D=x&&C.value===null,O=f(e=>{T||w(e||null)},[T,w]);return m(o,{className:`gap-y-4 px-4`,children:[m(n,{orientation:`vertical`,"data-invalid":E,children:[m(r,{children:[m(s,{"aria-required":D,children:[d,v&&p(u,{tooltip:v})]}),p(i,{children:g})]}),p(t,{value:C.value??``,placeholder:_,readOnly:T,onChange:O}),C.meta.isDirty&&b&&!!C.meta.errors.length&&p(a,{errors:C.meta.errors}),p(c,{isShow:!!y,children:y})]}),p(l,{})]})});g.displayName=`TextEditorField`;export{g as TextEditorField};
|
|
2
|
+
//# sourceMappingURL=text-editor-field-CQ8tnZFw.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-field-
|
|
1
|
+
{"version":3,"file":"text-editor-field-CQ8tnZFw.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/fields/text-editor-field.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { TextEditor } from '@/components/features/text-editor';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator, FieldTooltip } from '../ui/field';\n\nimport type { TextEditorFieldProps as Props } from '../../types';\n\nexport const TextEditorField: React.FC<Props> = memo(({ label, description, placeholder, tooltip, helperText, showErrorMessage = true, required = false }) => {\n const { form, state, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n const _isEmpty = required && state.value === null;\n\n const onChange = useCallback(\n (html: string) => {\n if (isSubmitting) return;\n handleChange(html || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation=\"vertical\" data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <TextEditor value={state.value ?? ''} placeholder={placeholder} readOnly={isSubmitting} onChange={onChange} />\n {state.meta.isDirty && showErrorMessage && !!state.meta.errors.length && <FieldError errors={state.meta.errors} />}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n});\nTextEditorField.displayName = 'TextEditorField';\n"],"mappings":"qaAaA,MAAa,EAAmC,GAAM,CAAE,QAAO,cAAa,cAAa,UAAS,aAAY,mBAAmB,GAAM,WAAW,MAAY,CAC5J,GAAM,CAAE,OAAM,QAAO,gBAAiB,EAAuC,EAEvE,EAAe,EAAS,EAAK,OAAQ,CAAE,kBAAmB,CAAY,EAEtE,EAAW,EAAM,KAAK,SAAW,EAAM,KAAK,WAAa,CAAC,EAAM,KAAK,QACrE,EAAW,GAAY,EAAM,QAAU,KAEvC,EAAW,EACd,GAAiB,CACZ,GACJ,EAAa,GAAQ,IAAI,CAC3B,EACA,CAAC,EAAc,CAAY,CAC7B,EAEA,OACE,EAAC,EAAD,CAAY,UAAU,eAAtB,SAAA,CACE,EAAC,EAAD,CAAO,YAAY,WAAW,eAAc,EAA5C,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAY,gBAAe,EAA3B,SAAA,CACG,EACA,GAAW,EAAC,EAAD,CAAuB,SAAU,CAAA,CACnC,CACZ,CAAA,EAAA,EAAC,EAAD,CAAA,SAAmB,CAA8B,CAAA,CACrC,CAAA,CAAA,EACd,EAAC,EAAD,CAAY,MAAO,EAAM,OAAS,GAAiB,cAAa,SAAU,EAAwB,UAAW,CAAA,EAC5G,EAAM,KAAK,SAAW,GAAoB,CAAC,CAAC,EAAM,KAAK,OAAO,QAAU,EAAC,EAAD,CAAY,OAAQ,EAAM,KAAK,MAAS,CAAA,EACjH,EAAC,EAAD,CAAW,OAAQ,CAAC,CAAC,EAAa,SAAA,CAAsB,CAAA,CACnD,CACP,CAAA,EAAA,EAAC,EAAD,CAAiB,CAAA,CACP,GAEhB,CAAC,EACD,EAAgB,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./tanstack-form-
|
|
2
|
-
//# sourceMappingURL=text-editor-field-
|
|
1
|
+
const e=require("./tanstack-form-BxqS40rB.cjs"),t=require("./text-editor-BtfyZSgR.cjs"),n=require("./field-BSLi-P0Q.cjs");let r=require("react"),i=require("react/jsx-runtime"),a=require("@tanstack/react-form");const o=(0,r.memo)(({label:o,description:s,placeholder:c,tooltip:l,helperText:u,showErrorMessage:d=!0,required:f=!1})=>{let{form:p,state:m,handleChange:h}=e.G(),g=(0,a.useStore)(p.store,({isSubmitting:e})=>e),_=m.meta.isDirty&&m.meta.isTouched&&!m.meta.isValid,v=f&&m.value===null,y=(0,r.useCallback)(e=>{g||h(e||null)},[g,h]);return(0,i.jsxs)(n.FieldGroup,{className:`gap-y-4 px-4`,children:[(0,i.jsxs)(n.Field,{orientation:`vertical`,"data-invalid":_,children:[(0,i.jsxs)(n.FieldContent,{children:[(0,i.jsxs)(n.FieldLabel,{"aria-required":v,children:[o,l&&(0,i.jsx)(n.FieldTooltip,{tooltip:l})]}),(0,i.jsx)(n.FieldDescription,{children:s})]}),(0,i.jsx)(t.t,{value:m.value??``,placeholder:c,readOnly:g,onChange:y}),m.meta.isDirty&&d&&!!m.meta.errors.length&&(0,i.jsx)(n.FieldError,{errors:m.meta.errors}),(0,i.jsx)(n.FieldNote,{isShow:!!u,children:u})]}),(0,i.jsx)(n.FieldSeparator,{})]})});o.displayName=`TextEditorField`,exports.TextEditorField=o;
|
|
2
|
+
//# sourceMappingURL=text-editor-field-CxU-KMMn.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-field-
|
|
1
|
+
{"version":3,"file":"text-editor-field-CxU-KMMn.cjs","names":["useTanStackFieldContext","FieldGroup","Field","FieldContent","FieldLabel","FieldTooltip","FieldDescription","TextEditor","FieldError","FieldNote","FieldSeparator"],"sources":["../packages/components/features/tanstack-form/components/fields/text-editor-field.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { TextEditor } from '@/components/features/text-editor';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldNote, FieldSeparator, FieldTooltip } from '../ui/field';\n\nimport type { TextEditorFieldProps as Props } from '../../types';\n\nexport const TextEditorField: React.FC<Props> = memo(({ label, description, placeholder, tooltip, helperText, showErrorMessage = true, required = false }) => {\n const { form, state, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n const _isEmpty = required && state.value === null;\n\n const onChange = useCallback(\n (html: string) => {\n if (isSubmitting) return;\n handleChange(html || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation=\"vertical\" data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <TextEditor value={state.value ?? ''} placeholder={placeholder} readOnly={isSubmitting} onChange={onChange} />\n {state.meta.isDirty && showErrorMessage && !!state.meta.errors.length && <FieldError errors={state.meta.errors} />}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n});\nTextEditorField.displayName = 'TextEditorField';\n"],"mappings":"kNAaA,MAAa,GAAA,EAAA,EAAA,KAAA,EAAyC,CAAE,QAAO,cAAa,cAAa,UAAS,aAAY,mBAAmB,GAAM,WAAW,MAAY,CAC5J,GAAM,CAAE,OAAM,QAAO,gBAAiBA,EAAAA,EAAuC,EAEvE,GAAA,EAAA,EAAA,SAAA,CAAwB,EAAK,OAAQ,CAAE,kBAAmB,CAAY,EAEtE,EAAW,EAAM,KAAK,SAAW,EAAM,KAAK,WAAa,CAAC,EAAM,KAAK,QACrE,EAAW,GAAY,EAAM,QAAU,KAEvC,GAAA,EAAA,EAAA,YAAA,CACH,GAAiB,CACZ,GACJ,EAAa,GAAQ,IAAI,CAC3B,EACA,CAAC,EAAc,CAAY,CAC7B,EAEA,OACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,UAAU,eAAtB,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAO,YAAY,WAAW,eAAc,EAA5C,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,aAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,gBAAe,EAA3B,SAAA,CACG,EACA,IAAW,EAAA,EAAA,IAAA,CAACC,EAAAA,aAAD,CAAuB,SAAU,CAAA,CACnC,CACZ,CAAA,GAAA,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAA,SAAmB,CAA8B,CAAA,CACrC,CAAA,CAAA,GACd,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAY,MAAO,EAAM,OAAS,GAAiB,cAAa,SAAU,EAAwB,UAAW,CAAA,EAC5G,EAAM,KAAK,SAAW,GAAoB,CAAC,CAAC,EAAM,KAAK,OAAO,SAAU,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAY,OAAQ,EAAM,KAAK,MAAS,CAAA,GACjH,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,OAAQ,CAAC,CAAC,EAAa,SAAA,CAAsB,CAAA,CACnD,CACP,CAAA,GAAA,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAiB,CAAA,CACP,GAEhB,CAAC,EACD,EAAgB,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as e}from"./tanstack-form-
|
|
2
|
-
//# sourceMappingURL=text-field-
|
|
1
|
+
import{G as e}from"./tanstack-form-q9hDCc0Y.mjs";import{Input as t}from"./ui/input.mjs";import{Field as n,FieldContent as r,FieldContentMain as i,FieldDescription as a,FieldError as o,FieldGroup as s,FieldLabel as c,FieldNote as l,FieldSeparator as u,FieldTooltip as d}from"./field-V2DoD8qL.mjs";import{BanIcon as f,Loader2Icon as p,XIcon as m}from"lucide-react";import{memo as h,useCallback as g,useId as _,useRef as v}from"react";import{cn as y}from"@customafk/react-toolkit/utils";import{jsx as b,jsxs as x}from"react/jsx-runtime";import{useStore as S}from"@tanstack/react-form";const C=e=>{e.key===`Enter`&&e.preventDefault()},w=h(({label:h,description:w,placeholder:T,tooltip:E,helperText:D,counter:O=!1,orientation:k=`responsive`,showClearButton:A=!1,showErrorMessage:j=!0,required:M=!1,disabled:N=!1,maxLength:P})=>{let F=_(),I=_(),L=v(null),{form:R,name:z,state:B,handleBlur:V,handleChange:H}=e(),U=S(R.store,({isSubmitting:e})=>e),W=N||U,G=B.meta.isDirty||B.meta.isTouched,K=G&&!B.meta.isValid,q=M&&B.value===null,J=B.meta.errors.length>0,Y=A&&!W&&!!B.value,X=O?B.value?.length??0:0,Z=O&&!!P&&X>=P*.8,Q=O&&!!P&&X>=P,$=O?P?`${X} / ${P} ký tự`:`${X} ký tự`:null,ee=O||G&&j&&J,te=g(({target:{value:e}})=>{O&&P&&e.length>P||H(e||null)},[O,P,H]),ne=g(()=>{H(null),L.current?.focus()},[H]);return x(s,{className:`gap-y-4 px-4`,children:[x(n,{orientation:k,"data-invalid":K,children:[x(r,{children:[x(c,{"aria-required":q,htmlFor:F,children:[h,E&&b(d,{tooltip:E})]}),w&&b(a,{children:w})]}),x(i,{children:[b(t,{ref:L,id:F,name:z,value:B.value??``,"aria-invalid":K,"aria-describedby":I,autoComplete:`off`,placeholder:T,autoCapitalize:`none`,autoCorrect:`off`,disabled:W,className:y(`pr-6`,W&&`pointer-events-none bg-muted-muted opacity-60`),onBlur:V,onChange:te,onKeyDown:C}),Y&&b(`button`,{type:`button`,"aria-label":`Xóa`,className:`absolute inset-e-1 top-2.5 flex size-4 cursor-pointer items-center justify-center rounded-md text-text-positive-weak outline-none transition-[color,transform] hover:text-text-positive focus-visible:text-primary-strong focus-visible:[&>svg]:scale-125 [&>svg]:size-3.5 [&>svg]:transition-transform`,onClick:ne,children:b(m,{"aria-hidden":`true`})}),U&&b(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak`,children:b(p,{size:14,className:`animate-spin text-primary-strong`})}),!Y&&G&&j&&J&&b(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong`,children:b(f,{"aria-hidden":`true`,size:14})}),ee&&x(`div`,{className:`my-1 flex w-full items-start justify-between gap-x-2`,children:[G&&j?b(o,{id:I,className:`flex-1`,errors:B.meta.errors}):b(`div`,{}),O&&b(`p`,{className:y(`h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors`,Q?`font-medium text-danger-strong`:Z?`text-warning-strong`:`text-text-positive-weak`),children:$})]}),b(l,{isShow:!!D,children:D})]})]}),b(u,{})]})});w.displayName=`TextField`;export{w as TextField};
|
|
2
|
+
//# sourceMappingURL=text-field-B3xlvEUN.mjs.map
|