@customafk/lunas-ui 0.2.65 → 0.2.67
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 +41 -0
- package/dist/FeatureDeveloping-zuTTDIh_.d.mts +41 -0
- package/dist/FeatureFixing-DYQlgHPk.d.cts +41 -0
- package/dist/FeatureFixing-DYQlgHPk.d.mts +41 -0
- package/dist/LoginPage-vMXvwtxf.d.cts +53 -0
- package/dist/LoginPage-vMXvwtxf.d.mts +53 -0
- package/dist/NotAuthorized-CZIQ6EaA.d.cts +41 -0
- package/dist/NotAuthorized-CZIQ6EaA.d.mts +41 -0
- package/dist/NotFound-CRSKxhV8.d.cts +41 -0
- package/dist/NotFound-CRSKxhV8.d.mts +41 -0
- package/dist/RegisterPage-BBtpEzvL.d.cts +50 -0
- package/dist/RegisterPage-BBtpEzvL.d.mts +50 -0
- package/dist/VerifyEmailPage-CsmIeYLu.d.cts +62 -0
- package/dist/VerifyEmailPage-CsmIeYLu.d.mts +62 -0
- package/dist/{action-submit-3kZ7JOop.cjs → action-submit-42PxGLsR.cjs} +2 -2
- package/dist/{action-submit-3kZ7JOop.cjs.map → action-submit-42PxGLsR.cjs.map} +1 -1
- package/dist/{action-submit-Dg5GvYz5.mjs → action-submit-SviPJW3i.mjs} +2 -2
- package/dist/{action-submit-Dg5GvYz5.mjs.map → action-submit-SviPJW3i.mjs.map} +1 -1
- package/dist/{actions-form-CE_enCgE.cjs → actions-form-Bo46j_dH.cjs} +2 -2
- package/dist/{actions-form-CE_enCgE.cjs.map → actions-form-Bo46j_dH.cjs.map} +1 -1
- package/dist/{actions-form-BL_B81Vg.mjs → actions-form-QdAsKwcQ.mjs} +2 -2
- package/dist/{actions-form-BL_B81Vg.mjs.map → actions-form-QdAsKwcQ.mjs.map} +1 -1
- package/dist/activity-heatmap-chart-DufvFndI.mjs +2 -0
- package/dist/activity-heatmap-chart-DufvFndI.mjs.map +1 -0
- package/dist/activity-heatmap-chart-gDcvIAK_.cjs +2 -0
- package/dist/activity-heatmap-chart-gDcvIAK_.cjs.map +1 -0
- package/dist/add-new-DkBwXh0Q.d.cts +16 -0
- package/dist/add-new-DkBwXh0Q.d.mts +16 -0
- package/dist/alert-dialog-Cdhz7jSj.d.cts +88 -0
- package/dist/alert-dialog-Cdhz7jSj.d.mts +88 -0
- package/dist/analysis-panel-BD2QvOth.mjs +2 -0
- package/dist/analysis-panel-BD2QvOth.mjs.map +1 -0
- package/dist/analysis-panel-UlC7cvO2.cjs +2 -0
- package/dist/analysis-panel-UlC7cvO2.cjs.map +1 -0
- package/dist/aspect-ratio-huscluwJ.d.cts +22 -0
- package/dist/aspect-ratio-huscluwJ.d.mts +22 -0
- package/dist/avatar-BpeFwSkQ.d.cts +33 -0
- package/dist/avatar-BpeFwSkQ.d.mts +33 -0
- package/dist/avatar-name-display-BrpnTqa_.mjs +2 -0
- package/dist/avatar-name-display-BrpnTqa_.mjs.map +1 -0
- package/dist/avatar-name-display-CLi1DJUs.cjs +2 -0
- package/dist/avatar-name-display-CLi1DJUs.cjs.map +1 -0
- package/dist/{badge-D0InQSvM.d.cts → badge-MRT40pxM.d.cts} +3 -3
- package/dist/{badge-D0InQSvM.d.mts → badge-MRT40pxM.d.mts} +3 -3
- package/dist/badge-display-Bs0QeCJt.cjs +2 -0
- package/dist/badge-display-Bs0QeCJt.cjs.map +1 -0
- package/dist/badge-display-Dg5XM66P.mjs +2 -0
- package/dist/badge-display-Dg5XM66P.mjs.map +1 -0
- package/dist/boolean-display-BnN32_Jd.cjs +2 -0
- package/dist/boolean-display-BnN32_Jd.cjs.map +1 -0
- package/dist/boolean-display-DVn3UGuZ.mjs +2 -0
- package/dist/boolean-display-DVn3UGuZ.mjs.map +1 -0
- package/dist/breadcrumb-CSpScKZm.d.cts +69 -0
- package/dist/breadcrumb-CSpScKZm.d.mts +69 -0
- package/dist/{button-DIqm3YRo.d.cts → button-Bk4Y6_9I.d.cts} +3 -3
- package/dist/{button-DIqm3YRo.d.mts → button-Bk4Y6_9I.d.mts} +3 -3
- package/dist/button-group-Cd5m5G3p.d.mts +48 -0
- package/dist/button-group-CiKhLVCg.d.cts +48 -0
- package/dist/calendar-DPKt7D3w.d.mts +43 -0
- package/dist/calendar-stv2bJv0.d.cts +43 -0
- package/dist/candlestick-chart-CiBiCU3y.mjs +2 -0
- package/dist/candlestick-chart-CiBiCU3y.mjs.map +1 -0
- package/dist/candlestick-chart-CqmRkfXj.cjs +2 -0
- package/dist/candlestick-chart-CqmRkfXj.cjs.map +1 -0
- package/dist/card-DOnx7RKz.d.cts +60 -0
- package/dist/card-DOnx7RKz.d.mts +60 -0
- package/dist/cards/grid-product-card.d.cts +2 -30
- package/dist/cards/grid-product-card.d.mts +2 -30
- package/dist/cards/product-card.d.cts +2 -30
- package/dist/cards/product-card.d.mts +2 -30
- package/dist/cards/simple-card.d.cts +2 -29
- package/dist/cards/simple-card.d.mts +2 -29
- package/dist/carousel-CV3IZ96x.d.mts +70 -0
- package/dist/carousel-c2XuzmYN.d.cts +70 -0
- package/dist/chart-sYFksFMk.d.cts +80 -0
- package/dist/chart-sYFksFMk.d.mts +80 -0
- package/dist/checkbox-XfLNnG0S.d.cts +24 -0
- package/dist/checkbox-XfLNnG0S.d.mts +24 -0
- package/dist/{checkbox-field-DdeohRmi.cjs → checkbox-field-B1vCz-Wf.cjs} +2 -2
- package/dist/{checkbox-field-DdeohRmi.cjs.map → checkbox-field-B1vCz-Wf.cjs.map} +1 -1
- package/dist/{checkbox-field-CRcfuDu1.mjs → checkbox-field-FqCe38_D.mjs} +2 -2
- package/dist/{checkbox-field-CRcfuDu1.mjs.map → checkbox-field-FqCe38_D.mjs.map} +1 -1
- package/dist/{cms-layout-SubgSF72.cjs → cms-layout-CGGJqbr0.cjs} +2 -2
- package/dist/{cms-layout-SubgSF72.cjs.map → cms-layout-CGGJqbr0.cjs.map} +1 -1
- package/dist/{cms-layout-CuF5ahpj.mjs → cms-layout-ePySxIQN.mjs} +2 -2
- package/dist/{cms-layout-CuF5ahpj.mjs.map → cms-layout-ePySxIQN.mjs.map} +1 -1
- package/dist/collapsible-liIHmFuw.d.cts +32 -0
- package/dist/collapsible-liIHmFuw.d.mts +32 -0
- package/dist/combobox-field-D6fiCcvU.mjs +2 -0
- package/dist/{combobox-field-BGChwajc.mjs.map → combobox-field-D6fiCcvU.mjs.map} +1 -1
- package/dist/{combobox-field-D9NdSih1.cjs → combobox-field-DLpH6J9H.cjs} +2 -2
- package/dist/{combobox-field-D9NdSih1.cjs.map → combobox-field-DLpH6J9H.cjs.map} +1 -1
- package/dist/command-Bb6SneVI.d.mts +87 -0
- package/dist/command-CHSJVU9o.d.cts +87 -0
- package/dist/confirm-dialog-B8Vu0z8S.d.cts +142 -0
- package/dist/confirm-dialog-B8Vu0z8S.d.mts +142 -0
- package/dist/context-menu-BOlGSuep.d.cts +123 -0
- package/dist/context-menu-BOlGSuep.d.mts +123 -0
- package/dist/conversion-funnel-chart-CW_zDfKS.mjs +2 -0
- package/dist/conversion-funnel-chart-CW_zDfKS.mjs.map +1 -0
- package/dist/conversion-funnel-chart-r2m2QbiQ.cjs +2 -0
- package/dist/conversion-funnel-chart-r2m2QbiQ.cjs.map +1 -0
- package/dist/correlation-scatter-chart-Djtt7NU7.mjs +2 -0
- package/dist/correlation-scatter-chart-Djtt7NU7.mjs.map +1 -0
- package/dist/correlation-scatter-chart-HF48YUIB.cjs +2 -0
- package/dist/correlation-scatter-chart-HF48YUIB.cjs.map +1 -0
- package/dist/country-C8QijcHF.d.mts +21 -0
- package/dist/country-CJIaO0I7.d.cts +21 -0
- package/dist/currency-display-CKLQ_lxN.mjs +2 -0
- package/dist/currency-display-CKLQ_lxN.mjs.map +1 -0
- package/dist/currency-display-CZ6PJAzu.cjs +2 -0
- package/dist/currency-display-CZ6PJAzu.cjs.map +1 -0
- package/dist/data-display/country.d.cts +2 -21
- package/dist/data-display/country.d.mts +2 -21
- package/dist/data-display/data-list.d.cts +2 -38
- package/dist/data-display/data-list.d.mts +2 -38
- package/dist/data-display/date-tooltip.d.cts +2 -18
- package/dist/data-display/date-tooltip.d.mts +2 -18
- package/dist/data-display/date.d.cts +2 -39
- package/dist/data-display/date.d.mts +2 -39
- package/dist/data-display/empty.d.cts +2 -19
- package/dist/data-display/empty.d.mts +2 -19
- package/dist/data-display/name.d.cts +2 -18
- package/dist/data-display/name.d.mts +2 -18
- package/dist/data-display/phone-number.d.cts +2 -18
- package/dist/data-display/phone-number.d.mts +2 -18
- package/dist/data-display/role-badge.d.cts +2 -21
- package/dist/data-display/role-badge.d.mts +2 -21
- package/dist/data-display/statistic.d.cts +2 -45
- package/dist/data-display/statistic.d.mts +2 -45
- package/dist/data-display/user.d.cts +2 -20
- package/dist/data-display/user.d.mts +2 -20
- package/dist/data-list-Cg510z2m.d.cts +38 -0
- package/dist/data-list-Cg510z2m.d.mts +38 -0
- package/dist/date-KANPBbN4.d.cts +39 -0
- package/dist/date-KANPBbN4.d.mts +39 -0
- package/dist/date-display-BQOVmN7S.cjs +2 -0
- package/dist/date-display-BQOVmN7S.cjs.map +1 -0
- package/dist/date-display-BrCdJkmq.mjs +2 -0
- package/dist/date-display-BrCdJkmq.mjs.map +1 -0
- package/dist/{date-field-Dm4ki1HS.mjs → date-field-Cxbrc0Vl.mjs} +2 -2
- package/dist/{date-field-Dm4ki1HS.mjs.map → date-field-Cxbrc0Vl.mjs.map} +1 -1
- package/dist/{date-field-BqAX4M_h.cjs → date-field-RvEB9F1r.cjs} +2 -2
- package/dist/{date-field-BqAX4M_h.cjs.map → date-field-RvEB9F1r.cjs.map} +1 -1
- package/dist/date-tooltip-DptxGOj_.d.cts +18 -0
- package/dist/date-tooltip-DptxGOj_.d.mts +18 -0
- package/dist/description-display-BQFLzI2g.mjs +2 -0
- package/dist/description-display-BQFLzI2g.mjs.map +1 -0
- package/dist/description-display-DnDAB3a1.cjs +2 -0
- package/dist/description-display-DnDAB3a1.cjs.map +1 -0
- package/dist/{dialog-form-ClWBZbUN.mjs → dialog-form-C0W5C0u9.mjs} +2 -2
- package/dist/{dialog-form-ClWBZbUN.mjs.map → dialog-form-C0W5C0u9.mjs.map} +1 -1
- package/dist/{dialog-form-DN-NlQFO.cjs → dialog-form-CkNCwzWG.cjs} +2 -2
- package/dist/{dialog-form-DN-NlQFO.cjs.map → dialog-form-CkNCwzWG.cjs.map} +1 -1
- package/dist/dialogs/confirm-dialog.d.cts +2 -142
- package/dist/dialogs/confirm-dialog.d.mts +2 -142
- 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 +50 -38
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +50 -38
- 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 -1
- package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
- package/dist/dialogs/detail-dialog/index.d.cts +2 -36
- package/dist/dialogs/detail-dialog/index.d.mts +2 -36
- package/dist/dialogs/detail-dialog/index.mjs +1 -1
- package/dist/dialogs/detail-dialog/index.mjs.map +1 -1
- package/dist/dialogs/error-dialog.d.cts +2 -22
- package/dist/dialogs/error-dialog.d.mts +2 -22
- package/dist/dialogs/loading-dialog.d.cts +2 -19
- package/dist/dialogs/loading-dialog.d.mts +2 -19
- package/dist/donut-chart-CsPPKy0G.cjs +2 -0
- package/dist/donut-chart-CsPPKy0G.cjs.map +1 -0
- package/dist/donut-chart-eKZjuzW0.mjs +2 -0
- package/dist/donut-chart-eKZjuzW0.mjs.map +1 -0
- package/dist/drawer-Dwx99ff3.d.cts +70 -0
- package/dist/drawer-Dwx99ff3.d.mts +70 -0
- package/dist/dropdown-menu-CcMccVns.d.cts +125 -0
- package/dist/dropdown-menu-CcMccVns.d.mts +125 -0
- package/dist/edit-button-0_FLZoT3.cjs +2 -0
- package/dist/edit-button-0_FLZoT3.cjs.map +1 -0
- package/dist/edit-button-DmMFMzG0.mjs +2 -0
- package/dist/edit-button-DmMFMzG0.mjs.map +1 -0
- package/dist/edit-qfS5kOtM.d.cts +16 -0
- package/dist/edit-qfS5kOtM.d.mts +16 -0
- package/dist/email-display-D6ZgA_en.cjs +2 -0
- package/dist/email-display-D6ZgA_en.cjs.map +1 -0
- package/dist/email-display-m745lUts.mjs +2 -0
- package/dist/email-display-m745lUts.mjs.map +1 -0
- package/dist/{email-field-lDd9ouFN.cjs → email-field-BErx3liY.cjs} +2 -2
- package/dist/{email-field-lDd9ouFN.cjs.map → email-field-BErx3liY.cjs.map} +1 -1
- package/dist/{email-field-DZNR_JbT.mjs → email-field-BtcdBWL4.mjs} +2 -2
- package/dist/{email-field-DZNR_JbT.mjs.map → email-field-BtcdBWL4.mjs.map} +1 -1
- package/dist/empty-CaNJjp05.d.cts +65 -0
- package/dist/empty-CaNJjp05.d.mts +65 -0
- package/dist/empty-ClQptIZH.d.cts +19 -0
- package/dist/empty-ClQptIZH.d.mts +19 -0
- package/dist/error-dialog-D4jOPhmw.d.cts +22 -0
- package/dist/error-dialog-D4jOPhmw.d.mts +22 -0
- package/dist/features/charts/index.cjs +1 -1
- package/dist/features/charts/index.cjs.map +1 -1
- package/dist/features/charts/index.d.cts +2 -904
- package/dist/features/charts/index.d.mts +2 -904
- package/dist/features/charts/index.mjs +1 -1
- package/dist/features/charts/index.mjs.map +1 -1
- package/dist/features/descriptions/index.cjs +1 -1
- package/dist/features/descriptions/index.cjs.map +1 -1
- package/dist/features/descriptions/index.d.cts +2 -231
- package/dist/features/descriptions/index.d.mts +2 -231
- package/dist/features/descriptions/index.mjs +1 -1
- package/dist/features/descriptions/index.mjs.map +1 -1
- package/dist/features/search-modal/index.d.cts +2 -14
- package/dist/features/search-modal/index.d.mts +2 -14
- package/dist/features/tables/index.cjs +1 -1
- package/dist/features/tables/index.d.cts +2 -2
- package/dist/features/tables/index.d.mts +2 -2
- package/dist/features/tables/index.mjs +1 -1
- package/dist/features/tanstack-form/index.cjs +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/file-uploader-U64lH0zG.d.cts +101 -0
- package/dist/file-uploader-U64lH0zG.d.mts +101 -0
- package/dist/filter-Bb9_Blk3.cjs +2 -0
- package/dist/filter-Bb9_Blk3.cjs.map +1 -0
- package/dist/filter-CG6wQHRd.mjs +2 -0
- package/dist/filter-CG6wQHRd.mjs.map +1 -0
- package/dist/flex-bw7U4hXn.d.cts +114 -0
- package/dist/flex-bw7U4hXn.d.mts +114 -0
- package/dist/form-CMP15S4r.d.cts +109 -0
- package/dist/form-CMP15S4r.d.mts +109 -0
- package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs +2 -0
- package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs.map +1 -0
- package/dist/gain-loss-bar-chart-FUzN7DxF.cjs +2 -0
- package/dist/gain-loss-bar-chart-FUzN7DxF.cjs.map +1 -0
- package/dist/google-Bl-jBW8L.d.cts +48 -0
- package/dist/google-Bl-jBW8L.d.mts +48 -0
- package/dist/grid-i7Oz2Izf.d.cts +19 -0
- package/dist/grid-i7Oz2Izf.d.mts +19 -0
- package/dist/grid-product-card-bpADqDOQ.d.cts +30 -0
- package/dist/grid-product-card-bpADqDOQ.d.mts +30 -0
- package/dist/hover-card-Prwm-0Q4.d.cts +35 -0
- package/dist/hover-card-Prwm-0Q4.d.mts +35 -0
- package/dist/image-Cln0r7Eb.d.cts +27 -0
- package/dist/image-Cln0r7Eb.d.mts +27 -0
- package/dist/{index-C4isgHWG.d.cts → index-BRE7tL8d.d.cts} +121 -500
- package/dist/index-C2HFO3a9.d.mts +231 -0
- package/dist/index-C9eXmnvk.d.cts +36 -0
- package/dist/index-C9eXmnvk.d.mts +36 -0
- package/dist/index-CBntsHIg.d.cts +520 -0
- package/dist/index-CBntsHIg.d.mts +520 -0
- package/dist/{index-DOaKN0wJ.d.mts → index-D9bKlLiM.d.cts} +2 -22
- package/dist/{index-DOaKN0wJ.d.cts → index-D9bKlLiM.d.mts} +2 -22
- package/dist/index-DJiiPHPf.d.cts +59 -0
- package/dist/index-DJiiPHPf.d.mts +59 -0
- package/dist/index-DtIL69PB.d.cts +14 -0
- package/dist/index-DtIL69PB.d.mts +14 -0
- package/dist/{index-C8W56XKm.d.mts → index-DvoLzsh0.d.mts} +121 -500
- package/dist/index-fZChR7MS.d.cts +231 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +91 -91
- package/dist/index.d.mts +91 -91
- package/dist/index.mjs +1 -1
- package/dist/indexed-performance-line-chart-CT79KOM6.cjs +2 -0
- package/dist/indexed-performance-line-chart-CT79KOM6.cjs.map +1 -0
- package/dist/indexed-performance-line-chart-D7F-rIMv.mjs +2 -0
- package/dist/indexed-performance-line-chart-D7F-rIMv.mjs.map +1 -0
- package/dist/{input-go3H4EQz.d.cts → input-BieGEIDf.d.cts} +2 -2
- package/dist/{input-go3H4EQz.d.mts → input-BieGEIDf.d.mts} +2 -2
- package/dist/input-otp-6hJfhBHX.d.cts +56 -0
- package/dist/input-otp-6hJfhBHX.d.mts +56 -0
- package/dist/item-DTR2f2CX.d.cts +99 -0
- package/dist/item-cIhkI3ZI.d.mts +99 -0
- package/dist/label-DPG_GY7h.d.cts +22 -0
- package/dist/label-DPG_GY7h.d.mts +22 -0
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/layouts/flex.d.cts +2 -114
- package/dist/layouts/flex.d.mts +2 -114
- package/dist/layouts/grid.d.cts +2 -19
- package/dist/layouts/grid.d.mts +2 -19
- package/dist/layouts/payment-layout/index.cjs +1 -1
- package/dist/layouts/payment-layout/index.d.cts +2 -59
- package/dist/layouts/payment-layout/index.d.mts +2 -59
- package/dist/layouts/payment-layout/index.mjs +1 -1
- package/dist/list-display-8Jx6G5nk.mjs +2 -0
- package/dist/list-display-8Jx6G5nk.mjs.map +1 -0
- package/dist/list-display-BQjNDttz.cjs +2 -0
- package/dist/list-display-BQjNDttz.cjs.map +1 -0
- package/dist/loading-dialog-C73EJx9s.d.cts +19 -0
- package/dist/loading-dialog-C73EJx9s.d.mts +19 -0
- package/dist/menubar-CFrn3S96.d.cts +133 -0
- package/dist/menubar-CFrn3S96.d.mts +133 -0
- package/dist/metric-radar-chart-6LTGQHsL.mjs +2 -0
- package/dist/metric-radar-chart-6LTGQHsL.mjs.map +1 -0
- package/dist/metric-radar-chart-DwgbXgJX.cjs +2 -0
- package/dist/metric-radar-chart-DwgbXgJX.cjs.map +1 -0
- package/dist/mirrored-bar-chart-BT7AYPJB.mjs +2 -0
- package/dist/mirrored-bar-chart-BT7AYPJB.mjs.map +1 -0
- package/dist/mirrored-bar-chart-BwjtExjh.cjs +2 -0
- package/dist/mirrored-bar-chart-BwjtExjh.cjs.map +1 -0
- package/dist/more-button-BKBcXz6E.mjs +2 -0
- package/dist/more-button-BKBcXz6E.mjs.map +1 -0
- package/dist/more-button-RYvZgYiu.cjs +2 -0
- package/dist/more-button-RYvZgYiu.cjs.map +1 -0
- package/dist/multi-select-BbiKgAYs.d.cts +116 -0
- package/dist/multi-select-BoBHt_Z9.d.mts +116 -0
- package/dist/name-7aoM5rAW.d.cts +18 -0
- package/dist/name-7aoM5rAW.d.mts +18 -0
- package/dist/name-display-BBJoNnRG.mjs +2 -0
- package/dist/name-display-BBJoNnRG.mjs.map +1 -0
- package/dist/name-display-scAMZdyr.cjs +2 -0
- package/dist/name-display-scAMZdyr.cjs.map +1 -0
- package/dist/navigation-menu-B1BY9Zll.d.cts +73 -0
- package/dist/navigation-menu-B1BY9Zll.d.mts +73 -0
- package/dist/{number-field-Baj9Yhiv.mjs → number-field-BjVjf6s4.mjs} +2 -2
- package/dist/{number-field-Baj9Yhiv.mjs.map → number-field-BjVjf6s4.mjs.map} +1 -1
- package/dist/{number-field-BqeSbMvE.cjs → number-field-DmKh7bbY.cjs} +2 -2
- package/dist/{number-field-BqeSbMvE.cjs.map → number-field-DmKh7bbY.cjs.map} +1 -1
- package/dist/orders-bar-chart-9RmtP6In.cjs +2 -0
- package/dist/orders-bar-chart-9RmtP6In.cjs.map +1 -0
- package/dist/orders-bar-chart-DQhJGmwY.mjs +2 -0
- package/dist/orders-bar-chart-DQhJGmwY.mjs.map +1 -0
- package/dist/pages/FeatureDeveloping.d.cts +2 -41
- package/dist/pages/FeatureDeveloping.d.mts +2 -41
- package/dist/pages/FeatureFixing.d.cts +2 -41
- package/dist/pages/FeatureFixing.d.mts +2 -41
- package/dist/pages/LoginPage.cjs +1 -1
- package/dist/pages/LoginPage.cjs.map +1 -1
- package/dist/pages/LoginPage.d.cts +2 -53
- package/dist/pages/LoginPage.d.mts +2 -53
- package/dist/pages/LoginPage.mjs +1 -1
- package/dist/pages/LoginPage.mjs.map +1 -1
- package/dist/pages/NotAuthorized.d.cts +2 -41
- package/dist/pages/NotAuthorized.d.mts +2 -41
- package/dist/pages/NotFound.d.cts +2 -41
- package/dist/pages/NotFound.d.mts +2 -41
- package/dist/pages/RegisterPage.cjs +1 -1
- package/dist/pages/RegisterPage.cjs.map +1 -1
- package/dist/pages/RegisterPage.d.cts +2 -50
- package/dist/pages/RegisterPage.d.mts +2 -50
- package/dist/pages/RegisterPage.mjs +1 -1
- package/dist/pages/RegisterPage.mjs.map +1 -1
- package/dist/pages/VerifyEmailPage.d.cts +2 -62
- package/dist/pages/VerifyEmailPage.d.mts +2 -62
- package/dist/pagination-B2fyP0J2.d.cts +64 -0
- package/dist/pagination-DY0PBCnI.d.mts +64 -0
- package/dist/paragraph-BTmvVS1S.d.mts +46 -0
- package/dist/paragraph-DbYYv0A0.d.cts +46 -0
- package/dist/{password-field-fzpU42sV.mjs → password-field-C5FsQUa8.mjs} +2 -2
- package/dist/{password-field-fzpU42sV.mjs.map → password-field-C5FsQUa8.mjs.map} +1 -1
- package/dist/{password-field-Cq0S949S.cjs → password-field-gHYDiXWY.cjs} +2 -2
- package/dist/{password-field-Cq0S949S.cjs.map → password-field-gHYDiXWY.cjs.map} +1 -1
- package/dist/payment-layout-Cb-Q8KD2.cjs +2 -0
- package/dist/{payment-layout-BLrXT-oc.cjs.map → payment-layout-Cb-Q8KD2.cjs.map} +1 -1
- package/dist/{payment-layout-Dsz6wYT1.mjs → payment-layout-DS5CEH1h.mjs} +2 -2
- package/dist/{payment-layout-Dsz6wYT1.mjs.map → payment-layout-DS5CEH1h.mjs.map} +1 -1
- package/dist/permalink-CZ3g9daG.mjs +2 -0
- package/dist/permalink-CZ3g9daG.mjs.map +1 -0
- package/dist/permalink-DeeEKhfc.cjs +2 -0
- package/dist/permalink-DeeEKhfc.cjs.map +1 -0
- package/dist/phone-number-6b_pkGI1.d.cts +18 -0
- package/dist/phone-number-6b_pkGI1.d.mts +18 -0
- package/dist/phone-number-C43z68gT.mjs +2 -0
- package/dist/phone-number-C43z68gT.mjs.map +1 -0
- package/dist/phone-number-DhThJwd6.cjs +2 -0
- package/dist/phone-number-DhThJwd6.cjs.map +1 -0
- package/dist/popover-CdOCi0xg.d.cts +50 -0
- package/dist/popover-CdOCi0xg.d.mts +50 -0
- package/dist/{popover-form-DNbBGWVF.mjs → popover-form-B2taDBAh.mjs} +2 -2
- package/dist/{popover-form-DNbBGWVF.mjs.map → popover-form-B2taDBAh.mjs.map} +1 -1
- package/dist/{popover-form-KLmew1Vd.cjs → popover-form-_hQQpfAB.cjs} +2 -2
- package/dist/{popover-form-KLmew1Vd.cjs.map → popover-form-_hQQpfAB.cjs.map} +1 -1
- package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs +2 -0
- package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs.map +1 -0
- package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs +2 -0
- package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs.map +1 -0
- package/dist/price-range-area-chart-BW6RQb_9.cjs +2 -0
- package/dist/price-range-area-chart-BW6RQb_9.cjs.map +1 -0
- package/dist/price-range-area-chart-Dy01mhWJ.mjs +2 -0
- package/dist/price-range-area-chart-Dy01mhWJ.mjs.map +1 -0
- package/dist/product-card-CvXLXbpV.d.cts +30 -0
- package/dist/product-card-CvXLXbpV.d.mts +30 -0
- package/dist/progress-Bp-5keO8.d.cts +21 -0
- package/dist/progress-Bp-5keO8.d.mts +21 -0
- package/dist/progress-display-B45TkUcr.cjs +2 -0
- package/dist/progress-display-B45TkUcr.cjs.map +1 -0
- package/dist/progress-display-DvV-YhkE.mjs +2 -0
- package/dist/progress-display-DvV-YhkE.mjs.map +1 -0
- package/dist/{radio-group-field-DjzD3i-f.cjs → radio-group-field-McpjpLW-.cjs} +2 -2
- package/dist/{radio-group-field-DjzD3i-f.cjs.map → radio-group-field-McpjpLW-.cjs.map} +1 -1
- package/dist/{radio-group-field-Ps8yHpnH.mjs → radio-group-field-ZqMrf9Dx.mjs} +2 -2
- package/dist/{radio-group-field-Ps8yHpnH.mjs.map → radio-group-field-ZqMrf9Dx.mjs.map} +1 -1
- package/dist/radio-group-ycQQrPGn.d.cts +35 -0
- package/dist/radio-group-ycQQrPGn.d.mts +35 -0
- package/dist/refresh-BiyrZAXL.d.cts +16 -0
- package/dist/refresh-BiyrZAXL.d.mts +16 -0
- package/dist/remove-button-B3qFw-M5.cjs +2 -0
- package/dist/remove-button-B3qFw-M5.cjs.map +1 -0
- package/dist/remove-button-Db5oSj4h.mjs +2 -0
- package/dist/remove-button-Db5oSj4h.mjs.map +1 -0
- package/dist/{resizable-BLfxHCf4.d.cts → resizable-CAyWR1At.d.cts} +2 -2
- package/dist/{resizable-BLfxHCf4.d.mts → resizable-CAyWR1At.d.mts} +2 -2
- package/dist/revenue-area-chart-BwzeTRzD.mjs +2 -0
- package/dist/revenue-area-chart-BwzeTRzD.mjs.map +1 -0
- package/dist/revenue-area-chart-w2FZCl_7.cjs +2 -0
- package/dist/revenue-area-chart-w2FZCl_7.cjs.map +1 -0
- package/dist/revenue-orders-composed-chart-BttOWYGt.cjs +2 -0
- package/dist/revenue-orders-composed-chart-BttOWYGt.cjs.map +1 -0
- package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs +2 -0
- package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs.map +1 -0
- package/dist/role-badge-Bl4Rimpk.d.mts +21 -0
- package/dist/role-badge-IdZW0tsN.d.cts +21 -0
- package/dist/sales-target-radial-chart-BFLxBT2m.mjs +2 -0
- package/dist/sales-target-radial-chart-BFLxBT2m.mjs.map +1 -0
- package/dist/sales-target-radial-chart-BoxSk7hW.cjs +2 -0
- package/dist/sales-target-radial-chart-BoxSk7hW.cjs.map +1 -0
- package/dist/sankey-flow-chart-CDUqIRMZ.cjs +2 -0
- package/dist/sankey-flow-chart-CDUqIRMZ.cjs.map +1 -0
- package/dist/sankey-flow-chart-bQ3Dffet.mjs +2 -0
- package/dist/sankey-flow-chart-bQ3Dffet.mjs.map +1 -0
- package/dist/scroll-area-PbkqIAaH.d.cts +35 -0
- package/dist/scroll-area-PbkqIAaH.d.mts +35 -0
- package/dist/search-input-Bq4enQzR.d.cts +27 -0
- package/dist/search-input-D51_mAY-.d.mts +27 -0
- package/dist/select-B5j4WvPM.d.cts +74 -0
- package/dist/select-B5j4WvPM.d.mts +74 -0
- package/dist/{select-field-B4eU65OI.cjs → select-field-DG8sQ5iN.cjs} +2 -2
- package/dist/{select-field-B4eU65OI.cjs.map → select-field-DG8sQ5iN.cjs.map} +1 -1
- package/dist/{select-field-D6Dw-Jwg.mjs → select-field-Kq5iQCRQ.mjs} +2 -2
- package/dist/{select-field-D6Dw-Jwg.mjs.map → select-field-Kq5iQCRQ.mjs.map} +1 -1
- package/dist/separator-D6_fMJtM.d.cts +32 -0
- package/dist/separator-D6_fMJtM.d.mts +32 -0
- package/dist/sheet-cHLLSvvt.d.cts +66 -0
- package/dist/sheet-cHLLSvvt.d.mts +66 -0
- package/dist/sidebar-core-Bh0dZXsm.mjs +2 -0
- package/dist/sidebar-core-Bh0dZXsm.mjs.map +1 -0
- package/dist/sidebar-core-DQE6ymo4.cjs +2 -0
- package/dist/sidebar-core-DQE6ymo4.cjs.map +1 -0
- package/dist/{simple-array-field-Bcs2pHdp.cjs → simple-array-field-4paKpxXk.cjs} +2 -2
- package/dist/{simple-array-field-Bcs2pHdp.cjs.map → simple-array-field-4paKpxXk.cjs.map} +1 -1
- package/dist/{simple-array-field-9oZ-Smzp.mjs → simple-array-field-C5XdemXa.mjs} +2 -2
- package/dist/{simple-array-field-9oZ-Smzp.mjs.map → simple-array-field-C5XdemXa.mjs.map} +1 -1
- package/dist/{simple-boolean-field-C-qq6Vlt.cjs → simple-boolean-field-B9T_fHk9.cjs} +2 -2
- package/dist/{simple-boolean-field-C-qq6Vlt.cjs.map → simple-boolean-field-B9T_fHk9.cjs.map} +1 -1
- package/dist/{simple-boolean-field-CkJUMxNU.mjs → simple-boolean-field-DpJ-fSQk.mjs} +2 -2
- package/dist/{simple-boolean-field-CkJUMxNU.mjs.map → simple-boolean-field-DpJ-fSQk.mjs.map} +1 -1
- package/dist/simple-card-6P377r4A.d.cts +29 -0
- package/dist/simple-card-6P377r4A.d.mts +29 -0
- package/dist/{simple-combobox-field-5dfMd49B.mjs → simple-combobox-field-Ch4SBHCH.mjs} +2 -2
- package/dist/{simple-combobox-field-5dfMd49B.mjs.map → simple-combobox-field-Ch4SBHCH.mjs.map} +1 -1
- package/dist/{simple-combobox-field-BtmQGEo5.cjs → simple-combobox-field-ChMKk7xp.cjs} +2 -2
- package/dist/{simple-combobox-field-BtmQGEo5.cjs.map → simple-combobox-field-ChMKk7xp.cjs.map} +1 -1
- package/dist/{simple-date-field-LVfNhVJi.cjs → simple-date-field-BGGlsHzG.cjs} +2 -2
- package/dist/{simple-date-field-LVfNhVJi.cjs.map → simple-date-field-BGGlsHzG.cjs.map} +1 -1
- package/dist/{simple-date-field-BXoLb496.mjs → simple-date-field-CVKqIrEs.mjs} +2 -2
- package/dist/{simple-date-field-BXoLb496.mjs.map → simple-date-field-CVKqIrEs.mjs.map} +1 -1
- package/dist/{simple-email-field-rZZIXu7S.mjs → simple-email-field-98w0846B.mjs} +2 -2
- package/dist/{simple-email-field-rZZIXu7S.mjs.map → simple-email-field-98w0846B.mjs.map} +1 -1
- package/dist/{simple-email-field-QVUrm8f7.cjs → simple-email-field-DYqCWprP.cjs} +2 -2
- package/dist/{simple-email-field-QVUrm8f7.cjs.map → simple-email-field-DYqCWprP.cjs.map} +1 -1
- package/dist/{simple-number-field-P9PTwcs4.cjs → simple-number-field-otvv2xq-.cjs} +2 -2
- package/dist/{simple-number-field-P9PTwcs4.cjs.map → simple-number-field-otvv2xq-.cjs.map} +1 -1
- package/dist/{simple-number-field-PJAyAOMO.mjs → simple-number-field-zF3oqS8d.mjs} +2 -2
- package/dist/{simple-number-field-PJAyAOMO.mjs.map → simple-number-field-zF3oqS8d.mjs.map} +1 -1
- package/dist/{simple-password-field-BEuFXAsk.mjs → simple-password-field-CuC10c70.mjs} +2 -2
- package/dist/{simple-password-field-BEuFXAsk.mjs.map → simple-password-field-CuC10c70.mjs.map} +1 -1
- package/dist/{simple-password-field-BW6YkfSP.cjs → simple-password-field-D2UMmghM.cjs} +2 -2
- package/dist/{simple-password-field-BW6YkfSP.cjs.map → simple-password-field-D2UMmghM.cjs.map} +1 -1
- package/dist/{simple-radio-group-field-BtQHJpOz.cjs → simple-radio-group-field-C2DDfIUs.cjs} +2 -2
- package/dist/{simple-radio-group-field-BtQHJpOz.cjs.map → simple-radio-group-field-C2DDfIUs.cjs.map} +1 -1
- package/dist/{simple-radio-group-field-DiYQfgts.mjs → simple-radio-group-field-CfziNlLf.mjs} +2 -2
- package/dist/{simple-radio-group-field-DiYQfgts.mjs.map → simple-radio-group-field-CfziNlLf.mjs.map} +1 -1
- package/dist/{simple-select-field--zJMLBUY.cjs → simple-select-field-CeNnXUHN.cjs} +2 -2
- package/dist/{simple-select-field--zJMLBUY.cjs.map → simple-select-field-CeNnXUHN.cjs.map} +1 -1
- package/dist/{simple-select-field-Df4DLsbi.mjs → simple-select-field-DIaxhi1-.mjs} +2 -2
- package/dist/{simple-select-field-Df4DLsbi.mjs.map → simple-select-field-DIaxhi1-.mjs.map} +1 -1
- package/dist/{simple-text-field-zAfkmlhc.mjs → simple-text-field-D8jyznSd.mjs} +2 -2
- package/dist/{simple-text-field-zAfkmlhc.mjs.map → simple-text-field-D8jyznSd.mjs.map} +1 -1
- package/dist/{simple-text-field-DVkuHrhF.cjs → simple-text-field-LYWVIAfQ.cjs} +2 -2
- package/dist/{simple-text-field-DVkuHrhF.cjs.map → simple-text-field-LYWVIAfQ.cjs.map} +1 -1
- package/dist/{simple-textarea-field-BaMK0feA.cjs → simple-textarea-field-DcEvaizE.cjs} +2 -2
- package/dist/{simple-textarea-field-BaMK0feA.cjs.map → simple-textarea-field-DcEvaizE.cjs.map} +1 -1
- package/dist/{simple-textarea-field-q9DeFByl.mjs → simple-textarea-field-p9qX_n7m.mjs} +2 -2
- package/dist/{simple-textarea-field-q9DeFByl.mjs.map → simple-textarea-field-p9qX_n7m.mjs.map} +1 -1
- package/dist/skeleton-Ct4sYEKk.d.cts +24 -0
- package/dist/skeleton-Ct4sYEKk.d.mts +24 -0
- package/dist/slider-DwR1MhR8.d.cts +24 -0
- package/dist/slider-DwR1MhR8.d.mts +24 -0
- package/dist/sonner-B6LxJMYT.d.mts +22 -0
- package/dist/sonner-BcNgR0GP.d.cts +22 -0
- package/dist/sparkline-chart-TbGzakUl.mjs +2 -0
- package/dist/sparkline-chart-TbGzakUl.mjs.map +1 -0
- package/dist/sparkline-chart-sPqaJHep.cjs +2 -0
- package/dist/sparkline-chart-sPqaJHep.cjs.map +1 -0
- package/dist/spinner-CXuqcoB5.d.cts +22 -0
- package/dist/spinner-CXuqcoB5.d.mts +22 -0
- package/dist/stacked-area-chart-DyxY96_l.cjs +2 -0
- package/dist/stacked-area-chart-DyxY96_l.cjs.map +1 -0
- package/dist/stacked-area-chart-UIWIxTmq.mjs +2 -0
- package/dist/stacked-area-chart-UIWIxTmq.mjs.map +1 -0
- package/dist/statistic-8zBJMdRa.d.cts +45 -0
- package/dist/statistic-8zBJMdRa.d.mts +45 -0
- package/dist/statistic-BHCSCw9Q.cjs +2 -0
- package/dist/statistic-BHCSCw9Q.cjs.map +1 -0
- package/dist/statistic-DwiUKz02.mjs +2 -0
- package/dist/statistic-DwiUKz02.mjs.map +1 -0
- package/dist/status-display-BKe0EupF.mjs +2 -0
- package/dist/status-display-BKe0EupF.mjs.map +1 -0
- package/dist/status-display-BRJX53bQ.cjs +2 -0
- package/dist/status-display-BRJX53bQ.cjs.map +1 -0
- package/dist/summary-bar-ByYm7uWR.mjs +2 -0
- package/dist/summary-bar-ByYm7uWR.mjs.map +1 -0
- package/dist/summary-bar-DjdtmsIY.cjs +2 -0
- package/dist/summary-bar-DjdtmsIY.cjs.map +1 -0
- package/dist/switch-9v4AYqJb.d.cts +24 -0
- package/dist/switch-9v4AYqJb.d.mts +24 -0
- package/dist/{switch-field-B8HVvc2f.mjs → switch-field-CIoNsRWN.mjs} +2 -2
- package/dist/{switch-field-B8HVvc2f.mjs.map → switch-field-CIoNsRWN.mjs.map} +1 -1
- package/dist/{switch-field-C1uNuuku.cjs → switch-field-n6a5SaEM.cjs} +2 -2
- package/dist/{switch-field-C1uNuuku.cjs.map → switch-field-n6a5SaEM.cjs.map} +1 -1
- package/dist/systems/google.d.cts +2 -48
- package/dist/systems/google.d.mts +2 -48
- package/dist/table-Dg2D0v87.d.cts +70 -0
- package/dist/table-Dg2D0v87.d.mts +70 -0
- package/dist/tables-9d53sH9E.mjs +2 -0
- package/dist/tables-9d53sH9E.mjs.map +1 -0
- package/dist/tables-B1O9qy-m.cjs +2 -0
- package/dist/tables-B1O9qy-m.cjs.map +1 -0
- package/dist/tabs-CJ6qZcFU.d.cts +42 -0
- package/dist/tabs-CJ6qZcFU.d.mts +42 -0
- package/dist/tanstack-form-CNrZQZhn.cjs +2 -0
- package/dist/tanstack-form-CNrZQZhn.cjs.map +1 -0
- package/dist/tanstack-form-PC9YNeeo.mjs +2 -0
- package/dist/tanstack-form-PC9YNeeo.mjs.map +1 -0
- package/dist/text-editor-BYE2-G5K.mjs +2 -0
- package/dist/text-editor-BYE2-G5K.mjs.map +1 -0
- package/dist/text-editor-CfQk5dIx.cjs +2 -0
- package/dist/text-editor-CfQk5dIx.cjs.map +1 -0
- package/dist/{text-editor-field-CcsR48Jw.mjs → text-editor-field-fso-sw29.mjs} +2 -2
- package/dist/{text-editor-field-CcsR48Jw.mjs.map → text-editor-field-fso-sw29.mjs.map} +1 -1
- package/dist/{text-editor-field-BBDgCPuc.cjs → text-editor-field-gas5r-xy.cjs} +2 -2
- package/dist/{text-editor-field-BBDgCPuc.cjs.map → text-editor-field-gas5r-xy.cjs.map} +1 -1
- package/dist/{text-field-qhiYvQKt.mjs → text-field-B67oTV62.mjs} +2 -2
- package/dist/{text-field-qhiYvQKt.mjs.map → text-field-B67oTV62.mjs.map} +1 -1
- package/dist/{text-field-BhC_ik5w.cjs → text-field-BMo-8rsq.cjs} +2 -2
- package/dist/{text-field-BhC_ik5w.cjs.map → text-field-BMo-8rsq.cjs.map} +1 -1
- package/dist/textarea-C8ZIZh-y.d.cts +26 -0
- package/dist/textarea-C8ZIZh-y.d.mts +26 -0
- package/dist/{textarea-field-C-7ZoUMz.cjs → textarea-field-BUGcITwp.cjs} +2 -2
- package/dist/{textarea-field-C-7ZoUMz.cjs.map → textarea-field-BUGcITwp.cjs.map} +1 -1
- package/dist/{textarea-field-DqDciVSB.mjs → textarea-field-D70rGYIk.mjs} +2 -2
- package/dist/{textarea-field-DqDciVSB.mjs.map → textarea-field-D70rGYIk.mjs.map} +1 -1
- package/dist/title-BT9guhSU.d.cts +41 -0
- package/dist/title-BT9guhSU.d.mts +41 -0
- package/dist/toggle-Bh4EazxT.d.cts +30 -0
- package/dist/toggle-Bh4EazxT.d.mts +30 -0
- package/dist/toggle-button-DNLtfjJC.mjs +2 -0
- package/dist/toggle-button-DNLtfjJC.mjs.map +1 -0
- package/dist/toggle-button-Dq78v8cH.cjs +2 -0
- package/dist/toggle-button-Dq78v8cH.cjs.map +1 -0
- package/dist/toggle-group-BpqkL1ds.d.cts +37 -0
- package/dist/toggle-group-DzNE38v5.d.mts +37 -0
- package/dist/tooltip-D4U-RhIu.d.cts +53 -0
- package/dist/tooltip-D4U-RhIu.d.mts +53 -0
- package/dist/tooltip-DVK6xfZ1.cjs +4 -0
- package/dist/tooltip-DVK6xfZ1.cjs.map +1 -0
- package/dist/tooltip-lvpW5dMi.mjs +4 -0
- package/dist/tooltip-lvpW5dMi.mjs.map +1 -0
- package/dist/top-products-bar-chart-5EJFSkeo.cjs +2 -0
- package/dist/top-products-bar-chart-5EJFSkeo.cjs.map +1 -0
- package/dist/top-products-bar-chart-CKYaOGWT.mjs +2 -0
- package/dist/top-products-bar-chart-CKYaOGWT.mjs.map +1 -0
- package/dist/trash-BfWSqlL4.d.cts +16 -0
- package/dist/trash-BfWSqlL4.d.mts +16 -0
- package/dist/typography/paragraph.d.cts +2 -46
- package/dist/typography/paragraph.d.mts +2 -46
- package/dist/typography/title.d.cts +2 -41
- package/dist/typography/title.d.mts +2 -41
- package/dist/ui/alert-dialog.d.cts +2 -88
- package/dist/ui/alert-dialog.d.mts +2 -88
- package/dist/ui/aspect-ratio.d.cts +2 -22
- package/dist/ui/aspect-ratio.d.mts +2 -22
- package/dist/ui/avatar.d.cts +2 -33
- package/dist/ui/avatar.d.mts +2 -33
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.mts +1 -1
- package/dist/ui/breadcrumb.d.cts +2 -69
- package/dist/ui/breadcrumb.d.mts +2 -69
- package/dist/ui/button-group.d.cts +2 -48
- package/dist/ui/button-group.d.mts +2 -48
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/buttons/add-new.d.cts +2 -16
- package/dist/ui/buttons/add-new.d.mts +2 -16
- package/dist/ui/buttons/edit.d.cts +2 -16
- package/dist/ui/buttons/edit.d.mts +2 -16
- package/dist/ui/buttons/refresh.d.cts +2 -16
- package/dist/ui/buttons/refresh.d.mts +2 -16
- package/dist/ui/buttons/trash.d.cts +2 -16
- package/dist/ui/buttons/trash.d.mts +2 -16
- package/dist/ui/buttons/upload-image.d.cts +2 -23
- package/dist/ui/buttons/upload-image.d.mts +2 -23
- package/dist/ui/calendar.d.cts +2 -43
- package/dist/ui/calendar.d.mts +2 -43
- package/dist/ui/card.d.cts +2 -60
- package/dist/ui/card.d.mts +2 -60
- package/dist/ui/carousel.d.cts +2 -70
- package/dist/ui/carousel.d.mts +2 -70
- package/dist/ui/chart.d.cts +2 -80
- package/dist/ui/chart.d.mts +2 -80
- package/dist/ui/checkbox.d.cts +2 -24
- package/dist/ui/checkbox.d.mts +2 -24
- package/dist/ui/collapsible.d.cts +2 -32
- package/dist/ui/collapsible.d.mts +2 -32
- package/dist/ui/command.d.cts +2 -87
- package/dist/ui/command.d.mts +2 -87
- package/dist/ui/context-menu.d.cts +2 -123
- package/dist/ui/context-menu.d.mts +2 -123
- package/dist/ui/drawer.d.cts +2 -70
- package/dist/ui/drawer.d.mts +2 -70
- package/dist/ui/dropdown-menu.d.cts +2 -125
- package/dist/ui/dropdown-menu.d.mts +2 -125
- package/dist/ui/empty.d.cts +2 -65
- package/dist/ui/empty.d.mts +2 -65
- package/dist/ui/field.d.cts +1 -1
- package/dist/ui/field.d.mts +1 -1
- package/dist/ui/file-uploader.d.cts +2 -101
- package/dist/ui/file-uploader.d.mts +2 -101
- package/dist/ui/form.d.cts +2 -109
- package/dist/ui/form.d.mts +2 -109
- package/dist/ui/hover-card.d.cts +2 -35
- package/dist/ui/hover-card.d.mts +2 -35
- package/dist/ui/image.d.cts +2 -27
- package/dist/ui/image.d.mts +2 -27
- package/dist/ui/input-otp.d.cts +2 -56
- package/dist/ui/input-otp.d.mts +2 -56
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.d.cts +2 -27
- package/dist/ui/inputs/search-input.d.mts +2 -27
- package/dist/ui/item.d.cts +2 -99
- package/dist/ui/item.d.mts +2 -99
- package/dist/ui/label.d.cts +2 -22
- package/dist/ui/label.d.mts +2 -22
- package/dist/ui/menubar.d.cts +2 -133
- package/dist/ui/menubar.d.mts +2 -133
- package/dist/ui/multi-select.d.cts +2 -116
- package/dist/ui/multi-select.d.mts +2 -116
- package/dist/ui/navigation-menu.d.cts +2 -73
- package/dist/ui/navigation-menu.d.mts +2 -73
- package/dist/ui/pagination.d.cts +2 -64
- package/dist/ui/pagination.d.mts +2 -64
- package/dist/ui/popover.d.cts +2 -50
- package/dist/ui/popover.d.mts +2 -50
- package/dist/ui/progress.d.cts +2 -21
- package/dist/ui/progress.d.mts +2 -21
- package/dist/ui/radio-group.d.cts +2 -35
- package/dist/ui/radio-group.d.mts +2 -35
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/dist/ui/scroll-area.d.cts +2 -35
- package/dist/ui/scroll-area.d.mts +2 -35
- package/dist/ui/select.d.cts +2 -74
- package/dist/ui/select.d.mts +2 -74
- package/dist/ui/separator.d.cts +2 -32
- package/dist/ui/separator.d.mts +2 -32
- package/dist/ui/sheet.d.cts +2 -66
- package/dist/ui/sheet.d.mts +2 -66
- package/dist/ui/skeleton.d.cts +2 -24
- package/dist/ui/skeleton.d.mts +2 -24
- package/dist/ui/slider.d.cts +2 -24
- package/dist/ui/slider.d.mts +2 -24
- package/dist/ui/sonner.d.cts +2 -22
- package/dist/ui/sonner.d.mts +2 -22
- package/dist/ui/spinner.d.cts +2 -22
- package/dist/ui/spinner.d.mts +2 -22
- package/dist/ui/switch.d.cts +2 -24
- package/dist/ui/switch.d.mts +2 -24
- package/dist/ui/table.d.cts +2 -70
- package/dist/ui/table.d.mts +2 -70
- package/dist/ui/tabs.d.cts +2 -42
- package/dist/ui/tabs.d.mts +2 -42
- package/dist/ui/textarea.d.cts +2 -26
- package/dist/ui/textarea.d.mts +2 -26
- package/dist/ui/toggle-group.d.cts +2 -37
- package/dist/ui/toggle-group.d.mts +2 -37
- package/dist/ui/toggle.d.cts +2 -30
- package/dist/ui/toggle.d.mts +2 -30
- package/dist/ui/tooltip.d.cts +2 -53
- package/dist/ui/tooltip.d.mts +2 -53
- package/dist/upload-image-D4VZU3IA.d.cts +23 -0
- package/dist/upload-image-D4VZU3IA.d.mts +23 -0
- package/dist/user-BymzvsYp.mjs +2 -0
- package/dist/user-BymzvsYp.mjs.map +1 -0
- package/dist/user-CvesQf42.d.cts +20 -0
- package/dist/user-CvesQf42.d.mts +20 -0
- package/dist/user-Dn53Fu5q.cjs +2 -0
- package/dist/user-Dn53Fu5q.cjs.map +1 -0
- package/dist/volume-bar-chart-BRpC_8-X.mjs +2 -0
- package/dist/volume-bar-chart-BRpC_8-X.mjs.map +1 -0
- package/dist/volume-bar-chart-CRxZPZIn.cjs +2 -0
- package/dist/volume-bar-chart-CRxZPZIn.cjs.map +1 -0
- package/dist/waterfall-chart-CTB2f5eh.cjs +2 -0
- package/dist/waterfall-chart-CTB2f5eh.cjs.map +1 -0
- package/dist/waterfall-chart-DwetaJFJ.mjs +2 -0
- package/dist/waterfall-chart-DwetaJFJ.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/combobox-field-BGChwajc.mjs +0 -2
- package/dist/payment-layout-BLrXT-oc.cjs +0 -2
- package/dist/tables-B0Jl8Osc.cjs +0 -4
- package/dist/tables-B0Jl8Osc.cjs.map +0 -1
- package/dist/tables-Cylalxey.mjs +0 -4
- package/dist/tables-Cylalxey.mjs.map +0 -1
- package/dist/tanstack-form-CM_Hb3JT.mjs +0 -2
- package/dist/tanstack-form-CM_Hb3JT.mjs.map +0 -1
- package/dist/tanstack-form-DS_ZvRl8.cjs +0 -2
- package/dist/tanstack-form-DS_ZvRl8.cjs.map +0 -1
- package/dist/text-editor-BQtIXOpM.mjs +0 -2
- package/dist/text-editor-BQtIXOpM.mjs.map +0 -1
- package/dist/text-editor-DJYQXXtP.cjs +0 -2
- package/dist/text-editor-DJYQXXtP.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanstack-form-PC9YNeeo.mjs","names":["Impl"],"sources":["../packages/components/features/tanstack-form/components/form-context.ts","../packages/components/features/tanstack-form/tanstack-form.tsx"],"sourcesContent":["'use client';\n\nimport { createFormHookContexts } from '@tanstack/react-form';\n\n/**\n * Shared field/form contexts, split out from `tanstack-form.tsx` so that field and form\n * components can depend on them directly instead of importing back through the file that\n * lazy-loads those same components (which would reintroduce a circular import).\n */\nexport const { fieldContext, formContext, useFieldContext: useTanStackFieldContext, useFormContext: useTanStackFormContext } = createFormHookContexts();\n","'use client';\n\nimport type { ComponentProps, ComponentType } from 'react';\nimport { lazy, Suspense } from 'react';\n\nimport { createFormHook } from '@tanstack/react-form';\n\nimport { Skeleton } from '@/components/ui/skeleton';\n\nimport type { ArrayCol as ArrayColType, ArrayHeaderRow as ArrayHeaderRowType, SimpleArrayFieldProps } from './components/atoms/simple-array-field';\nimport type { SimpleBooleanField as SimpleBooleanFieldType } from './components/atoms/simple-boolean-field';\nimport type { SimpleComboboxField as SimpleComboboxFieldType } from './components/atoms/simple-combobox-field';\nimport type { SimpleDateField as SimpleDateFieldType } from './components/atoms/simple-date-field';\nimport type { SimpleEmailField as SimpleEmailFieldType } from './components/atoms/simple-email-field';\nimport type { SimpleNumberField as SimpleNumberFieldType } from './components/atoms/simple-number-field';\nimport type { SimplePasswordField as SimplePasswordFieldType } from './components/atoms/simple-password-field';\nimport type { SimpleRadioGroupField as SimpleRadioGroupFieldType } from './components/atoms/simple-radio-group-field';\nimport type { SimpleSelectField as SimpleSelectFieldType } from './components/atoms/simple-select-field';\nimport type { SimpleTextField as SimpleTextFieldType } from './components/atoms/simple-text-field';\nimport type { SimpleTextareaField as SimpleTextareaFieldType } from './components/atoms/simple-textarea-field';\nimport type { CheckboxField as CheckboxFieldType } from './components/fields/checkbox-field';\nimport type { ComboboxField as ComboboxFieldType } from './components/fields/combobox-field';\nimport type { DateField as DateFieldType } from './components/fields/date-field';\nimport type { EmailField as EmailFieldType } from './components/fields/email-field';\nimport type { NumberField as NumberFieldType } from './components/fields/number-field';\nimport type { PasswordField as PasswordFieldType } from './components/fields/password-field';\nimport type { RadioGroupField as RadioGroupFieldType } from './components/fields/radio-group-field';\nimport type { SelectField as SelectFieldType } from './components/fields/select-field';\nimport type { SwitchField as SwitchFieldType } from './components/fields/switch-field';\nimport type { TextEditorField as TextEditorFieldType } from './components/fields/text-editor-field';\nimport type { TextField as TextFieldType } from './components/fields/text-field';\nimport type { TextareaField as TextareaFieldType } from './components/fields/textarea-field';\nimport { fieldContext, formContext, useTanStackFieldContext, useTanStackFormContext } from './components/form-context';\nimport type { TanStackActionSubmit as TanStackActionSubmitType } from './components/forms/action-submit';\nimport type { TanStackActionsForm as TanStackActionsFormType } from './components/forms/actions-form';\nimport type { TanStackCardForm as TanStackCardFormType } from './components/forms/card-form';\nimport type { TanStackContainerForm as TanStackContainerFormType } from './components/forms/container-form';\nimport type { TanStackDialogForm as TanStackDialogFormType } from './components/forms/dialog-form';\nimport type { TanStackFieldGroup as TanStackFieldGroupType } from './components/forms/group-field';\nimport type { TanStackPopoverForm as TanStackPopoverFormType } from './components/forms/popover-form';\nimport type { TanStackSectionForm as TanStackSectionFormType } from './components/forms/section-form';\nimport type { TanStackTitleField as TanStackTitleFieldType } from './components/forms/title-field';\nimport type {\n FieldContentMain as FieldContentMainType,\n FieldContent as FieldContentType,\n FieldError as FieldErrorType,\n FieldGroup as FieldGroupType,\n FieldLabel as FieldLabelType,\n FieldSeparator as FieldSeparatorType,\n Field as FieldType,\n} from './components/ui/field';\n\n/** Input-shaped pulse placeholder shown while a lazy field/form chunk is still loading. */\nfunction FieldSkeleton() {\n return <Skeleton data-slot=\"tanstack-field-skeleton\" className=\"h-9 w-full rounded\" />;\n}\n\n/**\n * Wraps a `lazy()`-loaded component in its own `Suspense` boundary so it can be dropped\n * anywhere (inside or outside our own form containers) without callers needing to set up\n * Suspense themselves. Keeps this file itself small — the heavy per-field-type\n * implementations (Radix Select/Combobox/date-picker, the rich text editor, etc.) only load\n * when a form actually renders that field type.\n */\nfunction lazyField<P extends object>(loader: () => Promise<{ default: ComponentType<P> }>): ComponentType<P> {\n const LazyComponent = lazy(loader);\n return (props: P) => (\n <Suspense fallback={<FieldSkeleton />}>\n <LazyComponent {...props} />\n </Suspense>\n );\n}\n\n// ─── Rich field components (lazy) ─────────────────────────────────────────────\n\nconst TextField = lazyField<ComponentProps<typeof TextFieldType>>(() => import('./components/fields/text-field').then(m => ({ default: m.TextField })));\nconst TextareaField = lazyField<ComponentProps<typeof TextareaFieldType>>(() =>\n import('./components/fields/textarea-field').then(m => ({ default: m.TextareaField }))\n);\nconst TextEditorField = lazyField<ComponentProps<typeof TextEditorFieldType>>(() =>\n import('./components/fields/text-editor-field').then(m => ({ default: m.TextEditorField }))\n);\nconst NumberField = lazyField<ComponentProps<typeof NumberFieldType>>(() => import('./components/fields/number-field').then(m => ({ default: m.NumberField })));\nconst EmailField = lazyField<ComponentProps<typeof EmailFieldType>>(() => import('./components/fields/email-field').then(m => ({ default: m.EmailField })));\nconst PasswordField = lazyField<ComponentProps<typeof PasswordFieldType>>(() =>\n import('./components/fields/password-field').then(m => ({ default: m.PasswordField }))\n);\nconst SelectField = lazyField<ComponentProps<typeof SelectFieldType>>(() => import('./components/fields/select-field').then(m => ({ default: m.SelectField })));\nconst ComboboxField = lazyField<ComponentProps<typeof ComboboxFieldType>>(() =>\n import('./components/fields/combobox-field').then(m => ({ default: m.ComboboxField }))\n);\nconst DateField = lazyField<ComponentProps<typeof DateFieldType>>(() => import('./components/fields/date-field').then(m => ({ default: m.DateField })));\nconst SwitchField = lazyField<ComponentProps<typeof SwitchFieldType>>(() => import('./components/fields/switch-field').then(m => ({ default: m.SwitchField })));\nconst RadioGroupField = lazyField<ComponentProps<typeof RadioGroupFieldType>>(() =>\n import('./components/fields/radio-group-field').then(m => ({ default: m.RadioGroupField }))\n);\nconst CheckboxField = lazyField<ComponentProps<typeof CheckboxFieldType>>(() =>\n import('./components/fields/checkbox-field').then(m => ({ default: m.CheckboxField }))\n);\n\n// ─── Simple (minimal) field components (lazy) ─────────────────────────────────\n\nconst SimpleTextField = lazyField<ComponentProps<typeof SimpleTextFieldType>>(() =>\n import('./components/atoms/simple-text-field').then(m => ({ default: m.SimpleTextField }))\n);\nconst SimpleEmailField = lazyField<ComponentProps<typeof SimpleEmailFieldType>>(() =>\n import('./components/atoms/simple-email-field').then(m => ({ default: m.SimpleEmailField }))\n);\nconst SimplePasswordField = lazyField<ComponentProps<typeof SimplePasswordFieldType>>(() =>\n import('./components/atoms/simple-password-field').then(m => ({ default: m.SimplePasswordField }))\n);\nconst SimpleTextareaField = lazyField<ComponentProps<typeof SimpleTextareaFieldType>>(() =>\n import('./components/atoms/simple-textarea-field').then(m => ({ default: m.SimpleTextareaField }))\n);\nconst SimpleNumberField = lazyField<ComponentProps<typeof SimpleNumberFieldType>>(() =>\n import('./components/atoms/simple-number-field').then(m => ({ default: m.SimpleNumberField }))\n);\nconst SimpleSelectField = lazyField<ComponentProps<typeof SimpleSelectFieldType>>(() =>\n import('./components/atoms/simple-select-field').then(m => ({ default: m.SimpleSelectField }))\n);\nconst LazySimpleArrayField = lazy(() =>\n import('./components/atoms/simple-array-field').then(m => ({ default: m.SimpleArrayField as ComponentType<SimpleArrayFieldProps<unknown>> }))\n);\n\n/** Kept as its own generic wrapper (instead of `lazyField`) so callers can still write `<SimpleArrayField<Row> />`. */\nfunction SimpleArrayField<T>(props: SimpleArrayFieldProps<T>) {\n const Impl = LazySimpleArrayField as ComponentType<SimpleArrayFieldProps<T>>;\n return (\n <Suspense fallback={<FieldSkeleton />}>\n <Impl {...props} />\n </Suspense>\n );\n}\n\nconst SimpleBooleanField = lazyField<ComponentProps<typeof SimpleBooleanFieldType>>(() =>\n import('./components/atoms/simple-boolean-field').then(m => ({ default: m.SimpleBooleanField }))\n);\nconst SimpleComboboxField = lazyField<ComponentProps<typeof SimpleComboboxFieldType>>(() =>\n import('./components/atoms/simple-combobox-field').then(m => ({ default: m.SimpleComboboxField }))\n);\nconst SimpleDateField = lazyField<ComponentProps<typeof SimpleDateFieldType>>(() =>\n import('./components/atoms/simple-date-field').then(m => ({ default: m.SimpleDateField }))\n);\nconst SimpleRadioGroupField = lazyField<ComponentProps<typeof SimpleRadioGroupFieldType>>(() =>\n import('./components/atoms/simple-radio-group-field').then(m => ({ default: m.SimpleRadioGroupField }))\n);\n\n// ─── Array field layout helpers (lazy, co-located with SimpleArrayField) ──────\n\nconst ArrayCol = lazyField<ComponentProps<typeof ArrayColType>>(() => import('./components/atoms/simple-array-field').then(m => ({ default: m.ArrayCol })));\nconst ArrayHeaderRow = lazyField<ComponentProps<typeof ArrayHeaderRowType>>(() =>\n import('./components/atoms/simple-array-field').then(m => ({ default: m.ArrayHeaderRow }))\n);\n\n// ─── Form containers (lazy) ───────────────────────────────────────────────────\n\nconst TanStackDialogForm = lazyField<ComponentProps<typeof TanStackDialogFormType>>(() =>\n import('./components/forms/dialog-form').then(m => ({ default: m.TanStackDialogForm }))\n);\nconst TanStackPopoverForm = lazyField<ComponentProps<typeof TanStackPopoverFormType>>(() =>\n import('./components/forms/popover-form').then(m => ({ default: m.TanStackPopoverForm }))\n);\nconst TanStackContainerForm = lazyField<ComponentProps<typeof TanStackContainerFormType>>(() =>\n import('./components/forms/container-form').then(m => ({ default: m.TanStackContainerForm }))\n);\nconst TanStackSectionForm = lazyField<ComponentProps<typeof TanStackSectionFormType>>(() =>\n import('./components/forms/section-form').then(m => ({ default: m.TanStackSectionForm }))\n);\nconst TanStackCardForm = lazyField<ComponentProps<typeof TanStackCardFormType>>(() =>\n import('./components/forms/card-form').then(m => ({ default: m.TanStackCardForm }))\n);\nconst TanStackFieldGroup = lazyField<ComponentProps<typeof TanStackFieldGroupType>>(() =>\n import('./components/forms/group-field').then(m => ({ default: m.TanStackFieldGroup }))\n);\nconst TanStackTitleField = lazyField<ComponentProps<typeof TanStackTitleFieldType>>(() =>\n import('./components/forms/title-field').then(m => ({ default: m.TanStackTitleField }))\n);\nconst TanStackActionsForm = lazyField<ComponentProps<typeof TanStackActionsFormType>>(() =>\n import('./components/forms/actions-form').then(m => ({ default: m.TanStackActionsForm }))\n);\nconst TanStackActionSubmit = lazyField<ComponentProps<typeof TanStackActionSubmitType>>(() =>\n import('./components/forms/action-submit').then(m => ({ default: m.TanStackActionSubmit }))\n);\n\n// ─── Field UI primitives (lazy) ───────────────────────────────────────────────\n\nconst FieldGroup = lazyField<ComponentProps<typeof FieldGroupType>>(() => import('./components/ui/field').then(m => ({ default: m.FieldGroup })));\nconst Field = lazyField<ComponentProps<typeof FieldType>>(() => import('./components/ui/field').then(m => ({ default: m.Field })));\nconst FieldContent = lazyField<ComponentProps<typeof FieldContentType>>(() => import('./components/ui/field').then(m => ({ default: m.FieldContent })));\nconst FieldLabel = lazyField<ComponentProps<typeof FieldLabelType>>(() => import('./components/ui/field').then(m => ({ default: m.FieldLabel })));\nconst FieldContentMain = lazyField<ComponentProps<typeof FieldContentMainType>>(() =>\n import('./components/ui/field').then(m => ({ default: m.FieldContentMain }))\n);\nconst FieldSeparator = lazyField<ComponentProps<typeof FieldSeparatorType>>(() => import('./components/ui/field').then(m => ({ default: m.FieldSeparator })));\nconst FieldError = lazyField<ComponentProps<typeof FieldErrorType>>(() => import('./components/ui/field').then(m => ({ default: m.FieldError })));\n\n/**\n * Factory result from {@link createFormHook} pre-wired with all Lunas UI field and form components.\n *\n * ### `useTanStackForm`\n * Pre-configured TanStack Form hook that returns a type-safe form instance bound to all Lunas UI\n * field and form components.\n *\n * @example\n * import { useTanStackForm } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * const form = useTanStackForm({\n * defaultValues: { name: '', email: '' },\n * onSubmit: async ({ value }) => console.log(value),\n * });\n *\n * return (\n * <form.Provider>\n * <form.AppForm>\n * <form.AppField name=\"name\" children={(field) => <field.TextField label=\"Name\" />} />\n * <form.Subscribe selector={(s) => s.canSubmit}>\n * {(canSubmit) => <form.TanStackActionSubmit disabled={!canSubmit} />}\n * </form.Subscribe>\n * </form.AppForm>\n * </form.Provider>\n * );\n *\n * ### `withTanStackForm`\n * Higher-order component that wraps a sub-form component with access to the parent\n * `useTanStackForm` form context, enabling isolated field groups that still participate in the\n * top-level form state.\n *\n * @example\n * import { withTanStackForm } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * const AddressFields = withTanStackForm(\n * { street: '', city: '' } as const,\n * ({ form }) => (\n * <>\n * <form.AppField name=\"street\" children={(f) => <f.TextField label=\"Street\" />} />\n * <form.AppField name=\"city\" children={(f) => <f.TextField label=\"City\" />} />\n * </>\n * ),\n * );\n *\n * ### `withTanStackFieldGroup`\n * Higher-order component that creates a reusable field-group component sharing the enclosing\n * `useTanStackForm` context without requiring additional form providers.\n *\n * @example\n * import { withTanStackFieldGroup } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * const ContactGroup = withTanStackFieldGroup(({ form }) => (\n * <form.AppField name=\"phone\" children={(f) => <f.TextField label=\"Phone\" />} />\n * ));\n */\nconst {\n useAppForm: useTanStackForm,\n withForm: withTanStackForm,\n withFieldGroup: withTanStackFieldGroup,\n} = createFormHook({\n fieldContext,\n formContext,\n\n fieldComponents: {\n TextField,\n TextareaField,\n TextEditorField,\n NumberField,\n EmailField,\n PasswordField,\n\n SelectField,\n ComboboxField,\n DateField,\n SwitchField,\n RadioGroupField,\n CheckboxField,\n\n SimpleTextField,\n SimpleEmailField,\n SimplePasswordField,\n SimpleTextareaField,\n SimpleNumberField,\n SimpleSelectField,\n SimpleArrayField,\n SimpleBooleanField,\n SimpleComboboxField,\n SimpleDateField,\n SimpleRadioGroupField,\n\n FieldGroup,\n Field,\n FieldContent,\n FieldLabel,\n FieldContentMain,\n FieldSeparator,\n FieldError,\n },\n formComponents: {\n TanStackDialogForm,\n TanStackPopoverForm,\n TanStackContainerForm,\n TanStackSectionForm,\n TanStackCardForm,\n TanStackFieldGroup,\n TanStackTitleField,\n\n TanStackActionsForm,\n TanStackActionSubmit,\n\n ArrayCol,\n ArrayHeaderRow,\n },\n});\n\nexport {\n // Array helpers\n ArrayCol,\n ArrayHeaderRow,\n CheckboxField,\n ComboboxField,\n DateField,\n EmailField,\n Field,\n FieldContent,\n FieldContentMain,\n FieldError,\n // Field UI primitives\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n NumberField,\n PasswordField,\n RadioGroupField,\n SelectField,\n SimpleArrayField,\n SimpleBooleanField,\n SimpleComboboxField,\n SimpleDateField,\n SimpleEmailField,\n SimpleNumberField,\n SimplePasswordField,\n SimpleRadioGroupField,\n SimpleSelectField,\n SimpleTextareaField,\n // Simple (minimal) field components\n SimpleTextField,\n SwitchField,\n TanStackActionSubmit,\n // Form actions\n TanStackActionsForm,\n TanStackCardForm,\n TanStackContainerForm,\n // Form containers\n TanStackDialogForm,\n TanStackFieldGroup,\n TanStackPopoverForm,\n TanStackSectionForm,\n TanStackTitleField,\n TextareaField,\n TextEditorField,\n // Rich field components\n TextField,\n useTanStackFieldContext,\n // Hooks & HOCs\n useTanStackForm,\n useTanStackFormContext,\n withTanStackFieldGroup,\n withTanStackForm,\n};\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 g,Link2 as _,Link2Off as v,List as y,ListChecks as b,ListOrdered as x,Minus as ee,Palette as S,Quote as C,Redo as w,Strikethrough as te,Underline as T,Undo as E}from"lucide-react";import{Suspense as D,lazy as O,use as k,useCallback as A,useEffect as j,useMemo as M,useState as N}from"react";import{cn as P}from"@customafk/react-toolkit/utils";import{cva as F}from"class-variance-authority";import{Fragment as I,jsx as L,jsxs as R}from"react/jsx-runtime";import{EditorContent as z,useEditor as B,useEditorState as V}from"@tiptap/react";import{ListKeymap as H}from"@tiptap/extension-list-keymap";import U from"@tiptap/extension-placeholder";import W from"@tiptap/extension-text-align";import G from"@tiptap/extension-underline";import K from"@tiptap/starter-kit";function q({isActive:e,className:t,children:n,...r}){return L(`button`,{type:`button`,"data-slot":`toolbar-button`,"data-active":e||void 0,className:P(`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 J(){return L(`div`,{"data-slot":`toolbar-divider`,className:`mx-0.5 h-5 w-px shrink-0 bg-border`})}function Y({editor:e}){let[t,n]=N(!1),[r,s]=N(``),c=V({editor:e,selector:e=>e.editor.isActive(`link`)}),l=A(t=>{t&&s(e.getAttributes(`link`).href??``),n(t)},[e]),u=A(()=>{let t=r.trim();t&&(e.chain().focus().setLink({href:t,target:`_blank`}).run(),n(!1))},[e,r]),d=A(()=>{e.chain().focus().unsetLink().run(),n(!1)},[e]);return R(i,{open:t,onOpenChange:l,children:[L(o,{asChild:!0,children:L(q,{isActive:c,title:`Link (Ctrl+K)`,"data-slot":`toolbar-link-button`,children:L(_,{className:`h-3.5 w-3.5`})})}),R(a,{"data-slot":`link-dialog`,sideOffset:6,align:`start`,className:`w-72 p-3`,children:[L(`p`,{className:`mb-2 font-medium text-text-positive-strong text-xs`,children:c?`Edit Link`:`Insert Link`}),R(`div`,{className:`flex gap-1.5`,children:[L(`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:P(`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`)}),L(`button`,{type:`button`,onClick:u,disabled:!r.trim(),className:P(`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&&R(`button`,{type:`button`,onClick:d,className:`mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline`,children:[L(v,{className:`h-3 w-3`}),`Remove link`]})]})]})}const X=F([`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`}}),ne=[{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`}],re=[{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 Z({editor:_,className:v,enableLink:D,enableTaskList:O,enableHighlight:k,enableColor:A}){let j=V({editor:_,selector:e=>e.editor.isActive(`heading`,{level:1})}),M=V({editor:_,selector:e=>e.editor.isActive(`heading`,{level:2})}),N=V({editor:_,selector:e=>e.editor.isActive(`heading`,{level:3})}),F=V({editor:_,selector:e=>e.editor.isActive(`bold`)}),z=V({editor:_,selector:e=>e.editor.isActive(`italic`)}),B=V({editor:_,selector:e=>e.editor.isActive(`underline`)}),H=V({editor:_,selector:e=>e.editor.isActive(`strike`)}),U=V({editor:_,selector:e=>e.editor.isActive(`code`)}),W=V({editor:_,selector:e=>e.editor.isActive(`bulletList`)}),G=V({editor:_,selector:e=>e.editor.isActive(`orderedList`)}),K=V({editor:_,selector:e=>e.editor.isActive(`taskList`)}),X=V({editor:_,selector:e=>e.editor.isActive(`blockquote`)}),Z=V({editor:_,selector:e=>e.editor.isActive(`codeBlock`)}),Q=V({editor:_,selector:e=>e.editor.isActive({textAlign:`left`})}),$=V({editor:_,selector:e=>e.editor.isActive({textAlign:`center`})}),ie=V({editor:_,selector:e=>e.editor.isActive({textAlign:`right`})}),ae=V({editor:_,selector:e=>e.editor.isActive({textAlign:`justify`})}),oe=j?`H1`:M?`H2`:N?`H3`:`P`;return R(`div`,{"data-slot":`text-editor-toolbar`,className:P(`flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5`,v),children:[L(q,{onClick:()=>_.chain().focus().undo().run(),disabled:!_.can().undo(),title:`Undo (Ctrl+Z)`,children:L(E,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().redo().run(),disabled:!_.can().redo(),title:`Redo (Ctrl+Y)`,children:L(w,{className:`h-3.5 w-3.5`})}),L(J,{}),R(e,{children:[L(r,{asChild:!0,children:R(`button`,{type:`button`,"data-slot":`toolbar-heading-trigger`,className:P(`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`,(j||M||N)&&`bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary`),children:[L(`span`,{className:`w-5 text-center`,children:oe}),L(f,{className:`h-3 w-3 opacity-60`})]})}),R(t,{align:`start`,className:`min-w-32`,children:[L(n,{onClick:()=>_.chain().focus().setParagraph().run(),children:L(`span`,{className:`text-sm`,children:`Paragraph`})}),L(n,{onClick:()=>_.chain().focus().toggleHeading({level:1}).run(),children:L(`span`,{className:`font-bold text-lg`,children:`Heading 1`})}),L(n,{onClick:()=>_.chain().focus().toggleHeading({level:2}).run(),children:L(`span`,{className:`font-semibold text-base`,children:`Heading 2`})}),L(n,{onClick:()=>_.chain().focus().toggleHeading({level:3}).run(),children:L(`span`,{className:`font-semibold text-sm`,children:`Heading 3`})})]})]}),L(J,{}),L(q,{onClick:()=>_.chain().focus().toggleBold().run(),isActive:F,title:`Bold (Ctrl+B)`,children:L(d,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().toggleItalic().run(),isActive:z,title:`Italic (Ctrl+I)`,children:L(g,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().toggleUnderline().run(),isActive:B,title:`Underline (Ctrl+U)`,children:L(T,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().toggleStrike().run(),isActive:H,title:`Strikethrough`,children:L(te,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().toggleCode().run(),isActive:U,title:`Inline Code`,children:L(p,{className:`h-3.5 w-3.5`})}),L(J,{}),L(q,{onClick:()=>_.chain().focus().toggleBulletList().run(),isActive:W,title:`Bullet List`,children:L(y,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().toggleOrderedList().run(),isActive:G,title:`Ordered List`,children:L(x,{className:`h-3.5 w-3.5`})}),O&&L(q,{onClick:()=>_.chain().focus().toggleTaskList().run(),isActive:K,title:`Task List`,children:L(b,{className:`h-3.5 w-3.5`})}),L(J,{}),L(q,{onClick:()=>_.chain().focus().toggleBlockquote().run(),isActive:X,title:`Blockquote`,children:L(C,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().toggleCodeBlock().run(),isActive:Z,title:`Code Block`,children:L(m,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().setHorizontalRule().run(),title:`Horizontal Rule`,children:L(ee,{className:`h-3.5 w-3.5`})}),L(J,{}),L(q,{onClick:()=>_.chain().focus().setTextAlign(`left`).run(),isActive:Q,title:`Align Left`,children:L(l,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().setTextAlign(`center`).run(),isActive:$,title:`Align Center`,children:L(s,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().setTextAlign(`right`).run(),isActive:ie,title:`Align Right`,children:L(u,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>_.chain().focus().setTextAlign(`justify`).run(),isActive:ae,title:`Align Justify`,children:L(c,{className:`h-3.5 w-3.5`})}),D&&R(I,{children:[L(J,{}),L(Y,{editor:_})]}),(A||k)&&R(I,{children:[L(J,{}),A&&R(i,{children:[L(o,{asChild:!0,children:L(q,{title:`Text Color`,children:L(S,{className:`h-3.5 w-3.5`})})}),R(a,{align:`start`,className:`w-44 p-2`,children:[L(`p`,{className:`mb-1.5 font-medium text-text-positive-weak text-xs`,children:`Text Color`}),L(`div`,{className:`grid grid-cols-5 gap-1`,children:re.map(e=>L(`button`,{type:`button`,title:e.label,onClick:()=>{e.value?_.chain().focus().setColor(e.value).run():_.chain().focus().unsetColor().run()},className:P(`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))})]})]}),k&&R(i,{children:[L(o,{asChild:!0,children:L(q,{title:`Highlight`,children:L(h,{className:`h-3.5 w-3.5`})})}),R(a,{align:`start`,className:`w-44 p-2`,children:[L(`p`,{className:`mb-1.5 font-medium text-text-positive-weak text-xs`,children:`Highlight`}),L(`div`,{className:`grid grid-cols-5 gap-1`,children:ne.map(e=>L(`button`,{type:`button`,title:e.label,onClick:()=>_.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))}),L(`button`,{type:`button`,onClick:()=>_.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`})]})]})]})]})}const Q=new Map;function $(e,t){let n=Q.get(e);return n||(n=t(),Q.set(e,n)),n}async function ie(e){let t=[];return e.needsTextStyle&&t.push($(`@tiptap/extension-text-style`,()=>import(`@tiptap/extension-text-style`)).then(e=>e.TextStyle)),e.enableLink&&t.push($(`@tiptap/extension-link`,()=>import(`@tiptap/extension-link`)).then(e=>e.Link.configure({openOnClick:!1,linkOnPaste:!0,defaultProtocol:`https`}))),e.enableTaskList&&t.push(Promise.all([$(`@tiptap/extension-task-list`,()=>import(`@tiptap/extension-task-list`)),$(`@tiptap/extension-task-item`,()=>import(`@tiptap/extension-task-item`))]).then(([{TaskList:e},{TaskItem:t}])=>[e,t.configure({nested:!0})])),e.enableHighlight&&t.push($(`@tiptap/extension-highlight`,()=>import(`@tiptap/extension-highlight`)).then(e=>e.Highlight.configure({multicolor:!0}))),e.enableColor&&t.push($(`@tiptap/extension-text-style`,()=>import(`@tiptap/extension-text-style`)).then(e=>e.Color)),e.needsCharCount&&t.push($(`@tiptap/extension-character-count`,()=>import(`@tiptap/extension-character-count`)).then(t=>t.CharacterCount.configure({limit:e.maxLength}))),(await Promise.all(t)).flat()}const ae=O(()=>import(`@tiptap/react/menus`).then(e=>({default:e.BubbleMenu})));function oe({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:_,enableTaskList:v,enableHighlight:y,enableColor:b,needsCharCount:x,optionalExtensionsPromise:ee}){let S=k(ee),C=B({extensions:M(()=>[K,G,U.configure({placeholder:r}),W.configure({types:[`heading`,`paragraph`]}),H,...S],[r,S]),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()})}}});j(()=>{!C||e===void 0||C.getHTML()!==e&&C.commands.setContent(e)},[C,e]),j(()=>{C&&C.setEditable(!i)},[C,i]);let w=V({editor:C,selector:e=>{let t=e.editor?.storage?.characterCount;return t?t.characters():0}}),E=V({editor:C,selector:e=>{let t=e.editor?.storage?.characterCount;return t?t.words():0}}),O=p||f!==void 0,A=f!==void 0&&w>f*.9;return R(`div`,{"data-slot":`text-editor`,className:P(`lunas-text-editor`,X({variant:o,size:s}),c),children:[a&&!i&&C&&L(Z,{editor:C,className:l,enableLink:h,enableTaskList:v,enableHighlight:y,enableColor:b}),_&&!i&&C&&L(D,{fallback:null,children:R(ae,{editor:C,options:{placement:`top`},className:P(`flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown`),children:[L(q,{onClick:()=>C.chain().focus().toggleBold().run(),isActive:C.isActive(`bold`),title:`Bold (Ctrl+B)`,children:L(d,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>C.chain().focus().toggleItalic().run(),isActive:C.isActive(`italic`),title:`Italic (Ctrl+I)`,children:L(g,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>C.chain().focus().toggleUnderline().run(),isActive:C.isActive(`underline`),title:`Underline (Ctrl+U)`,children:L(T,{className:`h-3.5 w-3.5`})}),L(q,{onClick:()=>C.chain().focus().toggleStrike().run(),isActive:C.isActive(`strike`),title:`Strikethrough`,children:L(te,{className:`h-3.5 w-3.5`})}),h&&R(I,{children:[L(J,{}),L(Y,{editor:C})]})]})}),L(z,{editor:C,"data-slot":`text-editor-content`,className:P(`flex-1 bg-white text-sm text-text-positive`,u)}),O&&x&&R(`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:[R(`span`,{children:[E,` words`]}),R(`span`,{"data-warning":A||void 0,className:`data-warning:text-warning-strong`,children:[w,f?` / ${f}`:``,` characters`]})]})]})}function se(e){let{maxLength:t,showCharacterCount:n,onCharacterCount:r,enableColor:i,enableHighlight:a,enableLink:o,enableTaskList:s}=e,c=t!==void 0||!!n||r!==void 0,l=!!i||!!a,u=M(()=>ie({needsTextStyle:l,enableLink:!!o,enableTaskList:!!s,enableHighlight:!!a,enableColor:!!i,needsCharCount:c,maxLength:t}),[l,o,s,a,i,c,t]);return L(D,{fallback:null,children:L(oe,{...e,needsCharCount:c,optionalExtensionsPromise:u})})}export{Z as n,Y as r,se as t};
|
|
2
|
+
//# sourceMappingURL=text-editor-BYE2-G5K.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editor-BYE2-G5K.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 { lazy, Suspense, use, 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 { ListKeymap } from '@tiptap/extension-list-keymap';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport TextAlign from '@tiptap/extension-text-align';\nimport Underline from '@tiptap/extension-underline';\nimport { type AnyExtension, EditorContent, useEditor, useEditorState } from '@tiptap/react';\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\n/**\n * `Link`, `TaskList`/`TaskItem`, `Highlight`, `Color`/`TextStyle`, and `CharacterCount` are only\n * ever added to the editor's extension list when their matching feature flag is on — dynamically\n * importing them (instead of the previous unconditional top-level imports) keeps every one of\n * these ProseMirror-backed packages out of a consumer's bundle unless that consumer actually\n * enables the flag. Cached by module specifier so multiple editors / re-renders share one fetch.\n */\nconst moduleCache = new Map<string, Promise<unknown>>();\nfunction loadModule<T>(specifier: string, loader: () => Promise<T>): Promise<T> {\n let cached = moduleCache.get(specifier) as Promise<T> | undefined;\n if (!cached) {\n cached = loader();\n moduleCache.set(specifier, cached);\n }\n return cached;\n}\n\ntype OptionalExtensionFlags = {\n needsTextStyle: boolean;\n enableLink: boolean;\n enableTaskList: boolean;\n enableHighlight: boolean;\n enableColor: boolean;\n needsCharCount: boolean;\n maxLength?: number;\n};\n\nasync function loadOptionalExtensions(flags: OptionalExtensionFlags): Promise<AnyExtension[]> {\n const tasks: Promise<AnyExtension | AnyExtension[]>[] = [];\n\n if (flags.needsTextStyle) {\n tasks.push(loadModule('@tiptap/extension-text-style', () => import('@tiptap/extension-text-style')).then(m => m.TextStyle));\n }\n if (flags.enableLink) {\n tasks.push(\n loadModule('@tiptap/extension-link', () => import('@tiptap/extension-link')).then(m =>\n m.Link.configure({ openOnClick: false, linkOnPaste: true, defaultProtocol: 'https' })\n )\n );\n }\n if (flags.enableTaskList) {\n tasks.push(\n Promise.all([\n loadModule('@tiptap/extension-task-list', () => import('@tiptap/extension-task-list')),\n loadModule('@tiptap/extension-task-item', () => import('@tiptap/extension-task-item')),\n ]).then(([{ TaskList }, { TaskItem }]) => [TaskList, TaskItem.configure({ nested: true })])\n );\n }\n if (flags.enableHighlight) {\n tasks.push(loadModule('@tiptap/extension-highlight', () => import('@tiptap/extension-highlight')).then(m => m.Highlight.configure({ multicolor: true })));\n }\n if (flags.enableColor) {\n tasks.push(loadModule('@tiptap/extension-text-style', () => import('@tiptap/extension-text-style')).then(m => m.Color));\n }\n if (flags.needsCharCount) {\n tasks.push(\n loadModule('@tiptap/extension-character-count', () => import('@tiptap/extension-character-count')).then(m =>\n m.CharacterCount.configure({ limit: flags.maxLength })\n )\n );\n }\n\n return (await Promise.all(tasks)).flat();\n}\n\nconst BubbleMenu = lazy(() => import('@tiptap/react/menus').then(m => ({ default: m.BubbleMenu })));\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\ntype TextEditorEngineProps = TextEditorProps & {\n needsCharCount: boolean;\n optionalExtensionsPromise: Promise<AnyExtension[]>;\n};\n\nfunction TextEditorEngine({\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 needsCharCount,\n optionalExtensionsPromise,\n}: TextEditorEngineProps) {\n const optionalExtensions = use(optionalExtensionsPromise);\n\n const extensions = useMemo(\n () => [\n StarterKit,\n Underline,\n Placeholder.configure({ placeholder }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n ListKeymap,\n ...optionalExtensions,\n ],\n [placeholder, optionalExtensions]\n );\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 <Suspense fallback={null}>\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 </Suspense>\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\nfunction TextEditor(props: TextEditorProps) {\n const { maxLength, showCharacterCount, onCharacterCount, enableColor, enableHighlight, enableLink, enableTaskList } = props;\n\n const needsCharCount = maxLength !== undefined || !!showCharacterCount || onCharacterCount !== undefined;\n const needsTextStyle = !!enableColor || !!enableHighlight;\n\n const optionalExtensionsPromise = useMemo(\n () =>\n loadOptionalExtensions({\n needsTextStyle,\n enableLink: !!enableLink,\n enableTaskList: !!enableTaskList,\n enableHighlight: !!enableHighlight,\n enableColor: !!enableColor,\n needsCharCount,\n maxLength,\n }),\n [needsTextStyle, enableLink, enableTaskList, enableHighlight, enableColor, needsCharCount, maxLength]\n );\n\n return (\n <Suspense fallback={null}>\n <TextEditorEngine {...props} needsCharCount={needsCharCount} optionalExtensionsPromise={optionalExtensionsPromise} />\n </Suspense>\n );\n}\n\nexport { TextEditor };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./rolldown-runtime-CMqjfN_6.cjs"),t=require("./ui/dropdown-menu.cjs"),n=require("./ui/popover.cjs");let r=require("lucide-react"),i=require("react"),a=require("@customafk/react-toolkit/utils"),o=require("class-variance-authority"),s=require("react/jsx-runtime"),c=require("@tiptap/react"),l=require("@tiptap/extension-list-keymap"),u=require("@tiptap/extension-placeholder");u=e.t(u,1);let d=require("@tiptap/extension-text-align");d=e.t(d,1);let f=require("@tiptap/extension-underline");f=e.t(f,1);let p=require("@tiptap/starter-kit");p=e.t(p,1);function m({isActive:e,className:t,children:n,...r}){return(0,s.jsx)(`button`,{type:`button`,"data-slot":`toolbar-button`,"data-active":e||void 0,className:(0,a.cn)(`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 h(){return(0,s.jsx)(`div`,{"data-slot":`toolbar-divider`,className:`mx-0.5 h-5 w-px shrink-0 bg-border`})}function g({editor:e}){let[t,o]=(0,i.useState)(!1),[l,u]=(0,i.useState)(``),d=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`link`)}),f=(0,i.useCallback)(t=>{t&&u(e.getAttributes(`link`).href??``),o(t)},[e]),p=(0,i.useCallback)(()=>{let t=l.trim();t&&(e.chain().focus().setLink({href:t,target:`_blank`}).run(),o(!1))},[e,l]),h=(0,i.useCallback)(()=>{e.chain().focus().unsetLink().run(),o(!1)},[e]);return(0,s.jsxs)(n.Popover,{open:t,onOpenChange:f,children:[(0,s.jsx)(n.PopoverTrigger,{asChild:!0,children:(0,s.jsx)(m,{isActive:d,title:`Link (Ctrl+K)`,"data-slot":`toolbar-link-button`,children:(0,s.jsx)(r.Link2,{className:`h-3.5 w-3.5`})})}),(0,s.jsxs)(n.PopoverContent,{"data-slot":`link-dialog`,sideOffset:6,align:`start`,className:`w-72 p-3`,children:[(0,s.jsx)(`p`,{className:`mb-2 font-medium text-text-positive-strong text-xs`,children:d?`Edit Link`:`Insert Link`}),(0,s.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,s.jsx)(`input`,{type:`url`,placeholder:`https://example.com`,value:l,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),p()),e.key===`Escape`&&o(!1)},autoFocus:!0,className:(0,a.cn)(`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`)}),(0,s.jsx)(`button`,{type:`button`,onClick:p,disabled:!l.trim(),className:(0,a.cn)(`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`})]}),d&&(0,s.jsxs)(`button`,{type:`button`,onClick:h,className:`mt-2 flex items-center gap-1 text-danger-strong text-xs hover:underline`,children:[(0,s.jsx)(r.Link2Off,{className:`h-3 w-3`}),`Remove link`]})]})]})}const _=(0,o.cva)([`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`}}),v=[{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`}],y=[{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 b({editor:e,className:i,enableLink:o,enableTaskList:l,enableHighlight:u,enableColor:d}){let f=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`heading`,{level:1})}),p=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`heading`,{level:2})}),_=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`heading`,{level:3})}),b=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`bold`)}),x=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`italic`)}),S=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`underline`)}),C=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`strike`)}),w=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`code`)}),T=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`bulletList`)}),E=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`orderedList`)}),D=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`taskList`)}),O=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`blockquote`)}),k=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive(`codeBlock`)}),A=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive({textAlign:`left`})}),j=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive({textAlign:`center`})}),M=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive({textAlign:`right`})}),N=(0,c.useEditorState)({editor:e,selector:e=>e.editor.isActive({textAlign:`justify`})}),P=f?`H1`:p?`H2`:_?`H3`:`P`;return(0,s.jsxs)(`div`,{"data-slot":`text-editor-toolbar`,className:(0,a.cn)(`flex flex-wrap items-center gap-0.5 border-border border-b bg-muted-muted/50 p-1.5`,i),children:[(0,s.jsx)(m,{onClick:()=>e.chain().focus().undo().run(),disabled:!e.can().undo(),title:`Undo (Ctrl+Z)`,children:(0,s.jsx)(r.Undo,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().redo().run(),disabled:!e.can().redo(),title:`Redo (Ctrl+Y)`,children:(0,s.jsx)(r.Redo,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(h,{}),(0,s.jsxs)(t.DropdownMenu,{children:[(0,s.jsx)(t.DropdownMenuTrigger,{asChild:!0,children:(0,s.jsxs)(`button`,{type:`button`,"data-slot":`toolbar-heading-trigger`,className:(0,a.cn)(`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`,(f||p||_)&&`bg-primary-muted text-primary hover:bg-primary-muted/80 hover:text-primary`),children:[(0,s.jsx)(`span`,{className:`w-5 text-center`,children:P}),(0,s.jsx)(r.ChevronDown,{className:`h-3 w-3 opacity-60`})]})}),(0,s.jsxs)(t.DropdownMenuContent,{align:`start`,className:`min-w-32`,children:[(0,s.jsx)(t.DropdownMenuItem,{onClick:()=>e.chain().focus().setParagraph().run(),children:(0,s.jsx)(`span`,{className:`text-sm`,children:`Paragraph`})}),(0,s.jsx)(t.DropdownMenuItem,{onClick:()=>e.chain().focus().toggleHeading({level:1}).run(),children:(0,s.jsx)(`span`,{className:`font-bold text-lg`,children:`Heading 1`})}),(0,s.jsx)(t.DropdownMenuItem,{onClick:()=>e.chain().focus().toggleHeading({level:2}).run(),children:(0,s.jsx)(`span`,{className:`font-semibold text-base`,children:`Heading 2`})}),(0,s.jsx)(t.DropdownMenuItem,{onClick:()=>e.chain().focus().toggleHeading({level:3}).run(),children:(0,s.jsx)(`span`,{className:`font-semibold text-sm`,children:`Heading 3`})})]})]}),(0,s.jsx)(h,{}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleBold().run(),isActive:b,title:`Bold (Ctrl+B)`,children:(0,s.jsx)(r.Bold,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleItalic().run(),isActive:x,title:`Italic (Ctrl+I)`,children:(0,s.jsx)(r.Italic,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleUnderline().run(),isActive:S,title:`Underline (Ctrl+U)`,children:(0,s.jsx)(r.Underline,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleStrike().run(),isActive:C,title:`Strikethrough`,children:(0,s.jsx)(r.Strikethrough,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleCode().run(),isActive:w,title:`Inline Code`,children:(0,s.jsx)(r.Code,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(h,{}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleBulletList().run(),isActive:T,title:`Bullet List`,children:(0,s.jsx)(r.List,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleOrderedList().run(),isActive:E,title:`Ordered List`,children:(0,s.jsx)(r.ListOrdered,{className:`h-3.5 w-3.5`})}),l&&(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleTaskList().run(),isActive:D,title:`Task List`,children:(0,s.jsx)(r.ListChecks,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(h,{}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleBlockquote().run(),isActive:O,title:`Blockquote`,children:(0,s.jsx)(r.Quote,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().toggleCodeBlock().run(),isActive:k,title:`Code Block`,children:(0,s.jsx)(r.Code2,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().setHorizontalRule().run(),title:`Horizontal Rule`,children:(0,s.jsx)(r.Minus,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(h,{}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().setTextAlign(`left`).run(),isActive:A,title:`Align Left`,children:(0,s.jsx)(r.AlignLeft,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().setTextAlign(`center`).run(),isActive:j,title:`Align Center`,children:(0,s.jsx)(r.AlignCenter,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().setTextAlign(`right`).run(),isActive:M,title:`Align Right`,children:(0,s.jsx)(r.AlignRight,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>e.chain().focus().setTextAlign(`justify`).run(),isActive:N,title:`Align Justify`,children:(0,s.jsx)(r.AlignJustify,{className:`h-3.5 w-3.5`})}),o&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(h,{}),(0,s.jsx)(g,{editor:e})]}),(d||u)&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(h,{}),d&&(0,s.jsxs)(n.Popover,{children:[(0,s.jsx)(n.PopoverTrigger,{asChild:!0,children:(0,s.jsx)(m,{title:`Text Color`,children:(0,s.jsx)(r.Palette,{className:`h-3.5 w-3.5`})})}),(0,s.jsxs)(n.PopoverContent,{align:`start`,className:`w-44 p-2`,children:[(0,s.jsx)(`p`,{className:`mb-1.5 font-medium text-text-positive-weak text-xs`,children:`Text Color`}),(0,s.jsx)(`div`,{className:`grid grid-cols-5 gap-1`,children:y.map(t=>(0,s.jsx)(`button`,{type:`button`,title:t.label,onClick:()=>{t.value?e.chain().focus().setColor(t.value).run():e.chain().focus().unsetColor().run()},className:(0,a.cn)(`h-6 w-6 rounded border border-border transition-transform hover:scale-110`,!t.value&&`bg-background text-[10px] text-text-positive leading-none`),style:t.value?{backgroundColor:t.value}:void 0,children:!t.value&&`∅`},t.label))})]})]}),u&&(0,s.jsxs)(n.Popover,{children:[(0,s.jsx)(n.PopoverTrigger,{asChild:!0,children:(0,s.jsx)(m,{title:`Highlight`,children:(0,s.jsx)(r.Highlighter,{className:`h-3.5 w-3.5`})})}),(0,s.jsxs)(n.PopoverContent,{align:`start`,className:`w-44 p-2`,children:[(0,s.jsx)(`p`,{className:`mb-1.5 font-medium text-text-positive-weak text-xs`,children:`Highlight`}),(0,s.jsx)(`div`,{className:`grid grid-cols-5 gap-1`,children:v.map(t=>(0,s.jsx)(`button`,{type:`button`,title:t.label,onClick:()=>e.chain().focus().toggleHighlight({color:t.value}).run(),className:`h-6 w-6 rounded border border-border transition-transform hover:scale-110`,style:{backgroundColor:t.value}},t.label))}),(0,s.jsx)(`button`,{type:`button`,onClick:()=>e.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`})]})]})]})]})}const x=new Map;function S(e,t){let n=x.get(e);return n||(n=t(),x.set(e,n)),n}async function C(e){let t=[];return e.needsTextStyle&&t.push(S(`@tiptap/extension-text-style`,()=>import(`@tiptap/extension-text-style`)).then(e=>e.TextStyle)),e.enableLink&&t.push(S(`@tiptap/extension-link`,()=>import(`@tiptap/extension-link`)).then(e=>e.Link.configure({openOnClick:!1,linkOnPaste:!0,defaultProtocol:`https`}))),e.enableTaskList&&t.push(Promise.all([S(`@tiptap/extension-task-list`,()=>import(`@tiptap/extension-task-list`)),S(`@tiptap/extension-task-item`,()=>import(`@tiptap/extension-task-item`))]).then(([{TaskList:e},{TaskItem:t}])=>[e,t.configure({nested:!0})])),e.enableHighlight&&t.push(S(`@tiptap/extension-highlight`,()=>import(`@tiptap/extension-highlight`)).then(e=>e.Highlight.configure({multicolor:!0}))),e.enableColor&&t.push(S(`@tiptap/extension-text-style`,()=>import(`@tiptap/extension-text-style`)).then(e=>e.Color)),e.needsCharCount&&t.push(S(`@tiptap/extension-character-count`,()=>import(`@tiptap/extension-character-count`)).then(t=>t.CharacterCount.configure({limit:e.maxLength}))),(await Promise.all(t)).flat()}const w=(0,i.lazy)(()=>import(`@tiptap/react/menus`).then(e=>({default:e.BubbleMenu})));function T({value:e,defaultValue:t,onChange:n,placeholder:o=`Start writing...`,readOnly:v=!1,showToolbar:y=!0,variant:x,size:S,className:C,toolbarClassName:T,editorClassName:E,maxLength:D,showCharacterCount:O,onCharacterCount:k,enableLink:A,enableBubbleMenu:j,enableTaskList:M,enableHighlight:N,enableColor:P,needsCharCount:F,optionalExtensionsPromise:I}){let L=(0,i.use)(I),R=(0,c.useEditor)({extensions:(0,i.useMemo)(()=>[p.default,f.default,u.default.configure({placeholder:o}),d.default.configure({types:[`heading`,`paragraph`]}),l.ListKeymap,...L],[o,L]),content:e??t,editable:!v,onUpdate:({editor:e})=>{if(n?.(e.getHTML()),k){let t=e.storage.characterCount;k({characters:t.characters(),words:t.words()})}}});(0,i.useEffect)(()=>{!R||e===void 0||R.getHTML()!==e&&R.commands.setContent(e)},[R,e]),(0,i.useEffect)(()=>{R&&R.setEditable(!v)},[R,v]);let z=(0,c.useEditorState)({editor:R,selector:e=>{let t=e.editor?.storage?.characterCount;return t?t.characters():0}}),B=(0,c.useEditorState)({editor:R,selector:e=>{let t=e.editor?.storage?.characterCount;return t?t.words():0}}),V=O||D!==void 0,H=D!==void 0&&z>D*.9;return(0,s.jsxs)(`div`,{"data-slot":`text-editor`,className:(0,a.cn)(`lunas-text-editor`,_({variant:x,size:S}),C),children:[y&&!v&&R&&(0,s.jsx)(b,{editor:R,className:T,enableLink:A,enableTaskList:M,enableHighlight:N,enableColor:P}),j&&!v&&R&&(0,s.jsx)(i.Suspense,{fallback:null,children:(0,s.jsxs)(w,{editor:R,options:{placement:`top`},className:(0,a.cn)(`flex items-center gap-0.5 rounded-md border border-border bg-popover p-1 shadow-dropdown`),children:[(0,s.jsx)(m,{onClick:()=>R.chain().focus().toggleBold().run(),isActive:R.isActive(`bold`),title:`Bold (Ctrl+B)`,children:(0,s.jsx)(r.Bold,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>R.chain().focus().toggleItalic().run(),isActive:R.isActive(`italic`),title:`Italic (Ctrl+I)`,children:(0,s.jsx)(r.Italic,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>R.chain().focus().toggleUnderline().run(),isActive:R.isActive(`underline`),title:`Underline (Ctrl+U)`,children:(0,s.jsx)(r.Underline,{className:`h-3.5 w-3.5`})}),(0,s.jsx)(m,{onClick:()=>R.chain().focus().toggleStrike().run(),isActive:R.isActive(`strike`),title:`Strikethrough`,children:(0,s.jsx)(r.Strikethrough,{className:`h-3.5 w-3.5`})}),A&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(h,{}),(0,s.jsx)(g,{editor:R})]})]})}),(0,s.jsx)(c.EditorContent,{editor:R,"data-slot":`text-editor-content`,className:(0,a.cn)(`flex-1 bg-white text-sm text-text-positive`,E)}),V&&F&&(0,s.jsxs)(`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:[(0,s.jsxs)(`span`,{children:[B,` words`]}),(0,s.jsxs)(`span`,{"data-warning":H||void 0,className:`data-warning:text-warning-strong`,children:[z,D?` / ${D}`:``,` characters`]})]})]})}function E(e){let{maxLength:t,showCharacterCount:n,onCharacterCount:r,enableColor:a,enableHighlight:o,enableLink:c,enableTaskList:l}=e,u=t!==void 0||!!n||r!==void 0,d=!!a||!!o,f=(0,i.useMemo)(()=>C({needsTextStyle:d,enableLink:!!c,enableTaskList:!!l,enableHighlight:!!o,enableColor:!!a,needsCharCount:u,maxLength:t}),[d,c,l,o,a,u,t]);return(0,s.jsx)(i.Suspense,{fallback:null,children:(0,s.jsx)(T,{...e,needsCharCount:u,optionalExtensionsPromise:f})})}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return E}});
|
|
2
|
+
//# sourceMappingURL=text-editor-CfQk5dIx.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editor-CfQk5dIx.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","Suspense","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 { lazy, Suspense, use, 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 { ListKeymap } from '@tiptap/extension-list-keymap';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport TextAlign from '@tiptap/extension-text-align';\nimport Underline from '@tiptap/extension-underline';\nimport { type AnyExtension, EditorContent, useEditor, useEditorState } from '@tiptap/react';\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\n/**\n * `Link`, `TaskList`/`TaskItem`, `Highlight`, `Color`/`TextStyle`, and `CharacterCount` are only\n * ever added to the editor's extension list when their matching feature flag is on — dynamically\n * importing them (instead of the previous unconditional top-level imports) keeps every one of\n * these ProseMirror-backed packages out of a consumer's bundle unless that consumer actually\n * enables the flag. Cached by module specifier so multiple editors / re-renders share one fetch.\n */\nconst moduleCache = new Map<string, Promise<unknown>>();\nfunction loadModule<T>(specifier: string, loader: () => Promise<T>): Promise<T> {\n let cached = moduleCache.get(specifier) as Promise<T> | undefined;\n if (!cached) {\n cached = loader();\n moduleCache.set(specifier, cached);\n }\n return cached;\n}\n\ntype OptionalExtensionFlags = {\n needsTextStyle: boolean;\n enableLink: boolean;\n enableTaskList: boolean;\n enableHighlight: boolean;\n enableColor: boolean;\n needsCharCount: boolean;\n maxLength?: number;\n};\n\nasync function loadOptionalExtensions(flags: OptionalExtensionFlags): Promise<AnyExtension[]> {\n const tasks: Promise<AnyExtension | AnyExtension[]>[] = [];\n\n if (flags.needsTextStyle) {\n tasks.push(loadModule('@tiptap/extension-text-style', () => import('@tiptap/extension-text-style')).then(m => m.TextStyle));\n }\n if (flags.enableLink) {\n tasks.push(\n loadModule('@tiptap/extension-link', () => import('@tiptap/extension-link')).then(m =>\n m.Link.configure({ openOnClick: false, linkOnPaste: true, defaultProtocol: 'https' })\n )\n );\n }\n if (flags.enableTaskList) {\n tasks.push(\n Promise.all([\n loadModule('@tiptap/extension-task-list', () => import('@tiptap/extension-task-list')),\n loadModule('@tiptap/extension-task-item', () => import('@tiptap/extension-task-item')),\n ]).then(([{ TaskList }, { TaskItem }]) => [TaskList, TaskItem.configure({ nested: true })])\n );\n }\n if (flags.enableHighlight) {\n tasks.push(loadModule('@tiptap/extension-highlight', () => import('@tiptap/extension-highlight')).then(m => m.Highlight.configure({ multicolor: true })));\n }\n if (flags.enableColor) {\n tasks.push(loadModule('@tiptap/extension-text-style', () => import('@tiptap/extension-text-style')).then(m => m.Color));\n }\n if (flags.needsCharCount) {\n tasks.push(\n loadModule('@tiptap/extension-character-count', () => import('@tiptap/extension-character-count')).then(m =>\n m.CharacterCount.configure({ limit: flags.maxLength })\n )\n );\n }\n\n return (await Promise.all(tasks)).flat();\n}\n\nconst BubbleMenu = lazy(() => import('@tiptap/react/menus').then(m => ({ default: m.BubbleMenu })));\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\ntype TextEditorEngineProps = TextEditorProps & {\n needsCharCount: boolean;\n optionalExtensionsPromise: Promise<AnyExtension[]>;\n};\n\nfunction TextEditorEngine({\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 needsCharCount,\n optionalExtensionsPromise,\n}: TextEditorEngineProps) {\n const optionalExtensions = use(optionalExtensionsPromise);\n\n const extensions = useMemo(\n () => [\n StarterKit,\n Underline,\n Placeholder.configure({ placeholder }),\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n ListKeymap,\n ...optionalExtensions,\n ],\n [placeholder, optionalExtensions]\n );\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 <Suspense fallback={null}>\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 </Suspense>\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\nfunction TextEditor(props: TextEditorProps) {\n const { maxLength, showCharacterCount, onCharacterCount, enableColor, enableHighlight, enableLink, enableTaskList } = props;\n\n const needsCharCount = maxLength !== undefined || !!showCharacterCount || onCharacterCount !== undefined;\n const needsTextStyle = !!enableColor || !!enableHighlight;\n\n const optionalExtensionsPromise = useMemo(\n () =>\n loadOptionalExtensions({\n needsTextStyle,\n enableLink: !!enableLink,\n enableTaskList: !!enableTaskList,\n enableHighlight: !!enableHighlight,\n enableColor: !!enableColor,\n needsCharCount,\n maxLength,\n }),\n [needsTextStyle, enableLink, enableTaskList, enableHighlight, enableColor, needsCharCount, maxLength]\n );\n\n return (\n <Suspense fallback={null}>\n <TextEditorEngine {...props} needsCharCount={needsCharCount} optionalExtensionsPromise={optionalExtensionsPromise} />\n </Suspense>\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-PC9YNeeo.mjs";import{t}from"./text-editor-BYE2-G5K.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-BKyUqvzh.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-fso-sw29.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-field-
|
|
1
|
+
{"version":3,"file":"text-editor-field-fso-sw29.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,wBAAtB,CACE,EAAC,EAAD,CAAO,YAAY,WAAW,eAAc,WAA5C,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAY,gBAAe,WAA3B,CACG,EACA,GAAW,EAAC,EAAD,CAAuB,SAAU,CAAA,CACnC,IACZ,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,WAAa,CAAsB,CAAA,CACnD,IACP,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-CNrZQZhn.cjs"),t=require("./text-editor-CfQk5dIx.cjs"),n=require("./field-BV5twmKA.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-gas5r-xy.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor-field-
|
|
1
|
+
{"version":3,"file":"text-editor-field-gas5r-xy.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,wBAAtB,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAO,YAAY,WAAW,eAAc,WAA5C,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,aAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,gBAAe,WAA3B,CACG,EACA,IAAW,EAAA,EAAA,IAAA,CAACC,EAAAA,aAAD,CAAuB,SAAU,CAAA,CACnC,KACZ,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,WAAa,CAAsB,CAAA,CACnD,KACP,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAiB,CAAA,CACP,GAEhB,CAAC,EACD,EAAgB,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=text-field-
|
|
1
|
+
import{G as e}from"./tanstack-form-PC9YNeeo.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-BKyUqvzh.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,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-B67oTV62.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-field-qhiYvQKt.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/fields/text-field.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback, useId, useRef } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon, XIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTooltip,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '../form-context';\n\nimport type { TextFieldProps as Props } from '../../types';\n\n/** Fraction of maxLength at which the counter turns warning color (80%). */\nconst COUNTER_WARNING_THRESHOLD = 0.8;\n\n/** Pixel size for inline adornment icons (error ban, loading spinner). */\nconst ADORNMENT_ICON_SIZE = 14;\n\n// Static handler — no closure deps, shared across all TextField instances\nconst onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = e => {\n if (e.key === 'Enter') e.preventDefault();\n};\n\n/**\n * A TanStack Form-connected single-line text input with label, validation, and optional features.\n *\n * Must be rendered inside an `AppField` context from `useTanStackForm`.\n * The field value type is `string | null` — `null` represents an empty/unset state.\n *\n * ---\n *\n * **Basic usage**\n * @example\n * const { AppField } = useTanStackForm({ defaultValues: { name: null } });\n *\n * <AppField name=\"name\">\n * {field => <field.TextField label=\"Full name\" placeholder=\"Nguyễn Văn A\" />}\n * </AppField>\n *\n * ---\n *\n * **With validation**\n * @example\n * <AppField\n * name=\"username\"\n * validators={{ onChange: ({ value }) => !value ? 'Bắt buộc' : undefined }}\n * >\n * {field => <field.TextField label=\"Username\" required />}\n * </AppField>\n *\n * ---\n *\n * **With character counter and max length**\n * @example\n * <AppField name=\"bio\">\n * {field => (\n * <field.TextField\n * label=\"Bio\"\n * counter\n * maxLength={160}\n * placeholder=\"Giới thiệu bản thân…\"\n * />\n * )}\n * </AppField>\n *\n * ---\n *\n * **With clear button and helper note**\n * @example\n * <AppField name=\"search\">\n * {field => (\n * <field.TextField\n * label=\"Tìm kiếm\"\n * showClearButton\n * helperText=\"Nhập ít nhất 3 ký tự để tìm kiếm.\"\n * />\n * )}\n * </AppField>\n *\n * ---\n *\n * **Horizontal layout**\n * @example\n * <AppField name=\"code\">\n * {field => (\n * <field.TextField\n * label=\"Mã sản phẩm\"\n * orientation=\"horizontal\"\n * tooltip=\"Mã duy nhất định danh sản phẩm trong hệ thống.\"\n * />\n * )}\n * </AppField>\n */\nexport const TextField = memo<Props>(\n ({\n label,\n description,\n placeholder,\n\n tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showClearButton = false,\n showErrorMessage = true,\n\n required = false,\n disabled = false,\n maxLength,\n }) => {\n const id = useId();\n const errorId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n const isDisabled = disabled || isSubmitting;\n\n const _touched = state.meta.isDirty || state.meta.isTouched;\n const _invalid = _touched && !state.meta.isValid;\n const _isEmpty = required && state.value === null;\n const _hasErrors = state.meta.errors.length > 0;\n const _showClearButton = showClearButton && !isDisabled && !!state.value;\n\n // Counter values are only computed when the feature is active\n const _count = counter ? (state.value?.length ?? 0) : 0;\n const _isNearLimit = counter && !!maxLength && _count >= maxLength * COUNTER_WARNING_THRESHOLD;\n const _isAtLimit = counter && !!maxLength && _count >= maxLength;\n const _countText = counter ? (maxLength ? `${_count} / ${maxLength} ký tự` : `${_count} ký tự`) : null;\n\n // Skip the bottom row entirely when neither error nor counter will render\n const _showBottomRow = counter || (_touched && showErrorMessage);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [counter, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n handleChange(null);\n inputRef.current?.focus();\n }, [handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={id}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n {description && <FieldDescription>{description}</FieldDescription>}\n </FieldContent>\n <FieldContentMain>\n <Input\n ref={inputRef}\n id={id}\n name={name}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n aria-describedby={errorId}\n autoComplete=\"off\"\n placeholder={placeholder}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n disabled={isDisabled}\n className={cn('pr-6', isDisabled && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n {_showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Xóa\"\n 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\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={ADORNMENT_ICON_SIZE} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {!_showClearButton && _touched && showErrorMessage && _hasErrors && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon aria-hidden=\"true\" size={ADORNMENT_ICON_SIZE} />\n </div>\n )}\n {_showBottomRow && (\n <div className=\"my-1 flex w-full items-start justify-between gap-x-2\">\n {_touched && showErrorMessage ? <FieldError id={errorId} className=\"flex-1\" errors={state.meta.errors} /> : <div />}\n {counter && (\n <p\n className={cn(\n 'h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors',\n _isAtLimit ? 'font-medium text-danger-strong' : _isNearLimit ? 'text-warning-strong' : 'text-text-positive-weak'\n )}\n >\n {_countText}\n </p>\n )}\n </div>\n )}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n }\n);\n\nTextField.displayName = 'TextField';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"text-field-B67oTV62.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/fields/text-field.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback, useId, useRef } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { BanIcon, Loader2Icon, XIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Input } from '@/components/ui/input';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTooltip,\n} from '@/components/features/tanstack-form/components/ui/field';\nimport { useTanStackFieldContext } from '../form-context';\n\nimport type { TextFieldProps as Props } from '../../types';\n\n/** Fraction of maxLength at which the counter turns warning color (80%). */\nconst COUNTER_WARNING_THRESHOLD = 0.8;\n\n/** Pixel size for inline adornment icons (error ban, loading spinner). */\nconst ADORNMENT_ICON_SIZE = 14;\n\n// Static handler — no closure deps, shared across all TextField instances\nconst onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = e => {\n if (e.key === 'Enter') e.preventDefault();\n};\n\n/**\n * A TanStack Form-connected single-line text input with label, validation, and optional features.\n *\n * Must be rendered inside an `AppField` context from `useTanStackForm`.\n * The field value type is `string | null` — `null` represents an empty/unset state.\n *\n * ---\n *\n * **Basic usage**\n * @example\n * const { AppField } = useTanStackForm({ defaultValues: { name: null } });\n *\n * <AppField name=\"name\">\n * {field => <field.TextField label=\"Full name\" placeholder=\"Nguyễn Văn A\" />}\n * </AppField>\n *\n * ---\n *\n * **With validation**\n * @example\n * <AppField\n * name=\"username\"\n * validators={{ onChange: ({ value }) => !value ? 'Bắt buộc' : undefined }}\n * >\n * {field => <field.TextField label=\"Username\" required />}\n * </AppField>\n *\n * ---\n *\n * **With character counter and max length**\n * @example\n * <AppField name=\"bio\">\n * {field => (\n * <field.TextField\n * label=\"Bio\"\n * counter\n * maxLength={160}\n * placeholder=\"Giới thiệu bản thân…\"\n * />\n * )}\n * </AppField>\n *\n * ---\n *\n * **With clear button and helper note**\n * @example\n * <AppField name=\"search\">\n * {field => (\n * <field.TextField\n * label=\"Tìm kiếm\"\n * showClearButton\n * helperText=\"Nhập ít nhất 3 ký tự để tìm kiếm.\"\n * />\n * )}\n * </AppField>\n *\n * ---\n *\n * **Horizontal layout**\n * @example\n * <AppField name=\"code\">\n * {field => (\n * <field.TextField\n * label=\"Mã sản phẩm\"\n * orientation=\"horizontal\"\n * tooltip=\"Mã duy nhất định danh sản phẩm trong hệ thống.\"\n * />\n * )}\n * </AppField>\n */\nexport const TextField = memo<Props>(\n ({\n label,\n description,\n placeholder,\n\n tooltip,\n helperText,\n counter = false,\n orientation = 'responsive',\n showClearButton = false,\n showErrorMessage = true,\n\n required = false,\n disabled = false,\n maxLength,\n }) => {\n const id = useId();\n const errorId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n const isDisabled = disabled || isSubmitting;\n\n const _touched = state.meta.isDirty || state.meta.isTouched;\n const _invalid = _touched && !state.meta.isValid;\n const _isEmpty = required && state.value === null;\n const _hasErrors = state.meta.errors.length > 0;\n const _showClearButton = showClearButton && !isDisabled && !!state.value;\n\n // Counter values are only computed when the feature is active\n const _count = counter ? (state.value?.length ?? 0) : 0;\n const _isNearLimit = counter && !!maxLength && _count >= maxLength * COUNTER_WARNING_THRESHOLD;\n const _isAtLimit = counter && !!maxLength && _count >= maxLength;\n const _countText = counter ? (maxLength ? `${_count} / ${maxLength} ký tự` : `${_count} ký tự`) : null;\n\n // Skip the bottom row entirely when neither error nor counter will render\n const _showBottomRow = counter || (_touched && showErrorMessage);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (counter && maxLength && value.length > maxLength) return;\n handleChange(value || null);\n },\n [counter, maxLength, handleChange]\n );\n\n const onClear = useCallback(() => {\n handleChange(null);\n inputRef.current?.focus();\n }, [handleChange]);\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field orientation={orientation} data-invalid={_invalid}>\n <FieldContent>\n <FieldLabel aria-required={_isEmpty} htmlFor={id}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n {description && <FieldDescription>{description}</FieldDescription>}\n </FieldContent>\n <FieldContentMain>\n <Input\n ref={inputRef}\n id={id}\n name={name}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n aria-describedby={errorId}\n autoComplete=\"off\"\n placeholder={placeholder}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n disabled={isDisabled}\n className={cn('pr-6', isDisabled && 'pointer-events-none bg-muted-muted opacity-60')}\n onBlur={handleBlur}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n {_showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Xóa\"\n 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\"\n onClick={onClear}\n >\n <XIcon aria-hidden=\"true\" />\n </button>\n )}\n {isSubmitting && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak\">\n <Loader2Icon size={ADORNMENT_ICON_SIZE} className=\"animate-spin text-primary-strong\" />\n </div>\n )}\n {!_showClearButton && _touched && showErrorMessage && _hasErrors && (\n <div className=\"absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong\">\n <BanIcon aria-hidden=\"true\" size={ADORNMENT_ICON_SIZE} />\n </div>\n )}\n {_showBottomRow && (\n <div className=\"my-1 flex w-full items-start justify-between gap-x-2\">\n {_touched && showErrorMessage ? <FieldError id={errorId} className=\"flex-1\" errors={state.meta.errors} /> : <div />}\n {counter && (\n <p\n className={cn(\n 'h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors',\n _isAtLimit ? 'font-medium text-danger-strong' : _isNearLimit ? 'text-warning-strong' : 'text-text-positive-weak'\n )}\n >\n {_countText}\n </p>\n )}\n </div>\n )}\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n }\n);\n\nTextField.displayName = 'TextField';\n"],"mappings":"skBA4BA,MAMM,EAA0D,GAAK,CAC/D,EAAE,MAAQ,SAAS,EAAE,eAAe,CAC1C,EAwEa,EAAY,GACtB,CACC,QACA,cACA,cAEA,UACA,aACA,UAAU,GACV,cAAc,aACd,kBAAkB,GAClB,mBAAmB,GAEnB,WAAW,GACX,WAAW,GACX,eACI,CACJ,IAAM,EAAK,EAAM,EACX,EAAU,EAAM,EAChB,EAAW,EAAyB,IAAI,EACxC,CAAE,OAAM,OAAM,QAAO,aAAY,gBAAiB,EAAuC,EAEzF,EAAe,EAAS,EAAK,OAAQ,CAAE,kBAAmB,CAAY,EACtE,EAAa,GAAY,EAEzB,EAAW,EAAM,KAAK,SAAW,EAAM,KAAK,UAC5C,EAAW,GAAY,CAAC,EAAM,KAAK,QACnC,EAAW,GAAY,EAAM,QAAU,KACvC,EAAa,EAAM,KAAK,OAAO,OAAS,EACxC,EAAmB,GAAmB,CAAC,GAAc,CAAC,CAAC,EAAM,MAG7D,EAAS,EAAW,EAAM,OAAO,QAAU,EAAK,EAChD,EAAe,GAAW,CAAC,CAAC,GAAa,GAAU,EAAY,GAC/D,EAAa,GAAW,CAAC,CAAC,GAAa,GAAU,EACjD,EAAa,EAAW,EAAY,GAAG,EAAO,KAAK,EAAU,QAAU,GAAG,EAAO,QAAW,KAG5F,GAAiB,GAAY,GAAY,EAEzC,GAAW,GACd,CAAE,OAAQ,CAAE,YAAc,CACrB,GAAW,GAAa,EAAM,OAAS,GAC3C,EAAa,GAAS,IAAI,CAC5B,EACA,CAAC,EAAS,EAAW,CAAY,CACnC,EAEM,GAAU,MAAkB,CAChC,EAAa,IAAI,EACjB,EAAS,SAAS,MAAM,CAC1B,EAAG,CAAC,CAAY,CAAC,EAEjB,OACE,EAAC,EAAD,CAAY,UAAU,wBAAtB,CACE,EAAC,EAAD,CAAoB,cAAa,eAAc,WAA/C,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAY,gBAAe,EAAU,QAAS,WAA9C,CACG,EACA,GAAW,EAAC,EAAD,CAAuB,SAAU,CAAA,CACnC,IACX,GAAe,EAAC,EAAD,CAAA,SAAmB,CAA8B,CAAA,CACrD,CAAA,CAAA,EACd,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CACE,IAAK,EACD,KACE,OACN,MAAO,EAAM,OAAS,GACtB,eAAc,EACd,mBAAkB,EAClB,aAAa,MACA,cACb,eAAe,OACf,YAAY,MACZ,SAAU,EACV,UAAW,EAAG,OAAQ,GAAc,+CAA+C,EACnF,OAAQ,EACE,YACC,WACZ,CAAA,EACA,GACC,EAAC,SAAD,CACE,KAAK,SACL,aAAW,MACX,UAAU,0SACV,QAAS,YAET,EAAC,EAAD,CAAO,cAAY,MAAQ,CAAA,CACrB,CAAA,EAET,GACC,EAAC,MAAD,CAAK,UAAU,gEACb,EAAC,EAAD,CAAa,KAAM,GAAqB,UAAU,kCAAoC,CAAA,CACnF,CAAA,EAEN,CAAC,GAAoB,GAAY,GAAoB,GACpD,EAAC,MAAD,CAAK,UAAU,mEACb,EAAC,EAAD,CAAS,cAAY,OAAO,KAAM,EAAsB,CAAA,CACrD,CAAA,EAEN,IACC,EAAC,MAAD,CAAK,UAAU,gEAAf,CACG,GAAY,EAAmB,EAAC,EAAD,CAAY,GAAI,EAAS,UAAU,SAAS,OAAQ,EAAM,KAAK,MAAS,CAAA,EAAI,EAAC,MAAD,CAAM,CAAA,EACjH,GACC,EAAC,IAAD,CACE,UAAW,EACT,yEACA,EAAa,iCAAmC,EAAe,sBAAwB,yBACzF,WAEC,CACA,CAAA,CAEF,IAEP,EAAC,EAAD,CAAW,OAAQ,CAAC,CAAC,WAAa,CAAsB,CAAA,CACxC,CAAA,CAAA,CACb,IACP,EAAC,EAAD,CAAiB,CAAA,CACP,GAEhB,CACF,EAEA,EAAU,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./
|
|
2
|
-
//# sourceMappingURL=text-field-
|
|
1
|
+
const e=require("./tanstack-form-CNrZQZhn.cjs"),t=require("./ui/input.cjs"),n=require("./field-BV5twmKA.cjs");let r=require("lucide-react"),i=require("react"),a=require("@customafk/react-toolkit/utils"),o=require("react/jsx-runtime"),s=require("@tanstack/react-form");const c=e=>{e.key===`Enter`&&e.preventDefault()},l=(0,i.memo)(({label:l,description:u,placeholder:d,tooltip:f,helperText:p,counter:m=!1,orientation:h=`responsive`,showClearButton:g=!1,showErrorMessage:_=!0,required:v=!1,disabled:y=!1,maxLength:b})=>{let x=(0,i.useId)(),S=(0,i.useId)(),C=(0,i.useRef)(null),{form:w,name:T,state:E,handleBlur:D,handleChange:O}=e.G(),k=(0,s.useStore)(w.store,({isSubmitting:e})=>e),A=y||k,j=E.meta.isDirty||E.meta.isTouched,M=j&&!E.meta.isValid,N=v&&E.value===null,P=E.meta.errors.length>0,F=g&&!A&&!!E.value,I=m?E.value?.length??0:0,L=m&&!!b&&I>=b*.8,R=m&&!!b&&I>=b,z=m?b?`${I} / ${b} ký tự`:`${I} ký tự`:null,B=m||j&&_,V=(0,i.useCallback)(({target:{value:e}})=>{m&&b&&e.length>b||O(e||null)},[m,b,O]),H=(0,i.useCallback)(()=>{O(null),C.current?.focus()},[O]);return(0,o.jsxs)(n.FieldGroup,{className:`gap-y-4 px-4`,children:[(0,o.jsxs)(n.Field,{orientation:h,"data-invalid":M,children:[(0,o.jsxs)(n.FieldContent,{children:[(0,o.jsxs)(n.FieldLabel,{"aria-required":N,htmlFor:x,children:[l,f&&(0,o.jsx)(n.FieldTooltip,{tooltip:f})]}),u&&(0,o.jsx)(n.FieldDescription,{children:u})]}),(0,o.jsxs)(n.FieldContentMain,{children:[(0,o.jsx)(t.Input,{ref:C,id:x,name:T,value:E.value??``,"aria-invalid":M,"aria-describedby":S,autoComplete:`off`,placeholder:d,autoCapitalize:`none`,autoCorrect:`off`,disabled:A,className:(0,a.cn)(`pr-6`,A&&`pointer-events-none bg-muted-muted opacity-60`),onBlur:D,onChange:V,onKeyDown:c}),F&&(0,o.jsx)(`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:H,children:(0,o.jsx)(r.XIcon,{"aria-hidden":`true`})}),k&&(0,o.jsx)(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak`,children:(0,o.jsx)(r.Loader2Icon,{size:14,className:`animate-spin text-primary-strong`})}),!F&&j&&_&&P&&(0,o.jsx)(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong`,children:(0,o.jsx)(r.BanIcon,{"aria-hidden":`true`,size:14})}),B&&(0,o.jsxs)(`div`,{className:`my-1 flex w-full items-start justify-between gap-x-2`,children:[j&&_?(0,o.jsx)(n.FieldError,{id:S,className:`flex-1`,errors:E.meta.errors}):(0,o.jsx)(`div`,{}),m&&(0,o.jsx)(`p`,{className:(0,a.cn)(`h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors`,R?`font-medium text-danger-strong`:L?`text-warning-strong`:`text-text-positive-weak`),children:z})]}),(0,o.jsx)(n.FieldNote,{isShow:!!p,children:p})]})]}),(0,o.jsx)(n.FieldSeparator,{})]})});l.displayName=`TextField`,exports.TextField=l;
|
|
2
|
+
//# sourceMappingURL=text-field-BMo-8rsq.cjs.map
|