@customafk/lunas-ui 0.2.84 → 0.2.85
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/LoginPage-DGgThT3s.mjs +2 -0
- package/dist/LoginPage-DGgThT3s.mjs.map +1 -0
- package/dist/LoginPage-DPUdRD0r.cjs +2 -0
- package/dist/LoginPage-DPUdRD0r.cjs.map +1 -0
- package/dist/{action-submit-tpgKvZ47.cjs → action-submit-B2qFdfi6.cjs} +2 -2
- package/dist/{action-submit-tpgKvZ47.cjs.map → action-submit-B2qFdfi6.cjs.map} +1 -1
- package/dist/{action-submit-BHY2dndL.mjs → action-submit-DyNvI-F2.mjs} +2 -2
- package/dist/{action-submit-BHY2dndL.mjs.map → action-submit-DyNvI-F2.mjs.map} +1 -1
- package/dist/{actions-form-PByL8_M5.mjs → actions-form-CB0lZlE6.mjs} +2 -2
- package/dist/{actions-form-PByL8_M5.mjs.map → actions-form-CB0lZlE6.mjs.map} +1 -1
- package/dist/{actions-form-X46W7FVa.cjs → actions-form-DnlpVrgF.cjs} +2 -2
- package/dist/{actions-form-X46W7FVa.cjs.map → actions-form-DnlpVrgF.cjs.map} +1 -1
- package/dist/{button-BGW-LZ3i.d.cts → button-BnoPktln.d.cts} +2 -2
- package/dist/{button-BGW-LZ3i.d.mts → button-BnoPktln.d.mts} +2 -2
- package/dist/{calendar-BNTvKnwd.d.cts → calendar-BkV5hTX2.d.mts} +2 -2
- package/dist/{calendar-DbaIaWr0.d.mts → calendar-iDMPT1kI.d.cts} +2 -2
- package/dist/{carousel-Bw-VhPR3.d.mts → carousel-D7VXWJ3S.d.mts} +2 -2
- package/dist/{carousel-DRqMTyKS.d.cts → carousel-bBvM31sh.d.cts} +2 -2
- package/dist/{checkbox-field-BG35eKvM.cjs → checkbox-field-CFPHAcwN.cjs} +2 -2
- package/dist/{checkbox-field-BG35eKvM.cjs.map → checkbox-field-CFPHAcwN.cjs.map} +1 -1
- package/dist/{checkbox-field-C-NyMjEm.mjs → checkbox-field-DodKeFS_.mjs} +2 -2
- package/dist/{checkbox-field-C-NyMjEm.mjs.map → checkbox-field-DodKeFS_.mjs.map} +1 -1
- package/dist/{combobox-field-ROYquFD8.cjs → combobox-field-D7cZ8fhZ.cjs} +2 -2
- package/dist/{combobox-field-ROYquFD8.cjs.map → combobox-field-D7cZ8fhZ.cjs.map} +1 -1
- package/dist/{combobox-field-Cx0A-CD4.mjs → combobox-field-ebIvbhJn.mjs} +2 -2
- package/dist/{combobox-field-Cx0A-CD4.mjs.map → combobox-field-ebIvbhJn.mjs.map} +1 -1
- package/dist/{date-field-zoPch5tC.mjs → date-field-CNkxebta.mjs} +2 -2
- package/dist/{date-field-zoPch5tC.mjs.map → date-field-CNkxebta.mjs.map} +1 -1
- package/dist/{date-field-46UtGmEV.cjs → date-field-Dm367ro9.cjs} +2 -2
- package/dist/{date-field-46UtGmEV.cjs.map → date-field-Dm367ro9.cjs.map} +1 -1
- package/dist/{dialog-form-X9MxC8pq.cjs → dialog-form-D9Bifsx6.cjs} +2 -2
- package/dist/{dialog-form-X9MxC8pq.cjs.map → dialog-form-D9Bifsx6.cjs.map} +1 -1
- package/dist/{dialog-form-BRV1niqF.mjs → dialog-form-zK6Gk9Gk.mjs} +2 -2
- package/dist/{dialog-form-BRV1niqF.mjs.map → dialog-form-zK6Gk9Gk.mjs.map} +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +1 -1
- package/dist/{email-field-CPEVNvn8.mjs → email-field-BVl7u9pR.mjs} +2 -2
- package/dist/{email-field-CPEVNvn8.mjs.map → email-field-BVl7u9pR.mjs.map} +1 -1
- package/dist/{email-field-0UjeYtnM.cjs → email-field-CqXXRG3w.cjs} +2 -2
- package/dist/{email-field-0UjeYtnM.cjs.map → email-field-CqXXRG3w.cjs.map} +1 -1
- package/dist/features/tables/index.d.cts +1 -1
- package/dist/features/tables/index.d.mts +1 -1
- package/dist/features/tanstack-form/index.cjs +1 -1
- package/dist/features/tanstack-form/index.mjs +1 -1
- package/dist/{flex-D7IE_cdR.d.cts → flex-D6RCsrv1.d.cts} +4 -4
- package/dist/{flex-D7IE_cdR.d.mts → flex-D6RCsrv1.d.mts} +4 -4
- package/dist/{group-field-Cs0uWHg0.mjs → group-field-8nINgAeO.mjs} +2 -2
- package/dist/{group-field-Cs0uWHg0.mjs.map → group-field-8nINgAeO.mjs.map} +1 -1
- package/dist/{group-field-DJXL9sRy.cjs → group-field-DfGPDLyp.cjs} +2 -2
- package/dist/{group-field-DJXL9sRy.cjs.map → group-field-DfGPDLyp.cjs.map} +1 -1
- package/dist/index-6_zytlWu.d.cts +70 -0
- package/dist/index-6_zytlWu.d.mts +70 -0
- package/dist/{index-DJY2uC2H.d.mts → index-BCBEYTyA.d.mts} +10 -10
- package/dist/{index-UZik7mgS.d.cts → index-CQPyC0Q2.d.cts} +10 -10
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +11 -11
- package/dist/index.d.mts +11 -11
- package/dist/index.mjs +1 -1
- package/dist/{input-D73TrUof.d.cts → input-DxNK7Wo6.d.cts} +2 -2
- package/dist/{input-D73TrUof.d.mts → input-DxNK7Wo6.d.mts} +2 -2
- package/dist/layouts/flex.d.cts +1 -1
- package/dist/layouts/flex.d.mts +1 -1
- package/dist/{number-field-CMskIrWP.cjs → number-field-BjGl_IiN.cjs} +2 -2
- package/dist/{number-field-CMskIrWP.cjs.map → number-field-BjGl_IiN.cjs.map} +1 -1
- package/dist/{number-field-DSGwWg7y.mjs → number-field-CVemIwIg.mjs} +2 -2
- package/dist/{number-field-DSGwWg7y.mjs.map → number-field-CVemIwIg.mjs.map} +1 -1
- package/dist/pages/LoginPage/index.cjs +1 -0
- package/dist/pages/LoginPage/index.d.cts +2 -0
- package/dist/pages/LoginPage/index.d.mts +2 -0
- package/dist/pages/LoginPage/index.mjs +1 -0
- package/dist/{pagination-DDcO-TPf.d.cts → pagination-BRw-yZBY.d.cts} +2 -2
- package/dist/{pagination-DWg3Xv34.d.mts → pagination-BlLiOvY9.d.mts} +2 -2
- package/dist/{paragraph--8GcgnQL.d.cts → paragraph-CRo5eC7H.d.mts} +3 -3
- package/dist/{paragraph-BOa0VlGX.d.mts → paragraph-CkCNIsvz.d.cts} +3 -3
- package/dist/{password-field-BxJqTPhN.cjs → password-field-Be0Ltlxh.cjs} +2 -2
- package/dist/{password-field-BxJqTPhN.cjs.map → password-field-Be0Ltlxh.cjs.map} +1 -1
- package/dist/{password-field-DsmwNZep.mjs → password-field-BxYaT8lO.mjs} +2 -2
- package/dist/{password-field-DsmwNZep.mjs.map → password-field-BxYaT8lO.mjs.map} +1 -1
- package/dist/{popover-form-CdXVFl0t.cjs → popover-form-Ba_Nw79b.cjs} +2 -2
- package/dist/{popover-form-CdXVFl0t.cjs.map → popover-form-Ba_Nw79b.cjs.map} +1 -1
- package/dist/{popover-form-BUc5ivCF.mjs → popover-form-C9mNInr2.mjs} +2 -2
- package/dist/{popover-form-BUc5ivCF.mjs.map → popover-form-C9mNInr2.mjs.map} +1 -1
- package/dist/{radio-group-field-gHNAwrdr.cjs → radio-group-field-BCJWamjd.cjs} +2 -2
- package/dist/{radio-group-field-gHNAwrdr.cjs.map → radio-group-field-BCJWamjd.cjs.map} +1 -1
- package/dist/{radio-group-field-CmCo87tm.mjs → radio-group-field-DYqU_6hW.mjs} +2 -2
- package/dist/{radio-group-field-CmCo87tm.mjs.map → radio-group-field-DYqU_6hW.mjs.map} +1 -1
- package/dist/{resizable-C6JLqxF3.d.cts → resizable-DTnfCua-.d.cts} +2 -2
- package/dist/{resizable-C6JLqxF3.d.mts → resizable-DTnfCua-.d.mts} +2 -2
- package/dist/{search-input-DEvYI6Rm.d.mts → search-input-C8feOKe2.d.cts} +2 -2
- package/dist/{search-input-h_3MoMqK.d.cts → search-input-CoqwakbI.d.mts} +2 -2
- package/dist/{select-field-8PfksL_U.mjs → select-field-D7Ny2Qne.mjs} +2 -2
- package/dist/{select-field-8PfksL_U.mjs.map → select-field-D7Ny2Qne.mjs.map} +1 -1
- package/dist/{select-field-Ce53hZ3J.cjs → select-field-UWnBMAzL.cjs} +2 -2
- package/dist/{select-field-Ce53hZ3J.cjs.map → select-field-UWnBMAzL.cjs.map} +1 -1
- package/dist/{simple-array-field-BAR4MjDR.cjs → simple-array-field-BSMxRilE.cjs} +2 -2
- package/dist/{simple-array-field-BAR4MjDR.cjs.map → simple-array-field-BSMxRilE.cjs.map} +1 -1
- package/dist/{simple-array-field-C0kpO1cq.mjs → simple-array-field-DJXa_vST.mjs} +2 -2
- package/dist/{simple-array-field-C0kpO1cq.mjs.map → simple-array-field-DJXa_vST.mjs.map} +1 -1
- package/dist/{simple-boolean-field-Bdc4wuUU.mjs → simple-boolean-field-CVNT8NBk.mjs} +2 -2
- package/dist/{simple-boolean-field-Bdc4wuUU.mjs.map → simple-boolean-field-CVNT8NBk.mjs.map} +1 -1
- package/dist/{simple-boolean-field-36jmOxCR.cjs → simple-boolean-field-CxAyVQ1w.cjs} +2 -2
- package/dist/{simple-boolean-field-36jmOxCR.cjs.map → simple-boolean-field-CxAyVQ1w.cjs.map} +1 -1
- package/dist/{simple-combobox-field-BPDtPj1W.cjs → simple-combobox-field-BP4IeDkA.cjs} +2 -2
- package/dist/{simple-combobox-field-BPDtPj1W.cjs.map → simple-combobox-field-BP4IeDkA.cjs.map} +1 -1
- package/dist/{simple-combobox-field-CR5Q6Nsd.mjs → simple-combobox-field-BnAUDfQU.mjs} +2 -2
- package/dist/{simple-combobox-field-CR5Q6Nsd.mjs.map → simple-combobox-field-BnAUDfQU.mjs.map} +1 -1
- package/dist/{simple-date-field-DkhG2o7I.mjs → simple-date-field-DIa6UBF2.mjs} +2 -2
- package/dist/{simple-date-field-DkhG2o7I.mjs.map → simple-date-field-DIa6UBF2.mjs.map} +1 -1
- package/dist/{simple-date-field-DUPnGa5d.cjs → simple-date-field-NSawlSff.cjs} +2 -2
- package/dist/{simple-date-field-DUPnGa5d.cjs.map → simple-date-field-NSawlSff.cjs.map} +1 -1
- package/dist/{simple-email-field-BTYqiFp8.cjs → simple-email-field-2Abh3qZw.cjs} +2 -2
- package/dist/{simple-email-field-BTYqiFp8.cjs.map → simple-email-field-2Abh3qZw.cjs.map} +1 -1
- package/dist/{simple-email-field-CpxklyKr.mjs → simple-email-field-CKDQgzh5.mjs} +2 -2
- package/dist/{simple-email-field-CpxklyKr.mjs.map → simple-email-field-CKDQgzh5.mjs.map} +1 -1
- package/dist/{simple-number-field-CTFyTMgw.cjs → simple-number-field-BjEYE54F.cjs} +2 -2
- package/dist/{simple-number-field-CTFyTMgw.cjs.map → simple-number-field-BjEYE54F.cjs.map} +1 -1
- package/dist/{simple-number-field-DuCvwUG9.mjs → simple-number-field-SDbxL6L7.mjs} +2 -2
- package/dist/{simple-number-field-DuCvwUG9.mjs.map → simple-number-field-SDbxL6L7.mjs.map} +1 -1
- package/dist/{simple-password-field-BaeUvVB1.cjs → simple-password-field-Cjp6yzWd.cjs} +2 -2
- package/dist/{simple-password-field-BaeUvVB1.cjs.map → simple-password-field-Cjp6yzWd.cjs.map} +1 -1
- package/dist/{simple-password-field-Cu_JvDEE.mjs → simple-password-field-Cnj-hf5g.mjs} +2 -2
- package/dist/{simple-password-field-Cu_JvDEE.mjs.map → simple-password-field-Cnj-hf5g.mjs.map} +1 -1
- package/dist/{simple-radio-group-field-RJ_cEsxK.mjs → simple-radio-group-field-4-eWSXY7.mjs} +2 -2
- package/dist/{simple-radio-group-field-RJ_cEsxK.mjs.map → simple-radio-group-field-4-eWSXY7.mjs.map} +1 -1
- package/dist/{simple-radio-group-field-DiU4eQ_c.cjs → simple-radio-group-field-CuA0Q-XI.cjs} +2 -2
- package/dist/{simple-radio-group-field-DiU4eQ_c.cjs.map → simple-radio-group-field-CuA0Q-XI.cjs.map} +1 -1
- package/dist/{simple-select-field-B3uEUqvQ.mjs → simple-select-field-C0ecQx68.mjs} +2 -2
- package/dist/{simple-select-field-B3uEUqvQ.mjs.map → simple-select-field-C0ecQx68.mjs.map} +1 -1
- package/dist/{simple-select-field-C8vmeHbL.cjs → simple-select-field-CXYJcRY2.cjs} +2 -2
- package/dist/{simple-select-field-C8vmeHbL.cjs.map → simple-select-field-CXYJcRY2.cjs.map} +1 -1
- package/dist/{simple-text-field-BEoQmd1b.mjs → simple-text-field-DJl5SIGn.mjs} +2 -2
- package/dist/{simple-text-field-BEoQmd1b.mjs.map → simple-text-field-DJl5SIGn.mjs.map} +1 -1
- package/dist/{simple-text-field-zFJt_99J.cjs → simple-text-field-DPXqNCXh.cjs} +2 -2
- package/dist/{simple-text-field-zFJt_99J.cjs.map → simple-text-field-DPXqNCXh.cjs.map} +1 -1
- package/dist/{simple-textarea-field-CzpApMiv.mjs → simple-textarea-field-BcHdUMTK.mjs} +2 -2
- package/dist/{simple-textarea-field-CzpApMiv.mjs.map → simple-textarea-field-BcHdUMTK.mjs.map} +1 -1
- package/dist/{simple-textarea-field-DyQZEDTe.cjs → simple-textarea-field-ZpXPwYz-.cjs} +2 -2
- package/dist/{simple-textarea-field-DyQZEDTe.cjs.map → simple-textarea-field-ZpXPwYz-.cjs.map} +1 -1
- package/dist/{switch-field-CsI6eXJu.cjs → switch-field-CCDuDdpf.cjs} +2 -2
- package/dist/{switch-field-CsI6eXJu.cjs.map → switch-field-CCDuDdpf.cjs.map} +1 -1
- package/dist/{switch-field-D2SWDM1l.mjs → switch-field-DBGFsmEZ.mjs} +2 -2
- package/dist/{switch-field-D2SWDM1l.mjs.map → switch-field-DBGFsmEZ.mjs.map} +1 -1
- package/dist/{tanstack-form-Do6xL2kv.mjs → tanstack-form-BhKAn9I0.mjs} +2 -2
- package/dist/{tanstack-form-Do6xL2kv.mjs.map → tanstack-form-BhKAn9I0.mjs.map} +1 -1
- package/dist/{tanstack-form-BiOihtxs.cjs → tanstack-form-DCB2addt.cjs} +2 -2
- package/dist/{tanstack-form-BiOihtxs.cjs.map → tanstack-form-DCB2addt.cjs.map} +1 -1
- package/dist/{text-field-wes_PQEd.mjs → text-field-Bx_vnc4O.mjs} +2 -2
- package/dist/{text-field-wes_PQEd.mjs.map → text-field-Bx_vnc4O.mjs.map} +1 -1
- package/dist/{text-field-D9CYYDKM.cjs → text-field-DMZZ6CND.cjs} +2 -2
- package/dist/{text-field-D9CYYDKM.cjs.map → text-field-DMZZ6CND.cjs.map} +1 -1
- package/dist/{textarea-field-CRf0M2Eb.cjs → textarea-field-BmImMdg-.cjs} +2 -2
- package/dist/{textarea-field-CRf0M2Eb.cjs.map → textarea-field-BmImMdg-.cjs.map} +1 -1
- package/dist/{textarea-field-BiNmDHgL.mjs → textarea-field-Cim3l0y8.mjs} +2 -2
- package/dist/{textarea-field-BiNmDHgL.mjs.map → textarea-field-Cim3l0y8.mjs.map} +1 -1
- package/dist/{title-field-C4BmSDR2.mjs → title-field-2dABwspv.mjs} +2 -2
- package/dist/{title-field-C4BmSDR2.mjs.map → title-field-2dABwspv.mjs.map} +1 -1
- package/dist/{title-field-B9LLoqIi.cjs → title-field-CFnSgTGH.cjs} +2 -2
- package/dist/{title-field-B9LLoqIi.cjs.map → title-field-CFnSgTGH.cjs.map} +1 -1
- package/dist/typography/paragraph.d.cts +1 -1
- package/dist/typography/paragraph.d.mts +1 -1
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/calendar.d.cts +1 -1
- package/dist/ui/calendar.d.mts +1 -1
- package/dist/ui/carousel.d.cts +1 -1
- package/dist/ui/carousel.d.mts +1 -1
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.d.cts +1 -1
- package/dist/ui/inputs/search-input.d.mts +1 -1
- package/dist/ui/pagination.d.cts +1 -1
- package/dist/ui/pagination.d.mts +1 -1
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/package.json +3 -3
- package/dist/LoginPage-DDljzV6A.d.cts +0 -43
- package/dist/LoginPage-DDljzV6A.d.mts +0 -43
- package/dist/pages/LoginPage.cjs +0 -2
- package/dist/pages/LoginPage.cjs.map +0 -1
- package/dist/pages/LoginPage.d.cts +0 -2
- package/dist/pages/LoginPage.d.mts +0 -2
- package/dist/pages/LoginPage.mjs +0 -2
- package/dist/pages/LoginPage.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"title-field-
|
|
1
|
+
{"version":3,"file":"title-field-CFnSgTGH.cjs","names":["FieldGroup","Field","FieldContent","FieldLegend","FieldDescription","FieldNote","FieldSeparator"],"sources":["../packages/components/features/tanstack-form/components/forms/title-field.tsx"],"sourcesContent":["import { Field, FieldContent, FieldDescription, FieldGroup, FieldLegend, FieldNote, FieldSeparator } from '../ui/field';\n\n/**\n * Renders a standalone section title with an optional description and helper note, followed by a separator.\n *\n * @example\n * import { TanStackTitleField } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * <TanStackTitleField\n * title=\"Billing Address\"\n * description=\"Provide the address associated with your payment method.\"\n * helperText=\"Must match your bank records.\"\n * />\n */\nexport const TanStackTitleField: React.FC<{\n /** The heading text rendered as a legend element. */\n title: string;\n /** Optional supplementary text displayed beneath the title. */\n description?: string;\n /** Optional helper note shown below the description area. */\n helperText?: string;\n}> = ({ title, description, helperText }) => {\n return (\n <FieldGroup className=\"gap-y-4 px-4\">\n <Field className=\"gap-0\">\n <FieldContent>\n <FieldLegend className=\"mb-1\">{title}</FieldLegend>\n <FieldDescription>{description}</FieldDescription>\n </FieldContent>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"mFAcA,MAAa,GAOP,CAAE,QAAO,cAAa,iBAExB,EAAA,EAAA,KAAA,CAACA,EAAAA,EAAD,CAAY,UAAU,eAAtB,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,EAAD,CAAO,UAAU,QAAjB,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAa,UAAU,OAAQ,SAAA,CAAmB,CAAA,GAClD,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAA,SAAmB,CAA8B,CAAA,CACrC,CAAA,CAAA,GACd,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAW,OAAQ,CAAC,CAAC,EAAa,SAAA,CAAsB,CAAA,CACnD,CACP,CAAA,GAAA,EAAA,EAAA,IAAA,CAACC,EAAAA,GAAD,CAAiB,CAAA,CACP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ParagraphProps, r as paragraphVariants, t as Paragraph } from "../paragraph
|
|
1
|
+
import { n as ParagraphProps, r as paragraphVariants, t as Paragraph } from "../paragraph-CkCNIsvz.cjs";
|
|
2
2
|
export { Paragraph, ParagraphProps, paragraphVariants };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ParagraphProps, r as paragraphVariants, t as Paragraph } from "../paragraph-
|
|
1
|
+
import { n as ParagraphProps, r as paragraphVariants, t as Paragraph } from "../paragraph-CRo5eC7H.mjs";
|
|
2
2
|
export { Paragraph, ParagraphProps, paragraphVariants };
|
package/dist/ui/button.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ButtonProps, t as Button } from "../button-
|
|
1
|
+
import { n as ButtonProps, t as Button } from "../button-BnoPktln.cjs";
|
|
2
2
|
export { Button, ButtonProps };
|
package/dist/ui/button.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ButtonProps, t as Button } from "../button-
|
|
1
|
+
import { n as ButtonProps, t as Button } from "../button-BnoPktln.mjs";
|
|
2
2
|
export { Button, ButtonProps };
|
package/dist/ui/calendar.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as CalendarDayButton, t as Calendar } from "../calendar-
|
|
1
|
+
import { n as CalendarDayButton, t as Calendar } from "../calendar-iDMPT1kI.cjs";
|
|
2
2
|
export { Calendar, CalendarDayButton };
|
package/dist/ui/calendar.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as CalendarDayButton, t as Calendar } from "../calendar-
|
|
1
|
+
import { n as CalendarDayButton, t as Calendar } from "../calendar-BkV5hTX2.mjs";
|
|
2
2
|
export { Calendar, CalendarDayButton };
|
package/dist/ui/carousel.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as CarouselNext, i as CarouselItem, n as CarouselApi, o as CarouselPrevious, r as CarouselContent, t as Carousel } from "../carousel-
|
|
1
|
+
import { a as CarouselNext, i as CarouselItem, n as CarouselApi, o as CarouselPrevious, r as CarouselContent, t as Carousel } from "../carousel-bBvM31sh.cjs";
|
|
2
2
|
export { Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious };
|
package/dist/ui/carousel.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as CarouselNext, i as CarouselItem, n as CarouselApi, o as CarouselPrevious, r as CarouselContent, t as Carousel } from "../carousel-
|
|
1
|
+
import { a as CarouselNext, i as CarouselItem, n as CarouselApi, o as CarouselPrevious, r as CarouselContent, t as Carousel } from "../carousel-D7VXWJ3S.mjs";
|
|
2
2
|
export { Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious };
|
package/dist/ui/input.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-
|
|
1
|
+
import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-DxNK7Wo6.cjs";
|
|
2
2
|
export { Input, InputVariantProps, inputVariants };
|
package/dist/ui/input.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-
|
|
1
|
+
import { n as InputVariantProps, r as inputVariants, t as Input } from "../input-DxNK7Wo6.mjs";
|
|
2
2
|
export { Input, InputVariantProps, inputVariants };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SearchInput } from "../../search-input-
|
|
1
|
+
import { t as SearchInput } from "../../search-input-C8feOKe2.cjs";
|
|
2
2
|
export { SearchInput };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SearchInput } from "../../search-input-
|
|
1
|
+
import { t as SearchInput } from "../../search-input-CoqwakbI.mjs";
|
|
2
2
|
export { SearchInput };
|
package/dist/ui/pagination.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../pagination-
|
|
1
|
+
import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../pagination-BRw-yZBY.cjs";
|
|
2
2
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
|
package/dist/ui/pagination.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../pagination-
|
|
1
|
+
import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../pagination-BlLiOvY9.mjs";
|
|
2
2
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
|
package/dist/ui/resizable.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-
|
|
1
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-DTnfCua-.cjs";
|
|
2
2
|
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
package/dist/ui/resizable.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-
|
|
1
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../resizable-DTnfCua-.mjs";
|
|
2
2
|
export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@customafk/lunas-ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.85",
|
|
4
4
|
"description": "UI library for Lunas Enterprise",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": {
|
|
@@ -168,8 +168,8 @@
|
|
|
168
168
|
"import": "./dist/pages/FeatureFixing.mjs"
|
|
169
169
|
},
|
|
170
170
|
"./pages/LoginPage": {
|
|
171
|
-
"require": "./dist/pages/LoginPage.cjs",
|
|
172
|
-
"import": "./dist/pages/LoginPage.mjs"
|
|
171
|
+
"require": "./dist/pages/LoginPage/index.cjs",
|
|
172
|
+
"import": "./dist/pages/LoginPage/index.mjs"
|
|
173
173
|
},
|
|
174
174
|
"./pages/NotAuthorized": {
|
|
175
175
|
"require": "./dist/pages/NotAuthorized.cjs",
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
//#region packages/components/pages/LoginPage.d.ts
|
|
2
|
-
interface LoginPageProps {
|
|
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 login credentials */
|
|
8
|
-
onLogin: (email: string, password: string) => Promise<void> | void;
|
|
9
|
-
/** Called when the "Quên mật khẩu?" link is clicked */
|
|
10
|
-
onForgotPassword?: () => void;
|
|
11
|
-
/** Called when the "Đăng ký" link is clicked */
|
|
12
|
-
onRegister?: () => void;
|
|
13
|
-
/** Disables the form and shows a spinner on the submit button */
|
|
14
|
-
isLoading?: boolean;
|
|
15
|
-
/** Server-side error message rendered in a destructive Alert */
|
|
16
|
-
errorMessage?: string;
|
|
17
|
-
/** Dialog heading. Default: "Đăng nhập" */
|
|
18
|
-
title?: string;
|
|
19
|
-
/** Dialog subheading. Default: "Nhập thông tin để tiếp tục" */
|
|
20
|
-
subtitle?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Modal login dialog for the client authentication flow.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```tsx
|
|
27
|
-
* import { LoginPage } from '@customafk/lunas-ui/pages/LoginPage';
|
|
28
|
-
*
|
|
29
|
-
* <LoginPage
|
|
30
|
-
* open={open}
|
|
31
|
-
* onOpenChange={setOpen}
|
|
32
|
-
* onLogin={async (email, password) => {
|
|
33
|
-
* await authService.login(email, password);
|
|
34
|
-
* setOpen(false);
|
|
35
|
-
* }}
|
|
36
|
-
* onRegister={() => { setOpen(false); setRegisterOpen(true); }}
|
|
37
|
-
* />
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
declare const LoginPage: ({ open, onOpenChange, onLogin, onForgotPassword, onRegister, isLoading, errorMessage, title, subtitle }: LoginPageProps) => import("react").JSX.Element;
|
|
41
|
-
//#endregion
|
|
42
|
-
export { LoginPageProps as n, LoginPage as t };
|
|
43
|
-
//# sourceMappingURL=LoginPage-DDljzV6A.d.cts.map
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
//#region packages/components/pages/LoginPage.d.ts
|
|
2
|
-
interface LoginPageProps {
|
|
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 login credentials */
|
|
8
|
-
onLogin: (email: string, password: string) => Promise<void> | void;
|
|
9
|
-
/** Called when the "Quên mật khẩu?" link is clicked */
|
|
10
|
-
onForgotPassword?: () => void;
|
|
11
|
-
/** Called when the "Đăng ký" link is clicked */
|
|
12
|
-
onRegister?: () => void;
|
|
13
|
-
/** Disables the form and shows a spinner on the submit button */
|
|
14
|
-
isLoading?: boolean;
|
|
15
|
-
/** Server-side error message rendered in a destructive Alert */
|
|
16
|
-
errorMessage?: string;
|
|
17
|
-
/** Dialog heading. Default: "Đăng nhập" */
|
|
18
|
-
title?: string;
|
|
19
|
-
/** Dialog subheading. Default: "Nhập thông tin để tiếp tục" */
|
|
20
|
-
subtitle?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Modal login dialog for the client authentication flow.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```tsx
|
|
27
|
-
* import { LoginPage } from '@customafk/lunas-ui/pages/LoginPage';
|
|
28
|
-
*
|
|
29
|
-
* <LoginPage
|
|
30
|
-
* open={open}
|
|
31
|
-
* onOpenChange={setOpen}
|
|
32
|
-
* onLogin={async (email, password) => {
|
|
33
|
-
* await authService.login(email, password);
|
|
34
|
-
* setOpen(false);
|
|
35
|
-
* }}
|
|
36
|
-
* onRegister={() => { setOpen(false); setRegisterOpen(true); }}
|
|
37
|
-
* />
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
declare const LoginPage: ({ open, onOpenChange, onLogin, onForgotPassword, onRegister, isLoading, errorMessage, title, subtitle }: LoginPageProps) => import("react").JSX.Element;
|
|
41
|
-
//#endregion
|
|
42
|
-
export { LoginPageProps as n, LoginPage as t };
|
|
43
|
-
//# sourceMappingURL=LoginPage-DDljzV6A.d.mts.map
|
package/dist/pages/LoginPage.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../ui/button.cjs"),t=require("../features/logo/index.cjs"),n=require("../ui/dialog.cjs"),r=require("../ui/input.cjs"),i=require("../alert-D31c6DLq.cjs"),a=require("../ui/label.cjs");let o=require("lucide-react"),s=require("react"),c=require("react/jsx-runtime"),l=require("zod/v4");const u=l.z.object({email:l.z.string().min(1,`Vui lòng nhập email`).email(`Email không hợp lệ`),password:l.z.string().min(1,`Vui lòng nhập mật khẩu`)}),d=({open:l,onOpenChange:d,onLogin:f,onForgotPassword:p,onRegister:m,isLoading:h=!1,errorMessage:g,title:_=`Đăng nhập`,subtitle:v=`Nhập thông tin để tiếp tục`})=>{let y=(0,s.useId)(),b=(0,s.useId)(),[x,S]=(0,s.useState)(``),[C,w]=(0,s.useState)(``),[T,E]=(0,s.useState)(!1),[D,O]=(0,s.useState)({});return(0,c.jsx)(n.Dialog,{open:l,onOpenChange:d,children:(0,c.jsxs)(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`,children:[(0,c.jsxs)(n.DialogHeader,{children:[(0,c.jsx)(t.LunasLogo,{variant:`horizontal`,size:`sm`,className:`mx-auto`}),(0,c.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,c.jsx)(n.DialogTitle,{children:_}),(0,c.jsx)(n.DialogDescription,{children:v})]})]}),(0,c.jsxs)(`form`,{onSubmit:async e=>{e.preventDefault();let t=u.safeParse({email:x,password:C});if(!t.success){let e=t.error.flatten().fieldErrors;O({email:e.email?.[0],password:e.password?.[0]});return}O({}),await f(x,C)},noValidate:!0,className:`flex flex-col gap-4`,children:[g&&(0,c.jsx)(i.t,{variant:`destructive`,children:(0,c.jsx)(i.n,{children:g})}),(0,c.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,c.jsx)(a.Label,{htmlFor:y,children:`Email`}),(0,c.jsx)(r.Input,{id:y,type:`email`,autoComplete:`email`,placeholder:`you@example.com`,value:x,onChange:e=>S(e.target.value),"aria-invalid":!!D.email,disabled:h}),D.email&&(0,c.jsx)(`p`,{className:`text-destructive text-xs`,children:D.email})]}),(0,c.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,c.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,c.jsx)(a.Label,{htmlFor:b,children:`Mật khẩu`}),p&&(0,c.jsx)(e.Button,{type:`button`,variant:`link`,size:`sm`,className:`h-auto p-0 text-xs`,onClick:p,children:`Quên mật khẩu?`})]}),(0,c.jsxs)(`div`,{className:`relative`,children:[(0,c.jsx)(r.Input,{id:b,type:T?`text`:`password`,autoComplete:`current-password`,placeholder:`••••••••`,value:C,onChange:e=>w(e.target.value),"aria-invalid":!!D.password,disabled:h,className:`pr-10`}),(0,c.jsx)(`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(),E(e=>!e)},"aria-label":T?`Ẩn mật khẩu`:`Hiện mật khẩu`,children:T?(0,c.jsx)(o.EyeOff,{size:16}):(0,c.jsx)(o.Eye,{size:16})})]}),D.password&&(0,c.jsx)(`p`,{className:`text-destructive text-xs`,children:D.password})]}),(0,c.jsx)(e.Button,{type:`submit`,isLoading:h,className:`w-full`,children:`Đăng nhập`}),(0,c.jsx)(e.Button,{type:`button`,variant:`outline`,className:`w-full`,disabled:h,onClick:()=>d(!1),children:`Đóng hộp thoại`})]}),m&&(0,c.jsxs)(`div`,{className:`flex justify-center gap-1 text-muted-foreground text-sm`,children:[(0,c.jsx)(`span`,{children:`Chưa có tài khoản?`}),(0,c.jsx)(e.Button,{variant:`link`,size:`sm`,className:`h-auto p-0`,onClick:m,children:`Đăng ký`})]})]})})};exports.LoginPage=d;
|
|
2
|
-
//# sourceMappingURL=LoginPage.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoginPage.cjs","names":["z","Dialog","DialogContent","DialogHeader","LunasLogo","DialogTitle","DialogDescription","Alert","AlertDescription","Label","Input","Button","EyeOff","Eye"],"sources":["../../packages/components/pages/LoginPage.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 LoginPageProps {\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 login credentials */\n onLogin: (email: string, password: string) => Promise<void> | void;\n /** Called when the \"Quên mật khẩu?\" link is clicked */\n onForgotPassword?: () => void;\n /** Called when the \"Đăng ký\" link is clicked */\n onRegister?: () => 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 nhập\" */\n title?: string;\n /** Dialog subheading. Default: \"Nhập thông tin để tiếp tục\" */\n subtitle?: string;\n}\n\nconst loginSchema = z.object({\n email: z.string().min(1, 'Vui lòng nhập email').email('Email không hợp lệ'),\n password: z.string().min(1, 'Vui lòng nhập mật khẩu'),\n});\n\n/**\n * Modal login dialog for the client authentication flow.\n *\n * @example\n * ```tsx\n * import { LoginPage } from '@customafk/lunas-ui/pages/LoginPage';\n *\n * <LoginPage\n * open={open}\n * onOpenChange={setOpen}\n * onLogin={async (email, password) => {\n * await authService.login(email, password);\n * setOpen(false);\n * }}\n * onRegister={() => { setOpen(false); setRegisterOpen(true); }}\n * />\n * ```\n */\nexport const LoginPage = ({\n open,\n onOpenChange,\n onLogin,\n onForgotPassword,\n onRegister,\n isLoading = false,\n errorMessage,\n title = 'Đăng nhập',\n subtitle = 'Nhập thông tin để tiếp tục',\n}: LoginPageProps) => {\n const emailId = useId();\n const passwordId = useId();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [fieldErrors, setFieldErrors] = useState<{ email?: string; password?: string }>({});\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const result = loginSchema.safeParse({ email, password });\n if (!result.success) {\n const errors = result.error.flatten().fieldErrors;\n setFieldErrors({ email: errors.email?.[0], password: errors.password?.[0] });\n return;\n }\n setFieldErrors({});\n await onLogin(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 <div className=\"flex items-center justify-between\">\n <Label htmlFor={passwordId}>Mật khẩu</Label>\n {onForgotPassword && (\n <Button type=\"button\" variant=\"link\" size=\"sm\" className=\"h-auto p-0 text-xs\" onClick={onForgotPassword}>\n Quên mật khẩu?\n </Button>\n )}\n </div>\n <div className=\"relative\">\n <Input\n id={passwordId}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-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 && <p className=\"text-destructive text-xs\">{fieldErrors.password}</p>}\n </div>\n\n <Button type=\"submit\" isLoading={isLoading} className=\"w-full\">\n Đăng nhập\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 {onRegister && (\n <div className=\"flex justify-center gap-1 text-muted-foreground text-sm\">\n <span>Chưa có tài khoản?</span>\n <Button variant=\"link\" size=\"sm\" className=\"h-auto p-0\" onClick={onRegister}>\n Đăng ký\n </Button>\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"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"}
|
package/dist/pages/LoginPage.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
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(1,`Vui lòng nhập mật khẩu`)}),y=({open:_,onOpenChange:y,onLogin:b,onForgotPassword:x,onRegister:S,isLoading:C=!1,errorMessage:w,title:T=`Đăng nhập`,subtitle:E=`Nhập thông tin để tiếp tục`})=>{let D=p(),O=p(),[k,A]=m(``),[j,M]=m(``),[N,P]=m(!1),[F,I]=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:T}),h(i,{children:E})]})]}),g(`form`,{onSubmit:async e=>{e.preventDefault();let t=v.safeParse({email:k,password:j});if(!t.success){let e=t.error.flatten().fieldErrors;I({email:e.email?.[0],password:e.password?.[0]});return}I({}),await b(k,j)},noValidate:!0,className:`flex flex-col gap-4`,children:[w&&h(l,{variant:`destructive`,children:h(c,{children:w})}),g(`div`,{className:`flex flex-col gap-1.5`,children:[h(u,{htmlFor:D,children:`Email`}),h(s,{id:D,type:`email`,autoComplete:`email`,placeholder:`you@example.com`,value:k,onChange:e=>A(e.target.value),"aria-invalid":!!F.email,disabled:C}),F.email&&h(`p`,{className:`text-destructive text-xs`,children:F.email})]}),g(`div`,{className:`flex flex-col gap-1.5`,children:[g(`div`,{className:`flex items-center justify-between`,children:[h(u,{htmlFor:O,children:`Mật khẩu`}),x&&h(e,{type:`button`,variant:`link`,size:`sm`,className:`h-auto p-0 text-xs`,onClick:x,children:`Quên mật khẩu?`})]}),g(`div`,{className:`relative`,children:[h(s,{id:O,type:N?`text`:`password`,autoComplete:`current-password`,placeholder:`••••••••`,value:j,onChange:e=>M(e.target.value),"aria-invalid":!!F.password,disabled:C,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(),P(e=>!e)},"aria-label":N?`Ẩn mật khẩu`:`Hiện mật khẩu`,children:h(N?f:d,{size:16})})]}),F.password&&h(`p`,{className:`text-destructive text-xs`,children:F.password})]}),h(e,{type:`submit`,isLoading:C,className:`w-full`,children:`Đăng nhập`}),h(e,{type:`button`,variant:`outline`,className:`w-full`,disabled:C,onClick:()=>y(!1),children:`Đóng hộp thoại`})]}),S&&g(`div`,{className:`flex justify-center gap-1 text-muted-foreground text-sm`,children:[h(`span`,{children:`Chưa có tài khoản?`}),h(e,{variant:`link`,size:`sm`,className:`h-auto p-0`,onClick:S,children:`Đăng ký`})]})]})})};export{y as LoginPage};
|
|
2
|
-
//# sourceMappingURL=LoginPage.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoginPage.mjs","names":[],"sources":["../../packages/components/pages/LoginPage.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 LoginPageProps {\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 login credentials */\n onLogin: (email: string, password: string) => Promise<void> | void;\n /** Called when the \"Quên mật khẩu?\" link is clicked */\n onForgotPassword?: () => void;\n /** Called when the \"Đăng ký\" link is clicked */\n onRegister?: () => 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 nhập\" */\n title?: string;\n /** Dialog subheading. Default: \"Nhập thông tin để tiếp tục\" */\n subtitle?: string;\n}\n\nconst loginSchema = z.object({\n email: z.string().min(1, 'Vui lòng nhập email').email('Email không hợp lệ'),\n password: z.string().min(1, 'Vui lòng nhập mật khẩu'),\n});\n\n/**\n * Modal login dialog for the client authentication flow.\n *\n * @example\n * ```tsx\n * import { LoginPage } from '@customafk/lunas-ui/pages/LoginPage';\n *\n * <LoginPage\n * open={open}\n * onOpenChange={setOpen}\n * onLogin={async (email, password) => {\n * await authService.login(email, password);\n * setOpen(false);\n * }}\n * onRegister={() => { setOpen(false); setRegisterOpen(true); }}\n * />\n * ```\n */\nexport const LoginPage = ({\n open,\n onOpenChange,\n onLogin,\n onForgotPassword,\n onRegister,\n isLoading = false,\n errorMessage,\n title = 'Đăng nhập',\n subtitle = 'Nhập thông tin để tiếp tục',\n}: LoginPageProps) => {\n const emailId = useId();\n const passwordId = useId();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [fieldErrors, setFieldErrors] = useState<{ email?: string; password?: string }>({});\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const result = loginSchema.safeParse({ email, password });\n if (!result.success) {\n const errors = result.error.flatten().fieldErrors;\n setFieldErrors({ email: errors.email?.[0], password: errors.password?.[0] });\n return;\n }\n setFieldErrors({});\n await onLogin(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 <div className=\"flex items-center justify-between\">\n <Label htmlFor={passwordId}>Mật khẩu</Label>\n {onForgotPassword && (\n <Button type=\"button\" variant=\"link\" size=\"sm\" className=\"h-auto p-0 text-xs\" onClick={onForgotPassword}>\n Quên mật khẩu?\n </Button>\n )}\n </div>\n <div className=\"relative\">\n <Input\n id={passwordId}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-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 && <p className=\"text-destructive text-xs\">{fieldErrors.password}</p>}\n </div>\n\n <Button type=\"submit\" isLoading={isLoading} className=\"w-full\">\n Đăng nhập\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 {onRegister && (\n <div className=\"flex justify-center gap-1 text-muted-foreground text-sm\">\n <span>Chưa có tài khoản?</span>\n <Button variant=\"link\" size=\"sm\" className=\"h-auto p-0\" onClick={onRegister}>\n Đăng ký\n </Button>\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n"],"mappings":"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"}
|