@customafk/lunas-ui 0.2.64 → 0.2.66
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-42PxGLsR.cjs +2 -0
- package/dist/action-submit-42PxGLsR.cjs.map +1 -0
- package/dist/action-submit-SviPJW3i.mjs +2 -0
- package/dist/action-submit-SviPJW3i.mjs.map +1 -0
- package/dist/actions-form-Bo46j_dH.cjs +2 -0
- package/dist/actions-form-Bo46j_dH.cjs.map +1 -0
- package/dist/actions-form-QdAsKwcQ.mjs +2 -0
- package/dist/actions-form-QdAsKwcQ.mjs.map +1 -0
- 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-DzsZKA9l.cjs +2 -0
- package/dist/analysis-panel-DzsZKA9l.cjs.map +1 -0
- package/dist/analysis-panel-ikcRtzG9.mjs +2 -0
- package/dist/analysis-panel-ikcRtzG9.mjs.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-9WXwgQgH.cjs +2 -0
- package/dist/badge-display-9WXwgQgH.cjs.map +1 -0
- package/dist/badge-display-Dx-dITLB.mjs +2 -0
- package/dist/badge-display-Dx-dITLB.mjs.map +1 -0
- package/dist/boolean-display-OVCtvzI1.mjs +2 -0
- package/dist/boolean-display-OVCtvzI1.mjs.map +1 -0
- package/dist/boolean-display-pmzYS-ND.cjs +2 -0
- package/dist/boolean-display-pmzYS-ND.cjs.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/card-form-BR5kDTzB.cjs +2 -0
- package/dist/card-form-BR5kDTzB.cjs.map +1 -0
- package/dist/card-form-D9fNO-6F.mjs +2 -0
- package/dist/card-form-D9fNO-6F.mjs.map +1 -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-B1vCz-Wf.cjs +2 -0
- package/dist/checkbox-field-B1vCz-Wf.cjs.map +1 -0
- package/dist/checkbox-field-FqCe38_D.mjs +2 -0
- package/dist/checkbox-field-FqCe38_D.mjs.map +1 -0
- 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-D6fiCcvU.mjs.map +1 -0
- package/dist/combobox-field-DLpH6J9H.cjs +2 -0
- package/dist/combobox-field-DLpH6J9H.cjs.map +1 -0
- 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/container-form-BdsEX0NH.mjs +2 -0
- package/dist/container-form-BdsEX0NH.mjs.map +1 -0
- package/dist/container-form-CxxUYctk.cjs +2 -0
- package/dist/container-form-CxxUYctk.cjs.map +1 -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-B91H66HM.cjs +2 -0
- package/dist/currency-display-B91H66HM.cjs.map +1 -0
- package/dist/currency-display-BN1i8jnU.mjs +2 -0
- package/dist/currency-display-BN1i8jnU.mjs.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-BWtvWDHK.mjs +2 -0
- package/dist/date-display-BWtvWDHK.mjs.map +1 -0
- package/dist/date-display-odcC9NcB.cjs +2 -0
- package/dist/date-display-odcC9NcB.cjs.map +1 -0
- package/dist/date-field-Cxbrc0Vl.mjs +2 -0
- package/dist/date-field-Cxbrc0Vl.mjs.map +1 -0
- package/dist/date-field-RvEB9F1r.cjs +2 -0
- package/dist/date-field-RvEB9F1r.cjs.map +1 -0
- package/dist/date-tooltip-DptxGOj_.d.cts +18 -0
- package/dist/date-tooltip-DptxGOj_.d.mts +18 -0
- package/dist/description-display-BubAcFan.mjs +2 -0
- package/dist/description-display-BubAcFan.mjs.map +1 -0
- package/dist/description-display-CKe0j3q-.cjs +2 -0
- package/dist/description-display-CKe0j3q-.cjs.map +1 -0
- package/dist/dialog-form-C0W5C0u9.mjs +2 -0
- package/dist/dialog-form-C0W5C0u9.mjs.map +1 -0
- package/dist/dialog-form-CkNCwzWG.cjs +2 -0
- package/dist/dialog-form-CkNCwzWG.cjs.map +1 -0
- package/dist/dialogs/confirm-dialog.cjs +1 -1
- package/dist/dialogs/confirm-dialog.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/confirm-dialog.mjs +1 -1
- package/dist/dialogs/confirm-dialog.mjs.map +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +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-BLt60GQ1.cjs +2 -0
- package/dist/email-display-BLt60GQ1.cjs.map +1 -0
- package/dist/email-display-CMme47S9.mjs +2 -0
- package/dist/email-display-CMme47S9.mjs.map +1 -0
- package/dist/email-field-BErx3liY.cjs +2 -0
- package/dist/email-field-BErx3liY.cjs.map +1 -0
- package/dist/email-field-BtcdBWL4.mjs +2 -0
- package/dist/email-field-BtcdBWL4.mjs.map +1 -0
- 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.d.cts +1 -1
- package/dist/features/tanstack-form/index.d.mts +1 -1
- package/dist/features/tanstack-form/index.mjs +1 -1
- package/dist/features/text-editor/index.cjs +1 -1
- package/dist/features/text-editor/index.d.cts +1 -1
- package/dist/features/text-editor/index.d.mts +1 -1
- package/dist/features/text-editor/index.mjs +1 -1
- package/dist/field-BKyUqvzh.mjs +2 -0
- package/dist/field-BKyUqvzh.mjs.map +1 -0
- package/dist/field-BV5twmKA.cjs +2 -0
- package/dist/field-BV5twmKA.cjs.map +1 -0
- package/dist/file-uploader-U64lH0zG.d.cts +101 -0
- package/dist/file-uploader-U64lH0zG.d.mts +101 -0
- package/dist/filter-CMzD5h0M.mjs +2 -0
- package/dist/filter-CMzD5h0M.mjs.map +1 -0
- package/dist/filter-Cmg6SHMu.cjs +2 -0
- package/dist/filter-Cmg6SHMu.cjs.map +1 -0
- package/dist/flex-CT71VV-I.d.cts +114 -0
- package/dist/flex-CT71VV-I.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/group-field-0kStiX8n.cjs +2 -0
- package/dist/group-field-0kStiX8n.cjs.map +1 -0
- package/dist/group-field-bviEXmo4.mjs +2 -0
- package/dist/group-field-bviEXmo4.mjs.map +1 -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-CGpGIM1H.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.cts → index-D9bKlLiM.d.cts} +2 -22
- package/dist/{index-DOaKN0wJ.d.mts → index-D9bKlLiM.d.mts} +2 -22
- package/dist/{index-C2KjuFXQ.d.cts → index-DDROD2y9.d.cts} +596 -1117
- package/dist/{index-C2KjuFXQ.d.mts → index-DDROD2y9.d.mts} +596 -1117
- 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-DueBB0rP.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 +92 -92
- package/dist/index.d.mts +92 -92
- 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-BJMvABEL.d.cts → input-BieGEIDf.d.cts} +2 -2
- package/dist/{input-BJMvABEL.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-BuRCso6J.mjs +2 -0
- package/dist/list-display-BuRCso6J.mjs.map +1 -0
- package/dist/list-display-DEU6yFa9.cjs +2 -0
- package/dist/list-display-DEU6yFa9.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-B6X52ip_.cjs +2 -0
- package/dist/name-display-B6X52ip_.cjs.map +1 -0
- package/dist/name-display-DXMZ8Lug.mjs +2 -0
- package/dist/name-display-DXMZ8Lug.mjs.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-BjVjf6s4.mjs +2 -0
- package/dist/number-field-BjVjf6s4.mjs.map +1 -0
- package/dist/number-field-DmKh7bbY.cjs +2 -0
- package/dist/number-field-DmKh7bbY.cjs.map +1 -0
- package/dist/number-input-CqkegUWs.mjs +2 -0
- package/dist/number-input-CqkegUWs.mjs.map +1 -0
- package/dist/number-input-kTh9zzr7.cjs +2 -0
- package/dist/number-input-kTh9zzr7.cjs.map +1 -0
- 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-C5FsQUa8.mjs +2 -0
- package/dist/password-field-C5FsQUa8.mjs.map +1 -0
- package/dist/password-field-gHYDiXWY.cjs +2 -0
- package/dist/password-field-gHYDiXWY.cjs.map +1 -0
- 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-B2taDBAh.mjs +2 -0
- package/dist/popover-form-B2taDBAh.mjs.map +1 -0
- package/dist/popover-form-_hQQpfAB.cjs +2 -0
- package/dist/popover-form-_hQQpfAB.cjs.map +1 -0
- 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-Bp0xVhln.cjs +2 -0
- package/dist/progress-display-Bp0xVhln.cjs.map +1 -0
- package/dist/progress-display-DYj7vAe9.mjs +2 -0
- package/dist/progress-display-DYj7vAe9.mjs.map +1 -0
- package/dist/radio-group-field-McpjpLW-.cjs +2 -0
- package/dist/radio-group-field-McpjpLW-.cjs.map +1 -0
- package/dist/radio-group-field-ZqMrf9Dx.mjs +2 -0
- package/dist/radio-group-field-ZqMrf9Dx.mjs.map +1 -0
- 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/section-form-B9iTs2we.cjs +2 -0
- package/dist/section-form-B9iTs2we.cjs.map +1 -0
- package/dist/section-form-B_AZr7jZ.mjs +2 -0
- package/dist/section-form-B_AZr7jZ.mjs.map +1 -0
- package/dist/select-B5j4WvPM.d.cts +74 -0
- package/dist/select-B5j4WvPM.d.mts +74 -0
- package/dist/select-field-DG8sQ5iN.cjs +2 -0
- package/dist/select-field-DG8sQ5iN.cjs.map +1 -0
- package/dist/select-field-Kq5iQCRQ.mjs +2 -0
- package/dist/select-field-Kq5iQCRQ.mjs.map +1 -0
- package/dist/separator-BlNAFSJv.mjs +2 -0
- package/dist/separator-BlNAFSJv.mjs.map +1 -0
- package/dist/separator-D6_fMJtM.d.cts +32 -0
- package/dist/separator-D6_fMJtM.d.mts +32 -0
- package/dist/separator-sBz__BXC.cjs +2 -0
- package/dist/separator-sBz__BXC.cjs.map +1 -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-4paKpxXk.cjs +2 -0
- package/dist/simple-array-field-4paKpxXk.cjs.map +1 -0
- package/dist/simple-array-field-C5XdemXa.mjs +2 -0
- package/dist/simple-array-field-C5XdemXa.mjs.map +1 -0
- package/dist/simple-boolean-field-B9T_fHk9.cjs +2 -0
- package/dist/simple-boolean-field-B9T_fHk9.cjs.map +1 -0
- package/dist/simple-boolean-field-DpJ-fSQk.mjs +2 -0
- package/dist/simple-boolean-field-DpJ-fSQk.mjs.map +1 -0
- package/dist/simple-card-6P377r4A.d.cts +29 -0
- package/dist/simple-card-6P377r4A.d.mts +29 -0
- package/dist/simple-combobox-field-Ch4SBHCH.mjs +2 -0
- package/dist/simple-combobox-field-Ch4SBHCH.mjs.map +1 -0
- package/dist/simple-combobox-field-ChMKk7xp.cjs +2 -0
- package/dist/simple-combobox-field-ChMKk7xp.cjs.map +1 -0
- package/dist/simple-date-field-BGGlsHzG.cjs +2 -0
- package/dist/simple-date-field-BGGlsHzG.cjs.map +1 -0
- package/dist/simple-date-field-CVKqIrEs.mjs +2 -0
- package/dist/simple-date-field-CVKqIrEs.mjs.map +1 -0
- package/dist/simple-email-field-98w0846B.mjs +2 -0
- package/dist/simple-email-field-98w0846B.mjs.map +1 -0
- package/dist/simple-email-field-DYqCWprP.cjs +2 -0
- package/dist/simple-email-field-DYqCWprP.cjs.map +1 -0
- package/dist/simple-number-field-otvv2xq-.cjs +2 -0
- package/dist/simple-number-field-otvv2xq-.cjs.map +1 -0
- package/dist/simple-number-field-zF3oqS8d.mjs +2 -0
- package/dist/simple-number-field-zF3oqS8d.mjs.map +1 -0
- package/dist/simple-password-field-CuC10c70.mjs +2 -0
- package/dist/simple-password-field-CuC10c70.mjs.map +1 -0
- package/dist/simple-password-field-D2UMmghM.cjs +2 -0
- package/dist/simple-password-field-D2UMmghM.cjs.map +1 -0
- package/dist/simple-radio-group-field-C2DDfIUs.cjs +2 -0
- package/dist/simple-radio-group-field-C2DDfIUs.cjs.map +1 -0
- package/dist/simple-radio-group-field-CfziNlLf.mjs +2 -0
- package/dist/simple-radio-group-field-CfziNlLf.mjs.map +1 -0
- package/dist/simple-select-field-CeNnXUHN.cjs +2 -0
- package/dist/simple-select-field-CeNnXUHN.cjs.map +1 -0
- package/dist/simple-select-field-DIaxhi1-.mjs +2 -0
- package/dist/simple-select-field-DIaxhi1-.mjs.map +1 -0
- package/dist/simple-text-field-D8jyznSd.mjs +2 -0
- package/dist/simple-text-field-D8jyznSd.mjs.map +1 -0
- package/dist/simple-text-field-LYWVIAfQ.cjs +2 -0
- package/dist/simple-text-field-LYWVIAfQ.cjs.map +1 -0
- package/dist/simple-textarea-field-DcEvaizE.cjs +2 -0
- package/dist/simple-textarea-field-DcEvaizE.cjs.map +1 -0
- package/dist/simple-textarea-field-p9qX_n7m.mjs +2 -0
- package/dist/simple-textarea-field-p9qX_n7m.mjs.map +1 -0
- 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-BUGIRhL9.cjs +2 -0
- package/dist/statistic-BUGIRhL9.cjs.map +1 -0
- package/dist/statistic-Ug9Zgi3N.mjs +2 -0
- package/dist/statistic-Ug9Zgi3N.mjs.map +1 -0
- package/dist/status-display-B-6KKttX.mjs +2 -0
- package/dist/status-display-B-6KKttX.mjs.map +1 -0
- package/dist/status-display-DkI9UwAu.cjs +2 -0
- package/dist/status-display-DkI9UwAu.cjs.map +1 -0
- package/dist/submit-button-CGBaPzE9.mjs +2 -0
- package/dist/submit-button-CGBaPzE9.mjs.map +1 -0
- package/dist/submit-button-CvINfld5.cjs +2 -0
- package/dist/submit-button-CvINfld5.cjs.map +1 -0
- package/dist/summary-bar-CZHeAORf.mjs +2 -0
- package/dist/summary-bar-CZHeAORf.mjs.map +1 -0
- package/dist/summary-bar-DTFVpBZn.cjs +2 -0
- package/dist/summary-bar-DTFVpBZn.cjs.map +1 -0
- package/dist/switch-9v4AYqJb.d.cts +24 -0
- package/dist/switch-9v4AYqJb.d.mts +24 -0
- package/dist/switch-field-CIoNsRWN.mjs +2 -0
- package/dist/switch-field-CIoNsRWN.mjs.map +1 -0
- package/dist/switch-field-n6a5SaEM.cjs +2 -0
- package/dist/switch-field-n6a5SaEM.cjs.map +1 -0
- 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-7aC9WFs9.cjs +2 -0
- package/dist/tables-7aC9WFs9.cjs.map +1 -0
- package/dist/tables-UikqnT9q.mjs +2 -0
- package/dist/tables-UikqnT9q.mjs.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-fso-sw29.mjs +2 -0
- package/dist/text-editor-field-fso-sw29.mjs.map +1 -0
- package/dist/text-editor-field-gas5r-xy.cjs +2 -0
- package/dist/text-editor-field-gas5r-xy.cjs.map +1 -0
- package/dist/text-field-B67oTV62.mjs +2 -0
- package/dist/text-field-B67oTV62.mjs.map +1 -0
- package/dist/text-field-BMo-8rsq.cjs +2 -0
- package/dist/text-field-BMo-8rsq.cjs.map +1 -0
- package/dist/textarea-C8ZIZh-y.d.cts +26 -0
- package/dist/textarea-C8ZIZh-y.d.mts +26 -0
- package/dist/textarea-field-BUGcITwp.cjs +2 -0
- package/dist/textarea-field-BUGcITwp.cjs.map +1 -0
- package/dist/textarea-field-D70rGYIk.mjs +2 -0
- package/dist/textarea-field-D70rGYIk.mjs.map +1 -0
- package/dist/title-BT9guhSU.d.cts +41 -0
- package/dist/title-BT9guhSU.d.mts +41 -0
- package/dist/title-field-84EnHPvl.mjs +2 -0
- package/dist/title-field-84EnHPvl.mjs.map +1 -0
- package/dist/title-field-CKxwzMOM.cjs +2 -0
- package/dist/title-field-CKxwzMOM.cjs.map +1 -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-B-yLj6pe.mjs +4 -0
- package/dist/tooltip-B-yLj6pe.mjs.map +1 -0
- package/dist/tooltip-D4U-RhIu.d.cts +53 -0
- package/dist/tooltip-D4U-RhIu.d.mts +53 -0
- package/dist/tooltip-octglTPf.cjs +4 -0
- package/dist/tooltip-octglTPf.cjs.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.cjs +1 -1
- package/dist/ui/badge.cjs.map +1 -1
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.mts +1 -1
- package/dist/ui/badge.mjs +1 -1
- package/dist/ui/badge.mjs.map +1 -1
- package/dist/ui/breadcrumb.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 -5
- 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-BMVn8ai_.cjs +0 -2
- package/dist/tanstack-form-BMVn8ai_.cjs.map +0 -1
- package/dist/tanstack-form-DTCgWGCA.mjs +0 -2
- package/dist/tanstack-form-DTCgWGCA.mjs.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
|
@@ -1,50 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/** Controls whether the dialog is open */
|
|
4
|
-
open: boolean;
|
|
5
|
-
/** Called when the dialog open state changes */
|
|
6
|
-
onOpenChange: (open: boolean) => void;
|
|
7
|
-
/** Called when the user submits registration credentials */
|
|
8
|
-
onRegister: (email: string, password: string) => Promise<void> | void;
|
|
9
|
-
/** Called when the "Đăng nhập" link is clicked */
|
|
10
|
-
onLogin?: () => void;
|
|
11
|
-
/** Disables the form and shows a spinner on the submit button */
|
|
12
|
-
isLoading?: boolean;
|
|
13
|
-
/** Server-side error message rendered in a destructive Alert */
|
|
14
|
-
errorMessage?: string;
|
|
15
|
-
/** Dialog heading. Default: "Đăng ký" */
|
|
16
|
-
title?: string;
|
|
17
|
-
/** Dialog subheading. Default: "Tạo tài khoản mới để bắt đầu" */
|
|
18
|
-
subtitle?: string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Modal registration dialog for the client authentication flow.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```tsx
|
|
25
|
-
* import { RegisterPage } from '@customafk/lunas-ui/pages/RegisterPage';
|
|
26
|
-
*
|
|
27
|
-
* <RegisterPage
|
|
28
|
-
* open={open}
|
|
29
|
-
* onOpenChange={setOpen}
|
|
30
|
-
* onRegister={async (email, password) => {
|
|
31
|
-
* await authService.register(email, password);
|
|
32
|
-
* setOpen(false);
|
|
33
|
-
* }}
|
|
34
|
-
* onLogin={() => { setOpen(false); setLoginOpen(true); }}
|
|
35
|
-
* />
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
declare const RegisterPage: ({
|
|
39
|
-
open,
|
|
40
|
-
onOpenChange,
|
|
41
|
-
onRegister,
|
|
42
|
-
onLogin,
|
|
43
|
-
isLoading,
|
|
44
|
-
errorMessage,
|
|
45
|
-
title,
|
|
46
|
-
subtitle
|
|
47
|
-
}: RegisterPageProps) => import("react").JSX.Element;
|
|
48
|
-
//#endregion
|
|
49
|
-
export { RegisterPage, RegisterPageProps };
|
|
50
|
-
//# sourceMappingURL=RegisterPage.d.cts.map
|
|
1
|
+
import { n as RegisterPageProps, t as RegisterPage } from "../RegisterPage-BBtpEzvL.cjs";
|
|
2
|
+
export { RegisterPage, RegisterPageProps };
|
|
@@ -1,50 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/** Controls whether the dialog is open */
|
|
4
|
-
open: boolean;
|
|
5
|
-
/** Called when the dialog open state changes */
|
|
6
|
-
onOpenChange: (open: boolean) => void;
|
|
7
|
-
/** Called when the user submits registration credentials */
|
|
8
|
-
onRegister: (email: string, password: string) => Promise<void> | void;
|
|
9
|
-
/** Called when the "Đăng nhập" link is clicked */
|
|
10
|
-
onLogin?: () => void;
|
|
11
|
-
/** Disables the form and shows a spinner on the submit button */
|
|
12
|
-
isLoading?: boolean;
|
|
13
|
-
/** Server-side error message rendered in a destructive Alert */
|
|
14
|
-
errorMessage?: string;
|
|
15
|
-
/** Dialog heading. Default: "Đăng ký" */
|
|
16
|
-
title?: string;
|
|
17
|
-
/** Dialog subheading. Default: "Tạo tài khoản mới để bắt đầu" */
|
|
18
|
-
subtitle?: string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Modal registration dialog for the client authentication flow.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```tsx
|
|
25
|
-
* import { RegisterPage } from '@customafk/lunas-ui/pages/RegisterPage';
|
|
26
|
-
*
|
|
27
|
-
* <RegisterPage
|
|
28
|
-
* open={open}
|
|
29
|
-
* onOpenChange={setOpen}
|
|
30
|
-
* onRegister={async (email, password) => {
|
|
31
|
-
* await authService.register(email, password);
|
|
32
|
-
* setOpen(false);
|
|
33
|
-
* }}
|
|
34
|
-
* onLogin={() => { setOpen(false); setLoginOpen(true); }}
|
|
35
|
-
* />
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
declare const RegisterPage: ({
|
|
39
|
-
open,
|
|
40
|
-
onOpenChange,
|
|
41
|
-
onRegister,
|
|
42
|
-
onLogin,
|
|
43
|
-
isLoading,
|
|
44
|
-
errorMessage,
|
|
45
|
-
title,
|
|
46
|
-
subtitle
|
|
47
|
-
}: RegisterPageProps) => import("react").JSX.Element;
|
|
48
|
-
//#endregion
|
|
49
|
-
export { RegisterPage, RegisterPageProps };
|
|
50
|
-
//# sourceMappingURL=RegisterPage.d.mts.map
|
|
1
|
+
import { n as RegisterPageProps, t as RegisterPage } from "../RegisterPage-BBtpEzvL.mjs";
|
|
2
|
+
export { RegisterPage, RegisterPageProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{Button as e}from"../ui/button.mjs";import{LunasLogo as t}from"../features/logo/index.mjs";import{Dialog as n,DialogContent as r,DialogDescription as i,DialogHeader as a,DialogTitle as o}from"../ui/dialog.mjs";import{Input as s}from"../ui/input.mjs";import{
|
|
1
|
+
"use client";import{Button as e}from"../ui/button.mjs";import{LunasLogo as t}from"../features/logo/index.mjs";import{Dialog as n,DialogContent as r,DialogDescription as i,DialogHeader as a,DialogTitle as o}from"../ui/dialog.mjs";import{Input as s}from"../ui/input.mjs";import{n as c,t as l}from"../alert-OD1KJTEV.mjs";import{Label as u}from"../ui/label.mjs";import{Eye as d,EyeOff as f}from"lucide-react";import{useId as p,useState as m}from"react";import{jsx as h,jsxs as g}from"react/jsx-runtime";import{z as _}from"zod/v4";const v=_.object({email:_.string().min(1,`Vui lòng nhập email`).email(`Email không hợp lệ`),password:_.string().min(8,`Mật khẩu phải có ít nhất 8 ký tự`).max(50,`Mật khẩu không được vượt quá 50 ký tự`).regex(/[A-Z]/,`Phải có ít nhất một chữ hoa`).regex(/[a-z]/,`Phải có ít nhất một chữ thường`).regex(/[0-9]/,`Phải có ít nhất một chữ số`).regex(/[^A-Za-z0-9]/,`Phải có ít nhất một ký tự đặc biệt`),confirmPassword:_.string().min(1,`Vui lòng xác nhận mật khẩu`)}).refine(e=>e.password===e.confirmPassword,{message:`Mật khẩu xác nhận không khớp`,path:[`confirmPassword`]}),y=({open:_,onOpenChange:y,onRegister:b,onLogin:x,isLoading:S=!1,errorMessage:C,title:w=`Đăng ký`,subtitle:T=`Tạo tài khoản mới để bắt đầu`})=>{let E=p(),D=p(),O=p(),[k,A]=m(``),[j,M]=m(``),[N,P]=m(``),[F,I]=m(!1),[L,R]=m(!1),[z,B]=m({});return h(n,{open:_,onOpenChange:y,children:g(r,{className:`max-sm:data-[state=open]:slide-in-from-bottom max-sm:data-[state=open]:zoom-in-100 max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=closed]:zoom-out-100 max-sm:top-auto max-sm:right-0 max-sm:bottom-0 max-sm:left-0 max-sm:max-w-full max-sm:translate-x-0 max-sm:translate-y-0 max-sm:rounded-b-none sm:max-w-sm`,children:[g(a,{children:[h(t,{variant:`horizontal`,size:`sm`,className:`mx-auto`}),g(`div`,{className:`flex flex-col gap-0.5`,children:[h(o,{children:w}),h(i,{children:T})]})]}),g(`form`,{onSubmit:async e=>{e.preventDefault();let t=v.safeParse({email:k,password:j,confirmPassword:N});if(!t.success){let e=t.error.flatten().fieldErrors;B({email:e.email?.[0],password:e.password?.[0],confirmPassword:e.confirmPassword?.[0]});return}B({}),await b(k,j)},noValidate:!0,className:`flex flex-col gap-4`,children:[C&&h(l,{variant:`destructive`,children:h(c,{children:C})}),g(`div`,{className:`flex flex-col gap-1.5`,children:[h(u,{htmlFor:E,children:`Email`}),h(s,{id:E,type:`email`,autoComplete:`email`,placeholder:`you@example.com`,value:k,onChange:e=>A(e.target.value),"aria-invalid":!!z.email,disabled:S}),z.email&&h(`p`,{className:`text-destructive text-xs`,children:z.email})]}),g(`div`,{className:`flex flex-col gap-1.5`,children:[h(u,{htmlFor:D,children:`Mật khẩu`}),g(`div`,{className:`relative`,children:[h(s,{id:D,type:F?`text`:`password`,autoComplete:`new-password`,placeholder:`••••••••`,value:j,onChange:e=>M(e.target.value),"aria-invalid":!!z.password,disabled:S,className:`pr-10`}),h(`button`,{type:`button`,className:`absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground`,onMouseDown:e=>{e.preventDefault(),I(e=>!e)},"aria-label":F?`Ẩn mật khẩu`:`Hiện mật khẩu`,children:h(F?f:d,{size:16})})]}),z.password?h(`p`,{className:`text-destructive text-xs`,children:z.password}):h(`p`,{className:`text-muted-foreground text-xs`,children:`Tối thiểu 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.`})]}),g(`div`,{className:`flex flex-col gap-1.5`,children:[h(u,{htmlFor:O,children:`Xác nhận mật khẩu`}),g(`div`,{className:`relative`,children:[h(s,{id:O,type:L?`text`:`password`,autoComplete:`new-password`,placeholder:`••••••••`,value:N,onChange:e=>P(e.target.value),"aria-invalid":!!z.confirmPassword,disabled:S,className:`pr-10`}),h(`button`,{type:`button`,className:`absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground`,onMouseDown:e=>{e.preventDefault(),R(e=>!e)},"aria-label":L?`Ẩn mật khẩu`:`Hiện mật khẩu`,children:h(L?f:d,{size:16})})]}),z.confirmPassword&&h(`p`,{className:`text-destructive text-xs`,children:z.confirmPassword})]}),h(e,{type:`submit`,isLoading:S,className:`w-full`,children:`Đăng ký`}),h(e,{type:`button`,variant:`outline`,className:`w-full`,disabled:S,onClick:()=>y(!1),children:`Đóng hộp thoại`})]}),x&&g(`div`,{className:`flex justify-center gap-1 text-muted-foreground text-sm`,children:[h(`span`,{children:`Đã có tài khoản?`}),h(e,{variant:`link`,size:`sm`,className:`h-auto p-0`,onClick:x,children:`Đăng nhập`})]})]})})};export{y as RegisterPage};
|
|
2
2
|
//# sourceMappingURL=RegisterPage.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegisterPage.mjs","names":[],"sources":["../../packages/components/pages/RegisterPage.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Eye, EyeOff } from 'lucide-react';\nimport { z } from 'zod';\n\nimport { Alert, AlertDescription } from '../ui/alert';\nimport { Button } from '../ui/button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/dialog';\nimport { LunasLogo } from '../features/logo';\nimport { Input } from '../ui/input';\nimport { Label } from '../ui/label';\n\nexport interface RegisterPageProps {\n /** Controls whether the dialog is open */\n open: boolean;\n /** Called when the dialog open state changes */\n onOpenChange: (open: boolean) => void;\n /** Called when the user submits registration credentials */\n onRegister: (email: string, password: string) => Promise<void> | void;\n /** Called when the \"Đăng nhập\" link is clicked */\n onLogin?: () => void;\n /** Disables the form and shows a spinner on the submit button */\n isLoading?: boolean;\n /** Server-side error message rendered in a destructive Alert */\n errorMessage?: string;\n /** Dialog heading. Default: \"Đăng ký\" */\n title?: string;\n /** Dialog subheading. Default: \"Tạo tài khoản mới để bắt đầu\" */\n subtitle?: string;\n}\n\nconst registerSchema = z\n .object({\n email: z.string().min(1, 'Vui lòng nhập email').email('Email không hợp lệ'),\n password: z\n .string()\n .min(8, 'Mật khẩu phải có ít nhất 8 ký tự')\n .max(50, 'Mật khẩu không được vượt quá 50 ký tự')\n .regex(/[A-Z]/, 'Phải có ít nhất một chữ hoa')\n .regex(/[a-z]/, 'Phải có ít nhất một chữ thường')\n .regex(/[0-9]/, 'Phải có ít nhất một chữ số')\n .regex(/[^A-Za-z0-9]/, 'Phải có ít nhất một ký tự đặc biệt'),\n confirmPassword: z.string().min(1, 'Vui lòng xác nhận mật khẩu'),\n })\n .refine(data => data.password === data.confirmPassword, {\n message: 'Mật khẩu xác nhận không khớp',\n path: ['confirmPassword'],\n });\n\n/**\n * Modal registration dialog for the client authentication flow.\n *\n * @example\n * ```tsx\n * import { RegisterPage } from '@customafk/lunas-ui/pages/RegisterPage';\n *\n * <RegisterPage\n * open={open}\n * onOpenChange={setOpen}\n * onRegister={async (email, password) => {\n * await authService.register(email, password);\n * setOpen(false);\n * }}\n * onLogin={() => { setOpen(false); setLoginOpen(true); }}\n * />\n * ```\n */\nexport const RegisterPage = ({\n open,\n onOpenChange,\n onRegister,\n onLogin,\n isLoading = false,\n errorMessage,\n title = 'Đăng ký',\n subtitle = 'Tạo tài khoản mới để bắt đầu',\n}: RegisterPageProps) => {\n const emailId = useId();\n const passwordId = useId();\n const confirmPasswordId = useId();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [fieldErrors, setFieldErrors] = useState<{\n email?: string;\n password?: string;\n confirmPassword?: string;\n }>({});\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const result = registerSchema.safeParse({ email, password, confirmPassword });\n if (!result.success) {\n const errors = result.error.flatten().fieldErrors;\n setFieldErrors({\n email: errors.email?.[0],\n password: errors.password?.[0],\n confirmPassword: errors.confirmPassword?.[0],\n });\n return;\n }\n setFieldErrors({});\n await onRegister(email, password);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-sm:data-[state=open]:slide-in-from-bottom max-sm:data-[state=open]:zoom-in-100 max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=closed]:zoom-out-100 max-sm:top-auto max-sm:right-0 max-sm:bottom-0 max-sm:left-0 max-sm:max-w-full max-sm:translate-x-0 max-sm:translate-y-0 max-sm:rounded-b-none sm:max-w-sm\">\n <DialogHeader>\n <LunasLogo variant=\"horizontal\" size=\"sm\" className=\"mx-auto\" />\n <div className=\"flex flex-col gap-0.5\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{subtitle}</DialogDescription>\n </div>\n </DialogHeader>\n\n <form onSubmit={handleSubmit} noValidate className=\"flex flex-col gap-4\">\n {errorMessage && (\n <Alert variant=\"destructive\">\n <AlertDescription>{errorMessage}</AlertDescription>\n </Alert>\n )}\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={emailId}>Email</Label>\n <Input\n id={emailId}\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={e => setEmail(e.target.value)}\n aria-invalid={!!fieldErrors.email}\n disabled={isLoading}\n />\n {fieldErrors.email && <p className=\"text-destructive text-xs\">{fieldErrors.email}</p>}\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={passwordId}>Mật khẩu</Label>\n <div className=\"relative\">\n <Input\n id={passwordId}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n placeholder=\"••••••••\"\n value={password}\n onChange={e => setPassword(e.target.value)}\n aria-invalid={!!fieldErrors.password}\n disabled={isLoading}\n className=\"pr-10\"\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground\"\n onMouseDown={e => {\n e.preventDefault();\n setShowPassword(v => !v);\n }}\n aria-label={showPassword ? 'Ẩn mật khẩu' : 'Hiện mật khẩu'}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {fieldErrors.password ? (\n <p className=\"text-destructive text-xs\">{fieldErrors.password}</p>\n ) : (\n <p className=\"text-muted-foreground text-xs\">Tối thiểu 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.</p>\n )}\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={confirmPasswordId}>Xác nhận mật khẩu</Label>\n <div className=\"relative\">\n <Input\n id={confirmPasswordId}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n placeholder=\"••••••••\"\n value={confirmPassword}\n onChange={e => setConfirmPassword(e.target.value)}\n aria-invalid={!!fieldErrors.confirmPassword}\n disabled={isLoading}\n className=\"pr-10\"\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground\"\n onMouseDown={e => {\n e.preventDefault();\n setShowConfirmPassword(v => !v);\n }}\n aria-label={showConfirmPassword ? 'Ẩn mật khẩu' : 'Hiện mật khẩu'}\n >\n {showConfirmPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {fieldErrors.confirmPassword && <p className=\"text-destructive text-xs\">{fieldErrors.confirmPassword}</p>}\n </div>\n\n <Button type=\"submit\" isLoading={isLoading} className=\"w-full\">\n Đăng ký\n </Button>\n <Button type=\"button\" variant=\"outline\" className=\"w-full\" disabled={isLoading} onClick={() => onOpenChange(false)}>\n Đóng hộp thoại\n </Button>\n </form>\n\n {onLogin && (\n <div className=\"flex justify-center gap-1 text-muted-foreground text-sm\">\n <span>Đã có tài khoản?</span>\n <Button variant=\"link\" size=\"sm\" className=\"h-auto p-0\" onClick={onLogin}>\n Đăng nhập\n </Button>\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RegisterPage.mjs","names":[],"sources":["../../packages/components/pages/RegisterPage.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useState } from 'react';\n\nimport { Eye, EyeOff } from 'lucide-react';\nimport { z } from 'zod/v4';\n\nimport { Alert, AlertDescription } from '../ui/alert';\nimport { Button } from '../ui/button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/dialog';\nimport { LunasLogo } from '../features/logo';\nimport { Input } from '../ui/input';\nimport { Label } from '../ui/label';\n\nexport interface RegisterPageProps {\n /** Controls whether the dialog is open */\n open: boolean;\n /** Called when the dialog open state changes */\n onOpenChange: (open: boolean) => void;\n /** Called when the user submits registration credentials */\n onRegister: (email: string, password: string) => Promise<void> | void;\n /** Called when the \"Đăng nhập\" link is clicked */\n onLogin?: () => void;\n /** Disables the form and shows a spinner on the submit button */\n isLoading?: boolean;\n /** Server-side error message rendered in a destructive Alert */\n errorMessage?: string;\n /** Dialog heading. Default: \"Đăng ký\" */\n title?: string;\n /** Dialog subheading. Default: \"Tạo tài khoản mới để bắt đầu\" */\n subtitle?: string;\n}\n\nconst registerSchema = z\n .object({\n email: z.string().min(1, 'Vui lòng nhập email').email('Email không hợp lệ'),\n password: z\n .string()\n .min(8, 'Mật khẩu phải có ít nhất 8 ký tự')\n .max(50, 'Mật khẩu không được vượt quá 50 ký tự')\n .regex(/[A-Z]/, 'Phải có ít nhất một chữ hoa')\n .regex(/[a-z]/, 'Phải có ít nhất một chữ thường')\n .regex(/[0-9]/, 'Phải có ít nhất một chữ số')\n .regex(/[^A-Za-z0-9]/, 'Phải có ít nhất một ký tự đặc biệt'),\n confirmPassword: z.string().min(1, 'Vui lòng xác nhận mật khẩu'),\n })\n .refine(data => data.password === data.confirmPassword, {\n message: 'Mật khẩu xác nhận không khớp',\n path: ['confirmPassword'],\n });\n\n/**\n * Modal registration dialog for the client authentication flow.\n *\n * @example\n * ```tsx\n * import { RegisterPage } from '@customafk/lunas-ui/pages/RegisterPage';\n *\n * <RegisterPage\n * open={open}\n * onOpenChange={setOpen}\n * onRegister={async (email, password) => {\n * await authService.register(email, password);\n * setOpen(false);\n * }}\n * onLogin={() => { setOpen(false); setLoginOpen(true); }}\n * />\n * ```\n */\nexport const RegisterPage = ({\n open,\n onOpenChange,\n onRegister,\n onLogin,\n isLoading = false,\n errorMessage,\n title = 'Đăng ký',\n subtitle = 'Tạo tài khoản mới để bắt đầu',\n}: RegisterPageProps) => {\n const emailId = useId();\n const passwordId = useId();\n const confirmPasswordId = useId();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [fieldErrors, setFieldErrors] = useState<{\n email?: string;\n password?: string;\n confirmPassword?: string;\n }>({});\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const result = registerSchema.safeParse({ email, password, confirmPassword });\n if (!result.success) {\n const errors = result.error.flatten().fieldErrors;\n setFieldErrors({\n email: errors.email?.[0],\n password: errors.password?.[0],\n confirmPassword: errors.confirmPassword?.[0],\n });\n return;\n }\n setFieldErrors({});\n await onRegister(email, password);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-sm:data-[state=open]:slide-in-from-bottom max-sm:data-[state=open]:zoom-in-100 max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=closed]:zoom-out-100 max-sm:top-auto max-sm:right-0 max-sm:bottom-0 max-sm:left-0 max-sm:max-w-full max-sm:translate-x-0 max-sm:translate-y-0 max-sm:rounded-b-none sm:max-w-sm\">\n <DialogHeader>\n <LunasLogo variant=\"horizontal\" size=\"sm\" className=\"mx-auto\" />\n <div className=\"flex flex-col gap-0.5\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{subtitle}</DialogDescription>\n </div>\n </DialogHeader>\n\n <form onSubmit={handleSubmit} noValidate className=\"flex flex-col gap-4\">\n {errorMessage && (\n <Alert variant=\"destructive\">\n <AlertDescription>{errorMessage}</AlertDescription>\n </Alert>\n )}\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={emailId}>Email</Label>\n <Input\n id={emailId}\n type=\"email\"\n autoComplete=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={e => setEmail(e.target.value)}\n aria-invalid={!!fieldErrors.email}\n disabled={isLoading}\n />\n {fieldErrors.email && <p className=\"text-destructive text-xs\">{fieldErrors.email}</p>}\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={passwordId}>Mật khẩu</Label>\n <div className=\"relative\">\n <Input\n id={passwordId}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n placeholder=\"••••••••\"\n value={password}\n onChange={e => setPassword(e.target.value)}\n aria-invalid={!!fieldErrors.password}\n disabled={isLoading}\n className=\"pr-10\"\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground\"\n onMouseDown={e => {\n e.preventDefault();\n setShowPassword(v => !v);\n }}\n aria-label={showPassword ? 'Ẩn mật khẩu' : 'Hiện mật khẩu'}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {fieldErrors.password ? (\n <p className=\"text-destructive text-xs\">{fieldErrors.password}</p>\n ) : (\n <p className=\"text-muted-foreground text-xs\">Tối thiểu 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.</p>\n )}\n </div>\n\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={confirmPasswordId}>Xác nhận mật khẩu</Label>\n <div className=\"relative\">\n <Input\n id={confirmPasswordId}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n placeholder=\"••••••••\"\n value={confirmPassword}\n onChange={e => setConfirmPassword(e.target.value)}\n aria-invalid={!!fieldErrors.confirmPassword}\n disabled={isLoading}\n className=\"pr-10\"\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center px-3 text-muted-foreground hover:text-foreground\"\n onMouseDown={e => {\n e.preventDefault();\n setShowConfirmPassword(v => !v);\n }}\n aria-label={showConfirmPassword ? 'Ẩn mật khẩu' : 'Hiện mật khẩu'}\n >\n {showConfirmPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n {fieldErrors.confirmPassword && <p className=\"text-destructive text-xs\">{fieldErrors.confirmPassword}</p>}\n </div>\n\n <Button type=\"submit\" isLoading={isLoading} className=\"w-full\">\n Đăng ký\n </Button>\n <Button type=\"button\" variant=\"outline\" className=\"w-full\" disabled={isLoading} onClick={() => onOpenChange(false)}>\n Đóng hộp thoại\n </Button>\n </form>\n\n {onLogin && (\n <div className=\"flex justify-center gap-1 text-muted-foreground text-sm\">\n <span>Đã có tài khoản?</span>\n <Button variant=\"link\" size=\"sm\" className=\"h-auto p-0\" onClick={onLogin}>\n Đăng nhập\n </Button>\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,62 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/** Controls whether the dialog is open */
|
|
4
|
-
open: boolean;
|
|
5
|
-
/** Called when the dialog open state changes */
|
|
6
|
-
onOpenChange: (open: boolean) => void;
|
|
7
|
-
/** The email address the OTP was dispatched to — displayed as context and passed to callbacks */
|
|
8
|
-
email: string;
|
|
9
|
-
/** Called when the user submits the OTP code */
|
|
10
|
-
onVerify: (email: string, otp: string) => Promise<void> | void;
|
|
11
|
-
/** Called when the user requests a new OTP; triggers a fresh cooldown */
|
|
12
|
-
onResend: (email: string) => Promise<void> | void;
|
|
13
|
-
/** Called when the back link is clicked */
|
|
14
|
-
onBack?: () => void;
|
|
15
|
-
/** Disables the form and shows a spinner on the submit button */
|
|
16
|
-
isLoading?: boolean;
|
|
17
|
-
/** Server-side error message rendered in a destructive Alert */
|
|
18
|
-
errorMessage?: string;
|
|
19
|
-
/** Dialog heading. Default: "Xác thực email" */
|
|
20
|
-
title?: string;
|
|
21
|
-
/** Dialog subheading. Default: built from the email prop */
|
|
22
|
-
subtitle?: string;
|
|
23
|
-
/** Seconds before the resend button becomes available. Default: 60 */
|
|
24
|
-
resendCooldownSeconds?: number;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Modal email OTP verification dialog for the client authentication flow.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```tsx
|
|
31
|
-
* import { VerifyEmailPage } from '@customafk/lunas-ui/pages/VerifyEmailPage';
|
|
32
|
-
*
|
|
33
|
-
* <VerifyEmailPage
|
|
34
|
-
* open={open}
|
|
35
|
-
* onOpenChange={setOpen}
|
|
36
|
-
* email="user@example.com"
|
|
37
|
-
* onVerify={async (email, otp) => {
|
|
38
|
-
* await authService.verifyEmail(email, otp);
|
|
39
|
-
* setOpen(false);
|
|
40
|
-
* }}
|
|
41
|
-
* onResend={async (email) => {
|
|
42
|
-
* await authService.resendVerification(email);
|
|
43
|
-
* }}
|
|
44
|
-
* />
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
declare const VerifyEmailPage: ({
|
|
48
|
-
open,
|
|
49
|
-
onOpenChange,
|
|
50
|
-
email,
|
|
51
|
-
onVerify,
|
|
52
|
-
onResend,
|
|
53
|
-
onBack,
|
|
54
|
-
isLoading,
|
|
55
|
-
errorMessage,
|
|
56
|
-
title,
|
|
57
|
-
subtitle,
|
|
58
|
-
resendCooldownSeconds
|
|
59
|
-
}: VerifyEmailPageProps) => import("react").JSX.Element;
|
|
60
|
-
//#endregion
|
|
61
|
-
export { VerifyEmailPage, VerifyEmailPageProps };
|
|
62
|
-
//# sourceMappingURL=VerifyEmailPage.d.cts.map
|
|
1
|
+
import { n as VerifyEmailPageProps, t as VerifyEmailPage } from "../VerifyEmailPage-CsmIeYLu.cjs";
|
|
2
|
+
export { VerifyEmailPage, VerifyEmailPageProps };
|
|
@@ -1,62 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/** Controls whether the dialog is open */
|
|
4
|
-
open: boolean;
|
|
5
|
-
/** Called when the dialog open state changes */
|
|
6
|
-
onOpenChange: (open: boolean) => void;
|
|
7
|
-
/** The email address the OTP was dispatched to — displayed as context and passed to callbacks */
|
|
8
|
-
email: string;
|
|
9
|
-
/** Called when the user submits the OTP code */
|
|
10
|
-
onVerify: (email: string, otp: string) => Promise<void> | void;
|
|
11
|
-
/** Called when the user requests a new OTP; triggers a fresh cooldown */
|
|
12
|
-
onResend: (email: string) => Promise<void> | void;
|
|
13
|
-
/** Called when the back link is clicked */
|
|
14
|
-
onBack?: () => void;
|
|
15
|
-
/** Disables the form and shows a spinner on the submit button */
|
|
16
|
-
isLoading?: boolean;
|
|
17
|
-
/** Server-side error message rendered in a destructive Alert */
|
|
18
|
-
errorMessage?: string;
|
|
19
|
-
/** Dialog heading. Default: "Xác thực email" */
|
|
20
|
-
title?: string;
|
|
21
|
-
/** Dialog subheading. Default: built from the email prop */
|
|
22
|
-
subtitle?: string;
|
|
23
|
-
/** Seconds before the resend button becomes available. Default: 60 */
|
|
24
|
-
resendCooldownSeconds?: number;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Modal email OTP verification dialog for the client authentication flow.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```tsx
|
|
31
|
-
* import { VerifyEmailPage } from '@customafk/lunas-ui/pages/VerifyEmailPage';
|
|
32
|
-
*
|
|
33
|
-
* <VerifyEmailPage
|
|
34
|
-
* open={open}
|
|
35
|
-
* onOpenChange={setOpen}
|
|
36
|
-
* email="user@example.com"
|
|
37
|
-
* onVerify={async (email, otp) => {
|
|
38
|
-
* await authService.verifyEmail(email, otp);
|
|
39
|
-
* setOpen(false);
|
|
40
|
-
* }}
|
|
41
|
-
* onResend={async (email) => {
|
|
42
|
-
* await authService.resendVerification(email);
|
|
43
|
-
* }}
|
|
44
|
-
* />
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
declare const VerifyEmailPage: ({
|
|
48
|
-
open,
|
|
49
|
-
onOpenChange,
|
|
50
|
-
email,
|
|
51
|
-
onVerify,
|
|
52
|
-
onResend,
|
|
53
|
-
onBack,
|
|
54
|
-
isLoading,
|
|
55
|
-
errorMessage,
|
|
56
|
-
title,
|
|
57
|
-
subtitle,
|
|
58
|
-
resendCooldownSeconds
|
|
59
|
-
}: VerifyEmailPageProps) => import("react").JSX.Element;
|
|
60
|
-
//#endregion
|
|
61
|
-
export { VerifyEmailPage, VerifyEmailPageProps };
|
|
62
|
-
//# sourceMappingURL=VerifyEmailPage.d.mts.map
|
|
1
|
+
import { n as VerifyEmailPageProps, t as VerifyEmailPage } from "../VerifyEmailPage-CsmIeYLu.mjs";
|
|
2
|
+
export { VerifyEmailPage, VerifyEmailPageProps };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { t as Button } from "./button-Bk4Y6_9I.cjs";
|
|
2
|
+
|
|
3
|
+
//#region packages/components/ui/pagination.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Root `<nav>` wrapper for a Pagination control with accessible ARIA attributes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import {
|
|
10
|
+
* Pagination, PaginationContent, PaginationItem,
|
|
11
|
+
* PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis,
|
|
12
|
+
* } from '@customafk/lunas-ui/ui/pagination';
|
|
13
|
+
*
|
|
14
|
+
* <Pagination>
|
|
15
|
+
* <PaginationContent>
|
|
16
|
+
* <PaginationItem><PaginationPrevious href="?page=1" /></PaginationItem>
|
|
17
|
+
* <PaginationItem><PaginationLink href="?page=2" isActive>2</PaginationLink></PaginationItem>
|
|
18
|
+
* <PaginationItem><PaginationEllipsis /></PaginationItem>
|
|
19
|
+
* <PaginationItem><PaginationNext href="?page=3" /></PaginationItem>
|
|
20
|
+
* </PaginationContent>
|
|
21
|
+
* </Pagination>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function Pagination({
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}: React.ComponentProps<'nav'>): import("react").JSX.Element;
|
|
28
|
+
/** Horizontal list that holds PaginationItem elements. */
|
|
29
|
+
declare function PaginationContent({
|
|
30
|
+
className,
|
|
31
|
+
...props
|
|
32
|
+
}: React.ComponentProps<'ul'>): import("react").JSX.Element;
|
|
33
|
+
/** Wrapper `<li>` for a single pagination button or link. */
|
|
34
|
+
declare function PaginationItem({
|
|
35
|
+
...props
|
|
36
|
+
}: React.ComponentProps<'li'>): import("react").JSX.Element;
|
|
37
|
+
type PaginationLinkProps = {
|
|
38
|
+
/** When true, the link is styled as the currently active page. */isActive?: boolean;
|
|
39
|
+
} & Pick<React.ComponentProps<typeof Button>, 'size'> & React.ComponentProps<'a'>;
|
|
40
|
+
/** An anchor-based page link styled as a button, highlighted when `isActive` is true. */
|
|
41
|
+
declare function PaginationLink({
|
|
42
|
+
className,
|
|
43
|
+
isActive,
|
|
44
|
+
size,
|
|
45
|
+
...props
|
|
46
|
+
}: PaginationLinkProps): import("react").JSX.Element;
|
|
47
|
+
/** "Previous page" navigation link with a left chevron icon. */
|
|
48
|
+
declare function PaginationPrevious({
|
|
49
|
+
className,
|
|
50
|
+
...props
|
|
51
|
+
}: React.ComponentProps<typeof PaginationLink>): import("react").JSX.Element;
|
|
52
|
+
/** "Next page" navigation link with a right chevron icon. */
|
|
53
|
+
declare function PaginationNext({
|
|
54
|
+
className,
|
|
55
|
+
...props
|
|
56
|
+
}: React.ComponentProps<typeof PaginationLink>): import("react").JSX.Element;
|
|
57
|
+
/** Ellipsis indicator rendered between non-adjacent page numbers. */
|
|
58
|
+
declare function PaginationEllipsis({
|
|
59
|
+
className,
|
|
60
|
+
...props
|
|
61
|
+
}: React.ComponentProps<'span'>): import("react").JSX.Element;
|
|
62
|
+
//#endregion
|
|
63
|
+
export { PaginationLink as a, PaginationItem as i, PaginationContent as n, PaginationNext as o, PaginationEllipsis as r, PaginationPrevious as s, Pagination as t };
|
|
64
|
+
//# sourceMappingURL=pagination-B2fyP0J2.d.cts.map
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { t as Button } from "./button-Bk4Y6_9I.mjs";
|
|
2
|
+
|
|
3
|
+
//#region packages/components/ui/pagination.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Root `<nav>` wrapper for a Pagination control with accessible ARIA attributes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import {
|
|
10
|
+
* Pagination, PaginationContent, PaginationItem,
|
|
11
|
+
* PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis,
|
|
12
|
+
* } from '@customafk/lunas-ui/ui/pagination';
|
|
13
|
+
*
|
|
14
|
+
* <Pagination>
|
|
15
|
+
* <PaginationContent>
|
|
16
|
+
* <PaginationItem><PaginationPrevious href="?page=1" /></PaginationItem>
|
|
17
|
+
* <PaginationItem><PaginationLink href="?page=2" isActive>2</PaginationLink></PaginationItem>
|
|
18
|
+
* <PaginationItem><PaginationEllipsis /></PaginationItem>
|
|
19
|
+
* <PaginationItem><PaginationNext href="?page=3" /></PaginationItem>
|
|
20
|
+
* </PaginationContent>
|
|
21
|
+
* </Pagination>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function Pagination({
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}: React.ComponentProps<'nav'>): import("react").JSX.Element;
|
|
28
|
+
/** Horizontal list that holds PaginationItem elements. */
|
|
29
|
+
declare function PaginationContent({
|
|
30
|
+
className,
|
|
31
|
+
...props
|
|
32
|
+
}: React.ComponentProps<'ul'>): import("react").JSX.Element;
|
|
33
|
+
/** Wrapper `<li>` for a single pagination button or link. */
|
|
34
|
+
declare function PaginationItem({
|
|
35
|
+
...props
|
|
36
|
+
}: React.ComponentProps<'li'>): import("react").JSX.Element;
|
|
37
|
+
type PaginationLinkProps = {
|
|
38
|
+
/** When true, the link is styled as the currently active page. */isActive?: boolean;
|
|
39
|
+
} & Pick<React.ComponentProps<typeof Button>, 'size'> & React.ComponentProps<'a'>;
|
|
40
|
+
/** An anchor-based page link styled as a button, highlighted when `isActive` is true. */
|
|
41
|
+
declare function PaginationLink({
|
|
42
|
+
className,
|
|
43
|
+
isActive,
|
|
44
|
+
size,
|
|
45
|
+
...props
|
|
46
|
+
}: PaginationLinkProps): import("react").JSX.Element;
|
|
47
|
+
/** "Previous page" navigation link with a left chevron icon. */
|
|
48
|
+
declare function PaginationPrevious({
|
|
49
|
+
className,
|
|
50
|
+
...props
|
|
51
|
+
}: React.ComponentProps<typeof PaginationLink>): import("react").JSX.Element;
|
|
52
|
+
/** "Next page" navigation link with a right chevron icon. */
|
|
53
|
+
declare function PaginationNext({
|
|
54
|
+
className,
|
|
55
|
+
...props
|
|
56
|
+
}: React.ComponentProps<typeof PaginationLink>): import("react").JSX.Element;
|
|
57
|
+
/** Ellipsis indicator rendered between non-adjacent page numbers. */
|
|
58
|
+
declare function PaginationEllipsis({
|
|
59
|
+
className,
|
|
60
|
+
...props
|
|
61
|
+
}: React.ComponentProps<'span'>): import("react").JSX.Element;
|
|
62
|
+
//#endregion
|
|
63
|
+
export { PaginationLink as a, PaginationItem as i, PaginationContent as n, PaginationNext as o, PaginationEllipsis as r, PaginationPrevious as s, Pagination as t };
|
|
64
|
+
//# sourceMappingURL=pagination-DY0PBCnI.d.mts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
2
|
+
import { VariantProps } from "class-variance-authority";
|
|
3
|
+
|
|
4
|
+
//#region packages/components/typography/paragraph.d.ts
|
|
5
|
+
declare const paragraphVariants: (props?: ({
|
|
6
|
+
variant?: "xs" | "sm" | "lg" | "muted" | "p" | "lead" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Props for the {@link Paragraph} component.
|
|
10
|
+
*
|
|
11
|
+
* Extends all native `<p>` HTML attributes plus the CVA variant.
|
|
12
|
+
*
|
|
13
|
+
* @property variant - Visual style variant.
|
|
14
|
+
* - `'lead'` — large, medium-weight introductory text (default size `text-base` / `md:text-lg`)
|
|
15
|
+
* - `'lg'` — large normal-weight text
|
|
16
|
+
* - `'p'` — standard body text (default)
|
|
17
|
+
* - `'sm'` — small normal-weight text with tighter leading
|
|
18
|
+
* - `'muted'` — subdued colour, standard body size
|
|
19
|
+
* - `'xs'` — extra-small text in a muted colour
|
|
20
|
+
*/
|
|
21
|
+
type ParagraphProps = ComponentPropsWithoutRef<'p'> & VariantProps<typeof paragraphVariants>;
|
|
22
|
+
/**
|
|
23
|
+
* A styled `<p>` element with semantic size and weight variants for body text.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* import { Paragraph } from '@customafk/lunas-ui/typography/paragraph';
|
|
28
|
+
*
|
|
29
|
+
* // Default body paragraph
|
|
30
|
+
* <Paragraph>This is body text.</Paragraph>
|
|
31
|
+
*
|
|
32
|
+
* // Lead paragraph with larger, medium-weight text
|
|
33
|
+
* <Paragraph variant="lead">Introducing our new feature.</Paragraph>
|
|
34
|
+
*
|
|
35
|
+
* // Muted helper text
|
|
36
|
+
* <Paragraph variant="muted">Last updated 3 days ago.</Paragraph>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare const Paragraph: ({
|
|
40
|
+
variant,
|
|
41
|
+
className,
|
|
42
|
+
...props
|
|
43
|
+
}: ParagraphProps) => import("react").JSX.Element;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { ParagraphProps as n, paragraphVariants as r, Paragraph as t };
|
|
46
|
+
//# sourceMappingURL=paragraph-BTmvVS1S.d.mts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { VariantProps } from "class-variance-authority";
|
|
2
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
3
|
+
|
|
4
|
+
//#region packages/components/typography/paragraph.d.ts
|
|
5
|
+
declare const paragraphVariants: (props?: ({
|
|
6
|
+
variant?: "xs" | "sm" | "lg" | "muted" | "p" | "lead" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Props for the {@link Paragraph} component.
|
|
10
|
+
*
|
|
11
|
+
* Extends all native `<p>` HTML attributes plus the CVA variant.
|
|
12
|
+
*
|
|
13
|
+
* @property variant - Visual style variant.
|
|
14
|
+
* - `'lead'` — large, medium-weight introductory text (default size `text-base` / `md:text-lg`)
|
|
15
|
+
* - `'lg'` — large normal-weight text
|
|
16
|
+
* - `'p'` — standard body text (default)
|
|
17
|
+
* - `'sm'` — small normal-weight text with tighter leading
|
|
18
|
+
* - `'muted'` — subdued colour, standard body size
|
|
19
|
+
* - `'xs'` — extra-small text in a muted colour
|
|
20
|
+
*/
|
|
21
|
+
type ParagraphProps = ComponentPropsWithoutRef<'p'> & VariantProps<typeof paragraphVariants>;
|
|
22
|
+
/**
|
|
23
|
+
* A styled `<p>` element with semantic size and weight variants for body text.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* import { Paragraph } from '@customafk/lunas-ui/typography/paragraph';
|
|
28
|
+
*
|
|
29
|
+
* // Default body paragraph
|
|
30
|
+
* <Paragraph>This is body text.</Paragraph>
|
|
31
|
+
*
|
|
32
|
+
* // Lead paragraph with larger, medium-weight text
|
|
33
|
+
* <Paragraph variant="lead">Introducing our new feature.</Paragraph>
|
|
34
|
+
*
|
|
35
|
+
* // Muted helper text
|
|
36
|
+
* <Paragraph variant="muted">Last updated 3 days ago.</Paragraph>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare const Paragraph: ({
|
|
40
|
+
variant,
|
|
41
|
+
className,
|
|
42
|
+
...props
|
|
43
|
+
}: ParagraphProps) => import("react").JSX.Element;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { ParagraphProps as n, paragraphVariants as r, Paragraph as t };
|
|
46
|
+
//# sourceMappingURL=paragraph-DbYYv0A0.d.cts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
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{EyeIcon as f,EyeOffIcon as p}from"lucide-react";import{useCallback as m,useId as h,useState as g}from"react";import{jsx as _,jsxs as v}from"react/jsx-runtime";import{useStore as y}from"@tanstack/react-form";const b=({label:b,description:x,placeholder:S,orientation:C=`responsive`,tooltip:w,helperText:T,showErrorMessage:E=!0})=>{let D=h(),{form:O,name:k,state:A,handleBlur:j,handleChange:M}=e(),N=y(O.store,({isSubmitting:e})=>e),[P,F]=g(!1),I=A.meta.isDirty&&A.meta.isTouched&&!A.meta.isValid,L=m(()=>F(e=>!e),[]),R=m(({target:{value:e}})=>{N||M(e||null)},[N,M]);return v(s,{className:`gap-y-4 px-4`,children:[v(n,{"data-invalid":I,orientation:C,children:[v(r,{children:[v(c,{htmlFor:D,children:[b,w&&_(d,{tooltip:w})]}),_(a,{children:x})]}),v(i,{children:[_(t,{id:D,name:k,type:P?`text`:`password`,placeholder:S,value:A.value??``,"aria-invalid":I,autoComplete:`new-password`,onBlur:j,onChange:R}),_(`button`,{className:`absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,onClick:L,"aria-label":P?`Ẩn mật khẩu`:`Hiện mật khẩu`,"aria-pressed":P,"aria-controls":D,children:_(P?p:f,{size:16,"aria-hidden":`true`})}),_(`div`,{className:`mt-1 flex w-full items-start justify-start`,children:E&&A.meta.isDirty&&_(o,{errors:A.meta.errors})}),_(l,{isShow:!!T,children:T})]})]}),_(u,{})]})};export{b as PasswordField};
|
|
2
|
+
//# sourceMappingURL=password-field-C5FsQUa8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-field-C5FsQUa8.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/fields/password-field.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useId, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTooltip,\n} from '../ui/field';\n\nimport type { PasswordFieldProps as Props } from '../../types';\n\n/**\n * A TanStack Form-connected password input field with a show/hide toggle button\n * and inline validation error display.\n *\n * @example\n * import { PasswordField } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * <form.Field name=\"password\">\n * {() => (\n * <PasswordField\n * label=\"Password\"\n * placeholder=\"Enter your password\"\n * helperText=\"Must be at least 8 characters\"\n * />\n * )}\n * </form.Field>\n */\nexport const PasswordField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n orientation = 'responsive',\n tooltip,\n helperText,\n showErrorMessage = true,\n}) => {\n const id = useId();\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n\n const toggleVisibility = useCallback(() => setIsVisible(prev => !prev), []);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n handleChange(value || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={id}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={id}\n name={name}\n type={isVisible ? 'text' : 'password'}\n placeholder={placeholder}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"new-password\"\n onBlur={handleBlur}\n onChange={onChange}\n />\n\n <button\n className=\"absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Ẩn mật khẩu' : 'Hiện mật khẩu'}\n aria-pressed={isVisible}\n aria-controls={id}\n >\n {isVisible ? <EyeOffIcon size={16} aria-hidden=\"true\" /> : <EyeIcon size={16} aria-hidden=\"true\" />}\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">\n {showErrorMessage && state.meta.isDirty && <FieldError errors={state.meta.errors} />}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"8fA2CA,MAAa,GAAkC,CAC7C,QACA,cACA,cACA,cAAc,aACd,UACA,aACA,mBAAmB,MACf,CACJ,IAAM,EAAK,EAAM,EACX,CAAE,OAAM,OAAM,QAAO,aAAY,gBAAiB,EAAuC,EAEzF,EAAe,EAAS,EAAK,OAAQ,CAAE,kBAAmB,CAAY,EAEtE,CAAC,EAAW,GAAgB,EAAkB,EAAK,EAEnD,EAAW,EAAM,KAAK,SAAW,EAAM,KAAK,WAAa,CAAC,EAAM,KAAK,QAErE,EAAmB,MAAkB,EAAa,GAAQ,CAAC,CAAI,EAAG,CAAC,CAAC,EAEpE,EAAW,GACd,CAAE,OAAQ,CAAE,YAAc,CACrB,GACJ,EAAa,GAAS,IAAI,CAC5B,EACA,CAAC,EAAc,CAAY,CAC7B,EAEA,OACE,EAAC,EAAD,CAAY,UAAU,wBAAtB,CACE,EAAC,EAAD,CAAO,eAAc,EAAuB,uBAA5C,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAY,QAAS,WAArB,CACG,EACA,GAAW,EAAC,EAAD,CAAuB,SAAU,CAAA,CACnC,IACZ,EAAC,EAAD,CAAA,SAAmB,CAA8B,CAAA,CACrC,CAAA,CAAA,EACd,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CACM,KACE,OACN,KAAM,EAAY,OAAS,WACd,cACb,MAAO,EAAM,OAAS,GACtB,eAAc,EACd,aAAa,eACb,OAAQ,EACE,UACX,CAAA,EAED,EAAC,SAAD,CACE,UAAU,kOACV,KAAK,SACL,QAAS,EACT,aAAY,EAAY,cAAgB,gBACxC,eAAc,EACd,gBAAe,WAEF,EAAZ,EAAa,EAA8C,EAA/C,CAAY,KAAM,GAAI,cAAY,MAAQ,CAA2C,CAC5F,CAAA,EAER,EAAC,MAAD,CAAK,UAAU,sDACZ,GAAoB,EAAM,KAAK,SAAW,EAAC,EAAD,CAAY,OAAQ,EAAM,KAAK,MAAS,CAAA,CAChF,CAAA,EACL,EAAC,EAAD,CAAW,OAAQ,CAAC,CAAC,WAAa,CAAsB,CAAA,CACxC,CAAA,CAAA,CACb,IACP,EAAC,EAAD,CAAiB,CAAA,CACP,GAEhB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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("react/jsx-runtime"),o=require("@tanstack/react-form");const s=({label:s,description:c,placeholder:l,orientation:u=`responsive`,tooltip:d,helperText:f,showErrorMessage:p=!0})=>{let m=(0,i.useId)(),{form:h,name:g,state:_,handleBlur:v,handleChange:y}=e.G(),b=(0,o.useStore)(h.store,({isSubmitting:e})=>e),[x,S]=(0,i.useState)(!1),C=_.meta.isDirty&&_.meta.isTouched&&!_.meta.isValid,w=(0,i.useCallback)(()=>S(e=>!e),[]),T=(0,i.useCallback)(({target:{value:e}})=>{b||y(e||null)},[b,y]);return(0,a.jsxs)(n.FieldGroup,{className:`gap-y-4 px-4`,children:[(0,a.jsxs)(n.Field,{"data-invalid":C,orientation:u,children:[(0,a.jsxs)(n.FieldContent,{children:[(0,a.jsxs)(n.FieldLabel,{htmlFor:m,children:[s,d&&(0,a.jsx)(n.FieldTooltip,{tooltip:d})]}),(0,a.jsx)(n.FieldDescription,{children:c})]}),(0,a.jsxs)(n.FieldContentMain,{children:[(0,a.jsx)(t.Input,{id:m,name:g,type:x?`text`:`password`,placeholder:l,value:_.value??``,"aria-invalid":C,autoComplete:`new-password`,onBlur:v,onChange:T}),(0,a.jsx)(`button`,{className:`absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,onClick:w,"aria-label":x?`Ẩn mật khẩu`:`Hiện mật khẩu`,"aria-pressed":x,"aria-controls":m,children:x?(0,a.jsx)(r.EyeOffIcon,{size:16,"aria-hidden":`true`}):(0,a.jsx)(r.EyeIcon,{size:16,"aria-hidden":`true`})}),(0,a.jsx)(`div`,{className:`mt-1 flex w-full items-start justify-start`,children:p&&_.meta.isDirty&&(0,a.jsx)(n.FieldError,{errors:_.meta.errors})}),(0,a.jsx)(n.FieldNote,{isShow:!!f,children:f})]})]}),(0,a.jsx)(n.FieldSeparator,{})]})};exports.PasswordField=s;
|
|
2
|
+
//# sourceMappingURL=password-field-gHYDiXWY.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-field-gHYDiXWY.cjs","names":["useTanStackFieldContext","FieldGroup","Field","FieldContent","FieldLabel","FieldTooltip","FieldDescription","FieldContentMain","Input","EyeOffIcon","EyeIcon","FieldError","FieldNote","FieldSeparator"],"sources":["../packages/components/features/tanstack-form/components/fields/password-field.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useId, useState } from 'react';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { EyeIcon, EyeOffIcon } from 'lucide-react';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTooltip,\n} from '../ui/field';\n\nimport type { PasswordFieldProps as Props } from '../../types';\n\n/**\n * A TanStack Form-connected password input field with a show/hide toggle button\n * and inline validation error display.\n *\n * @example\n * import { PasswordField } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * <form.Field name=\"password\">\n * {() => (\n * <PasswordField\n * label=\"Password\"\n * placeholder=\"Enter your password\"\n * helperText=\"Must be at least 8 characters\"\n * />\n * )}\n * </form.Field>\n */\nexport const PasswordField: React.FC<Props> = ({\n label,\n description,\n placeholder,\n orientation = 'responsive',\n tooltip,\n helperText,\n showErrorMessage = true,\n}) => {\n const id = useId();\n const { form, name, state, handleBlur, handleChange } = useTanStackFieldContext<string | null>();\n\n const isSubmitting = useStore(form.store, ({ isSubmitting }) => isSubmitting);\n\n const [isVisible, setIsVisible] = useState<boolean>(false);\n\n const _invalid = state.meta.isDirty && state.meta.isTouched && !state.meta.isValid;\n\n const toggleVisibility = useCallback(() => setIsVisible(prev => !prev), []);\n\n const onChange = useCallback<React.ChangeEventHandler<HTMLInputElement>>(\n ({ target: { value } }) => {\n if (isSubmitting) return;\n handleChange(value || null);\n },\n [isSubmitting, handleChange]\n );\n\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field data-invalid={_invalid} orientation={orientation}>\n <FieldContent>\n <FieldLabel htmlFor={id}>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldContentMain>\n <Input\n id={id}\n name={name}\n type={isVisible ? 'text' : 'password'}\n placeholder={placeholder}\n value={state.value ?? ''}\n aria-invalid={_invalid}\n autoComplete=\"new-password\"\n onBlur={handleBlur}\n onChange={onChange}\n />\n\n <button\n className=\"absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Ẩn mật khẩu' : 'Hiện mật khẩu'}\n aria-pressed={isVisible}\n aria-controls={id}\n >\n {isVisible ? <EyeOffIcon size={16} aria-hidden=\"true\" /> : <EyeIcon size={16} aria-hidden=\"true\" />}\n </button>\n\n <div className=\"mt-1 flex w-full items-start justify-start\">\n {showErrorMessage && state.meta.isDirty && <FieldError errors={state.meta.errors} />}\n </div>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"gOA2CA,MAAa,GAAkC,CAC7C,QACA,cACA,cACA,cAAc,aACd,UACA,aACA,mBAAmB,MACf,CACJ,IAAM,GAAA,EAAA,EAAA,MAAA,CAAW,EACX,CAAE,OAAM,OAAM,QAAO,aAAY,gBAAiBA,EAAAA,EAAuC,EAEzF,GAAA,EAAA,EAAA,SAAA,CAAwB,EAAK,OAAQ,CAAE,kBAAmB,CAAY,EAEtE,CAAC,EAAW,IAAA,EAAA,EAAA,SAAA,CAAkC,EAAK,EAEnD,EAAW,EAAM,KAAK,SAAW,EAAM,KAAK,WAAa,CAAC,EAAM,KAAK,QAErE,GAAA,EAAA,EAAA,YAAA,KAAqC,EAAa,GAAQ,CAAC,CAAI,EAAG,CAAC,CAAC,EAEpE,GAAA,EAAA,EAAA,YAAA,EACH,CAAE,OAAQ,CAAE,YAAc,CACrB,GACJ,EAAa,GAAS,IAAI,CAC5B,EACA,CAAC,EAAc,CAAY,CAC7B,EAEA,OACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,UAAU,wBAAtB,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAO,eAAc,EAAuB,uBAA5C,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,aAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,QAAS,WAArB,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,KAAA,CAACC,EAAAA,iBAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CACM,KACE,OACN,KAAM,EAAY,OAAS,WACd,cACb,MAAO,EAAM,OAAS,GACtB,eAAc,EACd,aAAa,eACb,OAAQ,EACE,UACX,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,SAAD,CACE,UAAU,kOACV,KAAK,SACL,QAAS,EACT,aAAY,EAAY,cAAgB,gBACxC,eAAc,EACd,gBAAe,WAEd,GAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAY,KAAM,GAAI,cAAY,MAAQ,CAAA,GAAI,EAAA,EAAA,IAAA,CAACC,EAAAA,QAAD,CAAS,KAAM,GAAI,cAAY,MAAQ,CAAA,CAC5F,CAAA,GAER,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,sDACZ,GAAoB,EAAM,KAAK,UAAW,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAY,OAAQ,EAAM,KAAK,MAAS,CAAA,CAChF,CAAA,GACL,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,OAAQ,CAAC,CAAC,WAAa,CAAsB,CAAA,CACxC,CAAA,CAAA,CACb,KACP,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAiB,CAAA,CACP,GAEhB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./dist-DzA--RwW.cjs"),t=require("./ui/button.cjs"),n=require("./typography/paragraph.cjs");require("./ui/skeleton.cjs");const r=require("./layouts/flex.cjs"),i=require("./ui/tooltip.cjs"),a=require("./ui/avatar.cjs"),o=require("./features/logo/index.cjs"),s=require("./ui/sheet.cjs"),c=require("./ui/dropdown-menu.cjs");require("./ui/input.cjs"),require("./ui/separator.cjs");let l=require("lucide-react"),u=require("react"),d=require("@customafk/react-toolkit/utils"),f=require("class-variance-authority"),p=require("react/jsx-runtime"),m=require("@customafk/react-toolkit/color-hash"),h=require("@customafk/react-toolkit/hooks/useMobile");const g=(0,u.createContext)(null);function _(){let e=(0,u.useContext)(g);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function v({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:a,children:o,...s}){let c=(0,h.useIsMobile)(),[l,f]=(0,u.useState)(!1),[m,_]=(0,u.useState)(e),v=t??m,y=(0,u.useCallback)(e=>{let t=typeof e==`function`?e(v):e;n?n(t):_(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,v]),b=(0,u.useCallback)(()=>c?f(e=>!e):y(e=>!e),[c,y]);(0,u.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),b())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[b]);let x=v?`expanded`:`collapsed`,S=(0,u.useMemo)(()=>({state:x,open:v,setOpen:y,isMobile:c,openMobile:l,setOpenMobile:f,toggleSidebar:b}),[x,v,y,c,l,b]);return(0,p.jsx)(g.Provider,{value:S,children:(0,p.jsx)(i.TooltipProvider,{delayDuration:0,children:(0,p.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,d.cn)(`group/sidebar-wrapper flex h-dvh w-full`,r),...s,children:o})})})}function y({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:i,children:a,...o}){let{isMobile:c,state:u,openMobile:f,setOpenMobile:m,toggleSidebar:h}=_();return r===`none`?(0,p.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,d.cn)(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...o,children:a}):c?(0,p.jsx)(s.Sheet,{open:f,onOpenChange:m,...o,children:(0,p.jsxs)(s.SheetContent,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,style:{"--sidebar-width":`18rem`},side:e,children:[(0,p.jsxs)(s.SheetHeader,{className:`sr-only`,children:[(0,p.jsx)(s.SheetTitle,{children:`Sidebar`}),(0,p.jsx)(s.SheetDescription,{children:`Displays the mobile sidebar.`})]}),(0,p.jsxs)(`div`,{className:`flex size-full flex-col`,children:[(0,p.jsxs)(`div`,{className:`flex flex-0 items-center gap-x-2 border-border-weak border-b p-2 pr-4`,children:[(0,p.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:(0,d.cn)(`size-10 rounded-full`,i),onClick:e=>{h(),e.preventDefault(),e.stopPropagation()},children:[(0,p.jsx)(l.MenuIcon,{className:`size-6!`}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,p.jsx)(`div`,{className:`ml-2 flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:(0,p.jsx)(l.ShoppingCartIcon,{size:20})}),(0,p.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,p.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),(0,p.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),(0,p.jsx)(`div`,{className:`flex flex-1 flex-col p-2`,children:a})]})]})}):(0,p.jsxs)(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":u,"data-collapsible":u===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[(0,p.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,d.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) w-(--sidebar-width)`,`sm:h-[calc(var(--header-height)+0.5rem)]`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,n===`floating`||n===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,p.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,d.cn)(`hidden md:flex`,`fixed inset-y-0 top-14 z-10 shadow-nav`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,n===`floating`||n===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,i),...o,children:(0,p.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,d.cn)(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:a})})]})}function b({className:e,children:t,...n}){return(0,p.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,d.cn)(`relative flex w-full flex-1 flex-col`,e),...n,children:[(0,p.jsx)(`div`,{className:`h-(--header-height) w-full sm:h-[calc(var(--header-height)+0.5rem)]`}),(0,p.jsx)(`div`,{className:`inset-shadow-sm flex-1`,children:t})]})}function x({className:e,...t}){return(0,p.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,d.cn)(`flex flex-col gap-2 p-2`,e),...t})}function S({className:e,...t}){return(0,p.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,d.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function C({className:e,...t}){return(0,p.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,d.cn)(`relative flex w-full min-w-0 flex-col`,e),...t})}function w({className:t,asChild:n=!1,...r}){return(0,p.jsx)(n?e.t:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,d.cn)(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0`,t),...r})}function T({className:e,...t}){return(0,p.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,d.cn)(`w-full text-sm`,e),...t})}function E({className:e,...t}){return(0,p.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,d.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function D({className:e,...t}){return(0,p.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,d.cn)(`group/menu-item relative`,e),...t})}const O=(0,f.cva)([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-primary-muted`,`data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12!`,`group-data-[collapsible=icon]:p-3!`,`group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6`,`[&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function k({asChild:t=!1,isActive:n=!1,variant:r=`default`,size:a=`default`,tooltip:o,className:s,...c}){let l=t?e.t:`button`,{isMobile:u,state:f}=_(),m=(0,p.jsx)(l,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":a,"data-active":n,className:(0,d.cn)(O({variant:r,size:a}),s),...c});return o?(typeof o==`string`&&(o={children:o}),(0,p.jsxs)(i.Tooltip,{children:[(0,p.jsx)(i.TooltipTrigger,{asChild:!0,children:m}),(0,p.jsx)(i.TooltipContent,{side:`right`,align:`center`,hidden:f!==`collapsed`||u,...o})]})):m}const A=({uuid:e,username:t,email:i})=>(0,p.jsxs)(r.Flex,{"data-slot":`user-display`,wrap:!1,gap:`sm`,padding:`none`,children:[(0,p.jsx)(a.Avatar,{className:`size-9 shadow-card`,children:(0,p.jsx)(a.AvatarFallback,{style:{backgroundColor:m.colorHashLight.hex(e)},children:(0,p.jsx)(l.UserRoundIcon,{size:28,className:`text-white`})})}),(0,p.jsxs)(r.Flex,{vertical:!0,padding:`none`,gap:`none`,align:`start`,className:`hidden sm:flex`,children:[(0,p.jsx)(n.Paragraph,{className:`text-sm font-medium text-text-positive`,children:t}),(0,p.jsx)(n.Paragraph,{variant:`sm`,className:`mt-0! text-xs text-text-positive-weak`,children:i})]})]}),j=({user:e,isLogin:n=!0,onLogin:r,onLogout:i,logo:a})=>{let{toggleSidebar:s}=_(),f=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),s()},[s]),m=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),i?.()},[i]),h=(0,u.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),r?.()},[r]);return(0,p.jsxs)(`header`,{"data-slot":`payment-layout-header`,className:(0,d.cn)(`bg-card`,`h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-2.5`,`flex items-center shadow-nav`,`transition-[width,height] ease-linear`),children:[n&&(0,p.jsxs)(t.Button,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`hidden size-10 rounded-full transition-all hover:text-text-positive md:flex`,onClick:f,children:[(0,p.jsx)(l.MenuIcon,{className:`size-6!`}),(0,p.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,p.jsx)(`div`,{className:`flex flex-1 items-center sm:ml-2.5`,children:a??(0,p.jsx)(o.LunasLogo,{variant:`horizontal`,size:`xs`})}),e?(0,p.jsxs)(c.DropdownMenu,{children:[(0,p.jsx)(c.DropdownMenuTrigger,{asChild:!0,children:(0,p.jsx)(t.Button,{variant:`ghost`,color:`muted`,className:`gap-x-2 rounded-full px-2 transition-all hover:text-text-positive`,children:(0,p.jsx)(A,{uuid:e?.uuid??``,username:e.fullname,email:e.email})})}),(0,p.jsxs)(c.DropdownMenuContent,{align:`end`,className:`w-56`,children:[(0,p.jsxs)(c.DropdownMenuLabel,{className:`font-normal`,children:[(0,p.jsx)(`p`,{className:`font-medium`,children:e.fullname}),(0,p.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:e.email})]}),(0,p.jsx)(c.DropdownMenuSeparator,{}),(0,p.jsx)(c.DropdownMenuGroup,{children:(0,p.jsxs)(c.DropdownMenuItem,{onClick:m,children:[(0,p.jsx)(l.LogOutIcon,{size:14}),`Đăng xuất`]})})]})]}):(0,p.jsx)(t.Button,{size:`sm`,onClick:h,children:`Đăng nhập`})]})},M=({items:e,activeNavItemId:t})=>{let{isMobile:n}=_();return!n||e.length===0?null:(0,p.jsx)(`nav`,{"data-slot":`mobile-bottom-nav`,className:`fixed inset-x-0 bottom-0 z-20 flex h-16 items-stretch border-border border-t bg-card md:hidden`,children:e.slice(0,5).map(e=>(0,p.jsxs)(`button`,{type:`button`,onClick:e.onClick,"data-active":e.id===t,className:(0,d.cn)(`flex flex-1 flex-col items-center justify-center gap-0.5`,`text-muted-foreground transition-colors`,`data-[active=true]:text-sidebar-primary`,`[&>svg]:size-5 [&>svg]:shrink-0`),children:[e.icon,(0,p.jsx)(`span`,{className:`max-w-16 truncate text-[10px] leading-3`,children:e.label})]},e.id))})},N=({activeNavItemId:e,sidebar:t,user:n,isLogin:r=!0,onLogin:i,onLogout:a,children:o})=>{let s=(0,u.useMemo)(()=>t?.groupcontent||[],[t]),c=(0,u.useMemo)(()=>s.flatMap(e=>e.items),[s]);return(0,p.jsxs)(v,{children:[(0,p.jsx)(j,{user:n,isLogin:r,onLogin:i,onLogout:a}),r&&(0,p.jsxs)(y,{variant:`inset`,collapsible:`icon`,children:[(0,p.jsx)(S,{children:s.map(t=>(0,p.jsxs)(C,{children:[(0,p.jsx)(w,{children:t.label}),(0,p.jsx)(T,{children:(0,p.jsx)(E,{children:t.items.map(t=>(0,p.jsx)(D,{children:(0,p.jsxs)(k,{isActive:t.id===e,onClick:e=>{t.onClick?.(),e.preventDefault(),e.stopPropagation()},children:[t.icon,t.label]})},t.id))})})]},t.id))}),(0,p.jsx)(x,{children:(0,p.jsx)(E,{children:(0,p.jsx)(D,{className:`mt-2 border-t border-t-border`,children:(0,p.jsx)(`p`,{className:`pt-2 text-center text-muted-foreground text-xs`,children:`Copyright © 2025, Lunas.`})})})})]}),(0,p.jsx)(b,{children:(0,p.jsx)(`section`,{className:`relative size-full`,children:(0,p.jsx)(`div`,{className:(0,d.cn)(`absolute inset-0 overflow-y-auto`,r&&`pb-16 md:pb-0`),children:o})})}),r&&(0,p.jsx)(M,{items:c,activeNavItemId:e})]})};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return N}});
|
|
2
|
+
//# sourceMappingURL=payment-layout-Cb-Q8KD2.cjs.map
|